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 2010/05/31 00:27:58 UTC

svn commit: r949631 - in /directory/apacheds/trunk: core-api/src/main/java/org/apache/directory/server/core/interceptor/context/ core/src/main/java/org/apache/directory/server/core/partition/ xdbm-search/src/main/java/org/apache/directory/server/xdbm/

Author: elecharny
Date: Sun May 30 22:27:57 2010
New Revision: 949631

URL: http://svn.apache.org/viewvc?rev=949631&view=rev
Log:
o The Store modify() method now returns an Entry

Modified:
    directory/apacheds/trunk/core-api/src/main/java/org/apache/directory/server/core/interceptor/context/ModifyOperationContext.java
    directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/partition/DefaultPartitionNexus.java
    directory/apacheds/trunk/xdbm-search/src/main/java/org/apache/directory/server/xdbm/AbstractStore.java
    directory/apacheds/trunk/xdbm-search/src/main/java/org/apache/directory/server/xdbm/AbstractXdbmPartition.java
    directory/apacheds/trunk/xdbm-search/src/main/java/org/apache/directory/server/xdbm/Store.java

Modified: directory/apacheds/trunk/core-api/src/main/java/org/apache/directory/server/core/interceptor/context/ModifyOperationContext.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core-api/src/main/java/org/apache/directory/server/core/interceptor/context/ModifyOperationContext.java?rev=949631&r1=949630&r2=949631&view=diff
==============================================================================
--- directory/apacheds/trunk/core-api/src/main/java/org/apache/directory/server/core/interceptor/context/ModifyOperationContext.java (original)
+++ directory/apacheds/trunk/core-api/src/main/java/org/apache/directory/server/core/interceptor/context/ModifyOperationContext.java Sun May 30 22:27:57 2010
@@ -26,15 +26,14 @@ import java.util.List;
 import javax.naming.NamingException;
 
 import org.apache.directory.server.core.CoreSession;
-import org.apache.directory.server.core.entry.ClonedServerEntry;
 import org.apache.directory.server.core.entry.ServerEntryUtils;
 import org.apache.directory.shared.ldap.codec.MessageTypeEnum;
 import org.apache.directory.shared.ldap.codec.controls.ManageDsaITControl;
 import org.apache.directory.shared.ldap.entry.DefaultModification;
+import org.apache.directory.shared.ldap.entry.Entry;
 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.Entry;
 import org.apache.directory.shared.ldap.message.internal.InternalModifyRequest;
 import org.apache.directory.shared.ldap.name.DN;
 
@@ -52,10 +51,11 @@ public class ModifyOperationContext exte
 {
     /** The modification items */
     private List<Modification> modItems;
-    
-    /** The entry after being renamed and altered for rdn attributes */ 
-    private ClonedServerEntry alteredEntry;
-    
+
+    /** The entry after being renamed and altered for rdn attributes */
+    private Entry alteredEntry;
+
+
     /**
      * Creates a new instance of ModifyOperationContext.
      */
@@ -82,11 +82,10 @@ public class ModifyOperationContext exte
     public ModifyOperationContext( CoreSession session, InternalModifyRequest modifyRequest ) throws Exception
     {
         super( session, modifyRequest.getName() );
-        
-        modItems = ServerEntryUtils.toServerModification( 
-            modifyRequest.getModificationItems().toArray( new DefaultModification[0] ), 
-            session.getDirectoryService().getSchemaManager() );
-        
+
+        modItems = ServerEntryUtils.toServerModification( modifyRequest.getModificationItems().toArray(
+            new DefaultModification[0] ), session.getDirectoryService().getSchemaManager() );
+
         requestControls = modifyRequest.getControls();
 
         if ( requestControls.containsKey( ManageDsaITControl.CONTROL_OID ) )
@@ -113,17 +112,18 @@ public class ModifyOperationContext exte
     /**
      * @return The modifications
      */
-    public List<Modification> getModItems() 
+    public List<Modification> getModItems()
     {
         return modItems;
     }
 
 
-    public static List<Modification> createModItems( Entry serverEntry, ModificationOperation modOp ) throws NamingException
+    public static List<Modification> createModItems( Entry serverEntry, ModificationOperation modOp )
+        throws NamingException
     {
         List<Modification> items = new ArrayList<Modification>( serverEntry.size() );
-        
-        for ( EntryAttribute attribute:serverEntry )
+
+        for ( EntryAttribute attribute : serverEntry )
         {
             items.add( new DefaultModification( modOp, attribute ) );
         }
@@ -140,48 +140,48 @@ public class ModifyOperationContext exte
         return MessageTypeEnum.MODIFY_REQUEST.name();
     }
 
-    
+
     /**
      * Returns the entry after it has been renamed and potentially changed for 
      * Rdn alterations.
      *
      * @return the new renamed entry
      */
-    public ClonedServerEntry getAlteredEntry()
+    public Entry getAlteredEntry()
     {
         return alteredEntry;
     }
 
-    
+
     /**
      * Set the modified entry once the operation has been proceced
      * on the backend.
      *
      * @param alteredEntry The modified entry
      */
-    public void setAlteredEntry( ClonedServerEntry alteredEntry ) 
+    public void setAlteredEntry( Entry alteredEntry )
     {
         this.alteredEntry = alteredEntry;
     }
 
-    
+
     /**
      * @see Object#toString()
      */
     public String toString()
     {
         StringBuilder sb = new StringBuilder();
-        
-        sb.append("ModifyContext for DN '").append( getDn().getName() ).append( "', modifications :\n" );
-        
+
+        sb.append( "ModifyContext for DN '" ).append( getDn().getName() ).append( "', modifications :\n" );
+
         if ( modItems != null )
         {
-            for ( Modification mod:modItems )
+            for ( Modification mod : modItems )
             {
                 sb.append( mod ).append( '\n' );
             }
         }
-        
+
         return sb.toString();
     }
 }

Modified: directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/partition/DefaultPartitionNexus.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/partition/DefaultPartitionNexus.java?rev=949631&r1=949630&r2=949631&view=diff
==============================================================================
--- directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/partition/DefaultPartitionNexus.java (original)
+++ directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/partition/DefaultPartitionNexus.java Sun May 30 22:27:57 2010
@@ -119,7 +119,7 @@ import org.slf4j.LoggerFactory;
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  * @version $Rev$, $Date$
  */
-public class DefaultPartitionNexus  extends AbstractPartition implements PartitionNexus
+public class DefaultPartitionNexus extends AbstractPartition implements PartitionNexus
 {
     /** A logger for this class */
     private static final Logger LOG = LoggerFactory.getLogger( DefaultPartitionNexus.class );
@@ -135,28 +135,29 @@ public class DefaultPartitionNexus  exte
 
     /** The DirectoryService instance */
     private DirectoryService directoryService;
-    
+
     /** The global schemaManager */
     private SchemaManager schemaManager;
-    
+
     /** the partitions keyed by normalized suffix strings */
     private Map<String, Partition> partitions = new HashMap<String, Partition>();
-    
+
     /** A structure to hold all the partitions */
     private DnBranchNode<Partition> partitionLookupTree = new DnBranchNode<Partition>();
-    
+
     /** the system partition */
     private Partition system;
 
     /** the closed state of this partition */
     private boolean initialized;
-    
+
     private static AttributeType ENTRY_CSN_ATTRIBUTE_TYPE;
-    
+
     final List<Modification> mods = new ArrayList<Modification>( 2 );
-    
+
     private String lastSyncedCtxCsn = "";
-    
+
+
     /**
      * Creates the root nexus singleton of the entire system.  The root DSE has
      * several attributes that are injected into it besides those that may
@@ -171,7 +172,7 @@ public class DefaultPartitionNexus  exte
     {
         // setup that root DSE
         this.rootDSE = rootDSE;
-        
+
         // Add the basic informations
         rootDSE.put( SchemaConstants.SUBSCHEMA_SUBENTRY_AT, ServerDNConstants.CN_SCHEMA_DN );
         rootDSE.put( SchemaConstants.SUPPORTED_LDAP_VERSION_AT, "3" );
@@ -179,31 +180,21 @@ public class DefaultPartitionNexus  exte
         rootDSE.put( SchemaConstants.SUPPORTED_EXTENSION_AT, NoticeOfDisconnect.EXTENSION_OID );
 
         // Add the supported controls
-        rootDSE.put( 
-            SchemaConstants.SUPPORTED_CONTROL_AT, 
-            PersistentSearchControl.CONTROL_OID,
-            EntryChangeControl.CONTROL_OID,
-            SubentriesControl.CONTROL_OID,
-            ManageDsaITControl.CONTROL_OID,
-            CascadeControl.CONTROL_OID,
-            PagedResultsControl.CONTROL_OID,
+        rootDSE.put( SchemaConstants.SUPPORTED_CONTROL_AT, PersistentSearchControl.CONTROL_OID,
+            EntryChangeControl.CONTROL_OID, SubentriesControl.CONTROL_OID, ManageDsaITControl.CONTROL_OID,
+            CascadeControl.CONTROL_OID, PagedResultsControl.CONTROL_OID,
             // Replication controls
-            SyncDoneValueControl.CONTROL_OID,
-            SyncInfoValueControl.CONTROL_OID,
-            SyncRequestValueControl.CONTROL_OID,
-            SyncStateValueControl.CONTROL_OID 
-        );
+            SyncDoneValueControl.CONTROL_OID, SyncInfoValueControl.CONTROL_OID, SyncRequestValueControl.CONTROL_OID,
+            SyncStateValueControl.CONTROL_OID );
 
         // Add the objectClasses
-        rootDSE.put( SchemaConstants.OBJECT_CLASS_AT,
-            SchemaConstants.TOP_OC,
-            SchemaConstants.EXTENSIBLE_OBJECT_OC );
+        rootDSE.put( SchemaConstants.OBJECT_CLASS_AT, SchemaConstants.TOP_OC, SchemaConstants.EXTENSIBLE_OBJECT_OC );
 
         // Add the 'vendor' name and version infos
         rootDSE.put( SchemaConstants.VENDOR_NAME_AT, ASF );
 
         Properties props = new Properties();
-        
+
         try
         {
             props.load( getClass().getResourceAsStream( "version.properties" ) );
@@ -216,48 +207,47 @@ public class DefaultPartitionNexus  exte
         rootDSE.put( SchemaConstants.VENDOR_VERSION_AT, props.getProperty( "apacheds.version", "UNKNOWN" ) );
     }
 
-    
+
     /* (non-Javadoc)
      * @see org.apache.directory.server.core.partition.PartitionNexus#initialize()
      */
-    protected void doInit( ) throws Exception
+    protected void doInit() throws Exception
     {
         // NOTE: We ignore ContextPartitionConfiguration parameter here.
         if ( initialized )
         {
             return;
         }
-    
+
         //this.directoryService = directoryService;
         schemaManager = directoryService.getSchemaManager();
         ENTRY_CSN_ATTRIBUTE_TYPE = schemaManager.lookupAttributeTypeRegistry( SchemaConstants.ENTRY_CSN_AT );
-        
+
         // Initialize and normalize the localy used DNs
         DN adminDn = new DN( ServerDNConstants.ADMIN_SYSTEM_DN );
         adminDn.normalize( schemaManager.getNormalizerMapping() );
-            
+
         initializeSystemPartition( directoryService );
-        
+
         List<Partition> initializedPartitions = new ArrayList<Partition>();
         initializedPartitions.add( 0, this.system );
 
-    
         try
         {
             for ( Partition partition : directoryService.getPartitions() )
             {
                 partition.setSchemaManager( schemaManager );
-                CoreSession adminSession = new DefaultCoreSession( 
-                    new LdapPrincipal( adminDn, AuthenticationLevel.STRONG ), directoryService );
-    
-                AddContextPartitionOperationContext opCtx = 
-                    new AddContextPartitionOperationContext( adminSession, partition );
+                CoreSession adminSession = new DefaultCoreSession( new LdapPrincipal( adminDn,
+                    AuthenticationLevel.STRONG ), directoryService );
+
+                AddContextPartitionOperationContext opCtx = new AddContextPartitionOperationContext( adminSession,
+                    partition );
                 addContextPartition( opCtx );
                 initializedPartitions.add( opCtx.getPartition() );
             }
-            
+
             createContextCsnModList();
-            
+
             initialized = true;
         }
         finally
@@ -291,19 +281,18 @@ public class DefaultPartitionNexus  exte
     {
         // initialize system partition first
         Partition override = directoryService.getSystemPartition();
-        
+
         if ( override != null )
         {
-            
+
             // ---------------------------------------------------------------
             // check a few things to make sure users configured it properly
             // ---------------------------------------------------------------
 
-            if ( ! override.getId().equals( "system" ) )
+            if ( !override.getId().equals( "system" ) )
             {
                 throw new ConfigurationException( I18n.err( I18n.ERR_262, override.getId() ) );
             }
-            
 
             system = override;
         }
@@ -312,57 +301,52 @@ public class DefaultPartitionNexus  exte
             // TODO : we have to deal with this case !
         }
 
-        system.initialize( );
-        
-        
+        system.initialize();
+
         // Add root context entry for system partition
         DN systemSuffixDn = new DN( ServerDNConstants.SYSTEM_DN );
         systemSuffixDn.normalize( schemaManager.getNormalizerMapping() );
         Entry systemEntry = new DefaultEntry( schemaManager, systemSuffixDn );
 
         // Add the ObjectClasses
-        systemEntry.put( SchemaConstants.OBJECT_CLASS_AT,
-            SchemaConstants.TOP_OC,
-            SchemaConstants.ORGANIZATIONAL_UNIT_OC,
-            SchemaConstants.EXTENSIBLE_OBJECT_OC
-            );
-        
+        systemEntry.put( SchemaConstants.OBJECT_CLASS_AT, SchemaConstants.TOP_OC,
+            SchemaConstants.ORGANIZATIONAL_UNIT_OC, SchemaConstants.EXTENSIBLE_OBJECT_OC );
+
         // Add some operational attributes
         systemEntry.put( SchemaConstants.CREATORS_NAME_AT, ServerDNConstants.ADMIN_SYSTEM_DN );
         systemEntry.put( SchemaConstants.CREATE_TIMESTAMP_AT, DateUtils.getGeneralizedTime() );
         systemEntry.add( SchemaConstants.ENTRY_CSN_AT, directoryService.getCSN().toString() );
         systemEntry.add( SchemaConstants.ENTRY_UUID_AT, UUID.randomUUID().toString() );
-        systemEntry.put( NamespaceTools.getRdnAttribute( ServerDNConstants.SYSTEM_DN ),
-            NamespaceTools.getRdnValue( ServerDNConstants.SYSTEM_DN ) );
+        systemEntry.put( NamespaceTools.getRdnAttribute( ServerDNConstants.SYSTEM_DN ), NamespaceTools
+            .getRdnValue( ServerDNConstants.SYSTEM_DN ) );
         DN adminDn = new DN( ServerDNConstants.ADMIN_SYSTEM_DN_NORMALIZED );
         adminDn.normalize( schemaManager.getNormalizerMapping() );
-        CoreSession adminSession = new DefaultCoreSession( 
-            new LdapPrincipal( adminDn, AuthenticationLevel.STRONG ), directoryService );
+        CoreSession adminSession = new DefaultCoreSession( new LdapPrincipal( adminDn, AuthenticationLevel.STRONG ),
+            directoryService );
         AddOperationContext addOperationContext = new AddOperationContext( adminSession, systemEntry );
-        
+
         if ( !system.hasEntry( new EntryOperationContext( adminSession, systemEntry.getDn() ) ) )
         {
             system.add( addOperationContext );
         }
-        
+
         String key = system.getSuffixDn().getName();
-        
+
         if ( partitions.containsKey( key ) )
         {
             throw new ConfigurationException( I18n.err( I18n.ERR_263, key ) );
         }
-        
+
         synchronized ( partitionLookupTree )
         {
             partitions.put( key, system );
             partitionLookupTree.add( system.getSuffixDn(), system );
             EntryAttribute namingContexts = rootDSE.get( SchemaConstants.NAMING_CONTEXTS_AT );
-            
+
             if ( namingContexts == null )
             {
-                namingContexts = new DefaultEntryAttribute( 
-                    schemaManager.lookupAttributeTypeRegistry( SchemaConstants.NAMING_CONTEXTS_AT ), 
-                    system.getSuffixDn().getName() );
+                namingContexts = new DefaultEntryAttribute( schemaManager
+                    .lookupAttributeTypeRegistry( SchemaConstants.NAMING_CONTEXTS_AT ), system.getSuffixDn().getName() );
                 rootDSE.put( namingContexts );
             }
             else
@@ -373,8 +357,8 @@ public class DefaultPartitionNexus  exte
 
         return system;
     }
-    
-    
+
+
     /* (non-Javadoc)
      * @see org.apache.directory.server.core.partition.PartitionNexus#destroy()
      */
@@ -393,10 +377,9 @@ public class DefaultPartitionNexus  exte
             {
                 DN adminDn = new DN( ServerDNConstants.ADMIN_SYSTEM_DN_NORMALIZED );
                 adminDn.normalize( schemaManager.getNormalizerMapping() );
-                CoreSession adminSession = new DefaultCoreSession( 
-                    new LdapPrincipal( adminDn, AuthenticationLevel.STRONG ), directoryService );
-                removeContextPartition( new RemoveContextPartitionOperationContext( 
-                    adminSession, new DN( suffix ) ) );
+                CoreSession adminSession = new DefaultCoreSession( new LdapPrincipal( adminDn,
+                    AuthenticationLevel.STRONG ), directoryService );
+                removeContextPartition( new RemoveContextPartitionOperationContext( adminSession, new DN( suffix ) ) );
             }
             catch ( Exception e )
             {
@@ -433,7 +416,7 @@ public class DefaultPartitionNexus  exte
     {
         return schemaManager;
     }
-    
+
 
     /**
      * {@inheritDoc}
@@ -442,8 +425,8 @@ public class DefaultPartitionNexus  exte
     {
         this.schemaManager = schemaManager;
     }
-    
-    
+
+
     /* (non-Javadoc)
      * @see org.apache.directory.server.core.partition.PartitionNexus#getSuffixDn()
      */
@@ -452,7 +435,7 @@ public class DefaultPartitionNexus  exte
         return DN.EMPTY_DN;
     }
 
-    
+
     /* (non-Javadoc)
      * @see org.apache.directory.server.core.partition.PartitionNexus#getSuffix()
      */
@@ -460,8 +443,8 @@ public class DefaultPartitionNexus  exte
     {
         return StringTools.EMPTY;
     }
-    
-    
+
+
     /* (non-Javadoc)
      * @see org.apache.directory.server.core.partition.PartitionNexus#setSuffix(java.lang.String)
      */
@@ -492,23 +475,24 @@ public class DefaultPartitionNexus  exte
         try
         {
             // update only if the CSN changes
-            if( ! lastSyncedCtxCsn.equals( directoryService.getContextCsn() ) )
+            if ( !lastSyncedCtxCsn.equals( directoryService.getContextCsn() ) )
             {
                 lastSyncedCtxCsn = directoryService.getContextCsn();
 
                 EntryAttribute contextCsnAt = mods.get( 0 ).getAttribute();
                 contextCsnAt.clear();
                 contextCsnAt.add( lastSyncedCtxCsn );
-                
+
                 EntryAttribute timeStampAt = mods.get( 1 ).getAttribute();
                 timeStampAt.clear();
                 timeStampAt.add( DateUtils.getGeneralizedTime() );
-                
-                ModifyOperationContext csnModContext = new ModifyOperationContext( directoryService.getAdminSession(), system.getSuffixDn(), mods );
+
+                ModifyOperationContext csnModContext = new ModifyOperationContext( directoryService.getAdminSession(),
+                    system.getSuffixDn(), mods );
                 system.modify( csnModContext );
             }
         }
-        catch( Exception e )
+        catch ( Exception e )
         {
             LOG.warn( "Failed to save the contextCSN attribute value in ou=system entry.", e );
             if ( error == null )
@@ -544,7 +528,8 @@ public class DefaultPartitionNexus  exte
             throw error;
         }
     }
-    
+
+
     // ------------------------------------------------------------------------
     // DirectoryPartition Interface Method Implementations
     // ------------------------------------------------------------------------
@@ -559,8 +544,8 @@ public class DefaultPartitionNexus  exte
         EntryAttribute at = addContext.getEntry().get( SchemaConstants.ENTRY_CSN_AT );
         directoryService.setContextCsn( at.getString() );
     }
-    
-    
+
+
     /* (non-Javadoc)
      * @see org.apache.directory.server.core.partition.PartitionNexus#bind(org.apache.directory.server.core.interceptor.context.BindOperationContext)
      */
@@ -570,7 +555,7 @@ public class DefaultPartitionNexus  exte
         partition.bind( bindContext );
     }
 
-    
+
     /* (non-Javadoc)
      * @see org.apache.directory.server.core.partition.PartitionNexus#compare(org.apache.directory.server.core.interceptor.context.CompareOperationContext)
      */
@@ -578,7 +563,7 @@ public class DefaultPartitionNexus  exte
     {
         Partition partition = getPartition( compareContext.getDn() );
         //AttributeTypeRegistry registry = schemaManager.getAttributeTypeRegistry();
-        
+
         // complain if we do not recognize the attribute being compared
         if ( !schemaManager.getAttributeTypeRegistry().contains( compareContext.getOid() ) )
         {
@@ -586,9 +571,9 @@ public class DefaultPartitionNexus  exte
         }
 
         AttributeType attrType = schemaManager.lookupAttributeTypeRegistry( compareContext.getOid() );
-        
-        EntryAttribute attr = partition.lookup( compareContext.newLookupContext( 
-            compareContext.getDn() ) ).get( attrType.getName() );
+
+        EntryAttribute attr = partition.lookup( compareContext.newLookupContext( compareContext.getDn() ) ).get(
+            attrType.getName() );
 
         // complain if the attribute being compared does not exist in the entry
         if ( attr == null )
@@ -597,7 +582,7 @@ public class DefaultPartitionNexus  exte
         }
 
         // see first if simple match without normalization succeeds
-        if ( attr.contains( (Value<?>)compareContext.getValue()  ) )
+        if ( attr.contains( ( Value<?> ) compareContext.getValue() ) )
         {
             return true;
         }
@@ -612,10 +597,10 @@ public class DefaultPartitionNexus  exte
         Normalizer normalizer = attrType.getEquality().getNormalizer();
         Value<?> reqVal = normalizer.normalize( compareContext.getValue() );
 
-        for ( Value<?> value:attr )
+        for ( Value<?> value : attr )
         {
             Value<?> attrValObj = normalizer.normalize( value );
-            
+
             if ( attrValObj.equals( reqVal ) )
             {
                 return true;
@@ -642,7 +627,7 @@ public class DefaultPartitionNexus  exte
     public boolean hasEntry( EntryOperationContext opContext ) throws Exception
     {
         DN dn = opContext.getDn();
-        
+
         if ( IS_DEBUG )
         {
             LOG.debug( "Check if DN '" + dn + "' exists." );
@@ -674,20 +659,20 @@ public class DefaultPartitionNexus  exte
     public ClonedServerEntry lookup( LookupOperationContext opContext ) throws Exception
     {
         DN dn = opContext.getDn();
-        
+
         // This is for the case we do a lookup on the rootDSE
         if ( dn.size() == 0 )
         {
             ClonedServerEntry retval = new ClonedServerEntry( rootDSE );
             Set<AttributeType> attributeTypes = rootDSE.getAttributeTypes();
-     
-            if ( opContext.getAttrsId() != null && ! opContext.getAttrsId().isEmpty() )
+
+            if ( opContext.getAttrsId() != null && !opContext.getAttrsId().isEmpty() )
             {
-                for ( AttributeType attributeType:attributeTypes )
+                for ( AttributeType attributeType : attributeTypes )
                 {
                     String oid = attributeType.getOid();
-                    
-                    if ( ! opContext.getAttrsId().contains( oid ) )
+
+                    if ( !opContext.getAttrsId().contains( oid ) )
                     {
                         retval.removeAttributes( attributeType );
                     }
@@ -715,7 +700,7 @@ public class DefaultPartitionNexus  exte
         throw new NotImplementedException();
     }
 
-    
+
     /* (non-Javadoc)
      * @see org.apache.directory.server.core.partition.PartitionNexus#modify(org.apache.directory.server.core.interceptor.context.ModifyOperationContext)
      */
@@ -726,14 +711,14 @@ public class DefaultPartitionNexus  exte
         {
             return;
         }
-        
+
         Partition backend = getPartition( modifyContext.getDn() );
 
         String csn = directoryService.getCSN().toString();
         EntryAttribute attribute = new DefaultEntryAttribute( ENTRY_CSN_ATTRIBUTE_TYPE, csn );
         Modification updatedCsn = new DefaultModification( ModificationOperation.REPLACE_ATTRIBUTE, attribute );
         modifyContext.getModItems().add( updatedCsn );
-        
+
         backend.modify( modifyContext );
         directoryService.setContextCsn( csn );
     }
@@ -768,11 +753,11 @@ public class DefaultPartitionNexus  exte
         backend.rename( opContext );
     }
 
-    
+
     private EntryFilteringCursor searchRootDSE( SearchOperationContext searchOperationContext ) throws Exception
     {
         SearchControls searchControls = searchOperationContext.getSearchControls();
-        
+
         String[] ids = searchControls.getReturningAttributes();
 
         // -----------------------------------------------------------
@@ -781,10 +766,10 @@ public class DefaultPartitionNexus  exte
         // -----------------------------------------------------------
         if ( ( ids == null ) || ( ids.length == 0 ) )
         {
-            Entry rootDSE = (Entry)getRootDSE( null ).clone();
+            Entry rootDSE = ( Entry ) getRootDSE( null ).clone();
             return new BaseEntryFilteringCursor( new SingletonCursor<Entry>( rootDSE ), searchOperationContext );
         }
-        
+
         // -----------------------------------------------------------
         // Collect all the real attributes besides 1.1, +, and * and
         // note if we've seen these special attributes as well.
@@ -795,10 +780,10 @@ public class DefaultPartitionNexus  exte
         boolean allOperationalAttributes = searchOperationContext.isAllOperationalAttributes();
         boolean noAttribute = searchOperationContext.isNoAttributes();
 
-        for ( String id:ids )
+        for ( String id : ids )
         {
             String idTrimmed = id.trim();
-            
+
             try
             {
                 realIds.add( schemaManager.getAttributeTypeRegistry().getOidByName( idTrimmed ) );
@@ -815,22 +800,22 @@ public class DefaultPartitionNexus  exte
             Entry serverEntry = new DefaultEntry( schemaManager, DN.EMPTY_DN );
             return new BaseEntryFilteringCursor( new SingletonCursor<Entry>( serverEntry ), searchOperationContext );
         }
-        
+
         // return everything
         if ( allUserAttributes && allOperationalAttributes )
         {
-            Entry rootDSE = (Entry)getRootDSE( null ).clone();
+            Entry rootDSE = ( Entry ) getRootDSE( null ).clone();
             return new BaseEntryFilteringCursor( new SingletonCursor<Entry>( rootDSE ), searchOperationContext );
         }
-        
+
         Entry serverEntry = new DefaultEntry( schemaManager, DN.EMPTY_DN );
-        
+
         Entry rootDSE = getRootDSE( new GetRootDSEOperationContext( searchOperationContext.getSession() ) );
-        
-        for ( EntryAttribute attribute:rootDSE )
+
+        for ( EntryAttribute attribute : rootDSE )
         {
             AttributeType type = schemaManager.lookupAttributeTypeRegistry( attribute.getUpId() );
-            
+
             if ( realIds.contains( type.getOid() ) )
             {
                 serverEntry.put( attribute );
@@ -847,7 +832,7 @@ public class DefaultPartitionNexus  exte
 
         return new BaseEntryFilteringCursor( new SingletonCursor<Entry>( serverEntry ), searchOperationContext );
     }
-    
+
 
     /* (non-Javadoc)
      * @see org.apache.directory.server.core.partition.PartitionNexus#search(org.apache.directory.server.core.interceptor.context.SearchOperationContext)
@@ -857,7 +842,7 @@ public class DefaultPartitionNexus  exte
         DN base = opContext.getDn();
         SearchControls searchCtls = opContext.getSearchControls();
         ExprNode filter = opContext.getFilter();
-        
+
         // TODO since we're handling the *, and + in the EntryFilteringCursor
         // we may not need this code: we need see if this is actually the 
         // case and remove this code.
@@ -867,33 +852,33 @@ public class DefaultPartitionNexus  exte
             // 1) The scope is OBJECT : we have to return the rootDSE entry, filtered
             // 2) The scope is ONELEVEL : we have to return all the Namin
             boolean isObjectScope = searchCtls.getSearchScope() == SearchControls.OBJECT_SCOPE;
-            
+
             boolean isOnelevelScope = searchCtls.getSearchScope() == SearchControls.ONELEVEL_SCOPE;
-            
+
             boolean isSublevelScope = searchCtls.getSearchScope() == SearchControls.SUBTREE_SCOPE;
-            
+
             // test for (objectClass=*)
             boolean isSearchAll = false;
-            
+
             // We have to be careful, as we may have a filter which is not a PresenceFilter
             if ( filter instanceof PresenceNode )
             {
                 isSearchAll = ( ( PresenceNode ) filter ).getAttribute().equals( SchemaConstants.OBJECT_CLASS_AT_OID );
             }
-    
+
             /*
              * if basedn is "", filter is "(objectclass=*)" and scope is object
              * then we have a request for the rootDSE
              */
-            if ( ( filter instanceof PresenceNode)  && isObjectScope && isSearchAll )
+            if ( ( filter instanceof PresenceNode ) && isObjectScope && isSearchAll )
             {
                 return searchRootDSE( opContext );
             }
-            else if ( isObjectScope && ( ! isSearchAll ) )
+            else if ( isObjectScope && ( !isSearchAll ) )
             {
                 return new BaseEntryFilteringCursor( new EmptyCursor<Entry>(), opContext );
             }
-            else if( isOnelevelScope )
+            else if ( isOnelevelScope )
             {
                 List<EntryFilteringCursor> cursors = new ArrayList<EntryFilteringCursor>();
                 for ( Partition p : partitions.values() )
@@ -902,7 +887,7 @@ public class DefaultPartitionNexus  exte
                     opContext.setScope( SearchScope.OBJECT );
                     cursors.add( p.search( opContext ) );
                 }
-                
+
                 return new CursorList( cursors, opContext );
             }
             else if ( isSublevelScope )
@@ -910,28 +895,29 @@ public class DefaultPartitionNexus  exte
                 List<EntryFilteringCursor> cursors = new ArrayList<EntryFilteringCursor>();
                 for ( Partition p : partitions.values() )
                 {
-                    ClonedServerEntry entry = p.lookup( new LookupOperationContext( directoryService.getAdminSession(), p.getSuffixDn() ) );
-                    if( entry != null )
+                    ClonedServerEntry entry = p.lookup( new LookupOperationContext( directoryService.getAdminSession(),
+                        p.getSuffixDn() ) );
+                    if ( entry != null )
                     {
                         Partition backend = getPartition( entry.getDn() );
                         opContext.setDn( entry.getDn() );
                         cursors.add( backend.search( opContext ) );
                     }
                 }
-                
+
                 // don't feed the above Cursors' list to a BaseEntryFilteringCursor it is skipping the naming context entry of each partition 
                 return new CursorList( cursors, opContext );
             }
-    
+
             // TODO : handle searches based on the RootDSE
             throw new LdapNoSuchObjectException();
         }
-    
+
         if ( !base.isNormalized() )
         {
             base.normalize( schemaManager.getNormalizerMapping() );
         }
-        
+
         Partition backend = getPartition( base );
         return backend.search( opContext );
     }
@@ -965,26 +951,26 @@ public class DefaultPartitionNexus  exte
 
         // Turn on default indices
         String key = partition.getSuffixDn().getNormName();
-        
+
         if ( partitions.containsKey( key ) )
         {
             throw new ConfigurationException( I18n.err( I18n.ERR_263, key ) );
         }
 
-        if ( ! partition.isInitialized() )
+        if ( !partition.isInitialized() )
         {
-            partition.initialize( );
+            partition.initialize();
         }
-        
+
         synchronized ( partitionLookupTree )
         {
             DN partitionSuffix = partition.getSuffixDn();
-            
+
             if ( partitionSuffix == null )
             {
                 throw new ConfigurationException( I18n.err( I18n.ERR_267, partition.getId() ) );
             }
-            
+
             partitions.put( partitionSuffix.getNormName(), partition );
             partitionLookupTree.add( partition.getSuffixDn(), partition );
 
@@ -992,8 +978,8 @@ public class DefaultPartitionNexus  exte
 
             if ( namingContexts == null )
             {
-                namingContexts = new DefaultEntryAttribute( 
-                    schemaManager.lookupAttributeTypeRegistry( SchemaConstants.NAMING_CONTEXTS_AT ), partitionSuffix.getName() );
+                namingContexts = new DefaultEntryAttribute( schemaManager
+                    .lookupAttributeTypeRegistry( SchemaConstants.NAMING_CONTEXTS_AT ), partitionSuffix.getName() );
                 rootDSE.put( namingContexts );
             }
             else
@@ -1007,27 +993,28 @@ public class DefaultPartitionNexus  exte
     /* (non-Javadoc)
      * @see org.apache.directory.server.core.partition.PartitionNexus#removeContextPartition(org.apache.directory.server.core.interceptor.context.RemoveContextPartitionOperationContext)
      */
-    public synchronized void removeContextPartition( RemoveContextPartitionOperationContext removeContextPartition ) throws Exception
+    public synchronized void removeContextPartition( RemoveContextPartitionOperationContext removeContextPartition )
+        throws Exception
     {
         // Get the Partition name. It's a DN.
         String key = removeContextPartition.getDn().getNormName();
-        
+
         // Retrieve this partition from the aprtition's table
         Partition partition = partitions.get( key );
-        
+
         if ( partition == null )
         {
             String msg = I18n.err( I18n.ERR_34, key );
             LOG.error( msg );
             throw new NameNotFoundException( msg );
         }
-        
+
         String partitionSuffix = partition.getSuffixDn().getName();
 
         // Retrieve the namingContexts from the RootDSE : the partition
         // suffix must be present in those namingContexts
         EntryAttribute namingContexts = rootDSE.get( SchemaConstants.NAMING_CONTEXTS_AT );
-        
+
         if ( namingContexts != null )
         {
             if ( namingContexts.contains( partitionSuffix ) )
@@ -1064,7 +1051,7 @@ public class DefaultPartitionNexus  exte
     public Partition getPartition( DN dn ) throws Exception
     {
         Partition parent = partitionLookupTree.getParentElement( dn );
-        
+
         if ( parent == null )
         {
             throw new LdapNoSuchObjectException( I18n.err( I18n.ERR_268, dn ) );
@@ -1082,7 +1069,7 @@ public class DefaultPartitionNexus  exte
     public DN getMatchedName( GetMatchedNameOperationContext matchedNameContext ) throws Exception
     {
         DN dn = ( DN ) matchedNameContext.getDn().clone();
-        
+
         while ( dn.size() > 0 )
         {
             if ( hasEntry( new EntryOperationContext( matchedNameContext.getSession(), dn ) ) )
@@ -1172,12 +1159,12 @@ public class DefaultPartitionNexus  exte
     private void unregister( Partition partition ) throws Exception
     {
         EntryAttribute namingContexts = rootDSE.get( SchemaConstants.NAMING_CONTEXTS_AT );
-        
+
         if ( namingContexts != null )
         {
             namingContexts.remove( partition.getSuffixDn().getName() );
         }
-        
+
         partitions.remove( partition.getSuffixDn().getName() );
     }
 
@@ -1198,20 +1185,22 @@ public class DefaultPartitionNexus  exte
     {
         this.directoryService = directoryService;
     }
-    
-    
+
+
     private void createContextCsnModList() throws LdapException
     {
         Modification contextCsnMod = new DefaultModification();
         contextCsnMod.setOperation( ModificationOperation.REPLACE_ATTRIBUTE );
-        DefaultEntryAttribute contextCsnAt = new DefaultEntryAttribute( schemaManager.lookupAttributeTypeRegistry( SchemaConstants.CONTEXT_CSN_AT ) );
+        DefaultEntryAttribute contextCsnAt = new DefaultEntryAttribute( schemaManager
+            .lookupAttributeTypeRegistry( SchemaConstants.CONTEXT_CSN_AT ) );
         contextCsnMod.setAttribute( contextCsnAt );
-        
+
         mods.add( contextCsnMod );
 
         Modification timeStampMod = new DefaultModification();
         timeStampMod.setOperation( ModificationOperation.REPLACE_ATTRIBUTE );
-        DefaultEntryAttribute timeStampAt = new DefaultEntryAttribute( schemaManager.lookupAttributeTypeRegistry( SchemaConstants.MODIFY_TIMESTAMP_AT ) );
+        DefaultEntryAttribute timeStampAt = new DefaultEntryAttribute( schemaManager
+            .lookupAttributeTypeRegistry( SchemaConstants.MODIFY_TIMESTAMP_AT ) );
         timeStampMod.setAttribute( timeStampAt );
 
         mods.add( timeStampMod );

Modified: directory/apacheds/trunk/xdbm-search/src/main/java/org/apache/directory/server/xdbm/AbstractStore.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/xdbm-search/src/main/java/org/apache/directory/server/xdbm/AbstractStore.java?rev=949631&r1=949630&r2=949631&view=diff
==============================================================================
--- directory/apacheds/trunk/xdbm-search/src/main/java/org/apache/directory/server/xdbm/AbstractStore.java (original)
+++ directory/apacheds/trunk/xdbm-search/src/main/java/org/apache/directory/server/xdbm/AbstractStore.java Sun May 30 22:27:57 2010
@@ -959,7 +959,7 @@ public abstract class AbstractStore<E, I
     /**
      * {@inheritDoc}
      */
-    public synchronized void modify( DN dn, List<Modification> mods ) throws Exception
+    public synchronized Entry modify( DN dn, List<Modification> mods ) throws Exception
     {
         ID id = getEntryId( dn );
         Entry entry = master.get( id );
@@ -994,6 +994,8 @@ public abstract class AbstractStore<E, I
         {
             sync();
         }
+
+        return entry;
     }
 
 

Modified: directory/apacheds/trunk/xdbm-search/src/main/java/org/apache/directory/server/xdbm/AbstractXdbmPartition.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/xdbm-search/src/main/java/org/apache/directory/server/xdbm/AbstractXdbmPartition.java?rev=949631&r1=949630&r2=949631&view=diff
==============================================================================
--- directory/apacheds/trunk/xdbm-search/src/main/java/org/apache/directory/server/xdbm/AbstractXdbmPartition.java (original)
+++ directory/apacheds/trunk/xdbm-search/src/main/java/org/apache/directory/server/xdbm/AbstractXdbmPartition.java Sun May 30 22:27:57 2010
@@ -255,7 +255,8 @@ public abstract class AbstractXdbmPartit
 
     public final void modify( ModifyOperationContext modifyContext ) throws Exception
     {
-        store.modify( modifyContext.getDn(), modifyContext.getModItems() );
+        Entry modifiedEntry = store.modify( modifyContext.getDn(), modifyContext.getModItems() );
+        modifyContext.setAlteredEntry( modifiedEntry );
     }
 
 

Modified: directory/apacheds/trunk/xdbm-search/src/main/java/org/apache/directory/server/xdbm/Store.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/xdbm-search/src/main/java/org/apache/directory/server/xdbm/Store.java?rev=949631&r1=949630&r2=949631&view=diff
==============================================================================
--- directory/apacheds/trunk/xdbm-search/src/main/java/org/apache/directory/server/xdbm/Store.java (original)
+++ directory/apacheds/trunk/xdbm-search/src/main/java/org/apache/directory/server/xdbm/Store.java Sun May 30 22:27:57 2010
@@ -481,7 +481,7 @@ public interface Store<E, ID extends Com
     void modify( DN dn, ModificationOperation modOp, Entry mods ) throws Exception;
 
 
-    void modify( DN dn, List<Modification> mods ) throws Exception;
+    Entry modify( DN dn, List<Modification> mods ) throws Exception;
 
 
     /**