Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
76 changes: 17 additions & 59 deletions src/ArgsParser/ArgsParser.java
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ of this software and associated documentation files (the "Software"), to deal
* </ul>
* <li>After all parameters are added, the {@link #parseArgs()} method has to be called! (this is mandatory!)</li>
* <li>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)} </li>
* and type specific arguments can be accessed if a type i.e. Integer.Class was provided in {@link #addParameter(String, String, String, boolean)} </li>
* </ol>
* available at: <a href="https://github.com/AbUndMax/Java_ArgsParser">GitHub</a>
* @author Niklas Max G. 2024
Expand Down Expand Up @@ -113,72 +113,57 @@ 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;
}

/**
* 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;
}

/**
* 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;
}
Expand All @@ -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)
Expand All @@ -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;
Expand Down Expand Up @@ -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("### ");

Expand Down
115 changes: 21 additions & 94 deletions src/ArgsParser/Parameter.java
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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;
}

/**
Expand All @@ -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;
}

/**
Expand All @@ -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;
}

/**
Expand Down Expand Up @@ -300,7 +227,7 @@ protected void setArgument(String argument) throws InvalidArgTypeArgsException {
* @throws IllegalArgumentException if the type of defaultValue is unsupported
*/
protected <T> void setDefault(T defaultValue) {
this.argument = defaultValue.toString();
this.argument = this.defaultValue = defaultValue.toString();

switch (defaultValue) {
case String s -> argument = s;
Expand Down
Loading