From fb7fe350cd4fe0f0338d37e551a0112cfa2e7835 Mon Sep 17 00:00:00 2001 From: Jonathan Cobb Date: Wed, 19 Feb 2020 13:40:31 -0500 Subject: [PATCH] add const printing utility --- .../org/cobbzilla/util/main/ConstMain.java | 38 +++++++++++++++++++ .../org/cobbzilla/util/main/ConstOptions.java | 13 +++++++ 2 files changed, 51 insertions(+) create mode 100644 src/main/java/org/cobbzilla/util/main/ConstMain.java create mode 100644 src/main/java/org/cobbzilla/util/main/ConstOptions.java diff --git a/src/main/java/org/cobbzilla/util/main/ConstMain.java b/src/main/java/org/cobbzilla/util/main/ConstMain.java new file mode 100644 index 0000000..06ba1dc --- /dev/null +++ b/src/main/java/org/cobbzilla/util/main/ConstMain.java @@ -0,0 +1,38 @@ +package org.cobbzilla.util.main; + +import static org.cobbzilla.util.daemon.ZillaRuntime.shortError; +import static org.cobbzilla.util.reflect.ReflectionUtil.constValue; +import static org.cobbzilla.util.reflect.ReflectionUtil.forName; + +/** + * Write a constant value to stdout. + * + * This will only ever write the constant value to stdout if it can successfully be read. + * If the constant can be read, its value is printed with the .toString() method. + * If an error occurs, nothing is written to stdout, and the error will be written to stderr. + * If the value of the constant is null, nothing is printed to stdout, and "null" is printed to stderr. + */ +public class ConstMain extends BaseMain { + + public static void main(String[] args) { main(ConstMain.class, args); } + + @Override protected void run() throws Exception { + final String cm = getOptions().getClassAndMember(); + final int lastDot = cm.lastIndexOf('.'); + if (lastDot == -1 || lastDot == cm.length()-1) { + die("invalid value: "+cm); + } else { + try { + final Object val = constValue(forName(cm.substring(0, lastDot)), cm.substring(lastDot + 1)); + if (val == null) { + err("null"); + } else { + out(val.toString()); + } + } catch (Exception e) { + die("Exception getting constant value "+cm+": "+shortError(e), e); + } + } + } + +} diff --git a/src/main/java/org/cobbzilla/util/main/ConstOptions.java b/src/main/java/org/cobbzilla/util/main/ConstOptions.java new file mode 100644 index 0000000..336df1b --- /dev/null +++ b/src/main/java/org/cobbzilla/util/main/ConstOptions.java @@ -0,0 +1,13 @@ +package org.cobbzilla.util.main; + +import lombok.Getter; +import lombok.Setter; +import org.kohsuke.args4j.Argument; + +public class ConstOptions extends BaseMainOptions { + + public static final String USAGE_CLASS_AND_MEMBER = "Specify a class.member constant"; + @Argument(usage=USAGE_CLASS_AND_MEMBER, required=true) + @Getter @Setter private String classAndMember; + +}