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/10/30 17:20:44 UTC

svn commit: r831373 [1/2] - in /directory/apacheds/branches/apacheds-schema: avl-partition/src/test/java/org/apache/directory/server/core/partition/avl/ core-api/src/main/java/org/apache/directory/server/core/ core-api/src/main/java/org/apache/director...

Author: elecharny
Date: Fri Oct 30 16:20:42 2009
New Revision: 831373

URL: http://svn.apache.org/viewvc?rev=831373&view=rev
Log:
Fixed the way DS is initialized, as I have introduced the SchemaManager in the whole picture

Modified:
    directory/apacheds/branches/apacheds-schema/avl-partition/src/test/java/org/apache/directory/server/core/partition/avl/AvlStoreTest.java
    directory/apacheds/branches/apacheds-schema/core-api/src/main/java/org/apache/directory/server/core/DirectoryService.java
    directory/apacheds/branches/apacheds-schema/core-api/src/main/java/org/apache/directory/server/core/schema/PartitionSchemaLoader.java
    directory/apacheds/branches/apacheds-schema/core-api/src/main/java/org/apache/directory/server/core/schema/SchemaPartition.java
    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/RegistrySynchronizerAdaptor.java
    directory/apacheds/branches/apacheds-schema/core-api/src/main/java/org/apache/directory/server/core/schema/registries/synchronizers/SchemaSynchronizer.java
    directory/apacheds/branches/apacheds-schema/core-entry/src/test/java/org/apache/directory/server/core/entry/DefaultServerAttributeTest.java
    directory/apacheds/branches/apacheds-schema/core-entry/src/test/java/org/apache/directory/server/core/entry/DefaultServerEntryTest.java
    directory/apacheds/branches/apacheds-schema/core-entry/src/test/java/org/apache/directory/server/core/entry/ServerEntrySerializerTest.java
    directory/apacheds/branches/apacheds-schema/core-entry/src/test/java/org/apache/directory/server/core/entry/ServerModificationTest.java
    directory/apacheds/branches/apacheds-schema/core-integ/src/main/java/org/apache/directory/server/core/integ/DirectoryServiceFactory.java
    directory/apacheds/branches/apacheds-schema/core-integ/src/test/java/org/apache/directory/server/core/authz/AutzIntegUtils.java
    directory/apacheds/branches/apacheds-schema/core-integ/src/test/java/org/apache/directory/server/core/jndi/MixedCaseITest.java
    directory/apacheds/branches/apacheds-schema/core-integ/src/test/java/org/apache/directory/server/core/operations/search/SearchWithIndicesITest.java
    directory/apacheds/branches/apacheds-schema/core-integ/src/test/java/org/apache/directory/server/core/partition/PartitionIT.java
    directory/apacheds/branches/apacheds-schema/core-integ/src/test/resources/log4j.properties
    directory/apacheds/branches/apacheds-schema/core/src/main/java/org/apache/directory/server/core/authn/AuthenticationInterceptor.java
    directory/apacheds/branches/apacheds-schema/core/src/main/java/org/apache/directory/server/core/schema/DefaultSchemaService.java
    directory/apacheds/branches/apacheds-schema/core/src/main/java/org/apache/directory/server/core/schema/SchemaInterceptor.java
    directory/apacheds/branches/apacheds-schema/core/src/main/java/org/apache/directory/server/core/schema/SchemaSubentryManager.java
    directory/apacheds/branches/apacheds-schema/core/src/test/java/org/apache/directory/server/core/authz/support/MaxValueCountFilterTest.java
    directory/apacheds/branches/apacheds-schema/core/src/test/java/org/apache/directory/server/core/authz/support/RelatedProtectedItemFilterTest.java
    directory/apacheds/branches/apacheds-schema/core/src/test/java/org/apache/directory/server/core/authz/support/RestrictedByFilterTest.java
    directory/apacheds/branches/apacheds-schema/core/src/test/java/org/apache/directory/server/core/normalization/NormalizationVisitorTest.java
    directory/apacheds/branches/apacheds-schema/core/src/test/java/org/apache/directory/server/core/schema/SchemaCheckerTest.java
    directory/apacheds/branches/apacheds-schema/core/src/test/java/org/apache/directory/server/core/schema/SchemaServiceTest.java
    directory/apacheds/branches/apacheds-schema/core/src/test/java/org/apache/directory/server/core/security/TlsKeyGeneratorTest.java
    directory/apacheds/branches/apacheds-schema/core/src/test/java/org/apache/directory/server/core/subtree/RefinementEvaluatorTest.java
    directory/apacheds/branches/apacheds-schema/core/src/test/java/org/apache/directory/server/core/subtree/RefinementLeafEvaluatorTest.java
    directory/apacheds/branches/apacheds-schema/core/src/test/java/org/apache/directory/server/core/subtree/SubtreeEvaluatorTest.java
    directory/apacheds/branches/apacheds-schema/jdbm-partition/src/test/java/org/apache/directory/server/core/schema/PartitionSchemaLoaderTest.java
    directory/apacheds/branches/apacheds-schema/jdbm-store/src/test/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmIndexTest.java
    directory/apacheds/branches/apacheds-schema/jdbm-store/src/test/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmMasterTableTest.java
    directory/apacheds/branches/apacheds-schema/jdbm-store/src/test/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmStoreTest.java
    directory/apacheds/branches/apacheds-schema/ldif-partition/src/test/java/org/apache/directory/server/core/partition/LdifPartitionTest.java
    directory/apacheds/branches/apacheds-schema/server-tools/src/main/java/org/apache/directory/server/tools/DumpCommand.java
    directory/apacheds/branches/apacheds-schema/xdbm-search/src/main/java/org/apache/directory/server/xdbm/search/impl/EqualityEvaluator.java
    directory/apacheds/branches/apacheds-schema/xdbm-search/src/test/java/org/apache/directory/server/xdbm/search/impl/AndCursorTest.java
    directory/apacheds/branches/apacheds-schema/xdbm-search/src/test/java/org/apache/directory/server/xdbm/search/impl/GreaterEqTest.java
    directory/apacheds/branches/apacheds-schema/xdbm-search/src/test/java/org/apache/directory/server/xdbm/search/impl/LessEqTest.java
    directory/apacheds/branches/apacheds-schema/xdbm-search/src/test/java/org/apache/directory/server/xdbm/search/impl/NestedFilterTest.java
    directory/apacheds/branches/apacheds-schema/xdbm-search/src/test/java/org/apache/directory/server/xdbm/search/impl/NotCursorTest.java
    directory/apacheds/branches/apacheds-schema/xdbm-search/src/test/java/org/apache/directory/server/xdbm/search/impl/OneLevelScopeTest.java
    directory/apacheds/branches/apacheds-schema/xdbm-search/src/test/java/org/apache/directory/server/xdbm/search/impl/OrCursorTest.java
    directory/apacheds/branches/apacheds-schema/xdbm-search/src/test/java/org/apache/directory/server/xdbm/search/impl/PresenceTest.java
    directory/apacheds/branches/apacheds-schema/xdbm-search/src/test/java/org/apache/directory/server/xdbm/search/impl/SubstringTest.java
    directory/apacheds/branches/apacheds-schema/xdbm-search/src/test/java/org/apache/directory/server/xdbm/search/impl/SubtreeScopeTest.java

Modified: directory/apacheds/branches/apacheds-schema/avl-partition/src/test/java/org/apache/directory/server/core/partition/avl/AvlStoreTest.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-schema/avl-partition/src/test/java/org/apache/directory/server/core/partition/avl/AvlStoreTest.java?rev=831373&r1=831372&r2=831373&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-schema/avl-partition/src/test/java/org/apache/directory/server/core/partition/avl/AvlStoreTest.java (original)
+++ directory/apacheds/branches/apacheds-schema/avl-partition/src/test/java/org/apache/directory/server/core/partition/avl/AvlStoreTest.java Fri Oct 30 16:20:42 2009
@@ -59,11 +59,13 @@
 import org.apache.directory.shared.ldap.name.LdapDN;
 import org.apache.directory.shared.ldap.name.Rdn;
 import org.apache.directory.shared.ldap.schema.AttributeType;
+import org.apache.directory.shared.ldap.schema.SchemaManager;
 import org.apache.directory.shared.ldap.schema.SchemaUtils;
 import org.apache.directory.shared.ldap.schema.ldif.extractor.SchemaLdifExtractor;
 import org.apache.directory.shared.ldap.schema.registries.AttributeTypeRegistry;
 import org.apache.directory.shared.ldap.schema.registries.Registries;
 import org.apache.directory.shared.ldap.util.ExceptionUtils;
+import org.apache.directory.shared.schema.DefaultSchemaManager;
 import org.apache.directory.shared.schema.loader.ldif.LdifSchemaLoader;
 import org.junit.After;
 import org.junit.Before;
@@ -107,15 +109,17 @@
         extractor.extractOrCopy();
         LdifSchemaLoader loader = new LdifSchemaLoader( schemaRepository );
         
-        registries = new Registries();
+        SchemaManager sm = new DefaultSchemaManager( loader );
 
-        List<Throwable> errors = loader.loadAllEnabled( registries, true );
-        
-        if ( errors.size() != 0 )
+        boolean loaded = sm.loadAllEnabled();
+
+        if ( !loaded )
         {
-            fail( "Schema load failed : " + ExceptionUtils.printErrors( errors ) );
+            fail( "Schema load failed : " + ExceptionUtils.printErrors( sm.getErrors() ) );
         }
 
+        registries = sm.getRegistries();
+        
         attributeRegistry = registries.getAttributeTypeRegistry();
     }
 

Modified: directory/apacheds/branches/apacheds-schema/core-api/src/main/java/org/apache/directory/server/core/DirectoryService.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-schema/core-api/src/main/java/org/apache/directory/server/core/DirectoryService.java?rev=831373&r1=831372&r2=831373&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-schema/core-api/src/main/java/org/apache/directory/server/core/DirectoryService.java (original)
+++ directory/apacheds/branches/apacheds-schema/core-api/src/main/java/org/apache/directory/server/core/DirectoryService.java Fri Oct 30 16:20:42 2009
@@ -20,7 +20,10 @@
 package org.apache.directory.server.core;
 
 
-import org.apache.directory.server.core.LdapPrincipal;
+import java.io.File;
+import java.util.List;
+import java.util.Set;
+
 import org.apache.directory.server.core.changelog.ChangeLog;
 import org.apache.directory.server.core.entry.ServerEntry;
 import org.apache.directory.server.core.entry.ServerEntryFactory;
@@ -37,10 +40,6 @@
 import org.apache.directory.shared.ldap.name.LdapDN;
 import org.apache.directory.shared.ldap.schema.registries.Registries;
 
-import java.io.File;
-import java.util.List;
-import java.util.Set;
-
 
 /**
  * Provides JNDI service to {@link AbstractContextFactory}.

Modified: directory/apacheds/branches/apacheds-schema/core-api/src/main/java/org/apache/directory/server/core/schema/PartitionSchemaLoader.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-schema/core-api/src/main/java/org/apache/directory/server/core/schema/PartitionSchemaLoader.java?rev=831373&r1=831372&r2=831373&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-schema/core-api/src/main/java/org/apache/directory/server/core/schema/PartitionSchemaLoader.java (original)
+++ directory/apacheds/branches/apacheds-schema/core-api/src/main/java/org/apache/directory/server/core/schema/PartitionSchemaLoader.java Fri Oct 30 16:20:42 2009
@@ -21,16 +21,12 @@
 
 
 import java.util.ArrayList;
-import java.util.Collection;
 import java.util.HashMap;
 import java.util.HashSet;
-import java.util.Iterator;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
-import java.util.Properties;
 import java.util.Set;
-import java.util.Stack;
 
 import javax.naming.NamingException;
 
@@ -43,15 +39,10 @@
 import org.apache.directory.server.core.partition.Partition;
 import org.apache.directory.shared.ldap.constants.MetaSchemaConstants;
 import org.apache.directory.shared.ldap.constants.SchemaConstants;
+import org.apache.directory.shared.ldap.entry.Entry;
 import org.apache.directory.shared.ldap.entry.EntryAttribute;
-import org.apache.directory.shared.ldap.entry.Value;
 import org.apache.directory.shared.ldap.name.LdapDN;
 import org.apache.directory.shared.ldap.schema.AttributeType;
-import org.apache.directory.shared.ldap.schema.LdapSyntax;
-import org.apache.directory.shared.ldap.schema.MatchingRule;
-import org.apache.directory.shared.ldap.schema.Normalizer;
-import org.apache.directory.shared.ldap.schema.ObjectClass;
-import org.apache.directory.shared.ldap.schema.SyntaxChecker;
 import org.apache.directory.shared.ldap.schema.parsers.LdapComparatorDescription;
 import org.apache.directory.shared.ldap.schema.parsers.NormalizerDescription;
 import org.apache.directory.shared.ldap.schema.parsers.SyntaxCheckerDescription;
@@ -60,7 +51,6 @@
 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.Base64;
-import org.apache.directory.shared.schema.loader.ldif.SchemaEntityFactory;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -100,7 +90,6 @@
     
     public PartitionSchemaLoader( Partition partition, Registries registries ) throws Exception
     {
-        super( new SchemaEntityFactory() );
         this.partition = partition;
         atRegistry = registries.getAttributeTypeRegistry();
         
@@ -192,73 +181,26 @@
 
     }
     
+    
     /**
-     * Utility method to load all enabled schemas into this registry.
-     * 
-     * @param targetRegistries
-     * @throws NamingException
+     * Helper class used to update the static DNs for each kind of Schema Object
      */
-    public void loadEnabled( Registries targetRegistries ) throws Exception
+    private LdapDN updateDNs( Map<String, LdapDN> staticDNs, String path, Schema schema ) throws NamingException
     {
-        /* 
-         * We need to load all names and oids into the oid registry regardless of
-         * the entity being in an enabled schema.  This is necessary because we 
-         * search for values in the schema partition that represent matchingRules
-         * and other entities that are not loaded.  While searching these values
-         * in disabled schemas normalizers will attempt to equate names with oids
-         * and if there is an unrecognized value by a normalizer then the search 
-         * will fail.
-         * 
-         * For example there is a NameOrNumericOidNormalizer that will reduce a 
-         * numeric OID or a non-numeric OID to it's numeric form using the OID 
-         * registry.  While searching the schema partition for attributeTypes we
-         * might find values of matchingRules in the m-ordering, m-equality, and
-         * m-substr attributes of metaAttributeType definitions.  Now if an entry
-         * references a matchingRule that has not been loaded then the 
-         * NameOrNumericOidNormalizer will bomb out when it tries to resolve 
-         * names of matchingRules in unloaded schemas to OID values using the 
-         * OID registry.  To prevent this we need to load all the OID's in advance
-         * regardless of whether they are used or not.
-         */
-        EntryFilteringCursor cursor = dao.listAllNames();
-        
-        // @TODO WARNING: this does not work figure out what we need to do  
-        // with this OID registry registration below that we commented out.
-        
-        while ( cursor.next() )
-        {
-            ServerEntry entry = cursor.get();
-            String oid = entry.get( mOidAT ).getString();
-            EntryAttribute names = entry.get( mNameAT );
-            //targetRegistries.getOidRegistry().register( oid, oid );
-            
-            for ( Value<?> value:names )
-            {
-                //targetRegistries.getOidRegistry().register( value.getString(), oid );
-            }
-        }
+        LdapDN dn = staticDNs.get( schema.getSchemaName() );
         
-        cursor.close();
-        
-        
-        Map<String, Schema> allSchemaMap = getSchemas();
-        Set<Schema> enabledSchemaSet = new HashSet<Schema>();
-
-        for ( Schema schema: allSchemaMap.values() )
+        if ( dn == null )
         {
-            if ( ! schema.isDisabled() )
-            {
-                LOG.debug( "will attempt to load enabled schema: {}", schema.getSchemaName() );
-                    
-                enabledSchemaSet.add( schema );
-            }
-            else
-            {
-                LOG.debug( "will NOT attempt to load disabled schema: {}", schema.getSchemaName() );
-            }
+            dn = new LdapDN( 
+                path,
+                "cn=" + schema.getSchemaName(),
+                SchemaConstants.OU_SCHEMA );
+            
+            dn.normalize( atRegistry.getNormalizerMapping() );
+            staticDNs.put( schema.getSchemaName(), dn );
         }
-
-        loadWithDependencies( enabledSchemaSet, targetRegistries, true );
+        
+        return dn;
     }
     
     
@@ -335,43 +277,6 @@
     }
 
 
-    /**
-     * {@inheritDoc}
-     */
-    public final List<Throwable> loadWithDependencies( Collection<Schema> schemas, Registries targetRegistries, boolean check ) throws Exception
-    {
-        // Relax the controls at first
-        List<Throwable> errors = new ArrayList<Throwable>();
-        boolean wasRelaxed = targetRegistries.isRelaxed();
-        targetRegistries.setRelaxed( true );
-
-        HashMap<String,Schema> notLoaded = new HashMap<String,Schema>();
-
-        for ( Schema schema : schemas )
-        {
-            notLoaded.put( schema.getSchemaName(), schema );
-        }
-
-        Iterator<Schema> list = notLoaded.values().iterator();
-        
-        while ( list.hasNext() )
-        {
-            Schema schema = list.next();
-            loadDepsFirst( schema, new Stack<String>(), notLoaded, schema, targetRegistries );
-            list = notLoaded.values().iterator();
-        }
-
-        // At the end, check the registries if required
-        if ( check )
-        {
-            errors = targetRegistries.checkRefInteg();
-        }
-        
-        // Restore the Registries isRelaxed flag
-        targetRegistries.setRelaxed( wasRelaxed );
-        
-        return errors;
-    }
 
     /**
      * {@inheritDoc}
@@ -393,281 +298,125 @@
         
         LOG.debug( "loading {} schema ...", schema.getSchemaName() );
         
-        loadComparators( schema, targetRegistries );
-        loadNormalizers( schema, targetRegistries );
-        loadSyntaxCheckers( schema, targetRegistries );
-        loadSyntaxes( schema, targetRegistries );
-        loadMatchingRules( schema, targetRegistries );
-        loadAttributeTypes( schema, targetRegistries );
-        loadObjectClasses( schema, targetRegistries );
-        loadMatchingRuleUses( schema, targetRegistries );
-        loadDitContentRules( schema, targetRegistries );
-        loadNameForms( schema, targetRegistries );
+        loadComparators( schema );
+        loadNormalizers( schema );
+        loadSyntaxCheckers( schema );
+        loadSyntaxes( schema );
+        loadMatchingRules( schema );
+        loadAttributeTypes( schema );
+        loadObjectClasses( schema );
+        loadMatchingRuleUses( schema );
+        loadDitContentRules( schema );
+        loadNameForms( schema );
         
         // order does matter here so some special trickery is needed
         // we cannot load a DSR before the DSRs it depends on are loaded?
         // TODO need to confirm this ( or we must make the class for this and use deferred 
         // resolution until everything is available?
         
-        loadDitStructureRules( schema, targetRegistries );
+        loadDitStructureRules( schema );
         
         notifyListenerOrRegistries( schema, targetRegistries );
     }
 
     
-    private void loadMatchingRuleUses( Schema schema, Registries targetRegistries )
-    {
-        // TODO Auto-generated method stub
-    }
-
-
-    private void loadDitStructureRules( Schema schema, Registries targetRegistries )
-    {
-        // TODO Auto-generated method stub
-    }
-
-
-    private void loadNameForms( Schema schema, Registries targetRegistries )
-    {
-        // TODO Auto-generated method stub
-    }
-
-
-    private void loadDitContentRules( Schema schema, Registries targetRegistries )
-    {
-        // TODO Auto-generated method stub
-    }
-
-
-    private void loadObjectClasses( Schema schema, Registries targetRegistries ) throws Exception
+    /**
+     * {@inheritDoc}
+     */
+    public List<Entry> loadAttributeTypes( Schema schema ) throws Exception
     {
-        /**
-         * Sometimes search may return child objectClasses before their superiors have
-         * been registered like with attributeTypes.  To prevent this from bombing out
-         * the loader we will defer the registration of elements until later.
-         */
-        LinkedList<ObjectClass> deferred = new LinkedList<ObjectClass>();
-
-        LdapDN dn = staticObjectClassesDNs.get( schema.getSchemaName() );
+        LinkedList<AttributeType> deferred = new LinkedList<AttributeType>();
         
-        if ( dn == null )
-        {
-            dn = new LdapDN( 
-                SchemaConstants.OBJECT_CLASSES_PATH, 
-                "cn", schema.getSchemaName(),
-                SchemaConstants.OU_SCHEMA );
-            
-            dn.normalize( atRegistry.getNormalizerMapping() );
-            staticObjectClassesDNs.put( schema.getSchemaName(), dn );
-        }
+        LdapDN dn = updateDNs( staticAttributeTypeDNs, SchemaConstants.ATTRIBUTES_TYPE_PATH, schema );
         
+        List<Entry> attributeTypeList = new ArrayList<Entry>();
+
+        // Check that we don't have an entry in the Dit for this schema
         if ( ! partition.hasEntry( new EntryOperationContext( null, dn ) ) )
         {
-            return;
+            // No : get out, no AttributeType to load
+            return attributeTypeList;
         }
         
-        LOG.debug( "{} schema: loading objectClasses", schema.getSchemaName() );
+        LOG.debug( "{} schema: loading attributeTypes", schema.getSchemaName() );
         
         EntryFilteringCursor list = partition.list( new ListOperationContext( null, dn ) );
         
+        // Loop on all the AttributeTypes and add them to the list
         while ( list.next() )
         {
-            ClonedServerEntry result = list.get();
-            LdapDN resultDN = result.getDn();
-            resultDN.normalize( atRegistry.getNormalizerMapping() );
-            ClonedServerEntry entry = lookupPartition( resultDN );
+            ServerEntry result = list.get();
             
-            registerObjectClass( targetRegistries, entry, schema );
+            attributeTypeList.add( result );
         }
         
-        LOG.debug( "Deferred queue size = {}", deferred.size() );
-        
-        if ( LOG.isDebugEnabled() )
-        {
-            StringBuffer buf = new StringBuffer();
-            buf.append( "Deferred queue contains: " );
-            
-            for ( ObjectClass extra : deferred )
-            {
-                buf.append( extra.getName() );
-                buf.append( '[' );
-                buf.append( extra.getOid() );
-                buf.append( "]" );
-                buf.append( "\n" );
-            }
-        }
-        
-        int lastCount = deferred.size();
-        
-        while ( ! deferred.isEmpty() )
-        {
-            LOG.debug( "Deferred queue size = {}", deferred.size() );
-            ObjectClass oc = deferred.removeFirst();
-            Exception lastException = null;
-            
-            try
-            {
-                targetRegistries.getObjectClassRegistry().register( oc );
-            }
-            catch ( Exception ne )
-            {
-                deferred.addLast( oc );
-                lastException = ne;
-            }
-            
-            // if we shrank the deferred list we're doing good and can continue
-            if ( deferred.size() < lastCount )
-            {
-                lastCount = deferred.size();
-            }
-            else
-            {
-                StringBuffer buf = new StringBuffer();
-                buf.append( "A cycle must exist somewhere within the objectClasses of the " );
-                buf.append( schema.getSchemaName() );
-                buf.append( " schema.  We cannot seem to register the following objectClasses:\n" );
-                
-                for ( ObjectClass extra : deferred )
-                {
-                    buf.append( extra.getName() );
-                    buf.append( '[' );
-                    buf.append( extra.getOid() );
-                    buf.append( "]" );
-                    buf.append( "\n" );
-                }
-                
-                NamingException ne = new NamingException( buf.toString() );
-                ne.setRootCause( lastException );
-            }
-        }
+        return attributeTypeList;
     }
 
 
-    private void loadAttributeTypes( Schema schema, Registries targetRegistries ) throws Exception
+    /**
+     * {@inheritDoc}
+     */
+    public List<Entry> loadComparators( Schema schema ) throws Exception
     {
-        LinkedList<AttributeType> deferred = new LinkedList<AttributeType>();
-        
-        LdapDN dn = staticAttributeTypeDNs.get( schema.getSchemaName() );
-        
-        if ( dn == null )
-        {
-            dn = new LdapDN( 
-                SchemaConstants.ATTRIBUTES_TYPE_PATH,
-                "cn=" + schema.getSchemaName(),
-                SchemaConstants.OU_SCHEMA );
-            
-            dn.normalize( atRegistry.getNormalizerMapping() );
-            staticAttributeTypeDNs.put( schema.getSchemaName(), dn );
-        }
+        LdapDN dn = updateDNs( staticComparatorsDNs, SchemaConstants.COMPARATORS_PATH, schema );
         
+        List<Entry> comparatorList = new ArrayList<Entry>();
+
         if ( ! partition.hasEntry( new EntryOperationContext( null, dn ) ) )
         {
-            return;
+            return comparatorList;
         }
         
-        LOG.debug( "{} schema: loading attributeTypes", schema.getSchemaName() );
+        LOG.debug( "{} schema: loading comparators", schema.getSchemaName() );
         
         EntryFilteringCursor list = partition.list( new ListOperationContext( null, dn ) );
         
         while ( list.next() )
         {
-            ServerEntry result = list.get();
-            LdapDN resultDN = result.getDn();
-            resultDN.normalize( atRegistry.getNormalizerMapping() );
-            ServerEntry attrs = lookupPartition( resultDN );
-            AttributeType at = factory.getAttributeType( attrs, targetRegistries, schema.getSchemaName() );
+            ClonedServerEntry entry = list.get();
             
-            try
-            {
-                targetRegistries.getAttributeTypeRegistry().register( at );
-            }
-            catch ( Exception ne )
-            {
-                deferred.add( at );
-            }
+            comparatorList.add( entry );
         }
+        
+        return comparatorList;
+    }
 
-        LOG.debug( "Deferred queue size = {}", deferred.size() );
+
+    /**
+     * {@inheritDoc}
+     */
+    public List<Entry> loadDitContentRules( Schema schema ) throws Exception
+    {
+        LOG.error( "DitContentRule loading NYI" );
         
-        if ( LOG.isDebugEnabled() )
-        {
-            StringBuffer buf = new StringBuffer();
-            buf.append( "Deferred queue contains: " );
-            
-            for ( AttributeType extra : deferred )
-            {
-                buf.append( extra.getName() );
-                buf.append( '[' );
-                buf.append( extra.getOid() );
-                buf.append( "]" );
-                buf.append( "\n" );
-            }
-        }
-        
-        int lastCount = deferred.size();
-        
-        while ( ! deferred.isEmpty() )
-        {
-            LOG.debug( "Deferred queue size = {}", deferred.size() );
-            AttributeType at = deferred.removeFirst();
-            Exception lastException = null;
-            
-            try
-            {
-                targetRegistries.getAttributeTypeRegistry().register( at );
-            }
-            catch ( Exception ne )
-            {
-                deferred.addLast( at );
-                lastException = ne;
-            }
-            
-            // if we shrank the deferred list we're doing good and can continue
-            if ( deferred.size() < lastCount )
-            {
-                lastCount = deferred.size();
-            }
-            else
-            {
-                StringBuffer buf = new StringBuffer();
-                buf.append( "A cycle must exist somewhere within the attributeTypes of the " );
-                buf.append( schema.getSchemaName() );
-                buf.append( " schema.  We cannot seem to register the following attributeTypes:\n" );
-                
-                for ( AttributeType extra : deferred )
-                {
-                    buf.append( extra.getName() );
-                    buf.append( '[' );
-                    buf.append( extra.getOid() );
-                    buf.append( "]" );
-                    buf.append( "\n" );
-                }
-                
-                NamingException ne = new NamingException( buf.toString() );
-                ne.setRootCause( lastException );
-            }
-        }
+        return null;
     }
 
 
-    private void loadMatchingRules( Schema schema, Registries targetRegistries ) throws Exception
+    /**
+     * {@inheritDoc}
+     */
+    public List<Entry> loadDitStructureRules( Schema schema ) throws Exception
     {
-        LdapDN dn = staticMatchingRulesDNs.get( schema.getSchemaName() );
+        LOG.error( "DitStructureRule loading NYI" );
         
-        if ( dn == null )
-        {
-            dn = new LdapDN( 
-                SchemaConstants.MATCHING_RULES_PATH,
-                "cn=" + schema.getSchemaName(),
-                SchemaConstants.OU_SCHEMA );
-            
-            dn.normalize( atRegistry.getNormalizerMapping() );
-            staticMatchingRulesDNs.put( schema.getSchemaName(), dn );
-        }
+        return null;
+    }
+
+
+    /**
+     * {@inheritDoc}
+     */
+    public List<Entry> loadMatchingRules( Schema schema ) throws Exception
+    {
+        LdapDN dn = updateDNs( staticMatchingRulesDNs, SchemaConstants.MATCHING_RULES_PATH, schema );
         
+        List<Entry> matchingRuleList = new ArrayList<Entry>();
+
         if ( ! partition.hasEntry( new EntryOperationContext( null, dn ) ) )
         {
-            return;
+            return matchingRuleList;
         }
         
         LOG.debug( "{} schema: loading matchingRules", schema.getSchemaName() );
@@ -676,129 +425,150 @@
         
         while ( list.next() )
         {
-            ServerEntry result = list.get();
-            LdapDN resultDN = result.getDn();
-            resultDN.normalize( atRegistry.getNormalizerMapping() );
-            ServerEntry attrs = lookupPartition( resultDN );
-            MatchingRule mrule = factory.getMatchingRule( attrs, targetRegistries, schema.getSchemaName() );
-            targetRegistries.getMatchingRuleRegistry().register( mrule );
+            ServerEntry entry = list.get();
 
+            matchingRuleList.add( entry );
         }
+        
+        return matchingRuleList;
+    }
+    
+
+    /**
+     * {@inheritDoc}
+     */
+    public List<Entry> loadMatchingRuleUses( Schema schema ) throws Exception
+    {
+        LOG.error( "MatchingRuleUse loading NYI" );
+        
+        return null;
     }
 
 
-    private void loadSyntaxes( Schema schema, Registries targetRegistries ) throws Exception
+    /**
+     * {@inheritDoc}
+     */
+    public List<Entry> loadNameForms( Schema schema ) throws Exception
     {
-        LdapDN dn = staticSyntaxesDNs.get( schema.getSchemaName() );
+        LOG.error( "NameForm loading NYI" );
         
-        if ( dn == null )
-        {
-            dn = new LdapDN( 
-                SchemaConstants.SYNTAXES_PATH,
-                "cn=" + schema.getSchemaName(),
-                SchemaConstants.OU_SCHEMA );
-            
-            dn.normalize( atRegistry.getNormalizerMapping() );
-            staticSyntaxesDNs.put( schema.getSchemaName(), dn );
-        }
+        return null;
+    }
+
+
+    /**
+     * {@inheritDoc}
+     */
+    public List<Entry> loadNormalizers( Schema schema ) throws Exception
+    {
+        LdapDN dn = updateDNs( staticNormalizersDNs, SchemaConstants.NORMALIZERS_PATH, schema );
         
+        List<Entry> normalizerList = new ArrayList<Entry>();
+
         if ( ! partition.hasEntry( new EntryOperationContext( null, dn ) ) )
         {
-            return;
+            return normalizerList;
         }
         
-        LOG.debug( "{} schema: loading syntaxes", schema.getSchemaName() );
+        LOG.debug( "{} schema: loading normalizers", schema.getSchemaName() );
         
         EntryFilteringCursor list = partition.list( new ListOperationContext( null, dn ) );
         
         while ( list.next() )
         {
-            ServerEntry result = list.get();
-            LdapDN resultDN = result.getDn();
-            resultDN.normalize( atRegistry.getNormalizerMapping() );
-            ServerEntry attrs = lookupPartition( resultDN );
-            LdapSyntax syntax = factory.getSyntax( attrs, targetRegistries, schema.getSchemaName() );
-            targetRegistries.getLdapSyntaxRegistry().register( syntax );
+            ClonedServerEntry entry = list.get();
+            
+            normalizerList.add( entry );
         }
+        
+        return normalizerList;
     }
 
 
-    private void loadSyntaxCheckers( Schema schema, Registries targetRegistries ) throws Exception
+    /**
+     * {@inheritDoc}
+     */
+    public List<Entry> loadObjectClasses( Schema schema ) throws Exception
     {
-        LdapDN dn = staticSyntaxCheckersDNs.get( schema.getSchemaName() );
-        
-        if ( dn == null )
-        {
-            dn = new LdapDN( 
-                SchemaConstants.SYNTAX_CHECKERS_PATH,
-                "cn=" + schema.getSchemaName(),
-                SchemaConstants.OU_SCHEMA );
-            
-            dn.normalize( atRegistry.getNormalizerMapping() );
-            staticSyntaxCheckersDNs.put( schema.getSchemaName(), dn );
-        }
+        LdapDN dn = updateDNs( staticObjectClassesDNs, SchemaConstants.OBJECT_CLASSES_PATH, schema );
         
+        List<Entry> objectClassList = new ArrayList<Entry>();
+
         if ( ! partition.hasEntry( new EntryOperationContext( null, dn ) ) )
         {
-            return;
+            return objectClassList;
         }
         
-        LOG.debug( "{} schema: loading syntaxCsheckers", schema.getSchemaName() );
+        LOG.debug( "{} schema: loading objectClasses", schema.getSchemaName() );
         
         EntryFilteringCursor list = partition.list( new ListOperationContext( null, dn ) );
         
         while ( list.next() )
         {
-            ServerEntry result = list.get();
-            LdapDN resultDN = result.getDn();
-            resultDN.normalize( atRegistry.getNormalizerMapping() );
-            ServerEntry attrs = lookupPartition( resultDN );
-            SyntaxChecker sc = factory.getSyntaxChecker( attrs, targetRegistries, schema.getSchemaName() );
-            SyntaxCheckerDescription syntaxCheckerDescription = 
-                getSyntaxCheckerDescription( schema.getSchemaName(), attrs );
-            // @TODO elecharny what should I do with the description
+            ClonedServerEntry entry = list.get();
             
-            targetRegistries.getSyntaxCheckerRegistry().register( sc );
+            objectClassList.add( entry );
         }
+        
+        return objectClassList;
     }
 
 
-    private void loadNormalizers( Schema schema, Registries targetRegistries ) throws Exception
+    /**
+     * {@inheritDoc}
+     */
+    public List<Entry> loadSyntaxes( Schema schema ) throws Exception
     {
-        LdapDN dn = staticNormalizersDNs.get( schema.getSchemaName() );
+        LdapDN dn = updateDNs( staticSyntaxesDNs, SchemaConstants.SYNTAXES_PATH, schema );
         
-        if ( dn == null )
+        List<Entry> syntaxList = new ArrayList<Entry>();
+
+        if ( ! partition.hasEntry( new EntryOperationContext( null, dn ) ) )
         {
-            dn = new LdapDN( 
-                SchemaConstants.NORMALIZERS_PATH,
-                "cn=" + schema.getSchemaName(),
-                SchemaConstants.OU_SCHEMA );
+            return syntaxList;
+        }
+        
+        LOG.debug( "{} schema: loading syntaxes", schema.getSchemaName() );
+        
+        EntryFilteringCursor list = partition.list( new ListOperationContext( null, dn ) );
+        
+        while ( list.next() )
+        {
+            ServerEntry entry = list.get();
             
-            dn.normalize( atRegistry.getNormalizerMapping() );
-            staticNormalizersDNs.put( schema.getSchemaName(), dn );
+            syntaxList.add( entry );
         }
         
+        return syntaxList;
+    }
+
+
+    /**
+     * {@inheritDoc}
+     */
+    public List<Entry> loadSyntaxCheckers( Schema schema ) throws Exception
+    {
+        LdapDN dn = updateDNs( staticSyntaxCheckersDNs, SchemaConstants.SYNTAX_CHECKERS_PATH, schema );
+        
+        List<Entry> syntaxCheckerList = new ArrayList<Entry>();
+
         if ( ! partition.hasEntry( new EntryOperationContext( null, dn ) ) )
         {
-            return;
+            return syntaxCheckerList;
         }
         
-        LOG.debug( "{} schema: loading normalizers", schema.getSchemaName() );
+        LOG.debug( "{} schema: loading syntaxCsheckers", schema.getSchemaName() );
         
         EntryFilteringCursor list = partition.list( new ListOperationContext( null, dn ) );
         
         while ( list.next() )
         {
-            ClonedServerEntry result = list.get();
-            LdapDN resultDN = result.getDn();
-            resultDN.normalize( atRegistry.getNormalizerMapping() );
-            ServerEntry attrs = lookupPartition( resultDN );
-            Normalizer normalizer = factory.getNormalizer( attrs, targetRegistries,schema.getSchemaName() );
-            NormalizerDescription normalizerDescription = getNormalizerDescription( schema.getSchemaName(), attrs );
-            // @TODO elecharny what should I do with the description
+            ServerEntry entry = list.get();
             
-            targetRegistries.getNormalizerRegistry().register( normalizer );
+            syntaxCheckerList.add( entry );
         }
+        
+        return syntaxCheckerList;
     }
 
 
@@ -847,46 +617,6 @@
     }
     
     
-    @SuppressWarnings("unchecked")
-    private void loadComparators( Schema schema, Registries targetRegistries ) throws Exception
-    {
-        LdapDN dn = staticComparatorsDNs.get( schema.getSchemaName() );
-        
-        if ( dn == null )
-        {
-            dn = new LdapDN( 
-                SchemaConstants.COMPARATORS_PATH,
-                "cn=" + schema.getSchemaName(),
-                SchemaConstants.OU_SCHEMA );
-            
-            dn.normalize( atRegistry.getNormalizerMapping() );
-            staticComparatorsDNs.put( schema.getSchemaName(), dn );
-        }
-
-        if ( ! partition.hasEntry( new EntryOperationContext( null, dn ) ) )
-        {
-            return;
-        }
-        
-        LOG.debug( "{} schema: loading comparators", schema.getSchemaName() );
-        
-        EntryFilteringCursor list = partition.list( new ListOperationContext( null, dn ) );
-        
-        while ( list.next() )
-        {
-            ClonedServerEntry result = list.get();
-            LdapDN resultDN = result.getDn();
-            resultDN.normalize( atRegistry.getNormalizerMapping() );
-            ClonedServerEntry entry = lookupPartition( resultDN );
-            
-            LdapComparatorDescription comparatorDescription = getLdapComparatorDescription( schema.getSchemaName(), entry );
-            // @TODO elecharny what should I do with description
-            
-            registerComparator( targetRegistries, entry, schema );
-        }
-    }
-
-
     private LdapComparatorDescription getLdapComparatorDescription( String schemaName, ServerEntry entry ) throws Exception
     {
     	LdapComparatorDescription description = new LdapComparatorDescription( getOid( entry ) );
@@ -941,34 +671,6 @@
         return description;
     }
 
-    
-    /**
-     * {@inheritDoc}
-     */
-    public List<Throwable> loadWithDependencies( Schema schema, Registries registries, boolean check ) throws Exception
-    {
-        // Relax the controls at first
-        List<Throwable> errors = new ArrayList<Throwable>();
-        boolean wasRelaxed = registries.isRelaxed();
-        registries.setRelaxed( true );
-
-        HashMap<String,Schema> notLoaded = new HashMap<String,Schema>();
-        notLoaded.put( schema.getSchemaName(), schema );                        
-        Properties props = new Properties();
-        loadDepsFirst( schema, new Stack<String>(), notLoaded, schema, registries );
-        
-        // At the end, check the registries if required
-        if ( check )
-        {
-            errors = registries.checkRefInteg();
-        }
-        
-        // Restore the Registries isRelaxed flag
-        registries.setRelaxed( wasRelaxed );
-        
-        return errors;
-    }
-
 
     /**
      * @return the dao

Modified: directory/apacheds/branches/apacheds-schema/core-api/src/main/java/org/apache/directory/server/core/schema/SchemaPartition.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-schema/core-api/src/main/java/org/apache/directory/server/core/schema/SchemaPartition.java?rev=831373&r1=831372&r2=831373&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-schema/core-api/src/main/java/org/apache/directory/server/core/schema/SchemaPartition.java (original)
+++ directory/apacheds/branches/apacheds-schema/core-api/src/main/java/org/apache/directory/server/core/schema/SchemaPartition.java Fri Oct 30 16:20:42 2009
@@ -55,10 +55,10 @@
 import org.apache.directory.shared.ldap.entry.ModificationOperation;
 import org.apache.directory.shared.ldap.message.control.CascadeControl;
 import org.apache.directory.shared.ldap.name.LdapDN;
+import org.apache.directory.shared.ldap.schema.SchemaManager;
 import org.apache.directory.shared.ldap.schema.SchemaUtils;
 import org.apache.directory.shared.ldap.schema.comparators.SerializableComparator;
 import org.apache.directory.shared.ldap.schema.registries.Registries;
-import org.apache.directory.shared.ldap.schema.registries.SchemaLoader;
 import org.apache.directory.shared.ldap.util.DateUtils;
 import org.apache.directory.shared.ldap.util.ExceptionUtils;
 import org.slf4j.Logger;
@@ -117,8 +117,8 @@
     /** the wrapped Partition */
     private Partition wrapped = new NullPartition();
     
-    /** schema loader: swapped out after {@link SchemaPartition#initialize()} */
-    private SchemaLoader loader;
+    /** schema manager */
+    private SchemaManager schemaManager;
     
     /** registry synchronizer adaptor */
     private RegistrySynchronizerAdaptor synchronizer;
@@ -242,8 +242,7 @@
             wrapped.initialize();
             
             PartitionSchemaLoader partitionLoader = new PartitionSchemaLoader( wrapped, registries );
-            synchronizer = new RegistrySynchronizerAdaptor( registries, partitionLoader );
-            loader = partitionLoader;
+            synchronizer = new RegistrySynchronizerAdaptor( schemaManager );
             
             if ( wrapped instanceof NullPartition )
             {
@@ -261,11 +260,11 @@
         // Load the registries. We use a permissive registries at this point
         // so even if the schema are not ordered or the SchemaObjects are not
         // ordered in the schemas, we can still load them all.
-        List<Throwable> errors = loader.loadAllEnabled( registries, true );
-        
-        if ( errors.size() != 0 )
+        boolean loaded = schemaManager.loadAllEnabled();
+
+        if ( !loaded )
         {
-            throw new RuntimeException( "Schema load failed : " + ExceptionUtils.printErrors( errors ) );
+            throw new RuntimeException( "Schema load failed : " + ExceptionUtils.printErrors( schemaManager.getErrors() ) );
         }
         
         schemaModificationDN = new LdapDN( ServerDNConstants.SCHEMA_MODIFICATIONS_DN );
@@ -518,20 +517,20 @@
 
 
     /**
-     * @param loader the loader to set
+     * @param schemaManager the SchemaManager to set
      */
-    public void setLoader( SchemaLoader loader )
+    public void setSchemaManager( SchemaManager schemaManager )
     {
-        this.loader = loader;
+        this.schemaManager = schemaManager;
     }
     
     
     /**
-     * @return The schemapartition loader
+     * @return The schemaManager
      */
-    public SchemaLoader getLoader()
+    public SchemaManager getSchemaManager()
     {
-        return loader;
+        return schemaManager;
     }
     
     

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=831373&r1=831372&r2=831373&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 Fri Oct 30 16:20:42 2009
@@ -99,19 +99,7 @@
         // Don't inject the modified element if the schema is disabled
         if ( isSchemaEnabled( schemaName ) )
         {
-            atRegistry.register( at );
-            
-            // Update the referenced objects
-            // The Syntax,
-            registries.addReference( at, at.getSyntax() );
-
-            // The Superior if any
-            registries.addReference( at, at.getSuperior() );
-
-            // The MatchingRules
-            registries.addReference( at, at.getEquality() );
-            registries.addReference( at, at.getOrdering() );
-            registries.addReference( at, at.getSubstring() );
+            registries.register( at );
 
             LOG.debug( "Added {} into the enabled schema {}", dn.getUpName(), schemaName );
         }

Modified: directory/apacheds/branches/apacheds-schema/core-api/src/main/java/org/apache/directory/server/core/schema/registries/synchronizers/RegistrySynchronizerAdaptor.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/RegistrySynchronizerAdaptor.java?rev=831373&r1=831372&r2=831373&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-schema/core-api/src/main/java/org/apache/directory/server/core/schema/registries/synchronizers/RegistrySynchronizerAdaptor.java (original)
+++ directory/apacheds/branches/apacheds-schema/core-api/src/main/java/org/apache/directory/server/core/schema/registries/synchronizers/RegistrySynchronizerAdaptor.java Fri Oct 30 16:20:42 2009
@@ -33,7 +33,6 @@
 import org.apache.directory.server.core.interceptor.context.MoveAndRenameOperationContext;
 import org.apache.directory.server.core.interceptor.context.MoveOperationContext;
 import org.apache.directory.server.core.interceptor.context.RenameOperationContext;
-import org.apache.directory.server.core.schema.PartitionSchemaLoader;
 import org.apache.directory.shared.ldap.constants.MetaSchemaConstants;
 import org.apache.directory.shared.ldap.constants.SchemaConstants;
 import org.apache.directory.shared.ldap.entry.EntryAttribute;
@@ -44,6 +43,7 @@
 import org.apache.directory.shared.ldap.message.ResultCodeEnum;
 import org.apache.directory.shared.ldap.schema.AttributeType;
 import org.apache.directory.shared.ldap.schema.ObjectClass;
+import org.apache.directory.shared.ldap.schema.SchemaManager;
 import org.apache.directory.shared.ldap.schema.registries.ObjectClassRegistry;
 import org.apache.directory.shared.ldap.schema.registries.Registries;
 import org.slf4j.Logger;
@@ -118,10 +118,10 @@
     }
 
 
-    public RegistrySynchronizerAdaptor( Registries registries, PartitionSchemaLoader loader ) throws Exception
+    public RegistrySynchronizerAdaptor( SchemaManager schemaManager ) throws Exception
     {
-        this.registries = registries;
-        this.schemaSynchronizer = new SchemaSynchronizer( registries, loader );
+        this.registries = schemaManager.getRegistries();
+        this.schemaSynchronizer = new SchemaSynchronizer( schemaManager );
         this.objectClassAT = this.registries.getAttributeTypeRegistry()
             .lookup( SchemaConstants.OBJECT_CLASS_AT );
         

Modified: directory/apacheds/branches/apacheds-schema/core-api/src/main/java/org/apache/directory/server/core/schema/registries/synchronizers/SchemaSynchronizer.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/SchemaSynchronizer.java?rev=831373&r1=831372&r2=831373&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-schema/core-api/src/main/java/org/apache/directory/server/core/schema/registries/synchronizers/SchemaSynchronizer.java (original)
+++ directory/apacheds/branches/apacheds-schema/core-api/src/main/java/org/apache/directory/server/core/schema/registries/synchronizers/SchemaSynchronizer.java Fri Oct 30 16:20:42 2009
@@ -23,8 +23,6 @@
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
-import java.util.Map;
-import java.util.Set;
 
 import javax.naming.NamingException;
 
@@ -37,19 +35,18 @@
 import org.apache.directory.server.core.entry.ServerModification;
 import org.apache.directory.server.core.interceptor.context.ModifyOperationContext;
 import org.apache.directory.server.core.partition.ByPassConstants;
-import org.apache.directory.server.core.schema.PartitionSchemaLoader;
 import org.apache.directory.shared.ldap.constants.MetaSchemaConstants;
 import org.apache.directory.shared.ldap.constants.SchemaConstants;
 import org.apache.directory.shared.ldap.entry.EntryAttribute;
 import org.apache.directory.shared.ldap.entry.Modification;
 import org.apache.directory.shared.ldap.entry.ModificationOperation;
-import org.apache.directory.shared.ldap.entry.Value;
 import org.apache.directory.shared.ldap.exception.LdapInvalidNameException;
 import org.apache.directory.shared.ldap.exception.LdapOperationNotSupportedException;
 import org.apache.directory.shared.ldap.message.ResultCodeEnum;
 import org.apache.directory.shared.ldap.name.LdapDN;
 import org.apache.directory.shared.ldap.name.Rdn;
 import org.apache.directory.shared.ldap.schema.AttributeType;
+import org.apache.directory.shared.ldap.schema.SchemaManager;
 import org.apache.directory.shared.ldap.schema.SchemaObject;
 import org.apache.directory.shared.ldap.schema.SchemaObjectType;
 import org.apache.directory.shared.ldap.schema.SchemaWrapper;
@@ -64,6 +61,9 @@
 
 
 /**
+ * This class handle modifications made on a global schema. Modifications made
+ * on SchemaObjects are handled by the specific shcemaObject synchronizers.
+ * 
  * @TODO poorly implemented - revisit the SchemaChangeHandler for this puppy
  * and do it right.
  *
@@ -76,7 +76,9 @@
     private static final Logger LOG = LoggerFactory.getLogger( SchemaSynchronizer.class );
 
     private final SchemaEntityFactory factory;
-    private final PartitionSchemaLoader loader;
+    //private final PartitionSchemaLoader loader;
+    
+    private final SchemaManager schemaManager;
     
     /** The global registries */
     private final Registries registries;
@@ -106,11 +108,11 @@
      * @param loader The schema loader
      * @throws Exception If something went wrong
      */
-    public SchemaSynchronizer( Registries registries, PartitionSchemaLoader loader ) throws Exception
+    public SchemaSynchronizer( SchemaManager schemaManager ) throws Exception
     {
-        this.registries = registries;
+        this.registries = schemaManager.getRegistries();
+        this.schemaManager = schemaManager;
         disabledAT = registries.getAttributeTypeRegistry().lookup( MetaSchemaConstants.M_DISABLED_AT );
-        this.loader = loader;
         factory = new SchemaEntityFactory();
         cnAT = registries.getAttributeTypeRegistry().lookup( SchemaConstants.CN_AT );
         dependenciesAT = registries.getAttributeTypeRegistry()
@@ -124,7 +126,11 @@
 
 
     /**
-     * {@inheritDoc}
+     * The only modification done on a schema element is on the m-disabled 
+     * attributeType
+     * 
+     * Depending in the existence of this attribute in the previous entry, we will
+     * have to update the entry or not.
      */
     public boolean modify( ModifyOperationContext opContext, ServerEntry targetEntry, boolean cascade ) throws Exception
     {
@@ -136,6 +142,7 @@
         EntryAttribute disabledInEntry = entry.get( disabledAT );
         Modification disabledModification = ServerEntryUtils.getModificationItem( mods, disabledAT );
         
+        // The attribute might be present, but that does not mean we will change it.
         if ( disabledModification != null )
         {
             // We are trying to modify the m-disabled attribute. 
@@ -144,26 +151,6 @@
             
             hasModification = modifyDisable( opContext, modification, attribute, disabledInEntry );
         }
-
-        // check if the new schema is enabled or disabled
-        boolean isEnabled = false;
-        EntryAttribute disabled = targetEntry.get( disabledAT );
-        
-        if ( disabled == null )
-        {
-            isEnabled = true;
-        }
-        else if ( ! disabled.contains( "TRUE" ) )
-        {
-            isEnabled = true;
-        }
-
-        ServerAttribute dependencies = ServerEntryUtils.getAttribute( mods, dependenciesAT );
-        
-        if ( dependencies != null )
-        {
-            checkForDependencies( isEnabled, targetEntry );
-        }
         
         return hasModification;
     }
@@ -258,7 +245,7 @@
 
         // Before allowing a schema object to be deleted we must check
         // to make sure it's not depended upon by another schema
-        Set<String> dependents = loader.listDependentSchemaNames( schemaName );
+        /*Set<String> dependents = schemaManager.listDependentSchemaNames( schemaName );
         
         if ( ! dependents.isEmpty() )
         {
@@ -271,7 +258,8 @@
         
         // no need to check if schema is enabled or disabled here
         // if not in the loaded set there will be no negative effect
-        registries.schemaUnloaded( loader.getSchema( schemaName ) );
+        registries.schemaUnloaded( schemaManager.getSchema( schemaName ) );
+        */
     }
 
 
@@ -316,8 +304,9 @@
          */
         
         // step [1]
+        /*
         String schemaName = getSchemaName( entry.getDn() );
-        Set<String> dependents = loader.listDependentSchemaNames( schemaName );
+        Set<String> dependents = schemaManager.listDependentSchemaNames( schemaName );
         if ( ! dependents.isEmpty() )
         {
             throw new LdapOperationNotSupportedException( 
@@ -360,6 +349,7 @@
         renameSchema( registries.getNameFormRegistry(), schemaName, newSchemaName );
         renameSchema( registries.getObjectClassRegistry(), schemaName, newSchemaName );
         renameSchema( registries.getLdapSyntaxRegistry(), schemaName, newSchemaName );
+        */
     }
     
 
@@ -560,6 +550,19 @@
 
     private boolean disableSchema( CoreSession session, String schemaName ) throws Exception
     {
+        Schema schema = registries.getLoadedSchema( schemaName );
+
+        if ( schema == null )
+        {
+            // This is not possible. We can't enable a schema which is not loaded.
+            String msg = "Unwilling to enable a not loaded schema: " + schemaName;
+            LOG.error( msg );
+            throw new LdapOperationNotSupportedException( msg, ResultCodeEnum.UNWILLING_TO_PERFORM );
+        }
+        
+        return schemaManager.disable( schemaName );
+
+        /*
         // First check that the schema is not already disabled
         Map<String, Schema> schemas = registries.getLoadedSchemas();
         
@@ -571,7 +574,7 @@
             return SCHEMA_UNCHANGED;
         }
         
-        Set<String> dependents = loader.listEnabledDependentSchemaNames( schemaName );
+        Set<String> dependents = schemaManager.listEnabledDependentSchemaNames( schemaName );
         
         if ( ! dependents.isEmpty() )
         {
@@ -596,6 +599,7 @@
         }
         
         return SCHEMA_MODIFIED;
+        */
     }
     
     
@@ -624,10 +628,11 @@
 
     /**
      * Enabling a schema consist on switching all of its schema element to enable.
+     * We have to do it on a temporary registries.
      */
     private boolean enableSchema( String schemaName ) throws Exception
     {
-        Schema schema = loader.getSchema( schemaName );
+        Schema schema = registries.getLoadedSchema( schemaName );
 
         if ( schema == null )
         {
@@ -637,25 +642,7 @@
             throw new LdapOperationNotSupportedException( msg, ResultCodeEnum.UNWILLING_TO_PERFORM );
         }
         
-        for ( SchemaWrapper schemaWrapper : schema.getContent() )
-        {
-            SchemaObject schemaObject = schemaWrapper.get();
-            
-            if ( schemaObject.isDisabled() )
-            {
-                //schemaObject.enable();
-        }
-            // TODO log warning: schemaName + " was already loaded"
-            schema.enable();
-            registries.schemaLoaded( schema );
-            return SCHEMA_UNCHANGED;
-        }
-
-        loader.loadWithDependencies( schema, registries, true );
-        schema = loader.getSchema( schemaName );
-        schema.enable();
-        
-        return SCHEMA_MODIFIED;
+        return schemaManager.enable( schemaName );
     }
 
 
@@ -670,6 +657,7 @@
      */
     private void checkForDependencies( boolean isEnabled, ServerEntry entry ) throws Exception
     {
+        /*
         EntryAttribute dependencies = entry.get( this.dependenciesAT );
 
         if ( dependencies == null )
@@ -696,7 +684,7 @@
         }
         else
         {
-            Set<String> allSchemas = loader.getSchemaNames();
+            Set<String> allSchemas = schemaManager.getSchemaNames();
             
             for ( Value<?> value:dependencies )
             {
@@ -710,6 +698,7 @@
                 }
             }
         }
+        */
     }
 
     

Modified: directory/apacheds/branches/apacheds-schema/core-entry/src/test/java/org/apache/directory/server/core/entry/DefaultServerAttributeTest.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-schema/core-entry/src/test/java/org/apache/directory/server/core/entry/DefaultServerAttributeTest.java?rev=831373&r1=831372&r2=831373&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-schema/core-entry/src/test/java/org/apache/directory/server/core/entry/DefaultServerAttributeTest.java (original)
+++ directory/apacheds/branches/apacheds-schema/core-entry/src/test/java/org/apache/directory/server/core/entry/DefaultServerAttributeTest.java Fri Oct 30 16:20:42 2009
@@ -51,10 +51,11 @@
 import org.apache.directory.shared.ldap.entry.client.ClientStringValue;
 import org.apache.directory.shared.ldap.entry.client.DefaultClientAttribute;
 import org.apache.directory.shared.ldap.schema.AttributeType;
+import org.apache.directory.shared.ldap.schema.SchemaManager;
 import org.apache.directory.shared.ldap.schema.ldif.extractor.SchemaLdifExtractor;
-import org.apache.directory.shared.ldap.schema.registries.Registries;
 import org.apache.directory.shared.ldap.util.ExceptionUtils;
 import org.apache.directory.shared.ldap.util.StringTools;
+import org.apache.directory.shared.schema.DefaultSchemaManager;
 import org.apache.directory.shared.schema.loader.ldif.LdifSchemaLoader;
 import org.junit.BeforeClass;
 import org.junit.Test;
@@ -69,7 +70,6 @@
 public class DefaultServerAttributeTest
 {
     private static LdifSchemaLoader loader;
-    private static Registries registries;
     
     private static AttributeType atCN;
     private static AttributeType atSN;
@@ -120,9 +120,11 @@
         SchemaLdifExtractor extractor = new SchemaLdifExtractor( new File( workingDirectory ) );
         extractor.extractOrCopy();
     	loader = new LdifSchemaLoader( schemaRepository );
-        registries = new Registries();
+        SchemaManager sm = new DefaultSchemaManager( loader );
 
-        List<Throwable> errors = loader.loadAllEnabled( registries, true );
+        sm.loadAllEnabled();
+        
+        List<Throwable> errors = sm.getErrors();
         
         if ( errors.size() != 0 )
         {
@@ -131,10 +133,10 @@
                 ExceptionUtils.printErrors( errors ) );
         }
         
-        atCN = registries.getAttributeTypeRegistry().lookup( "cn" );
-        atC = registries.getAttributeTypeRegistry().lookup( "c" );
-        atSN = registries.getAttributeTypeRegistry().lookup( "sn" );
-        atPwd = registries.getAttributeTypeRegistry().lookup( "userpassword" );
+        atCN = sm.getRegistries().getAttributeTypeRegistry().lookup( "cn" );
+        atC = sm.getRegistries().getAttributeTypeRegistry().lookup( "c" );
+        atSN = sm.getRegistries().getAttributeTypeRegistry().lookup( "sn" );
+        atPwd = sm.getRegistries().getAttributeTypeRegistry().lookup( "userpassword" );
     }
 
     /**

Modified: directory/apacheds/branches/apacheds-schema/core-entry/src/test/java/org/apache/directory/server/core/entry/DefaultServerEntryTest.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-schema/core-entry/src/test/java/org/apache/directory/server/core/entry/DefaultServerEntryTest.java?rev=831373&r1=831372&r2=831373&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-schema/core-entry/src/test/java/org/apache/directory/server/core/entry/DefaultServerEntryTest.java (original)
+++ directory/apacheds/branches/apacheds-schema/core-entry/src/test/java/org/apache/directory/server/core/entry/DefaultServerEntryTest.java Fri Oct 30 16:20:42 2009
@@ -52,11 +52,13 @@
 import org.apache.directory.shared.ldap.entry.client.DefaultClientEntry;
 import org.apache.directory.shared.ldap.name.LdapDN;
 import org.apache.directory.shared.ldap.schema.AttributeType;
+import org.apache.directory.shared.ldap.schema.SchemaManager;
 import org.apache.directory.shared.ldap.schema.ldif.extractor.SchemaLdifExtractor;
 import org.apache.directory.shared.ldap.schema.registries.AttributeTypeRegistry;
 import org.apache.directory.shared.ldap.schema.registries.Registries;
 import org.apache.directory.shared.ldap.util.ExceptionUtils;
 import org.apache.directory.shared.ldap.util.StringTools;
+import org.apache.directory.shared.schema.DefaultSchemaManager;
 import org.apache.directory.shared.schema.loader.ldif.LdifSchemaLoader;
 import org.junit.BeforeClass;
 import org.junit.Test;
@@ -75,8 +77,8 @@
     private static final byte[] BYTES3 = new byte[]{ 'c' };
 
     private static LdifSchemaLoader loader;
-    private static Registries registries;
     private static AttributeTypeRegistry atr;
+    private static Registries registries;
     
     private static AttributeType atObjectClass;
     private static AttributeType atCN;
@@ -109,18 +111,21 @@
         SchemaLdifExtractor extractor = new SchemaLdifExtractor( new File( workingDirectory ) );
         extractor.extractOrCopy();
         loader = new LdifSchemaLoader( schemaRepository );
-        registries = new Registries();
 
-        List<Throwable> errors = loader.loadAllEnabled( registries, true );
+        SchemaManager sm = new DefaultSchemaManager( loader );
+        sm.loadAllEnabled();
+        
+        List<Throwable> errors = sm.getErrors();
         
         if ( errors.size() != 0 )
         {
             fail( "Schema load failed : " + ExceptionUtils.printErrors( errors ) );
         }
 
+        registries = sm.getRegistries(); 
         atr = registries.getAttributeTypeRegistry();
 
-        atObjectClass = registries.getAttributeTypeRegistry().lookup( "objectClass" );
+        atObjectClass = sm.getRegistries().getAttributeTypeRegistry().lookup( "objectClass" );
         atCN = registries.getAttributeTypeRegistry().lookup( "cn" );
         atC = registries.getAttributeTypeRegistry().lookup( "c" );
         atL = registries.getAttributeTypeRegistry().lookup( "l" );

Modified: directory/apacheds/branches/apacheds-schema/core-entry/src/test/java/org/apache/directory/server/core/entry/ServerEntrySerializerTest.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-schema/core-entry/src/test/java/org/apache/directory/server/core/entry/ServerEntrySerializerTest.java?rev=831373&r1=831372&r2=831373&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-schema/core-entry/src/test/java/org/apache/directory/server/core/entry/ServerEntrySerializerTest.java (original)
+++ directory/apacheds/branches/apacheds-schema/core-entry/src/test/java/org/apache/directory/server/core/entry/ServerEntrySerializerTest.java Fri Oct 30 16:20:42 2009
@@ -31,12 +31,14 @@
 import org.apache.directory.shared.ldap.constants.SchemaConstants;
 import org.apache.directory.shared.ldap.entry.EntryAttribute;
 import org.apache.directory.shared.ldap.name.LdapDN;
+import org.apache.directory.shared.ldap.schema.SchemaManager;
 import org.apache.directory.shared.ldap.schema.ldif.extractor.SchemaLdifExtractor;
 import org.apache.directory.shared.ldap.schema.normalizers.DeepTrimToLowerNormalizer;
 import org.apache.directory.shared.ldap.schema.normalizers.OidNormalizer;
 import org.apache.directory.shared.ldap.schema.registries.Registries;
 import org.apache.directory.shared.ldap.util.ExceptionUtils;
 import org.apache.directory.shared.ldap.util.StringTools;
+import org.apache.directory.shared.schema.DefaultSchemaManager;
 import org.apache.directory.shared.schema.loader.ldif.LdifSchemaLoader;
 import org.junit.BeforeClass;
 import org.junit.Test;
@@ -76,13 +78,18 @@
         loader = new LdifSchemaLoader( schemaRepository );
         registries = new Registries();
         
-        List<Throwable> errors = loader.loadAllEnabled( registries, true );
+        SchemaManager sm = new DefaultSchemaManager( loader );
+        sm.loadAllEnabled();
+        
+        List<Throwable> errors = sm.getErrors();
         
         if ( errors.size() != 0 )
         {
             fail( "Schema load failed : " + ExceptionUtils.printErrors( errors ) );
         }
         
+        registries = sm.getRegistries();
+        
         oids = new HashMap<String, OidNormalizer>();
 
         // DC normalizer

Modified: directory/apacheds/branches/apacheds-schema/core-entry/src/test/java/org/apache/directory/server/core/entry/ServerModificationTest.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-schema/core-entry/src/test/java/org/apache/directory/server/core/entry/ServerModificationTest.java?rev=831373&r1=831372&r2=831373&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-schema/core-entry/src/test/java/org/apache/directory/server/core/entry/ServerModificationTest.java (original)
+++ directory/apacheds/branches/apacheds-schema/core-entry/src/test/java/org/apache/directory/server/core/entry/ServerModificationTest.java Fri Oct 30 16:20:42 2009
@@ -43,9 +43,11 @@
 import org.apache.directory.shared.ldap.entry.client.ClientModification;
 import org.apache.directory.shared.ldap.entry.client.DefaultClientAttribute;
 import org.apache.directory.shared.ldap.schema.AttributeType;
+import org.apache.directory.shared.ldap.schema.SchemaManager;
 import org.apache.directory.shared.ldap.schema.ldif.extractor.SchemaLdifExtractor;
 import org.apache.directory.shared.ldap.schema.registries.Registries;
 import org.apache.directory.shared.ldap.util.ExceptionUtils;
+import org.apache.directory.shared.schema.DefaultSchemaManager;
 import org.apache.directory.shared.schema.loader.ldif.LdifSchemaLoader;
 import org.junit.BeforeClass;
 import org.junit.Test;
@@ -164,13 +166,17 @@
         loader = new LdifSchemaLoader( schemaRepository );
         registries = new Registries();
         
-        List<Throwable> errors = loader.loadAllEnabled( registries, true );
+        SchemaManager sm = new DefaultSchemaManager( loader );
+        sm.loadAllEnabled();
+        
+        List<Throwable> errors = sm.getErrors();
         
         if ( errors.size() != 0 )
         {
             fail( "Schema load failed : " + ExceptionUtils.printErrors( errors ) );
         }
 
+        registries = sm.getRegistries();
         atCN = registries.getAttributeTypeRegistry().lookup( "cn" );
         atC = registries.getAttributeTypeRegistry().lookup( "c" );
     }

Modified: directory/apacheds/branches/apacheds-schema/core-integ/src/main/java/org/apache/directory/server/core/integ/DirectoryServiceFactory.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-schema/core-integ/src/main/java/org/apache/directory/server/core/integ/DirectoryServiceFactory.java?rev=831373&r1=831372&r2=831373&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-schema/core-integ/src/main/java/org/apache/directory/server/core/integ/DirectoryServiceFactory.java (original)
+++ directory/apacheds/branches/apacheds-schema/core-integ/src/main/java/org/apache/directory/server/core/integ/DirectoryServiceFactory.java Fri Oct 30 16:20:42 2009
@@ -37,9 +37,10 @@
 import org.apache.directory.server.core.schema.SchemaPartition;
 import org.apache.directory.server.xdbm.Index;
 import org.apache.directory.shared.ldap.constants.SchemaConstants;
+import org.apache.directory.shared.ldap.schema.SchemaManager;
 import org.apache.directory.shared.ldap.schema.ldif.extractor.SchemaLdifExtractor;
-import org.apache.directory.shared.ldap.schema.registries.Registries;
 import org.apache.directory.shared.ldap.util.ExceptionUtils;
+import org.apache.directory.shared.schema.DefaultSchemaManager;
 import org.apache.directory.shared.schema.loader.ldif.JarLdifSchemaLoader;
 
 
@@ -74,7 +75,6 @@
             DirectoryService service = new DefaultDirectoryService();
             service.setWorkingDirectory( new File( workingDirectory ) );
             SchemaPartition schemaPartition = service.getSchemaService().getSchemaPartition();
-            Registries registries = service.getRegistries();
             
             // Init the LdifPartition
             LdifPartition ldifPartition = new LdifPartition();
@@ -86,11 +86,15 @@
             SchemaLdifExtractor extractor = new SchemaLdifExtractor( new File( workingDirectory ) );
             
             schemaPartition.setWrappedPartition( ldifPartition );
-            schemaPartition.setRegistries( registries );
             
             JarLdifSchemaLoader loader = new JarLdifSchemaLoader();
+            SchemaManager sm = new DefaultSchemaManager( loader );
 
-            List<Throwable> errors = loader.loadAllEnabled( registries, true );
+            boolean loaded = sm.loadAllEnabled();
+            schemaPartition.setRegistries( sm.getRegistries() );
+            schemaPartition.setSchemaManager( sm );
+            
+            List<Throwable> errors = sm.getErrors();
             
             if ( errors.size() != 0 )
             {
@@ -110,7 +114,7 @@
             systemPartition.setId( "system" );
             ((JdbmPartition)systemPartition).setCacheSize( 500 );
             systemPartition.setSuffix( ServerDNConstants.SYSTEM_DN );
-            systemPartition.setRegistries( registries );
+            systemPartition.setRegistries( sm.getRegistries() );
             ((JdbmPartition)systemPartition).setPartitionDir( new File( workingDirectory, "system" ) );
     
             // Add objectClass attribute for the system partition

Modified: directory/apacheds/branches/apacheds-schema/core-integ/src/test/java/org/apache/directory/server/core/authz/AutzIntegUtils.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-schema/core-integ/src/test/java/org/apache/directory/server/core/authz/AutzIntegUtils.java?rev=831373&r1=831372&r2=831373&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-schema/core-integ/src/test/java/org/apache/directory/server/core/authz/AutzIntegUtils.java (original)
+++ directory/apacheds/branches/apacheds-schema/core-integ/src/test/java/org/apache/directory/server/core/authz/AutzIntegUtils.java Fri Oct 30 16:20:42 2009
@@ -53,9 +53,10 @@
 import org.apache.directory.server.xdbm.Index;
 import org.apache.directory.shared.ldap.constants.SchemaConstants;
 import org.apache.directory.shared.ldap.name.LdapDN;
+import org.apache.directory.shared.ldap.schema.SchemaManager;
 import org.apache.directory.shared.ldap.schema.ldif.extractor.SchemaLdifExtractor;
-import org.apache.directory.shared.ldap.schema.registries.Registries;
 import org.apache.directory.shared.ldap.util.ExceptionUtils;
+import org.apache.directory.shared.schema.DefaultSchemaManager;
 import org.apache.directory.shared.schema.loader.ldif.JarLdifSchemaLoader;
 
 
@@ -87,7 +88,6 @@
             DirectoryService service = new DefaultDirectoryService();
             service.setWorkingDirectory( new File( workingDirectory ) );
             SchemaPartition schemaPartition = service.getSchemaService().getSchemaPartition();
-            Registries registries = service.getRegistries();
             
             // Init the LdifPartition
             LdifPartition ldifPartition = new LdifPartition();
@@ -99,17 +99,23 @@
             SchemaLdifExtractor extractor = new SchemaLdifExtractor( new File( workingDirectory ) );
             
             schemaPartition.setWrappedPartition( ldifPartition );
-            schemaPartition.setRegistries( registries );
             
             JarLdifSchemaLoader loader = new JarLdifSchemaLoader();
+            
+            SchemaManager sm = new DefaultSchemaManager( loader );
 
-            List<Throwable> errors = loader.loadAllEnabled( registries, true );
+            sm.loadAllEnabled();
+            
+            List<Throwable> errors = sm.getErrors();
             
             if ( errors.size() != 0 )
             {
                 fail( "Schema load failed : " + ExceptionUtils.printErrors( errors ) );
             }
 
+            schemaPartition.setRegistries( sm.getRegistries() );
+            schemaPartition.setSchemaManager( sm );
+
             extractor.extractOrCopy();
 
             service.getChangeLog().setEnabled( true );
@@ -123,7 +129,7 @@
             systemPartition.setId( "system" );
             ((JdbmPartition)systemPartition).setCacheSize( 500 );
             systemPartition.setSuffix( ServerDNConstants.SYSTEM_DN );
-            systemPartition.setRegistries( registries );
+            systemPartition.setRegistries( sm.getRegistries() );
             ((JdbmPartition)systemPartition).setPartitionDir( new File( workingDirectory, "system" ) );
     
             // Add objectClass attribute for the system partition
@@ -156,7 +162,6 @@
             DirectoryService service = new DefaultDirectoryService();
             service.setWorkingDirectory( new File( workingDirectory ) );
             SchemaPartition schemaPartition = service.getSchemaService().getSchemaPartition();
-            Registries registries = service.getRegistries();
             
             // Init the LdifPartition
             LdifPartition ldifPartition = new LdifPartition();
@@ -168,16 +173,20 @@
             SchemaLdifExtractor extractor = new SchemaLdifExtractor( new File( workingDirectory ) );
             
             schemaPartition.setWrappedPartition( ldifPartition );
-            schemaPartition.setRegistries( registries );
             
             JarLdifSchemaLoader loader = new JarLdifSchemaLoader();
+            SchemaManager sm = new DefaultSchemaManager( loader );
 
-            List<Throwable> errors = loader.loadAllEnabled( registries, true );
+            sm.loadAllEnabled();
+            
+            List<Throwable> errors = sm.getErrors();
             
             if ( errors.size() != 0 )
             {
                 fail( "Schema load failed : " + ExceptionUtils.printErrors( errors ) );
             }
+            
+            schemaPartition.setRegistries( sm.getRegistries() );
 
             extractor.extractOrCopy();
 
@@ -192,7 +201,7 @@
             systemPartition.setId( "system" );
             ((JdbmPartition)systemPartition).setCacheSize( 500 );
             systemPartition.setSuffix( ServerDNConstants.SYSTEM_DN );
-            systemPartition.setRegistries( registries );
+            systemPartition.setRegistries( sm.getRegistries() );
             ((JdbmPartition)systemPartition).setPartitionDir( new File( workingDirectory, "system" ) );
     
             // Add objectClass attribute for the system partition

Modified: directory/apacheds/branches/apacheds-schema/core-integ/src/test/java/org/apache/directory/server/core/jndi/MixedCaseITest.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-schema/core-integ/src/test/java/org/apache/directory/server/core/jndi/MixedCaseITest.java?rev=831373&r1=831372&r2=831373&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-schema/core-integ/src/test/java/org/apache/directory/server/core/jndi/MixedCaseITest.java (original)
+++ directory/apacheds/branches/apacheds-schema/core-integ/src/test/java/org/apache/directory/server/core/jndi/MixedCaseITest.java Fri Oct 30 16:20:42 2009
@@ -36,7 +36,6 @@
 import javax.naming.directory.Attribute;
 import javax.naming.directory.Attributes;
 import javax.naming.directory.BasicAttribute;
-import javax.naming.directory.BasicAttributes;
 import javax.naming.directory.DirContext;
 import javax.naming.directory.ModificationItem;
 import javax.naming.directory.SearchControls;
@@ -61,9 +60,11 @@
 import org.apache.directory.shared.ldap.constants.SchemaConstants;
 import org.apache.directory.shared.ldap.exception.LdapNameNotFoundException;
 import org.apache.directory.shared.ldap.name.LdapDN;
+import org.apache.directory.shared.ldap.schema.SchemaManager;
 import org.apache.directory.shared.ldap.schema.ldif.extractor.SchemaLdifExtractor;
-import org.apache.directory.shared.ldap.schema.registries.Registries;
+import org.apache.directory.shared.ldap.util.AttributeUtils;
 import org.apache.directory.shared.ldap.util.ExceptionUtils;
+import org.apache.directory.shared.schema.DefaultSchemaManager;
 import org.apache.directory.shared.schema.loader.ldif.JarLdifSchemaLoader;
 import org.junit.Before;
 import org.junit.Test;
@@ -102,7 +103,6 @@
             DirectoryService service = new DefaultDirectoryService();
             service.setWorkingDirectory( new File( workingDirectory ) );
             SchemaPartition schemaPartition = service.getSchemaService().getSchemaPartition();
-            Registries registries = service.getRegistries();
             
             // Init the LdifPartition
             LdifPartition ldifPartition = new LdifPartition();
@@ -113,17 +113,23 @@
             SchemaLdifExtractor extractor = new SchemaLdifExtractor( new File( workingDirectory ) );
             
             schemaPartition.setWrappedPartition( ldifPartition );
-            schemaPartition.setRegistries( registries );
             
             JarLdifSchemaLoader loader = new JarLdifSchemaLoader();
 
-            List<Throwable> errors = loader.loadAllEnabled( registries, true );
+            SchemaManager sm = new DefaultSchemaManager( loader );
+            
+            sm.loadAllEnabled();
+            
+            List<Throwable> errors = sm.getErrors();
             
             if ( errors.size() != 0 )
             {
                 fail( "Schema load failed : " + ExceptionUtils.printErrors( errors ) );
             }
-
+            
+            schemaPartition.setRegistries( sm.getRegistries() );
+            schemaPartition.setSchemaManager( sm );
+            
             extractor.extractOrCopy();
 
             service.getChangeLog().setEnabled( true );
@@ -137,7 +143,7 @@
             systemPartition.setId( "system" );
             ((JdbmPartition)systemPartition).setCacheSize( 500 );
             systemPartition.setSuffix( ServerDNConstants.SYSTEM_DN );
-            systemPartition.setRegistries( registries );
+            systemPartition.setRegistries( sm.getRegistries() );
             ((JdbmPartition)systemPartition).setPartitionDir( new File( workingDirectory, "system" ) );
     
             // Add objectClass attribute for the system partition
@@ -201,12 +207,11 @@
 
         String dn = "ou=Test";
 
-        Attributes attributes = new BasicAttributes( true );
-        Attribute attribute = new BasicAttribute( "objectClass" );
-        attribute.add( "top" );
-        attribute.add( "organizationalUnit" );
-        attributes.put( attribute );
-        attributes.put( "ou", "Test" );
+        Attributes attributes = AttributeUtils.createAttributes( 
+            "objectClass: top",
+            "objectClass: organizationalUnit",
+            "ou: Test"
+            );
 
         DirContext ctx = ctxRoot.createSubcontext( dn, attributes );
         assertNotNull( ctx );
@@ -231,13 +236,12 @@
         String dn = "ou=Test";
         String description = "New Value";
 
-        Attributes attributes = new BasicAttributes( true );
-        Attribute attribute = new BasicAttribute( "objectClass" );
-        attribute.add( "top" );
-        attribute.add( "organizationalUnit" );
-        attributes.put( attribute );
-        attributes.put( "ou", "Test" );
-        attributes.put( "description", "Old Value" );
+        Attributes attributes = AttributeUtils.createAttributes( 
+            "objectClass: top",
+            "objectClass: organizationalUnit",
+            "ou: Test",
+            "description: Old Value"
+            );
 
         DirContext ctx = ctxRoot.createSubcontext( dn, attributes );
         assertNotNull( ctx );
@@ -257,7 +261,7 @@
         assertEquals( "The entry returned should be the entry added earlier.", dn + "," + SUFFIX_DN, sr.getName() );
 
         attributes = sr.getAttributes();
-        attribute = attributes.get( "description" );
+        Attribute attribute = attributes.get( "description" );
 
         assertEquals( "The description attribute should contain the new value.", description, attribute.get() );
         assertFalse( "Search should return no more entries.", ne.hasMore() );
@@ -271,12 +275,11 @@
 
         String dn = "ou=Test";
 
-        Attributes attributes = new BasicAttributes( true );
-        Attribute attribute = new BasicAttribute( "objectClass" );
-        attribute.add( "top" );
-        attribute.add( "organizationalUnit" );
-        attributes.put( attribute );
-        attributes.put( "ou", "Test" );
+        Attributes attributes = AttributeUtils.createAttributes( 
+            "objectClass: top",
+            "objectClass: organizationalUnit",
+            "ou: Test"
+            );
 
         DirContext ctx = ctxRoot.createSubcontext( dn, attributes );
         assertNotNull( ctx );

Modified: directory/apacheds/branches/apacheds-schema/core-integ/src/test/java/org/apache/directory/server/core/operations/search/SearchWithIndicesITest.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-schema/core-integ/src/test/java/org/apache/directory/server/core/operations/search/SearchWithIndicesITest.java?rev=831373&r1=831372&r2=831373&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-schema/core-integ/src/test/java/org/apache/directory/server/core/operations/search/SearchWithIndicesITest.java (original)
+++ directory/apacheds/branches/apacheds-schema/core-integ/src/test/java/org/apache/directory/server/core/operations/search/SearchWithIndicesITest.java Fri Oct 30 16:20:42 2009
@@ -60,9 +60,10 @@
 import org.apache.directory.server.core.schema.SchemaPartition;
 import org.apache.directory.server.xdbm.Index;
 import org.apache.directory.shared.ldap.constants.SchemaConstants;
+import org.apache.directory.shared.ldap.schema.SchemaManager;
 import org.apache.directory.shared.ldap.schema.ldif.extractor.SchemaLdifExtractor;
-import org.apache.directory.shared.ldap.schema.registries.Registries;
 import org.apache.directory.shared.ldap.util.ExceptionUtils;
+import org.apache.directory.shared.schema.DefaultSchemaManager;
 import org.apache.directory.shared.schema.loader.ldif.JarLdifSchemaLoader;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -146,7 +147,6 @@
             DirectoryService service = new DefaultDirectoryService();
             service.setWorkingDirectory( new File( workingDirectory ) );
             SchemaPartition schemaPartition = service.getSchemaService().getSchemaPartition();
-            Registries registries = service.getRegistries();
             
             // Init the LdifPartition
             LdifPartition ldifPartition = new LdifPartition();
@@ -158,17 +158,21 @@
             SchemaLdifExtractor extractor = new SchemaLdifExtractor( new File( workingDirectory ) );
             
             schemaPartition.setWrappedPartition( ldifPartition );
-            schemaPartition.setRegistries( registries );
             
             JarLdifSchemaLoader loader = new JarLdifSchemaLoader();
 
-            List<Throwable> errors = loader.loadAllEnabled( registries, true );
+            SchemaManager sm = new DefaultSchemaManager( loader );
+            
+            sm.loadAllEnabled();
+            List<Throwable> errors = sm.getErrors();
             
             if ( errors.size() != 0 )
             {
                 fail( "Schema load failed : " + ExceptionUtils.printErrors( errors ) );
             }
 
+            schemaPartition.setRegistries( sm.getRegistries() );
+            
             extractor.extractOrCopy();
 
             service.getChangeLog().setEnabled( true );
@@ -182,7 +186,7 @@
             systemPartition.setId( "system" );
             ((JdbmPartition)systemPartition).setCacheSize( 500 );
             systemPartition.setSuffix( ServerDNConstants.SYSTEM_DN );
-            systemPartition.setRegistries( registries );
+            systemPartition.setRegistries( sm.getRegistries() );
             ((JdbmPartition)systemPartition).setPartitionDir( new File( workingDirectory, "system" ) );
     
             // Add objectClass attribute for the system partition