blob: f6213892efafda52e8a97e6cdd7588579b5a8294 [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.ldap.client.api;
import java.io.IOException;
import org.apache.directory.api.ldap.model.entry.Entry;
import org.apache.directory.api.ldap.model.exception.LdapException;
import org.apache.directory.api.ldap.model.message.AddRequest;
import org.apache.directory.api.ldap.model.message.BindRequest;
import org.apache.directory.api.ldap.model.message.CompareRequest;
import org.apache.directory.api.ldap.model.message.DeleteRequest;
import org.apache.directory.api.ldap.model.message.ExtendedRequest;
import org.apache.directory.api.ldap.model.message.ModifyDnRequest;
import org.apache.directory.api.ldap.model.message.ModifyRequest;
import org.apache.directory.api.ldap.model.message.SearchRequest;
import org.apache.directory.api.ldap.model.message.SearchScope;
import org.apache.directory.api.ldap.model.name.Dn;
import org.apache.directory.ldap.client.api.future.AddFuture;
import org.apache.directory.ldap.client.api.future.BindFuture;
import org.apache.directory.ldap.client.api.future.CompareFuture;
import org.apache.directory.ldap.client.api.future.DeleteFuture;
import org.apache.directory.ldap.client.api.future.ExtendedFuture;
import org.apache.directory.ldap.client.api.future.ModifyDnFuture;
import org.apache.directory.ldap.client.api.future.ModifyFuture;
import org.apache.directory.ldap.client.api.future.SearchFuture;
/**
* Root interface for all asynchronous LDAP connections.
*
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
*/
public interface LdapAsyncConnection extends LdapConnection
{
/**
* Add an entry to the server asynchronously. This is a non blocking add :
* the user has to get for the response from the returned Future.
*
* @param entry The entry to add
* @return the add operation's future
* @throws LdapException if some error occurred
*/
AddFuture addAsync( Entry entry ) throws LdapException;
/**
* Add an entry present in the AddRequest to the server.
*
* @param addRequest the request object containing an entry and controls(if any)
* @return the add operation's future
* @throws LdapException if some error occurred
*/
AddFuture addAsync( AddRequest addRequest ) throws LdapException;
/**
* Asynchronous Bind on a server, using the LdapConnectionConfig informations.
*
* @return the bind operation's future
* @throws LdapException if some error occurred
* @throws IOException if some IO error occurred
*/
BindFuture bindAsync() throws LdapException, IOException;
/**
* Anonymous asynchronous Bind on a server.
*
* @return the bind operation's future
* @throws LdapException if some error occurred
* @throws IOException if some IO error occurred
*/
BindFuture anonymousBindAsync() throws LdapException, IOException;
/**
* Simple asynchronous Bind on a server.
*
* @param name The name we use to authenticate the user, it must be a valid Dn
* @param credentials The password, it can't be null
* @return the bind operation's future
* @throws LdapException if some error occurred
* @throws IOException if some IO error occurred
*/
BindFuture bindAsync( String name, String credentials ) throws LdapException, IOException;
/**
* Simple asynchronous Bind on a server.
*
* @param name The name we use to authenticate the user, it must be a valid Dn
* @param credentials The password, it can't be null
* @return the bind operation's future
* @throws LdapException if some error occurred
* @throws IOException if some IO error occurred
*/
BindFuture bindAsync( Dn name, String credentials ) throws LdapException, IOException;
/**
* Do an asynchronous bind, based on a BindRequest.
*
* @param bindRequest The BindRequest to send
* @return the bind operation's future
* @throws LdapException if some error occurred
* @throws IOException if some IO error occurred
*/
BindFuture bindAsync( BindRequest bindRequest ) throws LdapException, IOException;
/**
* Do an asynchronous search, on the base object, using the given filter. The
* SearchRequest parameters default to :
* <pre>
* Scope : ONE
* DerefAlias : ALWAYS
* SizeLimit : none
* TimeLimit : none
* TypesOnly : false
* Attributes : all the user's attributes.
* This method is blocking.
* </pre>
*
* @param baseDn The base for the search, it must be a valid Dn, and can't be emtpy
* @param filter The filter to use for this search, it can't be empty
* @param scope The search scope : OBJECT, ONELEVEL or SUBTREE
* @param attributes The attributes for this search
* @return the search operation's future
* @throws org.apache.directory.api.ldap.model.exception.LdapException if some error occurred
*/
SearchFuture searchAsync( String baseDn, String filter, SearchScope scope, String... attributes )
throws LdapException;
/**
* Do an asynchronous search, on the base object, using the given filter. The
* SearchRequest parameters default to :
* <pre>
* Scope : ONE
* DerefAlias : ALWAYS
* SizeLimit : none
* TimeLimit : none
* TypesOnly : false
* Attributes : all the user's attributes.
* This method is blocking.
* </pre>
*
* @param baseDn The base for the search, it must be a valid Dn, and can't be empty
* @param filter The filter to use for this search, it can't be empty
* @param scope The search scope : OBJECT, ONELEVEL or SUBTREE
* @param attributes The attributes for this search
* @return the search operation's future
* @throws LdapException if some error occurred
*/
SearchFuture searchAsync( Dn baseDn, String filter, SearchScope scope, String... attributes )
throws LdapException;
/**
* Do a search, on the base object, using the given filter. The
* SearchRequest parameters default to :
* <pre>
* Scope : ONE
* DerefAlias : ALWAYS
* SizeLimit : none
* TimeLimit : none
* TypesOnly : false
* Attributes : all the user's attributes.
* This method is blocking.
* </pre>
*
* @param searchRequest The search request to send to the server
* @return the search operation's future
* @throws LdapException if some error occurred
*/
SearchFuture searchAsync( SearchRequest searchRequest ) throws LdapException;
/**
* Performs an asynchronous modify operation based on the modifications present in
* the ModifyRequest.
*
* @param modRequest the request for modify operation
* @return the modify operation's future
* @throws LdapException in case of modify operation failure or timeout happens
*/
ModifyFuture modifyAsync( ModifyRequest modRequest ) throws LdapException;
/**
* Performs the modifyDn operation based on the given ModifyDnRequest.
*
* @param modDnRequest the request
* @return modifyDn operation's future
* @throws LdapException if some error occurred
*/
ModifyDnFuture modifyDnAsync( ModifyDnRequest modDnRequest ) throws LdapException;
/**
* Performs an asynchronous delete operation based on the delete request object.
*
* @param delRequest the delete operation's request
* @return delete operation's future
* @throws LdapException If the Dn is not valid or if the deletion failed
*/
DeleteFuture deleteAsync( DeleteRequest delRequest ) throws LdapException;
/**
* Asynchronously compares an entry's attribute's value with that of the given value
*
* @param compareRequest the CompareRequest which contains the target Dn, attribute name and value
* @return compare operation's future
* @throws LdapException if some error occurred
*/
CompareFuture compareAsync( CompareRequest compareRequest ) throws LdapException;
/**
* Asynchronously requests the server to perform an extended operation based on the given request.
*
* @param extendedRequest the object containing the details of the extended operation to be performed
* @return extended operation's Future
* @throws LdapException if some error occurred
*/
ExtendedFuture extendedAsync( ExtendedRequest extendedRequest ) throws LdapException;
/**
* Configuration of LdapNetworkConnection
*
* @return the configuration of the LDAP connection
*/
LdapConnectionConfig getConfig();
}