improved javadoc
[svjatoslav_commons.git] / src / main / java / eu / svjatoslav / commons / commandline / parameterparser / Parameter.java
index 58282c5..25f406d 100755 (executable)
@@ -1,19 +1,17 @@
 /*
  * Svjatoslav Commons - shared library of common functionality.
- * Copyright ©2012-2013, 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 abstract class Parameter {
+public abstract class Parameter<T> {
 
        /**
         * Indicates that at least one argument is mandatory for this parameter.
@@ -24,9 +22,9 @@ public abstract class Parameter {
 
        public final String description;
 
-       protected final ArrayList<String> arguments = new ArrayList<String>();
+       public final ArrayList<String> arguments = new ArrayList<String>();
 
-       ArgumentCount argumentCount;
+       final ArgumentCount argumentCount;
 
        /**
         * If this parameter was present in the commandline, then this boolean will
@@ -34,11 +32,6 @@ public abstract class Parameter {
         */
        private boolean parameterSpecified;
 
-       public Parameter(final String description, final ArgumentCount argumentCount) {
-               this.description = description;
-               this.argumentCount = argumentCount;
-       };
-
        public Parameter(final boolean mandatory,
                        final ArgumentCount argumentCount, final String description,
                        final String... aliases2) {
@@ -51,18 +44,26 @@ public abstract class Parameter {
                for (final String alias : aliases2)
                        aliases.add(alias);
 
+       };
+
+       public Parameter(final String description, final ArgumentCount argumentCount) {
+               this.description = description;
+               this.argumentCount = argumentCount;
        }
 
-       public Parameter addAliases(final String... aliasArray) {
+       @SuppressWarnings("unchecked")
+       public T addAliases(final String... aliasArray) {
 
                // save aliases
                for (final String alias : aliasArray)
                        aliases.add(alias);
 
-               return this;
+               return (T) this;
        }
 
        /**
+        * @param argumentString
+        *            argument to add
         * @return <code>true</code> if no errors were found. <code>false</code>
         *         otherwise.
         */
@@ -97,6 +98,11 @@ public abstract class Parameter {
                return true;
        }
 
+       /**
+        * @return Single line argument type description.
+        */
+       public abstract String describeFormat();
+
        public String getAliases() {
                final StringBuffer buffer = new StringBuffer();
 
@@ -111,31 +117,6 @@ public abstract class Parameter {
                return buffer.toString();
        }
 
-       public List<File> getArgumentsAsFiles() {
-               final ArrayList<File> result = new ArrayList<File>();
-
-               for (final String argument : arguments) {
-                       final File file = new File(argument);
-                       result.add(file);
-               }
-
-               return result;
-       }
-
-       public List<Integer> getArgumentsAsIntegers() {
-               final ArrayList<Integer> result = new ArrayList<Integer>();
-
-               for (final String argument : arguments)
-                       result.add(Integer.valueOf(argument));
-
-               return result;
-       }
-
-       public List<String> getArgumentsAsStrings() {
-               final ArrayList<String> result = new ArrayList<String>(arguments);
-               return result;
-       }
-
        public String getHelp() {
                final StringBuffer buffer = new StringBuffer();
 
@@ -155,6 +136,8 @@ public abstract class Parameter {
                return buffer.toString();
        }
 
+       public abstract Object getValue();
+
        public boolean isMandatory() {
                return mandatory;
        }
@@ -167,6 +150,8 @@ public abstract class Parameter {
        }
 
        /**
+        * @param alias
+        *            alias to check against
         * @return <code>true</code> if given alias is registered for this
         *         parameter.
         */
@@ -180,7 +165,7 @@ public abstract class Parameter {
        /**
         * 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.
         */
@@ -197,9 +182,10 @@ public abstract class Parameter {
                return true;
        }
 
-       public Parameter setMandatory() {
+       @SuppressWarnings("unchecked")
+       public T setMandatory() {
                mandatory = true;
-               return this;
+               return (T) this;
        }
 
        /**
@@ -211,11 +197,8 @@ public abstract class Parameter {
        }
 
        /**
-        * @return Single line argument type description.
-        */
-       public abstract String describeFormat();
-
-       /**
+        * @param value
+        *            value to validate
         * @return <code>true</code> if value is correct, <code>false</code>
         *         otherwise.
         */