diff options
author | Cedric Beust <cedric@beust.com> | 2010-07-26 22:15:02 -0700 |
---|---|---|
committer | Cedric Beust <cedric@beust.com> | 2010-07-26 22:15:02 -0700 |
commit | 78fcfb77f843f4636b50d40f69ce60cb0c2ae7bd (patch) | |
tree | 271f3807f2de29c7e25552543281a886c6e686a7 | |
parent | bc108076cf3dc506d4e87e004d8c2e413b995ada (diff) | |
download | platform_external_jcommander-78fcfb77f843f4636b50d40f69ce60cb0c2ae7bd.tar.gz platform_external_jcommander-78fcfb77f843f4636b50d40f69ce60cb0c2ae7bd.tar.bz2 platform_external_jcommander-78fcfb77f843f4636b50d40f69ce60cb0c2ae7bd.zip |
Support for IDefaultProvider
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" }; |