diff --git a/src/ArgsParser/ArgsParser.java b/src/ArgsParser/ArgsParser.java index a73dbd3..82503fa 100644 --- a/src/ArgsParser/ArgsParser.java +++ b/src/ArgsParser/ArgsParser.java @@ -50,7 +50,7 @@ of this software and associated documentation files (the "Software"), to deal * *
  • After all parameters are added, the {@link #parseArgs()} method has to be called! (this is mandatory!)
  • *
  • Then the arguments can be accessed by using {@link Parameter#getArgument()} on the specific Parameter variable - * and type specific arguments can be accessed if a type i.e. Integer.Class was provided in {@link #addParameter(String, Class, boolean)}
  • + * and type specific arguments can be accessed if a type i.e. Integer.Class was provided in {@link #addParameter(String, String, String, boolean)} * * available at: GitHub * @author Niklas Max G. 2024 @@ -113,29 +113,17 @@ private String makeFlag(String flagName, boolean isShortName) { } } - // Simple Constructors - - /** - * Adds a new parameter that will be checked in args and assigned to the Parameter instance - * @param flagName name of the parameter (-- will automatically be added) - * @param isMandatory true if parameter is mandatory, false if optional - * @return the created Parameter instance - */ - public Parameter addParameter(String flagName, boolean isMandatory) { - Parameter parameter = new Parameter(makeFlag(flagName, false), isMandatory, this); - prepareParameter(parameter); - return parameter; - } /** * Adds a new parameter that will be checked in args and assigned to the Parameter instance * @param flagName name of the parameter (-- will automatically be added) * @param shortName short version of the parameter (- will automatically be added) * @param isMandatory true if parameter is mandatory, false if optional + * @param type type of the parameter (Class.Integer, Class.Double, Class.Boolean, Class.Character) * @return the created Parameter instance */ - public Parameter addParameter(String flagName, String shortName, boolean isMandatory) { - Parameter parameter = new Parameter(makeFlag(flagName, false), makeFlag(shortName, true), isMandatory, this); + public Parameter addParameter(String flagName, String shortName, boolean isMandatory, Class type) { + Parameter parameter = new Parameter(makeFlag(flagName, false), makeFlag(shortName, true), "", type, isMandatory, this); prepareParameter(parameter); return parameter; } @@ -143,29 +131,25 @@ public Parameter addParameter(String flagName, String shortName, boolean isManda /** * Adds a new parameter that will be checked in args and assigned to the Parameter instance * @param flagName name of the parameter (-- will automatically be added) + * @param defaultValue default value of the parameter - by usage sets the parameter to optional * @param shortName short version of the parameter (- will automatically be added) - * @param description description of the parameter - * @param isMandatory true if parameter is mandatory, false if optional * @return the created Parameter instance */ - public Parameter addParameter(String flagName, String shortName, String description, boolean isMandatory) { - Parameter parameter = new Parameter(makeFlag(flagName, false), makeFlag(shortName, true), description, isMandatory, this); + public Parameter addParameter(String flagName, String shortName, Object defaultValue) { + Parameter parameter = new Parameter(makeFlag(flagName, false), defaultValue, makeFlag(shortName, true), "", this); prepareParameter(parameter); return parameter; } - // Constructors with type definition - /** * Adds a new parameter that will be checked in args and assigned to the Parameter instance * @param flagName name of the parameter (-- will automatically be added) * @param shortName short version of the parameter (- will automatically be added) - * @param type type of the parameter (Class.Integer, Class.Double, Class.Boolean, Class.Character) * @param isMandatory true if parameter is mandatory, false if optional * @return the created Parameter instance */ - public Parameter addParameter(String flagName, String shortName, Class type, boolean isMandatory) { - Parameter parameter = new Parameter(makeFlag(flagName, false), makeFlag(shortName, true), type, isMandatory, this); + public Parameter addParameter(String flagName, String shortName, boolean isMandatory) { + Parameter parameter = new Parameter(makeFlag(flagName, false), makeFlag(shortName, true), "", isMandatory, this); prepareParameter(parameter); return parameter; } @@ -173,12 +157,13 @@ public Parameter addParameter(String flagName, String shortName, Class type, /** * Adds a new parameter that will be checked in args and assigned to the Parameter instance * @param flagName name of the parameter (-- will automatically be added) - * @param type type of the parameter (Class.Integer, Class.Double, Class.Boolean, Class.Character) + * @param shortName short version of the parameter (- will automatically be added) + * @param description description of the parameter * @param isMandatory true if parameter is mandatory, false if optional * @return the created Parameter instance */ - public Parameter addParameter(String flagName, Class type, boolean isMandatory) { - Parameter parameter = new Parameter(makeFlag(flagName, false), type, isMandatory, this); + public Parameter addParameter(String flagName, String shortName, String description, boolean isMandatory) { + Parameter parameter = new Parameter(makeFlag(flagName, false), makeFlag(shortName, true), description, isMandatory, this); prepareParameter(parameter); return parameter; } @@ -188,43 +173,16 @@ public Parameter addParameter(String flagName, Class type, boolean isMandator * @param flagName name of the parameter (-- will automatically be added) * @param shortName short version of the parameter (- will automatically be added) * @param description description of the parameter - * @param type type of the parameter (Class.Integer, Class.Double, Class.Boolean, Class.Character) * @param isMandatory true if parameter is mandatory, false if optional + * @param type type of the parameter (Class.Integer, Class.Double, Class.Boolean, Class.Character) * @return the created Parameter instance */ - public Parameter addParameter(String flagName, String shortName, String description, Class type, boolean isMandatory) { + public Parameter addParameter(String flagName, String shortName, String description, boolean isMandatory, Class type) { Parameter parameter = new Parameter(makeFlag(flagName, false), makeFlag(shortName, true), description, type, isMandatory, this); prepareParameter(parameter); return parameter; } - // Constructors with default value - - /** - * Adds a new parameter that will be checked in args and assigned to the Parameter instance - * @param flagName name of the parameter (-- will automatically be added) - * @param defaultValue default value of the parameter - by usage sets the parameter to optional - * @return the created Parameter instance - */ - public Parameter addParameter(String flagName, Object defaultValue) { - Parameter parameter = new Parameter(makeFlag(flagName, false), defaultValue, this); - prepareParameter(parameter); - return parameter; - } - - /** - * Adds a new parameter that will be checked in args and assigned to the Parameter instance - * @param flagName name of the parameter (-- will automatically be added) - * @param defaultValue default value of the parameter - by usage sets the parameter to optional - * @param shortName short version of the parameter (- will automatically be added) - * @return the created Parameter instance - */ - public Parameter addParameter(String flagName, Object defaultValue, String shortName) { - Parameter parameter = new Parameter(makeFlag(flagName, false), defaultValue, makeFlag(shortName, true), this); - prepareParameter(parameter); - return parameter; - } - /** * Adds a new parameter that will be checked in args and assigned to the Parameter instance * @param flagName name of the parameter (-- will automatically be added) @@ -233,7 +191,7 @@ public Parameter addParameter(String flagName, Object defaultValue, String short * @param description description of the parameter * @return the created Parameter instance */ - public Parameter addParameter(String flagName, Object defaultValue, String shortName, String description) { + public Parameter addParameter(String flagName, String shortName, String description, Object defaultValue) { Parameter parameter = new Parameter(makeFlag(flagName, false), defaultValue, makeFlag(shortName, true), description, this); prepareParameter(parameter); return parameter; @@ -425,7 +383,7 @@ private String parameterHelpString(Parameter parameter) { String name = parameter.getFlagName(); String shortName = parameter.getShortName() == null ? "/" : parameter.getShortName(); - String description = parameter.getDescription() == null ? "No description provided!" : parameter.getDescription(); + String description = parameter.getDescription().trim().isEmpty() ? "No description available!" : parameter.getDescription(); String isMandatory = parameter.isMandatory() ? "(!)" : "(+)"; StringBuilder helpString = new StringBuilder("### "); diff --git a/src/ArgsParser/Parameter.java b/src/ArgsParser/Parameter.java index 59c6d76..8d95292 100644 --- a/src/ArgsParser/Parameter.java +++ b/src/ArgsParser/Parameter.java @@ -34,47 +34,20 @@ of this software and associated documentation files (the "Software"), to deal */ public class Parameter { private final String flagName; + private final String shortName; + private final String description; private final boolean isMandatory; private final ArgsParser parser; - private Class type; + private final Class type; private boolean typeWasSet = false; private boolean hasArgument = false; private String defaultValue = null; - private String shortName = null; - private String description = null; private String argument = null; private Integer argumentAsInteger = null; private Double argumentAsDouble = null; private Boolean argumentAsBoolean = null; private Character argumentAsChar = null; - // Simple Constructors - - /** - * Constructor for the Parameter class - * @param flagName name of the parameter - * @param isMandatory true if the parameter is mandatory, false otherwise - * @param parserInstance instance of the ArgsParser class - */ - protected Parameter(String flagName, boolean isMandatory, ArgsParser parserInstance) { - this.flagName = flagName; - this.isMandatory = isMandatory; - this.parser = parserInstance; - this.type = String.class; - } - - /** - * Constructor for the Parameter class - * @param flagName name of the parameter - * @param shortName short name of the parameter - * @param isMandatory true if the parameter is mandatory, false otherwise - * @param parserInstance instance of the ArgsParser class - */ - protected Parameter(String flagName, String shortName, boolean isMandatory, ArgsParser parserInstance) { - this(flagName, isMandatory, parserInstance); - this.shortName = shortName; - } - /** * Constructor for the Parameter class * @param flagName name of the parameter @@ -84,36 +57,12 @@ protected Parameter(String flagName, String shortName, boolean isMandatory, Args * @param parserInstance instance of the ArgsParser class */ protected Parameter(String flagName, String shortName, String description, boolean isMandatory, ArgsParser parserInstance) { - this(flagName, shortName, isMandatory, parserInstance); - this.description = description; - } - - // Constructors with type definition - - /** - * Constructor for the Parameter class with type definition - * @param flagName name of the parameter - * @param type type of the parameter - * @param isMandatory true if the parameter is mandatory, false otherwise - * @param parserInstance instance of the ArgsParser class - */ - protected Parameter(String flagName, Class type, boolean isMandatory, ArgsParser parserInstance) { - this(flagName, isMandatory, parserInstance); - this.type = type; - this.typeWasSet = true; - } - - /** - * Constructor for the Parameter class with type definition - * @param flagName name of the parameter - * @param shortName short name of the parameter - * @param type type of the parameter - * @param isMandatory true if the parameter is mandatory, false otherwise - * @param parserInstance instance of the ArgsParser class - */ - protected Parameter(String flagName, String shortName, Class type, boolean isMandatory, ArgsParser parserInstance) { - this(flagName, type, isMandatory, parserInstance); + this.flagName = flagName; this.shortName = shortName; + this.description = description; + this.parser = parserInstance; + this.isMandatory = isMandatory; + this.type = String.class; } /** @@ -126,41 +75,13 @@ protected Parameter(String flagName, String shortName, Class type, boolean is * @param parserInstance instance of the ArgsParser class */ protected Parameter(String flagName, String shortName, String description, Class type, boolean isMandatory, ArgsParser parserInstance) { - this(flagName, shortName, type, isMandatory, parserInstance); - this.description = description; - } - - // Constructors with default value - // (they automatically set the type of the parameter based on the type of the provided default value) - - /** - * Constructor for the Parameter class with default value - * (sets type of Parameter based on the type of the default value) - * @param flagName name of the parameter - * @param defaultValue default value of the parameter - * @param parserInstance instance of the ArgsParser class - */ - protected Parameter(String flagName, Object defaultValue, ArgsParser parserInstance) { this.flagName = flagName; - this.isMandatory = false; - this.parser = parserInstance; - this.defaultValue = defaultValue.toString(); - setDefault(defaultValue); - type = defaultValue.getClass(); - typeWasSet = true; - } - - /** - * Constructor for the Parameter class with default value - * (sets type of Parameter based on the type of the default value) - * @param flagName name of the parameter - * @param shortName short name of the parameter - * @param defaultValue default value of the parameter - * @param parserInstance instance of the ArgsParser class - */ - protected Parameter(String flagName, Object defaultValue, String shortName, ArgsParser parserInstance) { - this(flagName, defaultValue, parserInstance); this.shortName = shortName; + this.description = description; + this.parser = parserInstance; + this.isMandatory = isMandatory; + this.type = type; + this.typeWasSet = true; } /** @@ -173,8 +94,14 @@ protected Parameter(String flagName, Object defaultValue, String shortName, Args * @param parserInstance instance of the ArgsParser class */ protected Parameter(String flagName, Object defaultValue, String shortName, String description, ArgsParser parserInstance) { - this(flagName, defaultValue, shortName, parserInstance); + this.flagName = flagName; + this.shortName = shortName; this.description = description; + this.parser = parserInstance; + this.isMandatory = false; + setDefault(defaultValue); + type = defaultValue.getClass(); + typeWasSet = true; } /** @@ -300,7 +227,7 @@ protected void setArgument(String argument) throws InvalidArgTypeArgsException { * @throws IllegalArgumentException if the type of defaultValue is unsupported */ protected void setDefault(T defaultValue) { - this.argument = defaultValue.toString(); + this.argument = this.defaultValue = defaultValue.toString(); switch (defaultValue) { case String s -> argument = s; diff --git a/src/test/TestArgsParser.java b/src/test/TestArgsParser.java index a8cbaf3..c945cac 100644 --- a/src/test/TestArgsParser.java +++ b/src/test/TestArgsParser.java @@ -11,7 +11,7 @@ public class TestArgsParser { @Test public void noArgumentsProvided() { ArgsParser parser = new ArgsParser(new String[] {}); - Parameter file = parser.addParameter("-f", true); + Parameter file = parser.addParameter("file", "f", " ",true); try { parser.parseArgs(); } catch (ArgsException e) { @@ -23,7 +23,7 @@ public void noArgumentsProvided() { @Test public void testGetArgument() { ArgsParser parser = new ArgsParser(new String[] {"--file", "file.txt"}); - Parameter file = parser.addParameter("file", true); + Parameter file = parser.addParameter("file", "f", " ", true); try { parser.parseArgs(); } catch (Exception e) { @@ -39,8 +39,8 @@ public void testGetArgument() { @Test public void testUnknownParameter() { ArgsParser parser = new ArgsParser(new String[] {"-f", "file.txt", "-s", "save.txt"}); - Parameter file = parser.addParameter("-file", true); - Parameter save = parser.addParameter("--save", true); + Parameter file = parser.addParameter("file", "f", "descr", true); + Parameter save = parser.addParameter("save", "s", "descr", true); try { parser.parseArgs(); } catch (Exception e) { @@ -51,8 +51,8 @@ public void testUnknownParameter() { @Test public void testGetArgumentWithMultipleFlagsAndWrongInput() { ArgsParser parser = new ArgsParser(new String[] {"-f", "file.txt", "--save", "save.txt", "-s"}); - Parameter file = parser.addParameter("file", "f", true); - Parameter save = parser.addParameter("save", true); + Parameter file = parser.addParameter("file", "f", "descr", true); + Parameter save = parser.addParameter("save", "w", "descr", true); try { parser.parseArgs(); } catch (Exception e) { @@ -66,8 +66,8 @@ public void testGetArgumentWithMultipleFlagsAndWrongInput() { @Test public void testMissingArgument() { ArgsParser parser = new ArgsParser(new String[] {"--file", "--save", "save.txt"}); - Parameter file = parser.addParameter("file", true); - Parameter save = parser.addParameter("save", true); + Parameter file = parser.addParameter("file", "m", "descr", true); + Parameter save = parser.addParameter("save", "s", "descr", true); try { parser.parseArgs(); } catch (Exception e) { @@ -79,8 +79,8 @@ public void testMissingArgument() { @Test public void testMissingLastArgument() { ArgsParser parser = new ArgsParser(new String[]{"--file", "file.txt", "--save"}); - Parameter file = parser.addParameter("file", true); - Parameter save = parser.addParameter("--save", true); + Parameter file = parser.addParameter("--file", "f", "descr", true); + Parameter save = parser.addParameter("--save", "s", "descr", true); try { parser.parseArgs(); } catch (Exception e) { @@ -92,8 +92,8 @@ public void testMissingLastArgument() { @Test public void testMissingShorts() { ArgsParser parser = new ArgsParser(new String[]{"-f", "/to/file", "--save", "save.txt"}); - Parameter file = parser.addParameter("--file", true); - Parameter save = parser.addParameter("--save", true); + Parameter file = parser.addParameter("--file", "m", "descr", true); + Parameter save = parser.addParameter("--save", "s", true); try { parser.parseArgs(); } catch (Exception e) { @@ -105,9 +105,9 @@ public void testMissingShorts() { @Test public void testMandatoryArgMissing() { ArgsParser parser = new ArgsParser(new String[]{"--file", "file.txt", "--optional", "optional.txt"}); - Parameter file = parser.addParameter("file", true); - Parameter save = parser.addParameter("save", true); - Parameter optional = parser.addParameter("optional", false); + Parameter file = parser.addParameter("file", "f", "descr", true); + Parameter save = parser.addParameter("save", "s", "descr", true); + Parameter optional = parser.addParameter("optional", "o", "descr", false); try { parser.parseArgs(); } catch (ArgsException e) { @@ -118,8 +118,8 @@ public void testMandatoryArgMissing() { @Test public void testTooManyArguments() { ArgsParser parser = new ArgsParser(new String[]{"--file", "file.txt", "--save", "save.txt", "extra"}); - Parameter file = parser.addParameter("file", true); - Parameter save = parser.addParameter("save", true); + Parameter file = parser.addParameter("file", "f", "descr", true); + Parameter save = parser.addParameter("save", "s", "descr", true); try { parser.parseArgs(); } catch (ArgsException e) { @@ -130,8 +130,8 @@ public void testTooManyArguments() { @Test public void testGetArgumentAsString() { ArgsParser parser = new ArgsParser(new String[] {"--file", "file.txt", "-int", "5"}); - Parameter file = parser.addParameter("file", true); - Parameter integer = parser.addParameter("integer", "int", true); + Parameter file = parser.addParameter("file", "f", true); + Parameter integer = parser.addParameter("integer", "int", "descr", true); try { parser.parseArgs(); } catch (Exception e) { @@ -145,8 +145,8 @@ public void testGetArgumentAsString() { @Test public void testGetArgumentWithGenericType() { ArgsParser parser = new ArgsParser(new String[] {"--file", "file.txt", "--integer", "5"}); - Parameter file = parser.addParameter("file", true); - Parameter integer = parser.addParameter("integer", Integer.class , true); + Parameter file = parser.addParameter("file", "f", "descr", true); + Parameter integer = parser.addParameter("integer", "int", "descr", true, Integer.class); try { parser.parseArgs(); } catch (Exception e) { @@ -161,8 +161,8 @@ public void testGetArgumentWithGenericType() { @Test public void testBooleanGetArgument() { ArgsParser parser = new ArgsParser(new String[] {"--file", "file.txt", "--boolean", "true"}); - Parameter file = parser.addParameter("file", true); - Parameter bool = parser.addParameter("boolean", Boolean.class , true); + Parameter file = parser.addParameter("file", "f", "descr", true); + Parameter bool = parser.addParameter("boolean", "b", "descr", true, Boolean.class); try { parser.parseArgs(); } catch (Exception e) { @@ -175,8 +175,8 @@ public void testBooleanGetArgument() { @Test public void testGetArgumentAsDouble() { ArgsParser parser = new ArgsParser(new String[] {"--file", "file.txt", "--double", "5.5"}); - Parameter file = parser.addParameter("file", true); - Parameter doub = parser.addParameter("double", Double.class , true); + Parameter file = parser.addParameter("file", "f", "descr", true); + Parameter doub = parser.addParameter("double", "d", "descr", true, Double.class); try { parser.parseArgs(); } catch (Exception e) { @@ -192,8 +192,8 @@ public void testGetArgumentAsDouble() { @Test public void testGetArgumentAsDoubleWithWrongInput() { ArgsParser parser = new ArgsParser(new String[] {"--file", "file.txt", "--double", "5.5.5"}); - Parameter file = parser.addParameter("file", true); - Parameter doub = parser.addParameter("double", Double.class , true); + Parameter file = parser.addParameter("file", "f", "descr", true); + Parameter doub = parser.addParameter("double", "d", "descr", true, Double.class); try { parser.parseArgs(); } catch (Exception e) { @@ -204,8 +204,8 @@ public void testGetArgumentAsDoubleWithWrongInput() { @Test public void useDefaultValue() { ArgsParser parser = new ArgsParser(new String[] {"--file", "file.txt"}); - Parameter file = parser.addParameter("file", true); - Parameter doub = parser.addParameter("double", 12.3); + Parameter file = parser.addParameter("file", "f", "descr", true); + Parameter doub = parser.addParameter("double", "d", "descr", 12.3); try { parser.parseArgs(); } catch (Exception e) { @@ -219,8 +219,8 @@ public void useDefaultValue() { @Test public void useDefaultValueCast() { ArgsParser parser = new ArgsParser(new String[] {"--file", "file.txt"}); - Parameter file = parser.addParameter("file", true); - Parameter doub = parser.addParameter("double", 12.3); + Parameter file = parser.addParameter("file", "f", "descr", true); + Parameter doub = parser.addParameter("double", "d", "descr", 12.3); try { parser.parseArgs(); } catch (Exception e) { @@ -235,8 +235,8 @@ public void useDefaultValueCast() { @Test public void testStringDefault() { ArgsParser parser = new ArgsParser(new String[] {"--file", "file.txt"}); - Parameter file = parser.addParameter("file", "default"); - Parameter doub = parser.addParameter("double", 12.3); + Parameter file = parser.addParameter("file", "f", "descr", "default"); + Parameter doub = parser.addParameter("double", "d", 12.5); try { parser.parseArgs(); } catch (Exception e) { @@ -251,8 +251,8 @@ public void testStringDefault() { @Test public void testHelp() { ArgsParser parser = new ArgsParser(new String[] {"--help"}); - Parameter file = parser.addParameter("file", "/home/user/projects/one/two/my_project/source/main/java/com/example/myapp/ExampleClassThatWonTDoAnythingElseThanBeeingAnExample.java"); - Parameter doub = parser.addParameter("double", 12.3); + Parameter file = parser.addParameter("file", "f", "descri", "/home/user/projects/one/two/my_project/source/main/java/com/example/myapp/ExampleClassThatWonTDoAnythingElseThanBeeingAnExample.java"); + Parameter doub = parser.addParameter("double", "d", "des", 12.3); try { parser.parseArgs(); } catch (CalledForHelpNotification e) { @@ -264,10 +264,10 @@ public void testHelp() { @Test public void testLargerHelp() { ArgsParser parser = new ArgsParser(new String[] {"--help"}); - Parameter file = parser.addParameter("file", "/home/user/projects/one/two/my_project/source/main/java/com/example/myapp/ExampleClassThatWonTDoAnythingElseThanBeeingAnExample.java", "f", "aasdijasoidjoai sjdoiajsd oijaosidja oijsdoaijsd oijaojovn eoin oilnsdo vöinasdv"); - Parameter doub = parser.addParameter("double", 12.3); - Parameter bool = parser.addParameter("boolean", true); - Parameter integer = parser.addParameter("integer", 5); + Parameter file = parser.addParameter("file", "s", "aasdijasoidjoai sjdoiajsd oijaosidja oijsdoaijsd oijaojovn eoin oilnsdo vöinasdv", "/home/user/projects/one/two/my_project/source/main/java/com/example/myapp/ExampleClassThatWonTDoAnythingElseThanBeeingAnExample.java"); + Parameter doub = parser.addParameter("double", "d", 12.3); + Parameter bool = parser.addParameter("boolean", "b", "des", true); + Parameter integer = parser.addParameter("integer", "i", "des", 5); try { parser.parseArgs(); } catch (CalledForHelpNotification e) {