Title: [899] trunk/jbehave-core/src/java/org/jbehave/scenario/steps: Renamed ArgumentConverter to ParameterConverter - following Dan's suggestion.

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:

http://xircles.codehaus.org/manage_email

Reply via email to