You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by ak...@apache.org on 2005/03/23 07:11:12 UTC
svn commit: r158735 [2/2] - in
directory/apacheds/branches/interceptor_revamp/core/src:
main/java/org/apache/ldap/server/jndi/invocation/
main/java/org/apache/ldap/server/jndi/invocation/interceptor/
test/org/apache/ldap/server/jndi/invocation/interceptor/
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 {@link Interceptor}s. <tt>InterceptorChain</tt> is
- * also an {@link Interceptor}, and thus you can create hiararchical interceptor
- * structure to break down complex interceptors.
- * <p>
+ * Manages the chain of {@link Interceptor}s. <tt>InterceptorChain</tt>
+ * is also an {@link Interceptor}, and thus you can create hiararchical
+ * interceptor structure to break down complex interceptors.
+ * <p/>
* {@link org.apache.ldap.server.jndi.JndiProvider#invoke(Invocation)}
- * redirects {@link Invocation}s to {@link #process(Invocation)} and
- * the chain starts.
- *
- * @author The Apache Directory Project (dev@directory.apache.org)
- * @author Trustin Lee (trustin@apache.org)
+ * redirects {@link Invocation}s to {@link#process(Invocation)} and the
+ * chain starts.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">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 {@link #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 {@link InterceptorChain} interacts with
- * {@link NextInterceptor}.
+ * Represents how {@link InterceptorChain} interacts with {@link 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:dev@directory.apache.org">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:dev@directory.apache.org">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 {@link LdapNamingException} that wraps uncaught runtime exceptions
- * thrown from {@link Interceptor}s.
+ * A {@link LdapNamingException} that wraps uncaught runtime exceptions thrown from {@link Interceptor}s.
*
- * @author The Apache Directory Project (dev@directory.apache.org)
- * @author Alex Karasulu (akarasulu@apache.org)
- * @author Trustin Lee (trustin@apache.org)
+ * @author <a href="mailto:dev@directory.apache.org">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 {@link Interceptor} in the interceptor chain.
- *
- * @author The Apache Directory Project (dev@directory.apache.org)
- * @author Trustin Lee (trustin@apache.org)
+ *
+ * @author <a href="mailto:dev@directory.apache.org">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
- * {@link Interceptor} in the {@link InterceptorChain}.
- *
+ * Passes the control of current invocation to the next {@link Interceptor} in the {@link 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 {@link 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 {@link 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 (dev@directory.apache.org)
- * @author Alex Karasulu (akarasulu@apache.org)
- * @author Trustin Lee (trustin@apache.org)
+ * @author <a href="mailto:dev@directory.apache.org">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 {@link Interceptor} that manages and enforces schemas.
- * TODO Better interceptor description required.
*
- * @author The Apache Directory Project (dev@directory.apache.org)
- * @author Alex Karasulu (akarasulu@apache.org)
- * @author Trustin Lee (trustin@apache.org)
+ * @todo Better interceptor description required.
+ * @author <a href="mailto:dev@directory.apache.org">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 {@link Interceptor} that detects any operations that breaks
- * integrity of {@link BackingStore} and terminates the current
- * invocation chain by throwing a {@link NamingException}.
- * Those operations include when an entry already exists at a DN and is
- * added once again to the same DN.
+ * An {@link Interceptor} that detects any operations that breaks integrity
+ * of {@link BackingStore} and terminates the current invocation chain by
+ * throwing a {@link 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:dev@directory.apache.org">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:dev@directory.apache.org">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 );
}
}
-
+
}