    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    }