From 22094368c2865dcfb6daf8366425212b721a4657 Mon Sep 17 00:00:00 2001
From: matthew_swift <matthew_swift@localhost>
Date: Thu, 05 Feb 2009 17:42:14 +0000
Subject: [PATCH] Merge ASN1 branch to trunk

---
 opends/src/server/org/opends/server/controls/PasswordExpiringControl.java |  163 ++++++++++++++++++++++-------------------------------
 1 files changed, 68 insertions(+), 95 deletions(-)

diff --git a/opends/src/server/org/opends/server/controls/PasswordExpiringControl.java b/opends/src/server/org/opends/server/controls/PasswordExpiringControl.java
index f090fab..9055941 100644
--- a/opends/src/server/org/opends/server/controls/PasswordExpiringControl.java
+++ b/opends/src/server/org/opends/server/controls/PasswordExpiringControl.java
@@ -29,11 +29,8 @@
 
 
 
-import org.opends.server.protocols.asn1.ASN1OctetString;
-import org.opends.server.protocols.ldap.LDAPResultCode;
-import org.opends.server.types.Control;
-import org.opends.server.types.DebugLogLevel;
-import org.opends.server.types.LDAPException;
+import org.opends.server.protocols.asn1.ASN1Writer;
+import org.opends.server.types.*;
 
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
@@ -41,6 +38,7 @@
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 
+import java.io.IOException;
 
 
 /**
@@ -53,6 +51,60 @@
        extends Control
 {
   /**
+   * ControlDecoder implentation to decode this control from a ByteString.
+   */
+  private final static class Decoder
+      implements ControlDecoder<PasswordExpiringControl>
+  {
+    /**
+     * {@inheritDoc}
+     */
+    public PasswordExpiringControl decode(boolean isCritical, ByteString value)
+        throws DirectoryException
+    {
+      if (value == null)
+      {
+        Message message = ERR_PWEXPIRING_NO_CONTROL_VALUE.get();
+        throw new DirectoryException(ResultCode.PROTOCOL_ERROR, message);
+      }
+
+      int secondsUntilExpiration;
+      try
+      {
+        secondsUntilExpiration =
+            Integer.parseInt(value.toString());
+      }
+      catch (Exception e)
+      {
+        if (debugEnabled())
+        {
+          TRACER.debugCaught(DebugLogLevel.ERROR, e);
+        }
+
+        Message message = ERR_PWEXPIRING_CANNOT_DECODE_SECONDS_UNTIL_EXPIRATION.
+            get(getExceptionMessage(e));
+        throw new DirectoryException(ResultCode.PROTOCOL_ERROR, message);
+      }
+
+
+      return new PasswordExpiringControl(isCritical,
+          secondsUntilExpiration);
+    }
+
+    public String getOID()
+    {
+      return OID_NS_PASSWORD_EXPIRING;
+    }
+
+  }
+
+  /**
+   * The Control Decoder that can be used to decode this control.
+   */
+  public static final ControlDecoder<PasswordExpiringControl> DECODER =
+    new Decoder();
+
+  /**
    * The tracer object for the debug logger.
    */
   private static final DebugTracer TRACER = getTracer();
@@ -74,11 +126,7 @@
    */
   public PasswordExpiringControl(int secondsUntilExpiration)
   {
-    super(OID_NS_PASSWORD_EXPIRING, false,
-          new ASN1OctetString(String.valueOf(secondsUntilExpiration)));
-
-
-    this.secondsUntilExpiration = secondsUntilExpiration;
+    this(false, secondsUntilExpiration);
   }
 
 
@@ -87,93 +135,31 @@
    * Creates a new instance of the password expiring control with the provided
    * information.
    *
-   * @param  oid                     The OID to use for this control.
    * @param  isCritical              Indicates whether support for this control
    *                                 should be considered a critical part of the
    *                                 client processing.
    * @param  secondsUntilExpiration  The length of time in seconds until the
    *                                 password actually expires.
    */
-  public PasswordExpiringControl(String oid, boolean isCritical,
-                                 int secondsUntilExpiration)
+  public PasswordExpiringControl(boolean isCritical, int secondsUntilExpiration)
   {
-    super(oid, isCritical,
-          new ASN1OctetString(String.valueOf(secondsUntilExpiration)));
+    super(OID_NS_PASSWORD_EXPIRING, isCritical);
 
 
     this.secondsUntilExpiration = secondsUntilExpiration;
   }
 
 
-
   /**
-   * Creates a new instance of the password expiring control with the provided
-   * information.
+   * Writes this control's value to an ASN.1 writer. The value (if any) must be
+   * written as an ASN1OctetString.
    *
-   * @param  oid                     The OID to use for this control.
-   * @param  isCritical              Indicates whether support for this control
-   *                                 should be considered a critical part of the
-   *                                 client processing.
-   * @param  secondsUntilExpiration  The length of time in seconds until the
-   *                                 password actually expires.
-   * @param  encodedValue            The pre-encoded value for this control.
+   * @param writer The ASN.1 output stream to write to.
+   * @throws IOException If a problem occurs while writing to the stream.
    */
-  private PasswordExpiringControl(String oid, boolean isCritical,
-                                  int secondsUntilExpiration,
-                                  ASN1OctetString encodedValue)
-  {
-    super(oid, isCritical, encodedValue);
-
-
-    this.secondsUntilExpiration = secondsUntilExpiration;
-  }
-
-
-
-  /**
-   * Creates a new password expiring control from the contents of the provided
-   * control.
-   *
-   * @param  control  The generic control containing the information to use to
-   *                  create this password expiring control.
-   *
-   * @return  The password expiring control decoded from the provided control.
-   *
-   * @throws  LDAPException  If this control cannot be decoded as a valid
-   *                         password expiring control.
-   */
-  public static PasswordExpiringControl decodeControl(Control control)
-         throws LDAPException
-  {
-    if (! control.hasValue())
-    {
-      Message message = ERR_PWEXPIRING_NO_CONTROL_VALUE.get();
-      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
-    }
-
-
-    int secondsUntilExpiration;
-    try
-    {
-      secondsUntilExpiration =
-           Integer.parseInt(control.getValue().stringValue());
-    }
-    catch (Exception e)
-    {
-      if (debugEnabled())
-      {
-        TRACER.debugCaught(DebugLogLevel.ERROR, e);
-      }
-
-      Message message = ERR_PWEXPIRING_CANNOT_DECODE_SECONDS_UNTIL_EXPIRATION.
-          get(getExceptionMessage(e));
-      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
-    }
-
-
-    return new PasswordExpiringControl(control.getOID(), control.isCritical(),
-                                       secondsUntilExpiration,
-                                       control.getValue());
+  @Override
+  public void writeValue(ASN1Writer writer) throws IOException {
+    writer.writeOctetString(String.valueOf(secondsUntilExpiration));
   }
 
 
@@ -192,25 +178,12 @@
 
 
   /**
-   * Retrieves a string representation of this password expiring control.
-   *
-   * @return  A string representation of this password expiring control.
-   */
-  public String toString()
-  {
-    StringBuilder buffer = new StringBuilder();
-    toString(buffer);
-    return buffer.toString();
-  }
-
-
-
-  /**
    * Appends a string representation of this password expiring control to the
    * provided buffer.
    *
    * @param  buffer  The buffer to which the information should be appended.
    */
+  @Override
   public void toString(StringBuilder buffer)
   {
     buffer.append("PasswordExpiringControl(secondsUntilExpiration=");

--
Gitblit v1.10.0