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    }