/* See LICENSE for licensing and NOTICE for copyright. */
package org.ldaptive.control.util;
import org.ldaptive.Connection;
import org.ldaptive.LdapException;
import org.ldaptive.Response;
import org.ldaptive.SearchOperation;
import org.ldaptive.SearchRequest;
import org.ldaptive.SearchResult;
import org.ldaptive.control.SortKey;
import org.ldaptive.control.SortRequestControl;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Client that simplifies using the virtual list view control.
*
* @author Middleware Services
*/
public class VirtualListViewClient
{
/** Logger for this class. */
protected final Logger logger = LoggerFactory.getLogger(getClass());
/** Connection to invoke the search operation on. */
private final Connection connection;
/** Used on the search operation. */
private final SortRequestControl sortControl;
/**
* Creates a new virtual list view client.
*
* @param conn to execute the search operation on
* @param keys to supply to a sort request control
*/
public VirtualListViewClient(final Connection conn, final SortKey... keys)
{
connection = conn;
sortControl = new SortRequestControl(keys);
}
/**
* Performs a search operation with the {@link org.ldaptive.control.VirtualListViewRequestControl}. The supplied
* request is modified in the following way:
*
* <ul>
* <li>{@link SearchRequest#setControls( org.ldaptive.control.RequestControl...)} is invoked with {@link
* SortRequestControl} and {@link org.ldaptive.control.VirtualListViewRequestControl}</li>
* </ul>
*
* @param request search request to execute
* @param params virtual list view data
*
* @return search operation response
*
* @throws LdapException if the search fails
*/
public Response<SearchResult> execute(final SearchRequest request, final VirtualListViewParams params)
throws LdapException
{
final SearchOperation search = new SearchOperation(connection);
request.setControls(sortControl, params.createRequestControl(true));
return search.execute(request);
}
/**
* Performs a search operation with the {@link org.ldaptive.control.VirtualListViewRequestControl}. The supplied
* request is modified in the following way:
*
* <ul>
* <li>{@link SearchRequest#setControls( org.ldaptive.control.RequestControl...)} is invoked with {@link
* SortRequestControl} and {@link org.ldaptive.control.VirtualListViewRequestControl}</li>
* </ul>
*
* <p>The content count and context id are extracted from the supplied response and replayed as appropriate in the
* request.</p>
*
* @param request search request to execute
* @param params virtual list view data
* @param response of a previous VLV operation
*
* @return search operation response
*
* @throws LdapException if the search fails
*/
public Response<SearchResult> execute(
final SearchRequest request,
final VirtualListViewParams params,
final Response<SearchResult> response)
throws LdapException
{
final SearchOperation search = new SearchOperation(connection);
request.setControls(sortControl, params.createRequestControl(response, true));
return search.execute(request);
}
}