1 /*
2 * Licensed to the Apache Software Foundation (ASF) under one or more
3 * contributor license agreements. See the NOTICE file distributed with
4 * this work for additional information regarding copyright ownership.
5 * The ASF licenses this file to You under the Apache License, Version 2.0
6 * (the "License"); you may not use this file except in compliance with
7 * the License. You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17
18 package org.apache.commons.beanutils.locale.converters;
19
20 import org.apache.commons.beanutils.ConversionException;
21
22 import java.util.Locale;
23 import java.text.ParseException;
24
25
26 /**
27 * <p>Standard {@link org.apache.commons.beanutils.locale.LocaleConverter}
28 * implementation that converts an incoming
29 * locale-sensitive String into a <code>java.math.BigDecimal</code> object,
30 * optionally using a default value or throwing a
31 * {@link org.apache.commons.beanutils.ConversionException}
32 * if a conversion error occurs.</p>
33 *
34 * @version $Id$
35 */
36
37 public class FloatLocaleConverter extends DecimalLocaleConverter {
38
39
40 // ----------------------------------------------------------- Constructors
41
42 /**
43 * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter}
44 * that will throw a {@link org.apache.commons.beanutils.ConversionException}
45 * if a conversion error occurs. The locale is the default locale for
46 * this instance of the Java Virtual Machine and an unlocalized pattern is used
47 * for the convertion.
48 *
49 */
50 public FloatLocaleConverter() {
51
52 this(false);
53 }
54
55 /**
56 * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter}
57 * that will throw a {@link org.apache.commons.beanutils.ConversionException}
58 * if a conversion error occurs. The locale is the default locale for
59 * this instance of the Java Virtual Machine.
60 *
61 * @param locPattern Indicate whether the pattern is localized or not
62 */
63 public FloatLocaleConverter(final boolean locPattern) {
64
65 this(Locale.getDefault(), locPattern);
66 }
67
68 /**
69 * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter}
70 * that will throw a {@link org.apache.commons.beanutils.ConversionException}
71 * if a conversion error occurs. An unlocalized pattern is used for the convertion.
72 *
73 * @param locale The locale
74 */
75 public FloatLocaleConverter(final Locale locale) {
76
77 this(locale, false);
78 }
79
80 /**
81 * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter}
82 * that will throw a {@link org.apache.commons.beanutils.ConversionException}
83 * if a conversion error occurs.
84 *
85 * @param locale The locale
86 * @param locPattern Indicate whether the pattern is localized or not
87 */
88 public FloatLocaleConverter(final Locale locale, final boolean locPattern) {
89
90 this(locale, (String) null, locPattern);
91 }
92
93 /**
94 * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter}
95 * that will throw a {@link org.apache.commons.beanutils.ConversionException}
96 * if a conversion error occurs. An unlocalized pattern is used for the convertion.
97 *
98 * @param locale The locale
99 * @param pattern The convertion pattern
100 */
101 public FloatLocaleConverter(final Locale locale, final String pattern) {
102
103 this(locale, pattern, false);
104 }
105
106 /**
107 * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter}
108 * that will throw a {@link org.apache.commons.beanutils.ConversionException}
109 * if a conversion error occurs.
110 *
111 * @param locale The locale
112 * @param pattern The convertion pattern
113 * @param locPattern Indicate whether the pattern is localized or not
114 */
115 public FloatLocaleConverter(final Locale locale, final String pattern, final boolean locPattern) {
116
117 super(locale, pattern, locPattern);
118 }
119
120 /**
121 * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter}
122 * that will return the specified default value
123 * if a conversion error occurs. The locale is the default locale for
124 * this instance of the Java Virtual Machine and an unlocalized pattern is used
125 * for the convertion.
126 *
127 * @param defaultValue The default value to be returned
128 */
129 public FloatLocaleConverter(final Object defaultValue) {
130
131 this(defaultValue, false);
132 }
133
134 /**
135 * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter}
136 * that will return the specified default value
137 * if a conversion error occurs. The locale is the default locale for
138 * this instance of the Java Virtual Machine.
139 *
140 * @param defaultValue The default value to be returned
141 * @param locPattern Indicate whether the pattern is localized or not
142 */
143 public FloatLocaleConverter(final Object defaultValue, final boolean locPattern) {
144
145 this(defaultValue, Locale.getDefault(), locPattern);
146 }
147
148 /**
149 * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter}
150 * that will return the specified default value
151 * if a conversion error occurs. An unlocalized pattern is used for the convertion.
152 *
153 * @param defaultValue The default value to be returned
154 * @param locale The locale
155 */
156 public FloatLocaleConverter(final Object defaultValue, final Locale locale) {
157
158 this(defaultValue, locale, false);
159 }
160
161 /**
162 * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter}
163 * that will return the specified default value
164 * if a conversion error occurs.
165 *
166 * @param defaultValue The default value to be returned
167 * @param locale The locale
168 * @param locPattern Indicate whether the pattern is localized or not
169 */
170 public FloatLocaleConverter(final Object defaultValue, final Locale locale, final boolean locPattern) {
171
172 this(defaultValue, locale, null, locPattern);
173 }
174
175 /**
176 * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter}
177 * that will return the specified default value
178 * if a conversion error occurs. An unlocalized pattern is used for the convertion.
179 *
180 * @param defaultValue The default value to be returned
181 * @param locale The locale
182 * @param pattern The convertion pattern
183 */
184 public FloatLocaleConverter(final Object defaultValue, final Locale locale, final String pattern) {
185
186 this(defaultValue, locale, pattern, false);
187 }
188
189 /**
190 * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter}
191 * that will return the specified default value
192 * if a conversion error occurs.
193 *
194 * @param defaultValue The default value to be returned
195 * @param locale The locale
196 * @param pattern The convertion pattern
197 * @param locPattern Indicate whether the pattern is localized or not
198 */
199 public FloatLocaleConverter(final Object defaultValue, final Locale locale, final String pattern, final boolean locPattern) {
200
201 super(defaultValue, locale, pattern, locPattern);
202 }
203
204 /**
205 * Convert the specified locale-sensitive input object into an output object of the
206 * specified type. This method will return Float value or throw exception if value
207 * can not be stored in the Float.
208 *
209 * @param value The input object to be converted
210 * @param pattern The pattern is used for the convertion
211 * @return The converted value
212 *
213 * @throws ConversionException if conversion cannot be performed
214 * successfully
215 * @throws ParseException if an error occurs parsing a String to a Number
216 */
217 @Override
218 protected Object parse(final Object value, final String pattern) throws ParseException {
219 final Number parsed = (Number) super.parse(value, pattern);
220 final double doubleValue = parsed.doubleValue();
221 final double posDouble = (doubleValue >= 0) ? doubleValue : (doubleValue * -1);
222 if (posDouble != 0 && (posDouble < Float.MIN_VALUE || posDouble > Float.MAX_VALUE)) {
223 throw new ConversionException("Supplied number is not of type Float: "+parsed);
224 }
225 return new Float(parsed.floatValue()); // unlike superclass it returns Float type
226 }
227 }