diff options
author | Cedric Beust <cedric@beust.com> | 2012-08-07 04:29:57 -0700 |
---|---|---|
committer | Cedric Beust <cedric@beust.com> | 2012-08-07 04:29:57 -0700 |
commit | 5377e48b0f7b1b77aa9d546313b11767559068de (patch) | |
tree | ad23494cbe105df2e422d40cb70bbef75f45abfa | |
parent | 3dd7558e2aee86e647b4530f536cbb1fa574b87a (diff) | |
download | platform_external_jcommander-5377e48b0f7b1b77aa9d546313b11767559068de.tar.gz platform_external_jcommander-5377e48b0f7b1b77aa9d546313b11767559068de.tar.bz2 platform_external_jcommander-5377e48b0f7b1b77aa9d546313b11767559068de.zip |
IParameterValidator2.
5 files changed, 85 insertions, 9 deletions
diff --git a/src/main/java/com/beust/jcommander/IParameterValidator2.java b/src/main/java/com/beust/jcommander/IParameterValidator2.java new file mode 100644 index 0000000..77e7dd3 --- /dev/null +++ b/src/main/java/com/beust/jcommander/IParameterValidator2.java @@ -0,0 +1,34 @@ +/** + * Copyright (C) 2011 the original author or authors. + * See the notice.md file distributed with this work for additional + * information regarding copyright ownership. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.beust.jcommander; + +public interface IParameterValidator2 extends IParameterValidator { + + /** + * Validate the parameter. + * + * @param name The name of the parameter (e.g. "-host"). + * @param value The value of the parameter that we need to validate + * @param pd The description of this parameter + * + * @throws ParameterException Thrown if the value of the parameter is invalid. + */ + void validate(String name, String value, ParameterDescription pd) throws ParameterException; + +} diff --git a/src/main/java/com/beust/jcommander/JCommander.java b/src/main/java/com/beust/jcommander/JCommander.java index bfda67f..30b9b4a 100644 --- a/src/main/java/com/beust/jcommander/JCommander.java +++ b/src/main/java/com/beust/jcommander/JCommander.java @@ -745,7 +745,8 @@ public class JCommander { } } - ParameterDescription.validateParameter(m_mainParameterAnnotation.validateWith(), + ParameterDescription.validateParameter(m_mainParameterDescription, + m_mainParameterAnnotation.validateWith(), "Default", value); m_mainParameterDescription.setAssigned(true); diff --git a/src/main/java/com/beust/jcommander/ParameterDescription.java b/src/main/java/com/beust/jcommander/ParameterDescription.java index a49562f..33574a9 100644 --- a/src/main/java/com/beust/jcommander/ParameterDescription.java +++ b/src/main/java/com/beust/jcommander/ParameterDescription.java @@ -266,7 +266,7 @@ public class ParameterDescription { private void validateParameter(String name, String value) { Class<? extends IParameterValidator> validator = m_wrappedParameter.validateWith(); if (validator != null) { - validateParameter(validator, name, value); + validateParameter(this, validator, name, value); } } @@ -291,13 +291,18 @@ public class ParameterDescription { } } - public static void validateParameter(Class<? extends IParameterValidator> validator, + public static void validateParameter(ParameterDescription pd, + Class<? extends IParameterValidator> validator, String name, String value) { try { if (validator != NoValidator.class) { p("Validating parameter:" + name + " value:" + value + " validator:" + validator); } validator.newInstance().validate(name, value); + if (IParameterValidator2.class.isAssignableFrom(validator)) { + IParameterValidator2 instance = (IParameterValidator2) validator.newInstance(); + instance.validate(name, value, pd); + } } catch (InstantiationException e) { throw new ParameterException("Can't instantiate validator:" + e); } catch (IllegalAccessException e) { diff --git a/src/test/java/com/beust/jcommander/JCommanderTest.java b/src/test/java/com/beust/jcommander/JCommanderTest.java index 5b41e0b..22c5082 100644 --- a/src/test/java/com/beust/jcommander/JCommanderTest.java +++ b/src/test/java/com/beust/jcommander/JCommanderTest.java @@ -839,11 +839,9 @@ public class JCommanderTest { public void parameterWithOneDoubleQuote() { @Parameters(separators = "=") class Arg { - @Parameter(names = { "-p", "--param" }) private String param; } - JCommander jc = new JCommander(new MyClass()); jc.parse("-p=\""); } @@ -865,14 +863,42 @@ public class JCommanderTest { private List<String> rules = new ArrayList<String>(); } Arg a = new Arg(); - StringBuilder sb = new StringBuilder(); new JCommander(a, "-rule", "some test"); Assert.assertEquals(a.rules, Arrays.asList("some test")); } + static class V2 implements IParameterValidator2 { + final static List<String> names = Lists.newArrayList(); + static boolean validateCalled = false; + + @Override + public void validate(String name, String value) throws ParameterException { + validateCalled = true; + } + + @Override + public void validate(String name, String value, ParameterDescription pd) + throws ParameterException { + names.addAll(Arrays.asList(pd.getParameter().names())); + } + } + + public void validator2() { + class Arg { + @Parameter(names = { "-h", "--host" }, validateWith = V2.class) + String host; + } + Arg a = new Arg(); + V2.names.clear(); + V2.validateCalled = false; + new JCommander(a, "--host", "h"); + Assert.assertEquals(V2.names, Arrays.asList(new String[] { "-h", "--host" })); + Assert.assertTrue(V2.validateCalled); + } + @Test(enabled = false) public static void main(String[] args) throws Exception { - new JCommanderTest().spaces(); + new JCommanderTest().parameterWithOneDoubleQuote(); // class A { // @Parameter(names = "-short", required = true) // List<String> parameters; diff --git a/src/test/java/com/beust/jcommander/MyClass.java b/src/test/java/com/beust/jcommander/MyClass.java index 3bf46b5..c2d3371 100644 --- a/src/test/java/com/beust/jcommander/MyClass.java +++ b/src/test/java/com/beust/jcommander/MyClass.java @@ -1,14 +1,24 @@ package com.beust.jcommander; +import org.testng.Assert; + + @Parameters(separators = "=") public class MyClass { - @Parameter(names = { "-p", "--param" }) + @Parameter(names = { "-p", "--param" }, validateWith = MyValidator.class) private String param; public static void main(String[] args) { JCommander jCommander = new JCommander(new MyClass()); - jCommander.parse("-p=\""); + jCommander.parse("--param=value"); + } + + public static class MyValidator implements IParameterValidator { + @Override + public void validate(String name, String value) throws ParameterException { + Assert.assertEquals(value, "\""); + } } }
\ No newline at end of file |