From b9b49c232ad28c2ace82cd573ff7bef0ab98f294 Mon Sep 17 00:00:00 2001
From: jvergara <jvergara@localhost>
Date: Tue, 07 Jul 2009 00:12:51 +0000
Subject: [PATCH] Improve the displayed messages when an ADSContextException occurs. i18n the messages of the ADSContextException. Make dsreplication consistent with the fix made for dsconfig (see issue 4091). Fix a bug in ADSContext when deleting the contents of the ADS. Fix a bug in the equivalent command display when the user chooses to disable all replication on a server or to disable the replication server.

---
 opends/src/ads/org/opends/admin/ads/ADSContextException.java                    |   61 +++++++++++++------
 opends/src/ads/org/opends/admin/ads/SubtreeDeleteControl.java                   |   43 ++------------
 opends/src/messages/messages/quicksetup.properties                              |    5 +
 opends/src/quicksetup/org/opends/quicksetup/installer/Installer.java            |    2 
 opends/src/server/org/opends/server/tools/dsreplication/ReplicationCliMain.java |   65 +++++++++++++++++----
 opends/src/server/org/opends/server/tools/dsconfig/DSConfig.java                |    1 
 6 files changed, 105 insertions(+), 72 deletions(-)

diff --git a/opends/src/ads/org/opends/admin/ads/ADSContextException.java b/opends/src/ads/org/opends/admin/ads/ADSContextException.java
index 12226c0..b8139c6 100644
--- a/opends/src/ads/org/opends/admin/ads/ADSContextException.java
+++ b/opends/src/ads/org/opends/admin/ads/ADSContextException.java
@@ -22,11 +22,13 @@
  * CDDL HEADER END
  *
  *
- *      Copyright 2008 Sun Microsystems, Inc.
+ *      Copyright 2008-2009 Sun Microsystems, Inc.
  */
 
 package org.opends.admin.ads;
 
+import static org.opends.messages.QuickSetupMessages.*;
+
 import org.opends.messages.Message;
 import org.opends.server.types.OpenDsException;
 
@@ -120,7 +122,7 @@
    */
   public ADSContextException(ErrorType error)
   {
-    this.error = error;
+    this(error, null);
   }
 
   /**
@@ -131,8 +133,14 @@
    */
   public ADSContextException(ErrorType error, Throwable x)
   {
+    super(getMessage(error, x), x);
     this.error = error;
     this.embeddedException = x;
+    toString = "ADSContextException: error type "+error+".";
+    if (getCause() != null)
+    {
+      toString += "  Root cause: "+getCause().toString();
+    }
   }
 
   /**
@@ -154,24 +162,6 @@
   }
 
   /**
-   * Retrieves a message providing the reason for this exception.
-   *
-   * @return  A message providing the reason for this exception.
-   */
-  public Message getReason()
-  {
-    if (toString == null)
-    {
-      toString = "ADSContextException: error type "+error+".";
-      if (getCause() != null)
-      {
-        toString += "  Root cause: "+getCause().toString();
-      }
-    }
-    return Message.raw(toString); // TODO: i18n
-  }
-
-  /**
    * {@inheritDoc}
    */
   public void printStackTrace()
@@ -184,4 +174,35 @@
       System.out.println("}");
     }
   }
+
+  /**
+   * {@inheritDoc}
+   */
+  public String toString()
+  {
+    return toString;
+  }
+
+  private static Message getMessage(ErrorType error, Throwable x)
+  {
+    Message msg;
+    if (x != null)
+    {
+      if (x instanceof OpenDsException)
+      {
+        msg = INFO_ADS_CONTEXT_EXCEPTION_WITH_DETAILS_MSG.get(error.toString(),
+            ((OpenDsException)x).getMessageObject());
+      }
+      else
+      {
+        msg = INFO_ADS_CONTEXT_EXCEPTION_WITH_DETAILS_MSG.get(error.toString(),
+            x.toString());
+      }
+    }
+    else
+    {
+      msg = INFO_ADS_CONTEXT_EXCEPTION_MSG.get(error.toString());
+    }
+    return msg;
+  }
 }
diff --git a/opends/src/ads/org/opends/admin/ads/SubtreeDeleteControl.java b/opends/src/ads/org/opends/admin/ads/SubtreeDeleteControl.java
index f63ae8b..b29d891 100644
--- a/opends/src/ads/org/opends/admin/ads/SubtreeDeleteControl.java
+++ b/opends/src/ads/org/opends/admin/ads/SubtreeDeleteControl.java
@@ -22,17 +22,17 @@
  * CDDL HEADER END
  *
  *
- *      Copyright 2008 Sun Microsystems, Inc.
+ *      Copyright 2008-2009 Sun Microsystems, Inc.
  */
 
 package org.opends.admin.ads;
 
-import javax.naming.ldap.Control;
+import javax.naming.ldap.BasicControl;
 
 /**
  * This class implements the LDAP subtree delete control for JNDI.
  */
-public class SubtreeDeleteControl implements Control
+public class SubtreeDeleteControl extends BasicControl
 {
   /**
    * The serial version identifier required to satisfy the compiler
@@ -44,39 +44,10 @@
   static final long serialVersionUID = 3941576361457157921L;
 
   /**
-    * Retrieves the object identifier assigned for the LDAP control.
-    *
-    * @return The non-null object identifier string.
+    * Default constructor.
     */
-  public String getID() {
-    return "1.2.840.113556.1.4.805";
+  public SubtreeDeleteControl()
+  {
+    super("1.2.840.113556.1.4.805");
   }
-
-  /**
-    * Determines the criticality of the LDAP control.
-    * A critical control must not be ignored by the server.
-    * In other words, if the server receives a critical control
-    * that it does not support, regardless of whether the control
-    * makes sense for the operation, the operation will not be performed
-    * and an <tt>OperationNotSupportedException</tt> will be thrown.
-    * @return true if this control is critical; false otherwise.
-    */
-  public boolean isCritical() {
-    return true;
-  }
-
-  /**
-    * Retrieves the ASN.1 BER encoded value of the LDAP control.
-    * The result is the raw BER bytes including the tag and length of
-    * the control's value. It does not include the controls OID or criticality.
-    *
-    * Null is returned if the value is absent.
-    *
-    * @return A possibly null byte array representing the ASN.1 BER encoded
-    *         value of the LDAP control.
-    */
-  public byte[] getEncodedValue() {
-    return new byte[] {};
-  }
-
 }
diff --git a/opends/src/messages/messages/quicksetup.properties b/opends/src/messages/messages/quicksetup.properties
index 4e74289..2805dc1 100644
--- a/opends/src/messages/messages/quicksetup.properties
+++ b/opends/src/messages/messages/quicksetup.properties
@@ -1350,3 +1350,8 @@
  the upgrader (%s).%n%nTo fix this problem delete the file %s and click on \
  'Next' again.%nOnce the upgrader finishes you will have to set again the \
  java arguments by running the command-line %s.
+INFO_ADS_CONTEXT_EXCEPTION_MSG=Registration information error.  Error type: \
+ '%s'.
+INFO_ADS_CONTEXT_EXCEPTION_WITH_DETAILS_MSG=Registration information error.  \
+ Error type: '%s'.  Details: %s
+ 
\ No newline at end of file
diff --git a/opends/src/quicksetup/org/opends/quicksetup/installer/Installer.java b/opends/src/quicksetup/org/opends/quicksetup/installer/Installer.java
index cc420a8..83af789 100644
--- a/opends/src/quicksetup/org/opends/quicksetup/installer/Installer.java
+++ b/opends/src/quicksetup/org/opends/quicksetup/installer/Installer.java
@@ -2697,7 +2697,7 @@
               ReturnCode.CONFIGURATION_ERROR,
               ((isRemoteServer)
                       ? INFO_REMOTE_ADS_EXCEPTION.get(
-                      getHostDisplay(auth), ace.getReason())
+                      getHostDisplay(auth), ace.getMessageObject())
                       : INFO_ADS_EXCEPTION.get(ace.toString())), ace);
     }
     finally
diff --git a/opends/src/server/org/opends/server/tools/dsconfig/DSConfig.java b/opends/src/server/org/opends/server/tools/dsconfig/DSConfig.java
index 71ec87a..94367cf 100644
--- a/opends/src/server/org/opends/server/tools/dsconfig/DSConfig.java
+++ b/opends/src/server/org/opends/server/tools/dsconfig/DSConfig.java
@@ -74,7 +74,6 @@
 import org.opends.server.types.InitializationException;
 import org.opends.server.util.EmbeddedUtils;
 import org.opends.server.util.ServerConstants;
-import org.opends.server.util.SetupUtils;
 import org.opends.server.util.StaticUtils;
 import org.opends.server.util.args.ArgumentException;
 import org.opends.server.util.args.BooleanArgument;
diff --git a/opends/src/server/org/opends/server/tools/dsreplication/ReplicationCliMain.java b/opends/src/server/org/opends/server/tools/dsreplication/ReplicationCliMain.java
index 77067cf..5044e92 100644
--- a/opends/src/server/org/opends/server/tools/dsreplication/ReplicationCliMain.java
+++ b/opends/src/server/org/opends/server/tools/dsreplication/ReplicationCliMain.java
@@ -5137,7 +5137,7 @@
     catch (ADSContextException adce)
     {
       throw new ReplicationCliException(
-          ERR_REPLICATION_UPDATING_ADS.get(adce.getReason()),
+          ERR_REPLICATION_UPDATING_ADS.get(adce.getMessageObject()),
           ERROR_UPDATING_ADS, adce);
     }
     if (!adsAlreadyReplicated)
@@ -5789,10 +5789,12 @@
       {
         LOG.log(Level.INFO, "Error unregistering server: "+
             server.getAdsProperties(), adce);
-        println();
-        println(
-            ERR_REPLICATION_UPDATING_ADS.get(adce.getMessage()));
-        println();
+        if (adce.getError() != ADSContextException.ErrorType.NOT_YET_REGISTERED)
+        {
+          throw new ReplicationCliException(
+              ERR_REPLICATION_UPDATING_ADS.get(adce.getMessageObject()),
+              ERROR_READING_ADS, adce);
+        }
       }
     }
 
@@ -5942,10 +5944,13 @@
           {
             LOG.log(Level.WARNING, "Error unregistering server: "+
                 s.getAdsProperties(), adce);
-            println();
-            println(
-                ERR_REPLICATION_UPDATING_ADS.get(adce.getMessage()));
-            println();
+            if (adce.getError() !=
+              ADSContextException.ErrorType.NOT_YET_REGISTERED)
+            {
+              throw new ReplicationCliException(
+                  ERR_REPLICATION_UPDATING_ADS.get(adce.getMessageObject()),
+                  ERROR_READING_ADS, adce);
+            }
           }
         }
       }
@@ -5977,15 +5982,15 @@
         }
         adsCtx.createAdminData(adminBackendName);
         printProgress(formatter.getFormattedDone());
+        printlnProgress();
       }
       catch (ADSContextException adce)
       {
         LOG.log(Level.SEVERE, "Error resetting contents of cn=admin data: "+
             adce, adce);
-        println();
-        println(
-            ERR_REPLICATION_UPDATING_ADS.get(adce.getMessage()));
-        println();
+        throw new ReplicationCliException(
+            ERR_REPLICATION_UPDATING_ADS.get(adce.getMessageObject()),
+            ERROR_READING_ADS, adce);
       }
     }
   }
@@ -8307,6 +8312,10 @@
       {
         s = ((NamingException)c).toString(true);
       }
+      else if (c instanceof OpenDsException)
+      {
+        s = ((OpenDsException)c).getMessageObject().toString();
+      }
       else
       {
         s = c.toString();
@@ -8903,9 +8912,14 @@
       try
       {
         BufferedWriter writer =
-          new BufferedWriter(new FileWriter(file, false));
+          new BufferedWriter(new FileWriter(file, true));
+
+        writer.write(SHELL_COMMENT_SEPARATOR+getCurrentOperationDateMessage());
+        writer.newLine();
+
         writer.write(commandBuilder.toString());
         writer.newLine();
+        writer.newLine();
 
         writer.flush();
         writer.close();
@@ -8999,6 +9013,29 @@
       }
     }
 
+    if (subcommandName.equals(
+        ReplicationCliArgumentParser.DISABLE_REPLICATION_SUBCMD_NAME))
+    {
+      DisableReplicationUserData disableData =
+        (DisableReplicationUserData)uData;
+      if (disableData.disableAll())
+      {
+        commandBuilder.addArgument(new BooleanArgument(
+            argParser.disableAllArg.getName(),
+            argParser.disableAllArg.getShortIdentifier(),
+            argParser.disableAllArg.getLongIdentifier(),
+            INFO_DESCRIPTION_DISABLE_ALL.get()));
+      }
+      else if (disableData.disableReplicationServer())
+      {
+        commandBuilder.addArgument(new BooleanArgument(
+            argParser.disableReplicationServerArg.getName(),
+            argParser.disableReplicationServerArg.getShortIdentifier(),
+            argParser.disableReplicationServerArg.getLongIdentifier(),
+            INFO_DESCRIPTION_DISABLE_REPLICATION_SERVER.get()));
+      }
+    }
+
     addGlobalArguments(commandBuilder, uData);
     return commandBuilder;
   }

--
Gitblit v1.10.0