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 subVals.put(subvalString.substring(0, equals),
51 subvalString.substring(equals + 1));
57 this.index = Integer.parseInt(subvalString);
59 } catch (NumberFormatException e)
61 Console.warn("Failed to obtain subvalue or index from '" + item
62 + "'. Setting index=0 and using content='" + content
76 public boolean notSet()
78 // notSet is true if content present but nonsensical
79 return index == NOTSET && subVals == null;
82 public String get(String key)
84 return subVals == null ? null : subVals.get(key);
87 public boolean has(String key)
89 return subVals == null ? false : subVals.containsKey(key);
97 public String getContent()
102 public String toString()
104 StringBuilder sb = new StringBuilder();
107 for (Map.Entry<String, String> m : subVals.entrySet())
109 sb.append(m.getKey()).append('=').append(m.getValue()).append("\n");
111 return sb.toString();