
org.ldaptive.provider.apache.ApacheLdapControlHandler Maven / Gradle / Ivy
/* See LICENSE for licensing and NOTICE for copyright. */
package org.ldaptive.provider.apache;
import java.nio.ByteBuffer;
import org.apache.directory.api.ldap.extras.controls.SynchronizationModeEnum;
import org.apache.directory.api.ldap.extras.controls.ad.AdDirSync;
import org.apache.directory.api.ldap.extras.controls.ad.AdDirSyncFlag;
import org.apache.directory.api.ldap.extras.controls.ad.AdDirSyncImpl;
import org.apache.directory.api.ldap.extras.controls.ppolicy.PasswordPolicy;
import org.apache.directory.api.ldap.extras.controls.ppolicy.PasswordPolicyErrorEnum;
import org.apache.directory.api.ldap.extras.controls.ppolicy.PasswordPolicyImpl;
import org.apache.directory.api.ldap.extras.controls.ppolicy.PasswordPolicyResponse;
import org.apache.directory.api.ldap.extras.controls.syncrepl.syncDone.SyncDoneValue;
import org.apache.directory.api.ldap.extras.controls.syncrepl.syncInfoValue.SyncRequestValueImpl;
import org.apache.directory.api.ldap.extras.controls.syncrepl.syncState.SyncStateValue;
import org.apache.directory.api.ldap.extras.controls.vlv.VirtualListViewRequestImpl;
import org.apache.directory.api.ldap.extras.controls.vlv.VirtualListViewResponse;
import org.apache.directory.api.ldap.model.message.Control;
import org.apache.directory.api.ldap.model.message.controls.ChangeType;
import org.apache.directory.api.ldap.model.message.controls.EntryChange;
import org.apache.directory.api.ldap.model.message.controls.ManageDsaITImpl;
import org.apache.directory.api.ldap.model.message.controls.PagedResults;
import org.apache.directory.api.ldap.model.message.controls.PagedResultsImpl;
import org.apache.directory.api.ldap.model.message.controls.PersistentSearchImpl;
import org.apache.directory.api.ldap.model.message.controls.SortKey;
import org.apache.directory.api.ldap.model.message.controls.SortRequestControlImpl;
import org.apache.directory.api.ldap.model.message.controls.SortResponse;
import org.ldaptive.LdapUtils;
import org.ldaptive.ResultCode;
import org.ldaptive.ad.control.DirSyncControl;
import org.ldaptive.asn1.UuidType;
import org.ldaptive.control.EntryChangeNotificationControl;
import org.ldaptive.control.ManageDsaITControl;
import org.ldaptive.control.PagedResultsControl;
import org.ldaptive.control.PasswordPolicyControl;
import org.ldaptive.control.PersistentSearchChangeType;
import org.ldaptive.control.PersistentSearchRequestControl;
import org.ldaptive.control.SortRequestControl;
import org.ldaptive.control.SortResponseControl;
import org.ldaptive.control.SyncDoneControl;
import org.ldaptive.control.SyncRequestControl;
import org.ldaptive.control.SyncStateControl;
import org.ldaptive.control.VirtualListViewRequestControl;
import org.ldaptive.control.VirtualListViewResponseControl;
import org.ldaptive.provider.ControlHandler;
/**
* Apache Ldap control handler.
*
* @author Middleware Services
*/
public class ApacheLdapControlHandler implements ControlHandler
{
@Override
public Class getControlType()
{
return Control.class;
}
@Override
public String getOID(final Control control)
{
return control.getOid();
}
@Override
public Control handleRequest(final org.ldaptive.control.RequestControl requestControl)
{
Control ctl = null;
if (ManageDsaITControl.OID.equals(requestControl.getOID())) {
ctl = new ManageDsaITImpl(requestControl.getCriticality());
} else if (SortRequestControl.OID.equals(requestControl.getOID())) {
final SortRequestControl c = (SortRequestControl) requestControl;
ctl = new SortRequestControlImpl();
for (org.ldaptive.control.SortKey k : c.getSortKeys()) {
((SortRequestControlImpl) ctl).addSortKey(
new SortKey(k.getAttributeDescription(), k.getMatchingRuleId(), k.getReverseOrder()));
}
ctl.setCritical(c.getCriticality());
} else if (PagedResultsControl.OID.equals(requestControl.getOID())) {
final PagedResultsControl c = (PagedResultsControl) requestControl;
ctl = new PagedResultsImpl();
((PagedResultsImpl) ctl).setSize(c.getSize());
((PagedResultsImpl) ctl).setCookie(c.getCookie());
ctl.setCritical(c.getCriticality());
} else if (PasswordPolicyControl.OID.equals(requestControl.getOID())) {
final PasswordPolicyControl c = (PasswordPolicyControl) requestControl;
ctl = new PasswordPolicyImpl();
ctl.setCritical(c.getCriticality());
} else if (SyncRequestControl.OID.equals(requestControl.getOID())) {
final SyncRequestControl c = (SyncRequestControl) requestControl;
ctl = new SyncRequestValueImpl();
((SyncRequestValueImpl) ctl).setCookie(c.getCookie());
((SyncRequestValueImpl) ctl).setReloadHint(c.getReloadHint());
((SyncRequestValueImpl) ctl).setMode(SynchronizationModeEnum.getSyncMode(c.getRequestMode().value()));
ctl.setCritical(c.getCriticality());
} else if (PersistentSearchRequestControl.OID.equals(requestControl.getOID())) {
final PersistentSearchRequestControl c = (PersistentSearchRequestControl) requestControl;
ctl = new PersistentSearchImpl();
for (PersistentSearchChangeType type : c.getChangeTypes()) {
((PersistentSearchImpl) ctl).enableNotification(ChangeType.getChangeType(type.value()));
}
((PersistentSearchImpl) ctl).setChangesOnly(c.getChangesOnly());
((PersistentSearchImpl) ctl).setReturnECs(c.getReturnEcs());
ctl.setCritical(c.getCriticality());
} else if (DirSyncControl.OID.equals(requestControl.getOID())) {
final DirSyncControl c = (DirSyncControl) requestControl;
ctl = new AdDirSyncImpl();
((AdDirSyncImpl) ctl).setCookie(c.getCookie());
((AdDirSyncImpl) ctl).setFlag(AdDirSyncFlag.getFlag((int) c.getFlags()));
((AdDirSyncImpl) ctl).setMaxReturnLength(c.getMaxAttributeCount());
ctl.setCritical(c.getCriticality());
} else if (VirtualListViewRequestControl.OID.equals(requestControl.getOID())) {
final VirtualListViewRequestControl c = (VirtualListViewRequestControl) requestControl;
ctl = new VirtualListViewRequestImpl();
((VirtualListViewRequestImpl) ctl).setBeforeCount(c.getBeforeCount());
((VirtualListViewRequestImpl) ctl).setAfterCount(c.getAfterCount());
((VirtualListViewRequestImpl) ctl).setContentCount(c.getContentCount());
((VirtualListViewRequestImpl) ctl).setOffset(c.getTargetOffset());
((VirtualListViewRequestImpl) ctl).setContextId(c.getContextID());
((VirtualListViewRequestImpl) ctl).setAssertionValue(LdapUtils.utf8Encode(c.getAssertionValue()));
ctl.setCritical(c.getCriticality());
}
return ctl;
}
@Override
public org.ldaptive.control.ResponseControl handleResponse(final Control responseControl)
{
org.ldaptive.control.ResponseControl ctl = null;
if (SortResponseControl.OID.equals(responseControl.getOid())) {
final SortResponse c = (SortResponse) responseControl;
ctl = new SortResponseControl(
ResultCode.valueOf(c.getSortResult().getVal()), c.getAttributeName(), c.isCritical());
} else if (PagedResultsControl.OID.equals(responseControl.getOid())) {
final PagedResults c = (PagedResults) responseControl;
ctl = new PagedResultsControl(c.getSize(), c.getCookie(), c.isCritical());
} else if (PasswordPolicyControl.OID.equals(responseControl.getOid())) {
final PasswordPolicy c = (PasswordPolicy) responseControl;
if (c.hasResponse()) {
ctl = new PasswordPolicyControl(c.isCritical());
final PasswordPolicyResponse ppr = c.getResponse();
((PasswordPolicyControl) ctl).setTimeBeforeExpiration(ppr.getTimeBeforeExpiration());
((PasswordPolicyControl) ctl).setGraceAuthNsRemaining(ppr.getGraceAuthNRemaining());
final PasswordPolicyErrorEnum error = ppr.getPasswordPolicyError();
if (error != null) {
((PasswordPolicyControl) ctl).setError(PasswordPolicyControl.Error.valueOf(error.getValue()));
}
}
} else if (SyncStateControl.OID.equals(responseControl.getOid())) {
final SyncStateValue c = (SyncStateValue) responseControl;
ctl = new SyncStateControl(
SyncStateControl.State.valueOf(c.getSyncStateType().getValue()),
UuidType.decode(ByteBuffer.wrap(c.getEntryUUID())),
c.getCookie(),
c.isCritical());
} else if (SyncDoneControl.OID.equals(responseControl.getOid())) {
final SyncDoneValue c = (SyncDoneValue) responseControl;
ctl = new SyncDoneControl(c.getCookie(), c.isRefreshDeletes(), c.isCritical());
} else if (EntryChangeNotificationControl.OID.equals(responseControl.getOid())) {
final EntryChange c = (EntryChange) responseControl;
ctl = new EntryChangeNotificationControl(
PersistentSearchChangeType.valueOf(c.getChangeType().getValue()),
c.getPreviousDn().toString(),
c.getChangeNumber(),
c.isCritical());
} else if (DirSyncControl.OID.equals(responseControl.getOid())) {
final AdDirSync c = (AdDirSync) responseControl;
ctl = new DirSyncControl(
new DirSyncControl.Flag[] {DirSyncControl.Flag.valueOf(c.getFlag().getValue()), },
c.getCookie(),
c.getMaxReturnLength(),
c.isCritical());
} else if (VirtualListViewResponseControl.OID.equals(responseControl.getOid())) {
final VirtualListViewResponse c = (VirtualListViewResponse) responseControl;
ctl = new VirtualListViewResponseControl(
c.getTargetPosition(),
c.getContentCount(),
ResultCode.valueOf(c.getVirtualListViewResult().getValue()),
c.getContextId(),
c.isCritical());
}
return ctl;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy