Merge branch 'develop' into features/mchmmer
[jalview.git] / src / jalview / ws / params / simple / Option.java
index 22f4d2a..ce5d669 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.2b1)
- * Copyright (C) 2014 The Jalview Authors
+ * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
+ * Copyright (C) $$Year-Rel$$ The Jalview Authors
  * 
  * This file is part of Jalview.
  * 
@@ -24,20 +24,125 @@ import jalview.ws.params.OptionI;
 
 import java.net.URL;
 import java.util.ArrayList;
-import java.util.Collection;
 import java.util.List;
 
 public class Option implements OptionI
 {
+  String name;
 
-  String name, value, defvalue, description;
+  /*
+   * current value in string format, or "null" if undefined
+   */
+  String value;
 
-  ArrayList<String> possibleVals = new ArrayList<String>();
+  /*
+   * default value in string format, or "null" if undefined
+   */
+  String defvalue;
+
+  String description;
+
+  List<String> possibleVals;
+
+  /*
+   * optional display names corresponding to possibleVals
+   */
+  List<String> displayVals;
 
   boolean required;
 
   URL fdetails;
 
+  /**
+   * Copy constructor
+   * 
+   * @param opt
+   */
+  public Option(Option opt)
+  {
+    name = opt.name;
+    value = opt.value;
+    defvalue = opt.defvalue;
+    description = opt.description;
+    if (opt.possibleVals != null)
+    {
+      possibleVals = new ArrayList<>(opt.possibleVals);
+    }
+    required = opt.required;
+    // URLs are singletons - so we copy by reference. nasty but true.
+    fdetails = opt.fdetails;
+  }
+
+  public Option()
+  {
+  }
+
+  /**
+   * Constructor including display names for possible values
+   * 
+   * @param name2
+   * @param description2
+   * @param isrequired
+   * @param defValue
+   * @param val
+   * @param possibleVals
+   * @param fdetails
+   */
+  public Option(String name2, String description2, boolean isrequired,
+          String defValue, String val, List<String> possibleVals,
+          List<String> displayNames, URL fdetails)
+  {
+    name = name2;
+    description = description2;
+    this.value = val;
+    this.required = isrequired;
+    this.defvalue = defValue;
+    if (possibleVals != null)
+    {
+      this.possibleVals = new ArrayList<>(possibleVals);
+    }
+    if (displayNames != null)
+    {
+      this.displayVals = new ArrayList<>(displayNames);
+    }
+    this.fdetails = fdetails;
+  }
+
+  /**
+   * Constructor
+   * 
+   * @param name2
+   * @param description2
+   * @param isrequired
+   * @param defValue
+   * @param val
+   * @param possibleVals
+   * @param fdetails
+   */
+  public Option(String name2, String description2, boolean isrequired,
+          String defValue, String val, List<String> possibleVals,
+          URL fdetails)
+  {
+    this(name2, description2, isrequired, defValue, val, possibleVals, null,
+            fdetails);
+  }
+
+  @Override
+  public OptionI copy()
+  {
+    Option opt = new Option(this);
+    return opt;
+  }
+
+  /**
+   * toString method to help identify options in the debugger only
+   */
+  @Override
+  public String toString()
+  {
+    return this.getClass().getName() + ":" + name;
+  }
+
   @Override
   public String getName()
   {
@@ -80,49 +185,9 @@ public class Option implements OptionI
     return possibleVals;
   }
 
-  public Option(Option opt)
-  {
-    name = new String(opt.name);
-    if (opt.value != null)
-      value = new String(opt.value);
-    if (opt.defvalue != null)
-      defvalue = new String(opt.defvalue);
-    if (opt.description != null)
-      description = new String(opt.description);
-    if (opt.possibleVals != null)
-    {
-      possibleVals = (ArrayList<String>) opt.possibleVals.clone();
-    }
-    required = opt.required;
-    // URLs are singletons - so we copy by reference. nasty but true.
-    fdetails = opt.fdetails;
-  }
-
-  public Option()
-  {
-  }
-
-  public Option(String name2, String description2, boolean isrequired,
-          String defValue, String value, Collection<String> possibleVals,
-          URL fdetails)
-  {
-    name = name2;
-    description = description2;
-    this.value = value;
-    this.required = isrequired;
-    this.defvalue = defValue;
-    if (possibleVals != null)
-    {
-      this.possibleVals = new ArrayList<String>();
-      this.possibleVals.addAll(possibleVals);
-    }
-    this.fdetails = fdetails;
-  }
-
   @Override
-  public OptionI copy()
+  public List<String> getDisplayNames()
   {
-    Option opt = new Option(this);
-    return opt;
+    return displayVals;
   }
 }