Class AbstractFallbackRequestAndResponseControlDirContextProcessor

java.lang.Object
org.springframework.ldap.control.AbstractRequestControlDirContextProcessor
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();
        }
 }
 
  • Field Details

    • 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 Details

    • AbstractFallbackRequestAndResponseControlDirContextProcessor

      public AbstractFallbackRequestAndResponseControlDirContextProcessor()
  • Method Details

    • 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.
    • setCritical

      public void setCritical(boolean critical)
      Set whether this control should be indicated as critical.
      Parameters:
      critical - whether the control is critical.
      Since:
      2.0
    • handleResponse

      protected abstract void handleResponse(Object control)