public void handleSearchResult( SearchResultEntry syncResult )
{
LOG.debug( "------------- starting handleSearchResult ------------" );
SyncStateValue syncStateCtrl = ( SyncStateValue ) syncResult.getControl( SyncStateValue.OID );
try
{
Entry remoteEntry = syncResult.getEntry();
if ( syncStateCtrl.getCookie() != null )
{
syncCookie = syncStateCtrl.getCookie();
LOG.debug( "assigning the cookie from sync state value control: "
+ Strings.utf8ToString(syncCookie) );
}
SyncStateTypeEnum state = syncStateCtrl.getSyncStateType();
LOG.debug( "state name {}", state.name() );
// check to avoid conversion of UUID from byte[] to String
if ( LOG.isDebugEnabled() )
{
LOG.debug( "entryUUID = {}", Strings.uuidToString(syncStateCtrl.getEntryUUID()) );
}
switch ( state )
{
case ADD:
Dn remoteDn = directoryService.getDnFactory().create( remoteEntry.getDn().getName() );
//System.out.println( "C: ADDING " + remoteDn );
if ( !session.exists( remoteDn ) )
{
//System.out.println( "C: " + remoteDn + " does not exist, adding it" );
LOG.debug( "adding entry with dn {}", remoteDn );
LOG.debug( remoteEntry.toString() );
session.add( new DefaultEntry( schemaManager, remoteEntry ) );
}
else
{
//System.out.println( "C: " + remoteDn + " exists, modifying it" );
LOG.debug( "updating entry in refreshOnly mode {}", remoteDn );
modify( remoteEntry );
}
break;
case MODIFY:
LOG.debug( "modifying entry with dn {}", remoteEntry.getDn().getName() );
//System.out.println( "C: MODIFY " + remoteEntry.getDn() );
modify( remoteEntry );
break;
case MODDN:
SyncModifyDn adsModDnControl = ( SyncModifyDn ) syncResult.getControls().get( SyncModifyDn.OID );
//System.out.println( "C: MODDN " + adsModDnControl.getModDnType() + ", " + adsModDnControl.getEntryDn()
// + ", " + adsModDnControl.getNewSuperiorDn() + ", " + adsModDnControl.getNewRdn() );
//Apache Directory Server's special control
applyModDnOperation( adsModDnControl );
break;
case DELETE:
//System.out.println( "C: DELETING " + remoteEntry.getDn().getNormName() );
LOG.debug( "deleting entry with dn {}", remoteEntry.getDn().getName() );
// incase of a MODDN operation resulting in a branch to be moved out of scope
// ApacheDS replication provider sends a single delete event on the Dn of the moved branch
// so the branch needs to be recursively deleted here
deleteRecursive( remoteEntry.getDn(), null );
break;
case PRESENT:
LOG.debug( "entry present {}", remoteEntry );
break;
}
// store the cookie only if the above operation was successful
if ( syncStateCtrl.getCookie() != null )
{
storeCookie();
}
}
catch ( Exception e )