From 39db72786ec179e67e3c1c0c71a2e93672999ea5 Mon Sep 17 00:00:00 2001
From: matthew_swift <matthew_swift@localhost>
Date: Thu, 03 Dec 2009 18:04:49 +0000
Subject: [PATCH] Split SDK from server code and add build/packaging infrastructure.
---
sdk/src/org/opends/sdk/tools/Utils.java | 273 +++++++++++++++++++++++++++++++++++++++++++++++++++--
1 files changed, 259 insertions(+), 14 deletions(-)
diff --git a/sdk/src/org/opends/sdk/tools/Utils.java b/sdk/src/org/opends/sdk/tools/Utils.java
index da476c3..d6a090f 100644
--- a/sdk/src/org/opends/sdk/tools/Utils.java
+++ b/sdk/src/org/opends/sdk/tools/Utils.java
@@ -28,17 +28,14 @@
-import static org.opends.messages.ToolMessages.*;
-import static org.opends.messages.UtilityMessages.INFO_TIME_IN_DAYS_HOURS_MINUTES_SECONDS;
-import static org.opends.messages.UtilityMessages.INFO_TIME_IN_HOURS_MINUTES_SECONDS;
-import static org.opends.messages.UtilityMessages.INFO_TIME_IN_MINUTES_SECONDS;
-import static org.opends.messages.UtilityMessages.INFO_TIME_IN_SECONDS;
+import static com.sun.opends.sdk.util.Messages.*;
+import static org.opends.sdk.util.StaticUtils.*;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
+import java.util.StringTokenizer;
-import org.opends.messages.Message;
import org.opends.sdk.Connection;
import org.opends.sdk.DecodeException;
import org.opends.sdk.ErrorResultException;
@@ -47,7 +44,8 @@
import org.opends.sdk.responses.BindResult;
import org.opends.sdk.util.ByteString;
import org.opends.sdk.util.StaticUtils;
-import org.opends.server.util.cli.ConsoleApplication;
+
+import com.sun.opends.sdk.util.Message;
@@ -65,6 +63,254 @@
/**
+ * The name of a command-line script used to launch a tool.
+ */
+ static final String PROPERTY_SCRIPT_NAME = "org.opends.sdk.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
+ {
+ String s = System.getenv("COLUMNS");
+ if (s != null)
+ {
+ columns = Integer.parseInt(s);
+ }
+ }
+ catch (Exception e)
+ {
+ // Do nothing.
+ }
+ MAX_LINE_WIDTH = columns - 1;
+ }
+
+
+
+ /**
+ * 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(Message message, int width)
+ {
+ return wrapText(Message.toString(message), 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.
+ *
+ * @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(String text, 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 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(Message message, int width, int indent)
+ {
+ return wrapText(Message.toString(message), 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. 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(String text, int width, int indent)
+ {
+ // Calculate the real width and indentation padding.
+ width -= indent;
+ StringBuilder pb = new StringBuilder();
+ for (int i = 0; i < indent; i++)
+ {
+ pb.append(' ');
+ }
+ String padding = pb.toString();
+
+ StringBuilder buffer = new StringBuilder();
+ if (text != null)
+ {
+ StringTokenizer lineTokenizer = new StringTokenizer(text, "\r\n",
+ true);
+ while (lineTokenizer.hasMoreTokens())
+ {
+ 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();
+ StringTokenizer wordTokenizer = new StringTokenizer(line,
+ " ", true);
+ while (wordTokenizer.hasMoreTokens())
+ {
+ 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.
+ 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();
+ }
+
+
+
+ /**
* Parse the specified command line argument to create the appropriate
* LDAPControl. The argument string should be in the format
* controloid[:criticality[:value|::b64value|:<fileurl]]
@@ -78,7 +324,7 @@
* @throws org.opends.sdk.DecodeException
* If an error occurs.
*/
- public static GenericControl getControl(String argString)
+ static GenericControl getControl(String argString)
throws DecodeException
{
String controlOID = null;
@@ -231,8 +477,7 @@
* If a problem occurs while trying to read the specified
* file.
*/
- public static byte[] readBytesFromFile(String filePath)
- throws IOException
+ static byte[] readBytesFromFile(String filePath) throws IOException
{
byte[] val = null;
FileInputStream fis = null;
@@ -281,7 +526,7 @@
* The error result.
* @return The error code.
*/
- public static int printErrorMessage(ConsoleApplication app,
+ static int printErrorMessage(ConsoleApplication app,
ErrorResultException ere)
{
// if ((ere.getMessage() != null) && (ere.getMessage().length() >
@@ -332,7 +577,7 @@
* @return The user-friendly representation of the specified number of
* seconds.
*/
- public static Message secondsToTimeString(int numSeconds)
+ static Message secondsToTimeString(int numSeconds)
{
if (numSeconds < 60)
{
@@ -367,7 +612,7 @@
- public static void printPasswordPolicyResults(ConsoleApplication app,
+ static void printPasswordPolicyResults(ConsoleApplication app,
Connection connection)
{
if (connection instanceof AuthenticatedConnection)
@@ -458,7 +703,7 @@
* original value will be returned. If the provided value was
* out of this range, then 255 will be returned.
*/
- public static int filterExitCode(int exitCode)
+ static int filterExitCode(int exitCode)
{
if (exitCode < 0)
{
--
Gitblit v1.10.0