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 rw...@apache.org on 2009/02/09 19:37:07 UTC

svn commit: r742669 [1/2] - in /portals/jetspeed-2/portal/branches/JPA_BRANCH: components/jetspeed-capability/src/test/resources/ components/jetspeed-page-manager/src/test/java/org/apache/jetspeed/page/ components/jetspeed-page-manager/src/test/resourc...

Author: rwatler
Date: Mon Feb  9 18:37:05 2009
New Revision: 742669

URL: http://svn.apache.org/viewvc?rev=742669&view=rev
Log:
JPA SSO Component Integration
------------------------------------------
- support JPA version of SSO component and implement unit tests for same
- abstract OJB and JPA SSO components where possible to maximize reuse
- use custom Spring MergingPersistenceUnitManager to support extension of security persistence
  unit with SSO and to enable future similar extension of other JPA persistent units
- complete OJB and JPA isolation of persisitent security object model


Added:
    portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-rdbms/src/main/java/org/apache/jetspeed/components/rdbms/jpa/MergingPersistenceUnitManager.java
    portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/impl/SecurityAttributeValue.java
    portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-sso/src/main/java/org/apache/jetspeed/sso/jpa/
    portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-sso/src/main/java/org/apache/jetspeed/sso/jpa/SSOSiteImpl.java
    portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-sso/src/main/java/org/apache/jetspeed/sso/jpa/SSOUserImpl.java
    portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-sso/src/main/java/org/apache/jetspeed/sso/spi/impl/AbstractSSOUserManagerSPIImpl.java
    portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-sso/src/main/java/org/apache/jetspeed/sso/spi/jpa/
    portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-sso/src/main/java/org/apache/jetspeed/sso/spi/jpa/JetspeedPersistentSSOSiteManager.java
    portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-sso/src/main/java/org/apache/jetspeed/sso/spi/jpa/SSOUserManagerSPIImpl.java
    portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-sso/src/main/resources/
    portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-sso/src/main/resources/META-INF/
    portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-sso/src/main/resources/META-INF/persistence.xml
    portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-sso/src/test/java/org/apache/jetspeed/sso/TestOpenJPASSOComponent.java
    portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-sso/src/test/java/org/apache/jetspeed/sso/TestOpenJPASSOManager.java
    portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-sso/src/test/resources/jndi.properties
    portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-sso/src/test/resources/jpa-sso.xml
    portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-sso/src/test/resources/log4j.properties
    portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-sso/src/test/resources/openjpa-sso.xml
Modified:
    portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-capability/src/test/resources/jpa-capabilities.xml
    portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-page-manager/src/test/java/org/apache/jetspeed/page/PageManagerTestShared.java
    portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-page-manager/src/test/resources/jpa-database-page-manager.xml
    portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-profiler/src/test/resources/jpa-profiler.xml
    portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-registry/src/test/resources/jpa-registry.xml
    portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/impl/DefaultLoginModule.java
    portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/impl/ext/JBossLoginModule.java
    portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/spi/SecurityDomainStorageManager.java
    portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/spi/UserPasswordCredentialStorageManager.java
    portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/spi/impl/AbstractUserPasswordCredentialManagerImpl.java
    portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/spi/impl/JetspeedSecurityPersistenceManager.java
    portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/spi/jpa/JetspeedSecurityPersistenceManager.java
    portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-security/src/main/java/org/apache/jetspeed/serializer/JetspeedSecuritySerializer.java
    portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-security/src/test/java/org/apache/jetspeed/security/AbstractSecurityTestcase.java
    portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-security/src/test/resources/jpa-security.xml
    portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-sso/pom.xml
    portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-sso/src/main/java/org/apache/jetspeed/sso/impl/SSOManagerImpl.java
    portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-sso/src/main/java/org/apache/jetspeed/sso/spi/SSOSiteManagerSPI.java
    portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-sso/src/main/java/org/apache/jetspeed/sso/spi/impl/JetspeedPersistentSSOSiteManager.java
    portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-sso/src/main/java/org/apache/jetspeed/sso/spi/impl/SSOUserManagerSPIImpl.java
    portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-sso/src/test/java/org/apache/jetspeed/sso/AbstractSecurityTestCase.java
    portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-sso/src/test/java/org/apache/jetspeed/sso/TestSSOComponent.java
    portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-sso/src/test/java/org/apache/jetspeed/sso/TestSSOManager.java
    portals/jetspeed-2/portal/branches/JPA_BRANCH/jetspeed-api/src/main/java/org/apache/jetspeed/security/JetspeedPrincipalType.java
    portals/jetspeed-2/portal/branches/JPA_BRANCH/jetspeed-api/src/main/java/org/apache/jetspeed/security/SecurityDomain.java

Modified: portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-capability/src/test/resources/jpa-capabilities.xml
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-capability/src/test/resources/jpa-capabilities.xml?rev=742669&r1=742668&r2=742669&view=diff
==============================================================================
--- portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-capability/src/test/resources/jpa-capabilities.xml (original)
+++ portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-capability/src/test/resources/jpa-capabilities.xml Mon Feb  9 18:37:05 2009
@@ -30,7 +30,7 @@
     </bean>
 
     <!-- JPA Configuration -->
-    <bean id="persistenceUnitManager" class="org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager">
+    <bean id="persistenceUnitManager" class="org.apache.jetspeed.components.rdbms.jpa.MergingPersistenceUnitManager">
         <property name="dataSources">
             <map>
                 <entry key="jetspeed-xa" value-ref="JetspeedXADS"/>

Modified: portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-page-manager/src/test/java/org/apache/jetspeed/page/PageManagerTestShared.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-page-manager/src/test/java/org/apache/jetspeed/page/PageManagerTestShared.java?rev=742669&r1=742668&r2=742669&view=diff
==============================================================================
--- portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-page-manager/src/test/java/org/apache/jetspeed/page/PageManagerTestShared.java (original)
+++ portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-page-manager/src/test/java/org/apache/jetspeed/page/PageManagerTestShared.java Mon Feb  9 18:37:05 2009
@@ -78,6 +78,7 @@
 import org.apache.jetspeed.security.SecurityAttributeTypes;
 import org.apache.jetspeed.security.User;
 import org.apache.jetspeed.security.impl.TransientJetspeedPrincipal;
+import org.apache.jetspeed.security.spi.PersistentJetspeedPermission;
 import org.apache.jetspeed.security.spi.impl.FolderPermission;
 import org.apache.jetspeed.security.spi.impl.FragmentPermission;
 import org.apache.jetspeed.security.spi.impl.JetspeedPermissionFactory;
@@ -807,6 +808,7 @@
     {
         private static final SecurityAttributeTypes attributeTypes = new SecurityAttributeTypes()
         {
+            private static final long serialVersionUID = 1L;
 
             public Map<String, SecurityAttributeType> getAttributeTypeMap()
             {
@@ -839,6 +841,8 @@
             super(type, name);
             this.type = new JetspeedPrincipalType()
             {               
+                private static final long serialVersionUID = 1L;
+
                 public SecurityAttributeTypes getAttributeTypes()
                 {
                     return attributeTypes;
@@ -888,6 +892,45 @@
         }
     }
     
+    public static class TestPermission implements PersistentJetspeedPermission
+    {
+        private static final long serialVersionUID = 1L;
+        private String type; 
+        private String name; 
+        private String actions; 
+
+        public TestPermission(String type, String name)
+        {
+            this.type = type;
+            this.name = name;
+        }
+
+        public Long getId()
+        {
+            return null;
+        }
+
+        public void setActions(String actions)
+        {
+            this.actions = actions;
+        }
+
+        public String getActions()
+        {
+            return actions;
+        }
+
+        public String getName()
+        {
+            return name;
+        }
+
+        public String getType()
+        {
+            return type;
+        }        
+    }
+    
     public static class TestPermissionFactory implements PermissionFactory
     {
         private static Map<String, JetspeedPermissionFactory> factories = new HashMap<String, JetspeedPermissionFactory>();
@@ -900,12 +943,12 @@
 
         public JetspeedPermission newPermission(String type, String name, String actions)
         {
-            return factories.get(type).newPermission(name, actions);
+            return factories.get(type).newPermission(new TestPermission(type, name), actions);            
         }
 
         public JetspeedPermission newPermission(String type, String name, int mask)
         {
-            return factories.get(type).newPermission(name, mask);
+            return factories.get(type).newPermission(new TestPermission(type, name), mask);            
         }
 
         public int parseActions(String actions)

Modified: portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-page-manager/src/test/resources/jpa-database-page-manager.xml
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-page-manager/src/test/resources/jpa-database-page-manager.xml?rev=742669&r1=742668&r2=742669&view=diff
==============================================================================
--- portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-page-manager/src/test/resources/jpa-database-page-manager.xml (original)
+++ portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-page-manager/src/test/resources/jpa-database-page-manager.xml Mon Feb  9 18:37:05 2009
@@ -30,7 +30,7 @@
     </bean>
 
     <!-- JPA Configuration -->
-    <bean id="persistenceUnitManager" class="org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager">
+    <bean id="persistenceUnitManager" class="org.apache.jetspeed.components.rdbms.jpa.MergingPersistenceUnitManager">
         <property name="dataSources">
             <map>
                 <entry key="jetspeed-xa" value-ref="JetspeedXADS"/>

Modified: portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-profiler/src/test/resources/jpa-profiler.xml
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-profiler/src/test/resources/jpa-profiler.xml?rev=742669&r1=742668&r2=742669&view=diff
==============================================================================
--- portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-profiler/src/test/resources/jpa-profiler.xml (original)
+++ portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-profiler/src/test/resources/jpa-profiler.xml Mon Feb  9 18:37:05 2009
@@ -30,7 +30,7 @@
     </bean>
 
     <!-- JPA Configuration -->
-    <bean id="persistenceUnitManager" class="org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager">
+    <bean id="persistenceUnitManager" class="org.apache.jetspeed.components.rdbms.jpa.MergingPersistenceUnitManager">
         <property name="dataSources">
             <map>
                 <entry key="jetspeed-xa" value-ref="JetspeedXADS"/>

Added: portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-rdbms/src/main/java/org/apache/jetspeed/components/rdbms/jpa/MergingPersistenceUnitManager.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-rdbms/src/main/java/org/apache/jetspeed/components/rdbms/jpa/MergingPersistenceUnitManager.java?rev=742669&view=auto
==============================================================================
--- portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-rdbms/src/main/java/org/apache/jetspeed/components/rdbms/jpa/MergingPersistenceUnitManager.java (added)
+++ portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-rdbms/src/main/java/org/apache/jetspeed/components/rdbms/jpa/MergingPersistenceUnitManager.java Mon Feb  9 18:37:05 2009
@@ -0,0 +1,140 @@
+/*
+ * 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.components.rdbms.jpa;
+
+import java.net.URL;
+import java.util.Map;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager;
+import org.springframework.orm.jpa.persistenceunit.MutablePersistenceUnitInfo;
+
+/**
+ * MergingPersistenceUnitManager
+ * 
+ * @author <a href="mailto:rwatler@apache.org">Randy Watler</a>
+ * @version $Id: $
+ */
+public class MergingPersistenceUnitManager extends DefaultPersistenceUnitManager
+{
+    private static final Log logger = LogFactory.getLog(MergingPersistenceUnitManager.class);
+
+    /**
+     * Default constructor.
+     */
+    public MergingPersistenceUnitManager()
+    {
+    }
+    
+    /* (non-Javadoc)
+     * @see org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager#postProcessPersistenceUnitInfo(org.springframework.orm.jpa.persistenceunit.MutablePersistenceUnitInfo)
+     */
+    protected void postProcessPersistenceUnitInfo(MutablePersistenceUnitInfo persistenceUnitInfo)
+    {
+        // post process persistence unit information normally
+        super.postProcessPersistenceUnitInfo(persistenceUnitInfo);
+        
+        // merge existing persistence unit information into current;
+        // normally, only last persistence unit information is used
+        String persistenceUnitName = persistenceUnitInfo.getPersistenceUnitName();
+        MutablePersistenceUnitInfo existingPersistenceUnitInfo = getPersistenceUnitInfo(persistenceUnitName);
+        if (existingPersistenceUnitInfo != null)
+        {
+            boolean merged = false;
+            boolean mergeConflict = false;
+            
+            // merge jar file urls
+            for (URL jarFileUrl : existingPersistenceUnitInfo.getJarFileUrls())
+            {
+                if (!persistenceUnitInfo.getJarFileUrls().contains(jarFileUrl))
+                {
+                    persistenceUnitInfo.addJarFileUrl(jarFileUrl);
+                    merged = true;
+                }
+            }
+            
+            // merge managed class names
+            for (String managedClassName : existingPersistenceUnitInfo.getManagedClassNames())
+            {
+                if (!persistenceUnitInfo.getManagedClassNames().contains(managedClassName))
+                {
+                    persistenceUnitInfo.addManagedClassName(managedClassName);
+                    merged = true;
+                }
+            }
+
+            // merge mapping file names
+            for (String mappingFileNames : existingPersistenceUnitInfo.getMappingFileNames())
+            {
+                if (!persistenceUnitInfo.getMappingFileNames().contains(mappingFileNames))
+                {
+                    persistenceUnitInfo.addMappingFileName(mappingFileNames);
+                    merged = true;
+                }                
+            }
+
+            // merge properties
+            for (Map.Entry<Object,Object> property : existingPersistenceUnitInfo.getProperties().entrySet())
+            {
+                if (!persistenceUnitInfo.getProperties().containsKey(property.getKey()))
+                {
+                    persistenceUnitInfo.addProperty(property.getKey().toString(), property.getValue().toString());
+                    merged = true;
+                }
+                else if (!persistenceUnitInfo.getProperties().get(property.getKey()).equals(property.getValue()))
+                {
+                    mergeConflict = true;
+                }
+            }
+
+            // verify other persistence unit settings
+            if (((existingPersistenceUnitInfo.getPersistenceProviderClassName() == null) && (persistenceUnitInfo.getPersistenceProviderClassName() != null)) ||
+                ((existingPersistenceUnitInfo.getPersistenceProviderClassName() != null) && !existingPersistenceUnitInfo.getPersistenceProviderClassName().equals(persistenceUnitInfo.getPersistenceProviderClassName())))
+            {
+                mergeConflict = true;                
+            }
+            if (((existingPersistenceUnitInfo.getPersistenceProviderPackageName() == null) && (persistenceUnitInfo.getPersistenceProviderPackageName() != null)) ||
+                ((existingPersistenceUnitInfo.getPersistenceProviderPackageName() != null) && !existingPersistenceUnitInfo.getPersistenceProviderPackageName().equals(persistenceUnitInfo.getPersistenceProviderPackageName())))
+            {
+                mergeConflict = true;                
+            }
+            if (existingPersistenceUnitInfo.getTransactionType() != persistenceUnitInfo.getTransactionType())
+            {
+                mergeConflict = true;                
+            }
+            if (existingPersistenceUnitInfo.getJtaDataSource() != persistenceUnitInfo.getJtaDataSource())
+            {
+                mergeConflict = true;                
+            }
+            if (existingPersistenceUnitInfo.getNonJtaDataSource() != persistenceUnitInfo.getNonJtaDataSource())
+            {
+                mergeConflict = true;                
+            }
+            
+            // log merge and potential merge conflict
+            if (merged)
+            {
+                logger.info("Merged "+persistenceUnitName+" JPA persistence units: "+existingPersistenceUnitInfo.getPersistenceUnitRootUrl()+" and "+persistenceUnitInfo.getPersistenceUnitRootUrl());
+            }
+            if (mergeConflict)
+            {
+                logger.warn("Merge conflicts found between "+persistenceUnitName+" JPA persistence units: "+existingPersistenceUnitInfo.getPersistenceUnitRootUrl()+" and "+persistenceUnitInfo.getPersistenceUnitRootUrl());
+            }
+        }
+    }
+}

Modified: portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-registry/src/test/resources/jpa-registry.xml
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-registry/src/test/resources/jpa-registry.xml?rev=742669&r1=742668&r2=742669&view=diff
==============================================================================
--- portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-registry/src/test/resources/jpa-registry.xml (original)
+++ portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-registry/src/test/resources/jpa-registry.xml Mon Feb  9 18:37:05 2009
@@ -30,7 +30,7 @@
     </bean>
 
     <!-- JPA Configuration -->
-    <bean id="persistenceUnitManager" class="org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager">
+    <bean id="persistenceUnitManager" class="org.apache.jetspeed.components.rdbms.jpa.MergingPersistenceUnitManager">
         <property name="dataSources">
             <map>
                 <entry key="jetspeed-xa" value-ref="JetspeedXADS"/>

Modified: portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/impl/DefaultLoginModule.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/impl/DefaultLoginModule.java?rev=742669&r1=742668&r2=742669&view=diff
==============================================================================
--- portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/impl/DefaultLoginModule.java (original)
+++ portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/impl/DefaultLoginModule.java Mon Feb  9 18:37:05 2009
@@ -322,7 +322,7 @@
         {
             // add portal user role: used in web.xml authorization to
             // detect authenticated portal users
-            subject.getPrincipals().add(rms.newRole(portalUserRole, false));
+            subject.getPrincipals().add(rms.newTransientRole(portalUserRole));
         }
     }
 }

Added: portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/impl/SecurityAttributeValue.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/impl/SecurityAttributeValue.java?rev=742669&view=auto
==============================================================================
--- portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/impl/SecurityAttributeValue.java (added)
+++ portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/impl/SecurityAttributeValue.java Mon Feb  9 18:37:05 2009
@@ -0,0 +1,53 @@
+/*
+ * 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;
+
+/**
+ * @version $Id: $
+ *
+ */
+public interface SecurityAttributeValue
+{
+    /**
+     * Get name of attribute.
+     * 
+     * @return attribute name.
+     */
+    public String getName();
+    
+    /**
+     * Set name of attribute.
+     * 
+     * @param attribute name.
+     */
+    public void setName(String name);
+    
+    /**
+     * Get string value of attribute.
+     * 
+     * @return attribute value.
+     */
+    public String getStringValue();
+    
+    /**
+     * Set attribute value.
+     * 
+     * @param stringValue attribute value.
+     */
+    public void setStringValue(String stringValue);
+}

Modified: portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/impl/ext/JBossLoginModule.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/impl/ext/JBossLoginModule.java?rev=742669&r1=742668&r2=742669&view=diff
==============================================================================
--- portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/impl/ext/JBossLoginModule.java (original)
+++ portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/impl/ext/JBossLoginModule.java Mon Feb  9 18:37:05 2009
@@ -123,7 +123,7 @@
         {
             // add portal user role: used in web.xml authorization to
             // detect authenticated portal users
-            roles.addMember(rms.newRole(portalUserRole, false));        
+            roles.addMember(rms.newTransientRole(portalUserRole));        
         }
         subject.getPrincipals().add(roles);
     }

Modified: portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/spi/SecurityDomainStorageManager.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/spi/SecurityDomainStorageManager.java?rev=742669&r1=742668&r2=742669&view=diff
==============================================================================
--- portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/spi/SecurityDomainStorageManager.java (original)
+++ portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/spi/SecurityDomainStorageManager.java Mon Feb  9 18:37:05 2009
@@ -26,6 +26,10 @@
  */
 public interface SecurityDomainStorageManager
 {
+    
+    public SecurityDomain newDomain();
+
+    public SecurityDomain copyDomain(SecurityDomain domain);
 
     public void addDomain(SecurityDomain domain) throws SecurityException;
 

Modified: portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/spi/UserPasswordCredentialStorageManager.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/spi/UserPasswordCredentialStorageManager.java?rev=742669&r1=742668&r2=742669&view=diff
==============================================================================
--- portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/spi/UserPasswordCredentialStorageManager.java (original)
+++ portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/spi/UserPasswordCredentialStorageManager.java Mon Feb  9 18:37:05 2009
@@ -27,6 +27,7 @@
  */
 public interface UserPasswordCredentialStorageManager extends Serializable
 {
+    PasswordCredential newPasswordCredential(User user);
     PasswordCredential getPasswordCredential(User user) throws SecurityException;
     void storePasswordCredential(PasswordCredential credential) throws SecurityException;
 }

Modified: portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/spi/impl/AbstractUserPasswordCredentialManagerImpl.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/spi/impl/AbstractUserPasswordCredentialManagerImpl.java?rev=742669&r1=742668&r2=742669&view=diff
==============================================================================
--- portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/spi/impl/AbstractUserPasswordCredentialManagerImpl.java (original)
+++ portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/spi/impl/AbstractUserPasswordCredentialManagerImpl.java Mon Feb  9 18:37:05 2009
@@ -48,6 +48,11 @@
         this.upcpm = upcpm;
     }
 
+    public PasswordCredential newPasswordCredential(User user)
+    {
+        return upcsm.newPasswordCredential(user);
+    }
+
     public PasswordCredential getPasswordCredential(User user) throws SecurityException
     {
         PasswordCredential credential = upcsm.getPasswordCredential(user);

Modified: portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/spi/impl/JetspeedSecurityPersistenceManager.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/spi/impl/JetspeedSecurityPersistenceManager.java?rev=742669&r1=742668&r2=742669&view=diff
==============================================================================
--- portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/spi/impl/JetspeedSecurityPersistenceManager.java (original)
+++ portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/spi/impl/JetspeedSecurityPersistenceManager.java Mon Feb  9 18:37:05 2009
@@ -470,6 +470,14 @@
     //
     // UserPasswordCredentialStorageManager interface implementation
     //
+    
+    public PasswordCredential newPasswordCredential(User user)
+    {
+        PasswordCredentialImpl pwc = new PasswordCredentialImpl();
+        pwc.setUser(user);
+        return pwc;
+    }
+    
     public PasswordCredential getPasswordCredential(User user)
     {
         Criteria criteria = new Criteria();
@@ -977,6 +985,16 @@
         }
     }
     
+    public SecurityDomain newDomain()
+    {
+        return new SecurityDomainImpl();
+    }
+        
+    public SecurityDomain copyDomain(SecurityDomain domain)
+    {
+        return new SecurityDomainImpl((SecurityDomainImpl)domain);
+    }
+        
     public void addDomain(SecurityDomain domain) throws SecurityException 
     {
         if (domainExists(domain))

Modified: portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/spi/jpa/JetspeedSecurityPersistenceManager.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/spi/jpa/JetspeedSecurityPersistenceManager.java?rev=742669&r1=742668&r2=742669&view=diff
==============================================================================
--- portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/spi/jpa/JetspeedSecurityPersistenceManager.java (original)
+++ portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/spi/jpa/JetspeedSecurityPersistenceManager.java Mon Feb  9 18:37:05 2009
@@ -574,6 +574,13 @@
     // UserPasswordCredentialStorageManager interface implementation
     //
 
+    public PasswordCredential newPasswordCredential(User user)
+    {
+        PasswordCredentialImpl pwc = new PasswordCredentialImpl();
+        pwc.setUser(user);
+        return pwc;
+    }
+    
     @Transactional (readOnly=true)
     public PasswordCredential getPasswordCredential(User user)
     {
@@ -1268,6 +1275,16 @@
         }
     }
     
+    public SecurityDomain newDomain()
+    {
+        return new SecurityDomainImpl();
+    }
+
+    public SecurityDomain copyDomain(SecurityDomain domain)
+    {
+        return new SecurityDomainImpl((SecurityDomainImpl)domain);
+    }    
+        
     @Transactional (readOnly=false, rollbackFor=SecurityException.class)
     public void addDomain(SecurityDomain domain) throws SecurityException 
     {

Modified: portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-security/src/main/java/org/apache/jetspeed/serializer/JetspeedSecuritySerializer.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-security/src/main/java/org/apache/jetspeed/serializer/JetspeedSecuritySerializer.java?rev=742669&r1=742668&r2=742669&view=diff
==============================================================================
--- portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-security/src/main/java/org/apache/jetspeed/serializer/JetspeedSecuritySerializer.java (original)
+++ portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-security/src/main/java/org/apache/jetspeed/serializer/JetspeedSecuritySerializer.java Mon Feb  9 18:37:05 2009
@@ -47,7 +47,6 @@
 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;
@@ -256,7 +255,7 @@
     protected SecurityDomain checkDomainExistsOtherwiseCreate(String domainName) throws SecurityException{
         SecurityDomain domain = domainAccessManager.getDomainByName(domainName);
         if (domain == null){
-            SecurityDomainImpl newDomain = new SecurityDomainImpl();
+            SecurityDomain newDomain = domainStorageManager.newDomain();
             newDomain.setName(domainName);
             newDomain.setEnabled(true);
             newDomain.setRemote(false);
@@ -337,7 +336,7 @@
                     }
                 }
                 
-                SecurityDomainImpl newDomain = new SecurityDomainImpl();
+                SecurityDomain newDomain = domainStorageManager.newDomain();
                 newDomain.setName(jsDomain.getName());
                 newDomain.setOwnerDomainId(ownerDomainId);
                 newDomain.setRemote(jsDomain.isRemote());

Modified: portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-security/src/test/java/org/apache/jetspeed/security/AbstractSecurityTestcase.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-security/src/test/java/org/apache/jetspeed/security/AbstractSecurityTestcase.java?rev=742669&r1=742668&r2=742669&view=diff
==============================================================================
--- portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-security/src/test/java/org/apache/jetspeed/security/AbstractSecurityTestcase.java (original)
+++ portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-security/src/test/java/org/apache/jetspeed/security/AbstractSecurityTestcase.java Mon Feb  9 18:37:05 2009
@@ -34,7 +34,7 @@
 import org.apache.jetspeed.security.User;
 import org.apache.jetspeed.security.UserManager;
 import org.apache.jetspeed.security.SecurityException;
-import org.apache.jetspeed.security.impl.SecurityDomainImpl;
+import org.apache.jetspeed.security.SecurityDomain;
 import org.apache.jetspeed.security.spi.SecurityDomainAccessManager;
 import org.apache.jetspeed.security.spi.SecurityDomainStorageManager;
 
@@ -81,16 +81,16 @@
 
         // TODO: remove when default seed contains the default domain        
         SecurityDomain domain = domainAccessManager.getDomainByName(SecurityDomain.SYSTEM_NAME); 
-        if (domain == null){
-            
-            SecurityDomainImpl newDomain = new SecurityDomainImpl();
+        if (domain == null)
+        {
+            SecurityDomain newDomain = domainStorageManager.newDomain();
             newDomain.setName(SecurityDomain.SYSTEM_NAME);
             domainStorageManager.addDomain(newDomain);
         } 
         domain = domainAccessManager.getDomainByName(SecurityDomain.DEFAULT_NAME); 
-        if (domain == null){
-            
-            SecurityDomainImpl newDomain = new SecurityDomainImpl();
+        if (domain == null)
+        {            
+            SecurityDomain newDomain = domainStorageManager.newDomain();
             newDomain.setName(SecurityDomain.DEFAULT_NAME);
             domainStorageManager.addDomain(newDomain);
         }

Modified: portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-security/src/test/resources/jpa-security.xml
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-security/src/test/resources/jpa-security.xml?rev=742669&r1=742668&r2=742669&view=diff
==============================================================================
--- portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-security/src/test/resources/jpa-security.xml (original)
+++ portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-security/src/test/resources/jpa-security.xml Mon Feb  9 18:37:05 2009
@@ -30,7 +30,7 @@
     </bean>
 
     <!-- JPA Configuration -->
-    <bean id="persistenceUnitManager" class="org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager">
+    <bean id="persistenceUnitManager" class="org.apache.jetspeed.components.rdbms.jpa.MergingPersistenceUnitManager">
         <property name="dataSources">
             <map>
                 <entry key="jetspeed-xa" value-ref="JetspeedXADS"/>
@@ -351,7 +351,7 @@
         <constructor-arg index="3"><value>portal-user</value></constructor-arg>
     </bean>
 
-    <!-- JPA security Manager Context -->
+    <!-- JPA Security Manager Context -->
     <bean id="securityManagerContext" class="org.apache.jetspeed.security.spi.jpa.SecurityManagerContext" scope="prototype" init-method="initialize" destroy-method="terminate">
         <property name="securityManager" ref="org.apache.jetspeed.security.spi.JetspeedSecurityPersistenceManager"/>
     </bean>

Modified: portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-sso/pom.xml
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-sso/pom.xml?rev=742669&r1=742668&r2=742669&view=diff
==============================================================================
--- portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-sso/pom.xml (original)
+++ portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-sso/pom.xml Mon Feb  9 18:37:05 2009
@@ -125,6 +125,52 @@
                     </execution>
                 </executions>
             </plugin>
+ 	        <plugin>
+                <groupId>org.codehaus.mojo</groupId>
+                <artifactId>openjpa-maven-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>org.apache.jetspeed.sso.spi.jpa</id>
+                        <phase>process-classes</phase>
+                        <goals>
+                            <goal>enhance</goal>
+                        </goals>
+                        <configuration>
+                            <classes>${project.build.directory}/classes/org/apache/jetspeed/sso/spi/jpa</classes>
+                            <toolProperties>                      	 
+                                <property>
+                                    <name>addDefaultConstructor</name>
+                                    <value>true</value>
+                                </property>
+                                <property>
+                                    <name>enforcePropertyRestrictions</name>
+                                    <value>true</value>
+                                </property>
+                            </toolProperties>
+                        </configuration>
+                    </execution>
+                    <execution>
+                        <id>org.apache.jetspeed.sso.jpa</id>
+                        <phase>process-classes</phase>
+                        <goals>
+                            <goal>enhance</goal>
+                        </goals>
+                        <configuration>
+                            <classes>${project.build.directory}/classes/org/apache/jetspeed/sso/jpa</classes>
+                            <toolProperties>                      	 
+                                <property>
+                                    <name>addDefaultConstructor</name>
+                                    <value>true</value>
+                                </property>
+                                <property>
+                                    <name>enforcePropertyRestrictions</name>
+                                    <value>true</value>
+                                </property>
+                            </toolProperties>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
         </plugins>
         <testResources>
             <testResource>

Modified: portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-sso/src/main/java/org/apache/jetspeed/sso/impl/SSOManagerImpl.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-sso/src/main/java/org/apache/jetspeed/sso/impl/SSOManagerImpl.java?rev=742669&r1=742668&r2=742669&view=diff
==============================================================================
--- portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-sso/src/main/java/org/apache/jetspeed/sso/impl/SSOManagerImpl.java (original)
+++ portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-sso/src/main/java/org/apache/jetspeed/sso/impl/SSOManagerImpl.java Mon Feb  9 18:37:05 2009
@@ -20,9 +20,7 @@
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
-import java.util.HashSet;
 import java.util.Map;
-import java.util.Set;
 
 import javax.security.auth.Subject;
 
@@ -34,10 +32,8 @@
 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.PasswordCredentialImpl;
 import org.apache.jetspeed.sso.SSOClient;
 import org.apache.jetspeed.sso.SSOException;
 import org.apache.jetspeed.sso.SSOManager;
@@ -119,21 +115,28 @@
     public void setPassword(SSOUser user, String pwd) throws SSOException
     {
     	PasswordCredential pwdCred = null;
-    	
-    	try{
-    	    pwdCred=ssoUserManagerSPI.getPasswordCredential(user);
-    	} catch (SecurityException secex){
-    	    
+    	try
+    	{
+    	    pwdCred = ssoUserManagerSPI.getPasswordCredential(user);
     	}
-    	if (pwdCred != null){
-    	    pwdCred.setPassword(pwd, false);
-    	} else {
-            pwdCred=new PasswordCredentialImpl(user,pwd);
+    	catch (SecurityException secex)
+    	{
+            throw new SSOException(secex);
     	}
-    	
-    	try{
+    	if (pwdCred != null)
+    	{
+            pwdCred.setPassword(pwd, false);
+    	}
+    	else
+    	{
+    	    throw new SSOException("Unable to get password credential for user: "+user);
+    	}    	
+    	try
+    	{
     	    ssoUserManagerSPI.storePasswordCredential(pwdCred);
-    	} catch (SecurityException sx){
+    	}
+    	catch (SecurityException sx)
+    	{
     		throw new SSOException(sx);
     	}
     }
@@ -172,7 +175,7 @@
     		throw new SSOException(SSOException.SITE_ALREADY_EXISTS);
     	}
     	
-		SecurityDomainImpl sd = new SecurityDomainImpl();
+		SecurityDomain sd = domainStorageManager.newDomain();
     	sd.setName(site.getName());
     	sd.setOwnerDomainId(ownerDomainId);
     	sd.setEnabled(true);    	
@@ -338,7 +341,7 @@
                 throw new SSOException("Unable to rename site to '"+site.getName()+"': a security domain with that name already exists!");
             }
             SecurityDomain domain = domainAccessManager.getDomain(currentSite.getSecurityDomainId());
-            SecurityDomainImpl renamedDomain = new SecurityDomainImpl(domain);
+            SecurityDomain renamedDomain = domainStorageManager.copyDomain(domain);
             renamedDomain.setName(site.getName());
             try{
                 domainStorageManager.updateDomain(renamedDomain);    
@@ -373,8 +376,12 @@
         return ssoSiteManagerSPI.getById(id);
     }
     
-    public SSOSite newSite(String name, String url){
-        return new SSOSiteImpl(name,url);
+    public SSOSite newSite(String name, String url)
+    {
+        SSOSite site = ssoSiteManagerSPI.newSite();
+        site.setName(name);
+        site.setURL(url);
+        return site;
     }
     
     public void setUserManager(UserManager userMan)

Added: portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-sso/src/main/java/org/apache/jetspeed/sso/jpa/SSOSiteImpl.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-sso/src/main/java/org/apache/jetspeed/sso/jpa/SSOSiteImpl.java?rev=742669&view=auto
==============================================================================
--- portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-sso/src/main/java/org/apache/jetspeed/sso/jpa/SSOSiteImpl.java (added)
+++ portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-sso/src/main/java/org/apache/jetspeed/sso/jpa/SSOSiteImpl.java Mon Feb  9 18:37:05 2009
@@ -0,0 +1,288 @@
+/*
+ * 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.sso.jpa;
+
+import javax.persistence.Basic;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.NamedQueries;
+import javax.persistence.Table;
+import javax.persistence.Version;
+
+import org.apache.jetspeed.sso.SSOSite;
+
+/**
+ * SSOSiteImpl Class holding information about the Site and credentials for
+ * Single Sign on SSO.
+ * 
+ * @author <a href="mailto:rogerrut@apache.org">Roger Ruttimann</a>
+ * @author <a href="mailto:ddam@apache.org">Dennis Dam</a>
+ * @version $Id: SSOSiteImpl.java 736069 2009-01-20 19:10:43Z rwatler $
+ */
+@Entity (name="SSOSite")
+@Table (name="SSO_SITE")
+@NamedQueries ({@NamedQuery(name="SSO_SITE", query="select ss from SSOSite ss where ss.id = :id"),
+                @NamedQuery(name="SSO_SITE_NAME", query="select ss from SSOSite ss where ss.name = :name"),
+                @NamedQuery(name="SSO_SITE_URL", query="select ss from SSOSite ss where ss.url = :url"),
+                @NamedQuery(name="SSO_SITE_LIKE_URL_NAME", query="select ss from SSOSite ss where ss.url like :url or ss.name like :name"),
+                @NamedQuery(name="SSO_SITE_DOMAIN", query="select ss from SSOSite ss where ss.securityDomainId = :domainId order by ss.name asc")})
+public class SSOSiteImpl implements SSOSite
+{
+    // Members
+    
+    @Id
+    @GeneratedValue (strategy=GenerationType.AUTO)
+    @Column (name="SITE_ID")
+    private int id;
+    @Version
+    @Column (name="JPA_VERSION")
+    @SuppressWarnings("unused")
+    private int jpaVersion;
+    @Basic
+    @Column (name="NAME")
+    private String name;
+    @Basic
+    @Column (name="URL")
+    private String url;
+    @Basic
+    @Column (name="ALLOW_USER_SET")
+    private boolean isAllowUserSet;
+    @Basic
+    @Column (name="REQUIRES_CERTIFICATE")
+    private boolean isCertificateRequired;
+    @Basic
+    @Column (name="CHALLENGE_RESPONSE_AUTH")
+    private boolean challengeResponseAuthentication;
+    @Basic
+    @Column (name="FORM_AUTH")
+    private boolean isFormAuthentication;
+    /* Configurable name of form fields for User values. */
+    @Basic
+    @Column (name="FORM_USER_FIELD")
+    private String formUserField;
+    /* Configurable name of form fields for Password values. */
+    @Basic
+    @Column (name="FORM_PWD_FIELD")
+    private String formPwdField;
+    /* Realm used to do ChallengeResponse Authentication */
+    @Basic
+    @Column (name="REALM")
+    private String realm;
+    @Basic
+    @Column (name="DOMAIN_ID")
+    private Long securityDomainId;
+
+    // Implementation
+    
+    public SSOSiteImpl()
+    {
+        super();
+    }
+    
+    public SSOSiteImpl(String name, String url)
+    {
+        this();
+        this.name=name;
+        this.url=url;
+    }
+    
+    /**
+     * @return Returns the isAllowUserSet.
+     */
+    public boolean isAllowUserSet()
+    {
+        return isAllowUserSet;
+    }
+
+    /**
+     * @param isAllowUserSet
+     *            The isAllowUserSet to set.
+     */
+    public void setAllowUserSet(boolean isAllowUserSet)
+    {
+        this.isAllowUserSet = isAllowUserSet;
+    }
+
+    /**
+     * @return Returns the isCertificateRequired.
+     */
+    public boolean isCertificateRequired()
+    {
+        return isCertificateRequired;
+    }
+
+    /**
+     * @param isCertificateRequired
+     *            The isCertificateRequired to set.
+     */
+    public void setCertificateRequired(boolean isCertificateRequired)
+    {
+        this.isCertificateRequired = isCertificateRequired;
+    }
+
+    /**
+     * @return Returns the name.
+     */
+    public String getName()
+    {
+        return name;
+    }
+
+    /**
+     * @param name
+     *            The name to set.
+     */
+    public void setName(String name)
+    {
+        this.name = name;
+    }
+
+    /**
+     * @return Returns the siteId.
+     */
+    public int getId()
+    {
+        return id;
+    }
+
+    /**
+     * @return sets the id of the site
+     */
+    public void setId(int id)
+    {
+        this.id = id;
+    }
+
+    /**
+     * @return Returns the siteURL.
+     */
+    public String getURL()
+    {
+        return url;
+    }
+
+    /**
+     * @param siteURL
+     *            The siteURL to set.
+     */
+    public void setURL(String url)
+    {
+        this.url = url;
+    }
+
+    /**
+     * Define the Authentication methods. Supported are: Challenge Response and
+     * From based
+     */
+    /**
+     * Form authentication requires two fields that hold the credential
+     * information for the request.
+     */
+    public void setFormAuthentication(String formUserField, String formPwdField)
+    {
+        // Set the fields for Form Authentication and clear other authentication
+        // methods
+
+    }
+   
+    public String getFormPwdField()
+    {
+        return formPwdField;
+    }
+
+    public void setFormPwdField(String formPwdField)
+    {
+        this.formPwdField = formPwdField;
+    }
+
+    public String getFormUserField()
+    {
+        return formUserField;
+    }
+
+    public void setFormUserField(String formUserField)
+    {
+        this.formUserField = formUserField;
+    }
+
+    public boolean isFormAuthentication()
+    {
+        return isFormAuthentication;
+    }
+
+    public void setFormAuthentication(boolean isFormAuthentication)
+    {
+        this.isFormAuthentication = isFormAuthentication;
+    }
+
+    public void configFormAuthentication(String formUserField,
+            String formPwdField)
+    {
+        this.isFormAuthentication = true;
+        this.setChallengeResponseAuthentication(false);
+
+        this.formPwdField = formPwdField;
+        this.formUserField = formUserField;
+    }
+
+    public void setRealm(String realm)
+    {
+        this.realm = realm;
+    }
+
+    public String getRealm()
+    {
+        return this.realm;
+    }
+
+    public Long getSecurityDomainId()
+    {
+        return securityDomainId;
+    }
+
+    public void setSecurityDomainId(Long securityDomainId)
+    {
+        this.securityDomainId = securityDomainId;
+    }
+
+    
+    public boolean isChallengeResponseAuthentication()
+    {
+        return challengeResponseAuthentication;
+    }
+
+    
+    public void setChallengeResponseAuthentication(boolean challengeResponseAuthentication)
+    {
+        this.challengeResponseAuthentication = challengeResponseAuthentication;
+    }
+
+    /**
+     * Test whether element is newly created.
+     * 
+     * @return new status of element.
+     */
+    public boolean isNew()
+    {
+        return (id == 0);
+    }    
+}

Added: portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-sso/src/main/java/org/apache/jetspeed/sso/jpa/SSOUserImpl.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-sso/src/main/java/org/apache/jetspeed/sso/jpa/SSOUserImpl.java?rev=742669&view=auto
==============================================================================
--- portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-sso/src/main/java/org/apache/jetspeed/sso/jpa/SSOUserImpl.java (added)
+++ portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-sso/src/main/java/org/apache/jetspeed/sso/jpa/SSOUserImpl.java Mon Feb  9 18:37:05 2009
@@ -0,0 +1,47 @@
+/* 
+ * 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.sso.jpa;
+
+import javax.persistence.DiscriminatorColumn;
+import javax.persistence.DiscriminatorValue;
+import javax.persistence.Entity;
+import javax.persistence.Inheritance;
+import javax.persistence.InheritanceType;
+import javax.persistence.Table;
+
+import org.apache.jetspeed.security.JetspeedPrincipalType;
+import org.apache.jetspeed.security.jpa.PersistentJetspeedPrincipal;
+import org.apache.jetspeed.sso.SSOUser;
+
+/**
+ * @author <a href="mailto:ddam@apache.org">Dennis Dam</a>
+ * @version $Id: SSOUserImpl.java 736069 2009-01-20 19:10:43Z rwatler $
+ */
+@Entity (name="SSOUser")
+@Inheritance (strategy=InheritanceType.SINGLE_TABLE)
+@Table (name="SECURITY_PRINCIPAL")
+@DiscriminatorColumn (name="PRINCIPAL_TYPE")
+@DiscriminatorValue (value=JetspeedPrincipalType.SSO_USER)
+public class SSOUserImpl extends PersistentJetspeedPrincipal implements SSOUser 
+{
+    private static final long serialVersionUID = 1L;
+
+    public SSOUserImpl()
+    {
+        super();
+    }
+}

Modified: portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-sso/src/main/java/org/apache/jetspeed/sso/spi/SSOSiteManagerSPI.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-sso/src/main/java/org/apache/jetspeed/sso/spi/SSOSiteManagerSPI.java?rev=742669&r1=742668&r2=742669&view=diff
==============================================================================
--- portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-sso/src/main/java/org/apache/jetspeed/sso/spi/SSOSiteManagerSPI.java (original)
+++ portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-sso/src/main/java/org/apache/jetspeed/sso/spi/SSOSiteManagerSPI.java Mon Feb  9 18:37:05 2009
@@ -37,6 +37,8 @@
 	SSOSite getById(int id);
 
     void update(SSOSite site) throws SSOException;
+
+    SSOSite newSite();
     
     SSOSite add(SSOSite site) throws SSOException; 
     

Added: portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-sso/src/main/java/org/apache/jetspeed/sso/spi/impl/AbstractSSOUserManagerSPIImpl.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-sso/src/main/java/org/apache/jetspeed/sso/spi/impl/AbstractSSOUserManagerSPIImpl.java?rev=742669&view=auto
==============================================================================
--- portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-sso/src/main/java/org/apache/jetspeed/sso/spi/impl/AbstractSSOUserManagerSPIImpl.java (added)
+++ portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-sso/src/main/java/org/apache/jetspeed/sso/spi/impl/AbstractSSOUserManagerSPIImpl.java Mon Feb  9 18:37:05 2009
@@ -0,0 +1,193 @@
+/* 
+ * 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.sso.spi.impl;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.apache.jetspeed.security.JetspeedPrincipal;
+import org.apache.jetspeed.security.JetspeedPrincipalAssociationReference;
+import org.apache.jetspeed.security.JetspeedPrincipalAssociationType;
+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.impl.BaseJetspeedPrincipalManager;
+import org.apache.jetspeed.security.spi.JetspeedDomainPrincipalAccessManager;
+import org.apache.jetspeed.security.spi.JetspeedPrincipalAccessManager;
+import org.apache.jetspeed.security.spi.JetspeedPrincipalStorageManager;
+import org.apache.jetspeed.security.spi.SecurityDomainAccessManager;
+import org.apache.jetspeed.security.spi.UserPasswordCredentialAccessManager;
+import org.apache.jetspeed.security.spi.UserPasswordCredentialStorageManager;
+import org.apache.jetspeed.sso.SSOUser;
+import org.apache.jetspeed.sso.impl.IsOwnedByPrincipalAssociationHandler;
+import org.apache.jetspeed.sso.impl.IsRemoteIdentityForPrincipalAssociationHandler;
+import org.apache.jetspeed.sso.spi.SSOUserManagerSPI;
+
+/**
+ * @author <a href="mailto:ddam@apache.org">Dennis Dam</a>
+ * @version $Id: AbstractSSOUserManagerSPIImpl.java 736069 2009-01-20 19:10:43Z rwatler $
+ */
+public abstract class AbstractSSOUserManagerSPIImpl extends BaseJetspeedPrincipalManager implements SSOUserManagerSPI
+{
+    private static final long serialVersionUID = 1L;
+
+    private JetspeedDomainPrincipalAccessManager domainPrincipalAccess;
+    private SecurityDomainAccessManager domainAccess;
+    
+    private UserPasswordCredentialStorageManager credentialStorageManager;
+    private UserPasswordCredentialAccessManager credentialAccessManager;
+
+    protected AbstractSSOUserManagerSPIImpl(JetspeedPrincipalType principalType, JetspeedPrincipalAccessManager jpam, JetspeedPrincipalStorageManager jpsm, UserPasswordCredentialStorageManager credentialStorageManager,
+                                            UserPasswordCredentialAccessManager credentialAccessManager, JetspeedDomainPrincipalAccessManager domainPrincipalAccess, SecurityDomainAccessManager domainAccess)
+    {
+        super(principalType, jpam, jpsm);
+        this.credentialStorageManager = credentialStorageManager;
+        this.credentialAccessManager = credentialAccessManager;
+        this.domainPrincipalAccess=domainPrincipalAccess;
+        this.domainAccess=domainAccess;
+    }
+    
+    public JetspeedPrincipal newPrincipal(String name, boolean mapped)
+    {
+        return null;
+    }
+
+    public JetspeedPrincipal newTransientPrincipal(String name)
+    {
+        return null;
+    }
+
+    public SSOUser addUser(String name, Long domainId, JetspeedPrincipal ownerPrincipal)
+            throws SecurityException
+    {
+        SSOUser user = newUser(name, domainId);
+        Set<JetspeedPrincipalAssociationReference> reqAssociations = new HashSet<JetspeedPrincipalAssociationReference>();
+        reqAssociations.add(new JetspeedPrincipalAssociationReference(JetspeedPrincipalAssociationReference.Type.TO, ownerPrincipal, IsOwnedByPrincipalAssociationHandler.ASSOCIATION_NAME));
+        super.addPrincipal(user, reqAssociations);
+        // by default add a relation to the owner 
+        super.addAssociation(user, ownerPrincipal, IsRemoteIdentityForPrincipalAssociationHandler.ASSOCIATION_NAME);
+        return user;
+    }
+
+    public PasswordCredential getPasswordCredential(SSOUser user) throws SecurityException
+    {
+        PasswordCredential passwordCredential = credentialAccessManager.getPasswordCredential(user.getName(), user.getDomainId());
+        if (passwordCredential == null)
+        {
+            passwordCredential = credentialStorageManager.newPasswordCredential(user);
+        }
+        return passwordCredential;
+    }
+
+    public SSOUser getUser(String userName, Long domainId)
+            throws SecurityException
+    {
+        SSOUser user = (SSOUser)domainPrincipalAccess.getPrincipal(userName, getPrincipalType(), domainId);
+        if (null == user)
+        {
+            throw new SecurityException(SecurityException.PRINCIPAL_DOES_NOT_EXIST.createScoped(JetspeedPrincipalType.SSO_USER, userName));
+        }
+        return user;
+    }
+
+    public Collection<String> getUserNames(String nameFilter, Long domainId)
+            throws SecurityException
+    {
+        return (List<String>) domainPrincipalAccess.getPrincipalNames(nameFilter, getPrincipalType(), domainId);
+    }
+
+    protected List<? extends JetspeedPrincipal> getPrincipals(String nameFilter, Long domainId)
+    {
+        return domainPrincipalAccess.getPrincipals(nameFilter, getPrincipalType(), domainId);
+    }
+    
+    @SuppressWarnings("unchecked")
+    public Collection<SSOUser> getUsers(String nameFilter, Long domainId)
+            throws SecurityException
+    {
+        return (List<SSOUser>) getPrincipals(nameFilter, domainId);
+    }
+
+    public void removeUser(String userName, Long domainId)
+            throws SecurityException
+    {
+        JetspeedPrincipal user;        
+        user = getUser(userName, domainId);
+        super.removePrincipal(user);
+    }
+
+    public void storePasswordCredential(PasswordCredential credential) throws SecurityException
+    {
+        credentialStorageManager.storePasswordCredential(credential);
+    }
+
+    public void updateUser(SSOUser user) throws SecurityException
+    {
+        super.updatePrincipal(user);
+    }
+
+    public boolean userExists(String userName, Long domainId)
+    {
+        return domainPrincipalAccess.principalExists(userName, getPrincipalType(), domainId);
+    }
+
+    public Collection<SSOUser> getUsers(JetspeedPrincipal principal) throws SecurityException
+    {
+        Collection<SecurityDomain> allDomains = domainAccess.getDomainsOwnedBy(principal.getDomainId());
+        Collection<SSOUser> users = new ArrayList<SSOUser>();
+        for (SecurityDomain domain : allDomains){
+            users.addAll(getUsers(principal,domain.getDomainId()));
+        }
+        return users;
+    }    
+    
+    @SuppressWarnings("unchecked")
+    public Collection<SSOUser> getUsers(JetspeedPrincipal principal, Long remoteSecurityDomain) throws SecurityException
+    {
+        return (Collection<SSOUser>)_getSSOUsersForPrincipal(principal,remoteSecurityDomain);
+    }    
+
+    private Collection<? extends JetspeedPrincipal> _getSSOUsersForPrincipal(JetspeedPrincipal principal, Long remoteSecurityDomain) throws SecurityException
+    {
+        return domainPrincipalAccess.getAssociatedTo(principal.getName(), getPrincipalType(), principal.getType(), IsRemoteIdentityForPrincipalAssociationHandler.ASSOCIATION_NAME, remoteSecurityDomain, principal.getDomainId());
+    }  
+    
+    public void addSSOUserToPrincipal(SSOUser user, JetspeedPrincipal principal)
+            throws SecurityException
+    {
+        super.addAssociation(user,principal,IsRemoteIdentityForPrincipalAssociationHandler.ASSOCIATION_NAME);
+        
+    }
+
+    public Collection<JetspeedPrincipal> getPortalPrincipals(SSOUser remoteUser, Long portalPrincipalDomain)
+    {
+        Collection<JetspeedPrincipal> principalsFound = new ArrayList<JetspeedPrincipal>();
+        List<JetspeedPrincipalAssociationType> assTypes = super.getAssociationTypes();
+        for (JetspeedPrincipalAssociationType type : assTypes)
+        {
+            if (type.getAssociationName().equals(IsRemoteIdentityForPrincipalAssociationHandler.ASSOCIATION_NAME)){
+                Collection<JetspeedPrincipal> principalsForThisType = domainPrincipalAccess.getAssociatedFrom(remoteUser.getName(), getPrincipalType(), type.getToPrincipalType(), IsRemoteIdentityForPrincipalAssociationHandler.ASSOCIATION_NAME, remoteUser.getDomainId(), portalPrincipalDomain);
+                principalsFound.addAll(principalsForThisType);
+            }
+        }
+        return principalsFound;
+    }
+}

Modified: portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-sso/src/main/java/org/apache/jetspeed/sso/spi/impl/JetspeedPersistentSSOSiteManager.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-sso/src/main/java/org/apache/jetspeed/sso/spi/impl/JetspeedPersistentSSOSiteManager.java?rev=742669&r1=742668&r2=742669&view=diff
==============================================================================
--- portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-sso/src/main/java/org/apache/jetspeed/sso/spi/impl/JetspeedPersistentSSOSiteManager.java (original)
+++ portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-sso/src/main/java/org/apache/jetspeed/sso/spi/impl/JetspeedPersistentSSOSiteManager.java Mon Feb  9 18:37:05 2009
@@ -25,8 +25,6 @@
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.jetspeed.components.dao.InitablePersistenceBrokerDaoSupport;
-import org.apache.jetspeed.security.SecurityDomain;
-import org.apache.jetspeed.security.impl.SecurityDomainImpl;
 import org.apache.jetspeed.sso.SSOException;
 import org.apache.jetspeed.sso.SSOSite;
 import org.apache.jetspeed.sso.SSOUser;
@@ -56,6 +54,11 @@
        super(repositoryPath);
     }
     
+    public SSOSite newSite()
+    {
+        return new SSOSiteImpl();
+    }
+    
     public SSOSite add(SSOSite ssoSite) throws SSOException
     {
         try

Modified: portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-sso/src/main/java/org/apache/jetspeed/sso/spi/impl/SSOUserManagerSPIImpl.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-sso/src/main/java/org/apache/jetspeed/sso/spi/impl/SSOUserManagerSPIImpl.java?rev=742669&r1=742668&r2=742669&view=diff
==============================================================================
--- portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-sso/src/main/java/org/apache/jetspeed/sso/spi/impl/SSOUserManagerSPIImpl.java (original)
+++ portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-sso/src/main/java/org/apache/jetspeed/sso/spi/impl/SSOUserManagerSPIImpl.java Mon Feb  9 18:37:05 2009
@@ -16,20 +16,7 @@
  */
 package org.apache.jetspeed.sso.spi.impl;
 
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-import org.apache.jetspeed.security.JetspeedPrincipal;
-import org.apache.jetspeed.security.JetspeedPrincipalAssociationReference;
-import org.apache.jetspeed.security.JetspeedPrincipalAssociationType;
 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.impl.BaseJetspeedPrincipalManager;
 import org.apache.jetspeed.security.spi.JetspeedDomainPrincipalAccessManager;
 import org.apache.jetspeed.security.spi.JetspeedPrincipalAccessManager;
 import org.apache.jetspeed.security.spi.JetspeedPrincipalStorageManager;
@@ -37,96 +24,26 @@
 import org.apache.jetspeed.security.spi.UserPasswordCredentialAccessManager;
 import org.apache.jetspeed.security.spi.UserPasswordCredentialStorageManager;
 import org.apache.jetspeed.sso.SSOUser;
-import org.apache.jetspeed.sso.impl.IsOwnedByPrincipalAssociationHandler;
-import org.apache.jetspeed.sso.impl.IsRemoteIdentityForPrincipalAssociationHandler;
 import org.apache.jetspeed.sso.impl.SSOUserImpl;
 import org.apache.jetspeed.sso.spi.SSOUserManagerSPI;
 
-
 /**
  * @author <a href="mailto:ddam@apache.org">Dennis Dam</a>
  * @version $Id$
  */
-public class SSOUserManagerSPIImpl extends BaseJetspeedPrincipalManager implements SSOUserManagerSPI
+public class SSOUserManagerSPIImpl extends AbstractSSOUserManagerSPIImpl implements SSOUserManagerSPI
 {
+    private static final long serialVersionUID = -2276171226929364245L;
 
-    private static final long serialVersionUID = 1L;
-
-    private JetspeedDomainPrincipalAccessManager domainPrincipalAccess;
-    private SecurityDomainAccessManager domainAccess;
-    
-    private UserPasswordCredentialStorageManager credentialStorageManager;
-    private UserPasswordCredentialAccessManager credentialAccessManager;
-
-    
-    public SSOUserManagerSPIImpl(JetspeedPrincipalType principalType, 
-            JetspeedPrincipalAccessManager jpam, JetspeedPrincipalStorageManager jpsm, UserPasswordCredentialStorageManager credentialStorageManager,
-            UserPasswordCredentialAccessManager credentialAccessManager, JetspeedDomainPrincipalAccessManager domainPrincipalAccess, SecurityDomainAccessManager domainAccess)
+    public SSOUserManagerSPIImpl(JetspeedPrincipalType principalType, JetspeedPrincipalAccessManager jpam, JetspeedPrincipalStorageManager jpsm, UserPasswordCredentialStorageManager credentialStorageManager,
+                                 UserPasswordCredentialAccessManager credentialAccessManager, JetspeedDomainPrincipalAccessManager domainPrincipalAccess, SecurityDomainAccessManager domainAccess)
     {
-        super(principalType, jpam, jpsm);
-        this.credentialStorageManager = credentialStorageManager;
-        this.credentialAccessManager = credentialAccessManager;
-        this.domainPrincipalAccess=domainPrincipalAccess;
-        this.domainAccess=domainAccess;
-    }
-    
-    public JetspeedPrincipal newPrincipal(String name, boolean mapped)
-    {
-        return null;
-    }
-
-    public JetspeedPrincipal newTransientPrincipal(String name)
-    {
-        return null;
-    }
-
-    public SSOUser addUser(String name, Long domainId, JetspeedPrincipal ownerPrincipal)
-            throws SecurityException
-    {
-        SSOUser user = newUser(name, domainId);
-        Set<JetspeedPrincipalAssociationReference> reqAssociations = new HashSet<JetspeedPrincipalAssociationReference>();
-        reqAssociations.add(new JetspeedPrincipalAssociationReference(JetspeedPrincipalAssociationReference.Type.TO, ownerPrincipal, IsOwnedByPrincipalAssociationHandler.ASSOCIATION_NAME));
-        super.addPrincipal(user, reqAssociations);
-        // by default add a relation to the owner 
-        super.addAssociation(user, ownerPrincipal, IsRemoteIdentityForPrincipalAssociationHandler.ASSOCIATION_NAME);
-        return user;
-    }
-
-    public PasswordCredential getPasswordCredential(SSOUser user)
-            throws SecurityException
-    {
-        return credentialAccessManager.getPasswordCredential(user.getName(),user.getDomainId());
-    }
-
-    public SSOUser getUser(String userName, Long domainId)
-            throws SecurityException
-    {
-        SSOUser user = (SSOUser)domainPrincipalAccess.getPrincipal(userName, getPrincipalType(), domainId);
-        if (null == user)
-        {
-            throw new SecurityException(SecurityException.PRINCIPAL_DOES_NOT_EXIST.createScoped(JetspeedPrincipalType.SSO_USER, userName));
-        }
-        return user;
-    }
-
-    public Collection<String> getUserNames(String nameFilter, Long domainId)
-            throws SecurityException
-    {
-        return (List<String>) domainPrincipalAccess.getPrincipalNames(nameFilter, getPrincipalType(), domainId);
-    }
-
-    protected List<? extends JetspeedPrincipal> getPrincipals(String nameFilter, Long domainId)
-    {
-        return domainPrincipalAccess.getPrincipals(nameFilter, getPrincipalType(), domainId);
-    }
-    
-    @SuppressWarnings("unchecked")
-    public Collection<SSOUser> getUsers(String nameFilter, Long domainId)
-            throws SecurityException
-    {
-        return (List<SSOUser>) getPrincipals(nameFilter, domainId);
+        super(principalType, jpam, jpsm, credentialStorageManager, credentialAccessManager, domainPrincipalAccess, domainAccess);
     }
 
+    /* (non-Javadoc)
+     * @see org.apache.jetspeed.sso.spi.SSOUserManagerSPI#newUser(java.lang.String, java.lang.Long)
+     */
     public SSOUser newUser(String name, Long domainId)
     {
         SSOUserImpl user = new SSOUserImpl();
@@ -134,70 +51,4 @@
         user.setName(name);
         return user;
     }
-
-    public void removeUser(String userName, Long domainId)
-            throws SecurityException
-    {
-        JetspeedPrincipal user;        
-        user = getUser(userName, domainId);
-        super.removePrincipal(user);
-    }
-
-    public void storePasswordCredential(PasswordCredential credential) throws SecurityException
-    {
-        credentialStorageManager.storePasswordCredential(credential);
-    }
-
-    public void updateUser(SSOUser user) throws SecurityException
-    {
-        super.updatePrincipal(user);
-    }
-
-    public boolean userExists(String userName, Long domainId)
-    {
-        return domainPrincipalAccess.principalExists(userName, getPrincipalType(), domainId);
-    }
-
-    public Collection<SSOUser> getUsers(JetspeedPrincipal principal) throws SecurityException
-    {
-        Collection<SecurityDomain> allDomains = domainAccess.getDomainsOwnedBy(principal.getDomainId());
-        Collection<SSOUser> users = new ArrayList<SSOUser>();
-        for (SecurityDomain domain : allDomains){
-            users.addAll(getUsers(principal,domain.getDomainId()));
-        }
-        return users;
-    }    
-    
-    @SuppressWarnings("unchecked")
-    public Collection<SSOUser> getUsers(JetspeedPrincipal principal, Long remoteSecurityDomain) throws SecurityException
-    {
-        return (Collection<SSOUser>)_getSSOUsersForPrincipal(principal,remoteSecurityDomain);
-    }    
-
-    private Collection<? extends JetspeedPrincipal> _getSSOUsersForPrincipal(JetspeedPrincipal principal, Long remoteSecurityDomain) throws SecurityException
-    {
-        return domainPrincipalAccess.getAssociatedTo(principal.getName(), getPrincipalType(), principal.getType(), IsRemoteIdentityForPrincipalAssociationHandler.ASSOCIATION_NAME, remoteSecurityDomain, principal.getDomainId());
-    }  
-    
-    public void addSSOUserToPrincipal(SSOUser user, JetspeedPrincipal principal)
-            throws SecurityException
-    {
-        super.addAssociation(user,principal,IsRemoteIdentityForPrincipalAssociationHandler.ASSOCIATION_NAME);
-        
-    }
-
-    public Collection<JetspeedPrincipal> getPortalPrincipals(SSOUser remoteUser, Long portalPrincipalDomain)
-    {
-        Collection<JetspeedPrincipal> principalsFound = new ArrayList<JetspeedPrincipal>();
-        List<JetspeedPrincipalAssociationType> assTypes = super.getAssociationTypes();
-        for (JetspeedPrincipalAssociationType type : assTypes)
-        {
-            if (type.getAssociationName().equals(IsRemoteIdentityForPrincipalAssociationHandler.ASSOCIATION_NAME)){
-                Collection<JetspeedPrincipal> principalsForThisType = domainPrincipalAccess.getAssociatedFrom(remoteUser.getName(), getPrincipalType(), type.getToPrincipalType(), IsRemoteIdentityForPrincipalAssociationHandler.ASSOCIATION_NAME, remoteUser.getDomainId(), portalPrincipalDomain);
-                principalsFound.addAll(principalsForThisType);
-            }
-        }
-        return principalsFound;
-    }    
-    
 }



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