From 2e08d2c0e9bede644be993ddaa28157c9f156c10 Mon Sep 17 00:00:00 2001
From: Violette Roche-Montane <violette.roche-montane@forgerock.com>
Date: Tue, 07 May 2013 13:50:59 +0000
Subject: [PATCH] svn merge https://svn.forgerock.org/opendj/trunk/opends@8851 https://svn.forgerock.org/opendj/branches/native-packaging@8851 .
---
opends/src/server/org/opends/server/util/cli/ConsoleApplication.java | 940 +++++++++++++++++++++++++++++++++++++--------------------
1 files changed, 605 insertions(+), 335 deletions(-)
diff --git a/opends/src/server/org/opends/server/util/cli/ConsoleApplication.java b/opends/src/server/org/opends/server/util/cli/ConsoleApplication.java
index 0ed28cb..3d9b5e8 100644
--- a/opends/src/server/org/opends/server/util/cli/ConsoleApplication.java
+++ b/opends/src/server/org/opends/server/util/cli/ConsoleApplication.java
@@ -23,12 +23,10 @@
*
*
* Copyright 2008-2010 Sun Microsystems, Inc.
- * Portions Copyright 2012 ForgeRock AS
+ * Portions Copyright 2012-2013 ForgeRock AS
*/
package org.opends.server.util.cli;
-
-
import static org.opends.messages.AdminToolMessages.*;
import static org.opends.messages.DSConfigMessages.*;
import static org.opends.messages.QuickSetupMessages.*;
@@ -70,37 +68,65 @@
import org.opends.server.util.PasswordReader;
import org.opends.server.util.SetupUtils;
-
/**
- * This class provides an abstract base class which can be used as the
- * basis of a console-based application.
+ * This class provides an abstract base class which can be used as the basis of
+ * a console-based application.
*/
-public abstract class ConsoleApplication {
+public abstract class ConsoleApplication
+{
/**
* A null reader.
*/
- private static final class NullReader extends Reader {
+ private static final class NullReader extends Reader
+ {
/**
* {@inheritDoc}
*/
@Override
- public void close() throws IOException {
+ public void close() throws IOException
+ {
// Do nothing.
}
-
-
/**
* {@inheritDoc}
*/
@Override
- public int read(char[] cbuf, int off, int len) throws IOException {
+ public int read(char[] cbuf, int off, int len) throws IOException
+ {
return -1;
}
}
+ /**
+ * Defines a title in the console application.
+ */
+ public final static int TITLE = 0;
+ /**
+ * Defines a subtitle in the console application.
+ */
+ public final static int SUBTITLE = 1;
+ /**
+ * Defines a notice in the console application.
+ */
+ public final static int NOTICE = 2;
+ /**
+ * Defines a normal line in the console application.
+ */
+ public final static int NORMAL = 3;
+
+ /**
+ * Defines an error line in the console application.
+ */
+ public final static int ERROR = 4;
+
+ /**
+ * Defines a break line in the console application.
+ */
+ public final static int BREAKLINE = 5;
+
// The error stream which this application should use.
private final PrintStream err;
@@ -111,7 +137,7 @@
private final PrintStream out;
/**
- * The maximum number of times we try to confirm.
+ * The maximum number of times we try to confirm.
*/
protected final static int CONFIRMATION_MAX_TRIES = 5;
@@ -121,9 +147,8 @@
/**
* The String used to write comments in a shell (or batch) script.
*/
- protected static final String SHELL_COMMENT_SEPARATOR =
- SetupUtils.isWindows() ?
- COMMENT_BATCH_WINDOWS : COMMENT_SHELL_UNIX;
+ protected static final String SHELL_COMMENT_SEPARATOR = SetupUtils
+ .isWindows() ? COMMENT_BATCH_WINDOWS : COMMENT_SHELL_UNIX;
/**
* Creates a new console application instance.
@@ -136,28 +161,36 @@
* The application error stream.
*/
protected ConsoleApplication(BufferedReader in, PrintStream out,
- PrintStream err) {
- if (in != null) {
+ PrintStream err)
+ {
+ if (in != null)
+ {
this.in = in;
- } else {
+ }
+ else
+ {
this.in = new BufferedReader(new NullReader());
}
- if (out != null) {
+ if (out != null)
+ {
this.out = out;
- } else {
+ }
+ else
+ {
this.out = NullOutputStream.printStream();
}
- if (err != null) {
+ if (err != null)
+ {
this.err = out;
- } else {
+ }
+ else
+ {
this.err = NullOutputStream.printStream();
}
}
-
-
/**
* Creates a new console application instance.
*
@@ -169,70 +202,89 @@
* The application error stream.
*/
protected ConsoleApplication(InputStream in, OutputStream out,
- OutputStream err) {
- if (in != null) {
+ OutputStream err)
+ {
+ if (in != null)
+ {
this.in = new BufferedReader(new InputStreamReader(in));
- } else {
+ }
+ else
+ {
this.in = new BufferedReader(new NullReader());
}
- if (out != null) {
+ if (out != null)
+ {
this.out = new PrintStream(out);
- } else {
+ }
+ else
+ {
this.out = NullOutputStream.printStream();
}
- if (err != null) {
+ if (err != null)
+ {
this.err = new PrintStream(err);
- } else {
+ }
+ else
+ {
this.err = NullOutputStream.printStream();
}
}
-
-
/**
- * Interactively confirms whether a user wishes to perform an
- * action. If the application is non-interactive, then the provided
- * default is returned automatically.
+ * Interactively confirms whether a user wishes to perform an action. If the
+ * application is non-interactive, then the provided default is returned
+ * automatically.
*
* @param prompt
* The prompt describing the action.
* @param defaultValue
- * The default value for the confirmation message. This
- * will be returned if the application is non-interactive
- * or if the user just presses return.
- * @return Returns <code>true</code> if the user wishes the action
- * to be performed, or <code>false</code> if they refused,
- * or if an exception occurred.
+ * The default value for the confirmation message. This will be
+ * returned if the application is non-interactive or if the user just
+ * presses return.
+ * @return Returns <code>true</code> if the user wishes the action to be
+ * performed, or <code>false</code> if they refused, or if an
+ * exception occurred.
* @throws CLIException
- * If the user's response could not be read from the
- * console for some reason.
+ * If the user's response could not be read from the console for
+ * some reason.
*/
public final boolean confirmAction(Message prompt, final boolean defaultValue)
- throws CLIException {
- if (!isInteractive()) {
+ throws CLIException
+ {
+ if (!isInteractive())
+ {
return defaultValue;
}
final Message yes = INFO_GENERAL_YES.get();
final Message no = INFO_GENERAL_NO.get();
final Message errMsg = ERR_CONSOLE_APP_CONFIRM.get(yes, no);
- prompt = INFO_MENU_PROMPT_CONFIRM.get(prompt, yes, no, defaultValue ? yes
- : no);
+ prompt =
+ INFO_MENU_PROMPT_CONFIRM.get(prompt, yes, no, defaultValue ? yes : no);
- ValidationCallback<Boolean> validator = new ValidationCallback<Boolean>() {
+ ValidationCallback<Boolean> validator = new ValidationCallback<Boolean>()
+ {
@Override
- public Boolean validate(ConsoleApplication app, String input) {
+ public Boolean validate(ConsoleApplication app, String input)
+ {
String ninput = input.toLowerCase().trim();
- if (ninput.length() == 0) {
+ if (ninput.length() == 0)
+ {
return defaultValue;
- } else if (no.toString().toLowerCase().startsWith(ninput)) {
+ }
+ else if (no.toString().toLowerCase().startsWith(ninput))
+ {
return false;
- } else if (yes.toString().toLowerCase().startsWith(ninput)) {
+ }
+ else if (yes.toString().toLowerCase().startsWith(ninput))
+ {
return true;
- } else {
+ }
+ else
+ {
// Try again...
app.println();
app.println(errMsg);
@@ -246,165 +298,217 @@
return readValidatedInput(prompt, validator, CONFIRMATION_MAX_TRIES);
}
-
-
/**
* Gets the application error stream.
*
* @return Returns the application error stream.
*/
- public final PrintStream getErrorStream() {
+ public final PrintStream getErrorStream()
+ {
return err;
}
-
-
/**
* Gets the application input stream.
*
* @return Returns the application input stream.
*/
- public final BufferedReader getInputStream() {
+ public final BufferedReader getInputStream()
+ {
return in;
}
-
-
/**
* Gets the application output stream.
*
* @return Returns the application output stream.
*/
- public final PrintStream getOutputStream() {
+ public final PrintStream getOutputStream()
+ {
return out;
}
-
-
/**
* Indicates whether or not the user has requested advanced mode.
*
- * @return Returns <code>true</code> if the user has requested
- * advanced mode.
+ * @return Returns <code>true</code> if the user has requested advanced mode.
*/
public abstract boolean isAdvancedMode();
-
-
/**
- * Indicates whether or not the user has requested interactive
- * behavior.
+ * Indicates whether or not the user has requested interactive behavior.
*
- * @return Returns <code>true</code> if the user has requested
- * interactive behavior.
+ * @return Returns <code>true</code> if the user has requested interactive
+ * behavior.
*/
public abstract boolean isInteractive();
-
-
/**
- * Indicates whether or not this console application is running in
- * its menu-driven mode. This can be used to dictate whether output
- * should go to the error stream or not. In addition, it may also
- * dictate whether or not sub-menus should display a cancel option
- * as well as a quit option.
+ * Indicates whether or not this console application is running in its
+ * menu-driven mode. This can be used to dictate whether output should go to
+ * the error stream or not. In addition, it may also dictate whether or not
+ * sub-menus should display a cancel option as well as a quit option.
*
- * @return Returns <code>true</code> if this console application
- * is running in its menu-driven mode.
+ * @return Returns <code>true</code> if this console application is running in
+ * its menu-driven mode.
*/
public abstract boolean isMenuDrivenMode();
-
-
/**
* Indicates whether or not the user has requested quiet output.
*
- * @return Returns <code>true</code> if the user has requested
- * quiet output.
+ * @return Returns <code>true</code> if the user has requested quiet output.
*/
public abstract boolean isQuiet();
-
-
/**
- * Indicates whether or not the user has requested script-friendly
- * output.
+ * Indicates whether or not the user has requested script-friendly output.
*
- * @return Returns <code>true</code> if the user has requested
- * script-friendly output.
+ * @return Returns <code>true</code> if the user has requested script-friendly
+ * output.
*/
public abstract boolean isScriptFriendly();
-
-
/**
* Indicates whether or not the user has requested verbose output.
*
- * @return Returns <code>true</code> if the user has requested
- * verbose output.
+ * @return Returns <code>true</code> if the user has requested verbose output.
*/
public abstract boolean isVerbose();
-
-
/**
- * Interactively prompts the user to press return to continue. This
- * method should be called in situations where a user needs to be
- * given a chance to read some documentation before continuing
- * (continuing may cause the documentation to be scrolled out of
- * view).
+ * Interactively prompts the user to press return to continue. This method
+ * should be called in situations where a user needs to be given a chance to
+ * read some documentation before continuing (continuing may cause the
+ * documentation to be scrolled out of view).
*/
- public final void pressReturnToContinue() {
+ public final void pressReturnToContinue()
+ {
Message msg = INFO_MENU_PROMPT_RETURN_TO_CONTINUE.get();
- try {
+ try
+ {
readLineOfInput(msg);
- } catch (CLIException e) {
+ }
+ catch (CLIException e)
+ {
// Ignore the exception - applications don't care.
}
}
-
-
/**
* Displays a blank line to the error stream.
*/
- public final void println() {
+ public final void println()
+ {
err.println();
}
-
-
/**
* Displays a message to the error stream.
*
* @param msg
* The message.
*/
- public final void println(Message msg) {
+ public final void println(Message msg)
+ {
err.println(wrapText(msg, MAX_LINE_WIDTH));
}
-
/**
* Displays a message to the error stream.
*
* @param msg
* The message.
*/
- public final void print(Message msg) {
+ public final void print(Message msg)
+ {
err.print(wrapText(msg, MAX_LINE_WIDTH));
}
/**
+ * Print a line with EOL in the output stream.
+ *
+ * @param msg
+ * The message to display in normal mode.
+ * @param indent
+ * The indentation.
+ */
+ public final void println(final Message msg, final int indent)
+ {
+ println(0, msg, indent);
+ }
+
+ /**
+ * Print a line with EOL in the output stream.
+ *
+ * @param typeMessage
+ * The type of formatted output desired.
+ * @param msg
+ * The message to display in normal mode.
+ * @param indent
+ * The indentation.
+ */
+ public final void println(final int typeMessage, final Message msg,
+ final int indent)
+ {
+ if (!isQuiet())
+ {
+ if (typeMessage == TITLE)
+ {
+ out.println();
+ out.println(">>>> " + wrapText(msg, MAX_LINE_WIDTH, indent));
+ out.println();
+ }
+ else if (typeMessage == SUBTITLE)
+ {
+ out.println(wrapText(msg, MAX_LINE_WIDTH, indent));
+ out.println();
+ }
+ else if (typeMessage == NOTICE)
+ {
+ out.println(wrapText(" * " + msg, MAX_LINE_WIDTH, indent));
+ }
+ else if (typeMessage == ERROR)
+ {
+ out.println();
+ out.println(wrapText("** " + msg, MAX_LINE_WIDTH, indent));
+ }
+ else if (typeMessage == BREAKLINE)
+ {
+ out.println();
+ }
+ else
+ {
+ out.println(wrapText(msg, MAX_LINE_WIDTH, indent));
+ }
+ }
+ }
+
+ /**
* Displays a blank line to the output stream if we are not in quiet mode.
*/
- public final void printlnProgress() {
+ public final void printlnProgress()
+ {
if (!isQuiet())
{
out.println();
}
}
+ /**
+ * Displays a message to the output stream if we are not in quiet mode.
+ * Message is wrap to max line width.
+ *
+ * @param msg
+ * The message.
+ */
+ public final void printlnProgress(Message msg)
+ {
+ if (!isQuiet())
+ {
+ out.println(wrapText(msg, MAX_LINE_WIDTH));
+ }
+ }
/**
* Displays a message to the output stream if we are not in quiet mode.
@@ -412,7 +516,8 @@
* @param msg
* The message.
*/
- public final void printProgress(Message msg) {
+ public final void printProgress(final Message msg)
+ {
if (!isQuiet())
{
out.print(msg);
@@ -420,13 +525,67 @@
}
/**
- * Display the batch progress string to the error stream, if we are not
- * in quiet mode.
+ * Prints a progress bar on the same output stream line if not in quiet mode.
+ *
+ * <pre>
+ * Like
+ * msg...... 50%
+ * if progress is up to 100 :
+ * msg..................... 100%
+ * if progress is < 0 :
+ * msg.... FAIL
+ * msg..................... FAIL
+ * </pre>
+ *
+ * @param linePos
+ * The progress bar starts at this position on the line.
+ * @param progress
+ * The current percentage progress to print.
+ */
+ public final void printProgressBar(final int linePos, final int progress)
+ {
+ if (!isQuiet())
+ {
+ final int spacesLeft = MAX_LINE_WIDTH - linePos - 10;
+ StringBuilder bar = new StringBuilder();
+ if (progress != 0)
+ {
+ for (int i = 0; i < 50; i++)
+ {
+ if ((i < (Math.abs(progress) / 2)) && (bar.length() < spacesLeft))
+ {
+ bar.append(".");
+ }
+ }
+ }
+ bar.append(". ");
+ if(progress >= 0) {
+ bar.append(progress).append("% ");
+ } else {
+ bar.append("FAIL");
+ }
+ final int endBuilder = linePos + bar.length();
+ for (int i = 0; i < endBuilder; i++)
+ {
+ bar.append("\b");
+ }
+ if (progress >= 100 || progress < 0)
+ {
+ bar.append(EOL);
+ }
+ out.print(bar.toString());
+ }
+ }
+
+ /**
+ * Display the batch progress string to the error stream, if we are not in
+ * quiet mode.
*
* @param s
* The string to display
*/
- public final void printlnBatchProgress(String s) {
+ public final void printlnBatchProgress(String s)
+ {
if (!isQuiet())
{
err.println(s);
@@ -434,98 +593,164 @@
}
/**
- * Displays a message to the error stream indented by the specified
- * number of columns.
+ * Displays a message to the error stream indented by the specified number of
+ * columns.
*
* @param msg
* The message.
* @param indent
* The number of columns to indent.
*/
- public final void println(Message msg, int indent) {
+ public final void printErrln(Message msg, int indent)
+ {
err.println(wrapText(msg, MAX_LINE_WIDTH, indent));
}
-
-
/**
- * Displays a message to the error stream if verbose mode is
- * enabled.
+ * Displays a message to the error stream if verbose mode is enabled.
*
* @param msg
* The verbose message.
*/
- public final void printVerboseMessage(Message msg) {
- if (isVerbose() || isInteractive()) {
+ public final void printVerboseMessage(Message msg)
+ {
+ if (isVerbose() || isInteractive())
+ {
err.println(wrapText(msg, MAX_LINE_WIDTH));
}
}
-
-
/**
* Interactively retrieves a line of input from the console.
*
* @param prompt
* The prompt.
- * @return Returns the line of input, or <code>null</code> if the
- * end of input has been reached.
+ * @return Returns the line of input, or <code>null</code> if the end of input
+ * has been reached.
* @throws CLIException
- * If the line of input could not be retrieved for some
- * reason.
+ * If the line of input could not be retrieved for some reason.
*/
- public final String readLineOfInput(Message prompt) throws CLIException {
+ public final String readLineOfInput(Message prompt) throws CLIException
+ {
if (prompt != null)
{
err.print(wrapText(prompt, MAX_LINE_WIDTH));
err.print(" ");
}
- try {
+ try
+ {
String s = in.readLine();
- if (s == null) {
+ if (s == null)
+ {
throw CLIException
.adaptInputException(new EOFException("End of input"));
- } else {
+ }
+ else
+ {
return s;
}
- } catch (IOException e) {
+ }
+ catch (IOException e)
+ {
throw CLIException.adaptInputException(e);
}
}
+ /**
+ * Displays a message and read the user's input from output.
+ *
+ * @param prompt
+ * The message to display.
+ * @param defaultValue
+ * The default answer by default.
+ * @param formattedOutput
+ * The formatted style chosen.
+ * @return The user's input as a string.
+ * @throws CLIException
+ * If an Exception occurs during the process.
+ */
+ public final String readInput(final Message prompt,
+ final String defaultValue, final int formattedOutput) throws CLIException
+ {
+ String answer = null;
+ final Message messageToDisplay =
+ INFO_PROMPT_SINGLE_DEFAULT.get(prompt.toString(), defaultValue);
+ if (formattedOutput == TITLE)
+ {
+ println();
+ }
+ print(messageToDisplay);
+ out.print(" ");
+
+ try
+ {
+ // Reads the user input.
+ answer = in.readLine();
+ }
+ catch (IOException e)
+ {
+ throw CLIException.adaptInputException(e);
+ }
+
+ if (formattedOutput == TITLE || formattedOutput == SUBTITLE)
+ {
+ println();
+ }
+
+ if ("".equals(answer))
+ {
+ if (defaultValue == null)
+ {
+ println(INFO_ERROR_EMPTY_RESPONSE.get());
+ }
+ else
+ {
+ return defaultValue;
+ }
+ }
+ return answer;
+ }
/**
* Commodity method that interactively prompts (on error output) the user to
- * provide a string value. Any non-empty string will be allowed (the empty
+ * provide a string value. Any non-empty string will be allowed (the empty
* string will indicate that the default should be used, if there is one).
*
- * @param prompt The prompt to present to the user.
- * @param defaultValue The default value to assume if the user presses ENTER
- * without typing anything, or <CODE>null</CODE> if
- * there should not be a default and the user must
- * explicitly provide a value.
- *
+ * @param prompt
+ * The prompt to present to the user.
+ * @param defaultValue
+ * The default value to assume if the user presses ENTER without
+ * typing anything, or <CODE>null</CODE> if there should not be a
+ * default and the user must explicitly provide a value.
* @throws CLIException
- * If the line of input could not be retrieved for some
- * reason.
- * @return The string value read from the user.
+ * If the line of input could not be retrieved for some reason.
+ * @return The string value read from the user.
*/
public String readInput(Message prompt, String defaultValue)
- throws CLIException {
- while (true) {
- if (defaultValue != null) {
- prompt = INFO_PROMPT_SINGLE_DEFAULT.get(prompt.toString(),
- defaultValue);
+ throws CLIException
+ {
+ while (true)
+ {
+ if (defaultValue != null)
+ {
+ prompt =
+ INFO_PROMPT_SINGLE_DEFAULT.get(prompt.toString(), defaultValue);
}
String response = readLineOfInput(prompt);
- if ("".equals(response)) {
- if (defaultValue == null) {
+ if ("".equals(response))
+ {
+ if (defaultValue == null)
+ {
println(INFO_ERROR_EMPTY_RESPONSE.get());
- } else {
+ }
+ else
+ {
return defaultValue;
}
- } else {
+ }
+ else
+ {
return response;
}
}
@@ -533,18 +758,19 @@
/**
* Commodity method that interactively prompts (on error output) the user to
- * provide a string value. Any non-empty string will be allowed (the empty
- * string will indicate that the default should be used, if there is one).
- * If an error occurs a message will be logged to the provided logger.
+ * provide a string value. Any non-empty string will be allowed (the empty
+ * string will indicate that the default should be used, if there is one). If
+ * an error occurs a message will be logged to the provided logger.
*
- * @param prompt The prompt to present to the user.
- * @param defaultValue The default value to assume if the user presses ENTER
- * without typing anything, or <CODE>null</CODE> if
- * there should not be a default and the user must
- * explicitly provide a value.
- *
- * @param logger the Logger to be used to log the error message.
- * @return The string value read from the user.
+ * @param prompt
+ * The prompt to present to the user.
+ * @param defaultValue
+ * The default value to assume if the user presses ENTER without
+ * typing anything, or <CODE>null</CODE> if there should not be a
+ * default and the user must explicitly provide a value.
+ * @param logger
+ * the Logger to be used to log the error message.
+ * @return The string value read from the user.
*/
public String readInput(Message prompt, String defaultValue, Logger logger)
{
@@ -555,7 +781,7 @@
}
catch (CLIException ce)
{
- logger.log(Level.WARNING, "Error reading input: "+ce, ce);
+ logger.log(Level.WARNING, "Error reading input: " + ce, ce);
}
return s;
}
@@ -569,25 +795,30 @@
* @throws CLIException
* If the password could not be retrieved for some reason.
*/
- public final String readPassword(Message prompt) throws CLIException {
+ public final String readPassword(Message prompt) throws CLIException
+ {
err.print(wrapText(prompt + " ", MAX_LINE_WIDTH));
char[] pwChars;
- try {
+ try
+ {
pwChars = PasswordReader.readPassword();
- } catch (Exception e) {
+ }
+ catch (Exception e)
+ {
throw CLIException.adaptInputException(e);
}
return new String(pwChars);
}
/**
- * Commodity method that interactively retrieves a password from the
- * console. If there is an error an error message is logged to the provided
- * Logger and <CODE>null</CODE> is returned.
+ * Commodity method that interactively retrieves a password from the console.
+ * If there is an error an error message is logged to the provided Logger and
+ * <CODE>null</CODE> is returned.
*
* @param prompt
* The password prompt.
- * @param logger the Logger to be used to log the error message.
+ * @param logger
+ * the Logger to be used to log the error message.
* @return Returns the password.
*/
protected final String readPassword(Message prompt, Logger logger)
@@ -599,7 +830,7 @@
}
catch (CLIException ce)
{
- logger.log(Level.WARNING, "Error reading input: "+ce, ce);
+ logger.log(Level.WARNING, "Error reading input: " + ce, ce);
}
return pwd;
}
@@ -616,7 +847,7 @@
* If the port could not be retrieved for some reason.
*/
public final int readPort(Message prompt, final int defaultValue)
- throws CLIException
+ throws CLIException
{
ValidationCallback<Integer> callback = new ValidationCallback<Integer>()
{
@@ -653,9 +884,11 @@
};
- if (defaultValue != -1) {
- prompt = INFO_PROMPT_SINGLE_DEFAULT.get(prompt.toString(),
- String.valueOf(defaultValue));
+ if (defaultValue != -1)
+ {
+ prompt =
+ INFO_PROMPT_SINGLE_DEFAULT.get(prompt.toString(), String
+ .valueOf(defaultValue));
}
return readValidatedInput(prompt, callback, CONFIRMATION_MAX_TRIES);
@@ -663,23 +896,28 @@
/**
* Returns a message object for the given NamingException.
- * @param ne the NamingException.
- * @param hostPort the hostPort representation of the server we were
- * contacting when the NamingException occurred.
+ *
+ * @param ne
+ * the NamingException.
+ * @param hostPort
+ * the hostPort representation of the server we were contacting when
+ * the NamingException occurred.
* @return a message object for the given NamingException.
*/
- protected Message getMessageForException(NamingException ne,
- String hostPort)
+ protected Message getMessageForException(NamingException ne, String hostPort)
{
return Utils.getMessageForException(ne, hostPort);
}
/**
* Commodity method used to repeatidly ask the user to provide a port value.
- * @param prompt the prompt message.
- * @param defaultValue the default value of the port to be proposed to the
- * user.
- * @param logger the logger where the errors will be written.
+ *
+ * @param prompt
+ * the prompt message.
+ * @param defaultValue
+ * the default value of the port to be proposed to the user.
+ * @param logger
+ * the logger where the errors will be written.
* @return the port value provided by the user.
*/
protected int askPort(Message prompt, int defaultValue, Logger logger)
@@ -694,66 +932,71 @@
catch (CLIException ce)
{
port = -1;
- logger.log(Level.WARNING, "Error reading input: "+ce, ce);
+ logger.log(Level.WARNING, "Error reading input: " + ce, ce);
}
}
return port;
}
/**
- * Interactively prompts for user input and continues until valid
- * input is provided.
+ * Interactively prompts for user input and continues until valid input is
+ * provided.
*
* @param <T>
* The type of decoded user input.
* @param prompt
- * The interactive prompt which should be displayed on each
- * input attempt.
+ * The interactive prompt which should be displayed on each input
+ * attempt.
* @param validator
- * An input validator responsible for validating and
- * decoding the user's response.
+ * An input validator responsible for validating and decoding the
+ * user's response.
* @return Returns the decoded user's response.
* @throws CLIException
- * If an unexpected error occurred which prevented
- * validation.
+ * If an unexpected error occurred which prevented validation.
*/
public final <T> T readValidatedInput(Message prompt,
- ValidationCallback<T> validator) throws CLIException {
- while (true) {
+ ValidationCallback<T> validator) throws CLIException
+ {
+ while (true)
+ {
String response = readLineOfInput(prompt);
T value = validator.validate(this, response);
- if (value != null) {
+ if (value != null)
+ {
return value;
}
}
}
/**
- * Interactively prompts for user input and continues until valid
- * input is provided.
+ * Interactively prompts for user input and continues until valid input is
+ * provided.
*
* @param <T>
* The type of decoded user input.
* @param prompt
- * The interactive prompt which should be displayed on each
- * input attempt.
+ * The interactive prompt which should be displayed on each input
+ * attempt.
* @param validator
- * An input validator responsible for validating and
- * decoding the user's response.
+ * An input validator responsible for validating and decoding the
+ * user's response.
* @param maxTries
* The maximum number of tries that we can make.
* @return Returns the decoded user's response.
* @throws CLIException
- * If an unexpected error occurred which prevented
- * validation or if the maximum number of tries was reached.
+ * If an unexpected error occurred which prevented validation or if
+ * the maximum number of tries was reached.
*/
public final <T> T readValidatedInput(Message prompt,
- ValidationCallback<T> validator, int maxTries) throws CLIException {
+ ValidationCallback<T> validator, int maxTries) throws CLIException
+ {
int nTries = 0;
- while (nTries < maxTries) {
+ while (nTries < maxTries)
+ {
String response = readLineOfInput(prompt);
T value = validator.validate(this, response);
- if (value != null) {
+ if (value != null)
+ {
return value;
}
nTries++;
@@ -764,21 +1007,22 @@
/**
* Commodity method that interactively confirms whether a user wishes to
* perform an action. If the application is non-interactive, then the provided
- * default is returned automatically. If there is an error an error message
- * is logged to the provided Logger and the defaul value is returned.
+ * default is returned automatically. If there is an error an error message is
+ * logged to the provided Logger and the defaul value is returned.
*
* @param prompt
* The prompt describing the action.
* @param defaultValue
- * The default value for the confirmation message. This
- * will be returned if the application is non-interactive
- * or if the user just presses return.
- * @param logger the Logger to be used to log the error message.
- * @return Returns <code>true</code> if the user wishes the action
- * to be performed, or <code>false</code> if they refused.
- * @throws CLIException if the user did not provide valid answer after
- * a certain number of tries
- * (ConsoleApplication.CONFIRMATION_MAX_TRIES)
+ * The default value for the confirmation message. This will be
+ * returned if the application is non-interactive or if the user just
+ * presses return.
+ * @param logger
+ * the Logger to be used to log the error message.
+ * @return Returns <code>true</code> if the user wishes the action to be
+ * performed, or <code>false</code> if they refused.
+ * @throws CLIException
+ * if the user did not provide valid answer after a certain number
+ * of tries (ConsoleApplication.CONFIRMATION_MAX_TRIES)
*/
protected final boolean askConfirmation(Message prompt, boolean defaultValue,
Logger logger) throws CLIException
@@ -799,14 +1043,14 @@
catch (CLIException ce)
{
if (ce.getMessageObject().getDescriptor().equals(
- ERR_CONFIRMATION_TRIES_LIMIT_REACHED) ||
- ce.getMessageObject().getDescriptor().equals(
+ ERR_CONFIRMATION_TRIES_LIMIT_REACHED)
+ || ce.getMessageObject().getDescriptor().equals(
ERR_TRIES_LIMIT_REACHED))
{
throw ce;
}
- logger.log(Level.WARNING, "Error reading input: "+ce, ce);
-// Try again...
+ logger.log(Level.WARNING, "Error reading input: " + ce, ce);
+ // Try again...
println();
}
}
@@ -814,53 +1058,63 @@
if (!done)
{
// This means we reached the maximum number of tries
- throw new CLIException(ERR_CONFIRMATION_TRIES_LIMIT_REACHED.get(
- CONFIRMATION_MAX_TRIES));
+ throw new CLIException(ERR_CONFIRMATION_TRIES_LIMIT_REACHED
+ .get(CONFIRMATION_MAX_TRIES));
}
return v;
}
/**
- * Returns an InitialLdapContext using the provided parameters. We try
- * to guarantee that the connection is able to read the configuration.
- * @param host the host name.
- * @param port the port to connect.
- * @param useSSL whether to use SSL or not.
- * @param useStartTLS whether to use StartTLS or not.
- * @param bindDn the bind dn to be used.
- * @param pwd the password.
- * @param connectTimeout the timeout in milliseconds to connect to the server.
- * @param trustManager the trust manager.
+ * Returns an InitialLdapContext using the provided parameters. We try to
+ * guarantee that the connection is able to read the configuration.
+ *
+ * @param host
+ * the host name.
+ * @param port
+ * the port to connect.
+ * @param useSSL
+ * whether to use SSL or not.
+ * @param useStartTLS
+ * whether to use StartTLS or not.
+ * @param bindDn
+ * the bind dn to be used.
+ * @param pwd
+ * the password.
+ * @param connectTimeout
+ * the timeout in milliseconds to connect to the server.
+ * @param trustManager
+ * the trust manager.
* @return an InitialLdapContext connected.
- * @throws NamingException if there was an error establishing the connection.
+ * @throws NamingException
+ * if there was an error establishing the connection.
*/
protected InitialLdapContext createAdministrativeContext(String host,
int port, boolean useSSL, boolean useStartTLS, String bindDn, String pwd,
int connectTimeout, ApplicationTrustManager trustManager)
- throws NamingException
+ throws NamingException
{
InitialLdapContext ctx;
String ldapUrl = ConnectionUtils.getLDAPUrl(host, port, useSSL);
if (useSSL)
{
- ctx = Utils.createLdapsContext(ldapUrl, bindDn, pwd,
- connectTimeout, null, trustManager);
+ ctx =
+ Utils.createLdapsContext(ldapUrl, bindDn, pwd, connectTimeout, null,
+ trustManager);
}
else if (useStartTLS)
{
- ctx = Utils.createStartTLSContext(ldapUrl, bindDn, pwd,
- connectTimeout, null, trustManager,
- null);
+ ctx =
+ Utils.createStartTLSContext(ldapUrl, bindDn, pwd, connectTimeout,
+ null, trustManager, null);
}
else
{
- ctx = Utils.createLdapContext(ldapUrl, bindDn, pwd,
- connectTimeout, null);
+ ctx = Utils.createLdapContext(ldapUrl, bindDn, pwd, connectTimeout, null);
}
if (!ConnectionUtils.connectedAsAdministrativeUser(ctx))
{
- throw new NoPermissionException(
- ERR_NOT_ADMINISTRATIVE_USER.get().toString());
+ throw new NoPermissionException(ERR_NOT_ADMINISTRATIVE_USER.get()
+ .toString());
}
return ctx;
}
@@ -868,33 +1122,39 @@
/**
* Creates an Initial LDAP Context interacting with the user if the
* application is interactive.
- * @param ci the LDAPConnectionConsoleInteraction object that is assumed
- * to have been already run.
- * @return the initial LDAP context or <CODE>null</CODE> if the user did
- * not accept to trust the certificates.
- * @throws ClientException if there was an error establishing the connection.
+ *
+ * @param ci
+ * the LDAPConnectionConsoleInteraction object that is assumed to
+ * have been already run.
+ * @return the initial LDAP context or <CODE>null</CODE> if the user did not
+ * accept to trust the certificates.
+ * @throws ClientException
+ * if there was an error establishing the connection.
*/
protected InitialLdapContext createInitialLdapContextInteracting(
LDAPConnectionConsoleInteraction ci) throws ClientException
{
- return createInitialLdapContextInteracting(ci, isInteractive() &&
- ci.isTrustStoreInMemory());
+ return createInitialLdapContextInteracting(ci, isInteractive()
+ && ci.isTrustStoreInMemory());
}
/**
* Creates an Initial LDAP Context interacting with the user if the
* application is interactive.
- * @param ci the LDAPConnectionConsoleInteraction object that is assumed
- * to have been already run.
- * @param promptForCertificate whether we should prompt for the certificate
- * or not.
- * @return the initial LDAP context or <CODE>null</CODE> if the user did
- * not accept to trust the certificates.
- * @throws ClientException if there was an error establishing the connection.
+ *
+ * @param ci
+ * the LDAPConnectionConsoleInteraction object that is assumed to
+ * have been already run.
+ * @param promptForCertificate
+ * whether we should prompt for the certificate or not.
+ * @return the initial LDAP context or <CODE>null</CODE> if the user did not
+ * accept to trust the certificates.
+ * @throws ClientException
+ * if there was an error establishing the connection.
*/
protected InitialLdapContext createInitialLdapContextInteracting(
- LDAPConnectionConsoleInteraction ci,
- boolean promptForCertificate) throws ClientException
+ LDAPConnectionConsoleInteraction ci, boolean promptForCertificate)
+ throws ClientException
{
// Interact with the user though the console to get
// LDAP connection information
@@ -914,9 +1174,10 @@
{
try
{
- ctx = ConnectionUtils.createLdapsContext(ldapsUrl, bindDN,
- bindPassword, ci.getConnectTimeout(), null,
- trustManager, keyManager);
+ ctx =
+ ConnectionUtils.createLdapsContext(ldapsUrl, bindDN,
+ bindPassword, ci.getConnectTimeout(), null, trustManager,
+ keyManager);
ctx.reconnect(null);
break;
}
@@ -931,11 +1192,10 @@
if (trustManager instanceof ApplicationTrustManager)
{
ApplicationTrustManager appTrustManager =
- (ApplicationTrustManager)trustManager;
+ (ApplicationTrustManager) trustManager;
authType = appTrustManager.getLastRefusedAuthType();
}
- if (ci.checkServerCertificate(oce.getChain(), authType,
- hostName))
+ if (ci.checkServerCertificate(oce.getChain(), authType, hostName))
{
// If the certificate is trusted, update the trust manager.
trustManager = ci.getTrustManager();
@@ -952,33 +1212,32 @@
}
if (e.getCause() != null)
{
- if (!isInteractive() &&
- !ci.isTrustAll())
+ if (!isInteractive() && !ci.isTrustAll())
{
- if (getCertificateRootException(e) != null ||
- (e.getCause() instanceof SSLHandshakeException))
+ if (getCertificateRootException(e) != null
+ || (e.getCause() instanceof SSLHandshakeException))
{
Message message =
- ERR_DSCFG_ERROR_LDAP_FAILED_TO_CONNECT_NOT_TRUSTED.get(
- hostName, String.valueOf(portNumber));
+ ERR_DSCFG_ERROR_LDAP_FAILED_TO_CONNECT_NOT_TRUSTED.get(
+ hostName, String.valueOf(portNumber));
throw new ClientException(
- LDAPResultCode.CLIENT_SIDE_CONNECT_ERROR, message);
+ LDAPResultCode.CLIENT_SIDE_CONNECT_ERROR, message);
}
}
if (e.getCause() instanceof SSLException)
{
Message message =
- ERR_DSCFG_ERROR_LDAP_FAILED_TO_CONNECT_WRONG_PORT.get(
- hostName, String.valueOf(portNumber));
+ ERR_DSCFG_ERROR_LDAP_FAILED_TO_CONNECT_WRONG_PORT.get(
+ hostName, String.valueOf(portNumber));
throw new ClientException(
- LDAPResultCode.CLIENT_SIDE_CONNECT_ERROR, message);
+ LDAPResultCode.CLIENT_SIDE_CONNECT_ERROR, message);
}
}
String hostPort =
- ServerDescriptor.getServerRepresentation(hostName, portNumber);
+ ServerDescriptor.getServerRepresentation(hostName, portNumber);
Message message = Utils.getMessageForException(e, hostPort);
- throw new ClientException(
- LDAPResultCode.CLIENT_SIDE_CONNECT_ERROR, message);
+ throw new ClientException(LDAPResultCode.CLIENT_SIDE_CONNECT_ERROR,
+ message);
}
}
}
@@ -989,9 +1248,10 @@
{
try
{
- ctx = ConnectionUtils.createStartTLSContext(ldapUrl, bindDN,
- bindPassword, ConnectionUtils.getDefaultLDAPTimeout(), null,
- trustManager, keyManager, null);
+ ctx =
+ ConnectionUtils.createStartTLSContext(ldapUrl, bindDN,
+ bindPassword, ConnectionUtils.getDefaultLDAPTimeout(), null,
+ trustManager, keyManager, null);
ctx.reconnect(null);
break;
}
@@ -1006,18 +1266,17 @@
if (trustManager instanceof ApplicationTrustManager)
{
ApplicationTrustManager appTrustManager =
- (ApplicationTrustManager)trustManager;
+ (ApplicationTrustManager) trustManager;
authType = appTrustManager.getLastRefusedAuthType();
}
- if (ci.checkServerCertificate(oce.getChain(), authType,
- hostName))
+ if (ci.checkServerCertificate(oce.getChain(), authType, hostName))
{
// If the certificate is trusted, update the trust manager.
trustManager = ci.getTrustManager();
// Try to connect again.
- continue ;
+ continue;
}
else
{
@@ -1027,16 +1286,18 @@
}
else
{
- Message message = ERR_DSCFG_ERROR_LDAP_FAILED_TO_CONNECT.get(
- hostName, String.valueOf(portNumber));
+ Message message =
+ ERR_DSCFG_ERROR_LDAP_FAILED_TO_CONNECT.get(hostName, String
+ .valueOf(portNumber));
throw new ClientException(
LDAPResultCode.CLIENT_SIDE_CONNECT_ERROR, message);
}
}
- Message message = ERR_DSCFG_ERROR_LDAP_FAILED_TO_CONNECT.get(
- hostName, String.valueOf(portNumber));
- throw new ClientException(
- LDAPResultCode.CLIENT_SIDE_CONNECT_ERROR, message);
+ Message message =
+ ERR_DSCFG_ERROR_LDAP_FAILED_TO_CONNECT.get(hostName, String
+ .valueOf(portNumber));
+ throw new ClientException(LDAPResultCode.CLIENT_SIDE_CONNECT_ERROR,
+ message);
}
}
}
@@ -1047,17 +1308,19 @@
{
try
{
- ctx = ConnectionUtils.createLdapContext(ldapUrl, bindDN,
- bindPassword, ConnectionUtils.getDefaultLDAPTimeout(), null);
+ ctx =
+ ConnectionUtils.createLdapContext(ldapUrl, bindDN, bindPassword,
+ ConnectionUtils.getDefaultLDAPTimeout(), null);
ctx.reconnect(null);
break;
}
catch (NamingException e)
{
- Message message = ERR_DSCFG_ERROR_LDAP_FAILED_TO_CONNECT.get(
- hostName, String.valueOf(portNumber));
- throw new ClientException(
- LDAPResultCode.CLIENT_SIDE_CONNECT_ERROR, message);
+ Message message =
+ ERR_DSCFG_ERROR_LDAP_FAILED_TO_CONNECT.get(hostName, String
+ .valueOf(portNumber));
+ throw new ClientException(LDAPResultCode.CLIENT_SIDE_CONNECT_ERROR,
+ message);
}
}
}
@@ -1067,20 +1330,21 @@
/**
* Returns the message to be displayed in the file with the equivalent
* command-line with information about the current time.
- * @return the message to be displayed in the file with the equivalent
- * command-line with information about the current time.
+ *
+ * @return the message to be displayed in the file with the equivalent
+ * command-line with information about the current time.
*/
protected String getCurrentOperationDateMessage()
{
String date = formatDateTimeStringForEquivalentCommand(new Date());
- return INFO_OPERATION_START_TIME_MESSAGE.get(date).
- toString();
+ return INFO_OPERATION_START_TIME_MESSAGE.get(date).toString();
}
/**
* Formats a Date to String representation in "dd/MMM/yyyy:HH:mm:ss Z".
*
- * @param date to format; null if <code>date</code> is null
+ * @param date
+ * to format; null if <code>date</code> is null
* @return string representation of the date
*/
protected String formatDateTimeStringForEquivalentCommand(Date date)
@@ -1089,7 +1353,7 @@
if (date != null)
{
SimpleDateFormat dateFormat =
- new SimpleDateFormat(DATE_FORMAT_LOCAL_TIME);
+ new SimpleDateFormat(DATE_FORMAT_LOCAL_TIME);
dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
timeStr = dateFormat.format(date);
}
@@ -1098,13 +1362,14 @@
/**
* Prompts the user to give the Global Administrator UID.
- * @param defaultValue the default value that will be proposed in the prompt
- * message.
- * @param logger the Logger to be used to log the error message.
+ *
+ * @param defaultValue
+ * the default value that will be proposed in the prompt message.
+ * @param logger
+ * the Logger to be used to log the error message.
* @return the Global Administrator UID as provided by the user.
*/
- protected String askForAdministratorUID(String defaultValue,
- Logger logger)
+ protected String askForAdministratorUID(String defaultValue, Logger logger)
{
String s = defaultValue;
try
@@ -1113,14 +1378,16 @@
}
catch (CLIException ce)
{
- logger.log(Level.WARNING, "Error reading input: "+ce, ce);
+ logger.log(Level.WARNING, "Error reading input: " + ce, ce);
}
return s;
}
/**
* Prompts the user to give the Global Administrator password.
- * @param logger the Logger to be used to log the error message.
+ *
+ * @param logger
+ * the Logger to be used to log the error message.
* @return the Global Administrator password as provided by the user.
*/
protected String askForAdministratorPwd(Logger logger)
@@ -1137,23 +1404,25 @@
t = t.getCause();
if (t instanceof OpendsCertificateException)
{
- oce = (OpendsCertificateException)t;
+ oce = (OpendsCertificateException) t;
}
}
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.
+ * 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)
+ protected int askInteger(Message prompt, int defaultValue, Logger logger)
{
int newInt = -1;
while (newInt == -1)
@@ -1165,7 +1434,7 @@
catch (CLIException ce)
{
newInt = -1;
- logger.log(Level.WARNING, "Error reading input: "+ce, ce);
+ logger.log(Level.WARNING, "Error reading input: " + ce, ce);
}
}
return newInt;
@@ -1183,7 +1452,7 @@
* If the value could not be retrieved for some reason.
*/
public final int readInteger(Message prompt, final int defaultValue)
- throws CLIException
+ throws CLIException
{
ValidationCallback<Integer> callback = new ValidationCallback<Integer>()
{
@@ -1220,12 +1489,13 @@
};
- if (defaultValue != -1) {
- prompt = INFO_PROMPT_SINGLE_DEFAULT.get(prompt.toString(),
- String.valueOf(defaultValue));
+ 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