blob: 23b6cdfefc3129146583ae5a67f1b1c3f3d4199e [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*/
package org.apache.directory.api.ldap.model.message;
import java.util.List;
import org.apache.directory.api.ldap.model.exception.LdapException;
import org.apache.directory.api.ldap.model.filter.ExprNode;
import org.apache.directory.api.ldap.model.name.Dn;
/**
* Search request protocol message interface.
*
* @author <a href="mailto:dev@directory.apache.org"> Apache Directory Project</a>
*/
public interface SearchRequest extends ManyReplyRequest, AbandonableRequest
{
/**
* Different response types that a search request may return. A search
* request unlike any other request type can generate four different kinds
* of responses. It is at most required to return a done response when it is
* complete however before then it can return search entry, search
* reference, and extended responses to the client.
*
* @see #getResponseTypes()
*/
MessageTypeEnum[] RESPONSE_TYPES =
{
MessageTypeEnum.SEARCH_RESULT_DONE,
MessageTypeEnum.SEARCH_RESULT_ENTRY,
MessageTypeEnum.SEARCH_RESULT_REFERENCE,
MessageTypeEnum.EXTENDED_RESPONSE
};
/**
* Gets the different response types generated by a search request.
*
* @return the RESPONSE_TYPES array
* @see #RESPONSE_TYPES
*/
@Override
MessageTypeEnum[] getResponseTypes();
/**
* Gets the search base as a distinguished name.
*
* @return the search base
*/
Dn getBase();
/**
* Sets the search base as a distinguished name.
*
* @param baseDn the search base
* @return The SearchRequest instance
*/
SearchRequest setBase( Dn baseDn );
/**
* Gets the search scope parameter enumeration.
*
* @return the scope enumeration parameter.
*/
SearchScope getScope();
/**
* Sets the search scope parameter enumeration.
*
* @param scope the scope enumeration parameter.
* @return The SearchRequest instance
*/
SearchRequest setScope( SearchScope scope );
/**
* Gets the alias handling parameter.
*
* @return the alias handling parameter enumeration.
*/
AliasDerefMode getDerefAliases();
/**
* Sets the alias handling parameter.
*
* @param aliasDerefAliases the alias handling parameter enumeration.
* @return The SearchRequest instance
*/
SearchRequest setDerefAliases( AliasDerefMode aliasDerefAliases );
/**
* A sizelimit that restricts the maximum number of entries to be returned
* as a result of the search. A value of 0 in this field indicates that no
* client-requested sizelimit restrictions are in effect for the search.
* Servers may enforce a maximum number of entries to return.
*
* @return search size limit.
*/
long getSizeLimit();
/**
* Sets sizelimit that restricts the maximum number of entries to be
* returned as a result of the search. A value of 0 in this field indicates
* that no client-requested sizelimit restrictions are in effect for the
* search. Servers may enforce a maximum number of entries to return.
*
* @param entriesMax maximum search result entries to return.
* @return The SearchRequest instance
*/
SearchRequest setSizeLimit( long entriesMax );
/**
* Gets the timelimit that restricts the maximum time (in seconds) allowed
* for a search. A value of 0 in this field indicates that no client-
* requested timelimit restrictions are in effect for the search.
*
* @return the search time limit in seconds.
*/
int getTimeLimit();
/**
* Sets the timelimit that restricts the maximum time (in seconds) allowed
* for a search. A value of 0 in this field indicates that no client-
* requested timelimit restrictions are in effect for the search.
*
* @param secondsMax the search time limit in seconds.
* @return The SearchRequest instance
*/
SearchRequest setTimeLimit( int secondsMax );
/**
* An indicator as to whether search results will contain both attribute
* types and values, or just attribute types. Setting this field to TRUE
* causes only attribute types (no values) to be returned. Setting this
* field to FALSE causes both attribute types and values to be returned.
*
* @return true for only types, false for types and values.
*/
boolean getTypesOnly();
/**
* An indicator as to whether search results will contain both attribute
* types and values, or just attribute types. Setting this field to TRUE
* causes only attribute types (no values) to be returned. Setting this
* field to FALSE causes both attribute types and values to be returned.
*
* @param typesOnly true for only types, false for types and values.
* @return The SearchRequest instance
*/
SearchRequest setTypesOnly( boolean typesOnly );
/**
* Gets the search filter associated with this search request.
*
* @return the expression node for the root of the filter expression tree.
*/
ExprNode getFilter();
/**
* Sets the search filter associated with this search request.
*
* @param filter the expression node for the root of the filter expression tree.
* @return The SearchRequest instance
*/
SearchRequest setFilter( ExprNode filter );
/**
* Sets the search filter associated with this search request.
*
* @param filter the expression node for the root of the filter expression tree.
* @return The SearchRequest instance
* @throws LdapException If the filter can't be added
*/
SearchRequest setFilter( String filter ) throws LdapException;
/**
* Gets a list of the attributes to be returned from each entry which
* matches the search filter. There are two special values which may be
* used: an empty list with no attributes, and the attribute description
* string "*". Both of these signify that all user attributes are to be
* returned. (The "*" allows the client to request all user attributes in
* addition to specific operational attributes). Attributes MUST be named at
* most once in the list, and are returned at most once in an entry. If
* there are attribute descriptions in the list which are not recognized,
* they are ignored by the server. If the client does not want any
* attributes returned, it can specify a list containing only the attribute
* with OID "1.1". This OID was chosen arbitrarily and does not correspond
* to any attribute in use. Client implementors should note that even if all
* user attributes are requested, some attributes of the entry may not be
* included in search results due to access control or other restrictions.
* Furthermore, servers will not return operational attributes, such as
* objectClasses or attributeTypes, unless they are listed by name, since
* there may be extremely large number of values for certain operational
* attributes.
*
* @return the attributes to return for this request
*/
List<String> getAttributes();
/**
* Adds some attributes to the set of entry attributes to return.
*
* @param attributes the attributes description or identifier.
* @return The SearchRequest instance
*/
SearchRequest addAttributes( String... attributes );
/**
* Removes an attribute to the set of entry attributes to return.
*
* @param attribute the attribute description or identifier.
* @return The SearchRequest instance
*/
SearchRequest removeAttribute( String attribute );
/**
* {@inheritDoc}
*/
@Override
SearchRequest setMessageId( int messageId );
/**
* {@inheritDoc}
*/
@Override
SearchRequest addControl( Control control );
/**
* {@inheritDoc}
*/
@Override
SearchRequest addAllControls( Control[] controls );
/**
* {@inheritDoc}
*/
@Override
SearchRequest removeControl( Control control );
/**
* Tells the client if it should follow referrals instead of throwing exceptions
* @return true if we should follow the referrals
*/
boolean isFollowReferrals();
/**
* Tells the client to follow referrals instead of throwing exceptions
* @return The SearchRequest instance
*/
SearchRequest followReferrals();
/**
* Tells the client if it should ignore referrals instead of throwing exceptions
* @return true if we should ignore the referrals
*/
boolean isIgnoreReferrals();
/**
* Tells the client to ignore referrals instead of throwing exceptions. The entry
* will contain the referral attributeType with the link.
*
* @return The SearchRequest instance
*/
SearchRequest ignoreReferrals();
}