/* See LICENSE for licensing and NOTICE for copyright. */
package org.ldaptive.referral;
import org.ldaptive.Connection;
import org.ldaptive.LdapURL;
import org.ldaptive.ModifyOperation;
import org.ldaptive.ModifyRequest;
import org.ldaptive.Operation;
/**
* Provides handling of an ldap referral for modify operations.
*
* @author Middleware Services
*/
public class ModifyReferralHandler extends AbstractReferralHandler<ModifyRequest, Void>
{
/** Creates a new modify referral handler. */
public ModifyReferralHandler()
{
this(DEFAULT_REFERRAL_LIMIT, 0, DEFAULT_CONNECTION_FACTORY);
}
/**
* Creates a new modify referral handler.
*
* @param factory referral connection factory
*/
public ModifyReferralHandler(final ReferralConnectionFactory factory)
{
this(DEFAULT_REFERRAL_LIMIT, 0, factory);
}
/**
* Creates a new modify referral handler.
*
* @param limit number of referrals to follow
*/
public ModifyReferralHandler(final int limit)
{
this(limit, 0, DEFAULT_CONNECTION_FACTORY);
}
/**
* Creates a new modify referral handler.
*
* @param limit number of referrals to follow
* @param factory referral connection factory
*/
public ModifyReferralHandler(final int limit, final ReferralConnectionFactory factory)
{
this(limit, 0, factory);
}
/**
* Creates a new modify referral handler.
*
* @param limit number of referrals to follow
* @param depth number of referrals followed
* @param factory referral connection factory
*/
private ModifyReferralHandler(final int limit, final int depth, final ReferralConnectionFactory factory)
{
super(limit, depth, factory);
}
@Override
protected ModifyRequest createReferralRequest(final ModifyRequest request, final LdapURL url)
{
final ModifyRequest referralRequest = new ModifyRequest();
referralRequest.setControls(request.getControls());
referralRequest.setIntermediateResponseHandlers(request.getIntermediateResponseHandlers());
referralRequest.setReferralHandler(
new ModifyReferralHandler(getReferralLimit(), getReferralDepth() + 1, getReferralConnectionFactory()));
if (!url.getEntry().isDefaultBaseDn()) {
referralRequest.setDn(url.getEntry().getBaseDn());
} else {
referralRequest.setDn(request.getDn());
}
referralRequest.setAttributeModifications(request.getAttributeModifications());
return referralRequest;
}
@Override
protected Operation<ModifyRequest, Void> createReferralOperation(final Connection conn)
{
return new ModifyOperation(conn);
}
}