[jboss-identity-commits] JBoss Identity SVN: r216 - in idm/trunk: identity-impl/src/main/java/org/jboss/identity/idm/impl/api/session and 6 other directories.

jboss-identity-commits at lists.jboss.org jboss-identity-commits at lists.jboss.org
Wed Jan 14 08:12:44 EST 2009


Author: bdaw
Date: 2009-01-14 08:12:43 -0500 (Wed, 14 Jan 2009)
New Revision: 216

Modified:
   idm/trunk/identity-api/src/main/java/org/jboss/identity/idm/api/PersistenceManagerFeaturesDescription.java
   idm/trunk/identity-api/src/main/java/org/jboss/identity/idm/api/RelationshipManagerFeaturesDescription.java
   idm/trunk/identity-api/src/main/java/org/jboss/identity/idm/api/RoleManager.java
   idm/trunk/identity-api/src/main/java/org/jboss/identity/idm/api/RoleManagerFeaturesDescription.java
   idm/trunk/identity-impl/src/main/java/org/jboss/identity/idm/impl/api/session/IdentitySessionImpl.java
   idm/trunk/identity-impl/src/main/java/org/jboss/identity/idm/impl/api/session/managers/PersistenceManagerImpl.java
   idm/trunk/identity-impl/src/main/java/org/jboss/identity/idm/impl/api/session/managers/RelationshipManagerImpl.java
   idm/trunk/identity-impl/src/main/java/org/jboss/identity/idm/impl/api/session/managers/RoleManagerImpl.java
   idm/trunk/identity-impl/src/main/java/org/jboss/identity/idm/impl/repository/FallbackIdentityStoreRepository.java
   idm/trunk/identity-impl/src/main/java/org/jboss/identity/idm/impl/store/FeaturesMetaDataImpl.java
   idm/trunk/identity-impl/src/main/java/org/jboss/identity/idm/impl/store/hibernate/HibernateIdentityStoreImpl.java
   idm/trunk/identity-impl/src/main/java/org/jboss/identity/idm/impl/store/ldap/LDAPIdentityStoreImpl.java
   idm/trunk/identity-spi/src/main/java/org/jboss/identity/idm/spi/store/FeaturesMetaData.java
Log:
minimal number of NotYetImplementedException once again

Modified: idm/trunk/identity-api/src/main/java/org/jboss/identity/idm/api/PersistenceManagerFeaturesDescription.java
===================================================================
--- idm/trunk/identity-api/src/main/java/org/jboss/identity/idm/api/PersistenceManagerFeaturesDescription.java	2009-01-13 22:54:31 UTC (rev 215)
+++ idm/trunk/identity-api/src/main/java/org/jboss/identity/idm/api/PersistenceManagerFeaturesDescription.java	2009-01-14 13:12:43 UTC (rev 216)
@@ -32,40 +32,52 @@
 {
 
    /**
-    * Check if Identity objects can be created
+    * Check if Identity objects can be created and removed
     * @return
     */
-   boolean isIdentitiesCreationSupported();
+   boolean isIdentitiesAddRemoveSupported();
 
    /**
-    * Check if Group objects can be created
+    * Check if Group objects can be created and removed
+    * 
+    * @param groupType
     * @return
     */
-   boolean isGroupsCreationSupported();
+   boolean isGroupsAddRemoveSupported(GroupType groupType);
 
    /**
-    * Check if IdentitySearchControl for sorted results can be used in Identity object queries
+    * Check if control can be used in Identity search methods
+    *
+    * @param control
     * @return
     */
-   boolean isIdentitiesSortedSearchSupported();
+   boolean isIdentitiesSearchControlSupported(IdentitySearchControl control);
 
    /**
-    * Check if IdentitySearchControl for sorted results can be used in Group object queries
-    * @param groupType
+    * Check if control can be used in Identity search methods
+    *
+    * @param controlClazz
     * @return
     */
-   boolean isGroupsSortedSearchSupported(GroupType groupType);
+   boolean isIdentitiesSearchControlSupported(Class controlClazz);
 
    /**
-    * Check if IdentitySearchControl for paged results can be used in Identity object queries
+    * Check if control can be used in Group search methods
+    *
+    * @param groupType
+    * @param control
     * @return
     */
-   boolean isIdentitiesPaginatedSearchSupported();
+   boolean isGroupsSearchControlSupported(GroupType groupType, IdentitySearchControl control);
 
    /**
-    * Check if IdentitySearchControl for sorted results can be used in Group object queries 
+    * Check if control can be used in Group search methods
+    *
     * @param groupType
+    * @param controlClazz
     * @return
     */
-   boolean isGroupsPaginatedSearchSupported(GroupType groupType);
+   boolean isGroupsSearchControlSupported(GroupType groupType, Class controlClazz);
+
+
 }

Modified: idm/trunk/identity-api/src/main/java/org/jboss/identity/idm/api/RelationshipManagerFeaturesDescription.java
===================================================================
--- idm/trunk/identity-api/src/main/java/org/jboss/identity/idm/api/RelationshipManagerFeaturesDescription.java	2009-01-13 22:54:31 UTC (rev 215)
+++ idm/trunk/identity-api/src/main/java/org/jboss/identity/idm/api/RelationshipManagerFeaturesDescription.java	2009-01-14 13:12:43 UTC (rev 216)
@@ -47,27 +47,38 @@
    boolean isGroupAssociationSupported(GroupType fromGroupType, GroupType toGroupType);
 
    /**
+    * Check if control can be used in Identity search methods
+    *
+    * @param control
     * @return
     */
-   boolean isIdentitiesSortedSearchSupported();
+   boolean isIdentitiesSearchControlSupported(IdentitySearchControl control);
 
    /**
-    * @param groupType
+    * Check if control can be used in Identity search methods
+    *
+    * @param controlClazz
     * @return
     */
-   boolean isGroupsSortedSearchSupported(GroupType groupType);
+   boolean isIdentitiesSearchControlSupported(Class controlClazz);
 
    /**
+    * Check if control can be used in Group search methods
+    *
+    * @param groupType
+    * @param control
     * @return
     */
-   boolean isIdentitiesPaginatedSearchSupported();
+   boolean isGroupsSearchControlSupported(GroupType groupType, IdentitySearchControl control);
 
    /**
+    * Check if control can be used in Group search methods
+    *
     * @param groupType
+    * @param controlClazz
     * @return
     */
-   boolean isGroupsPaginatedSearchSupported(GroupType groupType);
+   boolean isGroupsSearchControlSupported(GroupType groupType, Class controlClazz);
 
 
-
 }

Modified: idm/trunk/identity-api/src/main/java/org/jboss/identity/idm/api/RoleManager.java
===================================================================
--- idm/trunk/identity-api/src/main/java/org/jboss/identity/idm/api/RoleManager.java	2009-01-13 22:54:31 UTC (rev 215)
+++ idm/trunk/identity-api/src/main/java/org/jboss/identity/idm/api/RoleManager.java	2009-01-14 13:12:43 UTC (rev 216)
@@ -185,15 +185,4 @@
    <T extends IdentityType> Collection<Role> findRoles(T identityType,
                                                        RoleType roleType) throws IdentityException;
 
-   /**
-    * Find Role objects with a given RoleType associated with a given IdentityType
-    * @param identityType
-    * @param roleType
-    * @return
-    * @throws IdentityException
-    */
-   <T extends IdentityType> Collection<Role> findRoles(T identityType,
-                                                       RoleType roleType,
-                                                       IdentitySearchControl[] controls) throws IdentityException;
-
 }

Modified: idm/trunk/identity-api/src/main/java/org/jboss/identity/idm/api/RoleManagerFeaturesDescription.java
===================================================================
--- idm/trunk/identity-api/src/main/java/org/jboss/identity/idm/api/RoleManagerFeaturesDescription.java	2009-01-13 22:54:31 UTC (rev 215)
+++ idm/trunk/identity-api/src/main/java/org/jboss/identity/idm/api/RoleManagerFeaturesDescription.java	2009-01-14 13:12:43 UTC (rev 216)
@@ -31,37 +31,20 @@
 public interface RoleManagerFeaturesDescription
 {
    /**
-    * Can RoleType object be created
+    * Can RoleType object be created and removed
     * @return
     */
-   boolean isRoleTypeCreationSupported();
+   boolean isRoleTypeAddRemoveSupported();
 
    /**
-    * Can RoleType objects be removed
-    *
+    * @param controlClazz
     * @return
     */
-   boolean isRoleTypeRemovalSupported();
+   boolean isRoleTypeSearchControlSupported(Class controlClazz);
 
    /**
+    * @param control
     * @return
     */
-   boolean isRoleSortedSearchSupported();
-
-   /**
-    * @param groupType
-    * @return
-    */
-   boolean isRoleTypeSortedSearchSupported(GroupType groupType);
-
-   /**
-    * @return
-    */
-   boolean isRolePaginatedSearchSupported();
-
-   /**
-    * @param groupType
-    * @return
-    */
-   boolean isRoleTypePaginatedSearchSupported(GroupType groupType);
+   boolean isRoleTypeSearchControlSupported(IdentitySearchControl control);
 }

Modified: idm/trunk/identity-impl/src/main/java/org/jboss/identity/idm/impl/api/session/IdentitySessionImpl.java
===================================================================
--- idm/trunk/identity-impl/src/main/java/org/jboss/identity/idm/impl/api/session/IdentitySessionImpl.java	2009-01-13 22:54:31 UTC (rev 215)
+++ idm/trunk/identity-impl/src/main/java/org/jboss/identity/idm/impl/api/session/IdentitySessionImpl.java	2009-01-14 13:12:43 UTC (rev 216)
@@ -29,6 +29,7 @@
 import org.jboss.identity.idm.api.AttributesManager;
 import org.jboss.identity.idm.api.RoleManager;
 import org.jboss.identity.idm.exception.IdentityException;
+import org.jboss.identity.idm.exception.FeatureNotSupportedException;
 import org.jboss.identity.idm.spi.store.IdentityStoreSession;
 import org.jboss.identity.idm.spi.store.IdentityStoreInvocationContext;
 import org.jboss.identity.idm.spi.repository.IdentityStoreRepository;
@@ -147,10 +148,13 @@
       return profileManager;
    }
 
-   //TODO: proper exception if roles are not supported
+   public RoleManager getRoleManager() throws FeatureNotSupportedException
+   {
+      if (!getSessionContext().getIdentityStoreRepository().getSupportedFeatures().isNamedRelationshipsSupported())
+      {
+         throw new FeatureNotSupportedException("Role management not supported by underlaying configured identity stores");
+      }
 
-   public RoleManager getRoleManager()
-   {
       return roleManager;
    }
 }

Modified: idm/trunk/identity-impl/src/main/java/org/jboss/identity/idm/impl/api/session/managers/PersistenceManagerImpl.java
===================================================================
--- idm/trunk/identity-impl/src/main/java/org/jboss/identity/idm/impl/api/session/managers/PersistenceManagerImpl.java	2009-01-13 22:54:31 UTC (rev 215)
+++ idm/trunk/identity-impl/src/main/java/org/jboss/identity/idm/impl/api/session/managers/PersistenceManagerImpl.java	2009-01-14 13:12:43 UTC (rev 216)
@@ -32,6 +32,7 @@
 import org.jboss.identity.idm.exception.IdentityException;
 import org.jboss.identity.idm.spi.model.IdentityObjectType;
 import org.jboss.identity.idm.spi.model.IdentityObject;
+import org.jboss.identity.idm.spi.searchcontrol.IdentityObjectSearchControl;
 import org.jboss.identity.idm.impl.NotYetImplementedException;
 import org.jboss.identity.idm.impl.api.session.managers.AbstractManager;
 
@@ -47,14 +48,80 @@
 public class PersistenceManagerImpl extends AbstractManager implements PersistenceManager
 {
 
+   private final PersistenceManagerFeaturesDescription featuresDescription;
+
+
    public PersistenceManagerImpl(IdentitySession session)
    {
       super(session);
+
+      featuresDescription = new PersistenceManagerFeaturesDescription()
+      {
+         public boolean isIdentitiesAddRemoveSupported()
+         {
+            IdentityObjectType objectType = getSessionContext().getIdentityObjectTypeMapper().getIdentityObjectType();
+
+            return getSessionContext().getIdentityStoreRepository().getSupportedFeatures().
+               isIdentityObjectAddRemoveSupported(objectType);
+         }
+
+         public boolean isGroupsAddRemoveSupported(GroupType groupType)
+         {
+            IdentityObjectType objectType = getSessionContext().getIdentityObjectTypeMapper().getIdentityObjectType(groupType);
+
+            return getSessionContext().getIdentityStoreRepository().getSupportedFeatures().
+               isIdentityObjectAddRemoveSupported(objectType);
+         }
+
+         public boolean isIdentitiesSearchControlSupported(IdentitySearchControl control)
+         {
+            IdentityObjectType objectType = getSessionContext().getIdentityObjectTypeMapper().getIdentityObjectType();
+
+            if (control instanceof IdentityObjectSearchControl)
+            {
+               return getSessionContext().getIdentityStoreRepository().getSupportedFeatures().
+                  isControlSupported(objectType, (IdentityObjectSearchControl)control);
+            }
+
+            return false;
+         }
+
+
+         public boolean isIdentitiesSearchControlSupported(Class controlClazz)
+         {
+            IdentityObjectType objectType = getSessionContext().getIdentityObjectTypeMapper().getIdentityObjectType();
+
+            return getSessionContext().getIdentityStoreRepository().getSupportedFeatures().
+               isControlSupported(objectType, controlClazz);
+
+         }
+
+         public boolean isGroupsSearchControlSupported(GroupType groupType, IdentitySearchControl control)
+         {
+            IdentityObjectType objectType = getSessionContext().getIdentityObjectTypeMapper().getIdentityObjectType(groupType);
+
+            if (control instanceof IdentityObjectSearchControl)
+            {
+               return getSessionContext().getIdentityStoreRepository().getSupportedFeatures().
+                  isControlSupported(objectType, (IdentityObjectSearchControl)control);
+            }
+
+            return false;
+         }
+
+         public boolean isGroupsSearchControlSupported(GroupType groupType, Class controlClazz)
+         {
+            IdentityObjectType objectType = getSessionContext().getIdentityObjectTypeMapper().getIdentityObjectType(groupType);
+
+            return getSessionContext().getIdentityStoreRepository().getSupportedFeatures().
+               isControlSupported(objectType, controlClazz);
+         }
+      };
    }
 
    public PersistenceManagerFeaturesDescription getFeaturesDescription()
    {
-      throw new NotYetImplementedException("NYI");
+      return featuresDescription;
    }
 
    public Identity createIdentity(String identityName) throws IdentityException

Modified: idm/trunk/identity-impl/src/main/java/org/jboss/identity/idm/impl/api/session/managers/RelationshipManagerImpl.java
===================================================================
--- idm/trunk/identity-impl/src/main/java/org/jboss/identity/idm/impl/api/session/managers/RelationshipManagerImpl.java	2009-01-13 22:54:31 UTC (rev 215)
+++ idm/trunk/identity-impl/src/main/java/org/jboss/identity/idm/impl/api/session/managers/RelationshipManagerImpl.java	2009-01-14 13:12:43 UTC (rev 216)
@@ -35,8 +35,10 @@
 import org.jboss.identity.idm.spi.model.IdentityObjectRelationship;
 import org.jboss.identity.idm.spi.model.IdentityObject;
 import org.jboss.identity.idm.spi.model.IdentityObjectType;
+import org.jboss.identity.idm.spi.searchcontrol.IdentityObjectSearchControl;
 import org.jboss.identity.idm.impl.NotYetImplementedException;
 import org.jboss.identity.idm.impl.api.session.managers.AbstractManager;
+import org.jboss.identity.idm.impl.api.session.mapper.IdentityObjectTypeMapper;
 
 import java.util.Collection;
 import java.util.Iterator;
@@ -51,6 +53,7 @@
  */
 public class RelationshipManagerImpl extends AbstractManager implements RelationshipManager
 {
+   RelationshipManagerFeaturesDescription featuresDescription;
 
    public static final IdentityObjectRelationshipType MEMBER = new IdentityObjectRelationshipType()
    {
@@ -63,11 +66,92 @@
    public RelationshipManagerImpl(IdentitySession session)
    {
       super(session);
+
+      featuresDescription = new RelationshipManagerFeaturesDescription()
+      {
+         public boolean isIdentityAssociationSupported(GroupType fromGroupType)
+         {
+
+            IdentityObjectType identityOT = getSessionContext().getIdentityObjectTypeMapper().getIdentityObjectType();
+            IdentityObjectType groupIdentityOT = getSessionContext().getIdentityObjectTypeMapper().getIdentityObjectType(fromGroupType);
+
+            try
+            {
+               return getSessionContext().getIdentityStoreRepository().getSupportedFeatures().
+                  isRelationshipTypeSupported(groupIdentityOT, identityOT, MEMBER);
+            }
+            catch (IdentityException e)
+            {
+               return false;
+            }
+
+         }
+
+         public boolean isGroupAssociationSupported(GroupType fromGroupType, GroupType toGroupType)
+         {
+            IdentityObjectType toGroupOT = getSessionContext().getIdentityObjectTypeMapper().getIdentityObjectType(toGroupType);
+            IdentityObjectType fromGroupOT = getSessionContext().getIdentityObjectTypeMapper().getIdentityObjectType(fromGroupType);
+
+            try
+            {
+               return getSessionContext().getIdentityStoreRepository().getSupportedFeatures().
+                  isRelationshipTypeSupported(fromGroupOT, toGroupOT, MEMBER);
+            }
+            catch (IdentityException e)
+            {
+               return false;
+            }
+         }
+
+         public boolean isIdentitiesSearchControlSupported(IdentitySearchControl control)
+         {
+            IdentityObjectType objectType = getSessionContext().getIdentityObjectTypeMapper().getIdentityObjectType();
+
+            if (control instanceof IdentityObjectSearchControl)
+            {
+               return getSessionContext().getIdentityStoreRepository().getSupportedFeatures().
+                  isControlSupported(objectType, (IdentityObjectSearchControl)control);
+            }
+            
+            return false;
+         }
+
+
+         public boolean isIdentitiesSearchControlSupported(Class controlClazz)
+         {
+            IdentityObjectType objectType = getSessionContext().getIdentityObjectTypeMapper().getIdentityObjectType();
+
+            return getSessionContext().getIdentityStoreRepository().getSupportedFeatures().
+               isControlSupported(objectType, controlClazz);
+
+         }
+
+         public boolean isGroupsSearchControlSupported(GroupType groupType, IdentitySearchControl control)
+         {
+            IdentityObjectType objectType = getSessionContext().getIdentityObjectTypeMapper().getIdentityObjectType(groupType);
+
+            if (control instanceof IdentityObjectSearchControl)
+            {
+               return getSessionContext().getIdentityStoreRepository().getSupportedFeatures().
+                  isControlSupported(objectType, (IdentityObjectSearchControl)control);
+            }
+
+            return false;
+         }
+
+         public boolean isGroupsSearchControlSupported(GroupType groupType, Class controlClazz)
+         {
+            IdentityObjectType objectType = getSessionContext().getIdentityObjectTypeMapper().getIdentityObjectType(groupType);
+
+            return getSessionContext().getIdentityStoreRepository().getSupportedFeatures().
+               isControlSupported(objectType, controlClazz);
+         }
+      };
    }
 
    public RelationshipManagerFeaturesDescription getFeaturesDescription()
    {
-      throw new NotYetImplementedException("NYI");
+      return featuresDescription;
    }
 
    public void associateGroups(Collection<Group> parents, Collection<Group> members) throws IdentityException

Modified: idm/trunk/identity-impl/src/main/java/org/jboss/identity/idm/impl/api/session/managers/RoleManagerImpl.java
===================================================================
--- idm/trunk/identity-impl/src/main/java/org/jboss/identity/idm/impl/api/session/managers/RoleManagerImpl.java	2009-01-13 22:54:31 UTC (rev 215)
+++ idm/trunk/identity-impl/src/main/java/org/jboss/identity/idm/impl/api/session/managers/RoleManagerImpl.java	2009-01-14 13:12:43 UTC (rev 216)
@@ -31,10 +31,12 @@
 import org.jboss.identity.idm.api.IdentityType;
 import org.jboss.identity.idm.api.RoleManagerFeaturesDescription;
 import org.jboss.identity.idm.api.IdentitySearchControl;
+import org.jboss.identity.idm.api.GroupType;
 import org.jboss.identity.idm.exception.IdentityException;
 import org.jboss.identity.idm.spi.model.IdentityObjectRelationshipType;
 import org.jboss.identity.idm.spi.model.IdentityObjectRelationship;
 import org.jboss.identity.idm.spi.exception.OperationNotSupportedException;
+import org.jboss.identity.idm.spi.searchcontrol.IdentityObjectSearchControl;
 import org.jboss.identity.idm.impl.NotYetImplementedException;
 import org.jboss.identity.idm.impl.api.session.managers.AbstractManager;
 import org.jboss.identity.idm.impl.api.model.SimpleRoleType;
@@ -58,14 +60,42 @@
       }
    };
 
+   private final RoleManagerFeaturesDescription featuresDescription;
+
    public RoleManagerImpl(IdentitySession session)
    {
       super(session);
+
+      featuresDescription = new RoleManagerFeaturesDescription()
+      {
+         public boolean isRoleTypeAddRemoveSupported()
+         {
+            return getSessionContext().getIdentityStoreRepository().getSupportedFeatures().isRelationshipNameAddRemoveSupported();
+         }
+
+         public boolean isRoleTypeSearchControlSupported(Class controlClazz)
+         {
+            return getSessionContext().getIdentityStoreRepository().getSupportedFeatures().isRoleNameControlSupported(controlClazz);
+         }
+
+         public boolean isRoleTypeSearchControlSupported(IdentitySearchControl control)
+         {
+            if (control instanceof IdentityObjectSearchControl)
+            {
+               return getSessionContext().getIdentityStoreRepository().getSupportedFeatures().
+                  isRoleNameControlSupported((IdentityObjectSearchControl)control);
+            }
+            else
+            {
+               return false;
+            }
+         }
+      };
    }
 
    public RoleManagerFeaturesDescription getSupportedFeatures()
    {
-      throw new NotYetImplementedException("NYI");
+      return featuresDescription;
    }
 
    public RoleType createRoleType(String name) throws IdentityException
@@ -256,13 +286,8 @@
 
    }
 
-   public <T extends IdentityType> Collection<Role> findRoles(T identityType, RoleType roleType) throws IdentityException
+   public Collection<Role> findRoles(IdentityType identityType, RoleType roleType) throws IdentityException
    {
-      return findRoles(identityType, roleType, null);
-   }
-
-   public <T extends IdentityType> Collection<Role> findRoles(T identityType, RoleType roleType, IdentitySearchControl[] controls) throws IdentityException
-   {
       Set<Role> roles = new HashSet<Role>();
 
       Set<IdentityObjectRelationship> relationships = null;
@@ -280,7 +305,10 @@
 
       for (IdentityObjectRelationship relationship : relationships)
       {
-         roles.add(new SimpleRole(new SimpleRoleType(relationship.getName()), createIdentity(relationship.getFromIdentityObject()), createGroup(relationship.getToIdentityObject())));
+         if (roleType.getName().equals(relationship.getName()))
+         {
+            roles.add(new SimpleRole(new SimpleRoleType(relationship.getName()), createIdentity(relationship.getFromIdentityObject()), createGroup(relationship.getToIdentityObject())));
+         }
       }
 
       return roles;

Modified: idm/trunk/identity-impl/src/main/java/org/jboss/identity/idm/impl/repository/FallbackIdentityStoreRepository.java
===================================================================
--- idm/trunk/identity-impl/src/main/java/org/jboss/identity/idm/impl/repository/FallbackIdentityStoreRepository.java	2009-01-13 22:54:31 UTC (rev 215)
+++ idm/trunk/identity-impl/src/main/java/org/jboss/identity/idm/impl/repository/FallbackIdentityStoreRepository.java	2009-01-14 13:12:43 UTC (rev 216)
@@ -207,6 +207,55 @@
          {
             return resolveIdentityStore(identityObjectType).getSupportedFeatures().isCredentialSupported(identityObjectType, credentialType);
          }
+
+         public boolean isIdentityObjectAddRemoveSupported(IdentityObjectType objectType)
+         {
+            return resolveIdentityStore(objectType).getSupportedFeatures().isIdentityObjectAddRemoveSupported(objectType);
+         }
+
+         public boolean isRelationshipNameAddRemoveSupported()
+         {
+            // If there is any IdentityStore that supports named relationships...
+            for (IdentityStore identityStore : getIdentityStoreMappings().values())
+            {
+               if (identityStore.getSupportedFeatures().isRelationshipNameAddRemoveSupported())
+               {
+                  return true;
+               }
+            }
+            return defaultIdentityStore.getSupportedFeatures().isRelationshipNameAddRemoveSupported();
+
+         }
+
+         public boolean isRoleNameControlSupported(IdentityObjectSearchControl control)
+         {
+            // If there is any IdentityStore that supports named relationships...
+            for (IdentityStore identityStore : getIdentityStoreMappings().values())
+            {
+               if (identityStore.getSupportedFeatures().isNamedRelationshipsSupported() &&
+                  identityStore.getSupportedFeatures().isRoleNameControlSupported(control))
+               {
+                  return true;
+               }
+            }
+            return defaultIdentityStore.getSupportedFeatures().isNamedRelationshipsSupported() &&
+               defaultIdentityStore.getSupportedFeatures().isRoleNameControlSupported(control);
+         }
+
+         public boolean isRoleNameControlSupported(Class controlClazz)
+         {
+            // If there is any IdentityStore that supports named relationships...
+            for (IdentityStore identityStore : getIdentityStoreMappings().values())
+            {
+               if (identityStore.getSupportedFeatures().isNamedRelationshipsSupported() &&
+                  identityStore.getSupportedFeatures().isRoleNameControlSupported(controlClazz))
+               {
+                  return true;
+               }
+            }
+            return defaultIdentityStore.getSupportedFeatures().isNamedRelationshipsSupported() &&
+               defaultIdentityStore.getSupportedFeatures().isRoleNameControlSupported(controlClazz);
+         }
       };
 
    }

Modified: idm/trunk/identity-impl/src/main/java/org/jboss/identity/idm/impl/store/FeaturesMetaDataImpl.java
===================================================================
--- idm/trunk/identity-impl/src/main/java/org/jboss/identity/idm/impl/store/FeaturesMetaDataImpl.java	2009-01-13 22:54:31 UTC (rev 215)
+++ idm/trunk/identity-impl/src/main/java/org/jboss/identity/idm/impl/store/FeaturesMetaDataImpl.java	2009-01-14 13:12:43 UTC (rev 216)
@@ -53,15 +53,19 @@
 
    private final boolean namedRelationshipsSupport;
 
+   private final Set<String> readOnlyObjectTypes;
+
    // <Relationship Type, <From IdentityType, To IdentityType>>
    private final Map<String, Map<String, Set<String>>> supportedRelationshipMappings = new HashMap<String, Map<String, Set<String>>>();
 
 
    public FeaturesMetaDataImpl(IdentityStoreConfigurationMetaData configurationMD,
                                Set<Class> supportedControls,
-                               boolean namedRelationshipsSupport)
+                               boolean namedRelationshipsSupport,
+                               Set<String> readOnlyObjectTypes)
    {
       this.namedRelationshipsSupport = namedRelationshipsSupport;
+      this.readOnlyObjectTypes = readOnlyObjectTypes;
 
       Map<String, Set<String>> supportedCredentials = new HashMap<String, Set<String>>();
 
@@ -140,6 +144,22 @@
 
    }
 
+   public boolean isIdentityObjectAddRemoveSupported(IdentityObjectType objectType)
+   {
+      if (readOnlyObjectTypes.contains(objectType.getName()))
+      {
+         return false;
+      }
+
+      return true;
+   }
+
+   public boolean isRelationshipNameAddRemoveSupported()
+   {
+      // For now just assume that if store supports named relationships, names can be altered
+      return namedRelationshipsSupport;
+   }
+
    public boolean isNamedRelationshipsSupported()
    {
       return namedRelationshipsSupport;
@@ -204,4 +224,16 @@
       }
       return false;
    }
+
+   public boolean isRoleNameControlSupported(IdentityObjectSearchControl control)
+   {
+      // For now simple - use the same allowed controls list for everything
+      return isNamedRelationshipsSupported() && isControlSupported(null, control);
+   }
+
+   public boolean isRoleNameControlSupported(Class controlClazz)
+   {
+      // For now simple - use the same allowed controls list for everything
+      return isNamedRelationshipsSupported() && isControlSupported(null, controlClazz);
+   }
 }

Modified: idm/trunk/identity-impl/src/main/java/org/jboss/identity/idm/impl/store/hibernate/HibernateIdentityStoreImpl.java
===================================================================
--- idm/trunk/identity-impl/src/main/java/org/jboss/identity/idm/impl/store/hibernate/HibernateIdentityStoreImpl.java	2009-01-13 22:54:31 UTC (rev 215)
+++ idm/trunk/identity-impl/src/main/java/org/jboss/identity/idm/impl/store/hibernate/HibernateIdentityStoreImpl.java	2009-01-14 13:12:43 UTC (rev 216)
@@ -168,7 +168,7 @@
 
       id = configurationMD.getId();
 
-      supportedFeatures = new FeaturesMetaDataImpl(configurationMD, supportedIdentityObjectSearchControls, true);
+      supportedFeatures = new FeaturesMetaDataImpl(configurationMD, supportedIdentityObjectSearchControls, true, new HashSet<String>());
 
       String persistenceUnit = configurationMD.getOptionSingleValue(PERSISTENCE_UNIT);
 

Modified: idm/trunk/identity-impl/src/main/java/org/jboss/identity/idm/impl/store/ldap/LDAPIdentityStoreImpl.java
===================================================================
--- idm/trunk/identity-impl/src/main/java/org/jboss/identity/idm/impl/store/ldap/LDAPIdentityStoreImpl.java	2009-01-13 22:54:31 UTC (rev 215)
+++ idm/trunk/identity-impl/src/main/java/org/jboss/identity/idm/impl/store/ldap/LDAPIdentityStoreImpl.java	2009-01-14 13:12:43 UTC (rev 216)
@@ -134,8 +134,18 @@
 
       configuration = new SimpleLDAPIdentityStoreConfiguration(configurationMD);
 
-      supportedFeatures = new FeaturesMetaDataImpl(configurationMD, supportedSearchControls, false);
+      Set<String> readOnlyObjectTypes = new HashSet<String>();
 
+      for (IdentityObjectType identityObjectType : configuration.getConfiguredTypes())
+      {
+         if (!configuration.getTypeConfiguration(identityObjectType.getName()).isAllowCreateEntry())
+         {
+            readOnlyObjectTypes.add(identityObjectType.getName());
+         }
+      }
+
+      supportedFeatures = new FeaturesMetaDataImpl(configurationMD, supportedSearchControls, false, readOnlyObjectTypes);
+
       // Attribute mappings - helper structures
 
       for (IdentityObjectTypeMetaData identityObjectTypeMetaData : configurationMD.getSupportedIdentityTypes())

Modified: idm/trunk/identity-spi/src/main/java/org/jboss/identity/idm/spi/store/FeaturesMetaData.java
===================================================================
--- idm/trunk/identity-spi/src/main/java/org/jboss/identity/idm/spi/store/FeaturesMetaData.java	2009-01-13 22:54:31 UTC (rev 215)
+++ idm/trunk/identity-spi/src/main/java/org/jboss/identity/idm/spi/store/FeaturesMetaData.java	2009-01-14 13:12:43 UTC (rev 216)
@@ -31,14 +31,32 @@
 
 /**
  * Describe the features supported by an Identity Store
+ * 
  * @author boleslaw dot dawidowicz at redhat anotherdot com
  * @author Anil.Saldhana at redhat.com
  * @since Jul 10, 2008
  */
 public interface FeaturesMetaData
 {
+
    /**
+    * Check if IdentityObjects with a given IdentityObjectType can be created and removed
     *
+    * @param objectType
+    * @return
+    */
+   boolean isIdentityObjectAddRemoveSupported(IdentityObjectType objectType);
+
+
+   /**
+    * Check if RelationshipNames can be created and removed
+    *
+    * @return
+    */
+   boolean isRelationshipNameAddRemoveSupported();
+
+   /**
+    *
     * @param identityObjectType
     * @param control
     * @return
@@ -54,6 +72,20 @@
    boolean isControlSupported(IdentityObjectType identityObjectType, Class controlClazz);
 
    /**
+    *
+    * @param control
+    * @return
+    */
+   boolean isRoleNameControlSupported(IdentityObjectSearchControl control);
+
+   /**
+    * 
+    * @param controlClazz
+    * @return
+    */
+   boolean isRoleNameControlSupported(Class controlClazz);
+
+   /**
     * @return set of identity types that can be persisted
     */
    Set<String> getSupportedIdentityObjectTypes();




More information about the jboss-identity-commits mailing list