From 60b1359b65d8505c32f0598bf325043b7cedf843 Mon Sep 17 00:00:00 2001
From: Gaetan Boismal <gaetan.boismal@forgerock.com>
Date: Tue, 16 Dec 2014 17:05:29 +0000
Subject: [PATCH] OPENDJ-1655 (CR-5676) Fix display of error message in dsconfig
---
opendj-config/src/main/java/org/forgerock/opendj/config/dsconfig/DSConfig.java | 89 +++++++++++++++++++++++++++-----------------
1 files changed, 55 insertions(+), 34 deletions(-)
diff --git a/opendj-config/src/main/java/org/forgerock/opendj/config/dsconfig/DSConfig.java b/opendj-config/src/main/java/org/forgerock/opendj/config/dsconfig/DSConfig.java
index 8f6990e..16d6a54 100644
--- a/opendj-config/src/main/java/org/forgerock/opendj/config/dsconfig/DSConfig.java
+++ b/opendj-config/src/main/java/org/forgerock/opendj/config/dsconfig/DSConfig.java
@@ -138,10 +138,10 @@
return MenuResult.again();
}
} catch (ArgumentException e) {
- app.println(e.getMessageObject());
+ app.errPrintln(e.getMessageObject());
return MenuResult.success(1);
} catch (ClientException e) {
- app.println(e.getMessageObject());
+ app.errPrintln(e.getMessageObject());
return MenuResult.success(e.getReturnCode());
}
}
@@ -239,7 +239,7 @@
}
return result;
} catch (ClientException e) {
- app.println(e.getMessageObject());
+ app.errPrintln(e.getMessageObject());
return MenuResult.success(1);
}
}
@@ -257,6 +257,32 @@
*/
public static final String GENERIC_TYPE = "generic";
+ /**
+ * Prints the provided error message if the provided application is
+ * interactive, throws a {@link ClientException} with provided error code
+ * and message otherwise.
+ *
+ * @param app
+ * The console application where the message should be printed.
+ * @param msg
+ * The human readable error message.
+ * @param errorCode
+ * The operation error code.
+ * @return A generic cancel menu result if application is interactive.
+ * @throws ClientException
+ * If the application is not interactive.
+ */
+ static <T> MenuResult<T> interactivePrintOrThrowError(ConsoleApplication app,
+ LocalizableMessage msg, ReturnCode errorCode) throws ClientException {
+ if (app.isInteractive()) {
+ app.errPrintln();
+ app.errPrintln(msg);
+ return MenuResult.cancel();
+ } else {
+ throw new ClientException(errorCode, msg);
+ }
+ }
+
private long sessionStartTime;
private boolean sessionStartTimePrinted;
private int sessionEquivalentOperationNumber;
@@ -294,7 +320,7 @@
try {
ConfigurationFramework.getInstance().initialize();
} catch (ConfigException e) {
- app.println(e.getMessageObject());
+ app.errPrintln(e.getMessageObject());
return ReturnCode.ERROR_INITIALIZING_SERVER.get();
}
}
@@ -418,11 +444,11 @@
return verboseArgument.isPresent();
}
- /** Displays the provided message followed by a help usage reference. */
- private void displayMessageAndUsageReference(LocalizableMessage message) {
- println(message);
- println();
- println(parser.getHelpUsageReference());
+ /** Displays the provided error message followed by a help usage reference. */
+ private void displayErrorMessageAndUsageReference(LocalizableMessage message) {
+ errPrintln(message);
+ errPrintln();
+ errPrintln(parser.getHelpUsageReference());
}
/**
@@ -560,7 +586,7 @@
initializeGlobalArguments(args);
initializeSubCommands();
} catch (ArgumentException e) {
- println(ERR_CANNOT_INITIALIZE_ARGS.get(e.getMessage()));
+ errPrintln(ERR_CANNOT_INITIALIZE_ARGS.get(e.getMessage()));
return ReturnCode.ERROR_USER_DATA.get();
}
@@ -574,7 +600,7 @@
parser.parseArguments(args);
checkForConflictingArguments();
} catch (ArgumentException ae) {
- displayMessageAndUsageReference(ERR_ERROR_PARSING_ARGS.get(ae.getMessage()));
+ displayErrorMessageAndUsageReference(ERR_ERROR_PARSING_ARGS.get(ae.getMessage()));
return ReturnCode.CONFLICTING_ARGS.get();
}
@@ -589,10 +615,10 @@
if (equivalentCommandFileArgument.isPresent()) {
final String file = equivalentCommandFileArgument.getValue();
if (!canWrite(file)) {
- println(ERR_DSCFG_CANNOT_WRITE_EQUIVALENT_COMMAND_LINE_FILE.get(file));
+ errPrintln(ERR_DSCFG_CANNOT_WRITE_EQUIVALENT_COMMAND_LINE_FILE.get(file));
return ReturnCode.ERROR_UNEXPECTED.get();
} else if (new File(file).isDirectory()) {
- println(ERR_DSCFG_EQUIVALENT_COMMAND_LINE_FILE_DIRECTORY.get(file));
+ errPrintln(ERR_DSCFG_EQUIVALENT_COMMAND_LINE_FILE_DIRECTORY.get(file));
return ReturnCode.ERROR_UNEXPECTED.get();
}
}
@@ -601,35 +627,30 @@
try {
factory = new LDAPManagementContextFactory(cfp);
} catch (ArgumentException e) {
- displayMessageAndUsageReference(ERR_ERROR_PARSING_ARGS.get(e.getMessage()));
+ displayErrorMessageAndUsageReference(ERR_ERROR_PARSING_ARGS.get(e.getMessage()));
return ReturnCode.CONFLICTING_ARGS.get();
}
// Handle batch file if any
if (batchFileArgument.isPresent()) {
handleBatchFile(args);
- // don't need to do anything else
return ReturnCode.SUCCESS.get();
}
int retCode = 0;
- if (parser.getSubCommand() == null) {
- hasSubCommand = false;
-
+ hasSubCommand = parser.getSubCommand() != null;
+ if (!hasSubCommand) {
if (isInteractive()) {
// Top-level interactive mode.
retCode = runInteractiveMode();
} else {
- LocalizableMessage message = ERR_ERROR_PARSING_ARGS.get(ERR_DSCFG_ERROR_MISSING_SUBCOMMAND.get());
- displayMessageAndUsageReference(message);
+ displayErrorMessageAndUsageReference(
+ ERR_ERROR_PARSING_ARGS.get(ERR_DSCFG_ERROR_MISSING_SUBCOMMAND.get()));
retCode = ReturnCode.ERROR_USER_DATA.get();
}
} else {
- hasSubCommand = true;
-
// Retrieve the sub-command implementation and run it.
- SubCommandHandler handler = handlers.get(parser.getSubCommand());
- retCode = runSubCommand(handler);
+ retCode = runSubCommand(handlers.get(parser.getSubCommand()));
}
factory.close();
@@ -749,10 +770,10 @@
// Force retrieval of management context.
factory.getManagementContext(app);
} catch (ArgumentException e) {
- app.println(e.getMessageObject());
+ app.errPrintln(e.getMessageObject());
return ReturnCode.ERROR_UNEXPECTED.get();
} catch (ClientException e) {
- app.println(e.getMessageObject());
+ app.errPrintln(e.getMessageObject());
return ReturnCode.ERROR_UNEXPECTED.get();
}
@@ -768,7 +789,7 @@
return result.getValue();
}
} catch (ClientException e) {
- app.println(e.getMessageObject());
+ app.errPrintln(e.getMessageObject());
return ReturnCode.ERROR_UNEXPECTED.get();
}
}
@@ -788,11 +809,11 @@
return ReturnCode.ERROR_UNEXPECTED.get();
}
} catch (ArgumentException e) {
- println(e.getMessageObject());
+ errPrintln(e.getMessageObject());
return ReturnCode.ERROR_UNEXPECTED.get();
} catch (ClientException e) {
Throwable cause = e.getCause();
- println();
+ errPrintln();
if (cause instanceof ManagedObjectDecodingException) {
displayManagedObjectDecodingException(this, (ManagedObjectDecodingException) cause);
} else if (cause instanceof MissingMandatoryPropertiesException) {
@@ -801,13 +822,13 @@
displayOperationRejectedException(this, (OperationRejectedException) cause);
} else {
// Just display the default message.
- println(e.getMessageObject());
+ errPrintln(e.getMessageObject());
}
- println();
+ errPrintln();
return ReturnCode.ERROR_UNEXPECTED.get();
} catch (Exception e) {
- println(LocalizableMessage.raw(stackTraceToSingleLineString(e, true)));
+ errPrintln(LocalizableMessage.raw(stackTraceToSingleLineString(e, true)));
return ReturnCode.ERROR_UNEXPECTED.get();
}
}
@@ -901,7 +922,7 @@
writer.flush();
} catch (IOException ioe) {
- println(ERR_DSCFG_ERROR_WRITING_EQUIVALENT_COMMAND_LINE.get(file, ioe));
+ errPrintln(ERR_DSCFG_ERROR_WRITING_EQUIVALENT_COMMAND_LINE.get(file, ioe));
} finally {
closeSilently(writer);
}
@@ -993,7 +1014,7 @@
errPrintln();
}
} catch (IOException ex) {
- println(ERR_DSCFG_ERROR_READING_BATCH_FILE.get(ex));
+ errPrintln(ERR_DSCFG_ERROR_READING_BATCH_FILE.get(ex));
} finally {
closeSilently(bReader);
}
--
Gitblit v1.10.0