You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by el...@apache.org on 2010/12/21 17:34:39 UTC

svn commit: r1051546 - /directory/apacheds/branches/apacheds-AP/core/src/main/java/org/apache/directory/server/core/subtree/SubentryInterceptor.java

Author: elecharny
Date: Tue Dec 21 16:34:39 2010
New Revision: 1051546

URL: http://svn.apache.org/viewvc?rev=1051546&view=rev
Log:
When injecting an AP with only an AAP role, create the missing SAP

Modified:
    directory/apacheds/branches/apacheds-AP/core/src/main/java/org/apache/directory/server/core/subtree/SubentryInterceptor.java

Modified: directory/apacheds/branches/apacheds-AP/core/src/main/java/org/apache/directory/server/core/subtree/SubentryInterceptor.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-AP/core/src/main/java/org/apache/directory/server/core/subtree/SubentryInterceptor.java?rev=1051546&r1=1051545&r2=1051546&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-AP/core/src/main/java/org/apache/directory/server/core/subtree/SubentryInterceptor.java (original)
+++ directory/apacheds/branches/apacheds-AP/core/src/main/java/org/apache/directory/server/core/subtree/SubentryInterceptor.java Tue Dec 21 16:34:39 2010
@@ -940,34 +940,61 @@ public class SubentryInterceptor extends
         }
 
         // If we are trying to add an AAP, we have to check that 
-        // all the SAP roles are present 
+        // all the SAP roles are present. If nit, we add them.
+        int nbRoles = adminPoint.size();
+        
         if ( isAutonomousAreaRole( roleStr ) )
         {
-            if ( hasAccessControlSpecificRole( adminPoint ) && hasCollectiveAttributeSpecificRole( adminPoint )
-                && hasTriggerExecutionSpecificRole( adminPoint ) && hasSubSchemaSpecificRole( adminPoint ) )
+            nbRoles--;
+            
+            if ( !hasAccessControlSpecificRole( adminPoint ) )
             {
-                // Check thet we don't have any other role : we should have only 5 roles
-                if ( adminPoint.size() != 5 )
-                {
-                    String message = "Cannot add an Autonomous Administrative Point if we have some IAP roles : "
-                        + adminPoint;
-                    LOG.error( message );
-                    
-                    throw new LdapUnwillingToPerformException( message );
-                }
-                
-                // Fine, we have an AAP and the 4 SAPs
-                return;
+                adminPoint.add( SchemaConstants.ACCESS_CONTROL_SPECIFIC_AREA );
             }
             else
             {
-                // We have some missing SAP : this is not allowed
-                String message = "Cannot add an Autonomous Administrative Point if the other SAP are not present"
+                nbRoles--;
+            }
+            
+            if ( !hasCollectiveAttributeSpecificRole( adminPoint ) )
+            {
+                adminPoint.add( SchemaConstants.COLLECTIVE_ATTRIBUTE_SPECIFIC_AREA );
+            }
+            else
+            {
+                nbRoles--;
+            }
+            
+            if ( !hasTriggerExecutionSpecificRole( adminPoint ) )
+            {
+                adminPoint.add( SchemaConstants.TRIGGER_EXECUTION_SPECIFIC_AREA );
+            }
+            else
+            {
+                nbRoles--;
+            }
+            
+            if ( !hasSubSchemaSpecificRole( adminPoint ) )
+            {
+                adminPoint.add( SchemaConstants.SUB_SCHEMA_ADMIN_SPECIFIC_AREA );
+            }
+            else
+            {
+                nbRoles--;
+            }
+            
+            if ( nbRoles != 0 )
+            {
+                // Check that we don't have any other role : we should have only 5 roles max
+                String message = "Cannot add an Autonomous Administrative Point if we have some IAP roles : "
                     + adminPoint;
                 LOG.error( message );
                 
                 throw new LdapUnwillingToPerformException( message );
             }
+                
+            // Fine, we have an AAP and the 4 SAPs
+            return;
         }
         
         // check that we can't mix Inner and Specific areas
@@ -1534,6 +1561,12 @@ public class SubentryInterceptor extends
     //-------------------------------------------------------------------------------------------
     /**
      * Add a new entry into the DIT. We deal with the Administrative aspects.
+     * We have to manage the three kind of added element :
+     * <ul>
+     * <li>APs</li>
+     * <li>SubEntries</li>
+     * <li>Entries</li>
+     * </ul>
      * 
      * @param next The next {@link Interceptor} in the chain
      * @param addContext The {@link AddOperationContext} instance
@@ -1564,7 +1597,7 @@ public class SubentryInterceptor extends
                 throw new LdapUnwillingToPerformException( message );
             }
 
-            LOG.debug( "Addition of an administrative point at {} for the role {}", dn, adminPointAT );
+            LOG.debug( "Addition of an administrative point at {} for the roles {}", dn, adminPointAT );
 
             try
             {