summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCedric Beust <cedric@beust.com>2010-07-26 22:15:02 -0700
committerCedric Beust <cedric@beust.com>2010-07-26 22:15:02 -0700
commit78fcfb77f843f4636b50d40f69ce60cb0c2ae7bd (patch)
tree271f3807f2de29c7e25552543281a886c6e686a7
parentbc108076cf3dc506d4e87e004d8c2e413b995ada (diff)
downloadplatform_external_jcommander-78fcfb77f843f4636b50d40f69ce60cb0c2ae7bd.tar.gz
platform_external_jcommander-78fcfb77f843f4636b50d40f69ce60cb0c2ae7bd.tar.bz2
platform_external_jcommander-78fcfb77f843f4636b50d40f69ce60cb0c2ae7bd.zip
Support for IDefaultProvider
-rw-r--r--src/main/java/com/beust/jcommander/IDefaultProvider.java17
-rw-r--r--src/main/java/com/beust/jcommander/JCommander.java28
-rw-r--r--src/test/java/com/beust/jcommander/ArgsDefault.java23
-rw-r--r--src/test/java/com/beust/jcommander/JCommanderTest.java24
4 files changed, 88 insertions, 4 deletions
diff --git a/src/main/java/com/beust/jcommander/IDefaultProvider.java b/src/main/java/com/beust/jcommander/IDefaultProvider.java
new file mode 100644
index 0000000..5ea0bc1
--- /dev/null
+++ b/src/main/java/com/beust/jcommander/IDefaultProvider.java
@@ -0,0 +1,17 @@
+package com.beust.jcommander;
+
+/**
+ * Allows the specification of default values.
+ *
+ * @author cbeust
+ */
+public interface IDefaultProvider {
+
+ /**
+ * @param optionName The name of the option as specified in the names() attribute
+ * of the @Parameter option (e.g. "-file").
+ *
+ * @return the default value for this option.
+ */
+ String getDefaultValueFor(String optionName);
+}
diff --git a/src/main/java/com/beust/jcommander/JCommander.java b/src/main/java/com/beust/jcommander/JCommander.java
index b32e293..7c95d32 100644
--- a/src/main/java/com/beust/jcommander/JCommander.java
+++ b/src/main/java/com/beust/jcommander/JCommander.java
@@ -74,6 +74,8 @@ public class JCommander {
private ResourceBundle m_bundle;
+ private IDefaultProvider m_defaultProvider;
+
public JCommander(Object object) {
init(object, null);
}
@@ -189,7 +191,7 @@ public class JCommander {
}
}
}
- throw new ParameterException("Couldn't find a description for " + arg);
+ throw new ParameterException("Unknown parameter: " + arg);
}
private String getSeparatorFor(String arg) {
@@ -206,7 +208,7 @@ public class JCommander {
* @param fileName the command line filename
* @return the file content as a string.
*/
- public static List<String> readFile(String fileName) {
+ private static List<String> readFile(String fileName) {
List<String> result = Lists.newArrayList();
try {
@@ -274,6 +276,7 @@ public class JCommander {
ParameterDescription pd = new ParameterDescription(object, p, f, m_bundle);
m_fields.put(f, pd);
m_descriptions.put(name, pd);
+
if (p.required()) m_requiredFields.put(f, pd);
}
}
@@ -282,6 +285,15 @@ public class JCommander {
}
}
+ private void initializeDefaultValue(ParameterDescription pd) {
+ String optionName = pd.getParameter().names()[0];
+ String def = m_defaultProvider.getDefaultValueFor(optionName);
+ if (def != null) {
+ p("Initializing " + optionName + " with default value:" + def);
+ pd.addValue(def);
+ }
+ }
+
/**
* Main method that parses the values and initializes the fields accordingly.
*/
@@ -427,5 +439,17 @@ public class JCommander {
System.out.println("[JCommander] " + string);
}
}
+
+ /**
+ * Define the default provider for this instance.
+ */
+ public void setDefaultProvider(IDefaultProvider defaultProvider) {
+ m_defaultProvider = defaultProvider;
+ if (m_defaultProvider != null) {
+ for (ParameterDescription pd : m_descriptions.values()) {
+ initializeDefaultValue(pd);
+ }
+ }
+ }
}
diff --git a/src/test/java/com/beust/jcommander/ArgsDefault.java b/src/test/java/com/beust/jcommander/ArgsDefault.java
new file mode 100644
index 0000000..60fd553
--- /dev/null
+++ b/src/test/java/com/beust/jcommander/ArgsDefault.java
@@ -0,0 +1,23 @@
+package com.beust.jcommander;
+
+import org.testng.collections.Lists;
+
+import java.util.List;
+
+public class ArgsDefault {
+ @Parameter
+ public List<String> parameters = Lists.newArrayList();
+
+ @Parameter(names = "-log", description = "Level of verbosity")
+ public Integer log = 1;
+
+ @Parameter(names = "-groups", description = "Comma-separated list of group names to be run")
+ public String groups;
+
+ @Parameter(names = "-debug", description = "Debug mode")
+ public boolean debug = false;
+
+ @Parameter(names = "-long", description = "A long number")
+ public long l;
+
+}
diff --git a/src/test/java/com/beust/jcommander/JCommanderTest.java b/src/test/java/com/beust/jcommander/JCommanderTest.java
index 81e53c0..9d6bb83 100644
--- a/src/test/java/com/beust/jcommander/JCommanderTest.java
+++ b/src/test/java/com/beust/jcommander/JCommanderTest.java
@@ -252,13 +252,33 @@ public class JCommanderTest {
};
}
+ @Test
+ public void defaultProvider1() {
+ ArgsDefault a = new ArgsDefault();
+ JCommander jc = new JCommander(a);
+ jc.setDefaultProvider(new IDefaultProvider() {
+
+ @Override
+ public String getDefaultValueFor(String optionName) {
+ return "-debug".equals(optionName) ? "false" : "42";
+ }
+
+ });
+
+ jc.parse("f");
+
+ Assert.assertEquals(a.groups, "42");
+ Assert.assertEquals(a.l, 42);
+ Assert.assertEquals(a.log.intValue(), 42);
+ }
+
public static void main(String[] args) {
// for (Object[] p : f()) {
// int tc = JCommander.getTabCount((Integer) p[0], (Integer) p[1]);
// Assert.assertEquals(tc, ((Integer) p[2]).intValue());
// }
-// new JCommanderTest().formatting();
- new JCommander(new CommandLineArgs2()).usage();
+ new JCommanderTest().defaultProvider1();
+// new JCommander(new CommandLineArgs2()).usage();
// Separator a = new Separator();
// String[] argv = new String[] { "-n", "foo" };
// String[] argv = new String[] { "-v", "t" };