Added FileParameters type.
[svjatoslav_commons.git] / src / main / java / eu / svjatoslav / commons / commandline / parameterparser / Parameter.java
index 8141339..8208583 100755 (executable)
@@ -1,6 +1,6 @@
 /*
  * Svjatoslav Commons - shared library of common functionality.
- * Copyright ©2012-2014, Svjatoslav Agejenko, svjatoslav@svjatoslav.eu
+ * Copyright ©2012-2017, Svjatoslav Agejenko, svjatoslav@svjatoslav.eu
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of version 3 of the GNU Lesser General Public License
@@ -11,13 +11,14 @@ package eu.svjatoslav.commons.commandline.parameterparser;
 
 import java.util.ArrayList;
 import java.util.Collections;
+import java.util.List;
 
-public abstract class Parameter<T> {
+public abstract class Parameter<T, I extends Parameter> {
 
     public final String description;
-    public final ArrayList<String> arguments = new ArrayList<>();
+    public final List<String> arguments = new ArrayList<>();
     final ArgumentCount argumentCount;
-    private final ArrayList<String> aliases = new ArrayList<>();
+    private final List<String> aliases = new ArrayList<>();
     /**
      * Indicates that at least one argument is mandatory for this parameter.
      */
@@ -26,7 +27,7 @@ public abstract class Parameter<T> {
      * If this parameter was present in the commandline, then this boolean will
      * be set to <code>true</code>.
      */
-    private boolean parameterSpecified;
+    private boolean specified;
 
     public Parameter(final boolean mandatory,
                      final ArgumentCount argumentCount, final String description,
@@ -47,12 +48,12 @@ public abstract class Parameter<T> {
     }
 
     @SuppressWarnings("unchecked")
-    public T addAliases(final String... aliasArray) {
+    public I addAliases(final String... aliasArray) {
 
         // save aliases
         Collections.addAll(aliases, aliasArray);
 
-        return (T) this;
+        return (I) this;
     }
 
     /**
@@ -116,7 +117,11 @@ public abstract class Parameter<T> {
         // first line
         buffer.append(getAliases());
         if (!argumentCount.equals(ArgumentCount.NONE)) {
-            buffer.append(" (" + describeFormat() + ")");
+            buffer
+                    .append(" (")
+                    .append(isMandatory() ? "mandatory, " : "")
+                    .append(describeFormat())
+                    .append(")");
 
             if (argumentCount.equals(ArgumentCount.MULTI))
                 buffer.append("...");
@@ -129,7 +134,7 @@ public abstract class Parameter<T> {
         return buffer.toString();
     }
 
-    public abstract Object getValue();
+    public abstract T getValue();
 
     public boolean isMandatory() {
         return mandatory;
@@ -138,15 +143,15 @@ public abstract class Parameter<T> {
     /**
      * @return the parameterSpecified
      */
-    public boolean isParameterSpecified() {
-        return parameterSpecified;
+    public boolean isSpecified() {
+        return specified;
     }
 
     /**
-     * @param parameterSpecified the parameterSpecified to set
+     * @param specified the parameterSpecified to set
      */
-    public void setParameterSpecified(final boolean parameterSpecified) {
-        this.parameterSpecified = parameterSpecified;
+    protected void setSpecified(final boolean specified) {
+        this.specified = specified;
     }
 
     /**
@@ -180,9 +185,9 @@ public abstract class Parameter<T> {
     }
 
     @SuppressWarnings("unchecked")
-    public T setMandatory() {
+    public I setMandatory() {
         mandatory = true;
-        return (T) this;
+        return (I) this;
     }
 
     /**