Class AbstractFallbackRequestAndResponseControlDirContextProcessor

  • All Implemented Interfaces:
    DirContextProcessor
    Direct Known Subclasses:
    PagedResultsDirContextProcessor, SortControlDirContextProcessor, VirtualListViewControlDirContextProcessor

    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 Detail

      • responseControlClass

        protected java.lang.Class<?> responseControlClass
      • requestControlClass

        protected java.lang.Class<?> requestControlClass
      • critical

        protected boolean critical
      • defaultRequestControl

        protected java.lang.String defaultRequestControl
      • defaultResponseControl

        protected java.lang.String defaultResponseControl
      • fallbackRequestControl

        protected java.lang.String fallbackRequestControl
      • fallbackResponseControl

        protected java.lang.String fallbackResponseControl
    • Constructor Detail

      • AbstractFallbackRequestAndResponseControlDirContextProcessor

        public AbstractFallbackRequestAndResponseControlDirContextProcessor()
    • Method Detail

      • loadControlClasses

        protected void loadControlClasses()
      • setResponseControlClass

        public void setResponseControlClass​(java.lang.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​(java.lang.Class<?> requestControlClass)
      • invokeMethod

        protected java.lang.Object invokeMethod​(java.lang.String method,
                                                java.lang.Class<?> clazz,
                                                java.lang.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 javax.naming.ldap.Control createRequestControl​(java.lang.Class<?>[] paramTypes,
                                                              java.lang.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​(javax.naming.directory.DirContext ctx)
                         throws javax.naming.NamingException
        Description copied from interface: DirContextProcessor
        Perform post-processing on the supplied DirContext.
        Parameters:
        ctx - the DirContext instance.
        Throws:
        javax.naming.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​(java.lang.Object control)