1fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubert// © 2017 and later: Unicode, Inc. and others.
2fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubert// License & terms of use: http://www.unicode.org/copyright.html#License
3fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubertpackage com.ibm.icu.number;
4fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubert
5fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubertimport java.util.Locale;
6fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubert
7fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubertimport com.ibm.icu.util.ULocale;
8fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubert
9fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubert/**
10fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubert * A NumberFormatter that does not yet have a locale. In order to format numbers, a locale must be specified.
11fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubert *
12fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubert * @see NumberFormatter
13fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubert * @draft ICU 60
14fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubert * @provisional This API might change or be removed in a future release.
15fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubert */
16fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubertpublic class UnlocalizedNumberFormatter extends NumberFormatterSettings<UnlocalizedNumberFormatter> {
17fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubert
18fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubert    /** Base constructor; called during startup only. Sets the threshold to the default value of 3. */
19fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubert    UnlocalizedNumberFormatter() {
20fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubert        super(null, KEY_THRESHOLD, new Long(3));
21fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubert    }
22fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubert
23fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubert    UnlocalizedNumberFormatter(NumberFormatterSettings<?> parent, int key, Object value) {
24fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubert        super(parent, key, value);
25fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubert    }
26fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubert
27fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubert    /**
28fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubert     * Associate the given locale with the number formatter. The locale is used for picking the appropriate symbols,
29fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubert     * formats, and other data for number display.
30fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubert     *
31fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubert     * <p>
32fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubert     * To use the Java default locale, call Locale.getDefault():
33fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubert     *
34fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubert     * <pre>
35fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubert     * NumberFormatter.with(). ... .locale(Locale.getDefault())
36fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubert     * </pre>
37fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubert     *
38fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubert     * @param locale
39fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubert     *            The locale to use when loading data for number formatting.
40fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubert     * @return The fluent chain
41fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubert     * @draft ICU 60
42fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubert     * @provisional This API might change or be removed in a future release.
43fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubert     */
44fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubert    public LocalizedNumberFormatter locale(Locale locale) {
45fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubert        return new LocalizedNumberFormatter(this, KEY_LOCALE, ULocale.forLocale(locale));
46fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubert    }
47fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubert
48fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubert    /**
49fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubert     * ULocale version of the {@link #locale(Locale)} setter above.
50fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubert     *
51fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubert     * @param locale
52fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubert     *            The locale to use when loading data for number formatting.
53fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubert     * @return The fluent chain
54fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubert     * @see #locale(Locale)
55fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubert     * @draft ICU 60
56fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubert     * @provisional This API might change or be removed in a future release.
57fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubert     */
58fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubert    public LocalizedNumberFormatter locale(ULocale locale) {
59fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubert        return new LocalizedNumberFormatter(this, KEY_LOCALE, locale);
60fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubert    }
61fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubert
62fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubert    @Override
63fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubert    UnlocalizedNumberFormatter create(int key, Object value) {
64fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubert        return new UnlocalizedNumberFormatter(this, key, value);
65fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubert    }
66fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubert}