All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.ldaptive.provider.apache.ApacheLdapControlHandler Maven / Gradle / Ivy

There is a newer version: 1.3.3
Show newest version
/* 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