summaryrefslogtreecommitdiffstats
path: root/src/main/java/com/beust/jcommander/WrappedParameter.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/beust/jcommander/WrappedParameter.java')
-rw-r--r--src/main/java/com/beust/jcommander/WrappedParameter.java115
1 files changed, 115 insertions, 0 deletions
diff --git a/src/main/java/com/beust/jcommander/WrappedParameter.java b/src/main/java/com/beust/jcommander/WrappedParameter.java
new file mode 100644
index 0000000..f4e7d56
--- /dev/null
+++ b/src/main/java/com/beust/jcommander/WrappedParameter.java
@@ -0,0 +1,115 @@
+package com.beust.jcommander;
+
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+
+/**
+ * Encapsulates the operations common to @Parameter and @DynamicParameter
+ */
+public class WrappedParameter {
+ private Parameter m_parameter;
+ private DynamicParameter m_dynamicParameter;
+
+ public WrappedParameter(Parameter p) {
+ m_parameter = p;
+ }
+
+ public WrappedParameter(DynamicParameter p) {
+ m_dynamicParameter = p;
+ }
+
+ public Parameter getParameter() {
+ return m_parameter;
+ }
+
+ public DynamicParameter getDynamicParameter() {
+ return m_dynamicParameter;
+ }
+
+ public int arity() {
+ return m_parameter != null ? m_parameter.arity() : 1;
+ }
+
+ public boolean hidden() {
+ return m_parameter != null ? m_parameter.hidden() : m_dynamicParameter.hidden();
+ }
+
+ public boolean required() {
+ return m_parameter != null ? m_parameter.required() : m_dynamicParameter.required();
+ }
+
+ public boolean password() {
+ return m_parameter != null ? m_parameter.password() : false;
+ }
+
+ public String[] names() {
+ return m_parameter != null ? m_parameter.names() : m_dynamicParameter.names();
+ }
+
+ public boolean variableArity() {
+ return m_parameter != null ? m_parameter.variableArity() : false;
+ }
+
+ public Class<? extends IParameterValidator> validateWith() {
+ return m_parameter != null ? m_parameter.validateWith() : m_dynamicParameter.validateWith();
+ }
+
+ public Class<? extends IValueValidator> validateValueWith() {
+ return m_parameter != null
+ ? m_parameter.validateValueWith()
+ : m_dynamicParameter.validateValueWith();
+ }
+
+ public boolean echoInput() {
+ return m_parameter != null ? m_parameter.echoInput() : false;
+ }
+
+ public void addValue(Parameterized parameterized, Object object, Object value) {
+ if (m_parameter != null) {
+ parameterized.set(object, value);
+ } else {
+ String a = m_dynamicParameter.assignment();
+ String sv = value.toString();
+
+ int aInd = sv.indexOf(a);
+ if (aInd == -1) {
+ throw new ParameterException(
+ "Dynamic parameter expected a value of the form a" + a + "b"
+ + " but got:" + sv);
+ }
+ callPut(object, parameterized, sv.substring(0, aInd), sv.substring(aInd + 1));
+ }
+ }
+
+ private void callPut(Object object, Parameterized parameterized, String key, String value) {
+ try {
+ Method m;
+ m = findPut(parameterized.getType());
+ m.invoke(parameterized.get(object), key, value);
+ } catch (SecurityException e) {
+ e.printStackTrace();
+ } catch(IllegalAccessException e) {
+ e.printStackTrace();
+ } catch(InvocationTargetException e) {
+ e.printStackTrace();
+ } catch (NoSuchMethodException e) {
+ e.printStackTrace();
+ }
+ }
+
+ private Method findPut(Class<?> cls) throws SecurityException, NoSuchMethodException {
+ return cls.getMethod("put", Object.class, Object.class);
+ }
+
+ public String getAssignment() {
+ return m_dynamicParameter != null ? m_dynamicParameter.assignment() : "";
+ }
+
+ public boolean isHelp() {
+ return m_parameter != null && m_parameter.help();
+ }
+
+ public boolean isNonOverwritableForced() {
+ return m_parameter != null && m_parameter.forceNonOverwritable();
+ }
+}