/* See LICENSE for licensing and NOTICE for copyright. */
package org.ldaptive.auth;
import org.ldaptive.Connection;
import org.ldaptive.SearchOperation;
import org.ldaptive.SearchRequest;
import org.ldaptive.SearchResult;
import org.ldaptive.cache.Cache;
import org.ldaptive.handler.OperationExceptionHandler;
import org.ldaptive.handler.OperationResponseHandler;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Base class for authentication related classes that perform searches.
*
* @author Middleware Services
*/
public abstract class AbstractSearchOperationFactory
{
/** Logger for this class. */
protected final Logger logger = LoggerFactory.getLogger(getClass());
/** Handler to handle search exceptions. */
private OperationExceptionHandler<SearchRequest, SearchResult> searchExceptionHandler;
/** Handlers to handle search responses. */
private OperationResponseHandler<SearchRequest, SearchResult>[] searchResponseHandlers;
/** Cache to use when performing searches. */
private Cache<SearchRequest> searchCache;
/**
* Returns the search exception handler.
*
* @return search exception handler
*/
public OperationExceptionHandler<SearchRequest, SearchResult> getSearchExceptionHandler()
{
return searchExceptionHandler;
}
/**
* Sets the search exception handler.
*
* @param handler search exception handler
*/
public void setSearchExceptionHandler(final OperationExceptionHandler<SearchRequest, SearchResult> handler)
{
searchExceptionHandler = handler;
}
/**
* Returns the search response handlers.
*
* @return search response handlers
*/
public OperationResponseHandler<SearchRequest, SearchResult>[] getSearchResponseHandlers()
{
return searchResponseHandlers;
}
/**
* Sets the search response handlers.
*
* @param handlers search response handlers
*/
@SuppressWarnings("unchecked")
public void setSearchResponseHandlers(final OperationResponseHandler<SearchRequest, SearchResult>... handlers)
{
searchResponseHandlers = handlers;
}
/**
* Returns the search cache.
*
* @return cache
*/
public Cache<SearchRequest> getSearchCache()
{
return searchCache;
}
/**
* Sets the search cache.
*
* @param cache to set
*/
public void setSearchCache(final Cache<SearchRequest> cache)
{
searchCache = cache;
}
/**
* Creates a new search operation configured with the properties on this factory.
*
* @param conn to pass to the search operation
*
* @return search operation
*/
protected SearchOperation createSearchOperation(final Connection conn)
{
final SearchOperation op = new SearchOperation(conn);
if (searchExceptionHandler != null) {
op.setOperationExceptionHandler(searchExceptionHandler);
}
if (searchResponseHandlers != null) {
op.setOperationResponseHandlers(searchResponseHandlers);
}
if (searchCache != null) {
op.setCache(searchCache);
}
return op;
}
}