X-Git-Url: http://www2.svjatoslav.eu/gitweb/?p=svjatoslav_commons.git;a=blobdiff_plain;f=src%2Fmain%2Fjava%2Feu%2Fsvjatoslav%2Fcommons%2Fcommandline%2Fparameterparser%2FParameter.java;h=004a48ad45148366d1a3b6ec3d745c6061bcbd5d;hp=1575fcf0471a169004158dc3aa651971a4bbdbcb;hb=ab4cc64cf105d4f03b8a0b94ab58d9b973820c8a;hpb=26f09b1ebcafae67855b55ad588d5332a107d202 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..004a48a 100755 --- a/src/main/java/eu/svjatoslav/commons/commandline/parameterparser/Parameter.java +++ b/src/main/java/eu/svjatoslav/commons/commandline/parameterparser/Parameter.java @@ -1,36 +1,30 @@ /* * 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; -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(); + final ArgumentCount argumentCount; /** * If this parameter was present in the commandline, then this boolean will @@ -38,29 +32,34 @@ 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 abstract Object addAliases(final String... aliasArray); + + protected Parameter addAliasesProtected(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,67 +116,41 @@ 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(); - - for (final String argument : arguments) { - final File file = new File(argument); - result.add(file); - } - - return result; - } - - public List getArgumentsAsIntegers() { - final ArrayList result = new ArrayList(); - - for (final String argument : arguments) { - result.add(Integer.valueOf(argument)); - } - - return result; - } - - public List getArgumentsAsStrings() { - final ArrayList result = new ArrayList(arguments); - return result; - } + // public List getArgumentsAsFiles() { + // final ArrayList result = new ArrayList(); + // + // for (final String argument : arguments) { + // final File file = new File(argument); + // result.add(file); + // } + // + // return result; + // } + // + // public List getArgumentsAsIntegers() { + // final ArrayList result = new ArrayList(); + // + // for (final String argument : arguments) + // result.add(Integer.valueOf(argument)); + // + // return result; + // } + // + // public List getArgumentsAsStrings() { + // final ArrayList result = new ArrayList(arguments); + // return result; + // } public String getHelp() { final StringBuffer buffer = new StringBuffer(); // 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"); @@ -181,6 +160,8 @@ public class Parameter { return buffer.toString(); } + public abstract Object getValue(); + public boolean isMandatory() { return mandatory; } @@ -206,13 +187,14 @@ public class Parameter { /** * Notifies this parameter that no more arguments will follow. This gives * parameter chance to verify if this is ok. - * + * * @return true if no errors were found. false * otherwise. */ 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 +204,13 @@ public class Parameter { return true; } + public abstract Parameter setMandatory(); + + protected Parameter setMandatoryProtected() { + mandatory = true; + return this; + } + /** * @param parameterSpecified * the parameterSpecified to set @@ -230,4 +219,10 @@ public class Parameter { this.parameterSpecified = parameterSpecified; } + /** + * @return true if value is correct, false + * otherwise. + */ + public abstract boolean validate(String value); + }