1 package jalview.bin.argparser;
3 import java.util.ArrayList;
4 import java.util.HashMap;
7 import java.util.stream.Collectors;
9 import jalview.bin.Console;
10 import jalview.bin.argparser.Arg.Opt;
12 public class ArgValues
14 public static final String ID = "id";
18 private int argCount = 0;
20 private boolean boolValue = false;
22 private boolean negated = false;
24 private boolean setByWildcard = false;
26 private int boolIndex = -1;
28 private List<Integer> argsIndexes;
30 private List<ArgValue> argValueList;
32 private Map<String, ArgValue> idMap = new HashMap<>();
34 protected ArgValues(Arg a)
37 this.argValueList = new ArrayList<ArgValue>();
38 this.boolValue = arg.getDefaultBoolValue();
41 protected boolean setByWildcard()
46 protected void setSetByWildcard(boolean b)
56 protected int getCount()
61 protected void incrementCount()
66 protected void setNegated(boolean b, boolean beingSetByWildcard)
68 // don't overwrite a wildcard set boolean with a non-wildcard set boolean
69 if (boolIndex >= 0 && !this.setByWildcard && beingSetByWildcard)
74 protected boolean isNegated()
79 protected void setBoolean(boolean b, int i, boolean beingSetByWildcard)
81 // don't overwrite a wildcard set boolean with a non-wildcard set boolean
82 if (boolIndex >= 0 && !this.setByWildcard && beingSetByWildcard)
86 this.setSetByWildcard(beingSetByWildcard);
89 protected boolean getBoolean()
91 return this.boolValue;
95 public String toString()
97 if (argValueList == null)
99 StringBuilder sb = new StringBuilder();
100 sb.append(arg.toLongString());
101 if (arg.hasOption(Opt.BOOLEAN) || arg.hasOption(Opt.UNARY))
102 sb.append("Boolean: ").append(boolValue).append("; Default: ")
103 .append(arg.getDefaultBoolValue()).append("; Negated: ")
104 .append(negated).append("\n");
105 if (arg.hasOption(Opt.STRING))
107 sb.append("Values:");
111 argValueList.stream().map(av -> av.getValue())
112 .collect(Collectors.toList())))
116 sb.append("Count: ").append(argCount).append("\n");
117 return sb.toString();
120 protected void addValue(String val, int argIndex, boolean wildcard)
122 addArgValue(new ArgValue(arg(), val, argIndex), wildcard);
125 protected void addValue(SubVals sv, String content, int argIndex,
128 addArgValue(new ArgValue(arg(), sv, content, argIndex), wildcard);
131 protected void addArgValue(ArgValue av, boolean beingSetByWildcard)
133 // allow a non-wildcard value to overwrite a wildcard set single value
134 boolean overwrite = !arg.hasOption(Opt.MULTI) && setByWildcard
135 && !beingSetByWildcard;
136 if ((!arg.hasOption(Opt.MULTI) && argValueList.size() > 0)
139 if (arg.hasOption(Opt.NODUPLICATEVALUES)
140 && this.containsValue(av.getValue()))
142 // new or overwrite if single valued
143 if (argValueList == null || overwrite)
145 argValueList = new ArrayList<ArgValue>();
147 SubVals sv = new SubVals(av.getValue());
150 String id = sv.get(ID);
154 argValueList.add(av);
155 this.setSetByWildcard(beingSetByWildcard);
158 protected boolean hasValue(String val)
160 return argValueList.contains(val);
163 protected ArgValue getArgValue()
165 if (arg.hasOption(Opt.MULTI))
166 Console.warn("Requesting single value for multi value argument");
167 return argValueList.size() > 0 ? argValueList.get(0) : null;
170 protected List<ArgValue> getArgValueList()
175 protected boolean hasId(String id)
177 return idMap.containsKey(id);
180 protected ArgValue getId(String id)
182 return idMap.get(id);
185 private boolean containsValue(String v)
187 if (argValueList == null)
189 for (ArgValue av : argValueList)
191 String val = av.getValue();
192 if (v == null && val == null)