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