Moved CLI helper functionality to new dedicated project:
[svjatoslav_commons.git] / src / main / java / eu / svjatoslav / commons / commandline / parameterparser / Parameter.java
diff --git a/src/main/java/eu/svjatoslav/commons/commandline/parameterparser/Parameter.java b/src/main/java/eu/svjatoslav/commons/commandline/parameterparser/Parameter.java
deleted file mode 100755 (executable)
index c9023a4..0000000
+++ /dev/null
@@ -1,204 +0,0 @@
-/*
- * Svjatoslav Commons - shared library of common functionality. Author: Svjatoslav Agejenko.
- * This project is released under Creative Commons Zero (CC0) license.
- */
-package eu.svjatoslav.commons.commandline.parameterparser;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-public abstract class Parameter<T, I extends Parameter> {
-
-    /**
-     * Purpose of this argument, like: input image path, compression level, etc...
-     *
-     * Note: for describing argument type (file, integer, ...) there is {@link #describeFormat()}.
-     */
-    public final String description;
-
-    public final List<String> arguments = new ArrayList<>();
-    final ArgumentCount argumentCount;
-    private final List<String> aliases = new ArrayList<>();
-    /**
-     * Indicates that at least one argument is mandatory for this parameter.
-     */
-    protected boolean mandatory;
-    /**
-     * If this parameter was present in the commandline, then this boolean will
-     * be set to <code>true</code>.
-     */
-    private boolean specified;
-
-    public Parameter(final boolean mandatory,
-                     final ArgumentCount argumentCount, final String description,
-                     final String... aliases2) {
-
-        this.mandatory = mandatory;
-        this.description = description;
-        this.argumentCount = argumentCount;
-
-        // save aliases
-        Collections.addAll(aliases, aliases2);
-
-    }
-
-    public Parameter(final String description, final ArgumentCount argumentCount) {
-        this.description = description;
-        this.argumentCount = argumentCount;
-    }
-
-    @SuppressWarnings("unchecked")
-    public I addAliases(final String... aliasArray) {
-
-        // save aliases
-        Collections.addAll(aliases, aliasArray);
-
-        return (I) this;
-    }
-
-    /**
-     * @param argumentString argument to add
-     * @return <code>true</code> if no errors were found. <code>false</code>
-     * otherwise.
-     */
-    public boolean addArgument(final String argumentString) {
-        // check if arguments are allowed for this parameter
-        if (argumentCount.equals(ArgumentCount.NONE)) {
-            System.out
-                    .println("Error! No arguments are allowed for parameters: "
-                            + getAliases());
-            return false;
-        }
-
-        // check if multiple arguments are allowed
-        if ((arguments.size() > 0)
-                && (argumentCount.equals(ArgumentCount.SINGLE))) {
-            System.out
-                    .println("Error! Only single argument is allowed for parameters: "
-                            + getAliases());
-            return false;
-        }
-
-        if (!validate(argumentString)) {
-
-            System.out.println("Error! Invalid argument \"" + argumentString
-                    + "\". It shall be " + describeFormat() + ".");
-            return false;
-
-        }
-
-        arguments.add(argumentString);
-
-        return true;
-    }
-
-    /**
-     * @return Single line argument type description. If argument type should be file,
-     * date, integer, regular expression, etc..
-     *
-     * Note: for argument purpose description there is {@link #description}
-     */
-    public abstract String describeFormat();
-
-    public String getAliases() {
-        final StringBuilder buffer = new StringBuilder();
-
-        for (final String alias : aliases) {
-
-            if (buffer.length() > 0)
-                buffer.append(", ");
-
-            buffer.append(alias);
-        }
-
-        return buffer.toString();
-    }
-
-    public String getHelp() {
-        final StringBuilder buffer = new StringBuilder();
-
-        // first line
-        buffer.append(getAliases());
-        if (!argumentCount.equals(ArgumentCount.NONE)) {
-            buffer
-                    .append(" (")
-                    .append(isMandatory() ? "mandatory, " : "")
-                    .append(describeFormat())
-                    .append(")");
-
-            if (argumentCount.equals(ArgumentCount.MULTI))
-                buffer.append("...");
-        }
-        buffer.append("\n");
-
-        // second line
-        buffer.append("    " + description + "\n");
-
-        return buffer.toString();
-    }
-
-    public abstract T getValue();
-
-    public boolean isMandatory() {
-        return mandatory;
-    }
-
-    /**
-     * @return the parameterSpecified
-     */
-    public boolean isSpecified() {
-        return specified;
-    }
-
-    /**
-     * @param specified the parameterSpecified to set
-     */
-    protected void setSpecified(final boolean specified) {
-        this.specified = specified;
-    }
-
-    /**
-     * @param alias alias to check against
-     * @return <code>true</code> if given alias is registered for this
-     * parameter.
-     */
-    public boolean matchesAlias(final String alias) {
-        return aliases.contains(alias);
-
-    }
-
-    /**
-     * Notifies this parameter that no more arguments will follow. This gives
-     * parameter chance to verify if this is ok.
-     *
-     * @return <code>true</code> if no errors were found. <code>false</code>
-     * otherwise.
-     */
-    public boolean noMoreArguments() {
-
-        if ((!argumentCount.equals(ArgumentCount.NONE))
-                && (arguments.isEmpty())) {
-
-            System.out.println("Error! " + getAliases()
-                    + " require at least one following argument.");
-
-            return false;
-        }
-        return true;
-    }
-
-    @SuppressWarnings("unchecked")
-    public I setMandatory() {
-        mandatory = true;
-        return (I) this;
-    }
-
-    /**
-     * @param value value to validate
-     * @return <code>true</code> if value is correct, <code>false</code>
-     * otherwise.
-     */
-    public abstract boolean validate(String value);
-
-}