You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by er...@apache.org on 2006/05/04 15:14:17 UTC
svn commit: r399696 - in
/directory/trunks/apacheds/core/src/main/java/org/apache/directory/server/core:
configuration/StartupConfiguration.java trigger/TriggerService.java
trigger/TriggerSpecCache.java
Author: ersiner
Date: Thu May 4 06:14:16 2006
New Revision: 399696
URL: http://svn.apache.org/viewcvs?rev=399696&view=rev
Log:
Made some progress about triggers. The way is more obvious now. We just need coding.
Implemented a verbose version of delete trigger handler. (It prints some data to stdout.)
Currently there is not SP stuff.
Added triggerService to list of interceptors.
Modified:
directory/trunks/apacheds/core/src/main/java/org/apache/directory/server/core/configuration/StartupConfiguration.java
directory/trunks/apacheds/core/src/main/java/org/apache/directory/server/core/trigger/TriggerService.java
directory/trunks/apacheds/core/src/main/java/org/apache/directory/server/core/trigger/TriggerSpecCache.java
Modified: directory/trunks/apacheds/core/src/main/java/org/apache/directory/server/core/configuration/StartupConfiguration.java
URL: http://svn.apache.org/viewcvs/directory/trunks/apacheds/core/src/main/java/org/apache/directory/server/core/configuration/StartupConfiguration.java?rev=399696&r1=399695&r2=399696&view=diff
==============================================================================
--- directory/trunks/apacheds/core/src/main/java/org/apache/directory/server/core/configuration/StartupConfiguration.java (original)
+++ directory/trunks/apacheds/core/src/main/java/org/apache/directory/server/core/configuration/StartupConfiguration.java Thu May 4 06:14:16 2006
@@ -43,6 +43,7 @@
import org.apache.directory.server.core.schema.SchemaService;
import org.apache.directory.server.core.schema.bootstrap.*;
import org.apache.directory.server.core.subtree.SubentryService;
+import org.apache.directory.server.core.trigger.TriggerService;
/**
@@ -194,6 +195,11 @@
interceptorCfg = new MutableInterceptorConfiguration();
interceptorCfg.setName( "eventService" );
interceptorCfg.setInterceptor( new EventService() );
+ list.add( interceptorCfg );
+
+ interceptorCfg = new MutableInterceptorConfiguration();
+ interceptorCfg.setName( "triggerService" );
+ interceptorCfg.setInterceptor( new TriggerService() );
list.add( interceptorCfg );
setInterceptorConfigurations( list );
Modified: directory/trunks/apacheds/core/src/main/java/org/apache/directory/server/core/trigger/TriggerService.java
URL: http://svn.apache.org/viewcvs/directory/trunks/apacheds/core/src/main/java/org/apache/directory/server/core/trigger/TriggerService.java?rev=399696&r1=399695&r2=399696&view=diff
==============================================================================
--- directory/trunks/apacheds/core/src/main/java/org/apache/directory/server/core/trigger/TriggerService.java (original)
+++ directory/trunks/apacheds/core/src/main/java/org/apache/directory/server/core/trigger/TriggerService.java Thu May 4 06:14:16 2006
@@ -18,9 +18,17 @@
import java.text.ParseException;
+import java.util.ArrayList;
import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
import javax.naming.Name;
+import javax.naming.NamingEnumeration;
import javax.naming.NamingException;
import javax.naming.directory.Attribute;
import javax.naming.directory.Attributes;
@@ -34,12 +42,16 @@
import org.apache.directory.server.core.invocation.Invocation;
import org.apache.directory.server.core.invocation.InvocationStack;
import org.apache.directory.server.core.jndi.ServerContext;
+import org.apache.directory.server.core.partition.DirectoryPartitionNexus;
import org.apache.directory.server.core.partition.DirectoryPartitionNexusProxy;
import org.apache.directory.server.core.schema.AttributeTypeRegistry;
import org.apache.directory.server.core.schema.ConcreteNameComponentNormalizer;
+import org.apache.directory.server.core.subtree.SubentryService;
import org.apache.directory.shared.ldap.exception.LdapNamingException;
import org.apache.directory.shared.ldap.message.ResultCodeEnum;
import org.apache.directory.shared.ldap.name.DnParser;
+import org.apache.directory.shared.ldap.trigger.ActionTime;
+import org.apache.directory.shared.ldap.trigger.LdapOperation;
import org.apache.directory.shared.ldap.trigger.TriggerSpecification;
import org.apache.directory.shared.ldap.trigger.TriggerSpecificationParser;
import org.slf4j.Logger;
@@ -78,7 +90,7 @@
/** the attribute type registry */
private AttributeTypeRegistry attrRegistry;
/** whether or not this interceptor is activated */
- private boolean enabled = false;
+ private boolean enabled = true;
/**
* Adds prescriptiveTrigger TriggerSpecificaitons to a collection of
@@ -177,6 +189,7 @@
triggerParser = new TriggerSpecificationParser( new ConcreteNameComponentNormalizer( attrRegistry ) );
dnParser = new DnParser( new ConcreteNameComponentNormalizer( attrRegistry ) );
chain = dirServCfg.getInterceptorChain();
+ this.enabled = true; // TODO: get this from the configuration if needed
}
@@ -197,7 +210,49 @@
/**
*
*/
+ next.add( upName, normName, entry );
+ triggerSpecCache.subentryAdded( normName, entry );
+
+ }
+
+ public Map getActionTimeMappedTriggerSpecs( List triggerSpecs, LdapOperation ldapOperation )
+ {
+ List beforeTriggerSpecs = new ArrayList();
+ List insteadofTriggerSpecs = new ArrayList();
+ List afterTriggerSpecs = new ArrayList();
+ Map triggerSpecMap = new HashMap();
+
+ Iterator it = triggerSpecs.iterator();
+ while ( it.hasNext() )
+ {
+ TriggerSpecification triggerSpec = ( TriggerSpecification ) it.next();
+ if ( triggerSpec.getLdapOperation().equals( ldapOperation ) )
+ {
+ if ( triggerSpec.getActionTime().equals( ActionTime.BEFORE ) )
+ {
+ beforeTriggerSpecs.add( triggerSpec );
+ }
+ else if ( triggerSpec.getActionTime().equals( ActionTime.INSTEADOF ) )
+ {
+ insteadofTriggerSpecs.add( triggerSpec );
+ }
+ else if ( triggerSpec.getActionTime().equals( ActionTime.AFTER ) )
+ {
+ afterTriggerSpecs.add( triggerSpec );
+ }
+ else
+ {
+ // TODO
+ }
+ }
+ }
+
+ triggerSpecMap.put( ActionTime.BEFORE, beforeTriggerSpecs );
+ triggerSpecMap.put( ActionTime.INSTEADOF, insteadofTriggerSpecs );
+ triggerSpecMap.put( ActionTime.AFTER, afterTriggerSpecs );
+
+ return triggerSpecMap;
}
@@ -216,11 +271,35 @@
next.delete( name );
return;
}
-
- /**
- *
- */
+ List triggerSpecs = new ArrayList();
+ addPrescriptiveTriggerSpecs( proxy, triggerSpecs, name, entry );
+ addEntryTriggerSpecs( triggerSpecs, entry );
+ Map triggerMap = getActionTimeMappedTriggerSpecs( triggerSpecs, LdapOperation.DELETE );
+
+ List beforeTriggerSpecs = (List) triggerMap.get( ActionTime.BEFORE );
+ System.out.println( "There are " + beforeTriggerSpecs.size() + " \"BEFORE delete\" triggers associated with this entry [" + name + "] being deleted:" );
+ System.out.println( ">>> " + beforeTriggerSpecs );
+
+ List insteadofTriggerSpecs = (List) triggerMap.get( ActionTime.INSTEADOF );
+ System.out.println( "There are " + insteadofTriggerSpecs.size() + " \"INSTEADOF delete\" triggers associated with this entry [" + name + "] being deleted:" );
+ System.out.println( ">>> " + insteadofTriggerSpecs );
+
+ if ( insteadofTriggerSpecs.size() == 0 )
+ {
+ next.delete( name );
+ // we call subentryDeleted when there is really no INSTEADOF triggers for this method
+ triggerSpecCache.subentryDeleted( name, entry );
+ }
+ else
+ {
+ System.out.println ("Delete operation has not been performed due to the INSTEADOF trigger(s).");
+ }
+
+ List afterTriggerSpecs = (List) triggerMap.get( ActionTime.AFTER );
+ System.out.println( "There are " + afterTriggerSpecs.size() + " \"AFTER delete\" triggers associated with this entry [" + name + "] being deleted:" );
+ System.out.println( ">>> " + afterTriggerSpecs );
+ System.out.println();
}
}
Modified: directory/trunks/apacheds/core/src/main/java/org/apache/directory/server/core/trigger/TriggerSpecCache.java
URL: http://svn.apache.org/viewcvs/directory/trunks/apacheds/core/src/main/java/org/apache/directory/server/core/trigger/TriggerSpecCache.java?rev=399696&r1=399695&r2=399696&view=diff
==============================================================================
--- directory/trunks/apacheds/core/src/main/java/org/apache/directory/server/core/trigger/TriggerSpecCache.java (original)
+++ directory/trunks/apacheds/core/src/main/java/org/apache/directory/server/core/trigger/TriggerSpecCache.java Thu May 4 06:14:16 2006
@@ -135,8 +135,8 @@
private boolean hasPrescriptiveTrigger( Attributes entry ) throws NamingException
{
// only do something if the entry contains prescriptiveTrigger
- Attribute aci = entry.get( PRESCRIPTIVE_TRIGGER_ATTR );
- if ( aci == null )
+ Attribute triggerSpec = entry.get( PRESCRIPTIVE_TRIGGER_ATTR );
+ if ( triggerSpec == null )
{
return false;
}
@@ -152,7 +152,7 @@
{
return;
}
-
+
List subentryTriggerSpecs = new ArrayList();
for ( int ii = 0; ii < triggerSpec.size(); ii++ )
{
@@ -165,7 +165,7 @@
catch ( ParseException e )
{
String msg = "TriggerSpecification parser failure on '" + item + "'. Cannnot add Trigger Specificaitons to TriggerSpecCache.";
- log.warn( msg, e );
+ log.error( msg, e );
}
subentryTriggerSpecs.add( item );