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.beanutils2.locale;
019
020import java.util.Locale;
021
022/**
023 * <p>
024 * Utility methods for converting locale-sensitive String scalar values to objects of the specified Class, String arrays to arrays of the specified Class and
025 * object to locale-sensitive String scalar value.
026 * </p>
027 *
028 * <p>
029 * The implementations for these method are provided by {@link LocaleConvertUtilsBean}. These static utility method use the default instance. More sophisticated
030 * can be provided by using a {@code LocaleConvertUtilsBean} instance.
031 * </p>
032 */
033public class LocaleConvertUtils {
034
035    /**
036     * <p>
037     * Converts the specified locale-sensitive value into a String.
038     * </p>
039     *
040     * <p>
041     * For more details see {@code LocaleConvertUtilsBean}
042     * </p>
043     *
044     * @param value The Value to be converted
045     * @return the converted value
046     * @see LocaleConvertUtilsBean#convert(Object)
047     */
048    public static String convert(final Object value) {
049        return LocaleConvertUtilsBean.getInstance().convert(value);
050    }
051
052    /**
053     * <p>
054     * Converts the specified locale-sensitive value into a String using the particular conversion pattern.
055     * </p>
056     *
057     * <p>
058     * For more details see {@code LocaleConvertUtilsBean}
059     * </p>
060     *
061     * @param value   The Value to be converted
062     * @param locale  The locale
063     * @param pattern The conversion pattern
064     * @return the converted value
065     * @see LocaleConvertUtilsBean#convert(Object, Locale, String)
066     */
067    public static String convert(final Object value, final Locale locale, final String pattern) {
068        return LocaleConvertUtilsBean.getInstance().convert(value, locale, pattern);
069    }
070
071    /**
072     * <p>
073     * Converts the specified locale-sensitive value into a String using the conversion pattern.
074     * </p>
075     *
076     * <p>
077     * For more details see {@code LocaleConvertUtilsBean}
078     * </p>
079     *
080     * @param value   The Value to be converted
081     * @param pattern The conversion pattern
082     * @return the converted value
083     * @see LocaleConvertUtilsBean#convert(Object, String)
084     */
085    public static String convert(final Object value, final String pattern) {
086        return LocaleConvertUtilsBean.getInstance().convert(value, pattern);
087    }
088
089    /**
090     * <p>
091     * Converts the specified value to an object of the specified class (if possible). Otherwise, return a String representation of the value.
092     * </p>
093     *
094     * <p>
095     * For more details see {@code LocaleConvertUtilsBean}
096     * </p>
097     *
098     * @param value The String scalar value to be converted
099     * @param clazz The Data type to which this value should be converted.
100     * @return the converted value
101     * @see LocaleConvertUtilsBean#convert(String, Class)
102     */
103    public static Object convert(final String value, final Class<?> clazz) {
104        return LocaleConvertUtilsBean.getInstance().convert(value, clazz);
105    }
106
107    /**
108     * <p>
109     * Converts the specified value to an object of the specified class (if possible) using the conversion pattern. Otherwise, return a String representation of
110     * the value.
111     * </p>
112     *
113     * <p>
114     * For more details see {@code LocaleConvertUtilsBean}
115     * </p>
116     *
117     * @param value   The String scalar value to be converted
118     * @param clazz   The Data type to which this value should be converted.
119     * @param locale  The locale
120     * @param pattern The conversion pattern
121     * @return the converted value
122     * @see LocaleConvertUtilsBean#convert(String, Class, Locale, String)
123     */
124    public static Object convert(final String value, final Class<?> clazz, final Locale locale, final String pattern) {
125        return LocaleConvertUtilsBean.getInstance().convert(value, clazz, locale, pattern);
126    }
127
128    /**
129     * <p>
130     * Converts the specified value to an object of the specified class (if possible) using the conversion pattern. Otherwise, return a String representation of
131     * the value.
132     * </p>
133     *
134     * <p>
135     * For more details see {@code LocaleConvertUtilsBean}
136     * </p>
137     *
138     * @param value   The String scalar value to be converted
139     * @param clazz   The Data type to which this value should be converted.
140     * @param pattern The conversion pattern
141     * @return the converted value
142     * @see LocaleConvertUtilsBean#convert(String, Class, String)
143     */
144    public static Object convert(final String value, final Class<?> clazz, final String pattern) {
145        return LocaleConvertUtilsBean.getInstance().convert(value, clazz, pattern);
146    }
147
148    /**
149     * <p>
150     * Convert an array of specified values to an array of objects of the specified class (if possible).
151     * </p>
152     *
153     * <p>
154     * For more details see {@code LocaleConvertUtilsBean}
155     * </p>
156     *
157     * @param values Value to be converted (may be null)
158     * @param clazz  Java array or element class to be converted to
159     * @return the converted value
160     * @see LocaleConvertUtilsBean#convert(String[], Class)
161     */
162    public static Object convert(final String[] values, final Class<?> clazz) {
163        return LocaleConvertUtilsBean.getInstance().convert(values, clazz);
164    }
165
166    /**
167     * <p>
168     * Convert an array of specified values to an array of objects of the specified class (if possible) using the conversion pattern.
169     * </p>
170     *
171     * <p>
172     * For more details see {@code LocaleConvertUtilsBean}
173     * </p>
174     *
175     * @param values  Value to be converted (may be null)
176     * @param clazz   Java array or element class to be converted to
177     * @param locale  The locale
178     * @param pattern The conversion pattern
179     * @return the converted value
180     * @see LocaleConvertUtilsBean#convert(String[], Class, Locale, String)
181     */
182    public static Object convert(final String[] values, final Class<?> clazz, final Locale locale, final String pattern) {
183        return LocaleConvertUtilsBean.getInstance().convert(values, clazz, locale, pattern);
184    }
185
186    /**
187     * <p>
188     * Convert an array of specified values to an array of objects of the specified class (if possible) using the conversion pattern.
189     * </p>
190     *
191     * <p>
192     * For more details see {@code LocaleConvertUtilsBean}
193     * </p>
194     *
195     * @param values  Value to be converted (may be null)
196     * @param clazz   Java array or element class to be converted to
197     * @param pattern The conversion pattern
198     * @return the converted value
199     * @see LocaleConvertUtilsBean#convert(String[], Class, String)
200     */
201    public static Object convert(final String[] values, final Class<?> clazz, final String pattern) {
202        return LocaleConvertUtilsBean.getInstance().convert(values, clazz, pattern);
203    }
204
205    /**
206     * <p>
207     * Remove any registered {@link LocaleConverter}.
208     * </p>
209     *
210     * <p>
211     * For more details see {@code LocaleConvertUtilsBean}
212     * </p>
213     *
214     * @see LocaleConvertUtilsBean#deregister()
215     */
216    public static void deregister() {
217        LocaleConvertUtilsBean.getInstance().deregister();
218    }
219
220    /**
221     * <p>
222     * Remove any registered {@link LocaleConverter} for the specified locale and Class.
223     * </p>
224     *
225     * <p>
226     * For more details see {@code LocaleConvertUtilsBean}
227     * </p>
228     *
229     * @param clazz  Class for which to remove a registered Converter
230     * @param locale The locale
231     * @see LocaleConvertUtilsBean#deregister(Class, Locale)
232     */
233    public static void deregister(final Class<?> clazz, final Locale locale) {
234        LocaleConvertUtilsBean.getInstance().deregister(clazz, locale);
235    }
236
237    /**
238     * <p>
239     * Remove any registered {@link LocaleConverter} for the specified locale.
240     * </p>
241     *
242     * <p>
243     * For more details see {@code LocaleConvertUtilsBean}
244     * </p>
245     *
246     * @param locale The locale
247     * @see LocaleConvertUtilsBean#deregister(Locale)
248     */
249    public static void deregister(final Locale locale) {
250        LocaleConvertUtilsBean.getInstance().deregister(locale);
251    }
252
253    /**
254     * <p>
255     * Gets applyLocalized.
256     * </p>
257     *
258     * <p>
259     * For more details see {@code LocaleConvertUtilsBean}
260     * </p>
261     *
262     * @return {@code true} if pattern is localized, otherwise {@code false}
263     * @see LocaleConvertUtilsBean#getApplyLocalized()
264     */
265    public static boolean getApplyLocalized() {
266        return LocaleConvertUtilsBean.getInstance().getApplyLocalized();
267    }
268
269    /**
270     * <p>
271     * Gets the {@link Locale} which will be used when no {@link Locale} is passed to a method.
272     * </p>
273     *
274     * <p>
275     * For more details see {@code LocaleConvertUtilsBean}
276     * </p>
277     *
278     * @return the default locale
279     * @see LocaleConvertUtilsBean#getDefaultLocale()
280     */
281    public static Locale getDefaultLocale() {
282        return LocaleConvertUtilsBean.getInstance().getDefaultLocale();
283    }
284
285    /**
286     * <p>
287     * Look up and return any registered {@link LocaleConverter} for the specified destination class and locale; if there is no registered Converter, return
288     * {@code null}.
289     * </p>
290     *
291     * <p>
292     * For more details see {@code LocaleConvertUtilsBean}
293     * </p>
294     *
295     * @param <T>    The converter type.
296     * @param clazz  Class for which to return a registered Converter
297     * @param locale The Locale
298     * @return The registered locale Converter, if any
299     * @see LocaleConvertUtilsBean#lookup(Class, Locale)
300     */
301    public static <T> LocaleConverter<T> lookup(final Class<T> clazz, final Locale locale) {
302        return LocaleConvertUtilsBean.getInstance().lookup(clazz, locale);
303    }
304
305    /**
306     * <p>
307     * Register a custom {@link LocaleConverter} for the specified destination {@code Class}, replacing any previously registered converter.
308     * </p>
309     *
310     * <p>
311     * For more details see {@code LocaleConvertUtilsBean}
312     * </p>
313     *
314     * @param <T>       The converter type.
315     * @param converter The LocaleConverter to be registered
316     * @param clazz     The Destination class for conversions performed by this Converter
317     * @param locale    The locale
318     * @see LocaleConvertUtilsBean#register(LocaleConverter, Class, Locale)
319     */
320    public static <T> void register(final LocaleConverter<T> converter, final Class<T> clazz, final Locale locale) {
321        LocaleConvertUtilsBean.getInstance().register(converter, clazz, locale);
322    }
323
324    /**
325     * <p>
326     * Sets applyLocalized.
327     * </p>
328     *
329     * <p>
330     * For more details see {@code LocaleConvertUtilsBean}
331     * </p>
332     *
333     * @param newApplyLocalized {@code true} if pattern is localized, otherwise {@code false}
334     * @see LocaleConvertUtilsBean#setApplyLocalized(boolean)
335     */
336    public static void setApplyLocalized(final boolean newApplyLocalized) {
337        LocaleConvertUtilsBean.getInstance().setApplyLocalized(newApplyLocalized);
338    }
339
340    /**
341     * <p>
342     * Sets the {@link Locale} which will be used when no {@link Locale} is passed to a method.
343     * </p>
344     *
345     * <p>
346     * For more details see {@code LocaleConvertUtilsBean}
347     * </p>
348     *
349     * @param locale the default locale
350     * @see LocaleConvertUtilsBean#setDefaultLocale(Locale)
351     */
352    public static void setDefaultLocale(final Locale locale) {
353        LocaleConvertUtilsBean.getInstance().setDefaultLocale(locale);
354    }
355}