- Revision
- 969
- Author
- mauro
- Date
- 2008-10-07 02:00:25 -0500 (Tue, 07 Oct 2008)
Log Message
JBEHAVE-137: Merged -c 968 from branches/jbehave-2.0.x
Modified Paths
Diff
Modified: trunk/jbehave-core/src/behaviour/org/jbehave/scenario/steps/ParameterConvertersBehaviour.java (968 => 969)
--- trunk/jbehave-core/src/behaviour/org/jbehave/scenario/steps/ParameterConvertersBehaviour.java 2008-10-07 06:54:44 UTC (rev 968) +++ trunk/jbehave-core/src/behaviour/org/jbehave/scenario/steps/ParameterConvertersBehaviour.java 2008-10-07 07:00:25 UTC (rev 969) @@ -5,6 +5,7 @@ import java.beans.IntrospectionException; import java.lang.reflect.Type; +import java.text.DecimalFormat; import java.text.NumberFormat; import java.text.ParseException; import java.util.List; @@ -42,14 +43,14 @@ @Test public void shouldConvertCommaSeparatedValuesToListsOfNumbersWithCustomFormat() throws ParseException, IntrospectionException { - NumberFormat numberFormat = NumberFormat.getNumberInstance(); + NumberFormat numberFormat = new DecimalFormat("#,####"); ParameterConverters converters = new ParameterConverters( - new NumberListConverter(numberFormat)); + new NumberListConverter(numberFormat, " ")); Type type = SomeSteps.methodFor("aMethodWithListOfNumbers") .getGenericParameterTypes()[0]; List<Number> list = (List<Number>) converters.convert( - "3, 0.5, 6.1f, 8.00", type); - ensureThat(list.get(0), equalTo(numberFormat.parse("3"))); + "3,000 0.5 6.1f 8.00", type); + ensureThat(list.get(0), equalTo(numberFormat.parse("3,000"))); ensureThat(list.get(1), equalTo(numberFormat.parse("0.5"))); ensureThat(list.get(2), equalTo(numberFormat.parse("6.1f"))); ensureThat(list.get(3), equalTo(numberFormat.parse("8.00")));
Modified: trunk/jbehave-core/src/java/org/jbehave/scenario/steps/ParameterConverters.java (968 => 969)
--- trunk/jbehave-core/src/java/org/jbehave/scenario/steps/ParameterConverters.java 2008-10-07 06:54:44 UTC (rev 968) +++ trunk/jbehave-core/src/java/org/jbehave/scenario/steps/ParameterConverters.java 2008-10-07 07:00:25 UTC (rev 969) @@ -17,152 +17,170 @@ */ 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>(); + 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() { + this(new SilentStepMonitor()); + } - public ParameterConverters(ParameterConverter... customConverters) { - this(new SilentStepMonitor(), customConverters); - } - - public ParameterConverters(StepMonitor monitor, ParameterConverter... customConverters) { - this.monitor = monitor; - this.converters.addAll(asList(customConverters)); - this.converters.addAll(DEFAULT_CONVERTERS); - } + public ParameterConverters(ParameterConverter... customConverters) { + this(new SilentStepMonitor(), customConverters); + } - 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); - } + public ParameterConverters(StepMonitor monitor, + ParameterConverter... customConverters) { + this.monitor = monitor; + this.converters.addAll(asList(customConverters)); + this.converters.addAll(DEFAULT_CONVERTERS); + } - private Object replaceNewlinesWithSystemNewlines(String value) { - return value.replaceAll("(\n)|(\r\n)", NL); - } + 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); + } - public static interface ParameterConverter { + private Object replaceNewlinesWithSystemNewlines(String value) { + return value.replaceAll("(\n)|(\r\n)", NL); + } - boolean accept(Type type); + public static interface ParameterConverter { - Object convertValue(String value, Type type); + 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); - } + @SuppressWarnings("serial") + public static class InvalidParameterException extends RuntimeException { - } + public InvalidParameterException(String message, Throwable cause) { + super(message, cause); + } - public static class NumberConverter implements ParameterConverter { - @SuppressWarnings("unchecked") - private static List<Class> acceptedClasses = asList(new Class[] { - Integer.class, int.class, Long.class, long.class, - Double.class, double.class, Float.class, float.class - }); - - public boolean accept(Type type) { - if (type instanceof Class) { - return acceptedClasses.contains(type); - } - 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; - } + public static class NumberConverter implements ParameterConverter { + @SuppressWarnings("unchecked") + private static List<Class> acceptedClasses = asList(new Class[] { + Integer.class, int.class, Long.class, long.class, Double.class, + double.class, Float.class, float.class }); - } + public boolean accept(Type type) { + if (type instanceof Class) { + return acceptedClasses.contains(type); + } + return false; + } - public static class NumberListConverter implements ParameterConverter { + 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 NumberFormat numberFormat; - - public NumberListConverter() { - this(NumberFormat.getInstance()); + } + + public static class NumberListConverter implements ParameterConverter { + + private NumberFormat numberFormat; + private String valueSeparator; + + public NumberListConverter() { + this(NumberFormat.getInstance(), COMMA); } - public NumberListConverter(NumberFormat numberFormat) { + public NumberListConverter(NumberFormat numberFormat, + String valueSeparator) { this.numberFormat = numberFormat; + this.valueSeparator = valueSeparator; } 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; - } + 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 = trim(asList(value.split(COMMA))); - 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; - } + public Object convertValue(String value, Type type) { + List<String> values = trim(asList(value.split(valueSeparator))); + 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; + } - } + } - public static class StringListConverter implements ParameterConverter { + public 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; - } + private String valueSeparator; - public Object convertValue(String value, Type type) { - return trim(asList(value.split(COMMA))); - } + public StringListConverter() { + this(COMMA); + } - } + public StringListConverter(String valueSeparator) { + this.valueSeparator = valueSeparator; + } - public static List<String> trim(List<String> values) { - List<String> trimmed = new ArrayList<String>(); - for ( String value : values ){ - trimmed.add(value.trim()); - } - return trimmed; - } + 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 trim(asList(value.split(valueSeparator))); + } + + } + + public static List<String> trim(List<String> values) { + List<String> trimmed = new ArrayList<String>(); + for (String value : values) { + trimmed.add(value.trim()); + } + return trimmed; + } + }
To unsubscribe from this list please visit:
