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