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;
+ }
}