Package org.ldaptive.referral
Class AbstractFollowReferralHandler<Q extends Request,S extends Result>
- java.lang.Object
-
- org.ldaptive.AbstractFreezable
-
- org.ldaptive.transport.MessageFunctional<Q,S>
-
- org.ldaptive.transport.MessageFunctional.Function<Q,S,S,S>
-
- org.ldaptive.referral.AbstractFollowReferralHandler<Q,S>
-
- Type Parameters:
Q
- type of requestS
- type of result
- Direct Known Subclasses:
AbstractFollowSearchReferralHandler
,FollowAddReferralHandler
,FollowCompareReferralHandler
,FollowDeleteReferralHandler
,FollowModifyDnReferralHandler
,FollowModifyReferralHandler
public abstract class AbstractFollowReferralHandler<Q extends Request,S extends Result> extends MessageFunctional.Function<Q,S,S,S>
Common implementation of referral handling.
-
-
Field Summary
Fields Modifier and Type Field Description private ReferralConnectionFactory
connectionFactory
Referral connection factory.protected static int
DEFAULT_REFERRAL_LIMIT
Default referral limit.protected Logger
logger
Logger for this class.protected int
referralDepth
Referral depth.protected int
referralLimit
Referral limit.private boolean
throwOnFailure
Whether to throw an exception if a referral cannot be chased.
-
Constructor Summary
Constructors Constructor Description AbstractFollowReferralHandler(int limit, int depth, ReferralConnectionFactory factory, boolean tf)
Creates a new abstract referral handler.
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description S
apply(S result)
protected abstract Operation<Q,S>
createReferralOperation(ConnectionFactory factory)
Creates an operation for this type of referral.protected abstract Q
createReferralRequest(LdapURL url)
Creates a new request for this type of referral.protected S
followReferral(String[] referralUrls)
Follows the supplied referral URLs in random order until a SUCCESS or REFERRAL_LIMIT_EXCEEDED occurs.ReferralConnectionFactory
getReferralConnectionFactory()
Returns the referral connection factory.int
getReferralDepth()
Returns the referral depth of this handler.int
getReferralLimit()
Returns the maximum number of referrals to follow.protected Set<ResultCode>
getSuccessResultCodes()
Returns the result codes that indicate a successful referral was followed.boolean
getThrowOnFailure()
Returns whether to throw on failure to chase referrals.-
Methods inherited from class org.ldaptive.transport.MessageFunctional
getConnection, getHandle, getRequest, newInstance, setConnection, setHandle, setRequest
-
Methods inherited from class org.ldaptive.AbstractFreezable
assertMutable, freeze, freeze, freeze, isFrozen
-
-
-
-
Field Detail
-
DEFAULT_REFERRAL_LIMIT
protected static final int DEFAULT_REFERRAL_LIMIT
Default referral limit. Value is 10.- See Also:
- Constant Field Values
-
logger
protected final Logger logger
Logger for this class.
-
referralLimit
protected final int referralLimit
Referral limit.
-
referralDepth
protected final int referralDepth
Referral depth.
-
connectionFactory
private final ReferralConnectionFactory connectionFactory
Referral connection factory.
-
throwOnFailure
private final boolean throwOnFailure
Whether to throw an exception if a referral cannot be chased.
-
-
Constructor Detail
-
AbstractFollowReferralHandler
public AbstractFollowReferralHandler(int limit, int depth, ReferralConnectionFactory factory, boolean tf)
Creates a new abstract referral handler.- Parameters:
limit
- number of referrals to followdepth
- number of referrals followedfactory
- referral connection factorytf
- whether to throw on failure to chase referral
-
-
Method Detail
-
getReferralLimit
public int getReferralLimit()
Returns the maximum number of referrals to follow.- Returns:
- referral limit
-
getReferralDepth
public int getReferralDepth()
Returns the referral depth of this handler.- Returns:
- referral depth
-
getReferralConnectionFactory
public ReferralConnectionFactory getReferralConnectionFactory()
Returns the referral connection factory.- Returns:
- referral connection factory
-
getThrowOnFailure
public boolean getThrowOnFailure()
Returns whether to throw on failure to chase referrals.- Returns:
- whether to throw on failure to chase referrals
-
createReferralRequest
protected abstract Q createReferralRequest(LdapURL url)
Creates a new request for this type of referral.- Parameters:
url
- of the referral- Returns:
- new request
-
createReferralOperation
protected abstract Operation<Q,S> createReferralOperation(ConnectionFactory factory)
Creates an operation for this type of referral.- Parameters:
factory
- to get a connection with- Returns:
- new operation
-
getSuccessResultCodes
protected Set<ResultCode> getSuccessResultCodes()
Returns the result codes that indicate a successful referral was followed.- Returns:
- success result codes
-
followReferral
protected S followReferral(String[] referralUrls) throws LdapException
Follows the supplied referral URLs in random order until a SUCCESS or REFERRAL_LIMIT_EXCEEDED occurs. If neither of those conditions occurs this method returns null.- Parameters:
referralUrls
- produced by the request- Returns:
- referral response
- Throws:
LdapException
- if the referral limit is exceeded
-
-