JAL-629 Change colour scheme shortnames to something consistent and command-line...
[jalview.git] / src / jalview / bin / argparser / SubVals.java
index dd20ca6..a03ec15 100644 (file)
@@ -15,30 +15,36 @@ import jalview.bin.Console;
  */
 public class SubVals
 {
-  private static int NOTSET = -1;
+  public static int NOTSET = -1;
 
   private int index = NOTSET;
 
-  private Map<String, String> subVals = null;
+  private Map<String, String> subValMap;
 
-  private static char SEPARATOR = ';';
+  private static char SEPARATOR = ',';
 
   private static char EQUALS = '=';
 
   private String content = null;
 
-  public SubVals(SubVals sv, String c)
+  protected SubVals(SubVals sv, String c)
   {
-    if (sv != null)
+    if (sv == null)
     {
-      this.subVals = sv.getSubValsMap();
+      this.subValMap = new HashMap<>();
+    }
+    else
+    {
+      this.subValMap = sv == null ? new HashMap<>() : sv.getSubValMap();
       this.index = sv.getIndex();
     }
     this.content = c;
   }
 
-  public SubVals(String item)
+  protected SubVals(String item)
   {
+    if (subValMap == null)
+      subValMap = new HashMap<>();
     this.parseVals(item);
   }
 
@@ -56,8 +62,6 @@ public class SubVals
       for (String subvalString : subvalsString
               .split(Character.toString(SEPARATOR)))
       {
-        if (subVals == null)
-          subVals = new HashMap<>();
         int equals = subvalString.indexOf(EQUALS);
         if (equals > -1)
         {
@@ -73,7 +77,7 @@ public class SubVals
           } catch (NumberFormatException e)
           {
             // store this non-numeric key as a "true" value
-            subVals.put(subvalString, "true");
+            this.put(subvalString, "true");
           }
         }
       }
@@ -91,25 +95,28 @@ public class SubVals
 
   protected void put(String key, String val)
   {
-    if (subVals == null)
-      subVals = new HashMap<>();
-    subVals.put(key, val);
+    subValMap.put(key, val);
   }
 
   public boolean notSet()
   {
     // notSet is true if content present but nonsensical
-    return index == NOTSET && subVals == null;
+    return index == NOTSET && (subValMap == null || subValMap.size() == 0);
+  }
+
+  public String getWithSubstitutions(ArgParser ap, String id, String key)
+  {
+    return ap.makeSubstitutions(subValMap.get(key), id);
   }
 
   public String get(String key)
   {
-    return subVals == null ? null : subVals.get(key);
+    return subValMap.get(key);
   }
 
   public boolean has(String key)
   {
-    return subVals == null ? false : subVals.containsKey(key);
+    return subValMap.containsKey(key);
   }
 
   public int getIndex()
@@ -122,19 +129,19 @@ public class SubVals
     return content;
   }
 
-  protected Map<String, String> getSubValsMap()
+  protected Map<String, String> getSubValMap()
   {
-    return subVals;
+    return subValMap;
   }
 
   public String toString()
   {
-    if (subVals == null && getIndex() == NOTSET)
+    if (subValMap == null && getIndex() == NOTSET)
       return "";
 
     StringBuilder sb = new StringBuilder();
     List<String> entries = new ArrayList<>();
-    subVals.entrySet().stream().forEachOrdered(
+    subValMap.entrySet().stream().forEachOrdered(
             m -> entries.add(m.getValue().equals("true") ? m.getKey()
                     : new StringBuilder().append(m.getKey()).append(EQUALS)
                             .append(m.getValue()).toString()));