1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 package nl.openedge.baritus.converters;
32
33 import java.util.Locale;
34 import java.text.ParseException;
35
36 /***
37 * localized float converter
38 * @author Eelco Hillenius
39 */
40 public class FloatLocaleConverter extends DecimalLocaleConverter
41 {
42
43
44
45 /***
46 * Create a {@link LocaleConverter}
47 * that will throw a {@link ConversionException}
48 * if a conversion error occurs. The locale is the default locale for
49 * this instance of the Java Virtual Machine and an unlocalized pattern is used
50 * for the convertion.
51 *
52 */
53 public FloatLocaleConverter()
54 {
55 this(Locale.getDefault());
56 }
57
58 /***
59 * Create a {@link LocaleConverter}
60 * that will throw a {@link ConversionException}
61 * if a conversion error occurs. An unlocalized pattern is used for the convertion.
62 *
63 * @param locale The locale
64 */
65 public FloatLocaleConverter(Locale locale)
66 {
67 this(locale, null);
68 }
69
70 /***
71 * Create a {@link LocaleConverter}
72 * that will throw a {@link ConversionException}
73 * if a conversion error occurs. An unlocalized pattern is used for the convertion.
74 *
75 * @param locale The locale
76 * @param pattern The convertion pattern
77 */
78 public FloatLocaleConverter(Locale locale, String pattern)
79 {
80 this(locale, pattern, false);
81 }
82
83 /***
84 * Create a {@link LocaleConverter}
85 * that will throw a {@link ConversionException}
86 * if a conversion error occurs.
87 *
88 * @param locale The locale
89 * @param pattern The convertion pattern
90 * @param locPattern Indicate whether the pattern is localized or not
91 */
92 public FloatLocaleConverter(
93 Locale locale,
94 String pattern,
95 boolean locPattern)
96 {
97 super(locale, pattern, locPattern);
98 }
99
100
101 /***
102 * Convert the specified locale-sensitive input object into an output object of the
103 * specified type. This method will return Float value or throw exception if value
104 * can not be stored in the Float.
105 *
106 * @param value The input object to be converted
107 * @param pattern The pattern is used for the convertion
108 *
109 * @exception ConversionException if conversion cannot be performed
110 * successfully
111 */
112 protected Object parse(Object value, String pattern) throws ParseException
113 {
114 final Number parsed = (Number) super.parse(value, pattern);
115 if (Math.abs(parsed.doubleValue() - parsed.floatValue())
116 > parsed.floatValue() * 0.00001)
117 {
118 throw new ConversionException(
119 "Suplied number is not of type Float: " + parsed.longValue());
120 }
121 return new Float(parsed.floatValue());
122
123 }
124
125 /***
126 * Convert the specified locale-sensitive input object into an output object of the
127 * specified type.
128 *
129 * @param type Data type to which this value should be converted
130 * @param value The input object to be converted
131 * @param pattern The pattern is used for the convertion
132 *
133 * @exception ConversionException if conversion cannot be performed
134 * successfully
135 */
136 public Object convert(Class type, Object value, String pattern)
137 {
138 if (value == null)
139 {
140 return null;
141 }
142
143 Number temp = getNumber(value, pattern);
144
145 return (temp instanceof Float) ? (Float)temp : new Float(temp.floatValue());
146 }
147 }