org.springframework.ldap.control

## 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();
              }
       }

  Author:
    Ulrik Sandberg

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `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

    Constructors
    Constructor and Description
    `AbstractFallbackRequestAndResponseControlDirContextProcessor()`

  - ### Method Summary

    All Methods Instance Methods Abstract Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `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` | `setCritical(boolean critical)` Set whether this control should be indicated as critical.
    `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.

    - #### 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)