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 2009/11/13 01:38:56 UTC

svn commit: r835673 - /directory/apacheds/branches/apacheds-schema/core-api/src/main/java/org/apache/directory/server/core/schema/registries/synchronizers/ComparatorSynchronizer.java

Author: elecharny
Date: Fri Nov 13 00:38:56 2009
New Revision: 835673

URL: http://svn.apache.org/viewvc?rev=835673&view=rev
Log:
Refactored the Add operation to avoid useless code and tests.

Modified:
    directory/apacheds/branches/apacheds-schema/core-api/src/main/java/org/apache/directory/server/core/schema/registries/synchronizers/ComparatorSynchronizer.java

Modified: directory/apacheds/branches/apacheds-schema/core-api/src/main/java/org/apache/directory/server/core/schema/registries/synchronizers/ComparatorSynchronizer.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-schema/core-api/src/main/java/org/apache/directory/server/core/schema/registries/synchronizers/ComparatorSynchronizer.java?rev=835673&r1=835672&r2=835673&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-schema/core-api/src/main/java/org/apache/directory/server/core/schema/registries/synchronizers/ComparatorSynchronizer.java (original)
+++ directory/apacheds/branches/apacheds-schema/core-api/src/main/java/org/apache/directory/server/core/schema/registries/synchronizers/ComparatorSynchronizer.java Fri Nov 13 00:38:56 2009
@@ -38,6 +38,7 @@
 import org.apache.directory.shared.ldap.schema.SchemaManager;
 import org.apache.directory.shared.ldap.schema.registries.Registries;
 import org.apache.directory.shared.ldap.schema.registries.Schema;
+import org.apache.directory.shared.ldap.util.StringTools;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -110,29 +111,10 @@
         // Build the new Comparator from the given entry
         String schemaName = getSchemaName( dn );
         
-        // At this point, as we may break the registries, work on a cloned registries
-        Registries clonedRegistries = schemaManager.getRegistries().clone();
-        
-        // Relax the cloned registries
-        clonedRegistries.setRelaxed();
-        
         LdapComparator<?> comparator = factory.getLdapComparator( schemaManager, entry, schemaManager.getRegistries(), schemaName );
         
         if ( comparator != null )
         {
-            List<Throwable> errors = clonedRegistries.checkRefInteg();
-            
-            if ( errors.size() == 0 )
-            {
-                clonedRegistries.setStrict();
-                schemaManager.swapRegistries( clonedRegistries  );
-            }
-            else
-            {
-                // We have some error : reject the addition and get out
-                return;
-            }
-
             // At this point, the constructed LdapComparator has not been checked against the 
             // existing Registries. It will be checked there, if the schema and the 
             // LdapComparator are both enabled.
@@ -140,9 +122,35 @@
             
             if ( schema.isEnabled() && comparator.isEnabled() )
             {
+                // At this point, as we may break the registries, work on a cloned registries
+                Registries clonedRegistries = schemaManager.getRegistries().clone();
+                
+                // Relax the cloned registries
+                clonedRegistries.setRelaxed();
+                
                 comparator.applyRegistries( schemaManager.getRegistries() );
-                addToSchema( comparator, schemaName );
+                
+                List<Throwable> errors = clonedRegistries.checkRefInteg();
+                
+                if ( errors.size() == 0 )
+                {
+                    clonedRegistries.setStrict();
+                    schemaManager.swapRegistries( clonedRegistries  );
+                }
+                else
+                {
+                    // We have some error : reject the addition and get out
+                    // TODO : we have to destroy the cloned registries
+                    //schemaManager.destroy( clonedRegistries );
+                    // The schema is disabled. We still have to update the backend
+                    String msg = "Cannot add the Comparator " + entry.getDn().getUpName() + " into the registries, "+
+                        "the resulting registries would be inconsistent :" + StringTools.listToString( errors );
+                    LOG.info( msg );
+                    throw new LdapOperationNotSupportedException( msg, ResultCodeEnum.UNWILLING_TO_PERFORM );
+                }
+
                 schemaManager.register( comparator );
+
                 LOG.debug( "Added {} into the enabled schema {}", dn.getUpName(), schemaName );
             }
         }