diff options
Diffstat (limited to 'auth/cli-editor')
3 files changed, 237 insertions, 165 deletions
diff --git a/auth/cli-editor/src/main/java/org/onap/policy/apex/auth/clieditor/ApexModelHandler.java b/auth/cli-editor/src/main/java/org/onap/policy/apex/auth/clieditor/ApexModelHandler.java index 3d14a83f4..67d247e8d 100644 --- a/auth/cli-editor/src/main/java/org/onap/policy/apex/auth/clieditor/ApexModelHandler.java +++ b/auth/cli-editor/src/main/java/org/onap/policy/apex/auth/clieditor/ApexModelHandler.java @@ -27,6 +27,7 @@ import java.util.Properties; import java.util.SortedMap; import org.onap.policy.apex.model.modelapi.ApexApiResult; +import org.onap.policy.apex.model.modelapi.ApexApiResult.Result; import org.onap.policy.apex.model.modelapi.ApexModel; import org.onap.policy.apex.model.modelapi.ApexModelFactory; @@ -76,7 +77,7 @@ public class ApexModelHandler { * @param writer A writer to which to write output * @return the result of the executed command */ - public ApexApiResult executeCommand(final CommandLineCommand command, + public Result executeCommand(final CommandLineCommand command, final SortedMap<String, CommandLineArgumentValue> argumentValues, final PrintWriter writer) { // Get the method final Method apiMethod = getCommandMethod(command); @@ -90,7 +91,7 @@ public class ApexModelHandler { if (returnObject instanceof ApexApiResult) { final ApexApiResult result = (ApexApiResult) returnObject; writer.println(result); - return result; + return result.getResult(); } else { throw new CommandLineException(INVOCATION_OF_SPECIFIED_METHOD + command.getApiMethod() + FAILED_FOR_COMMAND + command.getName() diff --git a/auth/cli-editor/src/main/java/org/onap/policy/apex/auth/clieditor/CommandLineEditorLoop.java b/auth/cli-editor/src/main/java/org/onap/policy/apex/auth/clieditor/CommandLineEditorLoop.java index b5e82103d..48905292c 100644 --- a/auth/cli-editor/src/main/java/org/onap/policy/apex/auth/clieditor/CommandLineEditorLoop.java +++ b/auth/cli-editor/src/main/java/org/onap/policy/apex/auth/clieditor/CommandLineEditorLoop.java @@ -39,6 +39,8 @@ import java.util.Map.Entry; import java.util.Properties; import java.util.TreeMap; +import org.apache.commons.lang3.tuple.MutablePair; +import org.apache.commons.lang3.tuple.Pair; import org.onap.policy.apex.model.modelapi.ApexApiResult; import org.onap.policy.apex.model.modelapi.ApexApiResult.Result; import org.onap.policy.apex.model.utilities.TextFileUtils; @@ -108,35 +110,72 @@ public class CommandLineEditorLoop { // The parser parses the input lines into commands and arguments final CommandLineParser parser = new CommandLineParser(); + // The execution status has the result of the latest command and a cumulative error count + MutablePair<Result, Integer> executionStatus = new MutablePair<>(Result.SUCCESS, 0); + // The main loop for command handing, it continues until EOF on the input stream or until a // quit command - int errorCount = 0; - ApexApiResult result = new ApexApiResult(); - while (result.getResult() != Result.FINISHED) { - if (!parameters.isIgnoreCommandFailures() && errorCount > 0) { - break; + while (!endOfCommandExecution(executionStatus, parameters)) { + processIncomingCommands(parameters, reader, writer, parser, executionStatus); + } + + // Get the output model + if (!parameters.isSuppressModelOutputSet()) { + final String modelString = modelHandler.writeModelToString(writer); + + if (parameters.checkSetOutputModelFileName()) { + TextFileUtils.putStringAsTextFile(modelString, parameters.getOutputModelFileName()); + } else { + System.out.println(modelString); } + } + reader.close(); + writer.close(); + + return executionStatus.getRight(); + } + + /** + * Check if the command processing loop has come to an end. + * + * @param executionStatus a pair containing the result of the last command and the accumulated error count + * @param parameters the input parameters for command execution + * @return true if the command processing loop should exit + */ + private boolean endOfCommandExecution(Pair<Result, Integer> executionStatus, CommandLineParameters parameters) { + if (executionStatus.getLeft() == Result.FINISHED) { + return true; + } + + return executionStatus.getRight() > 0 && !parameters.isIgnoreCommandFailures(); + } + + /** + * Process the incoming commands one by one. + * + * @param parameters the parameters to the CLI editor + * @param reader the reader to read the logic block from + * @param writer the writer to write results and error messages on + * @param executionStatus the status of the logic block read + */ + private void processIncomingCommands(final CommandLineParameters parameters, final BufferedReader reader, + final PrintWriter writer, final CommandLineParser parser, + MutablePair<Result, Integer> executionStatus) { + + try { // Output prompt and get a line of input writer.print(getPrompt()); writer.flush(); String line = reader.readLine(); if (line == null) { - break; + executionStatus.setLeft(Result.FINISHED); + return; } // Expand any macros in the script - try { - while (line.contains(macroFileTag)) { - line = expandMacroFile(parameters, line); - } - } - // Print any error messages from command parsing and finding - catch (final CommandLineException e) { - writer.println(e.getMessage()); - errorCount++; - LOGGER.debug(COMMAND_LINE_ERROR, e); - continue; + while (line.contains(macroFileTag)) { + line = expandMacroFile(parameters, line); } if (parameters.isEchoSet()) { @@ -147,86 +186,86 @@ public class CommandLineEditorLoop { if (line.trim().endsWith(logicBlockStartTag)) { line = line.replace(logicBlockStartTag, "").trim(); - logicBlock = ""; - while (true) { - String logicLine = reader.readLine(); - if (logicLine == null) { - logicBlock = null; - break; - } - - try { - while (logicLine.contains(macroFileTag)) { - logicLine = expandMacroFile(parameters, logicLine); - } - } - // Print any error messages from command parsing and finding - catch (final CommandLineException e) { - writer.println(e.getMessage()); - errorCount++; - LOGGER.debug(COMMAND_LINE_ERROR, e); - continue; - } - - if (parameters.isEchoSet()) { - writer.println(logicLine); - } - - if (logicLine.trim().endsWith(logicBlockEndTag)) { - logicBlock += logicLine.replace(logicBlockEndTag, "").trim() + "\n"; - break; - } else { - logicBlock += logicLine + "\n"; - } + logicBlock = readLogicBlock(parameters, reader, writer, executionStatus); + } + + // Parse the line into a list of commands and arguments + final List<String> commandWords = parser.parse(line, logicBlock); + + // Find the command, if the command is null, then we are simply changing position in + // the hierarchy + final CommandLineCommand command = findCommand(commandWords); + if (command != null) { + // Check the arguments of the command + final TreeMap<String, CommandLineArgumentValue> argumentValues = getArgumentValues(command, + commandWords); + + // Execute the command, a FINISHED result means a command causes the loop to + // leave execution + executionStatus.setLeft(executeCommand(command, argumentValues, writer)); + if (ApexApiResult.Result.isNok(executionStatus.getLeft())) { + executionStatus.setRight(executionStatus.getRight() + 1); } } + } + // Print any error messages from command parsing and finding + catch (final CommandLineException e) { + writer.println(e.getMessage()); + executionStatus.setRight(executionStatus.getRight() + 1); + LOGGER.debug(COMMAND_LINE_ERROR, e); + } catch (final Exception e) { + e.printStackTrace(writer); + LOGGER.error(COMMAND_LINE_ERROR, e); + } + } + + /** + * Read a logic block, a block of program logic for a policy. + * + * @param parameters the parameters to the CLI editor + * @param reader the reader to read the logic block from + * @param writer the writer to write results and error messages on + * @param executionStatus the status of the logic block read + * @return the result of the logic block read + */ + private String readLogicBlock(final CommandLineParameters parameters, final BufferedReader reader, + final PrintWriter writer, MutablePair<Result, Integer> executionStatus) { + String logicBlock; + logicBlock = ""; + while (true) { try { - // Parse the line into a list of commands and arguments - final List<String> commandWords = parser.parse(line, logicBlock); - - // Find the command, if the command is null, then we are simply changing position in - // the hierarchy - final CommandLineCommand command = findCommand(commandWords); - if (command != null) { - // Check the arguments of the command - final TreeMap<String, CommandLineArgumentValue> argumentValues = getArgumentValues(command, - commandWords); - - // Execute the command, a FINISHED result means a command causes the loop to - // leave execution - result = executeCommand(command, argumentValues, writer); - if (result.isNok()) { - errorCount++; - } + String logicLine = reader.readLine(); + if (logicLine == null) { + return null; + } + + while (logicLine.contains(macroFileTag)) { + logicLine = expandMacroFile(parameters, logicLine); + } + + if (parameters.isEchoSet()) { + writer.println(logicLine); + } + + if (logicLine.trim().endsWith(logicBlockEndTag)) { + logicBlock += logicLine.replace(logicBlockEndTag, "").trim() + "\n"; + return logicBlock; + } else { + logicBlock += logicLine + "\n"; } } // Print any error messages from command parsing and finding catch (final CommandLineException e) { writer.println(e.getMessage()); - errorCount++; + executionStatus.setRight(executionStatus.getRight() + 1); LOGGER.debug(COMMAND_LINE_ERROR, e); + continue; } catch (final Exception e) { e.printStackTrace(writer); LOGGER.error(COMMAND_LINE_ERROR, e); } } - - // Get the output model - if (!parameters.isSuppressModelOutputSet()) { - final String modelString = modelHandler.writeModelToString(writer); - - if (parameters.checkSetOutputModelFileName()) { - TextFileUtils.putStringAsTextFile(modelString, parameters.getOutputModelFileName()); - } else { - System.out.println(modelString); - } - } - - reader.close(); - writer.close(); - - return errorCount; } /** @@ -342,8 +381,8 @@ public class CommandLineEditorLoop { throw new CommandLineException(COMMAND + stringAL2String(commandWords) + ": " + " argument \"" + argument.getKey() + "\" not allowed on command"); } else if (foundArguments.size() > 1) { - throw new CommandLineException(COMMAND + stringAL2String(commandWords) + ": " + " argument " - + argument + " matches multiple arguments [" + argumentAL2String(foundArguments) + ']'); + throw new CommandLineException(COMMAND + stringAL2String(commandWords) + ": " + " argument " + argument + + " matches multiple arguments [" + argumentAL2String(foundArguments) + ']'); } // Set the value of the argument, stripping off any quotes @@ -356,9 +395,8 @@ public class CommandLineEditorLoop { // Argument values are null by default so if this argument is not nullable it is // mandatory if (!argumentValue.isSpecified() && !argumentValue.getCliArgument().isNullable()) { - throw new CommandLineException(COMMAND + stringAL2String(commandWords) + ": " - + " mandatory argument \"" + argumentValue.getCliArgument().getArgumentName() - + "\" not specified"); + throw new CommandLineException(COMMAND + stringAL2String(commandWords) + ": " + " mandatory argument \"" + + argumentValue.getCliArgument().getArgumentName() + "\" not specified"); } } @@ -395,7 +433,7 @@ public class CommandLineEditorLoop { * @param writer The writer to use for any output from the command * @return the result of execution of the command */ - private ApexApiResult executeCommand(final CommandLineCommand command, + private Result executeCommand(final CommandLineCommand command, final TreeMap<String, CommandLineArgumentValue> argumentValues, final PrintWriter writer) { if (command.isSystemCommand()) { return exceuteSystemCommand(command, writer); @@ -411,7 +449,7 @@ public class CommandLineEditorLoop { * @param writer The writer to use for any output from the command * @return the result of execution of the command */ - private ApexApiResult exceuteSystemCommand(final CommandLineCommand command, final PrintWriter writer) { + private Result exceuteSystemCommand(final CommandLineCommand command, final PrintWriter writer) { if ("back".equals(command.getName())) { return executeBackCommand(); } else if ("help".equals(command.getName())) { @@ -419,7 +457,7 @@ public class CommandLineEditorLoop { } else if ("quit".equals(command.getName())) { return executeQuitCommand(); } else { - return new ApexApiResult(Result.SUCCESS); + return Result.SUCCESS; } } @@ -428,11 +466,11 @@ public class CommandLineEditorLoop { * * @return the result of execution of the command */ - private ApexApiResult executeBackCommand() { + private Result executeBackCommand() { if (keywordNodeDeque.size() > 1) { keywordNodeDeque.pop(); } - return new ApexApiResult(Result.SUCCESS); + return Result.SUCCESS; } /** @@ -440,8 +478,8 @@ public class CommandLineEditorLoop { * * @return the result of execution of the command */ - private ApexApiResult executeQuitCommand() { - return new ApexApiResult(Result.FINISHED); + private Result executeQuitCommand() { + return Result.FINISHED; } /** @@ -450,11 +488,11 @@ public class CommandLineEditorLoop { * @param writer The writer to use for output from the command * @return the result of execution of the command */ - private ApexApiResult executeHelpCommand(final PrintWriter writer) { + private Result executeHelpCommand(final PrintWriter writer) { for (final CommandLineCommand command : keywordNodeDeque.peek().getCommands()) { writer.println(command.getHelp()); } - return new ApexApiResult(Result.SUCCESS); + return Result.SUCCESS; } /** diff --git a/auth/cli-editor/src/main/java/org/onap/policy/apex/auth/clieditor/CommandLineParser.java b/auth/cli-editor/src/main/java/org/onap/policy/apex/auth/clieditor/CommandLineParser.java index aa74f4ba3..3eba53d2d 100644 --- a/auth/cli-editor/src/main/java/org/onap/policy/apex/auth/clieditor/CommandLineParser.java +++ b/auth/cli-editor/src/main/java/org/onap/policy/apex/auth/clieditor/CommandLineParser.java @@ -21,6 +21,7 @@ package org.onap.policy.apex.auth.clieditor; import java.util.ArrayList; +import java.util.Collection; import java.util.List; /** @@ -31,10 +32,9 @@ import java.util.List; public class CommandLineParser { /** - * This method breaks a line of input up into commands, parameters, and arguments. Commands are - * standalone words at the beginning of the line, of which there may be multiple Parameters are - * single words followed by an '=' character Arguments are single words or a block of quoted - * text following an '=' character. + * This method breaks a line of input up into commands, parameters, and arguments. Commands are standalone words at + * the beginning of the line, of which there may be multiple Parameters are single words followed by an '=' + * character Arguments are single words or a block of quoted text following an '=' character. * * <p>Format: command [command....] parameter=argument [parameter = argument] * @@ -46,9 +46,9 @@ public class CommandLineParser { */ public List<String> parse(final String line, final String logicBlock) { return checkFormat( - mergeArguments(mergeEquals( - splitOnEquals(stripAndSplitWords(mergeQuotes(splitOnChar(stripComments(line), '\"')))))), - logicBlock); + mergeArguments(mergeEquals(splitOnEquals( + stripAndSplitWords(mergeQuotes(splitOnChar(stripComments(line), '\"')))))), + logicBlock); } /** @@ -67,10 +67,9 @@ public class CommandLineParser { } /** - * This method merges an array with separate quotes into an array with quotes delimiting the - * start and end of quoted words Example [Humpty ],["],[Dumpty sat on the wall],["],[, Humpty - * Dumpty had ],["],["],a ["],[great],["],[ fall] becomes [Humpty ],["Dumpty sat on the - * wall"],[, Humpty Dumpty had ],[""],[a],["great"],[ fall]. + * This method merges an array with separate quotes into an array with quotes delimiting the start and end of quoted + * words Example [Humpty ],["],[Dumpty sat on the wall],["],[, Humpty Dumpty had ],["],["],a ["],[great],["],[ fall] + * becomes [Humpty ],["Dumpty sat on the wall"],[, Humpty Dumpty had ],[""],[a],["great"],[ fall]. * * @param wordsSplitOnQuotes the words split on quotes * @return the merged array list @@ -78,35 +77,51 @@ public class CommandLineParser { private ArrayList<String> mergeQuotes(final ArrayList<String> wordsSplitOnQuotes) { final ArrayList<String> wordsWithQuotesMerged = new ArrayList<>(); - for (int i = 0; i < wordsSplitOnQuotes.size();) { - if ("\"".equals(wordsSplitOnQuotes.get(i))) { - StringBuilder quotedWord = new StringBuilder(wordsSplitOnQuotes.get(i++)); + int loopWordIndex = 0; + for (int wordIndex = 0; wordIndex < wordsSplitOnQuotes.size(); wordIndex = loopWordIndex) { + loopWordIndex = mergeQuote(wordsSplitOnQuotes, wordsWithQuotesMerged, wordIndex); + } - for (; i < wordsSplitOnQuotes.size(); i++) { - quotedWord.append(wordsSplitOnQuotes.get(i)); - if ("\"".equals(wordsSplitOnQuotes.get(i))) { - i++; - break; - } - } - String quotedWordToString = quotedWord.toString(); - if (quotedWordToString.matches("^\".*\"$")) { - wordsWithQuotesMerged.add(quotedWordToString); - } else { - throw new CommandLineException("trailing quote found in input " + wordsSplitOnQuotes); + return wordsWithQuotesMerged; + } + + /** + * This method merges the next set of quotes. + * + * @param wordsSplitOnQuotes the words split on quotes + * @param wordsWithQuotesMerged the merged words + * @param wordIndex the current word index + * @return the next word index + */ + private int mergeQuote(final ArrayList<String> wordsSplitOnQuotes, final ArrayList<String> wordsWithQuotesMerged, + int wordIndex) { + + if ("\"".equals(wordsSplitOnQuotes.get(wordIndex))) { + StringBuilder quotedWord = new StringBuilder(wordsSplitOnQuotes.get(wordIndex++)); + + for (; wordIndex < wordsSplitOnQuotes.size(); wordIndex++) { + quotedWord.append(wordsSplitOnQuotes.get(wordIndex)); + if ("\"".equals(wordsSplitOnQuotes.get(wordIndex))) { + wordIndex++; + break; } + } + String quotedWordToString = quotedWord.toString(); + if (quotedWordToString.matches("^\".*\"$")) { + wordsWithQuotesMerged.add(quotedWordToString); } else { - wordsWithQuotesMerged.add(wordsSplitOnQuotes.get(i++)); + throw new CommandLineException("trailing quote found in input " + wordsSplitOnQuotes); } + } else { + wordsWithQuotesMerged.add(wordsSplitOnQuotes.get(wordIndex++)); } - - return wordsWithQuotesMerged; + return wordIndex; } /** - * This method splits the words on an array list into an array list where each portion of the - * line is split into words by '=', quoted words are ignored Example: aaa = bbb = ccc=ddd=eee = - * becomes [aaa ],[=],[bbb ],[=],[ccc],[=],[ddd],[=],[eee ],[=]. + * This method splits the words on an array list into an array list where each portion of the line is split into + * words by '=', quoted words are ignored Example: aaa = bbb = ccc=ddd=eee = becomes [aaa ],[=],[bbb + * ],[=],[ccc],[=],[ddd],[=],[eee ],[=]. * * @param words the words * @return the merged array list @@ -132,9 +147,8 @@ public class CommandLineParser { } /** - * This method merges an array with separate equals into an array with equals delimiting the - * start of words Example: [aaa ],[=],[bbb ],[=],[ccc],[=],[ddd],[=],[eee ],[=] becomes [aaa - * ],[= bbb ],[= ccc],[=ddd],[=eee ],[=]. + * This method merges an array with separate equals into an array with equals delimiting the start of words Example: + * [aaa ],[=],[bbb ],[=],[ccc],[=],[ddd],[=],[eee ],[=] becomes [aaa ],[= bbb ],[= ccc],[=ddd],[=eee ],[=]. * * @param wordsSplitOnEquals the words split on equals * @return the merged array list @@ -142,22 +156,27 @@ public class CommandLineParser { private ArrayList<String> mergeEquals(final ArrayList<String> wordsSplitOnEquals) { final ArrayList<String> wordsWithEqualsMerged = new ArrayList<>(); - for (int i = 0; i < wordsSplitOnEquals.size();) { + int loopWordIndex = 0; + for (int wordIndex = 0; wordIndex < wordsSplitOnEquals.size(); wordIndex = loopWordIndex) { + loopWordIndex = wordIndex; + // Is this a quoted word ? - if (wordsSplitOnEquals.get(i).startsWith("\"")) { - wordsWithEqualsMerged.add(wordsSplitOnEquals.get(i)); + if (wordsSplitOnEquals.get(loopWordIndex).startsWith("\"")) { + wordsWithEqualsMerged.add(wordsSplitOnEquals.get(loopWordIndex)); continue; } - if ("=".equals(wordsSplitOnEquals.get(i))) { - if (i < wordsSplitOnEquals.size() - 1 && !wordsSplitOnEquals.get(i + 1).startsWith("=")) { - wordsWithEqualsMerged.add(wordsSplitOnEquals.get(i) + wordsSplitOnEquals.get(i + 1)); - i += 2; + if ("=".equals(wordsSplitOnEquals.get(loopWordIndex))) { + if (loopWordIndex < wordsSplitOnEquals.size() - 1 + && !wordsSplitOnEquals.get(loopWordIndex + 1).startsWith("=")) { + wordsWithEqualsMerged.add( + wordsSplitOnEquals.get(loopWordIndex) + wordsSplitOnEquals.get(loopWordIndex + 1)); + loopWordIndex += 2; } else { - wordsWithEqualsMerged.add(wordsSplitOnEquals.get(i++)); + wordsWithEqualsMerged.add(wordsSplitOnEquals.get(loopWordIndex++)); } } else { - wordsWithEqualsMerged.add(wordsSplitOnEquals.get(i++)); + wordsWithEqualsMerged.add(wordsSplitOnEquals.get(loopWordIndex++)); } } @@ -165,8 +184,8 @@ public class CommandLineParser { } /** - * This method merges words that start with an '=' character with the previous word if that word - * does not start with an '='. + * This method merges words that start with an '=' character with the previous word if that word does not start with + * an '='. * * @param words the words * @return the merged array list @@ -197,8 +216,8 @@ public class CommandLineParser { } /** - * This method strips all non quoted white space down to single spaces and splits non-quoted - * words into separate words. + * This method strips all non quoted white space down to single spaces and splits non-quoted words into separate + * words. * * @param words the words * @return the array list with white space stripped and words split @@ -210,32 +229,46 @@ public class CommandLineParser { // Is this a quoted word if (word.startsWith("\"")) { strippedAndSplitWords.add(word); - continue; + } else { + // Split the word on blanks + strippedAndSplitWords.addAll(stripAndSplitWord(word)); } + } - // Strip white space by replacing all white space with blanks and then removing leading - // and trailing blanks - word = word.replaceAll("\\s+", " ").trim(); + return strippedAndSplitWords; + } - if (word.length() == 0) { - continue; - } + /** + * Strip and split a word on blanks into an array of words split on blanks. + * + * @param word the word to split + * @return the array of split words + */ + private Collection<? extends String> stripAndSplitWord(final String word) { + final ArrayList<String> strippedAndSplitWords = new ArrayList<>(); - // Split on space characters - final String[] splitWords = word.split(" "); - for (final String splitWord : splitWords) { - strippedAndSplitWords.add(splitWord); - } + // Strip white space by replacing all white space with blanks and then removing leading + // and trailing blanks + String singleSpaceWord = word.replaceAll("\\s+", " ").trim(); + + if (singleSpaceWord.length() == 0) { + return strippedAndSplitWords; + } + + // Split on space characters + final String[] splitWords = singleSpaceWord.split(" "); + for (final String splitWord : splitWords) { + strippedAndSplitWords.add(splitWord); } return strippedAndSplitWords; } /** - * This method splits a line of text into an array list where each portion of the line is split - * into words by a character, with the characters themselves as separate words Example: Humpty - * "Dumpty sat on the wall", Humpty Dumpty had ""a "great" fall becomes [Humpty ],["],[Dumpty - * sat on the wall],["],[, Humpty Dumpty had ],["],["],a ["],[great],["],[ fall]. + * This method splits a line of text into an array list where each portion of the line is split into words by a + * character, with the characters themselves as separate words Example: Humpty "Dumpty sat on the wall", Humpty + * Dumpty had ""a "great" fall becomes [Humpty ],["],[Dumpty sat on the wall],["],[, Humpty Dumpty had ],["],["],a + * ["],[great],["],[ fall]. * * @param line the input line * @param splitChar the split char @@ -282,7 +315,7 @@ public class CommandLineParser { // The first word must be alphanumeric, that is a command if (!commandWords.get(0).matches("^[a-zA-Z0-9]*$")) { throw new CommandLineException( - "first command word is not alphanumeric or is not a command: " + commandWords.get(0)); + "first command word is not alphanumeric or is not a command: " + commandWords.get(0)); } // Now check that we have a sequence of commands at the beginning @@ -304,7 +337,7 @@ public class CommandLineParser { currentWordPos++; } else { throw new CommandLineException( - "command argument is not properly formed: " + commandWords.get(currentWordPos)); + "command argument is not properly formed: " + commandWords.get(currentWordPos)); } } else { // Logic block @@ -313,7 +346,7 @@ public class CommandLineParser { currentWordPos++; } else { throw new CommandLineException( - "command argument is not properly formed: " + commandWords.get(currentWordPos)); + "command argument is not properly formed: " + commandWords.get(currentWordPos)); } } } |