01: package org.vraptor.converter;
02:
03: import java.text.NumberFormat;
04: import java.text.ParseException;
05: import java.util.Locale;
06:
07: import org.apache.log4j.Logger;
08: import org.vraptor.LogicRequest;
09: import org.vraptor.i18n.JstlWrapper;
10:
11: /**
12: * Locale based Float converter. Uses the error key invalid_value if unable to
13: * parse its information.
14: *
15: * @author Nico Steppat
16: */
17: public class LocaleFloatConverter implements Converter {
18:
19: private final JstlWrapper jstlWrapper = new JstlWrapper();
20:
21: private static final Logger LOG = Logger
22: .getLogger(LocaleFloatConverter.class);
23:
24: public Object convert(String value, Class<?> type,
25: LogicRequest context) throws ConversionException {
26:
27: if (value == null || value.equals("")) {
28: return null;
29: }
30: Locale locale = jstlWrapper.findLocale((LogicRequest) context);
31: if (locale == null) {
32: locale = Locale.getDefault();
33: }
34:
35: try {
36: Number number = NumberFormat.getInstance(locale).parse(
37: value);
38: return new Float(number.floatValue());
39: } catch (ParseException e) {
40: LOG.error("Unable to parse string " + value, e);
41: throw new ConversionException("invalid_value",
42: "Unable to parse string " + value, e);
43: }
44: }
45:
46: /**
47: * Returns the list of supported types
48: *
49: * @see org.vraptor.converter.Converter#getSupportedTypes()
50: */
51: public Class<?>[] getSupportedTypes() {
52: return new Class[] { Float.class };
53: }
54:
55: }
|