Changed license to LGPLv3 or later.
[svjatoslav_commons.git] / src / main / java / eu / svjatoslav / commons / commandline / parameterparser / Parameter.java
index 831806d..2e1c03a 100755 (executable)
@@ -1,10 +1,10 @@
 /*
  * 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;
@@ -13,14 +13,12 @@ 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 boolean mandatory;
-
-       private final Argument argumentType;
+       protected boolean mandatory;
 
        private final ArrayList<String> aliases = new ArrayList<String>();
 
@@ -36,20 +34,11 @@ public class Parameter {
         */
        private boolean parameterSpecified;
 
-       public Parameter(final Argument argumentType, final String description,
-                       final ArgumentCount argumentCount) {
-
-               this.description = description;
-               this.argumentType = argumentType;
-               this.argumentCount = argumentCount;
-       };
-
        public Parameter(final boolean mandatory,
-                       final ArgumentCount argumentCount, final Argument argumentType,
-                       final String description, final String... aliases2) {
+                       final ArgumentCount argumentCount, final String description,
+                       final String... aliases2) {
 
                this.mandatory = mandatory;
-               this.argumentType = argumentType;
                this.description = description;
                this.argumentCount = argumentCount;
 
@@ -57,6 +46,11 @@ public 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) {
@@ -90,10 +84,10 @@ public class Parameter {
                        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;
 
                }
@@ -103,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();
 
@@ -117,20 +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 List<File> getArgumentsAsFiles() {
                final ArrayList<File> result = new ArrayList<File>();
 
@@ -162,7 +147,7 @@ public class Parameter {
                // first line
                buffer.append(getAliases());
                if (!argumentCount.equals(ArgumentCount.NONE)) {
-                       buffer.append(" (" + argumentType.describeFormat() + ")");
+                       buffer.append(" (" + describeFormat() + ")");
 
                        if (argumentCount.equals(ArgumentCount.MULTI))
                                buffer.append("...");
@@ -230,4 +215,10 @@ public class Parameter {
                this.parameterSpecified = parameterSpecified;
        }
 
+       /**
+        * @return <code>true</code> if value is correct, <code>false</code>
+        *         otherwise.
+        */
+       public abstract boolean validate(String value);
+
 }