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 *      https://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 java.text.ParseException;
021import java.util.Locale;
022
023/**
024 * <p>Standard {@link org.apache.commons.beanutils.locale.LocaleConverter}
025 * implementation that converts an incoming
026 * locale-sensitive String into a <code>java.lang.Double</code> object,
027 * optionally using a default value or throwing a
028 * {@link org.apache.commons.beanutils.ConversionException}
029 * if a conversion error occurs.</p>
030 *
031 */
032
033public class DoubleLocaleConverter extends DecimalLocaleConverter {
034
035    /**
036     * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter}
037     * that will throw a {@link org.apache.commons.beanutils.ConversionException}
038     * if a conversion error occurs. The locale is the default locale for
039     * this instance of the Java Virtual Machine and an unlocalized pattern is used
040     * for the convertion.
041     *
042     */
043    public DoubleLocaleConverter() {
044
045        this(false);
046    }
047
048    /**
049     * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter}
050     * that will throw a {@link org.apache.commons.beanutils.ConversionException}
051     * if a conversion error occurs. The locale is the default locale for
052     * this instance of the Java Virtual Machine.
053     *
054     * @param locPattern    Indicate whether the pattern is localized or not
055     */
056    public DoubleLocaleConverter(final boolean locPattern) {
057
058        this(Locale.getDefault(), locPattern);
059    }
060
061    /**
062     * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter}
063     * that will throw a {@link org.apache.commons.beanutils.ConversionException}
064     * if a conversion error occurs. An unlocalized pattern is used for the convertion.
065     *
066     * @param locale        The locale
067     */
068    public DoubleLocaleConverter(final Locale locale) {
069
070        this(locale, false);
071    }
072
073    /**
074     * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter}
075     * that will throw a {@link org.apache.commons.beanutils.ConversionException}
076     * if a conversion error occurs.
077     *
078     * @param locale        The locale
079     * @param locPattern    Indicate whether the pattern is localized or not
080     */
081    public DoubleLocaleConverter(final Locale locale, final boolean locPattern) {
082
083        this(locale, (String) null, locPattern);
084    }
085
086    /**
087     * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter}
088     * that will throw a {@link org.apache.commons.beanutils.ConversionException}
089     * if a conversion error occurs. An unlocalized pattern is used for the convertion.
090     *
091     * @param locale        The locale
092     * @param pattern       The convertion pattern
093     */
094    public DoubleLocaleConverter(final Locale locale, final String pattern) {
095
096        this(locale, pattern, false);
097    }
098
099    /**
100     * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter}
101     * that will throw a {@link org.apache.commons.beanutils.ConversionException}
102     * if a conversion error occurs.
103     *
104     * @param locale        The locale
105     * @param pattern       The convertion pattern
106     * @param locPattern    Indicate whether the pattern is localized or not
107     */
108    public DoubleLocaleConverter(final Locale locale, final String pattern, final boolean locPattern) {
109
110        super(locale, pattern, locPattern);
111    }
112
113    /**
114     * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter}
115     * that will return the specified default value
116     * if a conversion error occurs. The locale is the default locale for
117     * this instance of the Java Virtual Machine and an unlocalized pattern is used
118     * for the convertion.
119     *
120     * @param defaultValue  The default value to be returned
121     */
122    public DoubleLocaleConverter(final Object defaultValue) {
123
124        this(defaultValue, false);
125    }
126
127    /**
128     * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter}
129     * that will return the specified default value
130     * if a conversion error occurs. The locale is the default locale for
131     * this instance of the Java Virtual Machine.
132     *
133     * @param defaultValue  The default value to be returned
134     * @param locPattern    Indicate whether the pattern is localized or not
135     */
136    public DoubleLocaleConverter(final Object defaultValue, final boolean locPattern) {
137
138        this(defaultValue, Locale.getDefault(), locPattern);
139    }
140
141    /**
142     * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter}
143     * that will return the specified default value
144     * if a conversion error occurs. An unlocalized pattern is used for the convertion.
145     *
146     * @param defaultValue  The default value to be returned
147     * @param locale        The locale
148     */
149    public DoubleLocaleConverter(final Object defaultValue, final Locale locale) {
150
151        this(defaultValue, locale, false);
152    }
153
154    /**
155     * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter}
156     * that will return the specified default value
157     * if a conversion error occurs.
158     *
159     * @param defaultValue  The default value to be returned
160     * @param locale        The locale
161     * @param locPattern    Indicate whether the pattern is localized or not
162     */
163    public DoubleLocaleConverter(final Object defaultValue, final Locale locale, final boolean locPattern) {
164
165        this(defaultValue, locale, null, locPattern);
166    }
167
168    /**
169     * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter}
170     * that will return the specified default value
171     * if a conversion error occurs. An unlocalized pattern is used for the convertion.
172     *
173     * @param defaultValue  The default value to be returned
174     * @param locale        The locale
175     * @param pattern       The convertion pattern
176     */
177    public DoubleLocaleConverter(final Object defaultValue, final Locale locale, final String pattern) {
178
179        this(defaultValue, locale, pattern, false);
180    }
181
182    /**
183     * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter}
184     * that will return the specified default value
185     * if a conversion error occurs.
186     *
187     * @param defaultValue  The default value to be returned
188     * @param locale        The locale
189     * @param pattern       The convertion pattern
190     * @param locPattern    Indicate whether the pattern is localized or not
191     */
192    public DoubleLocaleConverter(final Object defaultValue, final Locale locale, final String pattern, final boolean locPattern) {
193
194        super(defaultValue, locale, pattern, locPattern);
195    }
196
197    /**
198     * Convert the specified locale-sensitive input object into an output object of the
199     * specified type. This method will return Double type.
200     *
201     * @param value The input object to be converted
202     * @param pattern The pattern is used for the convertion
203     * @return The converted value
204     * @throws org.apache.commons.beanutils.ConversionException if conversion cannot be performed
205     *  successfully
206     * @throws ParseException if an error occurs parsing a String to a Number
207     */
208    @Override
209    protected Object parse(final Object value, final String pattern) throws ParseException {
210        final Number result = (Number) super.parse(value, pattern);
211        if (result instanceof Long) {
212            return Double.valueOf(result.doubleValue());
213        }
214        return result;
215    }
216
217}
218