JAL-629 refactor ArgParser and helper classes all to jalview.bin.argparser to remove...
[jalview.git] / src / jalview / bin / argparser / ArgValues.java
1 package jalview.bin.argparser;
2
3 import java.util.ArrayList;
4 import java.util.HashMap;
5 import java.util.List;
6 import java.util.Map;
7
8 import jalview.bin.Console;
9 import jalview.bin.argparser.Arg.Opt;
10
11 public class ArgValues
12 {
13   protected static final String ID = "id";
14
15   private Arg arg;
16
17   private int argCount = 0;
18
19   private boolean boolValue = false;
20
21   private boolean negated = false;
22
23   private int boolIndex = -1;
24
25   private List<Integer> argsIndexes;
26
27   private List<ArgValue> argValueList;
28
29   private Map<String, ArgValue> idMap = new HashMap<>();
30
31   protected ArgValues(Arg a)
32   {
33     this.arg = a;
34     this.argValueList = new ArrayList<ArgValue>();
35     this.boolValue = arg.getDefaultBoolValue();
36   }
37
38   public Arg arg()
39   {
40     return arg;
41   }
42
43   protected int getCount()
44   {
45     return argCount;
46   }
47
48   protected void incrementCount()
49   {
50     argCount++;
51   }
52
53   protected void setNegated(boolean b)
54   {
55     this.negated = b;
56   }
57
58   protected boolean isNegated()
59   {
60     return this.negated;
61   }
62
63   protected void setBoolean(boolean b, int i)
64   {
65     this.boolValue = b;
66     this.boolIndex = i;
67   }
68
69   protected boolean getBoolean()
70   {
71     return this.boolValue;
72   }
73
74   @Override
75   public String toString()
76   {
77     if (argValueList == null)
78       return null;
79     StringBuilder sb = new StringBuilder();
80     sb.append(arg.toLongString());
81     if (arg.hasOption(Opt.BOOLEAN) || arg.hasOption(Opt.UNARY))
82       sb.append("Boolean: ").append(boolValue).append("; Default: ")
83               .append(arg.getDefaultBoolValue()).append("; Negated: ")
84               .append(negated).append("\n");
85     if (arg.hasOption(Opt.STRING))
86     {
87       sb.append("Values:");
88       boolean first = true;
89       for (ArgValue av : argValueList)
90       {
91         String v = av.getValue();
92         if (!first)
93           sb.append(",");
94         sb.append("\n  '");
95         sb.append(v).append("'");
96         first = false;
97       }
98       sb.append("\n");
99     }
100     sb.append("Count: ").append(argCount).append("\n");
101     return sb.toString();
102   }
103
104   protected void addValue()
105   {
106     addValue(null, -1);
107   }
108
109   protected void addValue(String val, int argIndex)
110   {
111     addArgValue(new ArgValue(val, argIndex));
112   }
113
114   protected void addArgValue(ArgValue av)
115   {
116     if ((!arg.hasOption(Opt.MULTI) && argValueList.size() > 0)
117             || (arg.hasOption(Opt.NODUPLICATEVALUES)
118                     && argValueList.contains(av.getValue())))
119       return;
120     if (argValueList == null)
121     {
122       argValueList = new ArrayList<ArgValue>();
123     }
124     SubVals sv = ArgParser.getSubVals(av.getValue());
125     if (sv.has(ID))
126     {
127       String id = sv.get(ID);
128       av.setId(id);
129       idMap.put(id, av);
130     }
131     argValueList.add(av);
132   }
133
134   protected boolean hasValue(String val)
135   {
136     return argValueList.contains(val);
137   }
138
139   protected ArgValue getArgValue()
140   {
141     if (arg.hasOption(Opt.MULTI))
142       Console.warn("Requesting single value for multi value argument");
143     return argValueList.size() > 0 ? argValueList.get(0) : null;
144   }
145
146   protected List<ArgValue> getArgValueList()
147   {
148     return argValueList;
149   }
150
151   protected boolean hasId(String id)
152   {
153     return idMap.containsKey(id);
154   }
155
156   protected ArgValue getId(String id)
157   {
158     return idMap.get(id);
159   }
160 }