aboutsummaryrefslogtreecommitdiff
path: root/src/cz/crcs/ectester/common/cli/CLITools.java
diff options
context:
space:
mode:
authorJ08nY2017-11-15 01:00:13 +0100
committerJ08nY2017-11-15 01:00:13 +0100
commit7758239163e6c81f985fa4e33ad1c0cb57627f0e (patch)
treef2f548c8222bb4a223421dcab6630f720365487b /src/cz/crcs/ectester/common/cli/CLITools.java
parent82a0399051d3bc059deb6923512092b31971d352 (diff)
downloadECTester-7758239163e6c81f985fa4e33ad1c0cb57627f0e.tar.gz
ECTester-7758239163e6c81f985fa4e33ad1c0cb57627f0e.tar.zst
ECTester-7758239163e6c81f985fa4e33ad1c0cb57627f0e.zip
Add Tree-like CLI parsing utilities.
Diffstat (limited to 'src/cz/crcs/ectester/common/cli/CLITools.java')
-rw-r--r--src/cz/crcs/ectester/common/cli/CLITools.java90
1 files changed, 90 insertions, 0 deletions
diff --git a/src/cz/crcs/ectester/common/cli/CLITools.java b/src/cz/crcs/ectester/common/cli/CLITools.java
new file mode 100644
index 0000000..8f34f62
--- /dev/null
+++ b/src/cz/crcs/ectester/common/cli/CLITools.java
@@ -0,0 +1,90 @@
+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, int depth) {
+ if (cli instanceof TreeParser) {
+ TreeParser tp = (TreeParser) cli;
+ tp.getParsers().forEach((key, value) -> {
+ help.printWrapped(pw, HelpFormatter.DEFAULT_WIDTH, String.format("%" + String.valueOf(depth) + "s" + key + ":", " "));
+ help.printOptions(pw, HelpFormatter.DEFAULT_WIDTH, value.getOptions(), HelpFormatter.DEFAULT_LEFT_PAD + depth, HelpFormatter.DEFAULT_DESC_PAD);
+ pw.println();
+ CLITools.help(help, pw, value.getParser(), depth + 1);
+ });
+ }
+ }
+
+ /**
+ * Print tree help.
+ */
+ public static void help(String prog, String header, Options baseOpts, TreeParser baseParser, String footer, boolean usage) {
+ HelpFormatter help = new HelpFormatter();
+ help.setOptionComparator(null);
+ StringWriter sw = new StringWriter();
+ PrintWriter pw = new PrintWriter(sw);
+ if (usage) {
+ help.printUsage(pw, HelpFormatter.DEFAULT_WIDTH, prog, baseOpts);
+ }
+ help.printWrapped(pw, HelpFormatter.DEFAULT_WIDTH, header);
+ help.printOptions(pw, HelpFormatter.DEFAULT_WIDTH, baseOpts, HelpFormatter.DEFAULT_LEFT_PAD, HelpFormatter.DEFAULT_DESC_PAD);
+ pw.println();
+ help(help, pw, baseParser, 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!");
+ }
+ }
+ }
+}