From 49c665b1c9576cf0fcca8426633d633515fcb5aa Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Thu, 19 Feb 2015 17:05:26 +0000
Subject: [PATCH] DSConfig.java: In checkForConflictingArguments(), extracted methods throwIfSetAndInteractiveMode() and throwIfConflictingArgsSet() (supersedes now removed conflictingArgs()). In handleBatchFile(), simplified the code and extracted methods buildCommandArgs(), toCommandArgs() and removeBatchArguments().
---
opendj-config/src/main/java/org/forgerock/opendj/config/dsconfig/DSConfig.java | 121 ++++++++++++++++++++--------------------
1 files changed, 60 insertions(+), 61 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 a3288c0..fcad37f 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
@@ -819,9 +819,7 @@
/** The argument which should be used to read dsconfig commands from a file. */
private StringArgument batchFileArgument;
- /**
- * The argument which should be used to request non interactive behavior.
- */
+ /** The argument which should be used to request non interactive behavior. */
private BooleanArgument noPromptArgument;
/**
@@ -1148,33 +1146,27 @@
}
private void checkForConflictingArguments() throws ArgumentException {
- if (quietArgument.isPresent() && verboseArgument.isPresent()) {
- throw conflictingArgs(quietArgument, verboseArgument);
- }
+ throwIfConflictingArgsSet(quietArgument, verboseArgument);
- if (batchFileArgument.isPresent() && !noPromptArgument.isPresent()) {
- final LocalizableMessage message = ERR_DSCFG_ERROR_QUIET_AND_INTERACTIVE_INCOMPATIBLE.get(
- batchFileArgument.getLongIdentifier(), noPromptArgument.getLongIdentifier());
- throw new ArgumentException(message);
- }
+ throwIfSetAndInteractiveMode(batchFileArgument);
+ throwIfSetAndInteractiveMode(quietArgument);
- if (quietArgument.isPresent() && !noPromptArgument.isPresent()) {
- final LocalizableMessage message = ERR_DSCFG_ERROR_QUIET_AND_INTERACTIVE_INCOMPATIBLE.get(
- quietArgument.getLongIdentifier(), noPromptArgument.getLongIdentifier());
- throw new ArgumentException(message);
- }
+ throwIfConflictingArgsSet(scriptFriendlyArgument, verboseArgument);
+ throwIfConflictingArgsSet(noPropertiesFileArgument, propertiesFileArgument);
+ }
- if (scriptFriendlyArgument.isPresent() && verboseArgument.isPresent()) {
- throw conflictingArgs(scriptFriendlyArgument, verboseArgument);
- }
-
- if (noPropertiesFileArgument.isPresent() && propertiesFileArgument.isPresent()) {
- throw conflictingArgs(noPropertiesFileArgument, propertiesFileArgument);
+ private void throwIfSetAndInteractiveMode(Argument arg1) throws ArgumentException {
+ if (arg1.isPresent() && !noPromptArgument.isPresent()) {
+ throw new ArgumentException(ERR_DSCFG_ERROR_QUIET_AND_INTERACTIVE_INCOMPATIBLE.get(
+ arg1.getLongIdentifier(), noPromptArgument.getLongIdentifier()));
}
}
- private ArgumentException conflictingArgs(Argument arg1, Argument arg2) {
- return new ArgumentException(ERR_TOOL_CONFLICTING_ARGS.get(arg1.getLongIdentifier(), arg2.getLongIdentifier()));
+ private void throwIfConflictingArgsSet(Argument arg1, Argument arg2) throws ArgumentException {
+ if (arg1.isPresent() && arg2.isPresent()) {
+ throw new ArgumentException(ERR_TOOL_CONFLICTING_ARGS.get(
+ arg1.getLongIdentifier(), arg2.getLongIdentifier()));
+ }
}
/** Run the top-level interactive console. */
@@ -1198,16 +1190,12 @@
final Map<RelationDefinition<?, ?>, CreateSubCommandHandler<?, ?>> createHandlers
= new HashMap<RelationDefinition<?, ?>, CreateSubCommandHandler<?, ?>>();
-
final Map<RelationDefinition<?, ?>, DeleteSubCommandHandler> deleteHandlers
= new HashMap<RelationDefinition<?, ?>, DeleteSubCommandHandler>();
-
final Map<RelationDefinition<?, ?>, ListSubCommandHandler> listHandlers
= new HashMap<RelationDefinition<?, ?>, ListSubCommandHandler>();
-
final Map<RelationDefinition<?, ?>, GetPropSubCommandHandler> getPropHandlers
= new HashMap<RelationDefinition<?, ?>, GetPropSubCommandHandler>();
-
final Map<RelationDefinition<?, ?>, SetPropSubCommandHandler> setPropHandlers
= new HashMap<RelationDefinition<?, ?>, SetPropSubCommandHandler>();
@@ -1432,30 +1420,16 @@
}
private void handleBatchFile(String[] args) {
-
BufferedReader bReader = null;
try {
- // Build a list of initial arguments,
- // removing the batch file option + its value
- final List<String> initialArgs = new ArrayList<String>();
- Collections.addAll(initialArgs, args);
- int batchFileArgIndex = -1;
- for (final String elem : initialArgs) {
- if (elem.startsWith("-" + OPTION_SHORT_BATCH_FILE_PATH) || elem.contains(OPTION_LONG_BATCH_FILE_PATH)) {
- batchFileArgIndex = initialArgs.indexOf(elem);
- break;
- }
- }
- if (batchFileArgIndex != -1) {
- // Remove both the batch file arg and its value
- initialArgs.remove(batchFileArgIndex);
- initialArgs.remove(batchFileArgIndex);
- }
final String batchFilePath = batchFileArgument.getValue().trim();
bReader = new BufferedReader(new FileReader(batchFilePath));
- String line;
- String command = "";
+
+ List<String> initialArgs = removeBatchArgs(args);
+
// Split the CLI string into arguments array
+ String command = "";
+ String line;
while ((line = bReader.readLine()) != null) {
if ("".equals(line) || line.startsWith("#")) {
// Empty line or comment
@@ -1472,32 +1446,22 @@
command = command.trim();
// string between quotes support
command = replaceSpacesInQuotes(command);
- String displayCommand = new String(command);
-
// "\ " support
command = command.replace("\\ ", "##");
- displayCommand = displayCommand.replace("\\ ", " ");
- String[] fileArguments = command.split("\\s+");
- // reset command
- command = "";
- for (int ii = 0; ii < fileArguments.length; ii++) {
- fileArguments[ii] = fileArguments[ii].replace("##", " ");
- }
+ String displayCommand = command.replace("\\ ", " ");
errPrintln(LocalizableMessage.raw(displayCommand));
// Append initial arguments to the file line
- final List<String> allArguments = new ArrayList<String>();
- Collections.addAll(allArguments, fileArguments);
- allArguments.addAll(initialArgs);
- final String[] allArgsArray = allArguments.toArray(new String[] {});
-
+ final String[] allArgsArray = buildCommandArgs(initialArgs, command);
int exitCode = main(allArgsArray, getOutputStream(), getErrorStream());
if (exitCode != ReturnCode.SUCCESS.get()) {
System.exit(filterExitCode(exitCode));
}
errPrintln();
+ // reset command
+ command = "";
}
} catch (IOException ex) {
errPrintln(ERR_DSCFG_ERROR_READING_BATCH_FILE.get(ex));
@@ -1506,6 +1470,41 @@
}
}
+ private String[] buildCommandArgs(List<String> initialArgs, String batchCommand) {
+ final String[] commandArgs = toCommandArgs(batchCommand);
+ final int length = commandArgs.length + initialArgs.size();
+ final List<String> allArguments = new ArrayList<String>(length);
+ Collections.addAll(allArguments, commandArgs);
+ allArguments.addAll(initialArgs);
+ return allArguments.toArray(new String[length]);
+ }
+
+ private String[] toCommandArgs(String command) {
+ String[] fileArguments = command.split("\\s+");
+ for (int ii = 0; ii < fileArguments.length; ii++) {
+ fileArguments[ii] = fileArguments[ii].replace("##", " ");
+ }
+ return fileArguments;
+ }
+
+ private List<String> removeBatchArgs(String[] args) {
+ // Build a list of initial arguments,
+ // removing the batch file option + its value
+ final List<String> initialArgs = new ArrayList<String>();
+ Collections.addAll(initialArgs, args);
+ for (Iterator<String> it = initialArgs.iterator(); it.hasNext();) {
+ final String elem = it.next();
+ if (elem.startsWith("-" + batchFileArgument.getShortIdentifier())
+ || elem.contains(batchFileArgument.getLongIdentifier())) {
+ // Remove both the batch file arg and its value
+ it.remove();
+ it.remove();
+ break;
+ }
+ }
+ return initialArgs;
+ }
+
/** Replace spaces in quotes by "\ ". */
private String replaceSpacesInQuotes(final String line) {
String newLine = "";
--
Gitblit v1.10.0