1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Licensed to the Apache Software Foundation (ASF) under one or more
3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * contributor license agreements.  See the NOTICE file distributed with
4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * this work for additional information regarding copyright ownership.
5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The ASF licenses this file to You under the Apache License, Version 2.0
6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * (the "License"); you may not use this file except in compliance with
7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the License.  You may obtain a copy of the License at
8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *     http://www.apache.org/licenses/LICENSE-2.0
10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * See the License for the specific language governing permissions and
15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * limitations under the License.
16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpackage java.text;
19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.IOException;
21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.ObjectInputStream;
22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.ObjectOutputStream;
23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.ObjectStreamField;
24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.Serializable;
25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.Arrays;
26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.Currency;
27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.Locale;
28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
29e3c868c0d0db63e4ec97fad40c5f3b81e308b723Elliott Hughesimport com.ibm.icu4jni.util.LocaleData;
30e3c868c0d0db63e4ec97fad40c5f3b81e308b723Elliott Hughes
31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/**
32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Encapsulates the set of symbols (such as the decimal separator, the grouping
33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * separator, and so on) needed by {@code DecimalFormat} to format numbers.
34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * {@code DecimalFormat} internally creates an instance of
35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * {@code DecimalFormatSymbols} from its locale data. If you need to change any
36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * of these symbols, you can get the {@code DecimalFormatSymbols} object from
37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * your {@code DecimalFormat} and modify it.
38f2173758085110964523dcc11a7a8bc1c44d23c5Jesse Wilson *
39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see java.util.Locale
40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see DecimalFormat
41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpublic final class DecimalFormatSymbols implements Cloneable, Serializable {
43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    private static final long serialVersionUID = 5772796243397350300L;
45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    private final int ZeroDigit = 0, Digit = 1, DecimalSeparator = 2,
47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            GroupingSeparator = 3, PatternSeparator = 4, Percent = 5,
48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            PerMill = 6, Exponent = 7, MonetaryDecimalSeparator = 8,
49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            MinusSign = 9;
50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
51b7df12f1bb73889f354806213b218a3a7d986448Elliott Hughes    private transient char[] patternChars;
52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    private transient Currency currency;
54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    private transient Locale locale;
56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    private String infinity, NaN, currencySymbol, intlCurrencySymbol;
58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Constructs a new {@code DecimalFormatSymbols} containing the symbols for
61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * the default locale. Best practice is to create a {@code DecimalFormat}
62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * and then to get the {@code DecimalFormatSymbols} from that object by
63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * calling {@link DecimalFormat#getDecimalFormatSymbols()}.
64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public DecimalFormatSymbols() {
66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        this(Locale.getDefault());
67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Constructs a new DecimalFormatSymbols containing the symbols for the
71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * specified Locale. Best practice is to create a {@code DecimalFormat}
72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * and then to get the {@code DecimalFormatSymbols} from that object by
73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * calling {@link DecimalFormat#getDecimalFormatSymbols()}.
74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param locale
76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the locale.
77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public DecimalFormatSymbols(Locale locale) {
79f2173758085110964523dcc11a7a8bc1c44d23c5Jesse Wilson        // BEGIN android-changed
80e3c868c0d0db63e4ec97fad40c5f3b81e308b723Elliott Hughes        LocaleData localeData = com.ibm.icu4jni.util.Resources.getLocaleData(locale);
81e3c868c0d0db63e4ec97fad40c5f3b81e308b723Elliott Hughes        this.patternChars = localeData.decimalPatternChars.toCharArray();
82e3c868c0d0db63e4ec97fad40c5f3b81e308b723Elliott Hughes        this.infinity = localeData.infinity;
83e3c868c0d0db63e4ec97fad40c5f3b81e308b723Elliott Hughes        this.NaN = localeData.NaN;
84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        this.locale = locale;
85f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
86f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            currency = Currency.getInstance(locale);
87f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            currencySymbol = currency.getSymbol(locale);
88f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            intlCurrencySymbol = currency.getCurrencyCode();
89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (IllegalArgumentException e) {
90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            currency = Currency.getInstance("XXX"); //$NON-NLS-1$
91e3c868c0d0db63e4ec97fad40c5f3b81e308b723Elliott Hughes            currencySymbol = localeData.currencySymbol;
92e3c868c0d0db63e4ec97fad40c5f3b81e308b723Elliott Hughes            intlCurrencySymbol = localeData.internationalCurrencySymbol;
93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
94f2173758085110964523dcc11a7a8bc1c44d23c5Jesse Wilson        // END android-changed
95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
97f2173758085110964523dcc11a7a8bc1c44d23c5Jesse Wilson
98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Returns a new {@code DecimalFormatSymbols} with the same symbols as this
100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * {@code DecimalFormatSymbols}.
101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return a shallow copy of this {@code DecimalFormatSymbols}.
103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @see java.lang.Cloneable
105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @Override
107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public Object clone() {
108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            DecimalFormatSymbols symbols = (DecimalFormatSymbols) super.clone();
110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            symbols.patternChars = patternChars.clone();
111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return symbols;
112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (CloneNotSupportedException e) {
113a0ebf91e58c17487a8bd1be6e64193193deae26fJesse Wilson            throw new AssertionError(e); // android-changed
114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Compares the specified object to this {@code DecimalFormatSymbols} and
119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * indicates if they are equal. In order to be equal, {@code object} must be
120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * an instance of {@code DecimalFormatSymbols} and contain the same symbols.
121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param object
123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the object to compare with this object.
124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return {@code true} if the specified object is equal to this
125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *         {@code DecimalFormatSymbols}; {@code false} otherwise.
126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @see #hashCode
127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @Override
129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public boolean equals(Object object) {
130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (this == object) {
131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return true;
132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (!(object instanceof DecimalFormatSymbols)) {
134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return false;
135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        DecimalFormatSymbols obj = (DecimalFormatSymbols) object;
137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return Arrays.equals(patternChars, obj.patternChars)
138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                && infinity.equals(obj.infinity) && NaN.equals(obj.NaN)
139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                && currencySymbol.equals(obj.currencySymbol)
140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                && intlCurrencySymbol.equals(obj.intlCurrencySymbol);
141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Returns the currency.
145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * <p>
146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * {@code null} is returned if {@code setInternationalCurrencySymbol()} has
147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * been previously called with a value that is not a valid ISO 4217 currency
148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * code.
149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * <p>
150f2173758085110964523dcc11a7a8bc1c44d23c5Jesse Wilson     *
151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return the currency that was set in the constructor or by calling
152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *         {@code setCurrency()} or {@code setInternationalCurrencySymbol()},
153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *         or {@code null} if an invalid currency was set.
154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @see #setCurrency(Currency)
155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @see #setInternationalCurrencySymbol(String)
156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public Currency getCurrency() {
158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return currency;
159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Returns the international currency symbol.
163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return the international currency symbol as string.
165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public String getInternationalCurrencySymbol() {
167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return intlCurrencySymbol;
168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Returns the currency symbol.
172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return the currency symbol as string.
174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public String getCurrencySymbol() {
176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return currencySymbol;
177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Returns the character which represents the decimal point in a number.
181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return the decimal separator character.
183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public char getDecimalSeparator() {
185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return patternChars[DecimalSeparator];
186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Returns the character which represents a single digit in a format
190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * pattern.
191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return the digit pattern character.
193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public char getDigit() {
195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return patternChars[Digit];
196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Returns the character used as the thousands separator in a number.
200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return the thousands separator character.
202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public char getGroupingSeparator() {
204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return patternChars[GroupingSeparator];
205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Returns the string which represents infinity.
209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return the infinity symbol as a string.
211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public String getInfinity() {
213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return infinity;
214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Returns the minus sign character.
218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return the minus sign as a character.
220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public char getMinusSign() {
222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return patternChars[MinusSign];
223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Returns the character which represents the decimal point in a monetary
227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * value.
228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return the monetary decimal point as a character.
230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public char getMonetaryDecimalSeparator() {
232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return patternChars[MonetaryDecimalSeparator];
233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Returns the string which represents NaN.
237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return the symbol NaN as a string.
239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public String getNaN() {
241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return NaN;
242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Returns the character which separates the positive and negative patterns
246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * in a format pattern.
247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return the pattern separator character.
249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public char getPatternSeparator() {
251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return patternChars[PatternSeparator];
252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Returns the percent character.
256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return the percent character.
258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public char getPercent() {
260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return patternChars[Percent];
261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Returns the per mill sign character.
265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return the per mill sign character.
267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public char getPerMill() {
269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return patternChars[PerMill];
270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Returns the character which represents zero.
274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return the zero character.
276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public char getZeroDigit() {
278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return patternChars[ZeroDigit];
279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Returns the exponent as a character.
283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    char getExponential() {
285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return patternChars[Exponent];
286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @Override
289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public int hashCode() {
290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return new String(patternChars).hashCode() + infinity.hashCode()
291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                + NaN.hashCode() + currencySymbol.hashCode()
292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                + intlCurrencySymbol.hashCode();
293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Sets the currency.
297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * <p>
298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * The international currency symbol and the currency symbol are updated,
299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * but the min and max number of fraction digits stays the same.
300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * <p>
301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param currency
303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the new currency.
304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws NullPointerException
305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if {@code currency} is {@code null}.
306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void setCurrency(Currency currency) {
308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (currency == null) {
309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throw new NullPointerException();
310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (currency == this.currency) {
312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return;
313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        this.currency = currency;
315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        intlCurrencySymbol = currency.getCurrencyCode();
316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        currencySymbol = currency.getSymbol(locale);
317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Sets the international currency symbol.
321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * <p>
322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * The currency and currency symbol are also updated if {@code value} is a
323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * valid ISO4217 currency code.
324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * <p>
325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * The min and max number of fraction digits stay the same.
326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param value
328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the currency code.
329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void setInternationalCurrencySymbol(String value) {
331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (value == null) {
332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            currency = null;
333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            intlCurrencySymbol = null;
334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return;
335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (value.equals(intlCurrencySymbol)) {
338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return;
339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            currency = Currency.getInstance(value);
343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            currencySymbol = currency.getSymbol(locale);
344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (IllegalArgumentException e) {
345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            currency = null;
346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        intlCurrencySymbol = value;
348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Sets the currency symbol.
352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param value
354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the currency symbol.
355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void setCurrencySymbol(String value) {
357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        currencySymbol = value;
358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Sets the character which represents the decimal point in a number.
362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param value
364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the decimal separator character.
365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void setDecimalSeparator(char value) {
367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        patternChars[DecimalSeparator] = value;
368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Sets the character which represents a single digit in a format pattern.
372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param value
374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the digit character.
375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void setDigit(char value) {
377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        patternChars[Digit] = value;
378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Sets the character used as the thousands separator in a number.
382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param value
384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the grouping separator character.
385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void setGroupingSeparator(char value) {
387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        patternChars[GroupingSeparator] = value;
388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Sets the string which represents infinity.
392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param value
394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the string representing infinity.
395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void setInfinity(String value) {
397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        infinity = value;
398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Sets the minus sign character.
402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param value
404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the minus sign character.
405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void setMinusSign(char value) {
407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        patternChars[MinusSign] = value;
408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Sets the character which represents the decimal point in a monetary
412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * value.
413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param value
415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the monetary decimal separator character.
416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void setMonetaryDecimalSeparator(char value) {
418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        patternChars[MonetaryDecimalSeparator] = value;
419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Sets the string which represents NaN.
423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param value
425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the string representing NaN.
426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void setNaN(String value) {
428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        NaN = value;
429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Sets the character which separates the positive and negative patterns in
433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * a format pattern.
434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param value
436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the pattern separator character.
437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void setPatternSeparator(char value) {
439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        patternChars[PatternSeparator] = value;
440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Sets the percent character.
444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param value
446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the percent character.
447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void setPercent(char value) {
449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        patternChars[Percent] = value;
450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
452f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Sets the per mill sign character.
454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param value
456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the per mill character.
457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void setPerMill(char value) {
459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        patternChars[PerMill] = value;
460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Sets the character which represents zero.
464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param value
466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the zero digit character.
467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void setZeroDigit(char value) {
469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        patternChars[ZeroDigit] = value;
470f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Sets the exponent character.
474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    void setExponential(char value) {
476f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        patternChars[Exponent] = value;
477f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    private static final ObjectStreamField[] serialPersistentFields = {
480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            new ObjectStreamField("currencySymbol", String.class), //$NON-NLS-1$
481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            new ObjectStreamField("decimalSeparator", Character.TYPE), //$NON-NLS-1$
482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            new ObjectStreamField("digit", Character.TYPE), //$NON-NLS-1$
483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            new ObjectStreamField("exponential", Character.TYPE), //$NON-NLS-1$
484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            new ObjectStreamField("groupingSeparator", Character.TYPE), //$NON-NLS-1$
485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            new ObjectStreamField("infinity", String.class), //$NON-NLS-1$
486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            new ObjectStreamField("intlCurrencySymbol", String.class), //$NON-NLS-1$
487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            new ObjectStreamField("minusSign", Character.TYPE), //$NON-NLS-1$
488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            new ObjectStreamField("monetarySeparator", Character.TYPE), //$NON-NLS-1$
489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            new ObjectStreamField("NaN", String.class), //$NON-NLS-1$
490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            new ObjectStreamField("patternSeparator", Character.TYPE), //$NON-NLS-1$
491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            new ObjectStreamField("percent", Character.TYPE), //$NON-NLS-1$
492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            new ObjectStreamField("perMill", Character.TYPE), //$NON-NLS-1$
493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            new ObjectStreamField("serialVersionOnStream", Integer.TYPE), //$NON-NLS-1$
494f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            new ObjectStreamField("zeroDigit", Character.TYPE), //$NON-NLS-1$
495f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            new ObjectStreamField("locale", Locale.class), }; //$NON-NLS-1$
496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
497f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    private void writeObject(ObjectOutputStream stream) throws IOException {
498f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ObjectOutputStream.PutField fields = stream.putFields();
499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        fields.put("currencySymbol", currencySymbol); //$NON-NLS-1$
500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        fields.put("decimalSeparator", getDecimalSeparator()); //$NON-NLS-1$
501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        fields.put("digit", getDigit()); //$NON-NLS-1$
502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        fields.put("exponential", getExponential()); //$NON-NLS-1$
503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        fields.put("groupingSeparator", getGroupingSeparator()); //$NON-NLS-1$
504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        fields.put("infinity", infinity); //$NON-NLS-1$
505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        fields.put("intlCurrencySymbol", intlCurrencySymbol); //$NON-NLS-1$
506f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        fields.put("minusSign", getMinusSign()); //$NON-NLS-1$
507f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        fields.put("monetarySeparator", getMonetaryDecimalSeparator()); //$NON-NLS-1$
508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        fields.put("NaN", NaN); //$NON-NLS-1$
509f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        fields.put("patternSeparator", getPatternSeparator()); //$NON-NLS-1$
510f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        fields.put("percent", getPercent()); //$NON-NLS-1$
511f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        fields.put("perMill", getPerMill()); //$NON-NLS-1$
512f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        fields.put("serialVersionOnStream", 1); //$NON-NLS-1$
513f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        fields.put("zeroDigit", getZeroDigit()); //$NON-NLS-1$
514f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        fields.put("locale", locale); //$NON-NLS-1$
515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        stream.writeFields();
516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    private void readObject(ObjectInputStream stream) throws IOException,
519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            ClassNotFoundException {
520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ObjectInputStream.GetField fields = stream.readFields();
521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        patternChars = new char[10];
522f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        currencySymbol = (String) fields.get("currencySymbol", ""); //$NON-NLS-1$ //$NON-NLS-2$
523f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        setDecimalSeparator(fields.get("decimalSeparator", '.')); //$NON-NLS-1$
524f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        setDigit(fields.get("digit", '#')); //$NON-NLS-1$
525f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        setGroupingSeparator(fields.get("groupingSeparator", ',')); //$NON-NLS-1$
526f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        infinity = (String) fields.get("infinity", ""); //$NON-NLS-1$ //$NON-NLS-2$
527f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        intlCurrencySymbol = (String) fields.get("intlCurrencySymbol", ""); //$NON-NLS-1$ //$NON-NLS-2$
528f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        setMinusSign(fields.get("minusSign", '-')); //$NON-NLS-1$
529f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        NaN = (String) fields.get("NaN", ""); //$NON-NLS-1$ //$NON-NLS-2$
530f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        setPatternSeparator(fields.get("patternSeparator", ';')); //$NON-NLS-1$
531f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        setPercent(fields.get("percent", '%')); //$NON-NLS-1$
532f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        setPerMill(fields.get("perMill", '\u2030')); //$NON-NLS-1$
533f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        setZeroDigit(fields.get("zeroDigit", '0')); //$NON-NLS-1$
534f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        locale = (Locale) fields.get("locale", null); //$NON-NLS-1$
535f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (fields.get("serialVersionOnStream", 0) == 0) { //$NON-NLS-1$
536f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            setMonetaryDecimalSeparator(getDecimalSeparator());
537f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            setExponential('E');
538f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } else {
539f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            setMonetaryDecimalSeparator(fields.get("monetarySeparator", '.')); //$NON-NLS-1$
540f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            setExponential(fields.get("exponential", 'E')); //$NON-NLS-1$
541f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
542f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
543f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
544f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            currency = Currency.getInstance(intlCurrencySymbol);
545f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (IllegalArgumentException e) {
546f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            currency = null;
547f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
548f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
549f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project}
550