JAL-629 Added --opennew --nonews --nosplash. Added java globbing for = e.g. --open...
[jalview.git] / src / jalview / bin / argparser / SubVals.java
index e6a7cb2..aea6df3 100644 (file)
@@ -1,6 +1,8 @@
 package jalview.bin.argparser;
 
+import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 import jalview.bin.Console;
@@ -21,8 +23,16 @@ public class SubVals
 
   private static char SEPARATOR = ';';
 
+  private static char EQUALS = '=';
+
   private String content = null;
 
+  public SubVals(Map<String, String> sv, String c)
+  {
+    this.subVals = sv;
+    this.content = c;
+  }
+
   public SubVals(String item)
   {
     this.parseVals(item);
@@ -42,11 +52,11 @@ public class SubVals
       for (String subvalString : subvalsString
               .split(Character.toString(SEPARATOR)))
       {
-        int equals = subvalString.indexOf('=');
+        if (subVals == null)
+          subVals = new HashMap<>();
+        int equals = subvalString.indexOf(EQUALS);
         if (equals > -1)
         {
-          if (subVals == null)
-            subVals = new HashMap<>();
           this.put(subvalString.substring(0, equals),
                   subvalString.substring(equals + 1));
         }
@@ -59,7 +69,7 @@ public class SubVals
           } catch (NumberFormatException e)
           {
             // store this non-numeric key as a "true" value
-            subVals.put(subvalsString, "true");
+            subVals.put(subvalString, "true");
           }
         }
       }
@@ -108,15 +118,27 @@ public class SubVals
     return content;
   }
 
+  protected Map<String, String> getSubValsMap()
+  {
+    return subVals;
+  }
+
   public String toString()
   {
-    StringBuilder sb = new StringBuilder();
-    if (subVals == null)
+    if (subVals == null && getIndex() == NOTSET)
       return "";
-    for (Map.Entry<String, String> m : subVals.entrySet())
-    {
-      sb.append(m.getKey()).append('=').append(m.getValue()).append("\n");
-    }
+
+    StringBuilder sb = new StringBuilder();
+    List<String> entries = new ArrayList<>();
+    subVals.entrySet().stream().forEachOrdered(
+            m -> entries.add(m.getValue().equals("true") ? m.getKey()
+                    : new StringBuilder().append(m.getKey()).append(EQUALS)
+                            .append(m.getValue()).toString()));
+    if (getIndex() != NOTSET)
+      entries.add(Integer.toString(getIndex()));
+    sb.append('[');
+    sb.append(String.join(Character.toString(SEPARATOR), entries));
+    sb.append(']');
     return sb.toString();
   }
 }
\ No newline at end of file