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.lang.Integer</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 IntegerLocaleConverter 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
051 public IntegerLocaleConverter() {
052
053 this(false);
054 }
055
056 /**
057 * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter}
058 * that will throw a {@link org.apache.commons.beanutils.ConversionException}
059 * if a conversion error occurs. The locale is the default locale for
060 * this instance of the Java Virtual Machine.
061 *
062 * @param locPattern Indicate whether the pattern is localized or not
063 */
064 public IntegerLocaleConverter(boolean locPattern) {
065
066 this(Locale.getDefault(), locPattern);
067 }
068
069 /**
070 * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter}
071 * that will throw a {@link org.apache.commons.beanutils.ConversionException}
072 * if a conversion error occurs. An unlocalized pattern is used for the convertion.
073 *
074 * @param locale The locale
075 */
076 public IntegerLocaleConverter(Locale locale) {
077
078 this(locale, false);
079 }
080
081 /**
082 * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter}
083 * that will throw a {@link org.apache.commons.beanutils.ConversionException}
084 * if a conversion error occurs.
085 *
086 * @param locale The locale
087 * @param locPattern Indicate whether the pattern is localized or not
088 */
089 public IntegerLocaleConverter(Locale locale, boolean locPattern) {
090
091 this(locale, (String) null, locPattern);
092 }
093
094 /**
095 * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter}
096 * that will throw a {@link org.apache.commons.beanutils.ConversionException}
097 * if a conversion error occurs. An unlocalized pattern is used for the convertion.
098 *
099 * @param locale The locale
100 * @param pattern The convertion pattern
101 */
102 public IntegerLocaleConverter(Locale locale, String pattern) {
103
104 this(locale, pattern, false);
105 }
106
107 /**
108 * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter}
109 * that will throw a {@link org.apache.commons.beanutils.ConversionException}
110 * if a conversion error occurs.
111 *
112 * @param locale The locale
113 * @param pattern The convertion pattern
114 * @param locPattern Indicate whether the pattern is localized or not
115 */
116 public IntegerLocaleConverter(Locale locale, String pattern, boolean locPattern) {
117
118 super(locale, pattern, locPattern);
119 }
120
121 /**
122 * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter}
123 * that will return the specified default value
124 * if a conversion error occurs. The locale is the default locale for
125 * this instance of the Java Virtual Machine and an unlocalized pattern is used
126 * for the convertion.
127 *
128 * @param defaultValue The default value to be returned
129 */
130 public IntegerLocaleConverter(Object defaultValue) {
131
132 this(defaultValue, false);
133 }
134
135 /**
136 * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter}
137 * that will return the specified default value
138 * if a conversion error occurs. The locale is the default locale for
139 * this instance of the Java Virtual Machine.
140 *
141 * @param defaultValue The default value to be returned
142 * @param locPattern Indicate whether the pattern is localized or not
143 */
144 public IntegerLocaleConverter(Object defaultValue, boolean locPattern) {
145
146 this(defaultValue, Locale.getDefault(), locPattern);
147 }
148
149 /**
150 * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter}
151 * that will return the specified default value
152 * if a conversion error occurs. An unlocalized pattern is used for the convertion.
153 *
154 * @param defaultValue The default value to be returned
155 * @param locale The locale
156 */
157 public IntegerLocaleConverter(Object defaultValue, Locale locale) {
158
159 this(defaultValue, locale, false);
160 }
161
162 /**
163 * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter}
164 * that will return the specified default value
165 * if a conversion error occurs.
166 *
167 * @param defaultValue The default value to be returned
168 * @param locale The locale
169 * @param locPattern Indicate whether the pattern is localized or not
170 */
171 public IntegerLocaleConverter(Object defaultValue, Locale locale, boolean locPattern) {
172
173 this(defaultValue, locale, null, locPattern);
174 }
175
176 /**
177 * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter}
178 * that will return the specified default value
179 * if a conversion error occurs. An unlocalized pattern is used for the convertion.
180 *
181 * @param defaultValue The default value to be returned
182 * @param locale The locale
183 * @param pattern The convertion pattern
184 */
185 public IntegerLocaleConverter(Object defaultValue, Locale locale, String pattern) {
186
187 this(defaultValue, locale, pattern, false);
188 }
189
190 /**
191 * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter}
192 * that will return the specified default value
193 * if a conversion error occurs.
194 *
195 * @param defaultValue The default value to be returned
196 * @param locale The locale
197 * @param pattern The convertion pattern
198 * @param locPattern Indicate whether the pattern is localized or not
199 */
200 public IntegerLocaleConverter(Object defaultValue, Locale locale, String pattern, boolean locPattern) {
201
202 super(defaultValue, locale, pattern, locPattern);
203 }
204
205 /**
206 * Convert the specified locale-sensitive input object into an output object of the
207 * specified type. This method will return Integer type.
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 if (parsed.longValue() != parsed.intValue()) {
220 throw new ConversionException("Suplied number is not of type Integer: " + parsed.longValue());
221 }
222 return new Integer(parsed.intValue()); // unlike superclass it will return proper Integer
223 }
224 }