From 3209b73d0fb691157f2d5b3c7cc1360160e08e86 Mon Sep 17 00:00:00 2001
From: matthew_swift <matthew_swift@localhost>
Date: Fri, 17 Sep 2010 22:06:25 +0000
Subject: [PATCH] Minimize Historical Data (dsreplication/client side). The purge historical can be executed on the local server even when it is stopped. This is matches the functionality provided by utilities such import-ldif, backup, etc.

---
 opendj-sdk/opends/src/server/org/opends/server/util/cli/ConsoleApplication.java |  202 +++++++++++++++++++++-----------------------------
 1 files changed, 85 insertions(+), 117 deletions(-)

diff --git a/opendj-sdk/opends/src/server/org/opends/server/util/cli/ConsoleApplication.java b/opendj-sdk/opends/src/server/org/opends/server/util/cli/ConsoleApplication.java
index 9042e3f..e6d9cae 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/util/cli/ConsoleApplication.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/util/cli/ConsoleApplication.java
@@ -62,9 +62,6 @@
 import org.opends.admin.ads.util.ConnectionUtils;
 import org.opends.admin.ads.util.OpendsCertificateException;
 import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
-import org.opends.quicksetup.util.PlainTextProgressMessageFormatter;
-import org.opends.quicksetup.util.ProgressMessageFormatter;
 import org.opends.quicksetup.util.Utils;
 import org.opends.server.protocols.ldap.LDAPResultCode;
 import org.opends.server.tools.ClientException;
@@ -1116,120 +1113,6 @@
     return pwd;
   }
 
-  /**
-   * The default period time used to write points in the output.
-   */
-  protected static final long DEFAULT_PERIOD_TIME = 3000;
-  /**
-   * Class used to add points periodically to the end of the output.
-   *
-   */
-  protected class PointAdder implements Runnable
-  {
-    private Thread t;
-    private boolean stopPointAdder;
-    private boolean pointAdderStopped;
-    private long periodTime = DEFAULT_PERIOD_TIME;
-    private boolean isError;
-    private ProgressMessageFormatter formatter;
-
-    /**
-     * Default constructor.
-     * Creates a PointAdder that writes to the standard output with the default
-     * period time.
-     */
-    public PointAdder()
-    {
-      this(DEFAULT_PERIOD_TIME, false, new PlainTextProgressMessageFormatter());
-    }
-
-    /**
-     * Default constructor.
-     * @param periodTime the time between printing two points.
-     * @param isError whether the points must be printed in error stream
-     * or output stream.
-     * @param formatter the text formatter.
-     */
-    public PointAdder(long periodTime, boolean isError,
-        ProgressMessageFormatter formatter)
-    {
-      this.periodTime = periodTime;
-      this.isError = isError;
-      this.formatter = formatter;
-    }
-
-    /**
-     * Starts the PointAdder: points are added at the end of the logs
-     * periodically.
-     */
-    public void start()
-    {
-      MessageBuilder mb = new MessageBuilder();
-      mb.append(formatter.getSpace());
-      for (int i=0; i< 5; i++)
-      {
-        mb.append(formatter.getFormattedPoint());
-      }
-      if (isError)
-      {
-        print(mb.toMessage());
-      }
-      else
-      {
-        printProgress(mb.toMessage());
-      }
-      t = new Thread(this);
-      t.start();
-    }
-
-    /**
-     * Stops the PointAdder: points are no longer added at the end of the logs
-     * periodically.
-     */
-    public synchronized void stop()
-    {
-      stopPointAdder = true;
-      while (!pointAdderStopped)
-      {
-        try
-        {
-          t.interrupt();
-          // To allow the thread to set the boolean.
-          Thread.sleep(100);
-        }
-        catch (Throwable t)
-        {
-        }
-      }
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void run()
-    {
-      while (!stopPointAdder)
-      {
-        try
-        {
-          Thread.sleep(periodTime);
-          if (isError)
-          {
-            print(formatter.getFormattedPoint());
-          }
-          else
-          {
-            printProgress(formatter.getFormattedPoint());
-          }
-        }
-        catch (Throwable t)
-        {
-        }
-      }
-      pointAdderStopped = true;
-    }
-  }
-
   private OpendsCertificateException getCertificateRootException(Throwable t)
   {
     OpendsCertificateException oce = null;
@@ -1243,4 +1126,89 @@
     }
     return oce;
   }
+
+
+  /**
+   * Commodity method used to repeatidly ask the user to provide an
+   * integer value.
+   * @param prompt the prompt message.
+   * @param defaultValue the default value to be proposed to the user.
+   * @param logger the logger where the errors will be written.
+   * @return the value provided by the user.
+   */
+  protected int askInteger(Message prompt, int defaultValue,
+      Logger logger)
+  {
+    int newInt = -1;
+    while (newInt == -1)
+    {
+      try
+      {
+        newInt = readInteger(prompt, defaultValue);
+      }
+      catch (CLIException ce)
+      {
+        newInt = -1;
+        logger.log(Level.WARNING, "Error reading input: "+ce, ce);
+      }
+    }
+    return newInt;
+  }
+
+  /**
+   * Interactively retrieves an integer value from the console.
+   *
+   * @param prompt
+   *          The message prompt.
+   * @param defaultValue
+   *          The default value.
+   * @return Returns the value.
+   * @throws CLIException
+   *           If the value could not be retrieved for some reason.
+   */
+  public final int readInteger(Message prompt, final int defaultValue)
+  throws CLIException
+  {
+    ValidationCallback<Integer> callback = new ValidationCallback<Integer>()
+    {
+      public Integer validate(ConsoleApplication app, String input)
+          throws CLIException
+      {
+        String ninput = input.trim();
+        if (ninput.length() == 0)
+        {
+          return defaultValue;
+        }
+        else
+        {
+          try
+          {
+            int i = Integer.parseInt(ninput);
+            if (i < 1)
+            {
+              throw new NumberFormatException();
+            }
+            return i;
+          }
+          catch (NumberFormatException e)
+          {
+            // Try again...
+            app.println();
+            app.println(ERR_LDAP_CONN_BAD_INTEGER.get(ninput));
+            app.println();
+            return null;
+          }
+        }
+      }
+
+    };
+
+    if (defaultValue != -1) {
+      prompt = INFO_PROMPT_SINGLE_DEFAULT.get(prompt.toString(),
+          String.valueOf(defaultValue));
+    }
+
+    return readValidatedInput(prompt, callback, CONFIRMATION_MAX_TRIES);
+  }
+
 }

--
Gitblit v1.10.0