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 2011/11/13 00:58:42 UTC
svn commit: r1201362 [6/6] - in /directory/apacheds/branches/apacheds-osgi:
interceptor-kerberos/
interceptor-kerberos/src/main/java/org/apache/directory/server/core/kerberos/
interceptors/admin/
interceptors/admin/src/main/java/org/apache/directory/se...
Modified: directory/apacheds/branches/apacheds-osgi/interceptors/subtree/src/main/java/org/apache/directory/server/core/subtree/SubentryInterceptor.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-osgi/interceptors/subtree/src/main/java/org/apache/directory/server/core/subtree/SubentryInterceptor.java?rev=1201362&r1=1201361&r2=1201362&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-osgi/interceptors/subtree/src/main/java/org/apache/directory/server/core/subtree/SubentryInterceptor.java (original)
+++ directory/apacheds/branches/apacheds-osgi/interceptors/subtree/src/main/java/org/apache/directory/server/core/subtree/SubentryInterceptor.java Sat Nov 12 23:58:40 2011
@@ -31,12 +31,12 @@ import org.apache.directory.server.const
import org.apache.directory.server.constants.ServerDNConstants;
import org.apache.directory.server.core.api.CoreSession;
import org.apache.directory.server.core.api.DirectoryService;
+import org.apache.directory.server.core.api.InterceptorEnum;
import org.apache.directory.server.core.api.LdapPrincipal;
import org.apache.directory.server.core.api.entry.ClonedServerEntry;
import org.apache.directory.server.core.api.filtering.EntryFilter;
import org.apache.directory.server.core.api.filtering.EntryFilteringCursor;
import org.apache.directory.server.core.api.interceptor.BaseInterceptor;
-import org.apache.directory.server.core.api.interceptor.NextInterceptor;
import org.apache.directory.server.core.api.interceptor.context.AddOperationContext;
import org.apache.directory.server.core.api.interceptor.context.DeleteOperationContext;
import org.apache.directory.server.core.api.interceptor.context.ListOperationContext;
@@ -111,7 +111,7 @@ public class SubentryInterceptor extends
/** A reference to the nexus for direct backend operations */
private PartitionNexus nexus;
-
+
/** An enum used for the entries update */
private enum OperationEnum
{
@@ -119,7 +119,15 @@ public class SubentryInterceptor extends
REMOVE,
REPLACE
}
-
+
+ /**
+ * Creates a new instance of SubentryInterceptor
+ */
+ public SubentryInterceptor()
+ {
+ super( InterceptorEnum.SUBENTRY_INTERCEPTOR );
+ }
+
//-------------------------------------------------------------------------------------------
// Search filter methods
@@ -179,10 +187,10 @@ public class SubentryInterceptor extends
SUBENTRY_OPATTRS = new AttributeType[]
{
- ACCESS_CONTROL_SUBENTRIES_AT,
- SUBSCHEMA_SUBENTRY_AT,
- COLLECTIVE_ATTRIBUTE_SUBENTRIES_AT,
- TRIGGER_EXECUTION_SUBENTRIES_AT
+ ACCESS_CONTROL_SUBENTRIES_AT,
+ SUBSCHEMA_SUBENTRY_AT,
+ COLLECTIVE_ATTRIBUTE_SUBENTRIES_AT,
+ TRIGGER_EXECUTION_SUBENTRIES_AT
};
ssParser = new SubtreeSpecificationParser( schemaManager );
@@ -321,7 +329,7 @@ public class SubentryInterceptor extends
if ( opContext.hasRequestControl( SUBENTRY_CONTROL ) )
{
SubentriesDecorator subentriesDecorator = ( SubentriesDecorator ) opContext.getRequestControl( SUBENTRY_CONTROL );
- return ( ( Subentries ) subentriesDecorator.getDecorated() ).isVisible();
+ return subentriesDecorator.getDecorated().isVisible();
}
return false;
@@ -369,7 +377,7 @@ public class SubentryInterceptor extends
case REPLACE :
modifications = getOperationalModsForReplace( subentryDn, candidate );
break;
- */
+ */
}
LOG.debug( "The entry {} has been evaluated to true for subentry {}", candidate.getDn(), subentryDn );
@@ -415,7 +423,7 @@ public class SubentryInterceptor extends
CoreSession session = opContext.getSession();
LookupOperationContext lookupContext = new LookupOperationContext( session, apDn );
lookupContext.setAttrsId( SchemaConstants.ALL_ATTRIBUTES_ARRAY );
-
+
Entry administrationPoint = directoryService.getPartitionNexus().lookup( lookupContext );
// The administrativeRole AT must exist and not be null
@@ -520,7 +528,7 @@ public class SubentryInterceptor extends
*/
SubentryCache subentryCache = directoryService.getSubentryCache();
SubtreeEvaluator evaluator = directoryService.getEvaluator();
-
+
for ( Dn subentryDn : subentryCache )
{
Dn apDn = subentryDn.getParent();
@@ -583,7 +591,7 @@ public class SubentryInterceptor extends
for ( Modification mod : mods )
{
if ( mod.getAttribute().getId().equalsIgnoreCase( SchemaConstants.OBJECT_CLASS_AT ) ||
- mod.getAttribute().getId().equalsIgnoreCase( SchemaConstants.OBJECT_CLASS_AT_OID ) )
+ mod.getAttribute().getId().equalsIgnoreCase( SchemaConstants.OBJECT_CLASS_AT_OID ) )
{
switch ( mod.getOperation() )
{
@@ -620,8 +628,7 @@ public class SubentryInterceptor extends
* Update the list of modifications with a modification associated with a specific
* role, if it's requested.
*/
- private void getOperationalModForReplace( boolean hasRole, AttributeType attributeType, Entry entry, Dn oldDn, Dn newDn, List<Modification> modifications )
- throws LdapInvalidAttributeValueException
+ private void getOperationalModForReplace( boolean hasRole, AttributeType attributeType, Entry entry, Dn oldDn, Dn newDn, List<Modification> modifications ) throws LdapInvalidAttributeValueException
{
String oldDnStr = oldDn.getNormName();
String newDnStr = newDn.getNormName();
@@ -649,8 +656,7 @@ public class SubentryInterceptor extends
* Get the list of modifications to be applied on an entry to inject the operational attributes
* associated with the administrative roles.
*/
- private List<Modification> getOperationalModsForReplace( Dn oldDn, Dn newDn, Subentry subentry, Entry entry )
- throws Exception
+ private List<Modification> getOperationalModsForReplace( Dn oldDn, Dn newDn, Subentry subentry, Entry entry ) throws Exception
{
List<Modification> modifications = new ArrayList<Modification>();
@@ -851,7 +857,7 @@ public class SubentryInterceptor extends
/**
* {@inheritDoc}
*/
- public void add( NextInterceptor next, AddOperationContext addContext ) throws LdapException
+ public void add( AddOperationContext addContext ) throws LdapException
{
Dn dn = addContext.getDn();
Entry entry = addContext.getEntry();
@@ -862,7 +868,7 @@ public class SubentryInterceptor extends
// get the name of the administrative point and its administrativeRole attributes
// The AP must be the parent Dn, but we also have to check that the given Dn
// is not the rootDSE or a NamingContext
- if ( dn.isRootDSE() || isNamingContext( dn ) )
+ if ( dn.isRootDse() || isNamingContext( dn ) )
{
// Not allowed : we can't get a parent in those cases
throw new LdapOtherException( "Cannot find an AdministrativePoint for " + dn );
@@ -896,7 +902,7 @@ public class SubentryInterceptor extends
directoryService.getSubentryCache().addSubentry( dn, subentry );
// Now inject the subentry into the backend
- next.add( addContext );
+ next( addContext );
/* ----------------------------------------------------------------
* Find the baseDn for the subentry and use that to search the tree
@@ -966,7 +972,7 @@ public class SubentryInterceptor extends
addContext.setEntry( entry );
// Propagate the addition down to the backend.
- next.add( addContext );
+ next( addContext );
}
}
@@ -974,7 +980,7 @@ public class SubentryInterceptor extends
/**
* {@inheritDoc}
*/
- public void delete( NextInterceptor next, DeleteOperationContext deleteContext ) throws LdapException
+ public void delete( DeleteOperationContext deleteContext ) throws LdapException
{
Dn dn = deleteContext.getDn();
Entry entry = deleteContext.getEntry();
@@ -1004,12 +1010,12 @@ public class SubentryInterceptor extends
directoryService.getSubentryCache().removeSubentry( dn );
// Now delete the subentry itself
- next.delete( deleteContext );
+ next( deleteContext );
}
else
{
// TODO : deal with AP removal.
- next.delete( deleteContext );
+ next( deleteContext );
}
}
@@ -1017,10 +1023,9 @@ public class SubentryInterceptor extends
/**
* {@inheritDoc}
*/
- public EntryFilteringCursor list( NextInterceptor nextInterceptor, ListOperationContext listContext )
- throws LdapException
+ public EntryFilteringCursor list( ListOperationContext listContext ) throws LdapException
{
- EntryFilteringCursor cursor = nextInterceptor.list( listContext );
+ EntryFilteringCursor cursor = next( listContext );
if ( !isSubentryVisible( listContext ) )
{
@@ -1034,7 +1039,7 @@ public class SubentryInterceptor extends
/**
* {@inheritDoc}
*/
- public void modify( NextInterceptor next, ModifyOperationContext modifyContext ) throws LdapException
+ public void modify( ModifyOperationContext modifyContext ) throws LdapException
{
Dn dn = modifyContext.getDn();
List<Modification> modifications = modifyContext.getModItems();
@@ -1086,7 +1091,7 @@ public class SubentryInterceptor extends
subentry.setAdministrativeRoles( getSubentryTypes( entry, modifications ) );
directoryService.getSubentryCache().addSubentry( dn, subentry );
- next.modify( modifyContext );
+ next( modifyContext );
// search for all entries selected by the old SS and remove references to subentry
Dn apName = dn.getParent();
@@ -1118,7 +1123,7 @@ public class SubentryInterceptor extends
getOperationalModsForRemove( dn, candidate ) ) );
}
}
-
+
subentries.close();
}
catch ( Exception e )
@@ -1181,7 +1186,7 @@ public class SubentryInterceptor extends
}
else
{
- next.modify( modifyContext );
+ next( modifyContext );
if ( !containsSubentryOC )
{
@@ -1226,7 +1231,7 @@ public class SubentryInterceptor extends
* @param moveContext The context containing all the needed informations to proceed
* @throws LdapException If the move failed
*/
- public void move( NextInterceptor next, MoveOperationContext moveContext ) throws LdapException
+ public void move( MoveOperationContext moveContext ) throws LdapException
{
Dn oldDn = moveContext.getDn();
Dn newSuperiorDn = moveContext.getNewSuperior();
@@ -1255,7 +1260,7 @@ public class SubentryInterceptor extends
directoryService.getSubentryCache().addSubentry( newName, subentry );
- next.move( moveContext );
+ next( moveContext );
subentry = directoryService.getSubentryCache().getSubentry( newName );
@@ -1319,7 +1324,7 @@ public class SubentryInterceptor extends
}
// Move the entry
- next.move( moveContext );
+ next( moveContext );
// calculate the new Dn now for use below to modify subentry operational
// attributes contained within this regular entry with name changes
@@ -1335,7 +1340,10 @@ public class SubentryInterceptor extends
}
- public void moveAndRename( NextInterceptor next, MoveAndRenameOperationContext moveAndRenameContext ) throws LdapException
+ /**
+ * {@inheritDoc}
+ */
+ public void moveAndRename( MoveAndRenameOperationContext moveAndRenameContext ) throws LdapException
{
Dn oldDn = moveAndRenameContext.getDn();
Dn newSuperiorDn = moveAndRenameContext.getNewSuperiorDn();
@@ -1356,7 +1364,7 @@ public class SubentryInterceptor extends
directoryService.getSubentryCache().addSubentry( newName, subentry );
- next.moveAndRename( moveAndRenameContext );
+ next( moveAndRenameContext );
subentry = directoryService.getSubentryCache().getSubentry( newName );
@@ -1412,7 +1420,7 @@ public class SubentryInterceptor extends
throw new LdapSchemaViolationException( ResultCodeEnum.NOT_ALLOWED_ON_RDN, msg );
}
- next.moveAndRename( moveAndRenameContext );
+ next( moveAndRenameContext );
// calculate the new Dn now for use below to modify subentry operational
// attributes contained within this regular entry with name changes
@@ -1427,7 +1435,10 @@ public class SubentryInterceptor extends
}
- public void rename( NextInterceptor next, RenameOperationContext renameContext ) throws LdapException
+ /**
+ * {@inheritDoc}
+ */
+ public void rename( RenameOperationContext renameContext ) throws LdapException
{
Dn oldDn = renameContext.getDn();
@@ -1447,7 +1458,7 @@ public class SubentryInterceptor extends
newName.apply( schemaManager );
directoryService.getSubentryCache().addSubentry( newName, subentry );
- next.rename( renameContext );
+ next( renameContext );
subentry = directoryService.getSubentryCache().getSubentry( newName );
ExprNode filter = new PresenceNode( OBJECT_CLASS_AT );
@@ -1502,7 +1513,7 @@ public class SubentryInterceptor extends
throw new LdapSchemaViolationException( ResultCodeEnum.NOT_ALLOWED_ON_RDN, msg );
}
- next.rename( renameContext );
+ next( renameContext );
// calculate the new Dn now for use below to modify subentry operational
// attributes contained within this regular entry with name changes
@@ -1521,10 +1532,9 @@ public class SubentryInterceptor extends
/**
* {@inheritDoc}
*/
- public EntryFilteringCursor search( NextInterceptor nextInterceptor, SearchOperationContext searchContext )
- throws LdapException
+ public EntryFilteringCursor search( SearchOperationContext searchContext ) throws LdapException
{
- EntryFilteringCursor cursor = nextInterceptor.search( searchContext );
+ EntryFilteringCursor cursor = next( searchContext );
// object scope searches by default return subentries
if ( searchContext.getScope() == SearchScope.OBJECT )
Propchange: directory/apacheds/branches/apacheds-osgi/interceptors/trigger/
------------------------------------------------------------------------------
--- svn:mergeinfo (added)
+++ svn:mergeinfo Sat Nov 12 23:58:40 2011
@@ -0,0 +1,10 @@
+/directory/apacheds/branches/apacheds-codec-merge/interceptors/trigger:982369-987590
+/directory/apacheds/branches/apacheds-config/interceptors/trigger:1023442-1029077
+/directory/apacheds/branches/apacheds-kerberos-codec-2.0/interceptors/trigger:1040956-1043765
+/directory/apacheds/branches/apacheds-replication/interceptors/trigger:749790-764110
+/directory/apacheds/branches/apacheds-schema/interceptors/trigger:806623-896441
+/directory/apacheds/branches/apacheds-subtree/interceptors/trigger:965203-965686
+/directory/apacheds/branches/milestones/interceptors/trigger:1072812-1075328
+/directory/apacheds/branches/xdbm-refactoring/interceptors/trigger:945827-946347
+/directory/apacheds/trunk/interceptors/trigger:1066126-1067785,1068026-1072718,1072800-1075329,1185681-1201347
+/directory/studio/trunk/interceptors/trigger:1067786-1067997
Modified: directory/apacheds/branches/apacheds-osgi/interceptors/trigger/src/main/java/org/apache/directory/server/core/trigger/TriggerInterceptor.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-osgi/interceptors/trigger/src/main/java/org/apache/directory/server/core/trigger/TriggerInterceptor.java?rev=1201362&r1=1201361&r2=1201362&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-osgi/interceptors/trigger/src/main/java/org/apache/directory/server/core/trigger/TriggerInterceptor.java (original)
+++ directory/apacheds/branches/apacheds-osgi/interceptors/trigger/src/main/java/org/apache/directory/server/core/trigger/TriggerInterceptor.java Sat Nov 12 23:58:40 2011
@@ -6,16 +6,16 @@
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
- *
+ *
* http://www.apache.org/licenses/LICENSE-2.0
- *
+ *
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
- * under the License.
- *
+ * under the License.
+ *
*/
package org.apache.directory.server.core.trigger;
@@ -29,9 +29,9 @@ import java.util.Map;
import org.apache.directory.server.core.api.CoreSession;
import org.apache.directory.server.core.api.DirectoryService;
+import org.apache.directory.server.core.api.InterceptorEnum;
import org.apache.directory.server.core.api.entry.ClonedServerEntry;
import org.apache.directory.server.core.api.interceptor.BaseInterceptor;
-import org.apache.directory.server.core.api.interceptor.NextInterceptor;
import org.apache.directory.server.core.api.interceptor.context.AddOperationContext;
import org.apache.directory.server.core.api.interceptor.context.DeleteOperationContext;
import org.apache.directory.server.core.api.interceptor.context.LookupOperationContext;
@@ -92,11 +92,20 @@ public class TriggerInterceptor extends
private TriggerExecutionAuthorizer triggerExecutionAuthorizer = new SimpleTriggerExecutionAuthorizer();
private StoredProcExecutionManager manager;
-
+
/** The SubentryUtils instance */
private static SubentryUtils subentryUtils;
/**
+ * Creates a new instance of a TriggerInterceptor.
+ */
+ public TriggerInterceptor()
+ {
+ super( InterceptorEnum.TRIGGER_INTERCEPTOR );
+ }
+
+
+ /**
* Adds prescriptiveTrigger TriggerSpecificaitons to a collection of
* TriggerSpeficaitions by accessing the triggerSpecCache. The trigger
* specification cache is accessed for each trigger subentry associated
@@ -109,7 +118,7 @@ public class TriggerInterceptor extends
* @param dn the normalized distinguished name of the entry
* @param entry the target entry that is considered as the trigger source
* @throws Exception if there are problems accessing attribute values
- * @param proxy the partition nexus proxy
+ * @param proxy the partition nexus proxy
*/
private void addPrescriptiveTriggerSpecs( OperationContext opContext, List<TriggerSpecification> triggerSpecs,
Dn dn, Entry entry ) throws LdapException
@@ -131,7 +140,7 @@ public class TriggerInterceptor extends
CoreSession session = opContext.getSession();
LookupOperationContext lookupContext = new LookupOperationContext( session, parentDn );
lookupContext.setAttrsId( SchemaConstants.ALL_ATTRIBUTES_ARRAY );
-
+
entry = directoryService.getPartitionNexus().lookup( lookupContext );
}
@@ -196,7 +205,7 @@ public class TriggerInterceptor extends
*
* @param triggerSpecs the trigger specifications
* @param ldapOperation the ldap operation being performed
- * @return the set of trigger specs for a trigger action
+ * @return the set of trigger specs for a trigger action
*/
public Map<ActionTime, List<TriggerSpecification>> getActionTimeMappedTriggerSpecsForOperation(
List<TriggerSpecification> triggerSpecs, LdapOperation ldapOperation )
@@ -252,13 +261,16 @@ public class TriggerInterceptor extends
manager = new StoredProcExecutionManager( spContainer, spEngineConfigs );
this.enabled = true; // TODO: Get this from the configuration if needed.
-
+
// Init the SubentryUtils instance
subentryUtils = new SubentryUtils( directoryService );
}
- public void add( NextInterceptor next, AddOperationContext addContext ) throws LdapException
+ /**
+ * {@inheritDoc}
+ */
+ public void add( AddOperationContext addContext ) throws LdapException
{
Dn name = addContext.getDn();
Entry entry = addContext.getEntry();
@@ -266,7 +278,7 @@ public class TriggerInterceptor extends
// Bypass trigger handling if the service is disabled.
if ( !enabled )
{
- next.add( addContext );
+ next( addContext );
return;
}
@@ -284,7 +296,7 @@ public class TriggerInterceptor extends
Map<ActionTime, List<TriggerSpecification>> triggerMap = getActionTimeMappedTriggerSpecsForOperation(
triggerSpecs, LdapOperation.ADD );
- next.add( addContext );
+ next( addContext );
triggerSpecCache.subentryAdded( name, entry );
// Fire AFTER Triggers.
@@ -293,14 +305,17 @@ public class TriggerInterceptor extends
}
- public void delete( NextInterceptor next, DeleteOperationContext deleteContext ) throws LdapException
+ /**
+ * {@inheritDoc}
+ */
+ public void delete( DeleteOperationContext deleteContext ) throws LdapException
{
Dn name = deleteContext.getDn();
// Bypass trigger handling if the service is disabled.
if ( !enabled )
{
- next.delete( deleteContext );
+ next( deleteContext );
return;
}
@@ -317,7 +332,7 @@ public class TriggerInterceptor extends
Map<ActionTime, List<TriggerSpecification>> triggerMap = getActionTimeMappedTriggerSpecsForOperation(
triggerSpecs, LdapOperation.DELETE );
- next.delete( deleteContext );
+ next( deleteContext );
triggerSpecCache.subentryDeleted( name, deletedEntry );
@@ -327,12 +342,15 @@ public class TriggerInterceptor extends
}
- public void modify( NextInterceptor next, ModifyOperationContext modifyContext ) throws LdapException
+ /**
+ * {@inheritDoc}
+ */
+ public void modify( ModifyOperationContext modifyContext ) throws LdapException
{
// Bypass trigger handling if the service is disabled.
if ( !enabled )
{
- next.modify( modifyContext );
+ next( modifyContext );
return;
}
@@ -351,7 +369,7 @@ public class TriggerInterceptor extends
Map<ActionTime, List<TriggerSpecification>> triggerMap = getActionTimeMappedTriggerSpecsForOperation(
triggerSpecs, LdapOperation.MODIFY );
- next.modify( modifyContext );
+ next( modifyContext );
triggerSpecCache.subentryModified( modifyContext, originalEntry );
@@ -361,51 +379,85 @@ public class TriggerInterceptor extends
}
- public void rename( NextInterceptor next, RenameOperationContext renameContext ) throws LdapException
+ /**
+ * {@inheritDoc}
+ */
+ public void move( MoveOperationContext moveContext ) throws LdapException
{
- Dn name = renameContext.getDn();
- Rdn newRdn = renameContext.getNewRdn();
- boolean deleteOldRn = renameContext.getDeleteOldRdn();
-
// Bypass trigger handling if the service is disabled.
if ( !enabled )
{
- next.rename( renameContext );
+ next( moveContext );
return;
}
- // Gather supplementary data.
- Entry renamedEntry = ((ClonedServerEntry)renameContext.getEntry()).getClonedEntry();
+ Rdn rdn = moveContext.getRdn();
+ Dn dn = moveContext.getDn();
+ Dn newDn = moveContext.getNewDn();
+ Dn oldSuperior = moveContext.getOldSuperior();
+ Dn newSuperior = moveContext.getNewSuperior();
- // @TODO : To be completely reviewed !!!
- Rdn oldRdn = name.getRdn();
- Dn oldSuperiorDn = name.getParent();
- Dn newSuperiorDn = oldSuperiorDn;
- Dn oldDn = name;
- Dn newDn = name;
- newDn = newDn.add( newRdn );
+ // Gather supplementary data.
+ Entry movedEntry = moveContext.getOriginalEntry();
- StoredProcedureParameterInjector injector = new ModifyDNStoredProcedureParameterInjector( renameContext,
- deleteOldRn, oldRdn, newRdn, oldSuperiorDn, newSuperiorDn, oldDn, newDn);
+ //Rdn newRDN = dn.getRdn();
- // Gather Trigger Specifications which apply to the entry being renamed.
- List<TriggerSpecification> triggerSpecs = new ArrayList<TriggerSpecification>();
- addPrescriptiveTriggerSpecs( renameContext, triggerSpecs, name, renamedEntry );
- addEntryTriggerSpecs( triggerSpecs, renamedEntry );
+ StoredProcedureParameterInjector injector = new ModifyDNStoredProcedureParameterInjector( moveContext, false,
+ rdn, rdn, oldSuperior, newSuperior, dn, newDn );
- Map<ActionTime, List<TriggerSpecification>> triggerMap = getActionTimeMappedTriggerSpecsForOperation(
- triggerSpecs, LdapOperation.MODIFYDN_RENAME );
+ // Gather Trigger Specifications which apply to the entry being exported.
+ List<TriggerSpecification> exportTriggerSpecs = new ArrayList<TriggerSpecification>();
+ addPrescriptiveTriggerSpecs( moveContext, exportTriggerSpecs, dn, movedEntry );
+ addEntryTriggerSpecs( exportTriggerSpecs, movedEntry );
- next.rename( renameContext );
- triggerSpecCache.subentryRenamed( name, newDn);
+ // Get the entry again without operational attributes
+ // because access control subentry operational attributes
+ // will not be valid at the new location.
+ // This will certainly be fixed by the SubentryInterceptor,
+ // but after this service.
+ CoreSession session = moveContext.getSession();
+ LookupOperationContext lookupContext = new LookupOperationContext( session, dn, SchemaConstants.ALL_USER_ATTRIBUTES_ARRAY );
+
+ Entry importedEntry = directoryService.getPartitionNexus().lookup( lookupContext );
+
+ // As the target entry does not exist yet and so
+ // its subentry operational attributes are not there,
+ // we need to construct an entry to represent it
+ // at least with minimal requirements which are object class
+ // and access control subentry operational attributes.
+ Entry fakeImportedEntry = subentryUtils.getSubentryAttributes( newDn, importedEntry );
+
+ for ( Attribute attribute : importedEntry )
+ {
+ fakeImportedEntry.put( attribute );
+ }
+
+ // Gather Trigger Specifications which apply to the entry being imported.
+ // Note: Entry Trigger Specifications are not valid for Import.
+ List<TriggerSpecification> importTriggerSpecs = new ArrayList<TriggerSpecification>();
+ addPrescriptiveTriggerSpecs( moveContext, importTriggerSpecs, newDn, fakeImportedEntry );
+
+ Map<ActionTime, List<TriggerSpecification>> exportTriggerMap = getActionTimeMappedTriggerSpecsForOperation(
+ exportTriggerSpecs, LdapOperation.MODIFYDN_EXPORT );
+
+ Map<ActionTime, List<TriggerSpecification>> importTriggerMap = getActionTimeMappedTriggerSpecsForOperation(
+ importTriggerSpecs, LdapOperation.MODIFYDN_IMPORT );
+
+ next( moveContext );
+ triggerSpecCache.subentryRenamed( dn, newDn );
// Fire AFTER Triggers.
- List<TriggerSpecification> afterTriggerSpecs = triggerMap.get( ActionTime.AFTER );
- executeTriggers( renameContext, afterTriggerSpecs, injector );
+ List<TriggerSpecification> afterExportTriggerSpecs = exportTriggerMap.get( ActionTime.AFTER );
+ List<TriggerSpecification> afterImportTriggerSpecs = importTriggerMap.get( ActionTime.AFTER );
+ executeTriggers( moveContext, afterExportTriggerSpecs, injector );
+ executeTriggers( moveContext, afterImportTriggerSpecs, injector );
}
- public void moveAndRename( NextInterceptor next, MoveAndRenameOperationContext moveAndRenameContext ) throws LdapException
+ /**
+ * {@inheritDoc}
+ */
+ public void moveAndRename( MoveAndRenameOperationContext moveAndRenameContext ) throws LdapException
{
Dn oldDn = moveAndRenameContext.getDn();
Dn newSuperiorDn = moveAndRenameContext.getNewSuperiorDn();
@@ -415,11 +467,11 @@ public class TriggerInterceptor extends
// Bypass trigger handling if the service is disabled.
if ( !enabled )
{
- next.moveAndRename( moveAndRenameContext );
+ next( moveAndRenameContext );
return;
}
- // Gather supplementary data.
+ // Gather supplementary data.
Entry movedEntry = moveAndRenameContext.getOriginalEntry();
Rdn oldRdn = oldDn.getRdn();
@@ -468,7 +520,7 @@ public class TriggerInterceptor extends
Map<ActionTime, List<TriggerSpecification>> importTriggerMap = getActionTimeMappedTriggerSpecsForOperation(
importTriggerSpecs, LdapOperation.MODIFYDN_IMPORT );
- next.moveAndRename( moveAndRenameContext );
+ next( moveAndRenameContext );
triggerSpecCache.subentryRenamed( oldDN, newDn);
// Fire AFTER Triggers.
@@ -482,75 +534,47 @@ public class TriggerInterceptor extends
/**
* {@inheritDoc}
*/
- public void move( NextInterceptor next, MoveOperationContext moveContext ) throws LdapException
+ public void rename( RenameOperationContext renameContext ) throws LdapException
{
+ Dn name = renameContext.getDn();
+ Rdn newRdn = renameContext.getNewRdn();
+ boolean deleteOldRn = renameContext.getDeleteOldRdn();
+
// Bypass trigger handling if the service is disabled.
if ( !enabled )
{
- next.move( moveContext );
+ next( renameContext );
return;
}
- Rdn rdn = moveContext.getRdn();
- Dn dn = moveContext.getDn();
- Dn newDn = moveContext.getNewDn();
- Dn oldSuperior = moveContext.getOldSuperior();
- Dn newSuperior = moveContext.getNewSuperior();
-
- // Gather supplementary data.
- Entry movedEntry = moveContext.getOriginalEntry();
-
- //Rdn newRDN = dn.getRdn();
-
- StoredProcedureParameterInjector injector = new ModifyDNStoredProcedureParameterInjector( moveContext, false,
- rdn, rdn, oldSuperior, newSuperior, dn, newDn );
-
- // Gather Trigger Specifications which apply to the entry being exported.
- List<TriggerSpecification> exportTriggerSpecs = new ArrayList<TriggerSpecification>();
- addPrescriptiveTriggerSpecs( moveContext, exportTriggerSpecs, dn, movedEntry );
- addEntryTriggerSpecs( exportTriggerSpecs, movedEntry );
-
- // Get the entry again without operational attributes
- // because access control subentry operational attributes
- // will not be valid at the new location.
- // This will certainly be fixed by the SubentryInterceptor,
- // but after this service.
- CoreSession session = moveContext.getSession();
- LookupOperationContext lookupContext = new LookupOperationContext( session, dn, SchemaConstants.ALL_USER_ATTRIBUTES_ARRAY );
-
- Entry importedEntry = directoryService.getPartitionNexus().lookup( lookupContext );
-
- // As the target entry does not exist yet and so
- // its subentry operational attributes are not there,
- // we need to construct an entry to represent it
- // at least with minimal requirements which are object class
- // and access control subentry operational attributes.
- Entry fakeImportedEntry = subentryUtils.getSubentryAttributes( newDn, importedEntry );
+ // Gather supplementary data.
+ Entry renamedEntry = ((ClonedServerEntry)renameContext.getEntry()).getClonedEntry();
- for ( Attribute attribute : importedEntry )
- {
- fakeImportedEntry.put( attribute );
- }
+ // @TODO : To be completely reviewed !!!
+ Rdn oldRdn = name.getRdn();
+ Dn oldSuperiorDn = name.getParent();
+ Dn newSuperiorDn = oldSuperiorDn;
+ Dn oldDn = name;
+ Dn newDn = name;
+ newDn = newDn.add( newRdn );
- // Gather Trigger Specifications which apply to the entry being imported.
- // Note: Entry Trigger Specifications are not valid for Import.
- List<TriggerSpecification> importTriggerSpecs = new ArrayList<TriggerSpecification>();
- addPrescriptiveTriggerSpecs( moveContext, importTriggerSpecs, newDn, fakeImportedEntry );
+ StoredProcedureParameterInjector injector = new ModifyDNStoredProcedureParameterInjector( renameContext,
+ deleteOldRn, oldRdn, newRdn, oldSuperiorDn, newSuperiorDn, oldDn, newDn);
- Map<ActionTime, List<TriggerSpecification>> exportTriggerMap = getActionTimeMappedTriggerSpecsForOperation(
- exportTriggerSpecs, LdapOperation.MODIFYDN_EXPORT );
+ // Gather Trigger Specifications which apply to the entry being renamed.
+ List<TriggerSpecification> triggerSpecs = new ArrayList<TriggerSpecification>();
+ addPrescriptiveTriggerSpecs( renameContext, triggerSpecs, name, renamedEntry );
+ addEntryTriggerSpecs( triggerSpecs, renamedEntry );
- Map<ActionTime, List<TriggerSpecification>> importTriggerMap = getActionTimeMappedTriggerSpecsForOperation(
- importTriggerSpecs, LdapOperation.MODIFYDN_IMPORT );
+ Map<ActionTime, List<TriggerSpecification>> triggerMap = getActionTimeMappedTriggerSpecsForOperation(
+ triggerSpecs, LdapOperation.MODIFYDN_RENAME );
- next.move( moveContext );
- triggerSpecCache.subentryRenamed( dn, newDn );
+ next( renameContext );
+ triggerSpecCache.subentryRenamed( name, newDn);
// Fire AFTER Triggers.
- List<TriggerSpecification> afterExportTriggerSpecs = exportTriggerMap.get( ActionTime.AFTER );
- List<TriggerSpecification> afterImportTriggerSpecs = importTriggerMap.get( ActionTime.AFTER );
- executeTriggers( moveContext, afterExportTriggerSpecs, injector );
- executeTriggers( moveContext, afterImportTriggerSpecs, injector );
+ List<TriggerSpecification> afterTriggerSpecs = triggerMap.get( ActionTime.AFTER );
+ executeTriggers( renameContext, afterTriggerSpecs, injector );
}
@@ -589,7 +613,7 @@ public class TriggerInterceptor extends
{
List<Object> returnValues = new ArrayList<Object>();
List<SPSpec> spSpecs = tsec.getSPSpecs();
-
+
for ( SPSpec spSpec : spSpecs )
{
List<Object> arguments = new ArrayList<Object>();
@@ -609,7 +633,7 @@ public class TriggerInterceptor extends
{
Entry spUnit = manager.findStoredProcUnit( opContext.getSession(), procedure );
StoredProcEngine engine = manager.getStoredProcEngineInstance( spUnit );
-
+
return engine.invokeProcedure( opContext.getSession(), procedure, values );
}
catch ( Exception e )