    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
    018package org.apache.commons.beanutils.locale.converters;
    019
    020import org.apache.commons.beanutils.ConversionException;
    021
    022import java.util.Locale;
    023import 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 * @version $Id$
    035 */
    036
    037public 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(final 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(final 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(final Locale locale, final 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(final Locale locale, final 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(final Locale locale, final String pattern, final 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(final 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(final Object defaultValue, final 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(final Object defaultValue, final 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(final Object defaultValue, final Locale locale, final 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(final Object defaultValue, final Locale locale, final 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(final Object defaultValue, final Locale locale, final String pattern, final 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     * @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        if (parsed.longValue() != parsed.intValue()) {
    221            throw new ConversionException("Suplied number is not of type Integer: " + parsed.longValue());
    222        }
    223        return new Integer(parsed.intValue()); // unlike superclass it will return proper Integer
    224    }
    225}