1 package jalview.bin.argparser;
3 import java.util.HashMap;
6 import jalview.bin.Console;
9 * A helper class to parse a string of the possible forms "content"
10 * "[index]content", "[keyName=keyValue]content" and return the integer index,
11 * the strings keyName and keyValue, and the content after the square brackets
12 * (if present). Values not set `will be -1 or null.
16 private static int NOTSET = -1;
18 private int index = NOTSET;
20 private Map<String, String> subVals = null;
22 private static char SEPARATOR = ';';
24 private String content = null;
26 public SubVals(String item)
31 public void parseVals(String item)
35 if (item.indexOf('[') == 0 && item.indexOf(']') > 1)
38 int closeBracket = item.indexOf(']');
39 String subvalsString = item.substring(openBracket + 1, closeBracket);
40 this.content = item.substring(closeBracket + 1);
41 boolean setIndex = false;
42 for (String subvalString : subvalsString
43 .split(Character.toString(SEPARATOR)))
45 int equals = subvalString.indexOf('=');
49 subVals = new HashMap<>();
50 this.put(subvalString.substring(0, equals),
51 subvalString.substring(equals + 1));
57 this.index = Integer.parseInt(subvalString);
59 } catch (NumberFormatException e)
61 // store this non-numeric key as a "true" value
62 subVals.put(subvalsString, "true");
69 Console.debug("SubVals from '" + subvalsString + "' has index "
70 + this.index + " set");
78 protected void put(String key, String val)
81 subVals = new HashMap<>();
82 subVals.put(key, val);
85 public boolean notSet()
87 // notSet is true if content present but nonsensical
88 return index == NOTSET && subVals == null;
91 public String get(String key)
93 return subVals == null ? null : subVals.get(key);
96 public boolean has(String key)
98 return subVals == null ? false : subVals.containsKey(key);
101 public int getIndex()
106 public String getContent()
111 public String toString()
113 StringBuilder sb = new StringBuilder();
116 for (Map.Entry<String, String> m : subVals.entrySet())
118 sb.append(m.getKey()).append('=').append(m.getValue()).append("\n");
120 return sb.toString();