The virtual list view controls are intended to be used by applications that let users browse lists of directory entries. The Internet-Draft LDAP Extensions for Scrolling View Browsing of Search Results describes the controls. The virtual list view request control is used in conjunction with the server-side sort control such that the subset of entries the directory server returns from a search are a window into the full sorted list.
if (isSupported(VirtualListViewRequestControl.OID)) {
ByteString contextID = ByteString.empty();
// Add a window of 2 entries on either side of the first sn=Jensen entry.
final SearchRequest request =
Requests.newSearchRequest("ou=People,dc=example,dc=com",
SearchScope.WHOLE_SUBTREE, "(sn=*)", "sn", "givenName")
.addControl(ServerSideSortRequestControl.newControl(
true, new SortKey("sn")))
.addControl(
VirtualListViewRequestControl.newAssertionControl(
true,
ByteString.valueOf("Jensen"),
2, 2, contextID));
final SearchResultHandler resultHandler = new MySearchResultHandler();
final Result result = connection.search(request, resultHandler);
try {
final ServerSideSortResponseControl sssControl =
result.getControl(ServerSideSortResponseControl.DECODER,
new DecodeOptions());
if (sssControl != null && sssControl.getResult() == ResultCode.SUCCESS){
System.out.println("# Entries are sorted.");
} else {
System.out.println("# Entries not necessarily sorted");
}
final VirtualListViewResponseControl vlvControl =
result.getControl(VirtualListViewResponseControl.DECODER,
new DecodeOptions());
System.out.println("# Position in list: "
+ vlvControl.getTargetPosition() + "/"
+ vlvControl.getContentCount());
} catch (final DecodeException e) {
// Failed to decode the response control.
}
}
OpenDJ directory server supports the virtual list view controls.
In order to set up OpenDJ directory server to produce the following output
with the example code, use OpenDJ Control Panel > Manage Indexes > New
VLV Index... to set up a virtual list view index for people by last name,
using the filter (|(givenName=*)(sn=*)), and sorting first
by surname, sn, in ascending order, then by given name
also in ascending order.
dn: uid=skellehe,ou=People,dc=example,dc=com givenName: Sue sn: Kelleher dn: uid=ejohnson,ou=People,dc=example,dc=com givenName: Emanuel sn: Johnson dn: uid=ajensen,ou=People,dc=example,dc=com givenName: Allison sn: Jensen dn: uid=bjense2,ou=People,dc=example,dc=com givenName: Bjorn sn: Jensen dn: uid=bjensen,ou=People,dc=example,dc=com givenName: Barbara sn: Jensen # Entries are sorted. # Position in list: 92/150

