Spring LDAP

org.springframework.ldap.control
Class AbstractFallbackRequestAndResponseControlDirContextProcessor

java.lang.Object
  extended by org.springframework.ldap.control.AbstractRequestControlDirContextProcessor
      extended by org.springframework.ldap.control.AbstractFallbackRequestAndResponseControlDirContextProcessor
All Implemented Interfaces:
DirContextProcessor
Direct Known Subclasses:
PagedResultsDirContextProcessor, SortControlDirContextProcessor

public abstract class AbstractFallbackRequestAndResponseControlDirContextProcessor
extends AbstractRequestControlDirContextProcessor

Convenient base class useful when implementing a standard DirContextProcessor which has a request control and a response control. It handles the loading of the control classes, using fallback implementations specified by the subclass if necessary. It handles the request control constructor invocation; it only needs the constructor arguments to be provided. It also handles most of the work in the post processing of the response control, only delegating to a template method for the actual value retrieval. In short, it makes it easy to implement a custom DirContextProcessor.

 public class SortControlDirContextProcessor extends AbstractFallbackRequestAndResponseControlDirContextProcessor {
        String sortKey;
 
        private boolean sorted = false;
 
        private int resultCode = -1;
 
        public SortControlDirContextProcessor(String sortKey) {
                this.sortKey = sortKey;
 
                defaultRequestControl = "javax.naming.ldap.SortControl";
                defaultResponseControl = "com.sun.jndi.ldap.ctl.SortControl";
                fallbackRequestControl = "javax.naming.ldap.SortResponseControl";
                fallbackResponseControl = "com.sun.jndi.ldap.ctl.SortResponseControl";
 
                loadControlClasses();
        }
 
        public boolean isSorted() {
                return sorted;
        }
 
        public int getResultCode() {
                return resultCode;
        }
 
        public Control createRequestControl() {
                return super.createRequestControl(new Class[] { String[].class, boolean.class }, new Object[] {
                                new String[] { sortKey }, Boolean.valueOf(critical) });
        }
 
        protected void handleResponse(Object control) {
                Boolean result = (Boolean) invokeMethod("isSorted", responseControlClass, control);
                this.sorted = result.booleanValue();
                Integer code = (Integer) invokeMethod("getResultCode", responseControlClass, control);
                resultCode = code.intValue();
        }
 }
 

Author:
Ulrik Sandberg

Field Summary
protected  boolean critical
           
protected  String defaultRequestControl
           
protected  String defaultResponseControl
           
protected  String fallbackRequestControl
           
protected  String fallbackResponseControl
           
protected  Class requestControlClass
           
protected  Class responseControlClass
           
 
Fields inherited from class org.springframework.ldap.control.AbstractRequestControlDirContextProcessor
log
 
Constructor Summary
AbstractFallbackRequestAndResponseControlDirContextProcessor()
           
 
Method Summary
 Control createRequestControl(Class[] paramTypes, Object[] params)
          Creates a request control using the constructor parameters given in params.
protected abstract  void handleResponse(Object control)
           
protected  Object invokeMethod(String method, Class clazz, Object control)
          Utility method for invoking a method on a Control.
protected  void loadControlClasses()
           
 void postProcess(DirContext ctx)
          Perform post-processing on the supplied DirContext.
 void setRequestControlClass(Class requestControlClass)
           
 void setResponseControlClass(Class responseControlClass)
          Set the class of the expected ResponseControl for the sorted result response.
 
Methods inherited from class org.springframework.ldap.control.AbstractRequestControlDirContextProcessor
createRequestControl, isReplaceSameControlEnabled, preProcess, setReplaceSameControlEnabled
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

responseControlClass

protected Class responseControlClass

requestControlClass

protected Class requestControlClass

critical

protected boolean critical

defaultRequestControl

protected String defaultRequestControl

defaultResponseControl

protected String defaultResponseControl

fallbackRequestControl

protected String fallbackRequestControl

fallbackResponseControl

protected String fallbackResponseControl
Constructor Detail

AbstractFallbackRequestAndResponseControlDirContextProcessor

public AbstractFallbackRequestAndResponseControlDirContextProcessor()
Method Detail

loadControlClasses

protected void loadControlClasses()

setResponseControlClass

public void setResponseControlClass(Class responseControlClass)
Set the class of the expected ResponseControl for the sorted result response.

Parameters:
responseControlClass - Class of the expected response control.

setRequestControlClass

public void setRequestControlClass(Class requestControlClass)

invokeMethod

protected Object invokeMethod(String method,
                              Class clazz,
                              Object control)
Utility method for invoking a method on a Control.

Parameters:
method - name of method to invoke
clazz - Class of the object that the method should be invoked on
control - Instance that the method should be invoked on
Returns:
the invocation result, if any

createRequestControl

public Control createRequestControl(Class[] paramTypes,
                                    Object[] params)
Creates a request control using the constructor parameters given in params.

Parameters:
paramTypes - Types of the constructor parameters
params - Actual constructor parameters
Returns:
Control to be used by the DirContextProcessor

postProcess

public void postProcess(DirContext ctx)
                 throws NamingException
Description copied from interface: DirContextProcessor
Perform post-processing on the supplied DirContext.

Parameters:
ctx - the DirContext instance.
Throws:
NamingException - if thrown by the underlying operation.

handleResponse

protected abstract void handleResponse(Object control)

Spring LDAP