You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jetspeed-dev@portals.apache.org by dd...@apache.org on 2009/01/07 17:33:28 UTC

svn commit: r732386 [1/2] - in /portals/jetspeed-2/portal/trunk: components/jetspeed-security/src/main/java/JETSPEED-INF/ojb/ components/jetspeed-security/src/main/java/org/apache/jetspeed/security/impl/ components/jetspeed-security/src/main/java/org/a...

Author: ddam
Date: Wed Jan  7 08:33:26 2009
New Revision: 732386

URL: http://svn.apache.org/viewvc?rev=732386&view=rev
Log:
JS2-923 : Security Domains

Added:
    portals/jetspeed-2/portal/trunk/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/impl/SecurityDomainImpl.java   (with props)
    portals/jetspeed-2/portal/trunk/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/spi/JetspeedDomainPrincipalAccessManager.java   (with props)
    portals/jetspeed-2/portal/trunk/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/spi/SecurityDomainAccessManager.java   (with props)
    portals/jetspeed-2/portal/trunk/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/spi/SecurityDomainStorageManager.java   (with props)
    portals/jetspeed-2/portal/trunk/components/jetspeed-serializer/src/main/java/org/apache/jetspeed/serializer/objects/JSSecurityDomain.java   (with props)
    portals/jetspeed-2/portal/trunk/components/jetspeed-serializer/src/main/java/org/apache/jetspeed/serializer/objects/JSSecurityDomains.java   (with props)
    portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/security/SecurityDomain.java   (with props)
Modified:
    portals/jetspeed-2/portal/trunk/components/jetspeed-security/src/main/java/JETSPEED-INF/ojb/security_repository.xml
    portals/jetspeed-2/portal/trunk/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/impl/TransientJetspeedPrincipal.java
    portals/jetspeed-2/portal/trunk/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/spi/UserPasswordCredentialAccessManager.java
    portals/jetspeed-2/portal/trunk/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/spi/impl/JetspeedSecurityPersistenceManager.java
    portals/jetspeed-2/portal/trunk/components/jetspeed-security/src/main/java/org/apache/jetspeed/serializer/JetspeedSecuritySerializer.java
    portals/jetspeed-2/portal/trunk/components/jetspeed-security/src/test/java/org/apache/jetspeed/security/stubs/StubJetspeedPrincipal.java
    portals/jetspeed-2/portal/trunk/components/jetspeed-serializer/src/main/java/org/apache/jetspeed/serializer/JetspeedSerializerImpl.java
    portals/jetspeed-2/portal/trunk/components/jetspeed-serializer/src/main/java/org/apache/jetspeed/serializer/objects/JSSnapshot.java
    portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/exception/JetspeedExceptionMessages.properties
    portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/exception/JetspeedExceptionMessages_en.properties
    portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/exception/JetspeedExceptionMessages_ja.properties
    portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/exception/JetspeedExceptionMessages_ko.properties
    portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/exception/JetspeedExceptionMessages_nl.properties
    portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/exception/JetspeedExceptionMessages_ua.properties
    portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/exception/JetspeedExceptionMessages_zh.properties
    portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/exception/JetspeedExceptionMessages_zh_TW.properties
    portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/security/JetspeedPrincipal.java
    portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/security/SecurityException.java
    portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/ddl-schema/security-schema.xml
    portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/assembly/security-spi.xml
    portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/assembly/serializer.xml
    portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/seed/j2-seed.xml
    portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/seed/min/j2-seed.xml

Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-security/src/main/java/JETSPEED-INF/ojb/security_repository.xml
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-security/src/main/java/JETSPEED-INF/ojb/security_repository.xml?rev=732386&r1=732385&r2=732386&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-security/src/main/java/JETSPEED-INF/ojb/security_repository.xml (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-security/src/main/java/JETSPEED-INF/ojb/security_repository.xml Wed Jan  7 08:33:26 2009
@@ -289,6 +289,11 @@
           nullable="false"
       >
       </field-descriptor>
+      <field-descriptor 
+          name="domainId" 
+          nullable="false" 
+          jdbc-type="BIGINT"
+          column="domain_id"/>
       <collection-descriptor
           name="attributes"
           element-class-ref="org.apache.jetspeed.security.impl.SecurityAttributeValue"
@@ -445,4 +450,49 @@
       </reference-descriptor>
   </class-descriptor>
 
+<!-- 
+    SECURITY DOMAIN
+-->
+    <!--
+        - J E T S P E E D   P R I N C I P A L   A S S O C I A T I O N
+    -->
+    <class-descriptor
+        class="org.apache.jetspeed.security.impl.SecurityDomainImpl"
+        table="SECURITY_DOMAIN"        
+        >
+        <documentation>Security Domain</documentation>
+        <field-descriptor
+            name="domainId"            
+            autoincrement="true"            
+            column="domain_id"
+            jdbc-type="BIGINT"
+            primarykey="true"
+        />
+        <field-descriptor
+            name="name"
+            column="domain_name"
+            jdbc-type="VARCHAR"
+            length="30"
+        />
+        <field-descriptor
+            name="ownerDomainId"
+            column="owner_domain_id"
+            jdbc-type="BIGINT"            
+        />
+        <field-descriptor
+            name="remote"
+            column="remote"
+            jdbc-type="INTEGER"
+            conversion="org.apache.ojb.broker.accesslayer.conversions.Boolean2IntFieldConversion"
+            nullable="false"
+        />
+        <field-descriptor
+            name="enabled"
+            column="enabled"
+            jdbc-type="INTEGER"
+            conversion="org.apache.ojb.broker.accesslayer.conversions.Boolean2IntFieldConversion"
+            nullable="false"
+        />
+    </class-descriptor>
+    
 </descriptor-repository>

Added: portals/jetspeed-2/portal/trunk/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/impl/SecurityDomainImpl.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/impl/SecurityDomainImpl.java?rev=732386&view=auto
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/impl/SecurityDomainImpl.java (added)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/impl/SecurityDomainImpl.java Wed Jan  7 08:33:26 2009
@@ -0,0 +1,87 @@
+/* 
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jetspeed.security.impl;
+
+import org.apache.jetspeed.security.SecurityDomain;
+
+
+/**
+ * @author <a href="mailto:ddam@apache.org">Dennis Dam</a>
+ * @version $Id$
+ */
+public class SecurityDomainImpl implements SecurityDomain
+{
+
+    private Long domainId;
+    private String name;
+    private Long ownerDomainId;
+    private boolean remote;
+    private boolean enabled=true;
+    
+    public Long getDomainId()
+    {
+        return domainId;
+    }
+    
+    public void setDomainId(Long domainId)
+    {
+        this.domainId = domainId;
+    }
+    
+    public String getName()
+    {
+        return name;
+    }
+    
+    public void setName(String name)
+    {
+        this.name = name;
+    }
+    
+    public Long getOwnerDomainId()
+    {
+        return ownerDomainId;
+    }
+    
+    public void setOwnerDomainId(Long ownerDomainId)
+    {
+        this.ownerDomainId = ownerDomainId;
+    }
+    
+    public boolean isRemote()
+    {
+        return remote;
+    }
+    
+    public void setRemote(boolean remote)
+    {
+        this.remote = remote;
+    }
+
+    
+    public boolean isEnabled()
+    {
+        return enabled;
+    }
+
+    
+    public void setEnabled(boolean enabled)
+    {
+        this.enabled = enabled;
+    }
+    
+}

Propchange: portals/jetspeed-2/portal/trunk/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/impl/SecurityDomainImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: portals/jetspeed-2/portal/trunk/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/impl/SecurityDomainImpl.java
------------------------------------------------------------------------------
    svn:keywords = Id

Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/impl/TransientJetspeedPrincipal.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/impl/TransientJetspeedPrincipal.java?rev=732386&r1=732385&r2=732386&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/impl/TransientJetspeedPrincipal.java (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/impl/TransientJetspeedPrincipal.java Wed Jan  7 08:33:26 2009
@@ -41,6 +41,7 @@
     
     protected transient JetspeedPrincipalType jpt;
     protected transient SecurityAttributes sa;
+    private Long domainId;
     
     public static void setJetspeedPrincipalManagerProvider(JetspeedPrincipalManagerProvider jpmp)
     {
@@ -166,4 +167,13 @@
     {
         return getType().getName()+": "+getName()+" (id: "+(getId())+", transient: "+isTransient()+", mapped: "+isMapped()+")";
     }
+    
+    public Long getDomainId()
+    {
+        return domainId;
+    }
+
+    public void setDomainId(Long domainId){
+        this.domainId=domainId;
+    }
 }

Added: portals/jetspeed-2/portal/trunk/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/spi/JetspeedDomainPrincipalAccessManager.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/spi/JetspeedDomainPrincipalAccessManager.java?rev=732386&view=auto
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/spi/JetspeedDomainPrincipalAccessManager.java (added)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/spi/JetspeedDomainPrincipalAccessManager.java Wed Jan  7 08:33:26 2009
@@ -0,0 +1,57 @@
+/* 
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jetspeed.security.spi;
+
+import java.util.List;
+
+import org.apache.jetspeed.security.JetspeedPrincipal;
+import org.apache.jetspeed.security.JetspeedPrincipalType;
+
+
+/**
+ * @author <a href="mailto:ddam@apache.org">Dennis Dam</a>
+ * @version $Id$
+ */
+public interface JetspeedDomainPrincipalAccessManager
+{
+    boolean principalExists(String principalName, JetspeedPrincipalType type, Long securityDomain);
+
+    JetspeedPrincipal getPrincipal(String principalName, JetspeedPrincipalType type, Long securityDomain);
+
+    List<JetspeedPrincipal> getPrincipals(String nameFilter, JetspeedPrincipalType type, Long securityDomain);
+
+    List<JetspeedPrincipal> getPrincipalsByAttribute(String attributeName, String attributeValue, JetspeedPrincipalType type, Long securityDomain);
+
+    List<String> getPrincipalNames(String nameFilter, JetspeedPrincipalType type, Long securityDomain);
+    
+    List<JetspeedPrincipal> getAssociatedFrom(String principalFromName, JetspeedPrincipalType from, JetspeedPrincipalType to, String associationName, Long securityDomain);
+
+    List<JetspeedPrincipal> getAssociatedFrom(Long principalFromId, JetspeedPrincipalType from, JetspeedPrincipalType to, String associationName, Long securityDomain);
+
+    List<JetspeedPrincipal> getAssociatedTo(String principalToName, JetspeedPrincipalType from, JetspeedPrincipalType to, String associationName, Long securityDomain);
+
+    List<JetspeedPrincipal> getAssociatedTo(Long principalToId, JetspeedPrincipalType from, JetspeedPrincipalType to, String associationName, Long securityDomain);
+
+    List<String> getAssociatedNamesFrom(String principalFromName, JetspeedPrincipalType from, JetspeedPrincipalType to, String associationName, Long securityDomain);
+
+    List<String> getAssociatedNamesFrom(Long principalFromId, JetspeedPrincipalType from, JetspeedPrincipalType to, String associationName, Long securityDomain);
+
+    List<String> getAssociatedNamesTo(String principalToName, JetspeedPrincipalType from, JetspeedPrincipalType to, String associationName, Long securityDomain);
+
+    List<String> getAssociatedNamesTo(Long principalToId, JetspeedPrincipalType from, JetspeedPrincipalType to, String associationName, Long securityDomain);
+
+}

Propchange: portals/jetspeed-2/portal/trunk/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/spi/JetspeedDomainPrincipalAccessManager.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: portals/jetspeed-2/portal/trunk/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/spi/JetspeedDomainPrincipalAccessManager.java
------------------------------------------------------------------------------
    svn:keywords = Id

Added: portals/jetspeed-2/portal/trunk/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/spi/SecurityDomainAccessManager.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/spi/SecurityDomainAccessManager.java?rev=732386&view=auto
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/spi/SecurityDomainAccessManager.java (added)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/spi/SecurityDomainAccessManager.java Wed Jan  7 08:33:26 2009
@@ -0,0 +1,36 @@
+/* 
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jetspeed.security.spi;
+
+import java.util.Collection;
+
+import org.apache.jetspeed.security.SecurityDomain;
+
+
+/**
+ * @author <a href="mailto:ddam@apache.org">Dennis Dam</a>
+ * @version $Id$
+ */
+public interface SecurityDomainAccessManager
+{
+
+    SecurityDomain getDomain(Long domainId);
+    SecurityDomain getDomainByName(String name);
+    Collection<SecurityDomain> getAllDomains();
+    Collection<SecurityDomain> getDomainsOwnedBy(Long ownerDomainId);
+    
+}

Propchange: portals/jetspeed-2/portal/trunk/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/spi/SecurityDomainAccessManager.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: portals/jetspeed-2/portal/trunk/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/spi/SecurityDomainAccessManager.java
------------------------------------------------------------------------------
    svn:keywords = Id

Added: portals/jetspeed-2/portal/trunk/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/spi/SecurityDomainStorageManager.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/spi/SecurityDomainStorageManager.java?rev=732386&view=auto
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/spi/SecurityDomainStorageManager.java (added)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/spi/SecurityDomainStorageManager.java Wed Jan  7 08:33:26 2009
@@ -0,0 +1,34 @@
+/* 
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jetspeed.security.spi;
+
+import org.apache.jetspeed.security.SecurityDomain;
+import org.apache.jetspeed.security.SecurityException;
+
+
+/**
+ * @author <a href="mailto:ddam@apache.org">Dennis Dam</a>
+ * @version $Id$
+ */
+public interface SecurityDomainStorageManager
+{
+
+    public void addDomain(SecurityDomain domain) throws SecurityException;
+    
+    public void removeDomain(SecurityDomain domain) throws SecurityException;
+    
+}

Propchange: portals/jetspeed-2/portal/trunk/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/spi/SecurityDomainStorageManager.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: portals/jetspeed-2/portal/trunk/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/spi/SecurityDomainStorageManager.java
------------------------------------------------------------------------------
    svn:keywords = Id

Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/spi/UserPasswordCredentialAccessManager.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/spi/UserPasswordCredentialAccessManager.java?rev=732386&r1=732385&r2=732386&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/spi/UserPasswordCredentialAccessManager.java (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/spi/UserPasswordCredentialAccessManager.java Wed Jan  7 08:33:26 2009
@@ -39,4 +39,9 @@
     PasswordCredential getPasswordCredential(String userName);
     void loadPasswordCredentialUser(PasswordCredential credential);
     List<PasswordCredential> getHistoricPasswordCredentials(User user);
+
+
+    PasswordCredential getPasswordCredential(String userName, Long securityDomain);
+    List<PasswordCredential> getHistoricPasswordCredentials(User user, Long securityDomain);
+
 }

Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/spi/impl/JetspeedSecurityPersistenceManager.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/spi/impl/JetspeedSecurityPersistenceManager.java?rev=732386&r1=732385&r2=732386&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/spi/impl/JetspeedSecurityPersistenceManager.java (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/spi/impl/JetspeedSecurityPersistenceManager.java Wed Jan  7 08:33:26 2009
@@ -19,6 +19,7 @@
 import java.io.Serializable;
 import java.sql.SQLException;
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Set;
@@ -30,15 +31,21 @@
 import org.apache.jetspeed.security.JetspeedPrincipalAssociationReference;
 import org.apache.jetspeed.security.JetspeedPrincipalType;
 import org.apache.jetspeed.security.PasswordCredential;
+import org.apache.jetspeed.security.SecurityDomain;
 import org.apache.jetspeed.security.SecurityException;
 import org.apache.jetspeed.security.User;
 import org.apache.jetspeed.security.impl.PersistentJetspeedPrincipal;
+import org.apache.jetspeed.security.impl.SecurityDomainImpl;
+import org.apache.jetspeed.security.impl.TransientJetspeedPrincipal;
+import org.apache.jetspeed.security.spi.JetspeedDomainPrincipalAccessManager;
 import org.apache.jetspeed.security.spi.JetspeedPermissionAccessManager;
 import org.apache.jetspeed.security.spi.JetspeedPermissionStorageManager;
 import org.apache.jetspeed.security.spi.JetspeedPrincipalAccessManager;
 import org.apache.jetspeed.security.spi.JetspeedPrincipalAssociationStorageManager;
 import org.apache.jetspeed.security.spi.JetspeedPrincipalStorageManager;
 import org.apache.jetspeed.security.spi.PersistentJetspeedPermission;
+import org.apache.jetspeed.security.spi.SecurityDomainAccessManager;
+import org.apache.jetspeed.security.spi.SecurityDomainStorageManager;
 import org.apache.jetspeed.security.spi.UserPasswordCredentialAccessManager;
 import org.apache.jetspeed.security.spi.UserPasswordCredentialStorageManager;
 import org.apache.ojb.broker.PersistenceBroker;
@@ -51,6 +58,7 @@
 import org.apache.ojb.broker.query.ReportQueryByCriteria;
 import org.apache.ojb.broker.util.collections.ManageableArrayList;
 import org.springframework.dao.DataIntegrityViolationException;
+import org.springframework.orm.ObjectRetrievalFailureException;
 import org.springframework.orm.ojb.PersistenceBrokerCallback;
 
 /**
@@ -59,9 +67,14 @@
 public class JetspeedSecurityPersistenceManager
     extends InitablePersistenceBrokerDaoSupport
     implements Serializable,JetspeedPrincipalAccessManager,
-                JetspeedPrincipalStorageManager, UserPasswordCredentialStorageManager, UserPasswordCredentialAccessManager,
-                JetspeedPrincipalAssociationStorageManager, JetspeedPermissionAccessManager, JetspeedPermissionStorageManager
+                JetspeedPrincipalStorageManager, JetspeedDomainPrincipalAccessManager, UserPasswordCredentialStorageManager, UserPasswordCredentialAccessManager,
+                JetspeedPrincipalAssociationStorageManager, JetspeedPermissionAccessManager, JetspeedPermissionStorageManager, 
+                SecurityDomainStorageManager, SecurityDomainAccessManager
 {
+    private static final long serialVersionUID = -2689340557699526023L;
+	
+    private Long defaultSecurityDomainId;
+    
     private static class ManagedListByQueryCallback implements PersistenceBrokerCallback
     {
         private Query query;
@@ -86,69 +99,99 @@
     {
         if (principal.getId() == null)
         {
-            return principalExists(principal.getName(), principal.getType());
+            if (principal.getDomainId() != null){
+                return principalExists(principal.getName(), principal.getType(), principal.getDomainId());    
+            } else {
+                return principalExists(principal.getName(), principal.getType());
+            }
+            
         }
         Criteria criteria = new Criteria();
         criteria.addEqualTo("id", principal.getId());
         criteria.addEqualTo("type", principal.getType().getName());
+        criteria.addEqualTo("domainId", principal.getDomainId());
         Query query = QueryFactory.newQuery(PersistentJetspeedPrincipal.class,criteria);
         return getPersistenceBrokerTemplate().getCount(query) == 1;
     }
 
+	public List<JetspeedPrincipal> getAssociatedFrom(String principalFromName, JetspeedPrincipalType from, JetspeedPrincipalType to, String associationName){
+	    return getAssociatedFrom(principalFromName, from, to, associationName, getDefaultSecurityDomainId());
+	}
     //
     // JetspeedPrincipalAccessManager interface implementation
     //
     @SuppressWarnings("unchecked") 
-    public List<JetspeedPrincipal> getAssociatedFrom(String principalFromName, JetspeedPrincipalType from, JetspeedPrincipalType to, String associationName)
+    public List<JetspeedPrincipal> getAssociatedFrom(String principalFromName, JetspeedPrincipalType from, JetspeedPrincipalType to, String associationName, Long securityDomain)
     {
         Criteria criteria = new Criteria();
         criteria.addEqualTo("associationsTo.associationName", associationName);
         criteria.addEqualTo("associationsTo.from.name", principalFromName);
         criteria.addEqualTo("type", to.getName());
+        criteria.addEqualTo("associationsTo.to.domainId", securityDomain);
         Query query = QueryFactory.newQuery(PersistentJetspeedPrincipal.class, criteria);
         return (List<JetspeedPrincipal>) getPersistenceBrokerTemplate().execute(new ManagedListByQueryCallback(query));
     }
 
+    public List<JetspeedPrincipal> getAssociatedTo(String principalToName, JetspeedPrincipalType from, JetspeedPrincipalType to, String associationName){
+        return getAssociatedTo(principalToName, from, to, associationName, getDefaultSecurityDomainId());
+    }
+
     @SuppressWarnings("unchecked") 
-    public List<JetspeedPrincipal> getAssociatedTo(String principalToName, JetspeedPrincipalType from, JetspeedPrincipalType to, String associationName)
+    public List<JetspeedPrincipal> getAssociatedTo(String principalToName, JetspeedPrincipalType from, JetspeedPrincipalType to, String associationName, Long securityDomain)
     {
         Criteria criteria = new Criteria();
         criteria.addEqualTo("associationsFrom.associationName", associationName);
         criteria.addEqualTo("associationsFrom.to.name", principalToName);
         criteria.addEqualTo("type", from.getName());
+        criteria.addEqualTo("associationsFrom.from.domainId", securityDomain);
         Query query = QueryFactory.newQuery(PersistentJetspeedPrincipal.class, criteria);
         return (List<JetspeedPrincipal>) getPersistenceBrokerTemplate().execute(new ManagedListByQueryCallback(query));
     }
 
+    public List<JetspeedPrincipal> getAssociatedFrom(Long principalFromId, JetspeedPrincipalType from, JetspeedPrincipalType to, String associationName){
+        return getAssociatedFrom(principalFromId, from, to, associationName, getDefaultSecurityDomainId());
+    }
+
     @SuppressWarnings("unchecked") 
-    public List<JetspeedPrincipal> getAssociatedFrom(Long principalFromId, JetspeedPrincipalType from, JetspeedPrincipalType to, String associationName)
+    public List<JetspeedPrincipal> getAssociatedFrom(Long principalFromId, JetspeedPrincipalType from, JetspeedPrincipalType to, String associationName, Long securityDomain)
     {
         Criteria criteria = new Criteria();
         criteria.addEqualTo("associationsTo.associationName", associationName);
         criteria.addEqualTo("associationsTo.from.id", principalFromId);
         criteria.addEqualTo("type", to.getName());
+        criteria.addEqualTo("associationsTo.to.domainId", securityDomain);
         Query query = QueryFactory.newQuery(PersistentJetspeedPrincipal.class, criteria);
         return (List<JetspeedPrincipal>) getPersistenceBrokerTemplate().execute(new ManagedListByQueryCallback(query));
     }
 
+    public List<JetspeedPrincipal> getAssociatedTo(Long principalToId, JetspeedPrincipalType from, JetspeedPrincipalType to, String associationName){
+        return getAssociatedTo(principalToId, from, to, associationName, getDefaultSecurityDomainId());
+    }
+
     @SuppressWarnings("unchecked") 
-    public List<JetspeedPrincipal> getAssociatedTo(Long principalToId, JetspeedPrincipalType from, JetspeedPrincipalType to, String associationName)
+    public List<JetspeedPrincipal> getAssociatedTo(Long principalToId, JetspeedPrincipalType from, JetspeedPrincipalType to, String associationName, Long securityDomain)
     {
         Criteria criteria = new Criteria();
         criteria.addEqualTo("associationsFrom.associationName", associationName);
         criteria.addEqualTo("associationsFrom.to.id", principalToId);
         criteria.addEqualTo("type", from.getName());
+        criteria.addEqualTo("associationsFrom.from.domainId", securityDomain);
         Query query = QueryFactory.newQuery(PersistentJetspeedPrincipal.class, criteria);
         return (List<JetspeedPrincipal>) getPersistenceBrokerTemplate().execute(new ManagedListByQueryCallback(query));
     }
 
+    public List<String> getAssociatedNamesFrom(String principalFromName, JetspeedPrincipalType from, JetspeedPrincipalType to, String associationName){
+        return getAssociatedNamesFrom(principalFromName, from, to, associationName, getDefaultSecurityDomainId());
+    }
+
     @SuppressWarnings("unchecked") 
-    public List<String> getAssociatedNamesFrom(String principalFromName, JetspeedPrincipalType from, JetspeedPrincipalType to, String associationName)
+    public List<String> getAssociatedNamesFrom(String principalFromName, JetspeedPrincipalType from, JetspeedPrincipalType to, String associationName, Long securityDomain)
     {
         Criteria criteria = new Criteria();
         criteria.addEqualTo("associationsTo.associationName", associationName);
         criteria.addEqualTo("associationsTo.from.name", principalFromName);
         criteria.addEqualTo("type", to.getName());
+        criteria.addEqualTo("associationsTo.to.domainId", securityDomain);
         ReportQueryByCriteria query = QueryFactory.newReportQuery(PersistentJetspeedPrincipal.class, criteria);
         query.setAttributes(new String[]{"name"});
         ArrayList<String> names = new ArrayList<String>();
@@ -159,13 +202,18 @@
         return names;
     }
 
+    public List<String> getAssociatedNamesFrom(Long principalFromId, JetspeedPrincipalType from, JetspeedPrincipalType to, String associationName){
+        return getAssociatedNamesFrom(principalFromId, from, to, associationName, getDefaultSecurityDomainId());
+    }
+
     @SuppressWarnings("unchecked") 
-    public List<String> getAssociatedNamesFrom(Long principalFromId, JetspeedPrincipalType from, JetspeedPrincipalType to, String associationName)
+    public List<String> getAssociatedNamesFrom(Long principalFromId, JetspeedPrincipalType from, JetspeedPrincipalType to, String associationName, Long securityDomain)
     {
         Criteria criteria = new Criteria();
         criteria.addEqualTo("associationsTo.associationName", associationName);
         criteria.addEqualTo("associationsTo.from.id", principalFromId);
         criteria.addEqualTo("type", to.getName());
+        criteria.addEqualTo("associationsTo.to.domainId", securityDomain);
         ReportQueryByCriteria query = QueryFactory.newReportQuery(PersistentJetspeedPrincipal.class, criteria);
         query.setAttributes(new String[]{"name"});
         ArrayList<String> names = new ArrayList<String>();
@@ -176,13 +224,18 @@
         return names;
     }
 
+    public List<String> getAssociatedNamesTo(String principalToName, JetspeedPrincipalType from, JetspeedPrincipalType to, String associationName){
+        return getAssociatedNamesTo(principalToName, from, to, associationName, getDefaultSecurityDomainId());
+    }
+
     @SuppressWarnings("unchecked") 
-    public List<String> getAssociatedNamesTo(String principalToName, JetspeedPrincipalType from, JetspeedPrincipalType to, String associationName)
+    public List<String> getAssociatedNamesTo(String principalToName, JetspeedPrincipalType from, JetspeedPrincipalType to, String associationName, Long securityDomain)
     {
         Criteria criteria = new Criteria();
         criteria.addEqualTo("associationsFrom.associationName", associationName);
         criteria.addEqualTo("associationsFrom.to.name", principalToName);
         criteria.addEqualTo("type", from.getName());
+        criteria.addEqualTo("associationsFrom.from.domainId", securityDomain);
         ReportQueryByCriteria query = QueryFactory.newReportQuery(PersistentJetspeedPrincipal.class, criteria);
         query.setAttributes(new String[]{"name"});
         ArrayList<String> names = new ArrayList<String>();
@@ -193,13 +246,18 @@
         return names;
     }
 
+    public List<String> getAssociatedNamesTo(Long principalToId, JetspeedPrincipalType from, JetspeedPrincipalType to, String associationName){
+        return getAssociatedNamesTo(principalToId, from, to, associationName, getDefaultSecurityDomainId());
+    }
+
     @SuppressWarnings("unchecked") 
-    public List<String> getAssociatedNamesTo(Long principalToId, JetspeedPrincipalType from, JetspeedPrincipalType to, String associationName)
+    public List<String> getAssociatedNamesTo(Long principalToId, JetspeedPrincipalType from, JetspeedPrincipalType to, String associationName, Long securityDomain)
     {
         Criteria criteria = new Criteria();
         criteria.addEqualTo("associationsFrom.associationName", associationName);
         criteria.addEqualTo("associationsFrom.to.id", principalToId);
         criteria.addEqualTo("type", from.getName());
+        criteria.addEqualTo("associationsFrom.from.domainId", securityDomain);
         ReportQueryByCriteria query = QueryFactory.newReportQuery(PersistentJetspeedPrincipal.class, criteria);
         query.setAttributes(new String[]{"name"});
         ArrayList<String> names = new ArrayList<String>();
@@ -217,22 +275,34 @@
 
     public JetspeedPrincipal getPrincipal(String principalName, JetspeedPrincipalType type)
     {
+        return getPrincipal(principalName, type, getDefaultSecurityDomainId());
+    }
+    
+    public JetspeedPrincipal getPrincipal(String principalName, JetspeedPrincipalType type, Long securityDomain)
+    {
         Criteria criteria = new Criteria();
         criteria.addEqualTo("name", principalName);
         criteria.addEqualTo("type", type.getName());
+        criteria.addEqualTo("domainId", securityDomain);
         Query query = QueryFactory.newQuery(PersistentJetspeedPrincipal.class,criteria);
         return (JetspeedPrincipal)getPersistenceBrokerTemplate().getObjectByQuery(query);
     }
 
-    @SuppressWarnings("unchecked") 
     public List<String> getPrincipalNames(String nameFilter, JetspeedPrincipalType type)
     {
+        return getPrincipalNames(nameFilter, type, getDefaultSecurityDomainId());
+    }
+
+    @SuppressWarnings("unchecked") 
+    public List<String> getPrincipalNames(String nameFilter, JetspeedPrincipalType type, Long securityDomain)
+    {
         Criteria criteria = new Criteria();
         if (nameFilter != null && nameFilter.length() > 0)
         {
             criteria.addLike("name", nameFilter+"%");
         }
         criteria.addEqualTo("type", type.getName());
+        criteria.addEqualTo("domainId", securityDomain);
         ReportQueryByCriteria query = QueryFactory.newReportQuery(PersistentJetspeedPrincipal.class,criteria);
         query.setAttributes(new String[]{"name"});
         ArrayList<String> names = new ArrayList<String>();
@@ -243,35 +313,53 @@
         return names;
     }
 
-    @SuppressWarnings("unchecked") 
     public List<JetspeedPrincipal> getPrincipals(String nameFilter, JetspeedPrincipalType type)
     {
+        return getPrincipals(nameFilter, type, getDefaultSecurityDomainId());
+    }
+    
+    @SuppressWarnings("unchecked") 
+    public List<JetspeedPrincipal> getPrincipals(String nameFilter, JetspeedPrincipalType type, Long securityDomain)
+    {
         Criteria criteria = new Criteria();
         if (nameFilter != null && nameFilter.length() > 0)
         {
             criteria.addLike("name", nameFilter+"%");
         }
         criteria.addEqualTo("type", type.getName());
+        criteria.addEqualTo("domainId", securityDomain);
         Query query = QueryFactory.newQuery(PersistentJetspeedPrincipal.class,criteria);
         return (List<JetspeedPrincipal>) getPersistenceBrokerTemplate().execute(new ManagedListByQueryCallback(query));
     }
 
-    @SuppressWarnings("unchecked") 
     public List<JetspeedPrincipal> getPrincipalsByAttribute(String attributeName, String attributeValue, JetspeedPrincipalType type)
     {
+        return getPrincipalsByAttribute(attributeName, attributeValue, type, getDefaultSecurityDomainId());
+    }
+    
+    @SuppressWarnings("unchecked") 
+    public List<JetspeedPrincipal> getPrincipalsByAttribute(String attributeName, String attributeValue, JetspeedPrincipalType type, Long securityDomain)
+    {
         Criteria criteria = new Criteria();
         criteria.addEqualTo("attributes.name", attributeName);
         criteria.addEqualTo("attributes.value", attributeValue);
         criteria.addEqualTo("type", type.getName());
+        criteria.addEqualTo("domainId", securityDomain);
         Query query = QueryFactory.newQuery(PersistentJetspeedPrincipal.class,criteria);
         return (List<JetspeedPrincipal>) getPersistenceBrokerTemplate().execute(new ManagedListByQueryCallback(query));
     }
 
     public boolean principalExists(String principalName, JetspeedPrincipalType type)
     {
+        return principalExists(principalName, type, getDefaultSecurityDomainId());
+    }
+    
+    public boolean principalExists(String principalName, JetspeedPrincipalType type, Long securityDomain)
+    {
         Criteria criteria = new Criteria();
         criteria.addEqualTo("name", principalName);
         criteria.addEqualTo("type", type.getName());
+        criteria.addEqualTo("domainId", securityDomain);
         Query query = QueryFactory.newQuery(PersistentJetspeedPrincipal.class,criteria);
         return getPersistenceBrokerTemplate().getCount(query) == 1;
     }
@@ -282,6 +370,9 @@
     public void addPrincipal(JetspeedPrincipal principal, Set<JetspeedPrincipalAssociationReference> associations)
         throws SecurityException
     {
+        if (principal.getDomainId() == null && principal instanceof TransientJetspeedPrincipal){
+            ((TransientJetspeedPrincipal)principal).setDomainId(getDefaultSecurityDomainId());
+        }
         if (principalExists(principal))
         {
             throw new SecurityException(SecurityException.PRINCIPAL_ALREADY_EXISTS.createScoped(principal.getType().getName(), principal.getName()));
@@ -391,6 +482,9 @@
         getPersistenceBrokerTemplate().store(credential);
     }
 
+    public PasswordCredential getPasswordCredential(String userName){
+        return getPasswordCredential(userName,getDefaultSecurityDomainId());
+    }
     //
     // UserPasswordCredentialAccessManager interface implementation
     //
@@ -405,12 +499,13 @@
      * The user reference can be materialized by calling {@link #loadPasswordCredentialUser(PasswordCredential)}.
      * </p>
      */
-    public PasswordCredential getPasswordCredential(String userName)
+    public PasswordCredential getPasswordCredential(String userName, Long securityDomain)
     {
         Criteria criteria = new Criteria();
         criteria.addEqualTo("user.name", userName);
         criteria.addEqualTo("user.enabled",true);
         criteria.addEqualTo("type", PasswordCredential.TYPE_CURRENT);
+        criteria.addEqualTo("domainId", securityDomain);
         Query query = QueryFactory.newQuery(PasswordCredentialImpl.class,criteria);
         PasswordCredentialImpl pwc = (PasswordCredentialImpl)getPersistenceBrokerTemplate().getObjectByQuery(query);
         if (pwc != null)
@@ -438,8 +533,12 @@
         }
     }
 
+    public List<PasswordCredential> getHistoricPasswordCredentials(User user){
+        return getHistoricPasswordCredentials(user,getDefaultSecurityDomainId());
+    }
+    
     @SuppressWarnings("unchecked") 
-    public List<PasswordCredential> getHistoricPasswordCredentials(User user)
+    public List<PasswordCredential> getHistoricPasswordCredentials(User user, Long securityDomain)
     {
         Criteria criteria = new Criteria();
         criteria.addEqualTo("principalId", user.getId());
@@ -580,6 +679,7 @@
         {
             criteria.addEqualTo("type", principalType);
         }
+        criteria.addEqualTo("domainId", getDefaultSecurityDomainId());
         QueryByCriteria query = QueryFactory.newQuery(PersistentJetspeedPrincipal.class, criteria);
         query.addOrderByAscending("type");
         query.addOrderByAscending("name");
@@ -749,6 +849,7 @@
         {
             criteria.addEqualTo("type", principalType);
         }
+        criteria.addEqualTo("domainId", getDefaultSecurityDomainId());
         QueryByCriteria query = QueryFactory.newQuery(PersistentJetspeedPrincipal.class, criteria);
         List<JetspeedPrincipal> currentList = (List<JetspeedPrincipal>) getPersistenceBrokerTemplate().execute(new ManagedListByQueryCallback(query));
         List<JetspeedPrincipal> targetList = new ArrayList<JetspeedPrincipal>(principals);
@@ -794,6 +895,7 @@
         {
             criteria.addEqualTo("principal.type", principal.getType());
             criteria.addEqualTo("principal.name", principal.getName());
+            criteria.addEqualTo("domainId", getDefaultSecurityDomainId());
         }
         else
         {
@@ -830,6 +932,7 @@
         {
             criteria.addEqualTo("principal.type", principal.getType());
             criteria.addEqualTo("principal.name", principal.getName());
+            criteria.addEqualTo("domainId", getDefaultSecurityDomainId());
         }
         else
         {
@@ -849,4 +952,103 @@
             throw new SecurityException(msg, pbe);
         }
     }
+
+    protected boolean domainExists(SecurityDomain domain){        
+        return getDomainByName(domain.getName()) != null;
+    }
+    
+    public void addDomain(SecurityDomain domain) throws SecurityException 
+    {
+        if (domainExists(domain))
+        {
+            throw new SecurityException(SecurityException.SECURITY_DOMAIN_EXISTS.create(domain.getName()));
+        }
+        try
+        {
+            getPersistenceBrokerTemplate().store(domain);
+        }
+        catch (Exception pbe)
+        {
+            KeyedMessage msg = SecurityException.UNEXPECTED.create("JetspeedSecurityPersistenceManager",
+                                                                   "addDomain",
+                                                                   pbe.getMessage());
+            logger.error(msg, pbe);
+            throw new SecurityException(msg, pbe);            
+        }
+    }
+
+    public SecurityDomain getDomain(Long domainId)
+    {
+        try{
+            return (SecurityDomain) getPersistenceBrokerTemplate().getObjectById(SecurityDomainImpl.class, domainId);    
+        } catch (ObjectRetrievalFailureException ore){
+            return null;
+        }
+        
+    }
+
+    protected Long getDefaultSecurityDomainId() {
+        if (defaultSecurityDomainId == null){
+            SecurityDomain d = getDomainByName(SecurityDomain.DEFAULT_NAME);
+            if (d == null){
+                throw new RuntimeException("The default security domain could not be found!");
+            }
+            defaultSecurityDomainId=d.getDomainId();
+        }   
+        return defaultSecurityDomainId;
+    }
+    
+    public SecurityDomain getDomainByName(String domainName)
+    {
+    	Criteria criteria = new Criteria();
+        criteria.addEqualTo("name", domainName);
+        Query query = QueryFactory.newQuery(SecurityDomainImpl.class,criteria);
+        return (SecurityDomain) getPersistenceBrokerTemplate().getObjectByQuery(query);    
+    }
+
+    @SuppressWarnings("unchecked") 
+    public Collection<SecurityDomain> getAllDomains()
+    {
+        QueryByCriteria query = QueryFactory.newQuery(SecurityDomainImpl.class, new Criteria());
+        query.addOrderByAscending("name");
+        return (List<SecurityDomain>)getPersistenceBrokerTemplate().execute(new ManagedListByQueryCallback(query));
+    }
+    
+    public void removeDomain(SecurityDomain domain) throws SecurityException
+    {
+        if (!domainExists(domain))
+        {
+            throw new SecurityException(SecurityException.PRINCIPAL_DOES_NOT_EXIST.create(domain.getName()));
+        }
+        try
+        {
+            getPersistenceBrokerTemplate().delete(domain);
+        }
+        catch (Exception pbe)
+        {
+            if (pbe instanceof DataIntegrityViolationException)
+            {
+                logger.error(pbe.getMessage(), pbe);
+                throw new SecurityException(SecurityException.SECURITY_DOMAIN_NOT_REMOVABLE.create(domain.getName()));
+            }
+            
+            KeyedMessage msg = SecurityException.UNEXPECTED.create("JetspeedSecurityPersistenceManager",
+                                                                   "removeDomain",
+                                                                   pbe.getMessage());
+            logger.error(msg, pbe);
+            throw new SecurityException(msg, pbe);            
+        }
+        
+    }
+    
+    @SuppressWarnings("unchecked") 
+    public Collection<SecurityDomain> getDomainsOwnedBy(Long ownerDomainId)
+    {
+        Criteria criteria = new Criteria();
+        criteria.addEqualTo("ownerDomainId", ownerDomainId);
+        QueryByCriteria query = QueryFactory.newQuery(SecurityDomainImpl.class, criteria);
+        query.addOrderByAscending("name");
+        return (List<SecurityDomain>)getPersistenceBrokerTemplate().execute(new ManagedListByQueryCallback(query));
+    }
+    
 }

Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-security/src/main/java/org/apache/jetspeed/serializer/JetspeedSecuritySerializer.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-security/src/main/java/org/apache/jetspeed/serializer/JetspeedSecuritySerializer.java?rev=732386&r1=732385&r2=732386&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-security/src/main/java/org/apache/jetspeed/serializer/JetspeedSecuritySerializer.java (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-security/src/main/java/org/apache/jetspeed/serializer/JetspeedSecuritySerializer.java Wed Jan  7 08:33:26 2009
@@ -17,6 +17,8 @@
 package org.apache.jetspeed.serializer;
 
 import java.security.Principal;
+import java.util.ArrayList;
+import java.util.Comparator;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
@@ -41,9 +43,13 @@
 import org.apache.jetspeed.security.RoleManager;
 import org.apache.jetspeed.security.SecurityAttribute;
 import org.apache.jetspeed.security.SecurityAttributes;
+import org.apache.jetspeed.security.SecurityDomain;
 import org.apache.jetspeed.security.SecurityException;
 import org.apache.jetspeed.security.User;
 import org.apache.jetspeed.security.UserManager;
+import org.apache.jetspeed.security.impl.SecurityDomainImpl;
+import org.apache.jetspeed.security.spi.SecurityDomainAccessManager;
+import org.apache.jetspeed.security.spi.SecurityDomainStorageManager;
 import org.apache.jetspeed.security.spi.impl.SynchronizationStateAccess;
 import org.apache.jetspeed.serializer.objects.JSGroup;
 import org.apache.jetspeed.serializer.objects.JSNVPElement;
@@ -54,6 +60,7 @@
 import org.apache.jetspeed.serializer.objects.JSPrincipalAssociation;
 import org.apache.jetspeed.serializer.objects.JSRole;
 import org.apache.jetspeed.serializer.objects.JSSecurityAttributes;
+import org.apache.jetspeed.serializer.objects.JSSecurityDomain;
 import org.apache.jetspeed.serializer.objects.JSSnapshot;
 import org.apache.jetspeed.serializer.objects.JSUser;
 import org.apache.jetspeed.serializer.objects.JSUserAttributes;
@@ -61,6 +68,8 @@
 import org.apache.jetspeed.serializer.objects.JSUserRoles;
 import org.apache.jetspeed.serializer.objects.JSUserUsers;
 
+import edu.emory.mathcs.backport.java.util.Collections;
+
 /**
  * JetspeedSecuritySerializer - Security component serializer
  *
@@ -131,15 +140,17 @@
         }
     }
 
+    protected SecurityDomainStorageManager domainStorageManager; 
+    protected SecurityDomainAccessManager domainAccessManager;
     protected JetspeedPrincipalManagerProvider principalManagerProvider;
     protected GroupManager groupManager;
     protected RoleManager roleManager;
     protected UserManager userManager;
     protected CredentialPasswordEncoder cpe;
     protected PermissionManager pm;
-
+    
     public JetspeedSecuritySerializer(JetspeedPrincipalManagerProvider principalManagerProvider, GroupManager groupManager, RoleManager roleManager, UserManager userManager,
-            CredentialPasswordEncoder cpe, PermissionManager pm)
+            CredentialPasswordEncoder cpe, PermissionManager pm, SecurityDomainStorageManager sdsm, SecurityDomainAccessManager sdam )
     {
         this.principalManagerProvider = principalManagerProvider;
         this.groupManager = groupManager;
@@ -147,6 +158,8 @@
         this.userManager = userManager;
         this.cpe = cpe;
         this.pm = pm;
+        this.domainAccessManager=sdam;
+        this.domainStorageManager=sdsm;
     }
 
     protected void processExport(JSSnapshot snapshot, Map settings, Log log) throws SerializerException
@@ -182,9 +195,11 @@
             {
                 SynchronizationStateAccess.setSynchronizing(Boolean.TRUE);
                 ImportRefs refs = new ImportRefs();
+                
+                recreateSecurityDomains(refs, snapshot, settings, log);
                 recreateJetspeedPrincipals(refs, snapshot, settings, log);
                 recreateJetspeedPrincipalAssociations(refs, snapshot, settings, log);
-                
+
                 if (isSettingSet(settings, JetspeedSerializer.KEY_PROCESS_PERMISSIONS))
                 {
                     log.info("creating permissions");
@@ -238,6 +253,107 @@
         }
     }
 
+    protected SecurityDomain checkDomainExistsOtherwiseCreate(String domainName) throws SecurityException{
+        SecurityDomain domain = domainAccessManager.getDomainByName(domainName);
+        if (domain == null){
+            SecurityDomainImpl newDomain = new SecurityDomainImpl();
+            newDomain.setName(domainName);
+            newDomain.setEnabled(true);
+            newDomain.setRemote(false);
+            
+            domainStorageManager.addDomain(newDomain);
+            domain = domainAccessManager.getDomainByName(domainName);
+        }
+        return domain;
+    }
+    
+    private void recreateSecurityDomains(ImportRefs refs, JSSnapshot snapshot, Map settings, Log log) throws SerializerException {
+        log.debug("recreateSecurityDomains");
+    
+     // create system and default domain. Adding them to the seed is not necessary!           
+        Long systemDomainId=null;            
+        Long defaultDomainId=null;
+        try{
+            defaultDomainId=checkDomainExistsOtherwiseCreate(SecurityDomain.DEFAULT_NAME).getDomainId();
+            systemDomainId=checkDomainExistsOtherwiseCreate(SecurityDomain.SYSTEM_NAME).getDomainId();
+        } catch (Exception e){
+            throw new SerializerException(SerializerException.CREATE_OBJECT_FAILED.create(new String[] { "SecurityDomains",
+                    "Could not create default and / or system domains!\n"+e.getMessage() }), e);
+        }
+        
+        if (snapshot.getSecurityDomains() != null && snapshot.getSecurityDomains().size() > 0){
+            
+            // sort the domains according to whether they have an owner domain
+            // domains without owner domains ( = base or parent domains) should be created first
+            ArrayList<JSSecurityDomain> sortedDomains = new ArrayList<JSSecurityDomain>(snapshot.getSecurityDomains());
+            
+            Collections.sort(sortedDomains, new Comparator<JSSecurityDomain>(){
+                public int compare(JSSecurityDomain o1, JSSecurityDomain o2)
+                {
+                    boolean o1HasOwner = o1.getOwnerDomain() != null;
+                    boolean o2HasOwner = o2.getOwnerDomain() != null;
+                    
+                    if (o1HasOwner==o2HasOwner){
+                        return 0;
+                    } else if (o1HasOwner){
+                        return 1;
+                    } else {
+                        return -1;
+                    }
+                }
+            });
+            
+            
+            
+            // create other domains
+            for (JSSecurityDomain jsDomain : sortedDomains){      
+                // do some checks first
+                
+                // if domain is the system domain or the default domain, skip creation (they exist already)
+                if (jsDomain.getName().equals(SecurityDomain.SYSTEM_NAME) || jsDomain.getName().equals(SecurityDomain.DEFAULT_NAME)){
+                    break;
+                }
+                if (jsDomain.getName().length() == 0){
+                    throw new SerializerException(SerializerException.CREATE_OBJECT_FAILED.create(new String[] { "SecurityDomain",
+                            "Name of Security Domain must not be empty!" }));
+                }
+                Long ownerDomainId = null;
+                if (jsDomain.getOwnerDomain() != null){                    
+                    if (jsDomain.getOwnerDomain().equals(SecurityDomain.SYSTEM_NAME)){
+                        ownerDomainId=defaultDomainId;
+                    } else if (jsDomain.getOwnerDomain().equals(SecurityDomain.SYSTEM_NAME)) {
+                        ownerDomainId=systemDomainId;
+                    } else {
+                        SecurityDomain ownerDomain = domainAccessManager.getDomainByName(jsDomain.getOwnerDomain());
+                        if (ownerDomain == null){
+                            throw new SerializerException(SerializerException.CREATE_OBJECT_FAILED.create(new String[] { "SecurityDomain","Could not find owner domain with name "+jsDomain.getOwnerDomain()+"for domain with name "+jsDomain.getName()}));
+                        }
+                        ownerDomainId=ownerDomain.getDomainId();
+                    }
+                } else {
+                    // remote domains always need an owner domain. Set the default domain if owner domain is not specified
+                    if (jsDomain.isRemote()){
+                        ownerDomainId=defaultDomainId;
+                    }
+                }
+                
+                SecurityDomainImpl newDomain = new SecurityDomainImpl();
+                newDomain.setName(jsDomain.getName());
+                newDomain.setOwnerDomainId(ownerDomainId);
+                newDomain.setRemote(jsDomain.isRemote());
+                newDomain.setEnabled(jsDomain.isEnabled());
+                try{
+                    domainStorageManager.addDomain(newDomain);    
+                  } catch (Exception e){
+                  throw new SerializerException(SerializerException.CREATE_OBJECT_FAILED.create(new String[] { "SecurityDomain",
+                          e.getMessage() }), e);
+              }
+                
+            }
+            
+        }
+    }
+    
     /**
      * import the groups, roles and finally the users to the current environment
      * 

Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-security/src/test/java/org/apache/jetspeed/security/stubs/StubJetspeedPrincipal.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-security/src/test/java/org/apache/jetspeed/security/stubs/StubJetspeedPrincipal.java?rev=732386&r1=732385&r2=732386&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-security/src/test/java/org/apache/jetspeed/security/stubs/StubJetspeedPrincipal.java (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-security/src/test/java/org/apache/jetspeed/security/stubs/StubJetspeedPrincipal.java Wed Jan  7 08:33:26 2009
@@ -150,4 +150,10 @@
 
     }
 
+    public Long getDomainId()
+    {
+        // TODO Auto-generated method stub
+        return 1L;
+    }
+
 }

Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-serializer/src/main/java/org/apache/jetspeed/serializer/JetspeedSerializerImpl.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-serializer/src/main/java/org/apache/jetspeed/serializer/JetspeedSerializerImpl.java?rev=732386&r1=732385&r2=732386&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-serializer/src/main/java/org/apache/jetspeed/serializer/JetspeedSerializerImpl.java (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-serializer/src/main/java/org/apache/jetspeed/serializer/JetspeedSerializerImpl.java Wed Jan  7 08:33:26 2009
@@ -25,6 +25,10 @@
 import java.util.List;
 import java.util.Map;
 
+import javolution.xml.XMLBinding;
+import javolution.xml.XMLObjectReader;
+import javolution.xml.XMLObjectWriter;
+
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.jetspeed.serializer.objects.JSApplication;
@@ -64,6 +68,8 @@
 import org.apache.jetspeed.serializer.objects.JSRuleCriterion;
 import org.apache.jetspeed.serializer.objects.JSRuleCriterions;
 import org.apache.jetspeed.serializer.objects.JSSecurityAttributes;
+import org.apache.jetspeed.serializer.objects.JSSecurityDomain;
+import org.apache.jetspeed.serializer.objects.JSSecurityDomains;
 import org.apache.jetspeed.serializer.objects.JSSnapshot;
 import org.apache.jetspeed.serializer.objects.JSUser;
 import org.apache.jetspeed.serializer.objects.JSUserAttributes;
@@ -72,10 +78,6 @@
 import org.apache.jetspeed.serializer.objects.JSUserUsers;
 import org.apache.jetspeed.serializer.objects.JSUsers;
 
-import javolution.xml.XMLBinding;
-import javolution.xml.XMLObjectReader;
-import javolution.xml.XMLObjectWriter;
-
 /**
  * Main JetspeedSerializer implementation delegating the real serializing to JetspeedComponentSerializer instances
  * @author <a href="mailto:ate@douma.nu">Ate Douma</a>
@@ -227,6 +229,8 @@
         binding.setAlias(JSEntities.class, "Entities");
         binding.setAlias(JSEntityPreference.class, "Principal");
         binding.setAlias(JSEntityPreferences.class, "Settings");
+        binding.setAlias(JSSecurityDomains.class, "SecurityDomains");
+        binding.setAlias(JSSecurityDomain.class, "SecurityDomain");
 
         binding.setAlias(String.class, "String");
         binding.setAlias(Integer.class, "int");

Added: portals/jetspeed-2/portal/trunk/components/jetspeed-serializer/src/main/java/org/apache/jetspeed/serializer/objects/JSSecurityDomain.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-serializer/src/main/java/org/apache/jetspeed/serializer/objects/JSSecurityDomain.java?rev=732386&view=auto
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-serializer/src/main/java/org/apache/jetspeed/serializer/objects/JSSecurityDomain.java (added)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-serializer/src/main/java/org/apache/jetspeed/serializer/objects/JSSecurityDomain.java Wed Jan  7 08:33:26 2009
@@ -0,0 +1,136 @@
+/* 
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+*
+*     http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+package org.apache.jetspeed.serializer.objects;
+
+import javolution.xml.XMLFormat;
+import javolution.xml.stream.XMLStreamException;
+
+import org.apache.commons.lang.StringEscapeUtils;
+
+
+/**
+ * @author <a href="mailto:ddam@apache.org">Dennis Dam</a>
+ */
+public class JSSecurityDomain
+{
+
+ // private int refID;
+   
+    String name;
+    String ownerDomain;
+    boolean remote;
+    boolean enabled;
+    
+    public JSSecurityDomain()
+    {
+        // refID = id;
+    }
+
+    /***************************************************************************
+     * SERIALIZER
+     */
+    private static final XMLFormat XML = new XMLFormat(JSSecurityDomain.class)
+    {
+    public void write(Object o, OutputElement xml) throws XMLStreamException
+    {
+
+        try
+        {
+            JSSecurityDomain domain = (JSSecurityDomain) o;
+            xml.setAttribute("name",domain.getName());
+            xml.setAttribute("ownerDomain",domain.getOwnerDomain());
+            xml.setAttribute("remote",domain.isRemote());
+            xml.setAttribute("enabled",domain.isEnabled());            
+        } catch (Exception e)
+        {
+            e.printStackTrace();
+        }
+    }
+
+    public void read(InputElement xml, Object o)
+    {
+        try
+        {
+            JSSecurityDomain domain = (JSSecurityDomain) o;
+            domain.setName(xml.getAttribute("name").toString());
+            domain.setOwnerDomain(xml.getAttribute("ownerDomain",(String)null));
+            domain.setRemote(xml.getAttribute("remote",false));
+            domain.setEnabled(xml.getAttribute("enabled",true));
+        } catch (Exception e)
+        {
+            e.printStackTrace();
+        }
+    }
+    };
+    /**
+     * @return Returns the name.
+     */
+    public String getName()
+    {
+        return name;
+    }
+
+    public void setName(String name)
+    {
+        this.name = name;
+    }
+
+    /**
+     * @param name
+     *            The name to set.
+     */
+    public void setNameId(String name)
+    {
+        this.name = name;
+    }
+
+    public boolean isRemote()
+    {
+        return remote;
+    }
+    
+    public void setRemote(boolean remote)
+    {
+        this.remote = remote;
+    }
+
+    
+    public boolean isEnabled()
+    {
+        return enabled;
+    }
+
+    
+    public void setEnabled(boolean enabled)
+    {
+        this.enabled = enabled;
+    }
+
+    
+    public String getOwnerDomain()
+    {
+        return ownerDomain;
+    }
+
+    
+    public void setOwnerDomain(String ownerDomain)
+    {
+        this.ownerDomain = ownerDomain;
+    }
+    
+    
+}

Propchange: portals/jetspeed-2/portal/trunk/components/jetspeed-serializer/src/main/java/org/apache/jetspeed/serializer/objects/JSSecurityDomain.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: portals/jetspeed-2/portal/trunk/components/jetspeed-serializer/src/main/java/org/apache/jetspeed/serializer/objects/JSSecurityDomain.java
------------------------------------------------------------------------------
    svn:keywords = Id

Added: portals/jetspeed-2/portal/trunk/components/jetspeed-serializer/src/main/java/org/apache/jetspeed/serializer/objects/JSSecurityDomains.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-serializer/src/main/java/org/apache/jetspeed/serializer/objects/JSSecurityDomains.java?rev=732386&view=auto
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-serializer/src/main/java/org/apache/jetspeed/serializer/objects/JSSecurityDomains.java (added)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-serializer/src/main/java/org/apache/jetspeed/serializer/objects/JSSecurityDomains.java Wed Jan  7 08:33:26 2009
@@ -0,0 +1,30 @@
+/* 
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+*
+*     http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+package org.apache.jetspeed.serializer.objects;
+
+import java.util.ArrayList;
+
+
+/**
+ * @author <a href="mailto:ddam@apache.org">Dennis Dam</a>
+ */
+public class JSSecurityDomains extends ArrayList<JSSecurityDomain>
+{
+
+    private static final long serialVersionUID = 8502780843122685920L;
+  
+}

Propchange: portals/jetspeed-2/portal/trunk/components/jetspeed-serializer/src/main/java/org/apache/jetspeed/serializer/objects/JSSecurityDomains.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: portals/jetspeed-2/portal/trunk/components/jetspeed-serializer/src/main/java/org/apache/jetspeed/serializer/objects/JSSecurityDomains.java
------------------------------------------------------------------------------
    svn:keywords = Id

Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-serializer/src/main/java/org/apache/jetspeed/serializer/objects/JSSnapshot.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-serializer/src/main/java/org/apache/jetspeed/serializer/objects/JSSnapshot.java?rev=732386&r1=732385&r2=732386&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-serializer/src/main/java/org/apache/jetspeed/serializer/objects/JSSnapshot.java (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-serializer/src/main/java/org/apache/jetspeed/serializer/objects/JSSnapshot.java Wed Jan  7 08:33:26 2009
@@ -73,6 +73,9 @@
     private String defaultRule;
 
     private JSApplications applications;
+    
+    private JSSecurityDomains securityDomains;
+    
 
     /**
      * check the software version and subvversion against the saved
@@ -104,6 +107,7 @@
         permissions = new JSPermissions();
         rules = new JSProfilingRules();
         applications = new JSApplications();
+        securityDomains=new JSSecurityDomains();
     }
 
     public JSSnapshot(String name)
@@ -486,6 +490,16 @@
         this.applications = applications;
     }
 
+    public JSSecurityDomains getSecurityDomains()
+    {
+        return securityDomains;
+    }
+    
+    public void setSecurityDomains(JSSecurityDomains securityDomains)
+    {
+        this.securityDomains = securityDomains;
+    }
+
 
     /***************************************************************************
      * SERIALIZER
@@ -579,6 +593,10 @@
                 {
                     xml.add(g.getApplications());
                 }
+                if ( !g.getSecurityDomains().isEmpty() )
+                {
+                    xml.add(g.getSecurityDomains());
+                }
             }
             catch (Exception e)
             {
@@ -665,6 +683,8 @@
                         g.rules = (JSProfilingRules) o1;
                     else if (o1 instanceof JSApplications)
                         g.applications = (JSApplications) o1;
+                    else if (o1 instanceof JSSecurityDomains)
+                        g.securityDomains = (JSSecurityDomains) o1;
                 }
             }
             catch (Exception e)

Modified: portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/exception/JetspeedExceptionMessages.properties
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/exception/JetspeedExceptionMessages.properties?rev=732386&r1=732385&r2=732386&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/exception/JetspeedExceptionMessages.properties (original)
+++ portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/exception/JetspeedExceptionMessages.properties Wed Jan  7 08:33:26 2009
@@ -45,6 +45,8 @@
 org.apache.jetspeed.security.SecurityException.UNEXPECTED = Unexpected security error at {0} from {1}: {2}
 org.apache.jetspeed.security.SecurityException.INVALID_UID = The uid cannot contain any regular expression meta-characters or be null or be empty.
 org.apache.jetspeed.security.SecurityException.INVALID_DN = The dn cannot be null or empty.
+org.apache.jetspeed.security.SecurityException.SECURITY_DOMAIN_EXISTS = The security domain {0} already exists.
+org.apache.jetspeed.security.SecurityException.SECURITY_DOMAIN_DOES_NOT_EXIST = The security domain {0} does not exist.
 
 #### deprecated resource strings: see SecurityException #####
 org.apache.jetspeed.security.SecurityException.USER_ALREADY_EXISTS = The user {0} already exists.
@@ -109,4 +111,4 @@
 org.apache.jetspeed.security.SecurityException.group.ATTRIBUTE_IS_READ_ONLY = The group attribute {0} is read only.
 org.apache.jetspeed.security.SecurityException.group.ATTRIBUTE_IS_REQUIRED = The group attribute {0} is required.
 org.apache.jetspeed.security.SecurityException.group.ATTRIBUTES_ARE_READ_ONLY = The group attributes are read only.
-org.apache.jetspeed.security.SecurityException.group.ATTRIBUTE_NOT_EXTENDABLE = Adding new group attributes is not supported.
+org.apache.jetspeed.security.SecurityException.group.ATTRIBUTE_NOT_EXTENDABLE = Adding new group attributes is not supported.
\ No newline at end of file

Modified: portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/exception/JetspeedExceptionMessages_en.properties
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/exception/JetspeedExceptionMessages_en.properties?rev=732386&r1=732385&r2=732386&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/exception/JetspeedExceptionMessages_en.properties (original)
+++ portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/exception/JetspeedExceptionMessages_en.properties Wed Jan  7 08:33:26 2009
@@ -44,6 +44,8 @@
 org.apache.jetspeed.security.SecurityException.UNEXPECTED = Unexpected security error at {0} from {1}: {2}
 org.apache.jetspeed.security.SecurityException.INVALID_UID = The uid cannot contain any regular expression meta-characters or be null or be empty.
 org.apache.jetspeed.security.SecurityException.INVALID_DN = The dn cannot be null or empty.
+org.apache.jetspeed.security.SecurityException.SECURITY_DOMAIN_EXISTS = The security domain {0} already exists.
+org.apache.jetspeed.security.SecurityException.SECURITY_DOMAIN_DOES_NOT_EXIST = The security domain {0} does not exist.
 
 #### deprecated resource strings: see SecurityException #####
 org.apache.jetspeed.security.SecurityException.USER_ALREADY_EXISTS = The user {0} already exists.

Modified: portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/exception/JetspeedExceptionMessages_ja.properties
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/exception/JetspeedExceptionMessages_ja.properties?rev=732386&r1=732385&r2=732386&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/exception/JetspeedExceptionMessages_ja.properties (original)
+++ portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/exception/JetspeedExceptionMessages_ja.properties Wed Jan  7 08:33:26 2009
@@ -44,6 +44,8 @@
 org.apache.jetspeed.security.SecurityException.UNEXPECTED = {1} \u304b\u3089 {0} \u3067\u4e88\u671f\u3057\u306a\u3044\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30a8\u30e9\u30fc: {2}
 org.apache.jetspeed.security.SecurityException.INVALID_UID = UID\u306f\u6b63\u898f\u8868\u73fe\u306e\u30e1\u30bf\u30ad\u30e3\u30e9\u30af\u30bf\u3001null\u3001\u307e\u305f\u306f\u7a7a\u306b\u3067\u304d\u307e\u305b\u3093\u3002
 org.apache.jetspeed.security.SecurityException.INVALID_DN = DN\u306f null \u307e\u305f\u306f\u7a7a\u306b\u3067\u304d\u307e\u305b\u3093\u3002
+org.apache.jetspeed.security.SecurityException.SECURITY_DOMAIN_EXISTS = The security domain {0} already exists.
+org.apache.jetspeed.security.SecurityException.SECURITY_DOMAIN_DOES_NOT_EXIST = The security domain {0} does not exist.
 
 #### deprecated resource strings: see SecurityException #####
 org.apache.jetspeed.security.SecurityException.USER_ALREADY_EXISTS = \u30e6\u30fc\u30b6\u30fc {0} \u304c\u5b58\u5728\u3057\u307e\u3059\u3002

Modified: portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/exception/JetspeedExceptionMessages_ko.properties
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/exception/JetspeedExceptionMessages_ko.properties?rev=732386&r1=732385&r2=732386&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/exception/JetspeedExceptionMessages_ko.properties (original)
+++ portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/exception/JetspeedExceptionMessages_ko.properties Wed Jan  7 08:33:26 2009
@@ -44,6 +44,8 @@
 org.apache.jetspeed.security.SecurityException.UNEXPECTED = \uc608\uae30\uce58 \uc54a\uc740 \ubcf4\uc548 \uc624\ub958\uc785\ub2c8\ub2e4: at {0} from {1}: {2}
 org.apache.jetspeed.security.SecurityException.INVALID_UID = UID\ub294 \uc815\uaddc\uc2dd \ud45c\ud604\uc774\ub098 \uba54\ud0c0 \ubb38\uc790\uac00 \ud3ec\ud568\ub420 \uc218 \uc5c6\uc73c\uba70, \ub110 \uac12\uc774\uac70\ub098 \ube48 \uac12\uc774\uba74 \uc548\ub429\ub2c8\ub2e4.
 org.apache.jetspeed.security.SecurityException.INVALID_DN = DN\uc740 \ub110 \uac12\uc774\uac70\ub098 \ube48 \uac12\uc77c \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
+org.apache.jetspeed.security.SecurityException.SECURITY_DOMAIN_EXISTS = The security domain {0} already exists.
+org.apache.jetspeed.security.SecurityException.SECURITY_DOMAIN_DOES_NOT_EXIST = The security domain {0} does not exist.
 
 #### deprecated resource strings: see SecurityException #####
 org.apache.jetspeed.security.SecurityException.USER_ALREADY_EXISTS = \uc0ac\uc6a9\uc790, {0} \uc740 \uc774\ubbf8 \uc874\uc7ac\ud569\ub2c8\ub2e4.

Modified: portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/exception/JetspeedExceptionMessages_nl.properties
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/exception/JetspeedExceptionMessages_nl.properties?rev=732386&r1=732385&r2=732386&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/exception/JetspeedExceptionMessages_nl.properties (original)
+++ portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/exception/JetspeedExceptionMessages_nl.properties Wed Jan  7 08:33:26 2009
@@ -44,6 +44,8 @@
 org.apache.jetspeed.security.SecurityException.UNEXPECTED = Onverwachte beveiligingsfout in {0} vanuit {1}: {2}
 # org.apache.jetspeed.security.SecurityException.INVALID_UID = The uid cannot contain any regular expression meta-characters or be null or be empty.
 # org.apache.jetspeed.security.SecurityException.INVALID_DN = The dn cannot be null or empty.
+org.apache.jetspeed.security.SecurityException.SECURITY_DOMAIN_EXISTS = Het beveilingingsdomein {0} bestaat al.
+org.apache.jetspeed.security.SecurityException.SECURITY_DOMAIN_DOES_NOT_EXIST = Het beveilingingsdomein {0} bestaat niet.
 
 #### deprecated resource strings: see SecurityException #####
 org.apache.jetspeed.security.SecurityException.USER_ALREADY_EXISTS = De gebruiker {0} bestaat al.
@@ -94,7 +96,7 @@
 # resource strings for specific principal, group
 org.apache.jetspeed.security.SecurityException.group.PRINCIPAL_DOES_NOT_EXIST = The groep {0} bestaat niet.
 org.apache.jetspeed.security.SecurityException.group.PRINCIPAL_ALREADY_EXISTS = De groep {0} bestaat al.
-org.apache.jetspeed.security.SecurityException.group.PRINCIPAL_IS_READ_ONLY = De groep {0} mag niet gewijzigd worden.
+org.apache.jetspeed.security.SecurityException.group.PRINCIPAL_IS_READ_ONLY = De groep {0} mag nThe security domainiet gewijzigd worden.
 org.apache.jetspeed.security.SecurityException.group.PRINCIPAL_UPDATE_FAILURE = Opslaan van de groep {0} is mislukt.
 org.apache.jetspeed.security.SecurityException.group.PRINCIPAL_NOT_REMOVABLE = De groep {0} mag niet worden verwijderd.
 org.apache.jetspeed.security.SecurityException.group.DEPENDENT_PRINCIPAL_EXISTS = De groep {0} heeft een of meer verplichte {1} {2} koppelingen.
@@ -108,4 +110,4 @@
 org.apache.jetspeed.security.SecurityException.group.ATTRIBUTE_IS_READ_ONLY = Het groepsattribuut {0} mag niet gewijzigd worden.
 org.apache.jetspeed.security.SecurityException.group.ATTRIBUTE_IS_REQUIRED = Het groepsattribuut {0} is verplicht.
 org.apache.jetspeed.security.SecurityException.group.ATTRIBUTES_ARE_READ_ONLY = De groepsattributen mogen niet gewijzigd worden.
-org.apache.jetspeed.security.SecurityException.group.ATTRIBUTE_NOT_EXTENDABLE = Toevoegen van nieuwe groepsattributen is niet mogelijk.
+org.apache.jetspeed.security.SecurityException.group.ATTRIBUTE_NOT_EXTENDABLE = Toevoegen van nieuwe groepsattributen is niet mogelijk.
\ No newline at end of file

Modified: portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/exception/JetspeedExceptionMessages_ua.properties
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/exception/JetspeedExceptionMessages_ua.properties?rev=732386&r1=732385&r2=732386&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/exception/JetspeedExceptionMessages_ua.properties (original)
+++ portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/exception/JetspeedExceptionMessages_ua.properties Wed Jan  7 08:33:26 2009
@@ -44,6 +44,8 @@
 org.apache.jetspeed.security.SecurityException.UNEXPECTED = \u041d\u0435\u043e\u0447\u0456\u043a\u0443\u0432\u0430\u043d\u0430 \u043f\u043e\u043c\u0438\u043b\u043a\u0430 \u0431\u0435\u0437\u043f\u0435\u043a\u0438 \u043d\u0430 {0} \u0437 {1}: {2}
 org.apache.jetspeed.security.SecurityException.INVALID_UID = uid \u043d\u0435 \u043c\u043e\u0436\u0435 \u043c\u0456\u0441\u0442\u0438\u0442\u0438 \u043c\u0435\u0442\u0430\u0441\u0438\u043c\u0432\u043e\u043b\u0438 \u0441\u0442\u0430\u043b\u043e\u0433\u043e \u0432\u0438\u0440\u0430\u0437\u0443, \u0430 \u0442\u0430\u043a\u043e\u0436 \u0431\u0443\u0442\u0438 null \u0430\u0431\u043e \u043f\u043e\u0440\u043e\u0436\u043d\u0456\u043c.
 org.apache.jetspeed.security.SecurityException.INVALID_DN = dn \u043d\u0435 \u043c\u043e\u0436\u0435 \u0431\u0443\u0442\u0438 null \u0430\u0431\u043e \u043f\u043e\u0440\u043e\u0436\u043d\u0456\u043c.
+org.apache.jetspeed.security.SecurityException.SECURITY_DOMAIN_EXISTS = The security domain {0} already exists.
+org.apache.jetspeed.security.SecurityException.SECURITY_DOMAIN_DOES_NOT_EXIST = The security domain {0} does not exist.
 
 #### deprecated resource strings: see SecurityException #####
 org.apache.jetspeed.security.SecurityException.USER_ALREADY_EXISTS = \u041a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447 {0} \u0432\u0436\u0435 \u0456\u0441\u043d\u0443\u0454 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0456.

Modified: portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/exception/JetspeedExceptionMessages_zh.properties
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/exception/JetspeedExceptionMessages_zh.properties?rev=732386&r1=732385&r2=732386&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/exception/JetspeedExceptionMessages_zh.properties (original)
+++ portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/exception/JetspeedExceptionMessages_zh.properties Wed Jan  7 08:33:26 2009
@@ -44,6 +44,8 @@
 org.apache.jetspeed.security.SecurityException.UNEXPECTED = \u610f\u5916\u7684\u5b89\u5168\u9519\u8bef {0} \u4ece {1}: {2}
 org.apache.jetspeed.security.SecurityException.INVALID_UID = uid\u4e0d\u80fd\u4e3a\u7a7a\u5b57\u7b26\u4e32, null\u6216\u5305\u542b\u4efb\u4f55\u6b63\u5219\u8868\u8fbe\u5f0f\u4e13\u7528\u5b57\u7b26.
 org.apache.jetspeed.security.SecurityException.INVALID_DN = dn\u4e0d\u80fd\u4e3a\u7a7a\u5b57\u7b26\u4e32\u6216\u4e3anull.
+org.apache.jetspeed.security.SecurityException.SECURITY_DOMAIN_EXISTS = The security domain {0} already exists.
+org.apache.jetspeed.security.SecurityException.SECURITY_DOMAIN_DOES_NOT_EXIST = The security domain {0} does not exist.
 
 #### deprecated resource strings: see SecurityException #####
 org.apache.jetspeed.security.SecurityException.USER_ALREADY_EXISTS = \u7528\u6237 {0} \u5df2\u5b58\u5728.
@@ -108,4 +110,4 @@
 org.apache.jetspeed.security.SecurityException.group.ATTRIBUTE_IS_READ_ONLY = The group attribute {0} is read only.
 org.apache.jetspeed.security.SecurityException.group.ATTRIBUTE_IS_REQUIRED = The group attribute {0} is required.
 org.apache.jetspeed.security.SecurityException.group.ATTRIBUTES_ARE_READ_ONLY = The group attributes are read only.
-org.apache.jetspeed.security.SecurityException.group.ATTRIBUTE_NOT_EXTENDABLE = Adding new group attributes is not supported.
+org.apache.jetspeed.security.SecurityException.group.ATTRIBUTE_NOT_EXTENDABLE = Adding new group attributes is not supported.
\ No newline at end of file

Modified: portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/exception/JetspeedExceptionMessages_zh_TW.properties
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/exception/JetspeedExceptionMessages_zh_TW.properties?rev=732386&r1=732385&r2=732386&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/exception/JetspeedExceptionMessages_zh_TW.properties (original)
+++ portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/exception/JetspeedExceptionMessages_zh_TW.properties Wed Jan  7 08:33:26 2009
@@ -44,6 +44,8 @@
 org.apache.jetspeed.security.SecurityException.UNEXPECTED = \u610f\u5916\u7684\u5b89\u5168\u932f\u8aa4 {0} \u5728 {1}: {2} 
 org.apache.jetspeed.security.SecurityException.INVALID_UID = uid\u4e0d\u80fd\u70ba\u7a7a\u5b57\u4e32, null\u6216\u5305\u542b\u4efb\u4f55\u5e38\u898f\u8868\u793a\u5f0f\u8b8a\u5316\u7528\u5b57\u5143. 
 org.apache.jetspeed.security.SecurityException.INVALID_DN = dn\u4e0d\u80fd\u70ba\u7a7a\u5b57\u4e32\u6216\u662fnull. 
+org.apache.jetspeed.security.SecurityException.SECURITY_DOMAIN_EXISTS = The security domain {0} already exists.
+org.apache.jetspeed.security.SecurityException.SECURITY_DOMAIN_DOES_NOT_EXIST = The security domain {0} does not exist.
 
 #### deprecated resource strings: see SecurityException #####
 org.apache.jetspeed.security.SecurityException.USER_ALREADY_EXISTS = \u4f7f\u7528\u8005 {0} \u5df2\u5b58\u5728. 

Modified: portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/security/JetspeedPrincipal.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/security/JetspeedPrincipal.java?rev=732386&r1=732385&r2=732386&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/security/JetspeedPrincipal.java (original)
+++ portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/security/JetspeedPrincipal.java Wed Jan  7 08:33:26 2009
@@ -16,7 +16,7 @@
  */
 package org.apache.jetspeed.security;
 
-import java.security.Principal;
+import java.security.Principal; 
 import java.sql.Timestamp;
 import java.util.Map;
 
@@ -55,4 +55,6 @@
      * @return an unmodifiable Map<String,String> of the SecurityAttributes.INFO_CATEGORY SecurityAttributes
      */
     Map<String, String> getInfoMap();
+    
+    Long getDomainId();
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: jetspeed-dev-unsubscribe@portals.apache.org
For additional commands, e-mail: jetspeed-dev-help@portals.apache.org