- Revision
- 899
- Author
- mauro
- Date
- 2008-08-26 08:38:55 -0500 (Tue, 26 Aug 2008)
Log Message
Renamed ArgumentConverter to ParameterConverter - following Dan's suggestion. Renamed ArgumentConversion to ParameterConverters - the conversion really implied a result rather than an executor or facade of executors.
Modified Paths
- trunk/examples/trader/src/main/java/org/jbehave/examples/trader/scenarios/StockSteps.java
- trunk/jbehave-core/src/behaviour/org/jbehave/scenario/steps/CandidateStepBehaviour.java
- trunk/jbehave-core/src/java/org/jbehave/scenario/steps/CandidateStep.java
- trunk/jbehave-core/src/java/org/jbehave/scenario/steps/Steps.java
Added Paths
- trunk/examples/trader/src/main/java/org/jbehave/examples/trader/converters/TraderConverter.java
- trunk/jbehave-core/src/java/org/jbehave/scenario/steps/ParameterConverters.java
Removed Paths
Diff
Deleted: trunk/examples/trader/src/main/java/org/jbehave/examples/trader/converters/TraderArgumentConverter.java (898 => 899)
--- trunk/examples/trader/src/main/java/org/jbehave/examples/trader/converters/TraderArgumentConverter.java 2008-08-26 11:10:48 UTC (rev 898) +++ trunk/examples/trader/src/main/java/org/jbehave/examples/trader/converters/TraderArgumentConverter.java 2008-08-26 13:38:55 UTC (rev 899) @@ -1,32 +0,0 @@ -package org.jbehave.examples.trader.converters; - -import java.lang.reflect.Type; - -import org.jbehave.examples.trader.model.Trader; -import org.jbehave.examples.trader.persistence.TraderPersister; -import org.jbehave.scenario.steps.ArgumentConversion.ArgumentConverter; -import org.jbehave.scenario.steps.ArgumentConversion.InvalidArgumentException; - -public class TraderArgumentConverter implements ArgumentConverter { - private TraderPersister persister; - - public TraderArgumentConverter(TraderPersister persister) { - this.persister = persister; - } - - public boolean accept(Type type) { - if (type instanceof Class) { - return Trader.class.isAssignableFrom((Class<?>) type); - } - return false; - } - - public Object convertValue(String value, Type type) { - Trader trader = persister.retrieveTrader(value); - if ( trader == null ){ - throw new InvalidArgumentException("Trader not found for name "+value, null); - } - return trader; - } - -}
Copied: trunk/examples/trader/src/main/java/org/jbehave/examples/trader/converters/TraderConverter.java (from rev 898, trunk/examples/trader/src/main/java/org/jbehave/examples/trader/converters/TraderArgumentConverter.java) (0 => 899)
--- trunk/examples/trader/src/main/java/org/jbehave/examples/trader/converters/TraderConverter.java (rev 0) +++ trunk/examples/trader/src/main/java/org/jbehave/examples/trader/converters/TraderConverter.java 2008-08-26 13:38:55 UTC (rev 899) @@ -0,0 +1,32 @@ +package org.jbehave.examples.trader.converters; + +import java.lang.reflect.Type; + +import org.jbehave.examples.trader.model.Trader; +import org.jbehave.examples.trader.persistence.TraderPersister; +import org.jbehave.scenario.steps.ParameterConverters.ParameterConverter; +import org.jbehave.scenario.steps.ParameterConverters.InvalidParameterException; + +public class TraderConverter implements ParameterConverter { + private TraderPersister persister; + + public TraderConverter(TraderPersister persister) { + this.persister = persister; + } + + public boolean accept(Type type) { + if (type instanceof Class) { + return Trader.class.isAssignableFrom((Class<?>) type); + } + return false; + } + + public Object convertValue(String value, Type type) { + Trader trader = persister.retrieveTrader(value); + if (trader == null) { + throw new InvalidParameterException("Trader not found for name " + value, null); + } + return trader; + } + +}
Property changes: trunk/examples/trader/src/main/java/org/jbehave/examples/trader/converters/TraderConverter.java
Name: svn:mergeinfo
+
Modified: trunk/examples/trader/src/main/java/org/jbehave/examples/trader/scenarios/StockSteps.java (898 => 899)
--- trunk/examples/trader/src/main/java/org/jbehave/examples/trader/scenarios/StockSteps.java 2008-08-26 11:10:48 UTC (rev 898) +++ trunk/examples/trader/src/main/java/org/jbehave/examples/trader/scenarios/StockSteps.java 2008-08-26 13:38:55 UTC (rev 899) @@ -6,7 +6,7 @@ import java.util.List; -import org.jbehave.examples.trader.converters.TraderArgumentConverter; +import org.jbehave.examples.trader.converters.TraderConverter; import org.jbehave.examples.trader.model.Stock; import org.jbehave.examples.trader.model.Trader; import org.jbehave.examples.trader.persistence.TraderPersister; @@ -14,7 +14,7 @@ import org.jbehave.scenario.annotations.Then; import org.jbehave.scenario.annotations.When; import org.jbehave.scenario.parser.PrefixCapturingPatternBuilder; -import org.jbehave.scenario.steps.ArgumentConversion; +import org.jbehave.scenario.steps.ParameterConverters; import org.jbehave.scenario.steps.PrintStreamStepMonitor; import org.jbehave.scenario.steps.SilentStepMonitor; import org.jbehave.scenario.steps.Steps; @@ -27,7 +27,7 @@ private Trader trader; public StockSteps(double threshold) { - super(new PrefixCapturingPatternBuilder(), MONITOR, new ArgumentConversion(new SilentStepMonitor(), new TraderArgumentConverter(mockTradePersister())), "Given", "When", "Then", "And"); + super(new PrefixCapturingPatternBuilder(), MONITOR, new ParameterConverters(new SilentStepMonitor(), new TraderConverter(mockTradePersister())), "Given", "When", "Then", "And"); this.threshold = threshold; }
Modified: trunk/jbehave-core/src/behaviour/org/jbehave/scenario/steps/CandidateStepBehaviour.java (898 => 899)
--- trunk/jbehave-core/src/behaviour/org/jbehave/scenario/steps/CandidateStepBehaviour.java 2008-08-26 11:10:48 UTC (rev 898) +++ trunk/jbehave-core/src/behaviour/org/jbehave/scenario/steps/CandidateStepBehaviour.java 2008-08-26 13:38:55 UTC (rev 899) @@ -28,14 +28,14 @@ @Test public void shouldMatchASimpleString() throws Exception { CandidateStep candidateStep = new CandidateStep("I laugh", SomeSteps.class.getMethod("aMethod"), null, - PATTERN_BUILDER, MONITOR, new ArgumentConversion(), "Given", "When", "Then"); + PATTERN_BUILDER, MONITOR, new ParameterConverters(), "Given", "When", "Then"); ensureThat(candidateStep.matches("Given I laugh")); } @Test public void shouldMatchAStringWithArguments() throws Exception { CandidateStep candidateStep = new CandidateStep("windows on the $nth floor", SomeSteps.class - .getMethod("aMethod"), null, PATTERN_BUILDER, MONITOR, new ArgumentConversion(), "Given", "When", "Then"); + .getMethod("aMethod"), null, PATTERN_BUILDER, MONITOR, new ParameterConverters(), "Given", "When", "Then"); ensureThat(candidateStep.matches("When windows on the 1st floor")); ensureThat(not(candidateStep.matches("When windows on the 1st floor are open"))); } @@ -44,7 +44,7 @@ public void shouldProvideARealStepUsingTheMatchedString() throws Exception { SomeSteps someSteps = new SomeSteps(); CandidateStep candidateStep = new CandidateStep("I live on the $nth floor", SomeSteps.class.getMethod( - "aMethodWith", String.class), someSteps, PATTERN_BUILDER, MONITOR, new ArgumentConversion(), "Given", "When", "Then"); + "aMethodWith", String.class), someSteps, PATTERN_BUILDER, MONITOR, new ParameterConverters(), "Given", "When", "Then"); Step step = candidateStep.createFrom("Then I live on the 1st floor"); step.perform(); ensureThat((String) someSteps.args, equalTo("1st")); @@ -53,7 +53,7 @@ @Test public void shouldMatchMultilineStrings() throws Exception { CandidateStep candidateStep = new CandidateStep("the grid should look like $grid", SomeSteps.class - .getMethod("aMethod"), null, PATTERN_BUILDER, MONITOR, new ArgumentConversion(), "Given", "When", "Then"); + .getMethod("aMethod"), null, PATTERN_BUILDER, MONITOR, new ParameterConverters(), "Given", "When", "Then"); ensureThat(candidateStep.matches("Then the grid should look like " + NL + "...." + NL + "...." + NL)); } @@ -61,22 +61,22 @@ public void shouldConvertArgsToAppropriateNumbers() throws Exception { SomeSteps someSteps = new SomeSteps(); CandidateStep candidateStep = new CandidateStep("I should live in no. $no", SomeSteps.class.getMethod( - "aMethodWith", int.class), someSteps, PATTERN_BUILDER, MONITOR, new ArgumentConversion(), "Given", "When", "Then"); + "aMethodWith", int.class), someSteps, PATTERN_BUILDER, MONITOR, new ParameterConverters(), "Given", "When", "Then"); candidateStep.createFrom("Then I should live in no. 14").perform(); ensureThat((Integer) someSteps.args, equalTo(14)); candidateStep = new CandidateStep("I should live in no. $no", SomeSteps.class.getMethod("aMethodWith", - long.class), someSteps, PATTERN_BUILDER, MONITOR, new ArgumentConversion(), "Given", "When", "Then"); + long.class), someSteps, PATTERN_BUILDER, MONITOR, new ParameterConverters(), "Given", "When", "Then"); candidateStep.createFrom("Then I should live in no. 14").perform(); ensureThat((Long) someSteps.args, equalTo(14L)); candidateStep = new CandidateStep("I should live in no. $no", SomeSteps.class.getMethod("aMethodWith", - double.class), someSteps, PATTERN_BUILDER, MONITOR, new ArgumentConversion(), "Given", "When", "Then"); + double.class), someSteps, PATTERN_BUILDER, MONITOR, new ParameterConverters(), "Given", "When", "Then"); candidateStep.createFrom("Then I should live in no. 14").perform(); ensureThat((Double) someSteps.args, equalTo(14.0)); candidateStep = new CandidateStep("I should live in no. $no", SomeSteps.class.getMethod("aMethodWith", - float.class), someSteps, PATTERN_BUILDER, MONITOR, new ArgumentConversion(), "Given", "When", "Then"); + float.class), someSteps, PATTERN_BUILDER, MONITOR, new ParameterConverters(), "Given", "When", "Then"); candidateStep.createFrom("Then I should live in no. 14").perform(); ensureThat((Float) someSteps.args, equalTo(14.0f)); } @@ -86,7 +86,7 @@ ScenarioReporter reporter = mock(ScenarioReporter.class); SomeSteps someSteps = new SomeSteps(); CandidateStep candidateStep = new CandidateStep("I live on the $nth floor", SomeSteps.class.getMethod( - "aMethodWith", String.class), someSteps, PATTERN_BUILDER, MONITOR, new ArgumentConversion(), "Given", "When", "Then"); + "aMethodWith", String.class), someSteps, PATTERN_BUILDER, MONITOR, new ParameterConverters(), "Given", "When", "Then"); Step step = candidateStep.createFrom("Then I live on the 1st floor"); StepResult result = step.perform(); @@ -101,7 +101,7 @@ String systemNewline = System.getProperty("line.separator"); SomeSteps someSteps = new SomeSteps(); CandidateStep candidateStep = new CandidateStep("the grid should look like $grid", SomeSteps.class.getMethod( - "aMethodWith", String.class), someSteps, PATTERN_BUILDER, MONITOR, new ArgumentConversion(), "Given", "When", "Then"); + "aMethodWith", String.class), someSteps, PATTERN_BUILDER, MONITOR, new ParameterConverters(), "Given", "When", "Then"); Step step = candidateStep.createFrom("Then the grid should look like" + windowsNewline + ".." + unixNewline + ".." + windowsNewline); step.perform(); @@ -112,22 +112,22 @@ public void shouldConvertArgsToListOfNumbers() throws Exception { SomeSteps someSteps = new SomeSteps(); CandidateStep candidateStep = new CandidateStep("windows on the $nth floors", - methodFor("aMethodWithListOfLongs"), someSteps, PATTERN_BUILDER, MONITOR, new ArgumentConversion(), "Given", "When", "Then"); + methodFor("aMethodWithListOfLongs"), someSteps, PATTERN_BUILDER, MONITOR, new ParameterConverters(), "Given", "When", "Then"); candidateStep.createFrom("When windows on the 1L,2L,3L floors").perform(); ensureThat(((List<?>) someSteps.args).toString(), equalTo(asList(1L, 2L, 3L).toString())); candidateStep = new CandidateStep("windows on the $nth floors", methodFor("aMethodWithListOfIntegers"), - someSteps, PATTERN_BUILDER, MONITOR, new ArgumentConversion(), "Given", "When", "Then"); + someSteps, PATTERN_BUILDER, MONITOR, new ParameterConverters(), "Given", "When", "Then"); candidateStep.createFrom("When windows on the 1,2,3 floors").perform(); ensureThat(((List<?>) someSteps.args).toString(), equalTo(asList(1, 2, 3).toString())); candidateStep = new CandidateStep("windows on the $nth floors", methodFor("aMethodWithListOfDoubles"), - someSteps, PATTERN_BUILDER, MONITOR, new ArgumentConversion(), "Given", "When", "Then"); + someSteps, PATTERN_BUILDER, MONITOR, new ParameterConverters(), "Given", "When", "Then"); candidateStep.createFrom("When windows on the 1.1,2.2,3.3 floors").perform(); ensureThat(((List<?>) someSteps.args).toString(), equalTo(asList(1.1, 2.2, 3.3).toString())); candidateStep = new CandidateStep("windows on the $nth floors", methodFor("aMethodWithListOfFloats"), - someSteps, PATTERN_BUILDER, MONITOR, new ArgumentConversion(), "Given", "When", "Then"); + someSteps, PATTERN_BUILDER, MONITOR, new ParameterConverters(), "Given", "When", "Then"); candidateStep.createFrom("When windows on the 1.1f,2.2f,3.3f floors").perform(); ensureThat(((List<?>) someSteps.args).toString(), equalTo(asList(1.1f, 2.2f, 3.3f).toString())); @@ -137,7 +137,7 @@ public void shouldConvertArgsToListOfStrings() throws Exception { SomeSteps someSteps = new SomeSteps(); CandidateStep candidateStep = new CandidateStep("windows on the $nth floors", - methodFor("aMethodWithListOfStrings"), someSteps, PATTERN_BUILDER, MONITOR, new ArgumentConversion(), "Given", "When", "Then"); + methodFor("aMethodWithListOfStrings"), someSteps, PATTERN_BUILDER, MONITOR, new ParameterConverters(), "Given", "When", "Then"); candidateStep.createFrom("When windows on the 1,2,3 floors").perform(); ensureThat(((List<?>) someSteps.args).toString(), equalTo(asList("1", "2", "3").toString())); }
Deleted: trunk/jbehave-core/src/java/org/jbehave/scenario/steps/ArgumentConversion.java (898 => 899)
--- trunk/jbehave-core/src/java/org/jbehave/scenario/steps/ArgumentConversion.java 2008-08-26 11:10:48 UTC (rev 898) +++ trunk/jbehave-core/src/java/org/jbehave/scenario/steps/ArgumentConversion.java 2008-08-26 13:38:55 UTC (rev 899) @@ -1,143 +0,0 @@ -package org.jbehave.scenario.steps; - -import static java.util.Arrays.asList; - -import java.lang.reflect.ParameterizedType; -import java.lang.reflect.Type; -import java.text.NumberFormat; -import java.text.ParseException; -import java.util.ArrayList; -import java.util.List; - -/** - * Responsible for converting argument values to Java objects. - * - * @author Elizabeth Keogh - * @author Mauro Talevi - */ -public class ArgumentConversion { - - private static final String NL = System.getProperty("line.separator"); - private static final String COMMA = ","; - private static final List<ArgumentConverter> DEFAULT_CONVERTERS = asList(new NumberConverter(), new NumberListConverter(), new StringListConverter()); - private final StepMonitor monitor; - private final List<ArgumentConverter> converters = new ArrayList<ArgumentConverter>(); - - public ArgumentConversion() { - this(new SilentStepMonitor()); - } - - public ArgumentConversion(StepMonitor monitor, ArgumentConverter... customConverters) { - this.monitor = monitor; - this.converters.addAll(asList(customConverters)); - this.converters.addAll(DEFAULT_CONVERTERS); - } - - public Object convert(String value, Type type) { - // check if any converters accepts type - for (ArgumentConverter converter : converters) { - if (converter.accept(type)) { - Object converted = converter.convertValue(value, type); - monitor.convertedValueOfType(value, type, converted, converter.getClass()); - return converted; - } - } - // default to String - return replaceNewlinesWithSystemNewlines(value); - } - - private Object replaceNewlinesWithSystemNewlines(String value) { - return value.replaceAll("(\n)|(\r\n)", NL); - } - - public static interface ArgumentConverter { - - boolean accept(Type type); - - Object convertValue(String value, Type type); - - } - - @SuppressWarnings("serial") - public static class InvalidArgumentException extends RuntimeException { - - public InvalidArgumentException(String message, Throwable cause) { - super(message, cause); - } - - } - - private static class NumberConverter implements ArgumentConverter { - - public boolean accept(Type type) { - if (type instanceof Class) { - return (type == Integer.class || type == int.class || type == Long.class || type == long.class - || type == Double.class || type == double.class || type == Float.class || type == float.class); - } - return false; - } - - public Object convertValue(String value, Type type) { - if (type == Integer.class || type == int.class) { - return Integer.valueOf(value); - } else if (type == Long.class || type == long.class) { - return Long.valueOf(value); - } else if (type == Double.class || type == double.class) { - return Double.valueOf(value); - } else if (type == Float.class || type == float.class) { - return Float.valueOf(value); - } - return value; - } - - } - - private static class NumberListConverter implements ArgumentConverter { - - public boolean accept(Type type) { - if (type instanceof ParameterizedType) { - ParameterizedType parameterizedType = (ParameterizedType) type; - Type rawType = parameterizedType.getRawType(); - Type argumentType = parameterizedType.getActualTypeArguments()[0]; - return List.class.isAssignableFrom((Class<?>) rawType) - && Number.class.isAssignableFrom((Class<?>) argumentType); - } - return false; - } - - public Object convertValue(String value, Type type) { - List<String> values = asList(value.split(COMMA)); - NumberFormat numberFormat = NumberFormat.getInstance(); - List<Number> numbers = new ArrayList<Number>(); - for (String numberValue : values) { - try { - numbers.add(numberFormat.parse(numberValue)); - } catch (ParseException e) { - throw new InvalidArgumentException(numberValue, e); - } - } - return numbers; - } - - } - - private static class StringListConverter implements ArgumentConverter { - - public boolean accept(Type type) { - if (type instanceof ParameterizedType) { - ParameterizedType parameterizedType = (ParameterizedType) type; - Type rawType = parameterizedType.getRawType(); - Type argumentType = parameterizedType.getActualTypeArguments()[0]; - return List.class.isAssignableFrom((Class<?>) rawType) - && String.class.isAssignableFrom((Class<?>) argumentType); - } - return false; - } - - public Object convertValue(String value, Type type) { - return asList(value.split(COMMA)); - } - - } - -}
Modified: trunk/jbehave-core/src/java/org/jbehave/scenario/steps/CandidateStep.java (898 => 899)
--- trunk/jbehave-core/src/java/org/jbehave/scenario/steps/CandidateStep.java 2008-08-26 11:10:48 UTC (rev 898) +++ trunk/jbehave-core/src/java/org/jbehave/scenario/steps/CandidateStep.java 2008-08-26 13:38:55 UTC (rev 899) @@ -19,17 +19,17 @@ private final Method method; private final Steps steps; - private final StepMonitor monitor; + private final StepMonitor stepMonitor; + private final ParameterConverters parameterConverters; private final String[] startingWords; private final Pattern pattern; - private final ArgumentConversion conversion; public CandidateStep(String matchThis, Method method, Steps steps, StepPatternBuilder patterBuilder, - StepMonitor monitor, ArgumentConversion argumentConversion, String... startingWords) { + StepMonitor stepMonitor, ParameterConverters parameterConverters, String... startingWords) { this.method = method; this.steps = steps; - this.monitor = monitor; - this.conversion = argumentConversion; + this.stepMonitor = stepMonitor; + this.parameterConverters = parameterConverters; this.startingWords = startingWords; this.pattern = patterBuilder.buildPattern(matchThis); } @@ -42,7 +42,7 @@ String trimmed = trimStartingWord(word, step); Matcher matcher = pattern.matcher(trimmed); boolean matches = matcher.matches(); - monitor.stepMatchesPattern(step, matches, pattern.pattern()); + stepMonitor.stepMatchesPattern(step, matches, pattern.pattern()); return matches; } @@ -58,7 +58,7 @@ final Object[] args = new Object[matcher.groupCount()]; for (int group = 0; group < args.length; group++) { String arg = matcher.group(group + 1); - Object converted = conversion.convert(arg, types[group]); + Object converted = parameterConverters.convert(arg, types[group]); args[group] = converted; } return createStep(stepAsString, args);
Copied: trunk/jbehave-core/src/java/org/jbehave/scenario/steps/ParameterConverters.java (from rev 898, trunk/jbehave-core/src/java/org/jbehave/scenario/steps/ArgumentConversion.java) (0 => 899)
--- trunk/jbehave-core/src/java/org/jbehave/scenario/steps/ParameterConverters.java (rev 0) +++ trunk/jbehave-core/src/java/org/jbehave/scenario/steps/ParameterConverters.java 2008-08-26 13:38:55 UTC (rev 899) @@ -0,0 +1,143 @@ +package org.jbehave.scenario.steps; + +import static java.util.Arrays.asList; + +import java.lang.reflect.ParameterizedType; +import java.lang.reflect.Type; +import java.text.NumberFormat; +import java.text.ParseException; +import java.util.ArrayList; +import java.util.List; + +/** + * Facade responsible for converting parameter values to Java objects. + * + * @author Elizabeth Keogh + * @author Mauro Talevi + */ +public class ParameterConverters { + + private static final String NL = System.getProperty("line.separator"); + private static final String COMMA = ","; + private static final List<ParameterConverter> DEFAULT_CONVERTERS = asList(new NumberConverter(), new NumberListConverter(), new StringListConverter()); + private final StepMonitor monitor; + private final List<ParameterConverter> converters = new ArrayList<ParameterConverter>(); + + public ParameterConverters() { + this(new SilentStepMonitor()); + } + + public ParameterConverters(StepMonitor monitor, ParameterConverter... customConverters) { + this.monitor = monitor; + this.converters.addAll(asList(customConverters)); + this.converters.addAll(DEFAULT_CONVERTERS); + } + + public Object convert(String value, Type type) { + // check if any converters accepts type + for (ParameterConverter converter : converters) { + if (converter.accept(type)) { + Object converted = converter.convertValue(value, type); + monitor.convertedValueOfType(value, type, converted, converter.getClass()); + return converted; + } + } + // default to String + return replaceNewlinesWithSystemNewlines(value); + } + + private Object replaceNewlinesWithSystemNewlines(String value) { + return value.replaceAll("(\n)|(\r\n)", NL); + } + + public static interface ParameterConverter { + + boolean accept(Type type); + + Object convertValue(String value, Type type); + + } + + @SuppressWarnings("serial") + public static class InvalidParameterException extends RuntimeException { + + public InvalidParameterException(String message, Throwable cause) { + super(message, cause); + } + + } + + private static class NumberConverter implements ParameterConverter { + + public boolean accept(Type type) { + if (type instanceof Class) { + return (type == Integer.class || type == int.class || type == Long.class || type == long.class + || type == Double.class || type == double.class || type == Float.class || type == float.class); + } + return false; + } + + public Object convertValue(String value, Type type) { + if (type == Integer.class || type == int.class) { + return Integer.valueOf(value); + } else if (type == Long.class || type == long.class) { + return Long.valueOf(value); + } else if (type == Double.class || type == double.class) { + return Double.valueOf(value); + } else if (type == Float.class || type == float.class) { + return Float.valueOf(value); + } + return value; + } + + } + + private static class NumberListConverter implements ParameterConverter { + + public boolean accept(Type type) { + if (type instanceof ParameterizedType) { + ParameterizedType parameterizedType = (ParameterizedType) type; + Type rawType = parameterizedType.getRawType(); + Type argumentType = parameterizedType.getActualTypeArguments()[0]; + return List.class.isAssignableFrom((Class<?>) rawType) + && Number.class.isAssignableFrom((Class<?>) argumentType); + } + return false; + } + + public Object convertValue(String value, Type type) { + List<String> values = asList(value.split(COMMA)); + NumberFormat numberFormat = NumberFormat.getInstance(); + List<Number> numbers = new ArrayList<Number>(); + for (String numberValue : values) { + try { + numbers.add(numberFormat.parse(numberValue)); + } catch (ParseException e) { + throw new InvalidParameterException(numberValue, e); + } + } + return numbers; + } + + } + + private static class StringListConverter implements ParameterConverter { + + public boolean accept(Type type) { + if (type instanceof ParameterizedType) { + ParameterizedType parameterizedType = (ParameterizedType) type; + Type rawType = parameterizedType.getRawType(); + Type argumentType = parameterizedType.getActualTypeArguments()[0]; + return List.class.isAssignableFrom((Class<?>) rawType) + && String.class.isAssignableFrom((Class<?>) argumentType); + } + return false; + } + + public Object convertValue(String value, Type type) { + return asList(value.split(COMMA)); + } + + } + +}
Modified: trunk/jbehave-core/src/java/org/jbehave/scenario/steps/Steps.java (898 => 899)
--- trunk/jbehave-core/src/java/org/jbehave/scenario/steps/Steps.java 2008-08-26 11:10:48 UTC (rev 898) +++ trunk/jbehave-core/src/java/org/jbehave/scenario/steps/Steps.java 2008-08-26 13:38:55 UTC (rev 899) @@ -13,17 +13,19 @@ private final StepPatternBuilder patternBuilder; private final StepMonitor stepMonitor; - private final ArgumentConversion argumentConversion; + private final ParameterConverters parameterConverters; private final String[] startingWords; public Steps() { - this(new PrefixCapturingPatternBuilder(), new SilentStepMonitor(), new ArgumentConversion(), "Given", "When", "Then", "And"); + this(new PrefixCapturingPatternBuilder(), new SilentStepMonitor(), new ParameterConverters(), "Given", "When", + "Then", "And"); } - public Steps(StepPatternBuilder patternBuilder, StepMonitor stepMonitor, ArgumentConversion argumentConversion, String... startingWords) { + public Steps(StepPatternBuilder patternBuilder, StepMonitor stepMonitor, ParameterConverters parameterConverters, + String... startingWords) { this.patternBuilder = patternBuilder; this.stepMonitor = stepMonitor; - this.argumentConversion = argumentConversion; + this.parameterConverters = parameterConverters; this.startingWords = startingWords; } @@ -47,6 +49,7 @@ } private void createCandidateStep(ArrayList<CandidateStep> steps, Method method, String stepAsString) { - steps.add(new CandidateStep(stepAsString, method, this, patternBuilder, stepMonitor, argumentConversion, startingWords)); + steps.add(new CandidateStep(stepAsString, method, this, patternBuilder, stepMonitor, parameterConverters, + startingWords)); } }
To unsubscribe from this list please visit:
