diff --git a/sandbox/src/main/java/org/springframework/ldap/control/DummyVLVDirContextProcessor.java b/sandbox/src/main/java/org/springframework/ldap/control/DummyVLVDirContextProcessor.java new file mode 100644 index 00000000..64e9cdcd --- /dev/null +++ b/sandbox/src/main/java/org/springframework/ldap/control/DummyVLVDirContextProcessor.java @@ -0,0 +1,13 @@ +package org.springframework.ldap.control; + +import org.springframework.ldap.core.support.AggregateDirContextProcessor; + +public class DummyVLVDirContextProcessor extends AggregateDirContextProcessor { + + private VirtualListViewControlDirContextProcessor vlvProcessor; + + private SortControlDirContextProcessor sortControlProcessor; + + public DummyVLVDirContextProcessor(String sortKey, int pageSize) { + } +} diff --git a/sandbox/src/main/java/org/springframework/ldap/control/VirtualListViewRequestControl.java b/sandbox/src/main/java/org/springframework/ldap/control/VirtualListViewControlDirContextProcessor.java similarity index 88% rename from sandbox/src/main/java/org/springframework/ldap/control/VirtualListViewRequestControl.java rename to sandbox/src/main/java/org/springframework/ldap/control/VirtualListViewControlDirContextProcessor.java index 5e8103bb..4fe8dd51 100644 --- a/sandbox/src/main/java/org/springframework/ldap/control/VirtualListViewRequestControl.java +++ b/sandbox/src/main/java/org/springframework/ldap/control/VirtualListViewControlDirContextProcessor.java @@ -26,6 +26,7 @@ import javax.naming.ldap.LdapContext; import org.springframework.ldap.control.CreateControlFailedException; import org.springframework.ldap.core.DirContextProcessor; +import org.springframework.ldap.support.LdapUtils; import org.springframework.util.ReflectionUtils; import com.sun.jndi.ldap.ctl.SortControl; @@ -36,6 +37,7 @@ import com.sun.jndi.ldap.ctl.VirtualListViewResponseControl; * DirContextProcessor implementation for managing a virtual list view. *

* This is the request control syntax: + * *

  * VirtualListViewRequest ::= SEQUENCE { 
  *        beforeCount    INTEGER (0..maxInt), 
@@ -47,8 +49,10 @@ import com.sun.jndi.ldap.ctl.VirtualListViewResponseControl;
  *                       greaterThanOrEqual [1] AssertionValue }, 
  *        contextID     OCTET STRING OPTIONAL }
  * 
+ * *

* This is the response control syntax: + * *

  * VirtualListViewResponse ::= SEQUENCE { 
  *        targetPosition    INTEGER (0 .. maxInt), 
@@ -72,7 +76,8 @@ import com.sun.jndi.ldap.ctl.VirtualListViewResponseControl;
  * @author Ulrik Sandberg
  * @see http://www3.ietf.org/proceedings/02nov/I-D/draft-ietf-ldapext-ldapv3-vlv-09.txt
  */
-public class VirtualListViewRequestControl implements DirContextProcessor {
+public class VirtualListViewControlDirContextProcessor implements
+        DirContextProcessor {
 
     private static final Class DEFAULT_RESPONSE_CONTROL = VirtualListViewResponseControl.class;
 
@@ -94,12 +99,12 @@ public class VirtualListViewRequestControl implements DirContextProcessor {
 
     private boolean offsetPercentage;
 
-    public VirtualListViewRequestControl(int pageSize) {
+    public VirtualListViewControlDirContextProcessor(int pageSize) {
         this(pageSize, 0, 0, null);
     }
 
-    public VirtualListViewRequestControl(int pageSize, int targetOffset,
-            int listSize, VirtualListViewResultsCookie cookie) {
+    public VirtualListViewControlDirContextProcessor(int pageSize,
+            int targetOffset, int listSize, VirtualListViewResultsCookie cookie) {
         this.pageSize = pageSize;
         this.targetOffset = targetOffset;
         this.listSize = listSize;
@@ -221,18 +226,19 @@ public class VirtualListViewRequestControl implements DirContextProcessor {
                 Object control = responseControl;
                 byte[] result = (byte[]) invokeMethod("getContextID",
                         responseControlClass, control);
-                this.cookie = new VirtualListViewResultsCookie(result);
-                Integer wrapper = (Integer) invokeMethod("getListSize",
+                Integer listSize = (Integer) invokeMethod("getListSize",
                         responseControlClass, control);
-                this.listSize = wrapper.intValue();
-                wrapper = (Integer) invokeMethod("getTargetOffset",
-                        responseControlClass, control);
-                this.targetOffset = wrapper.intValue();
-                wrapper = (Integer) invokeMethod("getResultCode",
-                        responseControlClass, control);
-                this.resultCode = wrapper.intValue();
+                Integer targetOffset = (Integer) invokeMethod(
+                        "getTargetOffset", responseControlClass, control);
                 this.exception = (NamingException) invokeMethod("getException",
                         responseControlClass, control);
+
+                this.cookie = new VirtualListViewResultsCookie(result,
+                        targetOffset.intValue(), listSize.intValue());
+
+                if (exception != null) {
+                    throw LdapUtils.convertLdapException(exception);
+                }
             }
         }
     }
diff --git a/sandbox/src/main/java/org/springframework/ldap/control/VirtualListViewResultsCookie.java b/sandbox/src/main/java/org/springframework/ldap/control/VirtualListViewResultsCookie.java
index 756d58e0..6614c393 100644
--- a/sandbox/src/main/java/org/springframework/ldap/control/VirtualListViewResultsCookie.java
+++ b/sandbox/src/main/java/org/springframework/ldap/control/VirtualListViewResultsCookie.java
@@ -28,14 +28,22 @@ public class VirtualListViewResultsCookie {
 
     private byte[] cookie;
 
+    private int contentCount;
+
+    private int targetPosition;
+
     /**
      * Constructor.
      * 
      * @param cookie
      *            the cookie returned by a VirtualListViewResponseControl.
+     * @param targetPosition TODO
+     * @param contentCount TODO
      */
-    public VirtualListViewResultsCookie(byte[] cookie) {
+    public VirtualListViewResultsCookie(byte[] cookie, int targetPosition, int contentCount) {
         this.cookie = cookie;
+        this.targetPosition = targetPosition;
+        this.contentCount = contentCount;
     }
 
     /**
@@ -46,4 +54,12 @@ public class VirtualListViewResultsCookie {
     public byte[] getCookie() {
         return cookie;
     }
+
+    public int getContentCount() {
+        return contentCount;
+    }
+
+    public int getTargetPosition() {
+        return targetPosition;
+    }
 }