1 package jalview.bin.argparser;
3 import java.util.Locale;
7 HELP("h"), CALCULATION, MENUBAR, STATUS, SHOWOVERVIEW, ANNOTATIONS,
8 COLOUR, FEATURES, GROOVY, GROUPS, HEADLESS, JABAWS, ANNOTATION,
9 ANNOTATION2, DISPLAY, GUI, NEWS, NOQUESTIONNAIRE, SORTBYTREE, USAGESTATS,
10 OPEN, OPEN2, PROPS, QUESTIONNAIRE, SETPROP, TREE, VDOC, VSESS, OUTPUT,
11 OUTPUTTYPE, SSANNOTATION, NOTEMPFAC, TEMPFAC, TEMPFAC_LABEL, TEMPFAC_DESC,
12 TEMPFAC_SHADING, TITLE, PAEMATRIX, WRAP, NOSTRUCTURE, STRUCTURE, IMAGE,
13 QUIT, CLOSE, DEBUG("d"), QUIET("q"), ARGFILE, INCREMENT, NPP("n++"),
16 protected static enum Opt
18 BOOLEAN, STRING, UNARY, MULTI, LINKED, NODUPLICATEVALUES, BOOTSTRAP,
19 GLOB, NOACTION, ALLOWSUBSTITUTIONS
24 HELP.setOptions(Opt.UNARY);
25 CALCULATION.setOptions(true, Opt.BOOLEAN); // default "true" implies only
26 // expecting "--nocalculation"
27 MENUBAR.setOptions(true, Opt.BOOLEAN);
28 STATUS.setOptions(true, Opt.BOOLEAN);
29 SHOWOVERVIEW.setOptions(Opt.UNARY, Opt.LINKED);
30 ANNOTATIONS.setOptions(Opt.STRING, Opt.LINKED);
31 COLOUR.setOptions(Opt.STRING, Opt.LINKED);
32 FEATURES.setOptions(Opt.STRING, Opt.LINKED, Opt.MULTI,
33 Opt.ALLOWSUBSTITUTIONS);
34 GROOVY.setOptions(Opt.STRING, Opt.LINKED, Opt.MULTI,
35 Opt.ALLOWSUBSTITUTIONS);
36 GROUPS.setOptions(Opt.STRING, Opt.LINKED);
37 HEADLESS.setOptions(Opt.UNARY, Opt.BOOTSTRAP);
38 JABAWS.setOptions(Opt.STRING);
39 ANNOTATION.setOptions(true, Opt.BOOLEAN, Opt.LINKED);
40 ANNOTATION2.setOptions(true, Opt.BOOLEAN, Opt.LINKED);
41 DISPLAY.setOptions(true, Opt.BOOLEAN);
42 GUI.setOptions(true, Opt.BOOLEAN);
43 NEWS.setOptions(true, Opt.BOOLEAN);
44 NOQUESTIONNAIRE.setOptions(Opt.UNARY); // unary as --questionnaire=val
45 // expects a string value
46 SORTBYTREE.setOptions(true, Opt.BOOLEAN);
47 USAGESTATS.setOptions(true, Opt.BOOLEAN);
48 OPEN.setOptions(Opt.STRING, Opt.LINKED, Opt.MULTI, Opt.GLOB,
49 Opt.ALLOWSUBSTITUTIONS);
50 OPEN2.setOptions(Opt.STRING, Opt.LINKED, Opt.ALLOWSUBSTITUTIONS);
51 PROPS.setOptions(Opt.STRING, Opt.BOOTSTRAP);
52 QUESTIONNAIRE.setOptions(Opt.STRING);
53 SETPROP.setOptions(Opt.STRING);
54 TREE.setOptions(Opt.STRING);
56 VDOC.setOptions(Opt.UNARY);
57 VSESS.setOptions(Opt.UNARY);
59 OUTPUT.setOptions(Opt.STRING, Opt.LINKED, Opt.ALLOWSUBSTITUTIONS);
60 OUTPUTTYPE.setOptions(Opt.STRING, Opt.LINKED, Opt.MULTI);
62 SSANNOTATION.setOptions(Opt.BOOLEAN, Opt.LINKED);
63 NOTEMPFAC.setOptions(Opt.UNARY, Opt.LINKED);
64 TEMPFAC.setOptions(Opt.STRING, Opt.LINKED);
65 TEMPFAC_LABEL.setOptions(Opt.STRING, Opt.LINKED);
66 TEMPFAC_DESC.setOptions(Opt.STRING, Opt.LINKED);
67 TEMPFAC_SHADING.setOptions(Opt.BOOLEAN, Opt.LINKED);
68 TITLE.setOptions(Opt.STRING, Opt.LINKED);
69 PAEMATRIX.setOptions(Opt.STRING, Opt.LINKED, Opt.MULTI,
70 Opt.ALLOWSUBSTITUTIONS);
71 NOSTRUCTURE.setOptions(Opt.UNARY, Opt.LINKED);
72 STRUCTURE.setOptions(Opt.STRING, Opt.LINKED, Opt.MULTI,
73 Opt.ALLOWSUBSTITUTIONS);
74 WRAP.setOptions(Opt.BOOLEAN, Opt.LINKED);
75 IMAGE.setOptions(Opt.STRING, Opt.LINKED, Opt.ALLOWSUBSTITUTIONS);
76 QUIT.setOptions(Opt.UNARY);
77 CLOSE.setOptions(Opt.UNARY, Opt.LINKED);
78 DEBUG.setOptions(Opt.BOOLEAN, Opt.BOOTSTRAP);
79 QUIET.setOptions(Opt.UNARY, Opt.MULTI, Opt.BOOTSTRAP);
80 ARGFILE.setOptions(Opt.STRING, Opt.MULTI, Opt.BOOTSTRAP, Opt.GLOB,
81 Opt.ALLOWSUBSTITUTIONS);
82 INCREMENT.setOptions(Opt.UNARY, Opt.MULTI, Opt.NOACTION);
83 NPP.setOptions(Opt.UNARY, Opt.MULTI, Opt.NOACTION);
84 SUBSTITUTIONS.setOptions(Opt.BOOLEAN, Opt.MULTI, Opt.NOACTION);
85 NIL.setOptions(Opt.UNARY, Opt.LINKED, Opt.MULTI, Opt.NOACTION);
86 // BOOTSTRAP args are parsed before a full parse of arguments and
87 // so are accessible at an earlier stage to (e.g.) set debug log level,
88 // provide a props file (that might set log level), run headlessly, read
89 // an argfile instead of other args.
92 private final String[] argNames;
94 private Opt[] argOptions;
96 private boolean defaultBoolValue = false;
98 public String toLongString()
100 StringBuilder sb = new StringBuilder();
101 sb.append("Arg: ").append(this.name());
102 for (String name : getNames())
104 sb.append(", '").append(name).append("'");
106 sb.append("\nOptions: ");
107 boolean first = true;
108 for (Opt o : argOptions)
114 sb.append(o.toString());
118 return sb.toString();
126 private Arg(String... names)
128 int length = (names == null || names.length == 0
129 || (names.length == 1 && names[0] == null)) ? 1
131 this.argNames = new String[length];
132 this.argNames[0] = this.getName();
134 System.arraycopy(names, 0, this.argNames, 1, names.length);
137 public String[] getNames()
142 public String getName()
144 return this.name().toLowerCase(Locale.ROOT).replace('_', '-');
148 public final String toString()
153 public boolean hasOption(Opt o)
155 if (argOptions == null)
157 for (Opt option : argOptions)
165 protected void setOptions(Opt... options)
167 setOptions(false, options);
170 protected void setOptions(boolean defaultBoolValue, Opt... options)
172 this.defaultBoolValue = defaultBoolValue;
173 argOptions = options;
176 protected boolean getDefaultBoolValue()
178 return defaultBoolValue;