001 /* 002 * Licensed to the Apache Software Foundation (ASF) under one or more 003 * contributor license agreements. See the NOTICE file distributed with 004 * this work for additional information regarding copyright ownership. 005 * The ASF licenses this file to You under the Apache License, Version 2.0 006 * (the "License"); you may not use this file except in compliance with 007 * the License. You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 */ 017 018 package org.apache.commons.beanutils.locale.converters; 019 020 import org.apache.commons.beanutils.ConversionException; 021 022 import java.util.Locale; 023 import java.text.ParseException; 024 025 026 /** 027 * <p>Standard {@link org.apache.commons.beanutils.locale.LocaleConverter} 028 * implementation that converts an incoming 029 * locale-sensitive String into a <code>java.math.BigDecimal</code> object, 030 * optionally using a default value or throwing a 031 * {@link org.apache.commons.beanutils.ConversionException} 032 * if a conversion error occurs.</p> 033 * 034 * @author Yauheny Mikulski 035 */ 036 037 public class FloatLocaleConverter extends DecimalLocaleConverter { 038 039 040 // ----------------------------------------------------------- Constructors 041 042 /** 043 * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 044 * that will throw a {@link org.apache.commons.beanutils.ConversionException} 045 * if a conversion error occurs. The locale is the default locale for 046 * this instance of the Java Virtual Machine and an unlocalized pattern is used 047 * for the convertion. 048 * 049 */ 050 public FloatLocaleConverter() { 051 052 this(false); 053 } 054 055 /** 056 * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 057 * that will throw a {@link org.apache.commons.beanutils.ConversionException} 058 * if a conversion error occurs. The locale is the default locale for 059 * this instance of the Java Virtual Machine. 060 * 061 * @param locPattern Indicate whether the pattern is localized or not 062 */ 063 public FloatLocaleConverter(boolean locPattern) { 064 065 this(Locale.getDefault(), locPattern); 066 } 067 068 /** 069 * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 070 * that will throw a {@link org.apache.commons.beanutils.ConversionException} 071 * if a conversion error occurs. An unlocalized pattern is used for the convertion. 072 * 073 * @param locale The locale 074 */ 075 public FloatLocaleConverter(Locale locale) { 076 077 this(locale, false); 078 } 079 080 /** 081 * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 082 * that will throw a {@link org.apache.commons.beanutils.ConversionException} 083 * if a conversion error occurs. 084 * 085 * @param locale The locale 086 * @param locPattern Indicate whether the pattern is localized or not 087 */ 088 public FloatLocaleConverter(Locale locale, boolean locPattern) { 089 090 this(locale, (String) null, locPattern); 091 } 092 093 /** 094 * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 095 * that will throw a {@link org.apache.commons.beanutils.ConversionException} 096 * if a conversion error occurs. An unlocalized pattern is used for the convertion. 097 * 098 * @param locale The locale 099 * @param pattern The convertion pattern 100 */ 101 public FloatLocaleConverter(Locale locale, 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(Locale locale, String pattern, 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(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(Object defaultValue, 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(Object defaultValue, 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(Object defaultValue, Locale locale, 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(Object defaultValue, Locale locale, 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(Object defaultValue, Locale locale, String pattern, 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 * @exception ConversionException if conversion cannot be performed 214 * successfully 215 * @throws ParseException if an error occurs parsing a String to a Number 216 */ 217 protected Object parse(Object value, String pattern) throws ParseException { 218 final Number parsed = (Number) super.parse(value, pattern); 219 double doubleValue = parsed.doubleValue(); 220 double posDouble = (doubleValue >= (double)0) ? doubleValue : (doubleValue * (double)-1); 221 if (posDouble != 0 && (posDouble < Float.MIN_VALUE || posDouble > Float.MAX_VALUE)) { 222 throw new ConversionException("Supplied number is not of type Float: "+parsed); 223 } 224 return new Float(parsed.floatValue()); // unlike superclass it returns Float type 225 } 226 }