1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
|
package cz.crcs.ectester.common.cli;
import cz.crcs.ectester.common.ec.EC_Category;
import cz.crcs.ectester.common.ec.EC_Data;
import cz.crcs.ectester.data.EC_Store;
import org.apache.commons.cli.CommandLineParser;
import org.apache.commons.cli.HelpFormatter;
import org.apache.commons.cli.Options;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.Map;
/**
* @author Jan Jancar johny@neuromancer.sk
*/
public class CLITools {
/**
* Print help.
*/
public static void help(String prog, String header, Options options, String footer, boolean usage) {
HelpFormatter help = new HelpFormatter();
help.setOptionComparator(null);
help.printHelp(prog, header, options, footer, usage);
}
private static void help(HelpFormatter help, PrintWriter pw, CommandLineParser cli, Options opts, int depth) {
if (opts.getOptions().size() > 0) {
help.printOptions(pw, HelpFormatter.DEFAULT_WIDTH, opts, HelpFormatter.DEFAULT_LEFT_PAD + depth, HelpFormatter.DEFAULT_DESC_PAD);
}
if (cli instanceof TreeParser) {
TreeParser tp = (TreeParser) cli;
for (Argument arg : tp.getArgs()) {
String argname = arg.isRequired() ? "<" + arg.getName() + ">" : "[" + arg.getName() + "]";
help.printWrapped(pw, HelpFormatter.DEFAULT_WIDTH, String.format("%" + (depth + 1) + "s" + argname + " " + arg.getDesc(), " "));
}
tp.getParsers().forEach((key, value) -> {
pw.println();
help.printWrapped(pw, HelpFormatter.DEFAULT_WIDTH, String.format("%" + depth + "s" + key + ":", " "));
CLITools.help(help, pw, value.getParser(), value.getOptions(), depth + 1);
});
}
}
private static void usage(HelpFormatter help, PrintWriter pw, CommandLineParser cli, Options opts) {
StringWriter sw = new StringWriter();
PrintWriter upw = new PrintWriter(sw);
help.printUsage(upw, HelpFormatter.DEFAULT_WIDTH, "", opts);
if (cli instanceof TreeParser) {
upw.print(" ");
TreeParser tp = (TreeParser) cli;
String[] keys = tp.getParsers().keySet().toArray(new String[tp.getParsers().size()]);
if (keys.length > 0 && !tp.isRequired()) {
upw.print("[ ");
}
for (int i = 0; i < keys.length; ++i) {
String key = keys[i];
ParserOptions value = tp.getParsers().get(key);
upw.print("(" + key);
usage(help, upw, value.getParser(), value.getOptions());
upw.print(")");
if (i != keys.length - 1) {
upw.print(" | ");
}
}
if (keys.length > 0 && !tp.isRequired()) {
upw.print(" ]");
}
Argument[] args = tp.getArgs().toArray(new Argument[tp.getArgs().size()]);
if (args.length > 0) {
String[] argss = new String[tp.getArgs().size()];
for (int i = 0; i < args.length; ++i) {
Argument arg = args[i];
argss[i] = arg.isRequired() ? "<" + arg.getName() + ">" : "[" + arg.getName() + "]";
}
upw.print(" " + String.join(" ", argss));
}
}
pw.println(sw.toString().replaceAll("usage:( )?", "").replace("\n", ""));
}
/**
* Print tree help.
*/
public static void help(String prog, String header, Options baseOpts, TreeParser baseParser, String footer, boolean printUsage) {
HelpFormatter help = new HelpFormatter();
help.setOptionComparator(null);
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
help.printWrapped(pw, HelpFormatter.DEFAULT_WIDTH, header);
if (printUsage) {
StringWriter uw = new StringWriter();
PrintWriter upw = new PrintWriter(uw);
usage(help, upw, baseParser, baseOpts);
pw.print("usage: " + prog);
help.printWrapped(pw, HelpFormatter.DEFAULT_WIDTH, uw.toString());
upw.close();
pw.println();
}
help(help, pw, baseParser, baseOpts, 1);
help.printWrapped(pw, HelpFormatter.DEFAULT_WIDTH, footer);
System.out.println(sw.toString());
}
/**
* Print version info.
*/
public static void version(String description, String license) {
System.out.println(description);
System.out.println(license);
}
/**
* List categories and named curves.
*/
public static void listNamed(EC_Store dataStore, String named) {
Map<String, EC_Category> categories = dataStore.getCategories();
if (named == null) {
// print all categories, briefly
for (EC_Category cat : categories.values()) {
System.out.println(cat);
}
} else if (categories.containsKey(named)) {
// print given category
System.out.println(categories.get(named));
} else {
// print given object
EC_Data object = dataStore.getObject(EC_Data.class, named);
if (object != null) {
System.out.println(object);
} else {
System.err.println("Named object " + named + " not found!");
}
}
}
}
|