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 00:54:49 UTC

svn commit: r834716 - in /directory: apacheds/branches/apacheds-schema/core-api/src/main/java/org/apache/directory/server/core/schema/registries/synchronizers/ apacheds/branches/apacheds-schema/core-integ/src/test/java/org/apache/directory/server/core/...

Author: elecharny
Date: Tue Nov 10 23:54:48 2009
New Revision: 834716

URL: http://svn.apache.org/viewvc?rev=834716&view=rev
Log:
Fixed the addition of AT in disabled schema. All additions of AT in enabled, disabled and not loaded schema are now working.

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/RegistrySynchronizerAdaptor.java
    directory/apacheds/branches/apacheds-schema/core-integ/src/test/java/org/apache/directory/server/core/schema/MetaAttributeTypeHandlerIT.java
    directory/apacheds/branches/apacheds-schema/core-integ/src/test/java/org/apache/directory/server/core/schema/SubschemaSubentryIT.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/EntityFactory.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=834716&r1=834715&r2=834716&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 Tue Nov 10 23:54:48 2009
@@ -86,45 +86,39 @@
         // Relax the cloned registries
         clonedRegistries.setRelaxed();
         
-        AttributeType at = factory.getAttributeType( entry, clonedRegistries, schemaName );
+        AttributeType at = factory.getAttributeType( entry, clonedRegistries, schemaManager, schemaName );
         
-        if ( at == null )
+        // if the AT is null, that means the schema is disabled
+        if ( at != null )
         {
-            // We couldn't create the AT : this is an error
-            return;
-        }
-        
-        List<Throwable> errors = clonedRegistries.checkRefInteg();
-        
-        if ( errors.size() == 0 )
-        {
-            clonedRegistries.setStrict();
-            schemaManager.setRegistries( clonedRegistries  );
-        }
-        else
-        {
-            // We have some error : reject the addition and get out
-            return;
-        }
-        
-        // At this point, the constructed AttributeType has not been checked against the 
-        // existing Registries. It may be broken (missing SUP, or such), it will be checked
-        // there, if the schema and the AttributeType are both enabled.
-        Schema schema = schemaManager.getLoadedSchema( schemaName );
-        
-        if ( schema.isEnabled() && at.isEnabled() )
-        {
-            at.applyRegistries( schemaManager.getRegistries() );
-        }
+            List<Throwable> errors = clonedRegistries.checkRefInteg();
+            
+            if ( errors.size() == 0 )
+            {
+                clonedRegistries.setStrict();
+                schemaManager.setRegistries( clonedRegistries  );
+            }
+            else
+            {
+                // We have some error : reject the addition and get out
+                return;
+            }
         
-        // Associates this AttributeType with the schema
-        addToSchema( at, schemaName );
+            // At this point, the constructed AttributeType has not been checked against the 
+            // existing Registries. It may be broken (missing SUP, or such), it will be checked
+            // there, if the schema and the AttributeType are both enabled.
+            Schema schema = schemaManager.getLoadedSchema( schemaName );
+            
+            if ( schema.isEnabled() && at.isEnabled() )
+            {
+                at.applyRegistries( schemaManager.getRegistries() );
+            }
         
-        // Don't inject the modified element if the schema is disabled
-        if ( isSchemaEnabled( schemaName ) )
-        {
+            // Associates this AttributeType with the schema
+            addToSchema( at, schemaName );
+            
             schemaManager.register( at );
-
+    
             LOG.debug( "Added {} into the enabled schema {}", dn.getUpName(), schemaName );
         }
         else
@@ -145,7 +139,7 @@
         ServerEntry entry = opContext.getEntry();
         String schemaName = getSchemaName( name );
         String oid = getOid( entry );
-        AttributeType at = factory.getAttributeType( targetEntry, schemaManager.getRegistries(), schemaName );
+        AttributeType at = factory.getAttributeType( targetEntry, schemaManager.getRegistries(), schemaManager, schemaName );
         
         if ( isSchemaEnabled( schemaName ) )
         {
@@ -177,7 +171,7 @@
         
         // Get the AttributeType from the given entry ( it has been grabbed from the server earlier)
         String schemaName = getSchemaName( entry.getDn() );
-        AttributeType attributeType = factory.getAttributeType( entry, schemaManager.getRegistries(), schemaName );
+        AttributeType attributeType = factory.getAttributeType( entry, schemaManager.getRegistries(), schemaManager, schemaName );
         
         // Applies the Registries to this AttributeType 
         Schema schema = schemaManager.getLoadedSchema( schemaName );
@@ -245,7 +239,7 @@
     public void rename( ServerEntry entry, Rdn newRdn, boolean cascade ) throws Exception
     {
         String schemaName = getSchemaName( entry.getDn() );
-        AttributeType oldAt = factory.getAttributeType( entry, schemaManager.getRegistries(), schemaName );
+        AttributeType oldAt = factory.getAttributeType( entry, schemaManager.getRegistries(), schemaManager, schemaName );
 
         // Inject the new OID
         ServerEntry targetEntry = ( ServerEntry ) entry.clone();
@@ -259,7 +253,7 @@
         newDn.add( newRdn );
         targetEntry.setDn( newDn );
         
-        AttributeType at = factory.getAttributeType( targetEntry, schemaManager.getRegistries(), schemaName );
+        AttributeType at = factory.getAttributeType( targetEntry, schemaManager.getRegistries(), schemaManager, schemaName );
 
         if ( isSchemaEnabled( schemaName ) )
         {
@@ -289,12 +283,12 @@
         checkParent( newParentName, schemaManager, SchemaConstants.ATTRIBUTE_TYPE );
         String oldSchemaName = getSchemaName( oriChildName );
         String newSchemaName = getSchemaName( newParentName );
-        AttributeType oldAt = factory.getAttributeType( entry, schemaManager.getRegistries(), oldSchemaName );
+        AttributeType oldAt = factory.getAttributeType( entry, schemaManager.getRegistries(), schemaManager, oldSchemaName );
         ServerEntry targetEntry = ( ServerEntry ) entry.clone();
         String newOid = ( String ) newRn.getValue();
         targetEntry.put( MetaSchemaConstants.M_OID_AT, newOid );
         checkOidIsUnique( newOid );
-        AttributeType newAt = factory.getAttributeType( targetEntry, schemaManager.getRegistries(), newSchemaName );
+        AttributeType newAt = factory.getAttributeType( targetEntry, schemaManager.getRegistries(), schemaManager, newSchemaName );
 
         
         if ( !isSchemaLoaded( oldSchemaName ) )
@@ -340,8 +334,8 @@
         checkParent( newParentName, schemaManager, SchemaConstants.ATTRIBUTE_TYPE );
         String oldSchemaName = getSchemaName( oriChildName );
         String newSchemaName = getSchemaName( newParentName );
-        AttributeType oldAt = factory.getAttributeType( entry, schemaManager.getRegistries(), oldSchemaName );
-        AttributeType newAt = factory.getAttributeType( entry, schemaManager.getRegistries(), newSchemaName );
+        AttributeType oldAt = factory.getAttributeType( entry, schemaManager.getRegistries(), schemaManager, oldSchemaName );
+        AttributeType newAt = factory.getAttributeType( entry, schemaManager.getRegistries(), schemaManager, newSchemaName );
         
         if ( !isSchemaLoaded( oldSchemaName ) )
         {

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=834716&r1=834715&r2=834716&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 Tue Nov 10 23:54:48 2009
@@ -185,6 +185,7 @@
             
             String ouValue = ( String ) opContext.getDn().getRdn().getValue();
             ouValue = ouValue.trim().toLowerCase();
+            
             if ( ! VALID_OU_VALUES.contains( ouValue ) )
             {
                 throw new LdapInvalidNameException( 

Modified: directory/apacheds/branches/apacheds-schema/core-integ/src/test/java/org/apache/directory/server/core/schema/MetaAttributeTypeHandlerIT.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-schema/core-integ/src/test/java/org/apache/directory/server/core/schema/MetaAttributeTypeHandlerIT.java?rev=834716&r1=834715&r2=834716&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-schema/core-integ/src/test/java/org/apache/directory/server/core/schema/MetaAttributeTypeHandlerIT.java (original)
+++ directory/apacheds/branches/apacheds-schema/core-integ/src/test/java/org/apache/directory/server/core/schema/MetaAttributeTypeHandlerIT.java Tue Nov 10 23:54:48 2009
@@ -26,6 +26,7 @@
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
+import javax.naming.NameNotFoundException;
 import javax.naming.NamingException;
 import javax.naming.directory.Attribute;
 import javax.naming.directory.Attributes;
@@ -139,7 +140,42 @@
     
     
     @Test
-    public void testAddAttributeTypeToDisabledSchema() throws Exception
+    public void testAddAttributeTypeToUnLoadedSchema() throws Exception
+    {
+        Attributes attrs = AttributeUtils.createAttributes( 
+            "objectClass: top",
+            "objectClass: metaTop",
+            "objectClass: metaAttributeType",
+            "m-oid:" + OID,
+            "m-syntax:" + SchemaConstants.INTEGER_SYNTAX,
+            "m-description:" + DESCRIPTION0,
+            "m-equality: caseIgnoreMatch",
+            "m-singleValue: FALSE",
+            "m-usage: directoryOperation" );
+
+        LdapDN dn = getAttributeTypeContainer( "notloaded" );
+        dn.add( "m-oid=" + OID );
+        
+        try
+        {
+            getSchemaContext( service ).createSubcontext( dn, attrs );
+            fail( "Should not be there" );
+        }
+        catch( NameNotFoundException nnfe )
+        {
+            // Expected result.
+        }
+        
+        assertFalse( "adding new attributeType to disabled schema should not register it into the registries", 
+            service.getSchemaManager().getAttributeTypeRegistry().contains( OID ) );
+        
+        // The added entry must not be present on disk
+        assertFalse( isOnDisk( dn ) );
+    }
+    
+    
+    @Test
+    public void testAddAttributeTypeToLoadedDisabledSchema() throws Exception
     {
         Attributes attrs = AttributeUtils.createAttributes( 
             "objectClass: top",
@@ -154,13 +190,16 @@
 
         LdapDN dn = getAttributeTypeContainer( "nis" );
         dn.add( "m-oid=" + OID );
+        
         getSchemaContext( service ).createSubcontext( dn, attrs );
         
         assertFalse( "adding new attributeType to disabled schema should not register it into the registries", 
             service.getSchemaManager().getAttributeTypeRegistry().contains( OID ) );
+        
+        // The added entry must be present on disk
         assertTrue( isOnDisk( dn ) );
     }
-    
+
     
     @Test
     public void testDeleteAttributeTypeFromEnabledSchema() throws Exception
@@ -188,6 +227,7 @@
     }
     
     
+    /*
     @Test
     public void testDeleteAttributeTypeFromDisabledSchema() throws Exception
     {
@@ -201,9 +241,17 @@
             service.getSchemaManager().getAttributeTypeRegistry().contains( OID ) );
 
         // Check on disk that the added SchemaObject exist
-        assertTrue( isOnDisk( dn ) );
+        assertFalse( isOnDisk( dn ) );
         
-        getSchemaContext( service ).destroySubcontext( dn );
+        try
+        {
+            getSchemaContext( service ).destroySubcontext( dn );
+            fail( "Should not be there" );
+        }
+        catch( NameNotFoundException nnfe )
+        {
+            // Expected result.
+        }
 
         // Check in Registries
         assertFalse( "attributeType should be removed from the registry after being deleted", 
@@ -212,6 +260,7 @@
         // Check on disk that the deleted SchemaObject does not exist anymore
         assertFalse( isOnDisk( dn ) );
     }
+    */
 
 
     @Test
@@ -565,6 +614,7 @@
     }
 
 
+    /*
     @Test
     @Ignore
     public void testMoveMatchingRuleToEnabledSchema() throws Exception
@@ -589,4 +639,5 @@
         assertEquals( "attributeType should be in apachemeta schema after move", 
             service.getSchemaManager().getAttributeTypeRegistry().getSchemaName( OID ), "apachemeta" );
     }
+    */
 }

Modified: directory/apacheds/branches/apacheds-schema/core-integ/src/test/java/org/apache/directory/server/core/schema/SubschemaSubentryIT.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-schema/core-integ/src/test/java/org/apache/directory/server/core/schema/SubschemaSubentryIT.java?rev=834716&r1=834715&r2=834716&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-schema/core-integ/src/test/java/org/apache/directory/server/core/schema/SubschemaSubentryIT.java (original)
+++ directory/apacheds/branches/apacheds-schema/core-integ/src/test/java/org/apache/directory/server/core/schema/SubschemaSubentryIT.java Tue Nov 10 23:54:48 2009
@@ -1429,7 +1429,7 @@
         
         ServerEntry serverEntry = ServerEntryUtils.toServerEntry( attrs, LdapDN.EMPTY_LDAPDN, service.getSchemaManager() );
         
-        AttributeType at = factory.getAttributeType( serverEntry, service.getSchemaManager().getRegistries(), "nis" );
+        AttributeType at = factory.getAttributeType( serverEntry, service.getSchemaManager().getRegistries(), service.getSchemaManager(), "nis" );
         assertEquals( "1.3.6.1.4.1.18060.0.4.0.2.10000", at.getOid() );
         assertEquals( "name", at.getSuperior().getName() );
         assertEquals( "bogus description", at.getDescription() );
@@ -1492,7 +1492,7 @@
         
         ServerEntry serverEntry = ServerEntryUtils.toServerEntry( attrs, LdapDN.EMPTY_LDAPDN, service.getSchemaManager() );
 
-        AttributeType at = factory.getAttributeType( serverEntry, service.getSchemaManager().getRegistries(), "nis" );
+        AttributeType at = factory.getAttributeType( serverEntry, service.getSchemaManager().getRegistries(), service.getSchemaManager(), "nis" );
         assertEquals( "1.3.6.1.4.1.18060.0.4.0.2.10000", at.getOid() );
         assertEquals( "name", at.getSuperior().getName() );
         assertEquals( "bogus description", at.getDescription() );

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=834716&r1=834715&r2=834716&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 Tue Nov 10 23:54:48 2009
@@ -299,7 +299,10 @@
     }
     
 
-    public boolean isDisabledAccepter()
+    /**
+     * {@inheritDoc}
+     */
+    public boolean isDisabledAccepted()
     {
         // TODO Auto-generated method stub
         return false;
@@ -542,7 +545,7 @@
     private AttributeType registerAttributeType( Registries registries, Entry entry, Schema schema ) 
         throws Exception
     {
-        AttributeType attributeType = factory.getAttributeType( entry, registries, schema.getSchemaName() );
+        AttributeType attributeType = factory.getAttributeType( entry, registries, this, schema.getSchemaName() );
         
         if ( registries.isRelaxed() )
         {
@@ -1329,7 +1332,14 @@
      */
     public Schema getLoadedSchema( String schemaName )
     {
-        return registries.getLoadedSchema( schemaName );
+        try
+        {
+            return loader.getSchema( schemaName );
+        }
+        catch ( Exception e )
+        {
+            return null;
+        }
     }
 
 
@@ -1338,7 +1348,15 @@
      */
     public boolean isSchemaLoaded( String schemaName )
     {
-        return registries.isSchemaLoaded( schemaName );
+        try
+        {
+            Schema schema = loader.getSchema( schemaName );
+            return schema != null;
+        }
+        catch ( Exception e )
+        {
+            return false;
+        }
     }
     
 

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=834716&r1=834715&r2=834716&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 Tue Nov 10 23:54:48 2009
@@ -36,6 +36,7 @@
 import org.apache.directory.shared.ldap.entry.Value;
 import org.apache.directory.shared.ldap.entry.client.DefaultClientAttribute;
 import org.apache.directory.shared.ldap.exception.LdapInvalidAttributeValueException;
+import org.apache.directory.shared.ldap.exception.LdapOperationNotSupportedException;
 import org.apache.directory.shared.ldap.message.ResultCodeEnum;
 import org.apache.directory.shared.ldap.schema.AttributeType;
 import org.apache.directory.shared.ldap.schema.EntityFactory;
@@ -310,6 +311,15 @@
         // Get the schema
         Schema schema = getSchema( schemaName, targetRegistries );
 
+        if ( schema == null )
+        {
+            // The schema is not loaded. We can't create the requested SyntaxChecker
+            String msg = "Cannot add the SyntaxChecker " + entry.getDn().getUpName() + ", as the associated schema (" +
+                schemaName + " is not loaded";
+            LOG.warn( msg );
+            throw new LdapOperationNotSupportedException( msg, ResultCodeEnum.UNWILLING_TO_PERFORM );
+        }
+        
         // The FQCN
         String className = getFqcn( entry, SchemaConstants.SYNTAX_CHECKER );
         
@@ -347,6 +357,15 @@
         // Get the schema
         Schema schema = getSchema( schemaName, targetRegistries );
 
+        if ( schema == null )
+        {
+            // The schema is not loaded. We can't create the requested SyntaxChecker
+            String msg = "Cannot add the SyntaxChecker " + syntaxCheckerDescription.getName() + ", as the associated schema (" +
+                schemaName + " is not loaded";
+            LOG.warn( msg );
+            throw new LdapOperationNotSupportedException( msg, ResultCodeEnum.UNWILLING_TO_PERFORM );
+        }
+        
         // The FQCN
         String fqcn = getFqcn( syntaxCheckerDescription, SchemaConstants.SYNTAX_CHECKER );
         
@@ -424,6 +443,15 @@
         // Get the schema
         Schema schema = getSchema( schemaName, targetRegistries );
 
+        if ( schema == null )
+        {
+            // The schema is not loaded. We can't create the requested Comparator
+            String msg = "Cannot add the Comparator " + comparatorDescription.getName() + ", as the associated schema (" +
+                schemaName + " is not loaded";
+            LOG.warn( msg );
+            throw new LdapOperationNotSupportedException( msg, ResultCodeEnum.UNWILLING_TO_PERFORM );
+        }
+
         // The FQCN
         String fqcn = getFqcn( comparatorDescription, SchemaConstants.COMPARATOR );
         
@@ -461,6 +489,15 @@
         // Get the schema
         Schema schema = getSchema( schemaName, targetRegistries );
 
+        if ( schema == null )
+        {
+            // 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 (" +
+                schemaName + " is not loaded";
+            LOG.warn( msg );
+            throw new LdapOperationNotSupportedException( msg, ResultCodeEnum.UNWILLING_TO_PERFORM );
+        }
+        
         // The FQCN
         String fqcn = getFqcn( entry, SchemaConstants.COMPARATOR );
         
@@ -537,6 +574,15 @@
         // Get the schema
         Schema schema = getSchema( schemaName, targetRegistries );
 
+        if ( schema == null )
+        {
+            // The schema is not loaded. We can't create the requested Normalizer
+            String msg = "Cannot add the Normalizer " + normalizerDescription.getName() + ", as the associated schema (" +
+                schemaName + " is not loaded";
+            LOG.warn( msg );
+            throw new LdapOperationNotSupportedException( msg, ResultCodeEnum.UNWILLING_TO_PERFORM );
+        }
+        
         // The FQCN
         String fqcn = getFqcn( normalizerDescription, SchemaConstants.NORMALIZER );
         
@@ -571,6 +617,15 @@
         // Get the schema
         Schema schema = getSchema( schemaName, targetRegistries );
 
+        if ( schema == null )
+        {
+            // The schema is not loaded. We can't create the requested Normalizer
+            String msg = "Cannot add the Normalizer " + entry.getDn().getUpName() + ", as the associated schema (" +
+                schemaName + " is not loaded";
+            LOG.warn( msg );
+            throw new LdapOperationNotSupportedException( msg, ResultCodeEnum.UNWILLING_TO_PERFORM );
+        }
+        
         // The FQCN
         String className = getFqcn( entry, SchemaConstants.NORMALIZER );
         
@@ -633,6 +688,15 @@
         // Get the schema
         Schema schema = getSchema( schemaName, targetRegistries );
 
+        if ( schema == null )
+        {
+            // The schema is not loaded. We can't create the requested Syntax
+            String msg = "Cannot add the Syntax " + entry.getDn().getUpName() + ", as the associated schema (" +
+                schemaName + " is not loaded";
+            LOG.warn( msg );
+            throw new LdapOperationNotSupportedException( msg, ResultCodeEnum.UNWILLING_TO_PERFORM );
+        }
+        
         // Create the new LdapSyntax instance
         LdapSyntax syntax = new LdapSyntax( oid );
         
@@ -671,6 +735,15 @@
         // Get the schema
         Schema schema = getSchema( schemaName, targetRegistries );
 
+        if ( schema == null )
+        {
+            // The schema is not loaded. We can't create the requested MatchingRule
+            String msg = "Cannot add the MatchingRule " + entry.getDn().getUpName() + ", as the associated schema (" +
+                schemaName + " is not loaded";
+            LOG.warn( msg );
+            throw new LdapOperationNotSupportedException( msg, ResultCodeEnum.UNWILLING_TO_PERFORM );
+        }
+        
         MatchingRule matchingRule = new MatchingRule( oid );
 
         // The syntax field
@@ -722,6 +795,15 @@
         // Get the schema
         Schema schema = getSchema( schemaName, targetRegistries );
 
+        if ( schema == null )
+        {
+            // The schema is not loaded. We can't create the requested ObjectClass
+            String msg = "Cannot add the ObjectClass " + entry.getDn().getUpName() + ", as the associated schema (" +
+                schemaName + " is not loaded";
+            LOG.warn( msg );
+            throw new LdapOperationNotSupportedException( msg, ResultCodeEnum.UNWILLING_TO_PERFORM );
+        }
+        
         // Create the ObjectClass instance
         ObjectClass oc = new ObjectClass( oid );
         
@@ -770,11 +852,12 @@
      *
      * @param entry The entry containing all the informations to build an AttributeType
      * @param targetRegistries The registries containing all the enabled SchemaObjects
+     * @param schemaManager The schema Manager
      * @param schemaName The schema containing this AttributeType
      * @return An AttributeType SchemaObject
      * @throws NamingException If the AttributeType is invalid
      */
-    public AttributeType getAttributeType( Entry entry, Registries targetRegistries, String schemaName ) throws NamingException
+    public AttributeType getAttributeType( Entry entry, Registries targetRegistries, SchemaManager schemaManager, String schemaName ) throws NamingException
     {
         checkEntry( entry, SchemaConstants.ATTRIBUTE_TYPE );
         
@@ -782,12 +865,24 @@
         String oid = getOid( entry, SchemaConstants.ATTRIBUTE_TYPE );
 
         // Get the schema
+        if ( !schemaManager.isSchemaLoaded( schemaName ) )
+        {
+            // The schema is not loaded, this is an error
+            String msg = "Cannot add the AttributeType " + entry.getDn().getUpName() + ", as the associated schema (" +
+                schemaName + " is not loaded";
+            LOG.warn( msg );
+            throw new LdapOperationNotSupportedException( msg, ResultCodeEnum.UNWILLING_TO_PERFORM );
+        }
+        
         Schema schema = getSchema( schemaName, targetRegistries );
         
         if ( schema == null )
         {
-            // The schema is not loaded. We can't create the requested AttributeType
-            return null;
+            // 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";
+            LOG.info( msg );
+            schema = schemaManager.getLoadedSchema( schemaName );
         }
 
         // Create the new AttributeType
@@ -1013,7 +1108,7 @@
         }
         else
         {
-            schemaObject.setEnabled( schema.isEnabled() );
+            schemaObject.setEnabled( schema != null && schema.isEnabled() );
         }
         
         // The isReadOnly field

Modified: directory/shared/branches/shared-schema/ldap/src/main/java/org/apache/directory/shared/ldap/schema/EntityFactory.java
URL: http://svn.apache.org/viewvc/directory/shared/branches/shared-schema/ldap/src/main/java/org/apache/directory/shared/ldap/schema/EntityFactory.java?rev=834716&r1=834715&r2=834716&view=diff
==============================================================================
--- directory/shared/branches/shared-schema/ldap/src/main/java/org/apache/directory/shared/ldap/schema/EntityFactory.java (original)
+++ directory/shared/branches/shared-schema/ldap/src/main/java/org/apache/directory/shared/ldap/schema/EntityFactory.java Tue Nov 10 23:54:48 2009
@@ -111,9 +111,10 @@
      *
      * @param entry The entry containing all the informations to build an AttributeType
      * @param targetRegistries The registries containing all the enabled SchemaObjects
+     * @param schemaManager The SchemaManager
      * @param schemaName The schema containing this AttributeType
      * @return An AttributeType SchemaObject
      * @throws NamingException If the AttributeType is invalid
      */
-    AttributeType getAttributeType( Entry entry, Registries targetRegistries, String schemaName ) throws NamingException;
+    AttributeType getAttributeType( Entry entry, Registries targetRegistries, SchemaManager schemaManager, String schemaName ) throws NamingException;
 }