From 8f434776744e26ae11fe4d7e395837f62461dc59 Mon Sep 17 00:00:00 2001
From: Violette Roche-Montane <violette.roche-montane@forgerock.com>
Date: Wed, 29 Jan 2014 11:57:22 +0000
Subject: [PATCH] OPENDJ-1303 Split out CLI support from opendj-ldap-toolkit into a separate Maven module, "opendj-cli" - Add dependency to opendj-cli module. - Classes modified in order to take into account this change. - Fixed comments.

---
 opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/Utils.java |  329 ++----------------------------------------------------
 1 files changed, 12 insertions(+), 317 deletions(-)

diff --git a/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/Utils.java b/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/Utils.java
index 51c711c..bceb305 100644
--- a/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/Utils.java
+++ b/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/Utils.java
@@ -22,16 +22,13 @@
  *
  *
  *      Copyright 2006-2010 Sun Microsystems, Inc.
+ *      Portions copyright 2014 ForgeRock AS
  */
 package com.forgerock.opendj.ldap.tools;
 
 import static com.forgerock.opendj.ldap.tools.ToolsMessages.*;
-import static com.forgerock.opendj.util.StaticUtils.EOL;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.util.StringTokenizer;
+import static com.forgerock.opendj.cli.Utils.readBytesFromFile;
+import static com.forgerock.opendj.cli.Utils.secondsToTimeString;
 
 import org.forgerock.i18n.LocalizableMessage;
 import org.forgerock.opendj.ldap.ByteString;
@@ -52,6 +49,7 @@
 import org.forgerock.opendj.ldap.controls.SubtreeDeleteRequestControl;
 import org.forgerock.opendj.ldap.responses.BindResult;
 
+import com.forgerock.opendj.cli.ConsoleApplication;
 import com.forgerock.opendj.ldap.controls.AccountUsabilityRequestControl;
 import com.forgerock.opendj.ldap.tools.AuthenticatedConnectionFactory.AuthenticatedConnection;
 import com.forgerock.opendj.util.StaticUtils;
@@ -60,52 +58,6 @@
  * This class provides utility functions for all the client side tools.
  */
 final class Utils {
-    /**
-     * The name of a command-line script used to launch a tool.
-     */
-    static final String PROPERTY_SCRIPT_NAME = "com.forgerock.opendj.ldap.tools.scriptName";
-
-    /**
-     * The column at which to wrap long lines of output in the command-line
-     * tools.
-     */
-    static final int MAX_LINE_WIDTH;
-
-    static {
-        int columns = 80;
-        try {
-            final String s = System.getenv("COLUMNS");
-            if (s != null) {
-                columns = Integer.parseInt(s);
-            }
-        } catch (final Exception e) {
-            // Do nothing.
-        }
-        MAX_LINE_WIDTH = columns - 1;
-    }
-
-    /**
-     * Filters the provided value to ensure that it is appropriate for use as an
-     * exit code. Exit code values are generally only allowed to be between 0
-     * and 255, so any value outside of this range will be converted to 255,
-     * which is the typical exit code used to indicate an overflow value.
-     *
-     * @param exitCode
-     *            The exit code value to be processed.
-     * @return An integer value between 0 and 255, inclusive. If the provided
-     *         exit code was already between 0 and 255, then the original value
-     *         will be returned. If the provided value was out of this range,
-     *         then 255 will be returned.
-     */
-    static int filterExitCode(final int exitCode) {
-        if (exitCode < 0) {
-            return 255;
-        } else if (exitCode > 255) {
-            return 255;
-        } else {
-            return exitCode;
-        }
-    }
 
     /**
      * Parse the specified command line argument to create the appropriate
@@ -219,11 +171,9 @@
      * @return The error code.
      */
     static int printErrorMessage(final ConsoleApplication app, final ErrorResultException ere) {
-        // if ((ere.getMessage() != null) && (ere.getMessage().length() >
-        // 0))
-        // {
-        // app.println(LocalizableMessage.raw(ere.getMessage()));
-        // }
+         /* if ((ere.getMessage() != null) && (ere.getMessage().length() > 0)) {
+             app.println(LocalizableMessage.raw(ere.getMessage()));
+         }*/
 
         if (ere.getResult().getResultCode().intValue() >= 0) {
             app.println(ERR_TOOL_RESULT_CODE.get(ere.getResult().getResultCode().intValue(), ere
@@ -282,7 +232,7 @@
                                 new DecodeOptions());
                 if (control != null) {
                     final LocalizableMessage timeString =
-                            Utils.secondsToTimeString(control.getSecondsUntilExpiration());
+                            secondsToTimeString(control.getSecondsUntilExpiration());
                     final LocalizableMessage message = INFO_BIND_PASSWORD_EXPIRING.get(timeString);
                     app.println(message);
                 }
@@ -311,7 +261,7 @@
                     final PasswordPolicyWarningType warningType = control.getWarningType();
                     if (warningType == PasswordPolicyWarningType.TIME_BEFORE_EXPIRATION) {
                         final LocalizableMessage timeString =
-                                Utils.secondsToTimeString(control.getWarningValue());
+                                secondsToTimeString(control.getWarningValue());
                         final LocalizableMessage message =
                                 INFO_BIND_PASSWORD_EXPIRING.get(timeString);
                         app.println(message);
@@ -328,79 +278,6 @@
     }
 
     /**
-     * Read the data from the specified file and return it in a byte array.
-     *
-     * @param filePath
-     *            The path to the file that should be read.
-     * @return A byte array containing the contents of the requested file.
-     * @throws IOException
-     *             If a problem occurs while trying to read the specified file.
-     */
-    static byte[] readBytesFromFile(final String filePath) throws IOException {
-        byte[] val = null;
-        FileInputStream fis = null;
-        try {
-            final File file = new File(filePath);
-            fis = new FileInputStream(file);
-            final long length = file.length();
-            val = new byte[(int) length];
-            // Read in the bytes
-            int offset = 0;
-            int numRead = 0;
-            while (offset < val.length
-                    && (numRead = fis.read(val, offset, val.length - offset)) >= 0) {
-                offset += numRead;
-            }
-
-            // Ensure all the bytes have been read in
-            if (offset < val.length) {
-                throw new IOException("Could not completely read file " + filePath);
-            }
-
-            return val;
-        } finally {
-            if (fis != null) {
-                fis.close();
-            }
-        }
-    }
-
-    /**
-     * Retrieves a user-friendly string that indicates the length of time (in
-     * days, hours, minutes, and seconds) in the specified number of seconds.
-     *
-     * @param numSeconds
-     *            The number of seconds to be converted to a more user-friendly
-     *            value.
-     * @return The user-friendly representation of the specified number of
-     *         seconds.
-     */
-    static LocalizableMessage secondsToTimeString(final int numSeconds) {
-        if (numSeconds < 60) {
-            // We can express it in seconds.
-            return INFO_TIME_IN_SECONDS.get(numSeconds);
-        } else if (numSeconds < 3600) {
-            // We can express it in minutes and seconds.
-            final int m = numSeconds / 60;
-            final int s = numSeconds % 60;
-            return INFO_TIME_IN_MINUTES_SECONDS.get(m, s);
-        } else if (numSeconds < 86400) {
-            // We can express it in hours, minutes, and seconds.
-            final int h = numSeconds / 3600;
-            final int m = (numSeconds % 3600) / 60;
-            final int s = numSeconds % 3600 % 60;
-            return INFO_TIME_IN_HOURS_MINUTES_SECONDS.get(h, m, s);
-        } else {
-            // We can express it in days, hours, minutes, and seconds.
-            final int d = numSeconds / 86400;
-            final int h = (numSeconds % 86400) / 3600;
-            final int m = (numSeconds % 86400 % 3600) / 60;
-            final int s = numSeconds % 86400 % 3600 % 60;
-            return INFO_TIME_IN_DAYS_HOURS_MINUTES_SECONDS.get(d, h, m, s);
-        }
-    }
-
-    /**
      * Sets default system property settings for the xxxrate performance tools.
      */
     static void setDefaultPerfToolProperties() {
@@ -409,196 +286,14 @@
             System.setProperty("org.forgerock.opendj.transport.useWorkerThreads", "false");
         }
 
-        // Configure connections to be terminate immediately after closing (this
-        // prevents port exhaustion in xxxrate tools when
-        // connecting/disconnecting).
+        /* Configure connections to be terminate immediately after closing (this
+         prevents port exhaustion in xxxrate tools when
+         connecting/disconnecting).*/
         if (System.getProperty("org.forgerock.opendj.transport.linger") == null) {
             System.setProperty("org.forgerock.opendj.transport.linger", "0");
         }
     }
 
-    /**
-     * Inserts line breaks into the provided buffer to wrap text at no more than
-     * the specified column width. Wrapping will only be done at space
-     * boundaries and if there are no spaces within the specified width, then
-     * wrapping will be performed at the first space after the specified column.
-     *
-     * @param message
-     *            The message to be wrapped.
-     * @param width
-     *            The maximum number of characters to allow on a line if there
-     *            is a suitable breaking point.
-     * @return The wrapped text.
-     */
-    static String wrapText(final LocalizableMessage message, final int width) {
-        return wrapText(message.toString(), width, 0);
-    }
-
-    /**
-     * Inserts line breaks into the provided buffer to wrap text at no more than
-     * the specified column width. Wrapping will only be done at space
-     * boundaries and if there are no spaces within the specified width, then
-     * wrapping will be performed at the first space after the specified column.
-     * In addition each line will be indented by the specified amount.
-     *
-     * @param message
-     *            The message to be wrapped.
-     * @param width
-     *            The maximum number of characters to allow on a line if there
-     *            is a suitable breaking point (including any indentation).
-     * @param indent
-     *            The number of columns to indent each line.
-     * @return The wrapped text.
-     */
-    static String wrapText(final LocalizableMessage message, final int width, final int indent) {
-        return wrapText(message.toString(), width, indent);
-    }
-
-    /**
-     * Inserts line breaks into the provided buffer to wrap text at no more than
-     * the specified column width. Wrapping will only be done at space
-     * boundaries and if there are no spaces within the specified width, then
-     * wrapping will be performed at the first space after the specified column.
-     *
-     * @param text
-     *            The text to be wrapped.
-     * @param width
-     *            The maximum number of characters to allow on a line if there
-     *            is a suitable breaking point.
-     * @return The wrapped text.
-     */
-    static String wrapText(final String text, final int width) {
-        return wrapText(text, width, 0);
-    }
-
-    /**
-     * Inserts line breaks into the provided buffer to wrap text at no more than
-     * the specified column width. Wrapping will only be done at space
-     * boundaries and if there are no spaces within the specified width, then
-     * wrapping will be performed at the first space after the specified column.
-     * In addition each line will be indented by the specified amount.
-     *
-     * @param text
-     *            The text to be wrapped.
-     * @param width
-     *            The maximum number of characters to allow on a line if there
-     *            is a suitable breaking point (including any indentation).
-     * @param indent
-     *            The number of columns to indent each line.
-     * @return The wrapped text.
-     */
-    static String wrapText(final String text, int width, final int indent) {
-        // Calculate the real width and indentation padding.
-        width -= indent;
-        final StringBuilder pb = new StringBuilder();
-        for (int i = 0; i < indent; i++) {
-            pb.append(' ');
-        }
-        final String padding = pb.toString();
-
-        final StringBuilder buffer = new StringBuilder();
-        if (text != null) {
-            final StringTokenizer lineTokenizer = new StringTokenizer(text, "\r\n", true);
-            while (lineTokenizer.hasMoreTokens()) {
-                final String line = lineTokenizer.nextToken();
-                if (line.equals("\r") || line.equals("\n")) {
-                    // It's an end-of-line character, so append it as-is.
-                    buffer.append(line);
-                } else if (line.length() <= width) {
-                    // The line fits in the specified width, so append it as-is.
-                    buffer.append(padding);
-                    buffer.append(line);
-                } else {
-                    // The line doesn't fit in the specified width, so it needs
-                    // to
-                    // be
-                    // wrapped. Do so at space boundaries.
-                    StringBuilder lineBuffer = new StringBuilder();
-                    StringBuilder delimBuffer = new StringBuilder();
-                    final StringTokenizer wordTokenizer = new StringTokenizer(line, " ", true);
-                    while (wordTokenizer.hasMoreTokens()) {
-                        final String word = wordTokenizer.nextToken();
-                        if (word.equals(" ")) {
-                            // It's a space, so add it to the delim buffer only
-                            // if the
-                            // line
-                            // buffer is not empty.
-                            if (lineBuffer.length() > 0) {
-                                delimBuffer.append(word);
-                            }
-                        } else if (word.length() > width) {
-                            // This is a long word that can't be wrapped, so
-                            // we'll
-                            // just have
-                            // to make do.
-                            if (lineBuffer.length() > 0) {
-                                buffer.append(padding);
-                                buffer.append(lineBuffer);
-                                buffer.append(EOL);
-                                lineBuffer = new StringBuilder();
-                            }
-                            buffer.append(padding);
-                            buffer.append(word);
-
-                            if (wordTokenizer.hasMoreTokens()) {
-                                // The next token must be a space, so remove it.
-                                // If
-                                // there are
-                                // still more tokens after that, then append an
-                                // EOL.
-                                wordTokenizer.nextToken();
-                                if (wordTokenizer.hasMoreTokens()) {
-                                    buffer.append(EOL);
-                                }
-                            }
-
-                            if (delimBuffer.length() > 0) {
-                                delimBuffer = new StringBuilder();
-                            }
-                        } else {
-                            // It's not a space, so see if we can fit it on the
-                            // curent
-                            // line.
-                            final int newLineLength =
-                                    lineBuffer.length() + delimBuffer.length() + word.length();
-                            if (newLineLength < width) {
-                                // It does fit on the line, so add it.
-                                lineBuffer.append(delimBuffer).append(word);
-
-                                if (delimBuffer.length() > 0) {
-                                    delimBuffer = new StringBuilder();
-                                }
-                            } else {
-                                // It doesn't fit on the line, so end the
-                                // current line
-                                // and start
-                                // a new one.
-                                buffer.append(padding);
-                                buffer.append(lineBuffer);
-                                buffer.append(EOL);
-
-                                lineBuffer = new StringBuilder();
-                                lineBuffer.append(word);
-
-                                if (delimBuffer.length() > 0) {
-                                    delimBuffer = new StringBuilder();
-                                }
-                            }
-                        }
-                    }
-
-                    // If there's anything left in the line buffer, then add it
-                    // to
-                    // the
-                    // final buffer.
-                    buffer.append(padding);
-                    buffer.append(lineBuffer);
-                }
-            }
-        }
-        return buffer.toString();
-    }
-
     // Prevent instantiation.
     private Utils() {
         // Do nothing.

--
Gitblit v1.10.0