diff options
author | Igor Murashkin <iam@google.com> | 2016-03-24 14:21:34 -0700 |
---|---|---|
committer | Igor Murashkin <iam@google.com> | 2016-03-24 14:21:57 -0700 |
commit | 7f95581d269e0815eab16115f0e36c0ee325dc88 (patch) | |
tree | f1aa3cbaef213c6d2693df6d0ae4d449cc3e6815 /src/main/java/com/beust/jcommander/WrappedParameter.java | |
parent | b3994367e22d0ce3670ff9fb693a4f2939ef5d58 (diff) | |
parent | 5321f6ff3251784760f79982b1a720e3607c5003 (diff) | |
download | platform_external_jcommander-7f95581d269e0815eab16115f0e36c0ee325dc88.tar.gz platform_external_jcommander-7f95581d269e0815eab16115f0e36c0ee325dc88.tar.bz2 platform_external_jcommander-7f95581d269e0815eab16115f0e36c0ee325dc88.zip |
Merge remote-tracking branch 'goog/master' into nyc-dev
Bug: 27552463
Change-Id: Icaacbb9acf1454b39974d319d30023aea6fea5f6
Diffstat (limited to 'src/main/java/com/beust/jcommander/WrappedParameter.java')
-rw-r--r-- | src/main/java/com/beust/jcommander/WrappedParameter.java | 115 |
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(); + } +} |