/** {@inheritDoc} */
  @Override
  public org.ldaptive.control.ResponseControl handleResponse(final Control responseControl) {
    org.ldaptive.control.ResponseControl ctl = null;
    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());
    }
    return ctl;
  }
 /** {@inheritDoc} */
 @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 (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());
   }
   return ctl;
 }