/* See LICENSE for licensing and NOTICE for copyright. */
package org.ldaptive.concurrent;
import java.util.Collection;
import java.util.concurrent.ExecutorService;
import org.ldaptive.ConnectionFactory;
import org.ldaptive.LdapException;
import org.ldaptive.Response;
import org.ldaptive.SearchFilter;
import org.ldaptive.SearchResult;
import org.ldaptive.handler.SearchEntryHandler;
/**
* Base class for aggregate search executors.
*
* @param <T> type of connection factory
*
* @author Middleware Services
*/
public abstract class AbstractAggregateSearchExecutor<T extends ConnectionFactory> extends AbstractSearchExecutor
{
/**
* Creates a new abstract aggregate search executor.
*
* @param es executor service
*/
public AbstractAggregateSearchExecutor(final ExecutorService es)
{
super(es);
}
/**
* Performs a search operation with the supplied connection factories.
*
* @param factories to get a connection from
* @param filters to search with
*
* @return search results
*
* @throws LdapException if the search fails
*/
public Collection<Response<SearchResult>> search(final T[] factories, final String... filters)
throws LdapException
{
final SearchFilter[] sf = new SearchFilter[filters.length];
for (int i = 0; i < filters.length; i++) {
sf[i] = new SearchFilter(filters[i]);
}
return search(factories, sf, null, (SearchEntryHandler[]) null);
}
/**
* Performs a search operation with the supplied connection factories.
*
* @param factories to get a connection from
* @param filters to search with
*
* @return search results
*
* @throws LdapException if the search fails
*/
public Collection<Response<SearchResult>> search(final T[] factories, final SearchFilter[] filters)
throws LdapException
{
return search(factories, filters, null, (SearchEntryHandler[]) null);
}
/**
* Performs a search operation with the supplied connection factories.
*
* @param factories to get a connection from
* @param filters to search with
* @param attrs to return
*
* @return search results
*
* @throws LdapException if the search fails
*/
public Collection<Response<SearchResult>> search(final T[] factories, final String[] filters, final String... attrs)
throws LdapException
{
final SearchFilter[] sf = new SearchFilter[filters.length];
for (int i = 0; i < filters.length; i++) {
sf[i] = new SearchFilter(filters[i]);
}
return search(factories, sf, attrs, (SearchEntryHandler[]) null);
}
/**
* Performs a search operation with the supplied connection factories.
*
* @param factories to get a connection from
* @param filters to search with
* @param attrs to return
*
* @return search results
*
* @throws LdapException if the search fails
*/
public Collection<Response<SearchResult>> search(
final T[] factories,
final SearchFilter[] filters,
final String... attrs)
throws LdapException
{
return search(factories, filters, attrs, (SearchEntryHandler[]) null);
}
/**
* Performs a search operation with the supplied connection factories.
*
* @param factories to get a connection from
* @param filters to search with
* @param attrs to return
* @param handlers entry handlers
*
* @return search results
*
* @throws LdapException if the search fails
*/
public abstract Collection<Response<SearchResult>> search(
final T[] factories,
final SearchFilter[] filters,
final String[] attrs,
final SearchEntryHandler... handlers)
throws LdapException;
}