/* * CDDL HEADER START * * The contents of this file are subject to the terms of the * Common Development and Distribution License, Version 1.0 only * (the "License"). You may not use this file except in compliance * with the License. * * You can obtain a copy of the license at legal-notices/CDDLv1_0.txt * or http://forgerock.org/license/CDDLv1.0.html. * See the License for the specific language governing permissions * and limitations under the License. * * When distributing Covered Code, include this CDDL HEADER in each * file and include the License file at legal-notices/CDDLv1_0.txt. * If applicable, add the following below this CDDL HEADER, with the * fields enclosed by brackets "[]" replaced with your own identifying * information: * Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END * * * Copyright 2009-2010 Sun Microsystems, Inc. * Portions copyright 2012 ForgeRock AS. */ package org.forgerock.opendj.ldap.requests; import java.util.List; import org.forgerock.i18n.LocalizedIllegalArgumentException; import org.forgerock.opendj.ldap.DN; import org.forgerock.opendj.ldap.DecodeException; import org.forgerock.opendj.ldap.DecodeOptions; import org.forgerock.opendj.ldap.DereferenceAliasesPolicy; import org.forgerock.opendj.ldap.Filter; import org.forgerock.opendj.ldap.SearchScope; import org.forgerock.opendj.ldap.controls.Control; import org.forgerock.opendj.ldap.controls.ControlDecoder; /** * The Search operation is used to request a server to return, subject to access * controls and other restrictions, a set of entries matching a complex search * criterion. This can be used to read attributes from a single entry, from * entries immediately subordinate to a particular entry, or from a whole * subtree of entries. *
* Use {@link Requests#newSearchRequest(DN, SearchScope, Filter, String...)} or * {@link Requests#newSearchRequest(String, SearchScope, String, String...)} to * create a new search request. * *
* SearchRequest request = Requests.newSearchRequest("dc=example,dc=com", SearchScope.WHOLE_SUBTREE,
* "(sn=Jensen)", "cn");
*
*
* Alternatively, use the
* {@link org.forgerock.opendj.ldap.Connection#search(String, SearchScope, String, String...)
* Connection.search()} method to specify the arguments directly.
*
* * Connection connection = ...; * ConnectionEntryReader reader = connection.search( * "dc=example,dc=com", SearchScope.WHOLE_SUBTREE, "(sn=Jensen)", "cn"); **/ public interface SearchRequest extends Request { /** * Adds the provided attribute name(s) to the list of attributes to be * included with each entry that matches the search criteria. Attributes * that are sub-types of listed attributes are implicitly included. * * @param attributeDescriptions * The name(s) of the attribute to be included with each entry. * @return This search request. * @throws UnsupportedOperationException * If this search request does not permit attribute names to be * added. * @throws NullPointerException * If {@code attributeDescriptions} was {@code null}. */ SearchRequest addAttribute(String... attributeDescriptions); @Override SearchRequest addControl(Control control); /** * Returns a {@code List} containing the list of attributes to be included * with each entry that matches the search criteria. Attributes that are * sub-types of listed attributes are implicitly included. The returned * {@code List} may be modified if permitted by this search request. * * @return A {@code List} containing the list of attributes. */ List
* A value of zero (the default) in this field indicates that no * client-requested size limit restrictions are in effect. Servers may also * enforce a maximum number of entries to return. * * @return The size limit that should be used in order to restrict the * maximum number of entries returned by the search. */ int getSizeLimit(); /** * Returns the time limit that should be used in order to restrict the * maximum time (in seconds) allowed for the search. *
* A value of zero (the default) in this field indicates that no * client-requested time limit restrictions are in effect for the search. * Servers may also enforce a maximum time limit for the search. * * @return The time limit that should be used in order to restrict the * maximum time (in seconds) allowed for the search. */ int getTimeLimit(); /** * Indicates whether search results are to contain both attribute * descriptions and values, or just attribute descriptions. * * @return {@code true} if only attribute descriptions (and not values) are * to be returned, or {@code false} (the default) if both attribute * descriptions and values are to be returned. */ boolean isTypesOnly(); /** * Sets the alias dereferencing policy to be used during the search. * * @param policy * The alias dereferencing policy to be used during the search. * @return This search request. * @throws UnsupportedOperationException * If this search request does not permit the alias * dereferencing policy to be set. * @throws NullPointerException * If {@code policy} was {@code null}. */ SearchRequest setDereferenceAliasesPolicy(DereferenceAliasesPolicy policy); /** * Sets the filter that defines the conditions that must be fulfilled in * order for an entry to be returned. * * @param filter * The filter that defines the conditions that must be fulfilled * in order for an entry to be returned. * @return This search request. * @throws UnsupportedOperationException * If this search request does not permit the filter to be set. * @throws NullPointerException * If {@code filter} was {@code null}. */ SearchRequest setFilter(Filter filter); /** * Sets the filter that defines the conditions that must be fulfilled in * order for an entry to be returned. * * @param filter * The filter that defines the conditions that must be fulfilled * in order for an entry to be returned. * @return This search request. * @throws UnsupportedOperationException * If this search request does not permit the filter to be set. * @throws LocalizedIllegalArgumentException * If {@code filter} is not a valid LDAP string representation * of a filter. * @throws NullPointerException * If {@code filter} was {@code null}. */ SearchRequest setFilter(String filter); /** * Sets the distinguished name of the base entry relative to which the * search is to be performed. * * @param dn * The distinguished name of the base entry relative to which the * search is to be performed. * @return This search request. * @throws UnsupportedOperationException * If this search request does not permit the distinguished name * to be set. * @throws NullPointerException * If {@code dn} was {@code null}. */ SearchRequest setName(DN dn); /** * Sets the distinguished name of the base entry relative to which the * search is to be performed. * * @param dn * The distinguished name of the base entry relative to which the * search is to be performed. * @return This search request. * @throws LocalizedIllegalArgumentException * If {@code dn} could not be decoded using the default schema. * @throws UnsupportedOperationException * If this search request does not permit the distinguished name * to be set. * @throws NullPointerException * If {@code dn} was {@code null}. */ SearchRequest setName(String dn); /** * Sets the scope of the search. * * @param scope * The scope of the search. * @return This search request. * @throws UnsupportedOperationException * If this search request does not permit the scope to be set. * @throws NullPointerException * If {@code scope} was {@code null}. */ SearchRequest setScope(SearchScope scope); /** * Sets the size limit that should be used in order to restrict the maximum * number of entries returned by the search. *
* A value of zero (the default) in this field indicates that no * client-requested size limit restrictions are in effect. Servers may also * enforce a maximum number of entries to return. * * @param limit * The size limit that should be used in order to restrict the * maximum number of entries returned by the search. * @return This search request. * @throws UnsupportedOperationException * If this search request does not permit the size limit to be * set. * @throws LocalizedIllegalArgumentException * If {@code limit} was negative. */ SearchRequest setSizeLimit(int limit); /** * Sets the time limit that should be used in order to restrict the maximum * time (in seconds) allowed for the search. *
* A value of zero (the default) in this field indicates that no * client-requested time limit restrictions are in effect for the search. * Servers may also enforce a maximum time limit for the search. * * @param limit * The time limit that should be used in order to restrict the * maximum time (in seconds) allowed for the search. * @return This search request. * @throws UnsupportedOperationException * If this search request does not permit the time limit to be * set. * @throws LocalizedIllegalArgumentException * If {@code limit} was negative. */ SearchRequest setTimeLimit(int limit); /** * Specifies whether search results are to contain both attribute * descriptions and values, or just attribute descriptions. * * @param typesOnly * {@code true} if only attribute descriptions (and not values) * are to be returned, or {@code false} (the default) if both * attribute descriptions and values are to be returned. * @return This search request. * @throws UnsupportedOperationException * If this search request does not permit the types-only * parameter to be set. */ SearchRequest setTypesOnly(boolean typesOnly); }