1 package jalview.bin.argparser;
3 import java.util.ArrayList;
4 import java.util.Arrays;
5 import java.util.HashMap;
9 import jalview.bin.argparser.Arg.Opt;
10 import jalview.util.FileUtils;
12 public class BootstrapArgs
15 private Map<Arg, List<String>> bootstrapArgMap = new HashMap<>();
17 public static BootstrapArgs getBootstrapArgs(String[] args)
19 List<String> argList = new ArrayList<>(Arrays.asList(args));
20 return new BootstrapArgs(argList);
23 private BootstrapArgs(List<String> args)
28 private void parse(List<String> args)
32 for (int i = 0; i < args.size(); i++)
34 String arg = args.get(i);
35 String argName = null;
37 if (arg.startsWith(ArgParser.DOUBLEDASH))
40 arg = arg.substring(ArgParser.DOUBLEDASH.length());
41 int equalPos = arg.indexOf(ArgParser.EQUALS);
43 && ArgParser.argMap.containsKey(arg.substring(0, equalPos)))
45 argName = arg.substring(0, equalPos);
46 val = arg.substring(equalPos + 1);
48 // check for boolean prepended by "no"
49 else if (arg.startsWith(ArgParser.NEGATESTRING)
50 && ArgParser.argMap.containsKey(
51 arg.substring(ArgParser.NEGATESTRING.length())))
53 argName = arg.substring(ArgParser.NEGATESTRING.length());
56 else if (ArgParser.argMap.containsKey(arg))
62 Arg a = ArgParser.argMap.get(argName);
64 if (a == null || !a.hasOption(Opt.BOOTSTRAP))
66 // not a valid bootstrap arg
70 if (a.hasOption(Opt.STRING))
74 addAll(a, ArgParser.getShellGlobbedFilenameValues(a, args,
79 if (a.hasOption(Opt.GLOB))
81 System.out.println("##### VAL='" + val + "'");
82 addAll(a, FileUtils.getFilenamesFromGlob(val));
98 public boolean contains(Arg a)
100 return bootstrapArgMap.containsKey(a);
103 public List<String> getList(Arg a)
105 return bootstrapArgMap.get(a);
108 private List<String> getOrCreateList(Arg a)
110 List<String> l = getList(a);
113 l = new ArrayList<>();
119 private void putList(Arg a, List<String> l)
121 bootstrapArgMap.put(a, l);
125 * Creates a new list if not used before,
126 * adds the value unless the existing list is non-empty
127 * and the arg is not MULTI (so first expressed value is
130 private void add(Arg a, String s)
132 List<String> l = getOrCreateList(a);
133 if (a.hasOption(Opt.MULTI) || l.size() == 0)
139 private void addAll(Arg a, List<String> al)
141 List<String> l = getOrCreateList(a);
142 if (a.hasOption(Opt.MULTI))
149 * Retrieves the first value even if MULTI.
150 * A convenience for non-MULTI args.
152 public String get(Arg a)
154 if (!bootstrapArgMap.containsKey(a))
156 List<String> aL = bootstrapArgMap.get(a);
157 return (aL == null || aL.size() == 0) ? null : aL.get(0);
160 public boolean getBoolean(Arg a, boolean d)
162 if (!bootstrapArgMap.containsKey(a))
164 return Boolean.parseBoolean(get(a));
167 public boolean getBoolean(Arg a)
169 if (!(a.hasOption(Opt.BOOLEAN) || a.hasOption(Opt.UNARY)))
173 if (bootstrapArgMap.containsKey(a))
174 return Boolean.parseBoolean(get(a));
176 return a.getDefaultBoolValue();