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/06/02 17:09:15 UTC

svn commit: r781052 - in /directory/apacheds/trunk: bootstrap-plugin/src/main/java/org/apache/directory/server/core/bootstrap/plugin/ core-integ/src/test/java/org/apache/directory/server/core/configuration/ core/src/main/java/org/apache/directory/serve...

Author: elecharny
Date: Tue Jun  2 15:09:14 2009
New Revision: 781052

URL: http://svn.apache.org/viewvc?rev=781052&view=rev
Log:
o Finishing to add the entryCsn, EntryUuid and ObjectClass index
o Reflected the renaming of Csn etc

Modified:
    directory/apacheds/trunk/bootstrap-plugin/src/main/java/org/apache/directory/server/core/bootstrap/plugin/BootstrapPlugin.java
    directory/apacheds/trunk/core-integ/src/test/java/org/apache/directory/server/core/configuration/PartitionConfigurationIT.java
    directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/DefaultDirectoryService.java
    directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/DirectoryService.java
    directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/interceptor/InterceptorChain.java
    directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmPartition.java
    directory/apacheds/trunk/core/src/test/java/org/apache/directory/server/core/authz/support/MaxImmSubFilterTest.java
    directory/apacheds/trunk/core/src/test/java/org/apache/directory/server/core/interceptor/InterceptorChainTest.java
    directory/apacheds/trunk/jdbm-store/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmStore.java
    directory/apacheds/trunk/jdbm-store/src/test/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmStoreTest.java
    directory/apacheds/trunk/schema-bootstrap/src/main/java/org/apache/directory/server/schema/bootstrap/ApacheComparatorProducer.java
    directory/apacheds/trunk/schema-bootstrap/src/main/java/org/apache/directory/server/schema/bootstrap/ApacheSyntaxProducer.java
    directory/apacheds/trunk/xdbm-search/src/test/java/org/apache/directory/server/xdbm/search/impl/GreaterEqTest.java
    directory/apacheds/trunk/xdbm-search/src/test/java/org/apache/directory/server/xdbm/search/impl/LessEqTest.java
    directory/apacheds/trunk/xdbm-search/src/test/java/org/apache/directory/server/xdbm/search/impl/OneLevelScopeTest.java
    directory/apacheds/trunk/xdbm-search/src/test/java/org/apache/directory/server/xdbm/search/impl/SubtreeScopeTest.java
    directory/apacheds/trunk/xdbm-tools/src/main/java/org/apache/directory/server/xdbm/tools/StoreUtils.java

Modified: directory/apacheds/trunk/bootstrap-plugin/src/main/java/org/apache/directory/server/core/bootstrap/plugin/BootstrapPlugin.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/bootstrap-plugin/src/main/java/org/apache/directory/server/core/bootstrap/plugin/BootstrapPlugin.java?rev=781052&r1=781051&r2=781052&view=diff
==============================================================================
--- directory/apacheds/trunk/bootstrap-plugin/src/main/java/org/apache/directory/server/core/bootstrap/plugin/BootstrapPlugin.java (original)
+++ directory/apacheds/trunk/bootstrap-plugin/src/main/java/org/apache/directory/server/core/bootstrap/plugin/BootstrapPlugin.java Tue Jun  2 15:09:14 2009
@@ -71,7 +71,7 @@
 import org.apache.directory.server.schema.registries.SyntaxRegistry;
 import org.apache.directory.server.utils.AttributesFactory;
 import org.apache.directory.shared.ldap.constants.SchemaConstants;
-import org.apache.directory.shared.ldap.csn.CSNFactory;
+import org.apache.directory.shared.ldap.csn.CsnFactory;
 import org.apache.directory.shared.ldap.entry.Modification;
 import org.apache.directory.shared.ldap.entry.ModificationOperation;
 import org.apache.directory.shared.ldap.name.LdapDN;
@@ -177,7 +177,7 @@
     private Map<String, Schema> schemas = new HashMap<String, Schema>();
 
     /** CSN factory instance */
-    private static final CSNFactory CSN_FACTORY = new CSNFactory();
+    private static final CsnFactory CSN_FACTORY = new CsnFactory();
 
     /**
      * Loads a bunch of bootstrap classes into memory then adds them to a new

Modified: directory/apacheds/trunk/core-integ/src/test/java/org/apache/directory/server/core/configuration/PartitionConfigurationIT.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core-integ/src/test/java/org/apache/directory/server/core/configuration/PartitionConfigurationIT.java?rev=781052&r1=781051&r2=781052&view=diff
==============================================================================
--- directory/apacheds/trunk/core-integ/src/test/java/org/apache/directory/server/core/configuration/PartitionConfigurationIT.java (original)
+++ directory/apacheds/trunk/core-integ/src/test/java/org/apache/directory/server/core/configuration/PartitionConfigurationIT.java Tue Jun  2 15:09:14 2009
@@ -29,7 +29,9 @@
 import org.apache.directory.server.core.jndi.CoreContextFactory;
 import org.apache.directory.server.core.partition.Partition;
 import org.apache.directory.server.core.partition.impl.btree.jdbm.JdbmPartition;
+import org.apache.directory.shared.ldap.csn.CsnFactory;
 import org.apache.directory.shared.ldap.name.LdapDN;
+import org.apache.directory.shared.ldap.schema.SchemaUtils;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
@@ -37,6 +39,7 @@
 import javax.naming.InitialContext;
 import javax.naming.NameNotFoundException;
 import java.util.Hashtable;
+import java.util.UUID;
 
 
 /**
@@ -67,6 +70,8 @@
         ctxEntry.put( "objectClass", "top" );
         ctxEntry.get( "objectClass" ).add( "organizationalUnit" );
         ctxEntry.put( "ou", "removable" );
+        ctxEntry.put( "entryCSN", new CsnFactory().newInstance( 1 ).toString() );
+        ctxEntry.put( "entryUUID", SchemaUtils.uuidToBytes( UUID.randomUUID() ) );
         partition.add( new AddOperationContext( service.getAdminSession(), ctxEntry ) );
         
         Hashtable<String,Object> env = new Hashtable<String,Object>();

Modified: directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/DefaultDirectoryService.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/DefaultDirectoryService.java?rev=781052&r1=781051&r2=781052&view=diff
==============================================================================
--- directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/DefaultDirectoryService.java (original)
+++ directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/DefaultDirectoryService.java Tue Jun  2 15:09:14 2009
@@ -83,8 +83,8 @@
 import org.apache.directory.shared.ldap.NotImplementedException;
 import org.apache.directory.shared.ldap.constants.AuthenticationLevel;
 import org.apache.directory.shared.ldap.constants.SchemaConstants;
-import org.apache.directory.shared.ldap.csn.CSN;
-import org.apache.directory.shared.ldap.csn.CSNFactory;
+import org.apache.directory.shared.ldap.csn.Csn;
+import org.apache.directory.shared.ldap.csn.CsnFactory;
 import org.apache.directory.shared.ldap.cursor.Cursor;
 import org.apache.directory.shared.ldap.entry.Entry;
 import org.apache.directory.shared.ldap.entry.EntryAttribute;
@@ -179,7 +179,7 @@
     private boolean passwordHidden = false;
     
     /** The service's CSN factory */
-    private CSNFactory csnFactory;
+    private CsnFactory csnFactory;
     
     /** The directory instance replication ID */
     private int replicaId;
@@ -250,7 +250,7 @@
         
         SerializableComparator.setRegistry( registries.getComparatorRegistry() );
         
-        csnFactory = new CSNFactory();
+        csnFactory = new CsnFactory();
     }
 
 
@@ -1726,7 +1726,7 @@
      * Get a new CSN
      * @return The CSN generated for this directory service
      */
-    public CSN getCSN()
+    public Csn getCSN()
     {
         return csnFactory.newInstance( replicaId );
     }

Modified: directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/DirectoryService.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/DirectoryService.java?rev=781052&r1=781051&r2=781052&view=diff
==============================================================================
--- directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/DirectoryService.java (original)
+++ directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/DirectoryService.java Tue Jun  2 15:09:14 2009
@@ -32,7 +32,7 @@
 import org.apache.directory.server.core.partition.PartitionNexus;
 import org.apache.directory.server.core.schema.SchemaService;
 import org.apache.directory.server.schema.registries.Registries;
-import org.apache.directory.shared.ldap.csn.CSN;
+import org.apache.directory.shared.ldap.csn.Csn;
 import org.apache.directory.shared.ldap.ldif.LdifEntry;
 import org.apache.directory.shared.ldap.name.LdapDN;
 
@@ -468,7 +468,7 @@
      * Get a new CSN
      * @return The CSN generated for this directory service
      */
-    CSN getCSN();
+    Csn getCSN();
 
 
     /**

Modified: directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/interceptor/InterceptorChain.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/interceptor/InterceptorChain.java?rev=781052&r1=781051&r2=781052&view=diff
==============================================================================
--- directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/interceptor/InterceptorChain.java (original)
+++ directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/interceptor/InterceptorChain.java Tue Jun  2 15:09:14 2009
@@ -1201,6 +1201,7 @@
                     }
                     catch ( Throwable e )
                     {
+                        e.printStackTrace();
                         throwInterceptorException( interceptor, e );
                     }
                 }

Modified: directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmPartition.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmPartition.java?rev=781052&r1=781051&r2=781052&view=diff
==============================================================================
--- directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmPartition.java (original)
+++ directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmPartition.java Tue Jun  2 15:09:14 2009
@@ -42,6 +42,7 @@
 import org.apache.directory.server.xdbm.search.impl.EvaluatorBuilder;
 import org.apache.directory.server.xdbm.search.impl.NoOpOptimizer;
 import org.apache.directory.server.schema.registries.Registries;
+import org.apache.directory.shared.ldap.constants.SchemaConstants;
 import org.apache.directory.shared.ldap.exception.LdapAuthenticationNotSupportedException;
 import org.apache.directory.shared.ldap.message.ResultCodeEnum;
 import org.apache.directory.shared.ldap.name.LdapDN;
@@ -235,6 +236,18 @@
                 {
                     store.setUpdnIndex( ( Index<String,ServerEntry> ) index );
                 }
+                else if ( oid.equals( SchemaConstants.OBJECT_CLASS_AT_OID ) )
+                {
+                    store.setObjectClassIndex( ( Index<String,ServerEntry> ) index );
+                }
+                else if ( oid.equals( ApacheSchemaConstants.ENTRY_CSN_AT_OID ) )
+                {
+                    store.setEntryCsnIndex( ( Index<String,ServerEntry> ) index );
+                }
+                else if ( oid.equals( ApacheSchemaConstants.ENTRY_UUID_AT_OID ) )
+                {
+                    store.setEntryUuidIndex( ( Index<byte[],ServerEntry> ) index );
+                }
                 else
                 {
                     throw new IllegalStateException( "Unrecognized system index " + oid );
@@ -281,7 +294,7 @@
     }
 
 
-    public final Index<String, ServerEntry> getExistanceIndex()
+    public final Index<String, ServerEntry> getExistenceIndex()
     {
         return store.getPresenceIndex();
     }
@@ -591,6 +604,24 @@
     }
     
     
+    public Index<String, ServerEntry> getObjectClassIndex()
+    {
+        return store.getObjectClassIndex();
+    }
+         
+    
+    public Index<String, ServerEntry> getEntryCsnIndex()
+    {
+        return store.getEntryCsnIndex();
+    }
+
+    
+    public Index<byte[], ServerEntry> getEntryUuidIndex()
+    {
+        return store.getEntryUuidIndex();
+    }
+
+    
     /**
      * @see Object#toString()
      */

Modified: directory/apacheds/trunk/core/src/test/java/org/apache/directory/server/core/authz/support/MaxImmSubFilterTest.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core/src/test/java/org/apache/directory/server/core/authz/support/MaxImmSubFilterTest.java?rev=781052&r1=781051&r2=781052&view=diff
==============================================================================
--- directory/apacheds/trunk/core/src/test/java/org/apache/directory/server/core/authz/support/MaxImmSubFilterTest.java (original)
+++ directory/apacheds/trunk/core/src/test/java/org/apache/directory/server/core/authz/support/MaxImmSubFilterTest.java Tue Jun  2 15:09:14 2009
@@ -67,7 +67,7 @@
 import org.apache.directory.shared.ldap.aci.ProtectedItem;
 import org.apache.directory.shared.ldap.aci.UserClass;
 import org.apache.directory.shared.ldap.constants.AuthenticationLevel;
-import org.apache.directory.shared.ldap.csn.CSN;
+import org.apache.directory.shared.ldap.csn.Csn;
 import org.apache.directory.shared.ldap.cursor.ClosureMonitor;
 import org.apache.directory.shared.ldap.cursor.Cursor;
 import org.apache.directory.shared.ldap.cursor.CursorIterator;
@@ -852,7 +852,7 @@
         }
         
         
-        public CSN getCSN()
+        public Csn getCSN()
         {
             return null;
         }

Modified: directory/apacheds/trunk/core/src/test/java/org/apache/directory/server/core/interceptor/InterceptorChainTest.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core/src/test/java/org/apache/directory/server/core/interceptor/InterceptorChainTest.java?rev=781052&r1=781051&r2=781052&view=diff
==============================================================================
--- directory/apacheds/trunk/core/src/test/java/org/apache/directory/server/core/interceptor/InterceptorChainTest.java (original)
+++ directory/apacheds/trunk/core/src/test/java/org/apache/directory/server/core/interceptor/InterceptorChainTest.java Tue Jun  2 15:09:14 2009
@@ -41,7 +41,7 @@
 import org.apache.directory.server.core.schema.SchemaService;
 import org.apache.directory.server.schema.registries.Registries;
 import org.apache.directory.shared.ldap.constants.AuthenticationLevel;
-import org.apache.directory.shared.ldap.csn.CSN;
+import org.apache.directory.shared.ldap.csn.Csn;
 import org.apache.directory.shared.ldap.ldif.LdifEntry;
 import org.apache.directory.shared.ldap.name.LdapDN;
 
@@ -662,7 +662,7 @@
         }
         
         
-        public CSN getCSN()
+        public Csn getCSN()
         {
             return null;
         }

Modified: directory/apacheds/trunk/jdbm-store/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmStore.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/jdbm-store/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmStore.java?rev=781052&r1=781051&r2=781052&view=diff
==============================================================================
--- directory/apacheds/trunk/jdbm-store/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmStore.java (original)
+++ directory/apacheds/trunk/jdbm-store/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmStore.java Tue Jun  2 15:09:14 2009
@@ -130,7 +130,6 @@
     /** the subtree scope alias index */
     private JdbmIndex<Long,E> subAliasIdx;
     
-    
     /** a system index on objectClass attribute*/
     private JdbmIndex<String,E> objectClassIdx;
     
@@ -382,19 +381,50 @@
             systemIndices.put( ApacheSchemaConstants.APACHE_SUB_LEVEL_AT_OID, subLevelIdx );
             subLevelIdx.init( attributeTypeRegistry.lookup( ApacheSchemaConstants.APACHE_SUB_LEVEL_AT_OID ), workingDirectory );
         }
+        
+        if ( entryCsnIdx == null )
+        {
+            entryCsnIdx = new JdbmIndex<String, E>();
+            entryCsnIdx.setAttributeId( SchemaConstants.ENTRY_CSN_AT_OID );
+            systemIndices.put( SchemaConstants.ENTRY_CSN_AT_OID, entryCsnIdx );
+            entryCsnIdx.init( attributeTypeRegistry.lookup( SchemaConstants.ENTRY_CSN_AT_OID ), workingDirectory );
+        }
+        
+        if ( entryUuidIdx == null )
+        {
+            entryUuidIdx = new JdbmIndex<byte[], E>();
+            entryUuidIdx.setAttributeId( SchemaConstants.ENTRY_UUID_AT_OID );
+            systemIndices.put( SchemaConstants.ENTRY_UUID_AT_OID, entryUuidIdx );
+            entryUuidIdx.init( attributeTypeRegistry.lookup( SchemaConstants.ENTRY_UUID_AT_OID ), workingDirectory );
+        }
+        
+        if ( objectClassIdx == null )
+        {
+            objectClassIdx = new JdbmIndex<String, E>();
+            objectClassIdx.setAttributeId( SchemaConstants.OBJECT_CLASS_AT_OID );
+            systemIndices.put( SchemaConstants.OBJECT_CLASS_AT_OID, objectClassIdx );
+            objectClassIdx.init( attributeTypeRegistry.lookup( SchemaConstants.OBJECT_CLASS_AT_OID ), workingDirectory );
+        }
     }
 
 
     @SuppressWarnings("unchecked")
     private void setupUserIndices() throws Exception
     {
-        if ( userIndices != null && userIndices.size() > 0 )
+        if ( ( userIndices != null ) && ( userIndices.size() > 0 ) )
         {
             Map<String, Index<?,E>> tmp = new HashMap<String, Index<?,E>>();
             
             for ( Index<?,E> index : userIndices.values() )
             {
                 String oid = oidRegistry.getOid( index.getAttributeId() );
+
+                if ( systemIndices.containsKey( oid ) )
+                {
+                    // Bypass some specific index for AttributeTypes like ObjectClass hich are already
+                    // present in the SystemIndices
+                    continue;
+                }
                 AttributeType attributeType = attributeTypeRegistry.lookup( oid );
                 
                 // Check that the attributeType has an EQUALITY matchingRule
@@ -520,6 +550,9 @@
         array.add( oneLevelIdx );
         array.add( presenceIdx );
         array.add( subLevelIdx );
+        array.add( entryCsnIdx );
+        array.add( entryUuidIdx );
+        array.add( objectClassIdx );
         
         // Sync all user defined userIndices
         for ( Index<?,E> idx : array )
@@ -736,8 +769,8 @@
         subLevelIdx = convertIndex( index );
         systemIndices.put( index.getAttributeId(), subLevelIdx );
     }
-    
-    
+
+
     /**
      * {@inheritDoc}
      */
@@ -796,7 +829,7 @@
         entryCsnIdx = convertIndex( index );
         systemIndices.put( index.getAttributeId(), entryCsnIdx );
     }
-
+    
     
     public Iterator<String> userIndices()
     {
@@ -1178,6 +1211,13 @@
         // Start adding the system userIndices
         // Why bother doing a lookup if this is not an alias.
 
+        // First, the ObjectClass index
+        for ( Value<?> value : objectClass )
+        {
+            objectClassIdx.add( (String)value.get(), id );
+        }
+        
+        
         if ( objectClass.contains( SchemaConstants.ALIAS_OC ) )
         {
             EntryAttribute aliasAttr = entry.get( ALIASED_OBJECT_NAME_AT );
@@ -1192,6 +1232,28 @@
         ndnIdx.add( entryDn.toNormName(), id );
         updnIdx.add( entryDn.getUpName(), id );
         oneLevelIdx.add( parentId, id );
+
+        // Update the EntryCsn index
+        EntryAttribute entryCsn = entry.get( ENTRY_CSN_AT );
+
+        if ( entryCsn == null )
+        {
+            String msg = "Entry " + entryDn.getUpName() + " contains no entryCsn attribute: " + entry;
+            throw new LdapSchemaViolationException( msg, ResultCodeEnum.OBJECT_CLASS_VIOLATION );
+        }
+        
+        entryCsnIdx.add( entryCsn.getString(), id );
+        
+        // Update the EntryUuid index
+        EntryAttribute entryUuid = entry.get( ENTRY_UUID_AT );
+
+        if ( entryUuid == null )
+        {
+            String msg = "Entry " + entryDn.getUpName() + " contains no entryUuid attribute: " + entry;
+            throw new LdapSchemaViolationException( msg, ResultCodeEnum.OBJECT_CLASS_VIOLATION );
+        }
+        
+        entryUuidIdx.add( entryUuid.getBytes(), id );
         
         Long tempId = parentId;
         
@@ -1243,7 +1305,6 @@
     /**
      * {@inheritDoc}
      */
-    @SuppressWarnings("unchecked")
     public void delete( Long id ) throws Exception
     {
         ServerEntry entry = lookup( id );
@@ -1255,10 +1316,17 @@
         {
             dropAliasIndices( id );
         }
+        
+        for ( Value<?> value : objectClass )
+        {
+            objectClassIdx.drop( (String)value.get(), id );
+        }
 
         ndnIdx.drop( id );
         updnIdx.drop( id );
         oneLevelIdx.drop( id );
+        entryCsnIdx.drop( id );
+        entryUuidIdx.drop( id );
 
         if( parentId != 1 )// should not use getParentId() to compare, onelevel index drops the 'id'
         {
@@ -1364,7 +1432,15 @@
         
         String modsOid = oidRegistry.getOid( mods.getId() );
 
-        if ( hasUserIndexOn( modsOid ) )
+        // Special case for the ObjectClass index
+        if ( modsOid.equals( SchemaConstants.OBJECT_CLASS_AT_OID ) )
+        {
+            for ( Value<?> value : mods )
+            {
+                objectClassIdx.drop( (String)value.get(), id );
+            }
+        }
+        else if ( hasUserIndexOn( modsOid ) )
         {
             Index<?,E> index = getUserIndex( modsOid );
 
@@ -1388,7 +1464,7 @@
             entry.add( type, value );
         }
 
-        if ( modsOid.equals( oidRegistry.getOid( SchemaConstants.ALIASED_OBJECT_NAME_AT ) ) )
+        if ( modsOid.equals( SchemaConstants.ALIASED_OBJECT_NAME_AT_OID ) )
         {
             String ndnStr = ndnIdx.reverseLookup( id );
             addAliasIndices( id, new LdapDN( ndnStr ), mods.getString() );
@@ -1418,8 +1494,16 @@
         }
         
         String modsOid = oidRegistry.getOid( mods.getId() );
-
-        if ( hasUserIndexOn( modsOid ) )
+        
+        // Special case for the ObjectClass index
+        if ( modsOid.equals( SchemaConstants.OBJECT_CLASS_AT_OID ) )
+        {
+            for ( Value<?> value : mods )
+            {
+                objectClassIdx.drop( (String)value.get(), id );
+            }
+        }
+        else if ( hasUserIndexOn( modsOid ) )
         {
             Index<?,E> index = getUserIndex( modsOid );
             
@@ -1502,11 +1586,27 @@
         
         String modsOid = oidRegistry.getOid( mods.getId() );
 
-        if ( hasUserIndexOn( modsOid ) )
+        // Special case for the ObjectClass index
+        if ( modsOid.equals( SchemaConstants.OBJECT_CLASS_AT_OID ) )
+        {
+            // if the id exists in the index drop all existing attribute 
+            // value index entries and add new ones
+            if( objectClassIdx.reverse( id ) )
+            {
+                objectClassIdx.drop( id );
+            }
+            
+            for ( Value<?> value : mods )
+            {
+                objectClassIdx.add( (String)value.get(), id );
+            }
+        }
+        else if ( hasUserIndexOn( modsOid ) )
         {
             Index<?,E> index = getUserIndex( modsOid );
 
-            // if the id exists in the index drop all existing attribute value index entries and add new ones
+            // if the id exists in the index drop all existing attribute 
+            // value index entries and add new ones
             if( index.reverse( id ) )
             {
                 ( ( JdbmIndex<?,E> ) index ).drop( id );

Modified: directory/apacheds/trunk/jdbm-store/src/test/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmStoreTest.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/jdbm-store/src/test/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmStoreTest.java?rev=781052&r1=781051&r2=781052&view=diff
==============================================================================
--- directory/apacheds/trunk/jdbm-store/src/test/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmStoreTest.java (original)
+++ directory/apacheds/trunk/jdbm-store/src/test/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmStoreTest.java Tue Jun  2 15:09:14 2009
@@ -43,8 +43,10 @@
 import org.apache.directory.server.constants.ApacheSchemaConstants;
 import org.apache.directory.shared.ldap.name.LdapDN;
 import org.apache.directory.shared.ldap.constants.SchemaConstants;
+import org.apache.directory.shared.ldap.csn.CsnFactory;
 import org.apache.directory.shared.ldap.cursor.Cursor;
 import org.apache.directory.shared.ldap.schema.AttributeType;
+import org.apache.directory.shared.ldap.schema.SchemaUtils;
 import org.apache.directory.shared.ldap.entry.ModificationOperation;
 import org.apache.directory.shared.ldap.entry.Modification;
 import org.apache.directory.shared.ldap.exception.LdapNameNotFoundException;
@@ -59,6 +61,7 @@
 import java.util.Set;
 import java.util.HashSet;
 import java.util.Iterator;
+import java.util.UUID;
 
 
 /**
@@ -261,11 +264,13 @@
         try { store.setUpdnIndex( new JdbmIndex<String,ServerEntry>( "updn" ) ); fail(); }
         catch( IllegalStateException e ) {}
         Iterator<String> systemIndices = store.systemIndices();
-        for ( int ii = 0; ii < 8; ii++ )
+        
+        for ( int ii = 0; ii < 11; ii++ )
         {
             assertTrue( systemIndices.hasNext() );
             assertNotNull( systemIndices.next() );
         }
+        
         assertFalse( systemIndices.hasNext() );
         assertNotNull( store.getSystemIndex( ApacheSchemaConstants.APACHE_ALIAS_AT ) );
         try { store.getSystemIndex( "bogus" ); fail(); }
@@ -357,6 +362,8 @@
         entry.add( "ou", "Apache" );
         entry.add( "commonName",  "Jack Daniels");
         entry.add( "aliasedObjectName", "cn=Jack Daniels,ou=Engineering,o=Good Times Co." );
+        entry.add( "entryCSN", new CsnFactory().newInstance( 1 ).toString() );
+        entry.add( "entryUUID", SchemaUtils.uuidToBytes( UUID.randomUUID() ) );
         store.add( entry );
         
         store.delete( 12L ); // drops the alias indices
@@ -403,6 +410,8 @@
       entry.add( "objectClass", "top", "person", "organizationalPerson" );
       entry.add( "ou", "Sales" );
       entry.add( "cn",  "Martin King");
+      entry.add( "entryCSN", new CsnFactory().newInstance( 1 ).toString() );
+      entry.add( "entryUUID", SchemaUtils.uuidToBytes( UUID.randomUUID() ) );
       store.add( entry );
       
       cursor = idx.forwardCursor( 2L);
@@ -425,6 +434,8 @@
       entry = new DefaultServerEntry( registries, marketingDn );
       entry.add( "objectClass", "top", "organizationalUnit" );
       entry.add( "ou", "Marketing" );
+      entry.add( "entryCSN", new CsnFactory().newInstance( 1 ).toString() );
+      entry.add( "entryUUID", SchemaUtils.uuidToBytes( UUID.randomUUID() ) );
       store.add( entry );
 
       // dn id 14
@@ -434,6 +445,8 @@
       entry.add( "objectClass", "top", "person", "organizationalPerson" );
       entry.add( "ou", "Marketing" );
       entry.add( "cn",  "Jimmy Wales");
+      entry.add( "entryCSN", new CsnFactory().newInstance( 1 ).toString() );
+      entry.add( "entryUUID", SchemaUtils.uuidToBytes( UUID.randomUUID() ) );
       store.add( entry );
       
       store.move( marketingDn, newParentDn );
@@ -715,6 +728,8 @@
         entry.add( "objectClass", "top", "person", "organizationalPerson" );
         entry.add( "ou", "Engineering" );
         entry.add( "cn",  "Private Ryan");
+        entry.add( "entryCSN", new CsnFactory().newInstance( 1 ).toString() );
+        entry.add( "entryUUID", SchemaUtils.uuidToBytes( UUID.randomUUID() ) );
 
         store.add( entry );
         
@@ -733,6 +748,8 @@
         childEntry.add( "objectClass", "top", "person", "organizationalPerson" );
         childEntry.add( "ou", "Engineering" );
         childEntry.add( "cn",  "Private Ryan");
+        childEntry.add( "entryCSN", new CsnFactory().newInstance( 1 ).toString() );
+        childEntry.add( "entryUUID", SchemaUtils.uuidToBytes( UUID.randomUUID() ) );
 
         store.add( childEntry );
 
@@ -864,6 +881,8 @@
         DefaultServerEntry entry = new DefaultServerEntry( registries, dn );
         entry.add( "objectClass", "top", "person", "organizationalPerson" );
         entry.add( "cn", "Tim B");
+        entry.add( "entryCSN", new CsnFactory().newInstance( 1 ).toString() );
+        entry.add( "entryUUID", SchemaUtils.uuidToBytes( UUID.randomUUID() ) );
         
         store.add( entry );
         

Modified: directory/apacheds/trunk/schema-bootstrap/src/main/java/org/apache/directory/server/schema/bootstrap/ApacheComparatorProducer.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/schema-bootstrap/src/main/java/org/apache/directory/server/schema/bootstrap/ApacheComparatorProducer.java?rev=781052&r1=781051&r2=781052&view=diff
==============================================================================
--- directory/apacheds/trunk/schema-bootstrap/src/main/java/org/apache/directory/server/schema/bootstrap/ApacheComparatorProducer.java (original)
+++ directory/apacheds/trunk/schema-bootstrap/src/main/java/org/apache/directory/server/schema/bootstrap/ApacheComparatorProducer.java Tue Jun  2 15:09:14 2009
@@ -28,7 +28,7 @@
 
 import org.apache.directory.server.schema.bootstrap.ProducerTypeEnum;
 import org.apache.directory.server.schema.registries.Registries;
-import org.apache.directory.shared.ldap.schema.comparators.CSNComparator;
+import org.apache.directory.shared.ldap.schema.comparators.CsnComparator;
 import org.apache.directory.shared.ldap.schema.comparators.ComparableComparator;
 import org.apache.directory.shared.ldap.schema.comparators.CsnSidComparator;
 import org.apache.directory.shared.ldap.schema.comparators.UUIDComparator;
@@ -82,11 +82,11 @@
         cb.schemaObjectProduced( this, "1.3.6.1.1.16.3", comparator );
         
         // For CSNMatch
-        comparator = new CSNComparator();
+        comparator = new CsnComparator();
         cb.schemaObjectProduced( this, "1.3.6.1.4.1.4203.666.11.2.2", comparator );
         
         // For CSNOrderingMatch
-        comparator = new CSNComparator();
+        comparator = new CsnComparator();
         cb.schemaObjectProduced( this, "1.3.6.1.4.1.4203.666.11.2.3", comparator );
         
         // For CSNSIDMatch

Modified: directory/apacheds/trunk/schema-bootstrap/src/main/java/org/apache/directory/server/schema/bootstrap/ApacheSyntaxProducer.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/schema-bootstrap/src/main/java/org/apache/directory/server/schema/bootstrap/ApacheSyntaxProducer.java?rev=781052&r1=781051&r2=781052&view=diff
==============================================================================
--- directory/apacheds/trunk/schema-bootstrap/src/main/java/org/apache/directory/server/schema/bootstrap/ApacheSyntaxProducer.java (original)
+++ directory/apacheds/trunk/schema-bootstrap/src/main/java/org/apache/directory/server/schema/bootstrap/ApacheSyntaxProducer.java Tue Jun  2 15:09:14 2009
@@ -220,7 +220,7 @@
         cb.schemaObjectProduced( this, syntax.getOid(), syntax );
 
         // A Syntax for CSN, OID = 1.3.6.1.4.1.4203.666.11.2.1
-        syntax = new AbstractSyntax( SchemaConstants.CSN_SYNTAX, "a syntax for CSN values", false )
+        syntax = new AbstractSyntax( SchemaConstants.CSN_SYNTAX, "a syntax for CSN values", true )
         {
             private static final long serialVersionUID = 1L;
             private final CsnSyntaxChecker CSN_SYNTAX_CHECKER = new CsnSyntaxChecker();
@@ -245,7 +245,7 @@
         cb.schemaObjectProduced( this, syntax.getOid(), syntax );
 
         // A Syntax for CSNSid, OID = 1.3.6.1.4.1.4203.666.11.2.5
-        syntax = new AbstractSyntax( SchemaConstants.CSN_SID_SYNTAX, "a syntax for CSN SID values", false )
+        syntax = new AbstractSyntax( SchemaConstants.CSN_SID_SYNTAX, "a syntax for CSN SID values", true )
         {
             private static final long serialVersionUID = 1L;
             private final CsnSidSyntaxChecker CSN_SID_SYNTAX_CHECKER = new CsnSidSyntaxChecker();

Modified: directory/apacheds/trunk/xdbm-search/src/test/java/org/apache/directory/server/xdbm/search/impl/GreaterEqTest.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/xdbm-search/src/test/java/org/apache/directory/server/xdbm/search/impl/GreaterEqTest.java?rev=781052&r1=781051&r2=781052&view=diff
==============================================================================
--- directory/apacheds/trunk/xdbm-search/src/test/java/org/apache/directory/server/xdbm/search/impl/GreaterEqTest.java (original)
+++ directory/apacheds/trunk/xdbm-search/src/test/java/org/apache/directory/server/xdbm/search/impl/GreaterEqTest.java Tue Jun  2 15:09:14 2009
@@ -34,6 +34,7 @@
 import org.apache.directory.server.core.entry.ServerStringValue;
 import org.apache.directory.server.core.entry.DefaultServerEntry;
 import org.apache.directory.shared.ldap.constants.SchemaConstants;
+import org.apache.directory.shared.ldap.csn.CsnFactory;
 import org.apache.directory.shared.ldap.cursor.InvalidCursorPositionException;
 import org.apache.directory.shared.ldap.filter.GreaterEqNode;
 import org.apache.directory.shared.ldap.schema.*;
@@ -52,6 +53,7 @@
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
+import java.util.UUID;
 
 
 
@@ -589,6 +591,8 @@
         attrs.add( "c-street", "3" );
         attrs.add( "cn", "jane doe" );
         attrs.add( "sn", "doe" );
+        attrs.add( "entryCSN", new CsnFactory().newInstance( 1 ).toString() );
+        attrs.add( "entryUUID", SchemaUtils.uuidToBytes( UUID.randomUUID() ) );
         store.add(  attrs );
 
         indexEntry.setId( 12L );

Modified: directory/apacheds/trunk/xdbm-search/src/test/java/org/apache/directory/server/xdbm/search/impl/LessEqTest.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/xdbm-search/src/test/java/org/apache/directory/server/xdbm/search/impl/LessEqTest.java?rev=781052&r1=781051&r2=781052&view=diff
==============================================================================
--- directory/apacheds/trunk/xdbm-search/src/test/java/org/apache/directory/server/xdbm/search/impl/LessEqTest.java (original)
+++ directory/apacheds/trunk/xdbm-search/src/test/java/org/apache/directory/server/xdbm/search/impl/LessEqTest.java Tue Jun  2 15:09:14 2009
@@ -44,9 +44,11 @@
 import org.apache.directory.server.core.entry.DefaultServerEntry;
 import org.apache.directory.server.core.entry.ServerStringValue;
 import org.apache.directory.shared.ldap.constants.SchemaConstants;
+import org.apache.directory.shared.ldap.csn.CsnFactory;
 import org.apache.directory.shared.ldap.cursor.InvalidCursorPositionException;
 import org.apache.directory.shared.ldap.filter.LessEqNode;
 import org.apache.directory.shared.ldap.schema.AttributeType;
+import org.apache.directory.shared.ldap.schema.SchemaUtils;
 import org.apache.directory.shared.ldap.schema.parsers.SyntaxCheckerDescription;
 import org.apache.directory.shared.ldap.name.LdapDN;
 import org.apache.commons.io.FileUtils;
@@ -62,6 +64,7 @@
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
+import java.util.UUID;
 
 
 /**
@@ -640,6 +643,8 @@
         attrs.add( "c-street", "1" );
         attrs.add( "cn", "jane doe" );
         attrs.add( "sn", "doe" );
+        attrs.add( "entryCSN", new CsnFactory().newInstance( 1 ).toString() );
+        attrs.add( "entryUUID", SchemaUtils.uuidToBytes( UUID.randomUUID() ) );
         store.add( attrs );
 
         indexEntry.setId( 12L );

Modified: directory/apacheds/trunk/xdbm-search/src/test/java/org/apache/directory/server/xdbm/search/impl/OneLevelScopeTest.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/xdbm-search/src/test/java/org/apache/directory/server/xdbm/search/impl/OneLevelScopeTest.java?rev=781052&r1=781051&r2=781052&view=diff
==============================================================================
--- directory/apacheds/trunk/xdbm-search/src/test/java/org/apache/directory/server/xdbm/search/impl/OneLevelScopeTest.java (original)
+++ directory/apacheds/trunk/xdbm-search/src/test/java/org/apache/directory/server/xdbm/search/impl/OneLevelScopeTest.java Tue Jun  2 15:09:14 2009
@@ -44,11 +44,13 @@
 import org.apache.directory.server.core.entry.ServerEntry;
 import org.apache.directory.server.core.entry.DefaultServerEntry;
 import org.apache.directory.shared.ldap.constants.SchemaConstants;
+import org.apache.directory.shared.ldap.csn.CsnFactory;
 import org.apache.directory.shared.ldap.cursor.InvalidCursorPositionException;
 import org.apache.directory.shared.ldap.filter.ScopeNode;
 import org.apache.directory.shared.ldap.filter.SearchScope;
 import org.apache.directory.shared.ldap.message.AliasDerefMode;
 import org.apache.directory.shared.ldap.name.LdapDN;
+import org.apache.directory.shared.ldap.schema.SchemaUtils;
 import org.apache.commons.io.FileUtils;
 import org.junit.Before;
 import org.junit.After;
@@ -61,6 +63,7 @@
 import java.io.File;
 import java.util.Set;
 import java.util.HashSet;
+import java.util.UUID;
 
 
 /**
@@ -667,6 +670,8 @@
         attrs.add( "objectClass", "alias", "extensibleObject" );
         attrs.add( "cn", "jd" );
         attrs.add( "aliasedObjectName", "cn=Jack Daniels,ou=Engineering,o=Good Times Co." );
+        attrs.add( "entryCSN", new CsnFactory().newInstance( 1 ).toString() );
+        attrs.add( "entryUUID", SchemaUtils.uuidToBytes( UUID.randomUUID() ) );
         store.add( attrs );
 
         dn = new LdapDN(
@@ -680,6 +685,8 @@
         attrs.add( "objectClass", "person" );
         attrs.add( "cn", "jdoe" );
         attrs.add( "sn", "doe" );
+        attrs.add( "entryCSN", new CsnFactory().newInstance( 1 ).toString() );
+        attrs.add( "entryUUID", SchemaUtils.uuidToBytes( UUID.randomUUID() ) );
         store.add( attrs );
 
         ScopeNode node = new ScopeNode( AliasDerefMode.DEREF_IN_SEARCHING,

Modified: directory/apacheds/trunk/xdbm-search/src/test/java/org/apache/directory/server/xdbm/search/impl/SubtreeScopeTest.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/xdbm-search/src/test/java/org/apache/directory/server/xdbm/search/impl/SubtreeScopeTest.java?rev=781052&r1=781051&r2=781052&view=diff
==============================================================================
--- directory/apacheds/trunk/xdbm-search/src/test/java/org/apache/directory/server/xdbm/search/impl/SubtreeScopeTest.java (original)
+++ directory/apacheds/trunk/xdbm-search/src/test/java/org/apache/directory/server/xdbm/search/impl/SubtreeScopeTest.java Tue Jun  2 15:09:14 2009
@@ -44,11 +44,13 @@
 import org.apache.directory.server.core.entry.ServerEntry;
 import org.apache.directory.server.core.entry.DefaultServerEntry;
 import org.apache.directory.shared.ldap.constants.SchemaConstants;
+import org.apache.directory.shared.ldap.csn.CsnFactory;
 import org.apache.directory.shared.ldap.cursor.InvalidCursorPositionException;
 import org.apache.directory.shared.ldap.filter.ScopeNode;
 import org.apache.directory.shared.ldap.filter.SearchScope;
 import org.apache.directory.shared.ldap.message.AliasDerefMode;
 import org.apache.directory.shared.ldap.name.LdapDN;
+import org.apache.directory.shared.ldap.schema.SchemaUtils;
 import org.apache.commons.io.FileUtils;
 import org.junit.Before;
 import org.junit.After;
@@ -62,6 +64,7 @@
 import java.io.File;
 import java.util.Set;
 import java.util.HashSet;
+import java.util.UUID;
 
 
 /**
@@ -635,6 +638,8 @@
         attrs.add( "objectClass", "alias", "extensibleObject" );
         attrs.add( "cn", "jd" );
         attrs.add( "aliasedObjectName", "cn=Jack Daniels,ou=Engineering,o=Good Times Co." );
+        attrs.add( "entryCSN", new CsnFactory().newInstance( 1 ).toString() );
+        attrs.add( "entryUUID", SchemaUtils.uuidToBytes( UUID.randomUUID() ) );
         store.add( attrs );
 
         dn = new LdapDN(
@@ -648,6 +653,8 @@
         attrs.add( "objectClass", "person" );
         attrs.add( "cn", "jdoe" );
         attrs.add( "sn", "doe" );
+        attrs.add( "entryCSN", new CsnFactory().newInstance( 1 ).toString() );
+        attrs.add( "entryUUID", SchemaUtils.uuidToBytes( UUID.randomUUID() ) );
         store.add( attrs );
 
         ScopeNode node = new ScopeNode( AliasDerefMode.DEREF_IN_SEARCHING,

Modified: directory/apacheds/trunk/xdbm-tools/src/main/java/org/apache/directory/server/xdbm/tools/StoreUtils.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/xdbm-tools/src/main/java/org/apache/directory/server/xdbm/tools/StoreUtils.java?rev=781052&r1=781051&r2=781052&view=diff
==============================================================================
--- directory/apacheds/trunk/xdbm-tools/src/main/java/org/apache/directory/server/xdbm/tools/StoreUtils.java (original)
+++ directory/apacheds/trunk/xdbm-tools/src/main/java/org/apache/directory/server/xdbm/tools/StoreUtils.java Tue Jun  2 15:09:14 2009
@@ -32,7 +32,7 @@
 import org.apache.directory.server.xdbm.Index;
 import org.apache.directory.server.xdbm.IndexEntry;
 import org.apache.directory.server.xdbm.Store;
-import org.apache.directory.shared.ldap.csn.CSNFactory;
+import org.apache.directory.shared.ldap.csn.CsnFactory;
 import org.apache.directory.shared.ldap.cursor.Cursor;
 import org.apache.directory.shared.ldap.entry.Entry;
 import org.apache.directory.shared.ldap.entry.EntryAttribute;
@@ -51,7 +51,7 @@
 public class StoreUtils
 {
     /** CSN factory instance */
-    private static final CSNFactory CSN_FACTORY = new CSNFactory();
+    private static final CsnFactory CSN_FACTORY = new CsnFactory();
 
     /**
      * Initializes and loads a store with the example data shown in