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/11 15:33:32 UTC

svn commit: r834895 - in /directory: apacheds/branches/apacheds-schema/core-api/src/main/java/org/apache/directory/server/core/schema/registries/synchronizers/ shared/branches/shared-schema/ldap-schema-loader/src/main/java/org/apache/directory/shared/s...

Author: elecharny
Date: Wed Nov 11 14:33:32 2009
New Revision: 834895

URL: http://svn.apache.org/viewvc?rev=834895&view=rev
Log:
Fix some tests in the ComparatorHandler. 

Modified:
    directory/apacheds/branches/apacheds-schema/core-api/src/main/java/org/apache/directory/server/core/schema/registries/synchronizers/AttributeTypeSynchronizer.java
    directory/apacheds/branches/apacheds-schema/core-api/src/main/java/org/apache/directory/server/core/schema/registries/synchronizers/ComparatorSynchronizer.java
    directory/shared/branches/shared-schema/ldap-schema-loader/src/main/java/org/apache/directory/shared/schema/DefaultSchemaManager.java
    directory/shared/branches/shared-schema/ldap-schema-loader/src/main/java/org/apache/directory/shared/schema/loader/ldif/SchemaEntityFactory.java
    directory/shared/branches/shared-schema/ldap/src/main/java/org/apache/directory/shared/ldap/schema/SchemaManager.java
    directory/shared/branches/shared-schema/ldap/src/main/java/org/apache/directory/shared/ldap/schema/registries/DefaultComparatorRegistry.java
    directory/shared/branches/shared-schema/ldap/src/main/java/org/apache/directory/shared/ldap/schema/registries/Registries.java

Modified: directory/apacheds/branches/apacheds-schema/core-api/src/main/java/org/apache/directory/server/core/schema/registries/synchronizers/AttributeTypeSynchronizer.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/AttributeTypeSynchronizer.java?rev=834895&r1=834894&r2=834895&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-schema/core-api/src/main/java/org/apache/directory/server/core/schema/registries/synchronizers/AttributeTypeSynchronizer.java (original)
+++ directory/apacheds/branches/apacheds-schema/core-api/src/main/java/org/apache/directory/server/core/schema/registries/synchronizers/AttributeTypeSynchronizer.java Wed Nov 11 14:33:32 2009
@@ -80,7 +80,7 @@
         // Build the new AttributeType from the given entry
         String schemaName = getSchemaName( dn );
         
-        // At this point, as we may break the regisytries, work on a cloned registries
+        // At this point, as we may break the registries, work on a cloned registries
         Registries clonedRegistries = schemaManager.getRegistries().clone();
         
         // Relax the cloned registries
@@ -96,7 +96,7 @@
             if ( errors.size() == 0 )
             {
                 clonedRegistries.setStrict();
-                schemaManager.setRegistries( clonedRegistries  );
+                schemaManager.swapRegistries( clonedRegistries  );
             }
             else
             {

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=834895&r1=834894&r2=834895&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 Wed Nov 11 14:33:32 2009
@@ -20,6 +20,8 @@
 package org.apache.directory.server.core.schema.registries.synchronizers;
 
 
+import java.util.List;
+
 import javax.naming.NamingException;
 
 import org.apache.directory.server.core.entry.ServerEntry;
@@ -34,6 +36,8 @@
 import org.apache.directory.shared.ldap.name.Rdn;
 import org.apache.directory.shared.ldap.schema.LdapComparator;
 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.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -106,18 +110,47 @@
         // 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 )
         {
-            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
+                return;
+            }
 
-            if ( isSchemaEnabled( schemaName ) && comparator.isEnabled() )
+            // 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.
+            Schema schema = schemaManager.getLoadedSchema( schemaName );
+            
+            if ( schema.isEnabled() && comparator.isEnabled() )
             {
+                comparator.applyRegistries( schemaManager.getRegistries() );
+                addToSchema( comparator, schemaName );
                 schemaManager.register( comparator );
                 LOG.debug( "Added {} into the enabled schema {}", dn.getUpName(), schemaName );
             }
         }
+        else
+        {
+            LOG.debug( "The comparator {} cannot be added in schema {}", dn.getUpName(), schemaName );
+
+        }
     }
 
 
@@ -148,9 +181,11 @@
                 LOG.warn( msg );
                 throw new LdapOperationNotSupportedException( msg, ResultCodeEnum.UNWILLING_TO_PERFORM );
             }
+
+            // As the comparator has the same OID than its attached MR, it won't
+            // be loaded into the schemaManager if it's disabled
+            deleteFromSchema( comparator, schemaName );
         }
-        
-        deleteFromSchema( comparator, schemaName );
 
         if ( schemaManager.getComparatorRegistry().contains( oid ) )
         {

Modified: directory/shared/branches/shared-schema/ldap-schema-loader/src/main/java/org/apache/directory/shared/schema/DefaultSchemaManager.java
URL: http://svn.apache.org/viewvc/directory/shared/branches/shared-schema/ldap-schema-loader/src/main/java/org/apache/directory/shared/schema/DefaultSchemaManager.java?rev=834895&r1=834894&r2=834895&view=diff
==============================================================================
--- directory/shared/branches/shared-schema/ldap-schema-loader/src/main/java/org/apache/directory/shared/schema/DefaultSchemaManager.java (original)
+++ directory/shared/branches/shared-schema/ldap-schema-loader/src/main/java/org/apache/directory/shared/schema/DefaultSchemaManager.java Wed Nov 11 14:33:32 2009
@@ -164,26 +164,25 @@
     
     
     /***
-     * Swap the registries, deleting all the schemaObjects and links from the old one
-     * to avoid memory leaks.
+     * {@inheritDoc}
      */
-    private boolean swapRegistries( Registries clonedRegistries )
+    public boolean swapRegistries( Registries targetRegistries )
     {
         // Check the resulting registries
-        errors = clonedRegistries.checkRefInteg();
+        errors = targetRegistries.checkRefInteg();
         
         // if we have no more error, we can swap the registries
         if ( errors.size() == 0 )
         {
-            clonedRegistries.setStrict();
+            targetRegistries.setStrict();
             
             // Rebuild the references
-            errors = clonedRegistries.checkRefInteg();
+            errors = targetRegistries.checkRefInteg();
 
             if ( errors.size() == 0 )
             {
                 Registries oldRegistries = registries;
-                registries = clonedRegistries;
+                registries = targetRegistries;
 
                 // Delete the old registries to avoid memory leaks
                 //destroy( oldRegistries );

Modified: directory/shared/branches/shared-schema/ldap-schema-loader/src/main/java/org/apache/directory/shared/schema/loader/ldif/SchemaEntityFactory.java
URL: http://svn.apache.org/viewvc/directory/shared/branches/shared-schema/ldap-schema-loader/src/main/java/org/apache/directory/shared/schema/loader/ldif/SchemaEntityFactory.java?rev=834895&r1=834894&r2=834895&view=diff
==============================================================================
--- directory/shared/branches/shared-schema/ldap-schema-loader/src/main/java/org/apache/directory/shared/schema/loader/ldif/SchemaEntityFactory.java (original)
+++ directory/shared/branches/shared-schema/ldap-schema-loader/src/main/java/org/apache/directory/shared/schema/loader/ldif/SchemaEntityFactory.java Wed Nov 11 14:33:32 2009
@@ -468,9 +468,7 @@
         String oid = getOid( entry, SchemaConstants.COMPARATOR );
         
         // Get the schema
-        Schema schema = getSchema( schemaName, targetRegistries );
-
-        if ( schema == null )
+        if ( !schemaManager.isSchemaLoaded( schemaName ) )
         {
             // The schema is not loaded. We can't create the requested Comparator
             String msg = "Cannot add the Comparator " + entry.getDn().getUpName() + ", as the associated schema (" +
@@ -479,6 +477,17 @@
             throw new LdapOperationNotSupportedException( msg, ResultCodeEnum.UNWILLING_TO_PERFORM );
         }
         
+        Schema schema = getSchema( schemaName, targetRegistries );
+        
+        if ( schema == null )
+        {
+            // The schema is disabled. We still have to update the backend
+            String msg = "Cannot add the Comparator " + entry.getDn().getUpName() + " into the registries, "+
+                "as the associated schema (" + schemaName + ") is disabled";
+            LOG.info( msg );
+            schema = schemaManager.getLoadedSchema( schemaName );
+        }
+
         // The FQCN
         String fqcn = getFqcn( entry, SchemaConstants.COMPARATOR );
         
@@ -849,7 +858,7 @@
         {
             // The schema is disabled. We still have to update the backend
             String msg = "Cannot add the AttributeType " + entry.getDn().getUpName() + " into the registries, "+
-                "as the associated schema (" + schemaName + " is disabled";
+                "as the associated schema (" + schemaName + ") is disabled";
             LOG.info( msg );
             schema = schemaManager.getLoadedSchema( schemaName );
         }

Modified: directory/shared/branches/shared-schema/ldap/src/main/java/org/apache/directory/shared/ldap/schema/SchemaManager.java
URL: http://svn.apache.org/viewvc/directory/shared/branches/shared-schema/ldap/src/main/java/org/apache/directory/shared/ldap/schema/SchemaManager.java?rev=834895&r1=834894&r2=834895&view=diff
==============================================================================
--- directory/shared/branches/shared-schema/ldap/src/main/java/org/apache/directory/shared/ldap/schema/SchemaManager.java (original)
+++ directory/shared/branches/shared-schema/ldap/src/main/java/org/apache/directory/shared/ldap/schema/SchemaManager.java Wed Nov 11 14:33:32 2009
@@ -408,6 +408,16 @@
     void setRegistries( Registries registries );
     
     
+    /***
+     * Swap the registries, deleting all the schemaObjects and links from the old one
+     * to avoid memory leaks.
+     * 
+     * @param targetRegistries The registries we want to store in place of the existing one
+     * @return true if the replacement has been done
+     */
+    public boolean swapRegistries( Registries targetRegistries );
+    
+    
     /**
      * @return The errors obtained when checking the registries
      */

Modified: directory/shared/branches/shared-schema/ldap/src/main/java/org/apache/directory/shared/ldap/schema/registries/DefaultComparatorRegistry.java
URL: http://svn.apache.org/viewvc/directory/shared/branches/shared-schema/ldap/src/main/java/org/apache/directory/shared/ldap/schema/registries/DefaultComparatorRegistry.java?rev=834895&r1=834894&r2=834895&view=diff
==============================================================================
--- directory/shared/branches/shared-schema/ldap/src/main/java/org/apache/directory/shared/ldap/schema/registries/DefaultComparatorRegistry.java (original)
+++ directory/shared/branches/shared-schema/ldap/src/main/java/org/apache/directory/shared/ldap/schema/registries/DefaultComparatorRegistry.java Wed Nov 11 14:33:32 2009
@@ -163,4 +163,30 @@
     {
         return byName.values().size();
     }
+
+
+    /**
+     * @see Object#toString()
+     */
+    public String toString()
+    {
+        StringBuilder sb = new StringBuilder();
+        boolean isFirst = true;
+        
+        for ( String name:byName.keySet() )
+        {
+            if ( isFirst )
+            {
+                isFirst = false;
+            }
+            else
+            {
+                sb.append(  ", " );
+            }
+            
+            sb.append( name );
+        }
+        
+        return sb.toString();
+    }
 }

Modified: directory/shared/branches/shared-schema/ldap/src/main/java/org/apache/directory/shared/ldap/schema/registries/Registries.java
URL: http://svn.apache.org/viewvc/directory/shared/branches/shared-schema/ldap/src/main/java/org/apache/directory/shared/ldap/schema/registries/Registries.java?rev=834895&r1=834894&r2=834895&view=diff
==============================================================================
--- directory/shared/branches/shared-schema/ldap/src/main/java/org/apache/directory/shared/ldap/schema/registries/Registries.java (original)
+++ directory/shared/branches/shared-schema/ldap/src/main/java/org/apache/directory/shared/ldap/schema/registries/Registries.java Wed Nov 11 14:33:32 2009
@@ -981,6 +981,10 @@
 	            attributeTypeRegistry.register( (AttributeType)schemaObject );
 	            break;
 	            
+	        case COMPARATOR :
+	            comparatorRegistry.register( (LdapComparator<?>)schemaObject );
+	            break;
+	            
             case DIT_CONTENT_RULE : 
                 ditContentRuleRegistry.register( (DITContentRule)schemaObject );
                 break;