diff -r b329573c76d7 -r 8e9983260624 java/copy-image-resizer/src/cz/frantovo/copyImageResizer/cli/CLIParser.java --- a/java/copy-image-resizer/src/cz/frantovo/copyImageResizer/cli/CLIParser.java Mon Nov 17 01:17:02 2014 +0100 +++ b/java/copy-image-resizer/src/cz/frantovo/copyImageResizer/cli/CLIParser.java Mon Nov 17 17:02:48 2014 +0100 @@ -18,6 +18,7 @@ package cz.frantovo.copyImageResizer.cli; import cz.frantovo.copyImageResizer.RecursiveOptions; +import cz.frantovo.copyImageResizer.SizeSpecification; import java.io.File; import java.util.Arrays; import java.util.Collection; @@ -52,11 +53,21 @@ return options; } - private static String fetchNext(String[] args, int index) throws CLIParserException { + /** + * + * @param args + * @param index + * @param option name of the option for error messages | if null, the previous argument is used + * as option name + * @return + * @throws CLIParserException + */ + private static String fetchNext(String[] args, int index, String option) throws CLIParserException { if (index < args.length) { return args[index]; } else { - throw new CLIParserException("Expecting value for option: " + args[index - 1]); + option = option == null ? args[index - 1] : option; + throw new CLIParserException("Expecting value for option: " + option); } } @@ -66,7 +77,7 @@ @Override public int parse(String[] args, int index, RecursiveOptions options) throws CLIParserException { int originalIndex = index; - String name = fetchNext(args, ++index); + String name = fetchNext(args, ++index, args[originalIndex]); options.setInput(new File(name)); return index - originalIndex; } @@ -75,7 +86,7 @@ @Override public int parse(String[] args, int index, RecursiveOptions options) throws CLIParserException { int originalIndex = index; - String name = fetchNext(args, ++index); + String name = fetchNext(args, ++index, args[originalIndex]); options.setOutput(new File(name)); return index - originalIndex; } @@ -84,10 +95,11 @@ @Override public int parse(String[] args, int index, RecursiveOptions options) throws CLIParserException { int originalIndex = index; - int width = parseInt(fetchNext(args, ++index)); - int height = parseInt(fetchNext(args, ++index)); + int width = parseInt(fetchNext(args, ++index, args[originalIndex])); + int height = parseInt(fetchNext(args, ++index, args[originalIndex])); + boolean resizeSmaller = parseBoolean(fetchNext(args, ++index, args[originalIndex])); String directory = width + "x" + height; - options.addSize(new RecursiveOptions.SizeSpecification(width, height, directory)); + options.addSize(new SizeSpecification(width, height, directory, resizeSmaller)); return index - originalIndex; } }, @@ -95,10 +107,11 @@ @Override public int parse(String[] args, int index, RecursiveOptions options) throws CLIParserException { int originalIndex = index; - int width = parseInt(fetchNext(args, ++index)); - int height = parseInt(fetchNext(args, ++index)); - String directory = fetchNext(args, ++index); - options.addSize(new RecursiveOptions.SizeSpecification(width, height, directory)); + int width = parseInt(fetchNext(args, ++index, args[originalIndex])); + int height = parseInt(fetchNext(args, ++index, args[originalIndex])); + boolean resizeSmaller = parseBoolean(fetchNext(args, ++index, args[originalIndex])); + String directory = fetchNext(args, ++index, args[originalIndex]); + options.addSize(new SizeSpecification(width, height, directory, resizeSmaller)); return index - originalIndex; } }; @@ -125,6 +138,17 @@ } } + private static boolean parseBoolean(String value) throws CLIParserException { + switch (value) { + case "true": + return true; + case "false": + return false; + default: + throw new CLIParserException("Value „" + value + "“ is not a valid boolean. Expecting „true“ or „false“."); + } + } + /** * Parse String arguments and fill values into the options object. *