You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by pa...@apache.org on 2011/10/10 14:52:05 UTC
svn commit: r1180928 -
/directory/studio/trunk/plugins/apacheds.configuration.v2/src/main/java/org/apache/directory/studio/apacheds/configuration/v2/jobs/PartitionsDiffComputer.java
Author: pamarcelot
Date: Mon Oct 10 12:52:05 2011
New Revision: 1180928
URL: http://svn.apache.org/viewvc?rev=1180928&view=rev
Log:
Fixed a bug in the PartitionsDiffComputer which was not reporting the newly created entry in the destination partition.
Modified:
directory/studio/trunk/plugins/apacheds.configuration.v2/src/main/java/org/apache/directory/studio/apacheds/configuration/v2/jobs/PartitionsDiffComputer.java
Modified: directory/studio/trunk/plugins/apacheds.configuration.v2/src/main/java/org/apache/directory/studio/apacheds/configuration/v2/jobs/PartitionsDiffComputer.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/plugins/apacheds.configuration.v2/src/main/java/org/apache/directory/studio/apacheds/configuration/v2/jobs/PartitionsDiffComputer.java?rev=1180928&r1=1180927&r2=1180928&view=diff
==============================================================================
--- directory/studio/trunk/plugins/apacheds.configuration.v2/src/main/java/org/apache/directory/studio/apacheds/configuration/v2/jobs/PartitionsDiffComputer.java (original)
+++ directory/studio/trunk/plugins/apacheds.configuration.v2/src/main/java/org/apache/directory/studio/apacheds/configuration/v2/jobs/PartitionsDiffComputer.java Mon Oct 10 12:52:05 2011
@@ -27,9 +27,9 @@ import java.util.Set;
import org.apache.directory.server.core.entry.ClonedServerEntry;
import org.apache.directory.server.core.filtering.EntryFilteringCursor;
-import org.apache.directory.server.core.api.interceptor.context.LookupOperationContext;
-import org.apache.directory.server.core.api.interceptor.context.SearchOperationContext;
-import org.apache.directory.server.core.api.partition.Partition;
+import org.apache.directory.server.core.interceptor.context.LookupOperationContext;
+import org.apache.directory.server.core.interceptor.context.SearchOperationContext;
+import org.apache.directory.server.core.partition.Partition;
import org.apache.directory.shared.ldap.model.constants.SchemaConstants;
import org.apache.directory.shared.ldap.model.entry.Attribute;
import org.apache.directory.shared.ldap.model.entry.DefaultAttribute;
@@ -230,6 +230,66 @@ public class PartitionsDiffComputer
originalEntries.add( ( ( ClonedServerEntry ) cursor.get() ).getClonedEntry() );
}
}
+
+ // Looking up the destination base entry
+ Entry destinationBaseEntry = destinationPartition
+ .lookup( new LookupOperationContext( null, baseDn, attributeIds ) );
+ if ( destinationBaseEntry == null )
+ {
+ throw new PartitionsDiffException( "Unable to find the base entry in the destination partition." );
+ }
+
+ // Creating the list containing all the destination entries to be processed
+ // and adding it the destination base entry
+ List<Entry> destinationEntries = new ArrayList<Entry>();
+ destinationEntries.add( originalBaseEntry );
+
+ // Looping until all destination entries are being processed
+ while ( destinationEntries.size() > 0 )
+ {
+ // Getting the first destination entry from the list
+ Entry destinationEntry = destinationEntries.remove( 0 );
+
+ // Looking for the equivalent entry in the destination partition
+ Entry originalEntry = originalPartition.lookup( new LookupOperationContext( null, destinationEntry
+ .getDn(), attributeIds ) );
+ // We're only looking for new entries, modified or removed
+ // entries have already been computed
+ if ( originalEntry == null )
+ {
+ // Creating a modification entry to hold all modifications
+ LdifEntry modificationEntry = new LdifEntry();
+ modificationEntry.setDn( destinationEntry.getDn() );
+
+ // Setting the changetype to addition
+ modificationEntry.setChangeType( ChangeType.Add );
+
+ // Copying attributes
+ for ( Attribute attribute : destinationEntry )
+ {
+ modificationEntry.addAttribute( attribute );
+ }
+
+ // Adding the modification entry to the list
+ modifications.add( modificationEntry );
+ }
+
+ // Creating a search operation context to get the children of the current entry
+ SearchOperationContext soc = new SearchOperationContext( null );
+ setReturningAttributes( destinationPartition.getSchemaManager(), attributeIds, soc );
+ soc.setDn( destinationEntry.getDn() );
+ soc.setScope( SearchScope.ONELEVEL );
+ soc.setFilter( FilterParser.parse( destinationPartition.getSchemaManager(), "(objectClass=*)" ) );
+ soc.setAliasDerefMode( AliasDerefMode.DEREF_ALWAYS );
+
+ // Looking for the children of the current entry
+ EntryFilteringCursor cursor = destinationPartition.search( soc );
+
+ while ( cursor.next() )
+ {
+ destinationEntries.add( ( ( ClonedServerEntry ) cursor.get() ).getClonedEntry() );
+ }
+ }
}
catch ( Exception e )
{