Modified: directory/apacheds/branches/interceptor_revamp/core/src/main/java/org/apache/ldap/server/jndi/invocation/interceptor/InterceptorChain.java URL: http://svn.apache.org/viewcvs/directory/apacheds/branches/interceptor_revamp/core/src/main/java/org/apache/ldap/server/jndi/invocation/interceptor/InterceptorChain.java?view=diff&r1=158734&r2=158735 ============================================================================== --- directory/apacheds/branches/interceptor_revamp/core/src/main/java/org/apache/ldap/server/jndi/invocation/interceptor/InterceptorChain.java (original) +++ directory/apacheds/branches/interceptor_revamp/core/src/main/java/org/apache/ldap/server/jndi/invocation/interceptor/InterceptorChain.java Tue Mar 22 22:11:07 2005 @@ -16,30 +16,24 @@ */ package org.apache.ldap.server.jndi.invocation.interceptor; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.IdentityHashMap; -import java.util.Iterator; -import java.util.List; -import java.util.ListIterator; -import java.util.Map; - -import javax.naming.NamingException; import org.apache.ldap.server.jndi.Authenticator; import org.apache.ldap.server.jndi.invocation.Invocation; +import javax.naming.NamingException; +import java.util.*; + + /** - * Manages the chain of [EMAIL PROTECTED] Interceptor}s. <tt>InterceptorChain</tt> is - * also an [EMAIL PROTECTED] Interceptor}, and thus you can create hiararchical interceptor - * structure to break down complex interceptors. - * <p> + * Manages the chain of [EMAIL PROTECTED] Interceptor}s. <tt>InterceptorChain</tt> + * is also an [EMAIL PROTECTED] Interceptor}, and thus you can create hiararchical + * interceptor structure to break down complex interceptors. + * <p/> * [EMAIL PROTECTED] org.apache.ldap.server.jndi.JndiProvider#invoke(Invocation)} - * redirects [EMAIL PROTECTED] Invocation}s to [EMAIL PROTECTED] #process(Invocation)} and - * the chain starts. - * - * @author The Apache Directory Project ([email protected]) - * @author Trustin Lee ([EMAIL PROTECTED]) + * redirects [EMAIL PROTECTED] Invocation}s to [EMAIL PROTECTED](Invocation)} and the + * chain starts. + * + * @author <a href="mailto:[email protected]">Apache Directory Project</a> * @version $Rev$, $Date$ */ public class InterceptorChain implements Interceptor @@ -55,7 +49,8 @@ * of the parent chain before processing children. */ public static final ChainType POSTPROCESS = new ChainType(); - + + /** * Returns a new chain of default interceptors required to run core. */ @@ -63,7 +58,8 @@ { return newDefaultChain( PREPROCESS ); } - + + /** * Returns a new chain of default interceptors required to run core. */ @@ -77,25 +73,29 @@ chain.addLast( "operationalAttributeInterceptor", new OperationalAttributeInterceptor() ); return chain; } - + + private final Interceptor FINAL_INTERCEPTOR = new Interceptor() { private InterceptorContext ctx; - - public void init(InterceptorContext context) throws NamingException + + + public void init( InterceptorContext context ) { ctx = context; } + public void destroy() { // unused } - public void process(NextInterceptor nextInterceptor, Invocation call) + + public void process( NextInterceptor nextInterceptor, Invocation call ) throws NamingException { - if( parent == null ) + if ( parent == null ) { // execute the actual backend operation only when this chain // is root. @@ -105,12 +105,18 @@ }; private InterceptorChain parent; + private final ChainType type; + private final Map name2entry = new HashMap(); + private final Map interceptor2entry = new IdentityHashMap(); + private Entry head = new Entry( null, null, "end", FINAL_INTERCEPTOR ); + private final Entry tail = head; + /** * Create a new interceptor chain whose type is [EMAIL PROTECTED] #PREPROCESS}. */ @@ -118,20 +124,22 @@ { this( PREPROCESS ); } - + + /** * Creates a new interceptor chain with the specified chain type. */ public InterceptorChain( ChainType type ) { - if( type == null ) + if ( type == null ) { throw new NullPointerException( "type" ); } this.type = type; } - + + /** * Initializes all interceptors this chain contains. */ @@ -141,120 +149,119 @@ Interceptor interceptor = null; try { - while( it.hasNext() ) + while ( it.hasNext() ) { interceptor = ( Interceptor ) it.next(); String name = getName( interceptor ); - InterceptorContext newCtx = new InterceptorContext( - ctx.getEnvironment(), ctx.getSystemPartition(), + InterceptorContext newCtx = new InterceptorContext( ctx.getEnvironment(), ctx.getSystemPartition(), ctx.getGlobalRegistries(), ctx.getRootNexus(), - InterceptorConfigBuilder.build( - ctx.getConfig(), ( name == null ) ? "" : name ) ); - + InterceptorConfigBuilder.build( ctx.getConfig(), ( name == null ) ? "" : name ) ); + interceptor.init( newCtx ); } } - catch( Throwable t ) + catch ( Throwable t ) { - while( it.hasPrevious() ) + while ( it.hasPrevious() ) { Interceptor i = ( Interceptor ) it.previous(); try { i.destroy(); } - catch( Throwable t2 ) + catch ( Throwable t2 ) { t2.printStackTrace(); } } - - if( t instanceof NamingException ) + + if ( t instanceof NamingException ) { throw ( NamingException ) t; } else { - throw new InterceptorException( - interceptor, null, + throw new InterceptorException( interceptor, null, "Failed to initialize interceptor chain.", t ); } } } - + + /** * Deinitializes all interceptors this chain contains. */ public synchronized void destroy() { ListIterator it = getAllReversed().listIterator(); - while( it.hasNext() ) + while ( it.hasNext() ) { Interceptor interceptor = ( Interceptor ) it.next(); try { interceptor.destroy(); } - catch( Throwable t ) + catch ( Throwable t ) { t.printStackTrace(); } } } + /** * Returns the interceptor with the specified <code>name</code>. - * - * @return <code>null</code> if there is no interceptor with the specified - * <code>name</code>. + * + * @return <code>null</code> if there is no interceptor with the specified <code>name</code>. */ public Interceptor get( String name ) { Entry e = ( Entry ) name2entry.get( name ); - if( e == null ) + if ( e == null ) { return null; } return e.interceptor; } - + + private String getName( Interceptor interceptor ) { Entry e = ( Entry ) interceptor2entry.get( interceptor ); - if( e == null ) + if ( e == null ) { return null; } return e.name; } - + + /** - * Adds the specified interceptor with the specified name at the beginning - * of this chain. + * Adds the specified interceptor with the specified name at the beginning of this chain. */ public synchronized void addFirst( String name, Interceptor interceptor ) { checkAddable( name, interceptor ); - + Entry newEntry = new Entry( null, head, name, interceptor ); head.prevEntry = newEntry; head = newEntry; - register(name, newEntry); + register( name, newEntry ); } + /** - * Adds the specified interceptor with the specified name at the end - * of this chain. + * Adds the specified interceptor with the specified name at the end of this chain. */ public synchronized void addLast( String name, Interceptor interceptor ) { checkAddable( name, interceptor ); - + Entry newEntry = new Entry( tail.prevEntry, tail, name, interceptor ); - if( tail.prevEntry != null ) + if ( tail.prevEntry != null ) { tail.prevEntry.nextEntry = newEntry; } @@ -263,13 +270,14 @@ head = newEntry; } tail.prevEntry = newEntry; - - register(name, newEntry); + + register( name, newEntry ); } + /** - * Adds the specified interceptor with the specified name just before - * the interceptor whose name is <code>baseName</code> in this chain. + * Adds the specified interceptor with the specified name just before the interceptor whose name is + * <code>baseName</code> in this chain. */ public synchronized void addBefore( String baseName, String name, @@ -280,7 +288,7 @@ Entry prevEntry = baseEntry.prevEntry; Entry newEntry = new Entry( prevEntry, baseEntry, name, interceptor ); - if( prevEntry == null ) + if ( prevEntry == null ) { head = newEntry; } @@ -289,13 +297,14 @@ prevEntry.nextEntry.prevEntry = newEntry; prevEntry.nextEntry = newEntry; } - - register(name, newEntry); + + register( name, newEntry ); } - + + /** - * Adds the specified interceptor with the specified name just after - * the interceptor whose name is <code>baseName</code> in this chain. + * Adds the specified interceptor with the specified name just after the interceptor whose name is + * <code>baseName</code> in this chain. */ public synchronized void addAfter( String baseName, String name, @@ -306,16 +315,17 @@ Entry nextEntry = baseEntry.nextEntry; Entry newEntry = new Entry( baseEntry, nextEntry, name, interceptor ); - if( nextEntry == null ) + if ( nextEntry == null ) { throw new IllegalStateException(); } nextEntry.prevEntry.nextEntry = newEntry; nextEntry.prevEntry = newEntry; - register(name, newEntry); + register( name, newEntry ); } - + + /** * Removes the interceptor with the specified name from this chain. */ @@ -324,7 +334,7 @@ Entry entry = checkOldName( name ); Entry prevEntry = entry.prevEntry; Entry nextEntry = entry.nextEntry; - if( prevEntry == null ) + if ( prevEntry == null ) { nextEntry.prevEntry = null; head = entry; @@ -338,76 +348,78 @@ name2entry.remove( name ); Interceptor interceptor = entry.interceptor; interceptor2entry.remove( interceptor ); - if( interceptor instanceof InterceptorChain ) + if ( interceptor instanceof InterceptorChain ) { ( ( InterceptorChain ) interceptor ).parent = null; } } + /** * Removes all interceptors added to this chain. */ public synchronized void clear() { Iterator it = new ArrayList( name2entry.keySet() ).iterator(); - while( it.hasNext() ) + while ( it.hasNext() ) { this.remove( ( String ) it.next() ); } } - private void register(String name, Entry newEntry) { + + private void register( String name, Entry newEntry ) + { Interceptor interceptor = newEntry.interceptor; name2entry.put( name, newEntry ); interceptor2entry.put( newEntry.interceptor, newEntry ); - if( interceptor instanceof InterceptorChain ) + if ( interceptor instanceof InterceptorChain ) { ( ( InterceptorChain ) interceptor ).parent = this; } } - /** - * Throws an exception when the specified interceptor name is not registered - * in this chain. - * - * @return An interceptor entry with the specified name. - */ + + /** + * Throws an exception when the specified interceptor name is not registered in this chain. + * + * @return An interceptor entry with the specified name. + */ private Entry checkOldName( String baseName ) { Entry e = ( Entry ) name2entry.get( baseName ); - if( e == null ) + if ( e == null ) { throw new IllegalArgumentException( "Unknown interceptor name:" + - baseName ); + baseName ); } return e; } - /** - * Checks the specified interceptor name is already taken and throws - * an exception if already taken. - */ + + /** + * Checks the specified interceptor name is already taken and throws an exception if already taken. + */ private void checkAddable( String name, Interceptor interceptor ) { - if( name2entry.containsKey( name ) ) + if ( name2entry.containsKey( name ) ) { - throw new IllegalArgumentException( - "Other interceptor is using name '" + name + "'" ); + throw new IllegalArgumentException( "Other interceptor is using name '" + name + "'" ); } - - if( interceptor instanceof InterceptorChain ) + + if ( interceptor instanceof InterceptorChain ) { if ( ( ( InterceptorChain ) interceptor ).parent != null ) { - throw new IllegalArgumentException( - "This interceptor chain has its parent already." ); + throw new IllegalArgumentException( "This interceptor chain has its parent already." ); } } } - + + /** * Start invocation chain with the specified invocation. - * + * * @throws NamingException if invocation failed */ public void process( NextInterceptor nextInterceptor, Invocation invocation ) throws NamingException @@ -415,38 +427,38 @@ Entry head = this.head; try { - if( type == PREPROCESS ) + if ( type == PREPROCESS ) { head.interceptor.process( head.nextInterceptor, invocation ); - if( nextInterceptor != null ) + if ( nextInterceptor != null ) { nextInterceptor.process( invocation ); } } else // POSTPROCESS { - if( nextInterceptor != null ) + if ( nextInterceptor != null ) { nextInterceptor.process( invocation ); } head.interceptor.process( head.nextInterceptor, invocation ); } - + } - catch( NamingException ne ) + catch ( NamingException ne ) { throw ne; } - catch( Throwable e ) + catch ( Throwable e ) { throw new InterceptorException( head.interceptor, invocation, - "Unexpected exception.", e ); + "Unexpected exception.", e ); } } + /** - * Returns the list of interceptors this chain in the order of - * evaluation. + * Returns the list of interceptors this chain in the order of evaluation. */ public List getAll() { @@ -457,14 +469,14 @@ list.add( e.interceptor ); e = e.nextEntry; } - while( e != null ); + while ( e != null ); return list; } + /** - * Returns the list of interceptors this chain in the reversed - * order of evaluation. + * Returns the list of interceptors this chain in the reversed order of evaluation. */ public List getAllReversed() { @@ -475,30 +487,36 @@ list.add( e.interceptor ); e = e.prevEntry; } - while( e != null ); + while ( e != null ); return list; } - /** - * Represents an internal entry of this chain. - */ + + /** + * Represents an internal entry of this chain. + */ private class Entry { private Entry prevEntry; + private Entry nextEntry; + private final String name; + private final Interceptor interceptor; + private final NextInterceptor nextInterceptor; + private Entry( Entry prevEntry, Entry nextEntry, String name, Interceptor interceptor ) { - if( interceptor == null ) + if ( interceptor == null ) { throw new NullPointerException( "interceptor" ); } - if( name == null ) + if ( name == null ) { throw new NullPointerException( "name" ); } @@ -509,31 +527,30 @@ this.interceptor = interceptor; this.nextInterceptor = new NextInterceptor() { - public void process(Invocation call) - throws NamingException { + public void process( Invocation call ) + throws NamingException + { Interceptor interceptor = Entry.this.nextEntry.interceptor; try { - interceptor.process( - Entry.this.nextEntry.nextInterceptor, call ); + interceptor.process( Entry.this.nextEntry.nextInterceptor, call ); } - catch( NamingException ne ) + catch ( NamingException ne ) { throw ne; } - catch( Throwable e ) + catch ( Throwable e ) { throw new InterceptorException( interceptor, call, - "Unexpected exception.", e ); + "Unexpected exception.", e ); } } }; } } - + /** - * Represents how [EMAIL PROTECTED] InterceptorChain} interacts with - * [EMAIL PROTECTED] NextInterceptor}. + * Represents how [EMAIL PROTECTED] InterceptorChain} interacts with [EMAIL PROTECTED] NextInterceptor}. */ public static class ChainType {
Modified: directory/apacheds/branches/interceptor_revamp/core/src/main/java/org/apache/ldap/server/jndi/invocation/interceptor/InterceptorConfigBuilder.java URL: http://svn.apache.org/viewcvs/directory/apacheds/branches/interceptor_revamp/core/src/main/java/org/apache/ldap/server/jndi/invocation/interceptor/InterceptorConfigBuilder.java?view=diff&r1=158734&r2=158735 ============================================================================== --- directory/apacheds/branches/interceptor_revamp/core/src/main/java/org/apache/ldap/server/jndi/invocation/interceptor/InterceptorConfigBuilder.java (original) +++ directory/apacheds/branches/interceptor_revamp/core/src/main/java/org/apache/ldap/server/jndi/invocation/interceptor/InterceptorConfigBuilder.java Tue Mar 22 22:11:07 2005 @@ -1,38 +1,48 @@ package org.apache.ldap.server.jndi.invocation.interceptor; + import java.util.HashMap; import java.util.Iterator; import java.util.Map; -public class InterceptorConfigBuilder { - public static Map build(Map map, String prefix) +/** + * @todo doc me + * @author <a href="mailto:[email protected]">Apache Directory Project</a> + * @version $Rev$, $Date$ + */ + +public class InterceptorConfigBuilder +{ + + public static Map build( Map map, String prefix ) { Map newMap = new HashMap(); Iterator it = map.entrySet().iterator(); - while( it.hasNext() ) + while ( it.hasNext() ) { - Map.Entry e = (Map.Entry) it.next(); + Map.Entry e = ( Map.Entry ) it.next(); String key = e.getKey().toString(); - if( key.startsWith( prefix ) && key.length() > prefix.length() ) + if ( key.startsWith( prefix ) && key.length() > prefix.length() ) { key = key.substring( prefix.length() ); - if( key.indexOf( '#' ) < 0 ) + if ( key.indexOf( '#' ) < 0 ) { continue; } - if( key.charAt(0) == '.' || key.charAt(0) == '#' ) + if ( key.charAt( 0 ) == '.' || key.charAt( 0 ) == '#' ) { key = key.substring( 1 ); } - + newMap.put( key, e.getValue() ); } } - + return newMap; } - + + private InterceptorConfigBuilder() { } Modified: directory/apacheds/branches/interceptor_revamp/core/src/main/java/org/apache/ldap/server/jndi/invocation/interceptor/InterceptorContext.java URL: http://svn.apache.org/viewcvs/directory/apacheds/branches/interceptor_revamp/core/src/main/java/org/apache/ldap/server/jndi/invocation/interceptor/InterceptorContext.java?view=diff&r1=158734&r2=158735 ============================================================================== --- directory/apacheds/branches/interceptor_revamp/core/src/main/java/org/apache/ldap/server/jndi/invocation/interceptor/InterceptorContext.java (original) +++ directory/apacheds/branches/interceptor_revamp/core/src/main/java/org/apache/ldap/server/jndi/invocation/interceptor/InterceptorContext.java Tue Mar 22 22:11:07 2005 @@ -1,28 +1,47 @@ package org.apache.ldap.server.jndi.invocation.interceptor; -import java.util.Map; import org.apache.ldap.server.RootNexus; import org.apache.ldap.server.SystemPartition; import org.apache.ldap.server.schema.GlobalRegistries; -public class InterceptorContext { +import java.util.Map; + - /** the initial context environment that fired up the backend subsystem */ +/** + * @todo doc me + * @author <a href="mailto:[email protected]">Apache Directory Project</a> + * @version $Rev$, $Date$ + */ +public class InterceptorContext +{ + + /** + * the initial context environment that fired up the backend subsystem + */ private final Map environment; - - /** Configuration for the interceptor. */ + + /** + * Configuration for the interceptor. + */ private final Map config; - /** the system partition used by the context factory */ + /** + * the system partition used by the context factory + */ private final SystemPartition systemPartition; - /** the registries for system schema objects */ + /** + * the registries for system schema objects + */ private final GlobalRegistries globalRegistries; - /** the root nexus */ + /** + * the root nexus + */ private final RootNexus rootNexus; + public InterceptorContext( Map environment, SystemPartition systemPartition, GlobalRegistries globalRegistries, @@ -36,26 +55,33 @@ this.config = config; } - public Map getEnvironment() { + + public Map getEnvironment() + { return environment; } - - public Map getConfig() { + + + public Map getConfig() + { return config; } - - public GlobalRegistries getGlobalRegistries() { + + public GlobalRegistries getGlobalRegistries() + { return globalRegistries; } - - public RootNexus getRootNexus() { + + public RootNexus getRootNexus() + { return rootNexus; } - - public SystemPartition getSystemPartition() { + + public SystemPartition getSystemPartition() + { return systemPartition; } } Modified: directory/apacheds/branches/interceptor_revamp/core/src/main/java/org/apache/ldap/server/jndi/invocation/interceptor/InterceptorException.java URL: http://svn.apache.org/viewcvs/directory/apacheds/branches/interceptor_revamp/core/src/main/java/org/apache/ldap/server/jndi/invocation/interceptor/InterceptorException.java?view=diff&r1=158734&r2=158735 ============================================================================== --- directory/apacheds/branches/interceptor_revamp/core/src/main/java/org/apache/ldap/server/jndi/invocation/interceptor/InterceptorException.java (original) +++ directory/apacheds/branches/interceptor_revamp/core/src/main/java/org/apache/ldap/server/jndi/invocation/interceptor/InterceptorException.java Tue Mar 22 22:11:07 2005 @@ -24,21 +24,23 @@ /** - * A [EMAIL PROTECTED] LdapNamingException} that wraps uncaught runtime exceptions - * thrown from [EMAIL PROTECTED] Interceptor}s. + * A [EMAIL PROTECTED] LdapNamingException} that wraps uncaught runtime exceptions thrown from [EMAIL PROTECTED] Interceptor}s. * - * @author The Apache Directory Project ([email protected]) - * @author Alex Karasulu ([EMAIL PROTECTED]) - * @author Trustin Lee ([EMAIL PROTECTED]) + * @author <a href="mailto:[email protected]">Apache Directory Project</a> * @version $Rev$, $Date$ */ public class InterceptorException extends LdapNamingException { private static final long serialVersionUID = 3258690996517746233L; - /** The Invocation the Interceptor failed on */ + /** + * The Invocation the Interceptor failed on + */ private final Invocation invocation; - /** The Interceptor causing the failure */ + + /** + * The Interceptor causing the failure + */ private final Interceptor interceptor; @@ -46,7 +48,7 @@ * Creates an InterceptorException without a message. * * @param interceptor the Interceptor causing the failure - * @param invocation the Invocation the Interceptor failed on + * @param invocation the Invocation the Interceptor failed on */ public InterceptorException( Interceptor interceptor, Invocation invocation ) { @@ -60,11 +62,11 @@ * Creates an InterceptorException with a custom message. * * @param interceptor the Interceptor causing the failure - * @param invocation the Invocation the Interceptor failed on + * @param invocation the Invocation the Interceptor failed on * @param explanation String explanation of why the Interceptor failed */ public InterceptorException( Interceptor interceptor, - Invocation invocation, String explanation ) + Invocation invocation, String explanation ) { super( explanation, ResultCodeEnum.OTHER ); this.invocation = invocation; @@ -76,33 +78,35 @@ * Creates an InterceptorException without a message. * * @param interceptor the Interceptor causing the failure - * @param invocation the Invocation the Interceptor failed on - * @param rootCause the root cause of this exception + * @param invocation the Invocation the Interceptor failed on + * @param rootCause the root cause of this exception */ public InterceptorException( Interceptor interceptor, - Invocation invocation, Throwable rootCause ) + Invocation invocation, Throwable rootCause ) { this( interceptor, invocation ); super.setRootCause( rootCause ); } + /** * Creates an InterceptorException without a message. * * @param interceptor the Interceptor causing the failure - * @param invocation the Invocation the Interceptor failed on + * @param invocation the Invocation the Interceptor failed on * @param explanation String explanation of why the Interceptor failed - * @param rootCause the root cause of this exception + * @param rootCause the root cause of this exception */ public InterceptorException( Interceptor interceptor, - Invocation invocation, - String explanation, - Throwable rootCause ) + Invocation invocation, + String explanation, + Throwable rootCause ) { this( interceptor, invocation, explanation ); super.setRootCause( rootCause ); } + /** * Gets the invovation object this exception is associated with. * @@ -126,8 +130,7 @@ /** - * Will return the resultCode of the root cause if the root cause - * implements LdapException. + * Will return the resultCode of the root cause if the root cause implements LdapException. * * @see org.apache.ldap.common.exception.LdapException#getResultCode() */ Modified: directory/apacheds/branches/interceptor_revamp/core/src/main/java/org/apache/ldap/server/jndi/invocation/interceptor/NextInterceptor.java URL: http://svn.apache.org/viewcvs/directory/apacheds/branches/interceptor_revamp/core/src/main/java/org/apache/ldap/server/jndi/invocation/interceptor/NextInterceptor.java?view=diff&r1=158734&r2=158735 ============================================================================== --- directory/apacheds/branches/interceptor_revamp/core/src/main/java/org/apache/ldap/server/jndi/invocation/interceptor/NextInterceptor.java (original) +++ directory/apacheds/branches/interceptor_revamp/core/src/main/java/org/apache/ldap/server/jndi/invocation/interceptor/NextInterceptor.java Tue Mar 22 22:11:07 2005 @@ -16,25 +16,25 @@ */ package org.apache.ldap.server.jndi.invocation.interceptor; -import javax.naming.NamingException; import org.apache.ldap.server.jndi.invocation.Invocation; +import javax.naming.NamingException; + + /** * Represents the next [EMAIL PROTECTED] Interceptor} in the interceptor chain. - * - * @author The Apache Directory Project ([email protected]) - * @author Trustin Lee ([EMAIL PROTECTED]) + * + * @author <a href="mailto:[email protected]">Apache Directory Project</a> * @version $Rev$, $Date$ - * * @see Interceptor * @see InterceptorChain */ -public interface NextInterceptor { +public interface NextInterceptor +{ /** - * Passes the control of current invocation to the next - * [EMAIL PROTECTED] Interceptor} in the [EMAIL PROTECTED] InterceptorChain}. - * + * Passes the control of current invocation to the next [EMAIL PROTECTED] Interceptor} in the [EMAIL PROTECTED] InterceptorChain}. + * * @param call * @throws NamingException */ Modified: directory/apacheds/branches/interceptor_revamp/core/src/main/java/org/apache/ldap/server/jndi/invocation/interceptor/OperationalAttributeInterceptor.java URL: http://svn.apache.org/viewcvs/directory/apacheds/branches/interceptor_revamp/core/src/main/java/org/apache/ldap/server/jndi/invocation/interceptor/OperationalAttributeInterceptor.java?view=diff&r1=158734&r2=158735 ============================================================================== --- directory/apacheds/branches/interceptor_revamp/core/src/main/java/org/apache/ldap/server/jndi/invocation/interceptor/OperationalAttributeInterceptor.java (original) +++ directory/apacheds/branches/interceptor_revamp/core/src/main/java/org/apache/ldap/server/jndi/invocation/interceptor/OperationalAttributeInterceptor.java Tue Mar 22 22:11:07 2005 @@ -17,56 +17,41 @@ package org.apache.ldap.server.jndi.invocation.interceptor; -import java.util.HashSet; - -import javax.naming.Name; -import javax.naming.NamingEnumeration; -import javax.naming.NamingException; -import javax.naming.directory.Attributes; -import javax.naming.directory.BasicAttribute; -import javax.naming.directory.BasicAttributes; -import javax.naming.directory.DirContext; -import javax.naming.directory.SearchControls; -import javax.naming.directory.SearchResult; -import javax.naming.ldap.LdapContext; - import org.apache.ldap.common.schema.AttributeType; import org.apache.ldap.common.schema.UsageEnum; import org.apache.ldap.common.util.DateUtils; import org.apache.ldap.server.RootNexus; import org.apache.ldap.server.db.ResultFilteringEnumeration; import org.apache.ldap.server.db.SearchResultFilter; -import org.apache.ldap.server.jndi.invocation.Add; -import org.apache.ldap.server.jndi.invocation.List; -import org.apache.ldap.server.jndi.invocation.Lookup; -import org.apache.ldap.server.jndi.invocation.LookupWithAttrIds; -import org.apache.ldap.server.jndi.invocation.Modify; -import org.apache.ldap.server.jndi.invocation.ModifyMany; -import org.apache.ldap.server.jndi.invocation.ModifyRN; -import org.apache.ldap.server.jndi.invocation.Move; -import org.apache.ldap.server.jndi.invocation.MoveAndModifyRN; -import org.apache.ldap.server.jndi.invocation.Search; +import org.apache.ldap.server.jndi.invocation.*; import org.apache.ldap.server.schema.AttributeTypeRegistry; +import javax.naming.Name; +import javax.naming.NamingEnumeration; +import javax.naming.NamingException; +import javax.naming.directory.*; +import javax.naming.ldap.LdapContext; +import java.util.HashSet; + /** - * An [EMAIL PROTECTED] Interceptor} that adds or modifies the default attributes of entries. - * There are four default attributes for now;<code>'creatorsName'</code>, - * <code>'createTimestamp'</code>, <code>'modifiersName'</code>, and + * An [EMAIL PROTECTED] Interceptor} that adds or modifies the default attributes + * of entries. There are four default attributes for now;<code>'creatorsName' + * </code>, <code>'createTimestamp'</code>, <code>'modifiersName'</code>, and * <code>'modifyTimestamp'</code>. * - * @author The Apache Directory Project ([email protected]) - * @author Alex Karasulu ([EMAIL PROTECTED]) - * @author Trustin Lee ([EMAIL PROTECTED]) + * @author <a href="mailto:[email protected]">Apache Directory Project</a> * @version $Rev$, $Date$ */ public class OperationalAttributeInterceptor extends BaseInterceptor { - /** the database search result filter to register with filter service */ + /** + * the database search result filter to register with filter service + */ private final SearchResultFilter SEARCH_FILTER = new SearchResultFilter() { public boolean accept( LdapContext ctx, SearchResult result, SearchControls controls ) - throws NamingException + throws NamingException { if ( controls.getReturningAttributes() == null ) { @@ -77,8 +62,11 @@ } }; - /** the root nexus of the system */ + /** + * the root nexus of the system + */ private RootNexus nexus; + private AttributeTypeRegistry registry; @@ -89,14 +77,19 @@ { } - public void init( InterceptorContext ctx ) throws NamingException { + + public void init( InterceptorContext ctx ) throws NamingException + { nexus = ctx.getRootNexus(); registry = ctx.getGlobalRegistries().getAttributeTypeRegistry(); } - public void destroy() { + + public void destroy() + { } + /** * Adds extra operational attributes to the entry before it is added. * @@ -114,7 +107,7 @@ attribute = new BasicAttribute( "createTimestamp" ); attribute.add( DateUtils.getGeneralizedTime() ); entry.put( attribute ); - + nextInterceptor.process( call ); } @@ -210,18 +203,21 @@ } - protected void process(NextInterceptor nextInterceptor, Lookup call) throws NamingException { + protected void process( NextInterceptor nextInterceptor, Lookup call ) throws NamingException + { nextInterceptor.process( call ); - + Attributes attributes = ( Attributes ) call.getResponse(); Attributes retval = ( Attributes ) attributes.clone(); filter( retval ); call.setResponse( retval ); } - protected void process(NextInterceptor nextInterceptor, LookupWithAttrIds call) throws NamingException { + + protected void process( NextInterceptor nextInterceptor, LookupWithAttrIds call ) throws NamingException + { nextInterceptor.process( call ); - + Attributes attributes = ( Attributes ) call.getResponse(); if ( attributes == null ) { @@ -233,10 +229,12 @@ call.setResponse( retval ); } - protected void process(NextInterceptor nextInterceptor, List call) throws NamingException { + + protected void process( NextInterceptor nextInterceptor, List call ) throws NamingException + { nextInterceptor.process( call ); - - NamingEnumeration e ; + + NamingEnumeration e; ResultFilteringEnumeration retval; LdapContext ctx = ( LdapContext ) call.getContextStack().peek(); e = ( NamingEnumeration ) call.getResponse(); @@ -244,16 +242,18 @@ call.setResponse( retval ); } - protected void process(NextInterceptor nextInterceptor, Search call) throws NamingException { + + protected void process( NextInterceptor nextInterceptor, Search call ) throws NamingException + { nextInterceptor.process( call ); - + SearchControls searchControls = call.getControls(); if ( searchControls.getReturningAttributes() != null ) { return; } - NamingEnumeration e ; + NamingEnumeration e; ResultFilteringEnumeration retval; LdapContext ctx = ( LdapContext ) call.getContextStack().peek(); e = ( NamingEnumeration ) call.getResponse(); @@ -261,9 +261,10 @@ call.setResponse( retval ); } + /** - * Filters out the operational attributes within a search results - * attributes. The attributes are directly modified. + * Filters out the operational attributes within a search results attributes. The attributes are directly + * modified. * * @param attributes the resultant attributes to filter * @return true always @@ -291,8 +292,9 @@ return true; } + private void filter( Name dn, Attributes entry, String[] ids ) - throws NamingException + throws NamingException { // still need to protect against returning op attrs when ids is null if ( ids == null ) @@ -300,23 +302,23 @@ OperationalAttributeInterceptor.this.filter( entry ); return; } - + if ( dn.size() == 0 ) { HashSet idsSet = new HashSet( ids.length ); - + for ( int ii = 0; ii < ids.length; ii++ ) { idsSet.add( ids[ii].toLowerCase() ); } NamingEnumeration list = entry.getIDs(); - + while ( list.hasMore() ) { String attrId = ( ( String ) list.nextElement() ).toLowerCase(); - - if ( ! idsSet.contains( attrId ) ) + + if ( !idsSet.contains( attrId ) ) { entry.remove( attrId ); } Modified: directory/apacheds/branches/interceptor_revamp/core/src/main/java/org/apache/ldap/server/jndi/invocation/interceptor/SchemaManager.java URL: http://svn.apache.org/viewcvs/directory/apacheds/branches/interceptor_revamp/core/src/main/java/org/apache/ldap/server/jndi/invocation/interceptor/SchemaManager.java?view=diff&r1=158734&r2=158735 ============================================================================== --- directory/apacheds/branches/interceptor_revamp/core/src/main/java/org/apache/ldap/server/jndi/invocation/interceptor/SchemaManager.java (original) +++ directory/apacheds/branches/interceptor_revamp/core/src/main/java/org/apache/ldap/server/jndi/invocation/interceptor/SchemaManager.java Tue Mar 22 22:11:07 2005 @@ -17,34 +17,13 @@ package org.apache.ldap.server.jndi.invocation.interceptor; -import java.util.Collections; -import java.util.HashSet; -import java.util.Iterator; -import java.util.Set; - -import javax.naming.NamingEnumeration; -import javax.naming.NamingException; -import javax.naming.directory.Attribute; -import javax.naming.directory.Attributes; -import javax.naming.directory.SearchControls; -import javax.naming.directory.SearchResult; -import javax.naming.ldap.LdapContext; - import org.apache.ldap.common.filter.ExprNode; import org.apache.ldap.common.filter.PresenceNode; import org.apache.ldap.common.filter.SimpleNode; import org.apache.ldap.common.message.LockableAttributeImpl; import org.apache.ldap.common.message.LockableAttributesImpl; import org.apache.ldap.common.name.LdapName; -import org.apache.ldap.common.schema.AttributeType; -import org.apache.ldap.common.schema.DITContentRule; -import org.apache.ldap.common.schema.DITStructureRule; -import org.apache.ldap.common.schema.MatchingRule; -import org.apache.ldap.common.schema.MatchingRuleUse; -import org.apache.ldap.common.schema.NameForm; -import org.apache.ldap.common.schema.ObjectClass; -import org.apache.ldap.common.schema.SchemaUtils; -import org.apache.ldap.common.schema.Syntax; +import org.apache.ldap.common.schema.*; import org.apache.ldap.common.util.SingletonEnumeration; import org.apache.ldap.server.RootNexus; import org.apache.ldap.server.db.ResultFilteringEnumeration; @@ -57,35 +36,57 @@ import org.apache.ldap.server.schema.AttributeTypeRegistry; import org.apache.ldap.server.schema.GlobalRegistries; +import javax.naming.NamingEnumeration; +import javax.naming.NamingException; +import javax.naming.directory.Attribute; +import javax.naming.directory.Attributes; +import javax.naming.directory.SearchControls; +import javax.naming.directory.SearchResult; +import javax.naming.ldap.LdapContext; +import java.util.Collections; +import java.util.HashSet; +import java.util.Iterator; +import java.util.Set; + /** * An [EMAIL PROTECTED] Interceptor} that manages and enforces schemas. - * TODO Better interceptor description required. * - * @author The Apache Directory Project ([email protected]) - * @author Alex Karasulu ([EMAIL PROTECTED]) - * @author Trustin Lee ([EMAIL PROTECTED]) + * @todo Better interceptor description required. + * @author <a href="mailto:[email protected]">Apache Directory Project</a> * @version $Rev$, $Date$ */ public class SchemaManager extends BaseInterceptor { private static final String BINARY_KEY = "java.naming.ldap.attributes.binary"; - /** the root nexus to all database partitions */ + /** + * the root nexus to all database partitions + */ private RootNexus nexus; - /** a binary attribute tranforming filter: String -> byte[] */ + + /** + * a binary attribute tranforming filter: String -> byte[] + */ private BinaryAttributeFilter binaryAttributeFilter; - /** the global schema object registries */ + + /** + * the global schema object registries + */ private GlobalRegistries globalRegistries; + private AttributeTypeRegistry attributeRegistry; - /** subschemaSubentry attribute's value from Root DSE */ + + /** + * subschemaSubentry attribute's value from Root DSE + */ private String subentryDn; /** * Creates a schema service interceptor. * - * @param nexus the root nexus to access all database partitions + * @param nexus the root nexus to access all database partitions * @param globalRegistries the global schema object registries * @param filterService */ @@ -93,6 +94,7 @@ { } + public void init( InterceptorContext ctx ) throws NamingException { this.nexus = ctx.getRootNexus(); @@ -104,15 +106,18 @@ String subschemaSubentry = ( String ) nexus.getRootDSE().get( "subschemaSubentry" ).get(); subentryDn = new LdapName( subschemaSubentry ).toString().toLowerCase(); } - + + public void destroy() { } - protected void process(NextInterceptor nextInterceptor, List call) throws NamingException { + + protected void process( NextInterceptor nextInterceptor, List call ) throws NamingException + { nextInterceptor.process( call ); - - NamingEnumeration e ; + + NamingEnumeration e; ResultFilteringEnumeration retval; LdapContext ctx = ( LdapContext ) call.getContextStack().peek(); e = ( NamingEnumeration ) call.getResponse(); @@ -120,10 +125,11 @@ call.setResponse( retval ); } + protected void process( NextInterceptor nextInterceptor, Search call ) throws NamingException { // check to make sure the DN searched for is a subentry - if ( ! subentryDn.equals( call.getBaseName().toString() ) ) + if ( !subentryDn.equals( call.getBaseName().toString() ) ) { nextInterceptor.process( call ); return; @@ -133,14 +139,14 @@ SearchControls searchControls = call.getControls(); ExprNode filter = call.getFilter(); if ( searchControls.getSearchScope() == SearchControls.OBJECT_SCOPE && - filter instanceof SimpleNode ) + filter instanceof SimpleNode ) { SimpleNode node = ( SimpleNode ) filter; if ( node.getAttribute().equalsIgnoreCase( "objectClass" ) && - node.getValue().equalsIgnoreCase( "subschema" ) && - node.getAssertionType() == SimpleNode.EQUALITY - ) + node.getValue().equalsIgnoreCase( "subschema" ) && + node.getAssertionType() == SimpleNode.EQUALITY + ) { // call.setBypass( true ); Attributes attrs = getSubschemaEntry( searchControls.getReturningAttributes() ); @@ -151,7 +157,7 @@ } } else if ( searchControls.getSearchScope() == SearchControls.OBJECT_SCOPE && - filter instanceof PresenceNode ) + filter instanceof PresenceNode ) { PresenceNode node = ( PresenceNode ) filter; @@ -166,17 +172,17 @@ } } - if( !bypass ) + if ( !bypass ) { nextInterceptor.process( call ); } - + if ( searchControls.getReturningAttributes() != null ) { return; } - NamingEnumeration e ; + NamingEnumeration e; ResultFilteringEnumeration retval; LdapContext ctx = ( LdapContext ) call.getContextStack().peek(); e = ( NamingEnumeration ) call.getResponse(); @@ -310,9 +316,11 @@ return attrs; } - protected void process(NextInterceptor nextInterceptor, Lookup call) throws NamingException { + + protected void process( NextInterceptor nextInterceptor, Lookup call ) throws NamingException + { nextInterceptor.process( call ); - + ServerLdapContext ctx = ( ServerLdapContext ) call.getContextStack().peek(); Attributes attributes = ( Attributes ) call.getResponse(); Attributes retval = ( Attributes ) attributes.clone(); @@ -320,7 +328,9 @@ call.setResponse( retval ); } - protected void process(NextInterceptor nextInterceptor, LookupWithAttrIds call) throws NamingException { + + protected void process( NextInterceptor nextInterceptor, LookupWithAttrIds call ) throws NamingException + { nextInterceptor.process( call ); ServerLdapContext ctx = ( ServerLdapContext ) call.getContextStack().peek(); @@ -335,15 +345,16 @@ call.setResponse( retval ); } + private void doFilter( LdapContext ctx, Attributes entry ) - throws NamingException + throws NamingException { // set of AttributeType objects that are to behave as binaries Set binaries; // construct the set for fast lookups while filtering String binaryIds = ( String ) ctx.getEnvironment().get( BINARY_KEY ); - + if ( binaryIds == null ) { binaries = Collections.EMPTY_SET; @@ -351,13 +362,13 @@ else { String[] binaryArray = binaryIds.split( " " ); - + binaries = new HashSet( binaryArray.length ); - + for ( int ii = 0; ii < binaryArray.length; ii++ ) { AttributeType type = attributeRegistry.lookup( binaryArray[ii] ); - + binaries.add( type ); } } @@ -367,37 +378,37 @@ * human readable and those that are in the binaries set */ NamingEnumeration list = entry.getIDs(); - + while ( list.hasMore() ) { String id = ( String ) list.next(); - + AttributeType type = null; - + boolean asBinary = false; - + if ( attributeRegistry.hasAttributeType( id ) ) { type = attributeRegistry.lookup( id ); } - + if ( type != null ) { - asBinary = ! type.getSyntax().isHumanReadible(); - + asBinary = !type.getSyntax().isHumanReadible(); + asBinary = asBinary || binaries.contains( type ); } - + if ( asBinary ) { Attribute attribute = entry.get( id ); - + Attribute binary = new LockableAttributeImpl( id ); - + for ( int ii = 0; ii < attribute.size(); ii++ ) { Object value = attribute.get( ii ); - + if ( value instanceof String ) { binary.add( ii, ( ( String ) value ).getBytes() ); @@ -407,29 +418,29 @@ binary.add( ii, value ); } } - + entry.remove( id ); - + entry.put( binary ); } } } + /** - * A special filter over entry attributes which replaces Attribute String - * values with their respective byte[] representations using schema - * information and the value held in the JNDI environment property: + * A special filter over entry attributes which replaces Attribute String values with their respective byte[] + * representations using schema information and the value held in the JNDI environment property: * <code>java.naming.ldap.attributes.binary</code>. * - * @see <a href= - * "http://java.sun.com/j2se/1.4.2/docs/guide/jndi/jndi-ldap-gl.html#binary"> - * java.naming.ldap.attributes.binary</a> + * @see <a href= "http://java.sun.com/j2se/1.4.2/docs/guide/jndi/jndi-ldap-gl.html#binary"> + * java.naming.ldap.attributes.binary</a> */ private class BinaryAttributeFilter implements SearchResultFilter { - public BinaryAttributeFilter( ) + public BinaryAttributeFilter() { } + public boolean accept( LdapContext ctx, SearchResult result, SearchControls controls ) throws NamingException { Modified: directory/apacheds/branches/interceptor_revamp/core/src/main/java/org/apache/ldap/server/jndi/invocation/interceptor/Validator.java URL: http://svn.apache.org/viewcvs/directory/apacheds/branches/interceptor_revamp/core/src/main/java/org/apache/ldap/server/jndi/invocation/interceptor/Validator.java?view=diff&r1=158734&r2=158735 ============================================================================== --- directory/apacheds/branches/interceptor_revamp/core/src/main/java/org/apache/ldap/server/jndi/invocation/interceptor/Validator.java (original) +++ directory/apacheds/branches/interceptor_revamp/core/src/main/java/org/apache/ldap/server/jndi/invocation/interceptor/Validator.java Tue Mar 22 22:11:07 2005 @@ -17,12 +17,6 @@ package org.apache.ldap.server.jndi.invocation.interceptor; -import javax.naming.Name; -import javax.naming.NamingEnumeration; -import javax.naming.NamingException; -import javax.naming.directory.Attribute; -import javax.naming.directory.Attributes; - import org.apache.ldap.common.exception.LdapContextNotEmptyException; import org.apache.ldap.common.exception.LdapNameAlreadyBoundException; import org.apache.ldap.common.exception.LdapNameNotFoundException; @@ -31,32 +25,29 @@ import org.apache.ldap.common.name.LdapName; import org.apache.ldap.server.BackingStore; import org.apache.ldap.server.RootNexus; -import org.apache.ldap.server.jndi.invocation.Add; -import org.apache.ldap.server.jndi.invocation.Delete; -import org.apache.ldap.server.jndi.invocation.List; -import org.apache.ldap.server.jndi.invocation.Lookup; -import org.apache.ldap.server.jndi.invocation.LookupWithAttrIds; -import org.apache.ldap.server.jndi.invocation.Modify; -import org.apache.ldap.server.jndi.invocation.ModifyMany; -import org.apache.ldap.server.jndi.invocation.ModifyRN; -import org.apache.ldap.server.jndi.invocation.Move; -import org.apache.ldap.server.jndi.invocation.MoveAndModifyRN; -import org.apache.ldap.server.jndi.invocation.Search; +import org.apache.ldap.server.jndi.invocation.*; + +import javax.naming.Name; +import javax.naming.NamingEnumeration; +import javax.naming.NamingException; +import javax.naming.directory.Attribute; +import javax.naming.directory.Attributes; /** - * An [EMAIL PROTECTED] Interceptor} that detects any operations that breaks - * integrity of [EMAIL PROTECTED] BackingStore} and terminates the current - * invocation chain by throwing a [EMAIL PROTECTED] NamingException}. - * Those operations include when an entry already exists at a DN and is - * added once again to the same DN. + * An [EMAIL PROTECTED] Interceptor} that detects any operations that breaks integrity + * of [EMAIL PROTECTED] BackingStore} and terminates the current invocation chain by + * throwing a [EMAIL PROTECTED] NamingException}. Those operations include when an entry + * already exists at a DN and is added once again to the same DN. * * @author <a href="mailto:[email protected]">Apache Directory Project</a> * @version $Rev$ */ public class Validator extends BaseInterceptor { - /** the root nexus of the system */ + /** + * the root nexus of the system + */ private RootNexus nexus; @@ -66,20 +57,22 @@ public Validator() { } - + + public void init( InterceptorContext ctx ) { this.nexus = ctx.getRootNexus(); } + public void destroy() { } + /** - * In the pre-invocation state this interceptor method checks to see if - * the entry to be added already exists. If it does an exception is - * raised. + * In the pre-invocation state this interceptor method checks to see if the entry to be added already exists. If it + * does an exception is raised. * * @see BaseInterceptor#add(String, Name, Attributes) */ @@ -113,13 +106,14 @@ e.setResolvedName( parentDn ); throw e; } - + nextInterceptor.process( call ); } + /** - * Checks to make sure the entry being deleted exists, and has no children, - * otherwise throws the appropriate LdapException. + * Checks to make sure the entry being deleted exists, and has no children, otherwise throws the appropriate + * LdapException. */ protected void process( NextInterceptor nextInterceptor, Delete call ) throws NamingException { @@ -144,28 +138,26 @@ e.setResolvedName( name ); throw e; } - + nextInterceptor.process( call ); } /** - * Checks to see the base being searched exists, otherwise throws the - * appropriate LdapException. + * Checks to see the base being searched exists, otherwise throws the appropriate LdapException. */ protected void process( NextInterceptor nextInterceptor, List call ) throws NamingException { // check if entry to search exists String msg = "Attempt to search under non-existant entry: "; assertHasEntry( msg, call.getBaseName() ); - + nextInterceptor.process( call ); } /** - * Checks to make sure the entry being looked up exists other wise throws - * the appropriate LdapException. + * Checks to make sure the entry being looked up exists other wise throws the appropriate LdapException. * * @see org.apache.ldap.server.jndi.BaseInterceptor#lookup(javax.naming.Name) */ @@ -173,56 +165,52 @@ { String msg = "Attempt to lookup non-existant entry: "; assertHasEntry( msg, call.getName() ); - + nextInterceptor.process( call ); } /** - * Checks to see the base being searched exists, otherwise throws the - * appropriate LdapException. + * Checks to see the base being searched exists, otherwise throws the appropriate LdapException. */ protected void process( NextInterceptor nextInterceptor, LookupWithAttrIds call ) throws NamingException { // check if entry to lookup exists String msg = "Attempt to lookup non-existant entry: "; assertHasEntry( msg, call.getName() ); - + nextInterceptor.process( call ); } /** - * Checks to see the entry being modified exists, otherwise throws the - * appropriate LdapException. + * Checks to see the entry being modified exists, otherwise throws the appropriate LdapException. */ protected void process( NextInterceptor nextInterceptor, Modify call ) throws NamingException { // check if entry to modify exists String msg = "Attempt to modify non-existant entry: "; assertHasEntry( msg, call.getName() ); - + nextInterceptor.process( call ); } /** - * Checks to see the entry being modified exists, otherwise throws the - * appropriate LdapException. + * Checks to see the entry being modified exists, otherwise throws the appropriate LdapException. */ protected void process( NextInterceptor nextInterceptor, ModifyMany call ) throws NamingException { // check if entry to modify exists String msg = "Attempt to modify non-existant entry: "; assertHasEntry( msg, call.getName() ); - + nextInterceptor.process( call ); } /** - * Checks to see the entry being renamed exists, otherwise throws the - * appropriate LdapException. + * Checks to see the entry being renamed exists, otherwise throws the appropriate LdapException. */ protected void process( NextInterceptor nextInterceptor, ModifyRN call ) throws NamingException { @@ -239,18 +227,18 @@ { LdapNameAlreadyBoundException e = null; e = new LdapNameAlreadyBoundException( "target entry " + target - + " already exists!" ); + + " already exists!" ); e.setResolvedName( target ); throw e; } - + nextInterceptor.process( call ); } /** - * Checks to see the entry being moved exists, and so does its parent, - * otherwise throws the appropriate LdapException. + * Checks to see the entry being moved exists, and so does its parent, otherwise throws the appropriate + * LdapException. */ protected void process( NextInterceptor nextInterceptor, Move call ) throws NamingException { @@ -270,18 +258,18 @@ { LdapNameAlreadyBoundException e = null; e = new LdapNameAlreadyBoundException( "target entry " + target - + " already exists!" ); + + " already exists!" ); e.setResolvedName( target ); throw e; } - + nextInterceptor.process( call ); } /** - * Checks to see the entry being moved exists, and so does its parent, - * otherwise throws the appropriate LdapException. + * Checks to see the entry being moved exists, and so does its parent, otherwise throws the appropriate + * LdapException. */ protected void process( NextInterceptor nextInterceptor, MoveAndModifyRN call ) throws NamingException { @@ -300,18 +288,17 @@ { LdapNameAlreadyBoundException e = null; e = new LdapNameAlreadyBoundException( "target entry " + target - + " already exists!" ); + + " already exists!" ); e.setResolvedName( target ); throw e; } - + nextInterceptor.process( call ); } /** - * Checks to see the entry being searched exists, otherwise throws the - * appropriate LdapException. + * Checks to see the entry being searched exists, otherwise throws the appropriate LdapException. */ protected void process( NextInterceptor nextInterceptor, Search call ) throws NamingException { @@ -323,33 +310,32 @@ nextInterceptor.process( call ); return; } - + Attribute attr = nexus.getRootDSE().get( "subschemaSubentry" ); if ( ( ( String ) attr.get() ).equalsIgnoreCase( base.toString() ) ) { nextInterceptor.process( call ); return; - } + } assertHasEntry( msg, base ); - + nextInterceptor.process( call ); } /** - * Asserts that an entry is present and as a side effect if it is not, - * creates a LdapNameNotFoundException, which is used to set the before - * exception on the invocation - eventually the exception is thrown. + * Asserts that an entry is present and as a side effect if it is not, creates a LdapNameNotFoundException, which is + * used to set the before exception on the invocation - eventually the exception is thrown. * - * @param msg the message to prefix to the distinguished name for explanation - * @param dn the distinguished name of the entry that is asserted + * @param msg the message to prefix to the distinguished name for explanation + * @param dn the distinguished name of the entry that is asserted * @param invocation the invocation object to alter if the entry does not exist * @throws NamingException if the entry does not exist */ private void assertHasEntry( String msg, Name dn ) throws NamingException { - if ( ! nexus.hasEntry( dn ) ) + if ( !nexus.hasEntry( dn ) ) { LdapNameNotFoundException e = null; Modified: directory/apacheds/branches/interceptor_revamp/core/src/test/org/apache/ldap/server/jndi/invocation/interceptor/ConfigurationTest.java URL: http://svn.apache.org/viewcvs/directory/apacheds/branches/interceptor_revamp/core/src/test/org/apache/ldap/server/jndi/invocation/interceptor/ConfigurationTest.java?view=diff&r1=158734&r2=158735 ============================================================================== --- directory/apacheds/branches/interceptor_revamp/core/src/test/org/apache/ldap/server/jndi/invocation/interceptor/ConfigurationTest.java (original) +++ directory/apacheds/branches/interceptor_revamp/core/src/test/org/apache/ldap/server/jndi/invocation/interceptor/ConfigurationTest.java Tue Mar 22 22:11:07 2005 @@ -1,30 +1,41 @@ package org.apache.ldap.server.jndi.invocation.interceptor; -import java.util.HashMap; -import java.util.Map; - -import javax.naming.NamingException; import junit.framework.Assert; - import org.apache.ldap.server.AbstractServerTest; import org.apache.ldap.server.jndi.EnvKeys; import org.apache.ldap.server.jndi.invocation.Invocation; -public class ConfigurationTest extends AbstractServerTest { - +import javax.naming.NamingException; +import java.util.HashMap; +import java.util.Map; + + +/** + * Test case for interceptor configurations. + * + * @author <a href="mailto:[email protected]">Apache Directory Project</a> + * @version $Rev$, $Date$ + */ +public class ConfigurationTest extends AbstractServerTest +{ + private TestInterceptorChain rootChain = new TestInterceptorChain(); + private TestInterceptorChain childChain = new TestInterceptorChain(); + private TestInterceptor interceptorA = new TestInterceptor(); + private TestInterceptor interceptorB = new TestInterceptor(); - + + protected void setUp() throws Exception { rootChain.addLast( "A", interceptorA ); rootChain.addLast( "child", childChain ); childChain.addLast( "B", interceptorB ); rootChain.addLast( "default", InterceptorChain.newDefaultChain() ); - + extras.put( EnvKeys.INTERCEPTORS, rootChain ); extras.put( EnvKeys.INTERCEPTORS + "#root", "1" ); extras.put( EnvKeys.INTERCEPTORS + ".A", "2" ); @@ -34,10 +45,11 @@ extras.put( EnvKeys.INTERCEPTORS + ".child.B", "6" ); extras.put( EnvKeys.INTERCEPTORS + ".child.B#B", "7" ); extras.put( EnvKeys.INTERCEPTORS + ".child.B#B.B", "8" ); - + super.setUp(); } - + + public void testRootChain() throws Exception { Map expected = new HashMap(); @@ -50,6 +62,7 @@ Assert.assertEquals( expected, rootChain.config ); } + public void testChildChain() throws Exception { Map expected = new HashMap(); @@ -58,7 +71,8 @@ expected.put( "B#B.B", "8" ); Assert.assertEquals( expected, childChain.config ); } - + + public void testA() throws Exception { Map expected = new HashMap(); @@ -67,6 +81,7 @@ Assert.assertEquals( expected, interceptorA.config ); } + public void testB() throws Exception { Map expected = new HashMap(); @@ -74,32 +89,41 @@ expected.put( "B.B", "8" ); Assert.assertEquals( expected, interceptorB.config ); } - + + private static class TestInterceptorChain extends InterceptorChain { private Map config; - - public synchronized void init(InterceptorContext ctx) throws NamingException { + + + public synchronized void init( InterceptorContext ctx ) throws NamingException + { config = ctx.getConfig(); - super.init(ctx); + super.init( ctx ); } - + } private static class TestInterceptor implements Interceptor { private Map config; - public void init(InterceptorContext context) throws NamingException { + + public void init( InterceptorContext context ) throws NamingException + { config = context.getConfig(); } - public void destroy() { + + public void destroy() + { } - public void process(NextInterceptor nextInterceptor, Invocation invocation) throws NamingException { + + public void process( NextInterceptor nextInterceptor, Invocation invocation ) throws NamingException + { nextInterceptor.process( invocation ); } } - + }
