package com.hwlcn.ldap.ldap.sdk.controls; import com.hwlcn.ldap.asn1.ASN1OctetString; import com.hwlcn.ldap.ldap.sdk.Control; import com.hwlcn.ldap.ldap.sdk.DecodeableControl; import com.hwlcn.ldap.ldap.sdk.LDAPException; import com.hwlcn.ldap.ldap.sdk.LDAPResult; import com.hwlcn.ldap.ldap.sdk.ResultCode; import com.hwlcn.core.annotation.NotMutable; import com.hwlcn.core.annotation.ThreadSafety; import com.hwlcn.ldap.util.ThreadSafetyLevel; import static com.hwlcn.ldap.ldap.sdk.controls.ControlMessages.*; import static com.hwlcn.ldap.util.Debug.*; @NotMutable() @ThreadSafety(level=ThreadSafetyLevel.COMPLETELY_THREADSAFE) public final class PasswordExpiringControl extends Control implements DecodeableControl { public static final String PASSWORD_EXPIRING_OID = "2.16.840.1.113730.3.4.5"; private static final long serialVersionUID = 1250220480854441338L; private final int secondsUntilExpiration; PasswordExpiringControl() { secondsUntilExpiration = -1; } public PasswordExpiringControl(final int secondsUntilExpiration) { super(PASSWORD_EXPIRING_OID, false, new ASN1OctetString(String.valueOf(secondsUntilExpiration))); this.secondsUntilExpiration = secondsUntilExpiration; } public PasswordExpiringControl(final String oid, final boolean isCritical, final ASN1OctetString value) throws LDAPException { super(oid, isCritical, value); if (value == null) { throw new LDAPException(ResultCode.DECODING_ERROR, ERR_PW_EXPIRING_NO_VALUE.get()); } try { secondsUntilExpiration = Integer.parseInt(value.stringValue()); } catch (NumberFormatException nfe) { debugException(nfe); throw new LDAPException(ResultCode.DECODING_ERROR, ERR_PW_EXPIRING_VALUE_NOT_INTEGER.get(), nfe); } } public PasswordExpiringControl decodeControl(final String oid, final boolean isCritical, final ASN1OctetString value) throws LDAPException { return new PasswordExpiringControl(oid, isCritical, value); } public static PasswordExpiringControl get(final LDAPResult result) throws LDAPException { final Control c = result.getResponseControl(PASSWORD_EXPIRING_OID); if (c == null) { return null; } if (c instanceof PasswordExpiringControl) { return (PasswordExpiringControl) c; } else { return new PasswordExpiringControl(c.getOID(), c.isCritical(), c.getValue()); } } public int getSecondsUntilExpiration() { return secondsUntilExpiration; } @Override() public String getControlName() { return INFO_CONTROL_NAME_PW_EXPIRING.get(); } @Override() public void toString(final StringBuilder buffer) { buffer.append("PasswordExpiringControl(secondsUntilExpiration="); buffer.append(secondsUntilExpiration); buffer.append(", isCritical="); buffer.append(isCritical()); buffer.append(')'); } }