X-Git-Url: http://www2.svjatoslav.eu/gitweb/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Feu%2Fsvjatoslav%2Fcommons%2Fcommandline%2Fparameterparser%2FParameter.java;h=2e1c03ab06db5cf2020540c6cc74ae39946ba6dd;hb=b34ba4499cfbca09bc794a810e460bf1c86dcd34;hp=1575fcf0471a169004158dc3aa651971a4bbdbcb;hpb=26f09b1ebcafae67855b55ad588d5332a107d202;p=svjatoslav_commons.git diff --git a/src/main/java/eu/svjatoslav/commons/commandline/parameterparser/Parameter.java b/src/main/java/eu/svjatoslav/commons/commandline/parameterparser/Parameter.java index 1575fcf..2e1c03a 100755 --- a/src/main/java/eu/svjatoslav/commons/commandline/parameterparser/Parameter.java +++ b/src/main/java/eu/svjatoslav/commons/commandline/parameterparser/Parameter.java @@ -1,10 +1,10 @@ /* * Svjatoslav Commons - shared library of common functionality. - * Copyright (C) 2012, Svjatoslav Agejenko, svjatoslav@svjatoslav.eu + * Copyright ©2012-2014, Svjatoslav Agejenko, svjatoslav@svjatoslav.eu * * This program is free software; you can redistribute it and/or - * modify it under the terms of version 2 of the GNU General Public License - * as published by the Free Software Foundation. + * modify it under the terms of version 3 of the GNU Lesser General Public License + * or later as published by the Free Software Foundation. */ package eu.svjatoslav.commons.commandline.parameterparser; @@ -13,24 +13,20 @@ import java.io.File; import java.util.ArrayList; import java.util.List; -public class Parameter { +public abstract class Parameter { /** * Indicates that at least one argument is mandatory for this parameter. */ - private final boolean mandatory; + protected boolean mandatory; - private final boolean enableArguments; + private final ArrayList aliases = new ArrayList(); - private final boolean enableMultipleArguments; + public final String description; - private final Argument argumentType; + protected final ArrayList arguments = new ArrayList(); - private final ArrayList aliases; - - private final String description; - - private final ArrayList arguments = new ArrayList(); + ArgumentCount argumentCount; /** * If this parameter was present in the commandline, then this boolean will @@ -38,29 +34,32 @@ public class Parameter { */ private boolean parameterSpecified; - public Parameter(final boolean mandatory, final boolean enableArguments, - final boolean enableMultipleArguments, final Argument argumentType, - final String description, final String... aliases) { + public Parameter(final boolean mandatory, + final ArgumentCount argumentCount, final String description, + final String... aliases2) { this.mandatory = mandatory; - this.enableArguments = enableArguments; - this.enableMultipleArguments = enableMultipleArguments; - this.argumentType = argumentType; this.description = description; + this.argumentCount = argumentCount; // save aliases - { - final ArrayList aliasesList = new ArrayList(); - for (final String alias : aliases) { - aliasesList.add(alias); - } - this.aliases = aliasesList; - } + for (final String alias : aliases2) + aliases.add(alias); + + }; + public Parameter(final String description, final ArgumentCount argumentCount) { + this.description = description; + this.argumentCount = argumentCount; } - public Parameter(final String description, final String... aliases) { - this(false, false, false, null, description, aliases); + public Parameter addAliases(final String... aliasArray) { + + // save aliases + for (final String alias : aliasArray) + aliases.add(alias); + + return this; } /** @@ -69,7 +68,7 @@ public class Parameter { */ public boolean addArgument(final String argumentString) { // check if arguments are allowed for this parameter - if (!enableArguments) { + if (argumentCount.equals(ArgumentCount.NONE)) { System.out .println("Error! No arguments are allowed for parameters: " + getAliases()); @@ -77,17 +76,18 @@ public class Parameter { } // check if multiple arguments are allowed - if ((arguments.size() > 0) && (!enableMultipleArguments)) { + if ((arguments.size() > 0) + && (argumentCount.equals(ArgumentCount.SINGLE))) { System.out .println("Error! Only single argument is allowed for parameters: " + getAliases()); return false; } - if (!argumentType.validate(argumentString)) { + if (!validate(argumentString)) { System.out.println("Error! Invalid argument \"" + argumentString - + "\". It shall be " + argumentType.describeFormat() + "."); + + "\". It shall be " + describeFormat() + "."); return false; } @@ -97,6 +97,11 @@ public class Parameter { return true; } + /** + * @return Single line argument type description. + */ + public abstract String describeFormat(); + public String getAliases() { final StringBuffer buffer = new StringBuffer(); @@ -111,30 +116,6 @@ public class Parameter { return buffer.toString(); } - public File getArgumentAsFile() { - if (arguments.size() != 1) { - throw new RuntimeException("Parameter " + description - + " shall have exactly 1 argument."); - } - return new File(arguments.get(0)); - } - - public int getArgumentAsInteger() { - if (arguments.size() != 1) { - throw new RuntimeException("Parameter " + description - + " shall have exactly 1 argument."); - } - return Integer.parseInt(arguments.get(0)); - } - - public String getArgumentAsString() { - if (arguments.size() != 1) { - throw new RuntimeException("Parameter " + description - + " shall have exactly 1 argument."); - } - return arguments.get(0); - } - public List getArgumentsAsFiles() { final ArrayList result = new ArrayList(); @@ -149,9 +130,8 @@ public class Parameter { public List getArgumentsAsIntegers() { final ArrayList result = new ArrayList(); - for (final String argument : arguments) { + for (final String argument : arguments) result.add(Integer.valueOf(argument)); - } return result; } @@ -166,12 +146,11 @@ public class Parameter { // first line buffer.append(getAliases()); - if (enableArguments) { - buffer.append(" (" + argumentType.describeFormat() + ")"); + if (!argumentCount.equals(ArgumentCount.NONE)) { + buffer.append(" (" + describeFormat() + ")"); - if (enableMultipleArguments) { + if (argumentCount.equals(ArgumentCount.MULTI)) buffer.append("..."); - } } buffer.append("\n"); @@ -212,7 +191,8 @@ public class Parameter { */ public boolean noMoreArguments() { - if (enableArguments && (arguments.isEmpty())) { + if ((!argumentCount.equals(ArgumentCount.NONE)) + && (arguments.isEmpty())) { System.out.println("Error! " + getAliases() + " require at least one following argument."); @@ -222,6 +202,11 @@ public class Parameter { return true; } + public Parameter setMandatory() { + mandatory = true; + return this; + } + /** * @param parameterSpecified * the parameterSpecified to set @@ -230,4 +215,10 @@ public class Parameter { this.parameterSpecified = parameterSpecified; } + /** + * @return true if value is correct, false + * otherwise. + */ + public abstract boolean validate(String value); + }