- /*
 - * @(#)DecimalFormatSymbols.java 1.30 00/01/19
 - *
 - * Copyright 1996-2000 Sun Microsystems, Inc. All Rights Reserved.
 - *
 - * This software is the proprietary information of Sun Microsystems, Inc.
 - * Use is subject to license terms.
 - *
 - */
 - /*
 - * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
 - * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
 - *
 - * The original version of this source code and documentation is copyrighted
 - * and owned by Taligent, Inc., a wholly-owned subsidiary of IBM. These
 - * materials are provided under terms of a License Agreement between Taligent
 - * and Sun. This technology is protected by multiple US and International
 - * patents. This notice and attribution to Taligent may not be removed.
 - * Taligent is a registered trademark of Taligent, Inc.
 - *
 - */
 - package java.text;
 - import java.io.IOException;
 - import java.io.ObjectInputStream;
 - import java.io.Serializable;
 - import java.util.ResourceBundle;
 - import java.util.Locale;
 - import java.util.Hashtable;
 - /**
 - * This class represents the set of symbols (such as the decimal separator,
 - * the grouping separator, and so on) needed by <code>DecimalFormat</code>
 - * to format numbers. <code>DecimalFormat</code> creates for itself an instance of
 - * <code>DecimalFormatSymbols</code> from its locale data. If you need to change any
 - * of these symbols, you can get the <code>DecimalFormatSymbols</code> object from
 - * your <code>DecimalFormat</code> and modify it.
 - *
 - * @see java.util.Locale
 - * @see DecimalFormat
 - * @version 1.30, 01/19/00
 - * @author Mark Davis
 - * @author Alan Liu
 - */
 - final public class DecimalFormatSymbols implements Cloneable, Serializable {
 - /**
 - * Create a DecimalFormatSymbols object for the default locale.
 - */
 - public DecimalFormatSymbols() {
 - initialize( Locale.getDefault() );
 - }
 - /**
 - * Create a DecimalFormatSymbols object for the given locale.
 - */
 - public DecimalFormatSymbols( Locale locale ) {
 - initialize( locale );
 - }
 - /**
 - * Gets the character used for zero. Different for Arabic, etc.
 - */
 - public char getZeroDigit() {
 - return zeroDigit;
 - }
 - /**
 - * Set the character used for zero. Different for Arabic, etc.
 - */
 - public void setZeroDigit(char zeroDigit) {
 - this.zeroDigit = zeroDigit;
 - }
 - /**
 - * Gets the character used for thousands separator. Different for French, etc.
 - */
 - public char getGroupingSeparator() {
 - return groupingSeparator;
 - }
 - /**
 - * Set the character used for thousands separator. Different for French, etc.
 - */
 - public void setGroupingSeparator(char groupingSeparator) {
 - this.groupingSeparator = groupingSeparator;
 - }
 - /**
 - * Gets the character used for decimal sign. Different for French, etc.
 - */
 - public char getDecimalSeparator() {
 - return decimalSeparator;
 - }
 - /**
 - * Set the character used for decimal sign. Different for French, etc.
 - */
 - public void setDecimalSeparator(char decimalSeparator) {
 - this.decimalSeparator = decimalSeparator;
 - }
 - /**
 - * Gets the character used for mille percent sign. Different for Arabic, etc.
 - */
 - public char getPerMill() {
 - return perMill;
 - }
 - /**
 - * Set the character used for mille percent sign. Different for Arabic, etc.
 - */
 - public void setPerMill(char perMill) {
 - this.perMill = perMill;
 - }
 - /**
 - * Gets the character used for percent sign. Different for Arabic, etc.
 - */
 - public char getPercent() {
 - return percent;
 - }
 - /**
 - * Set the character used for percent sign. Different for Arabic, etc.
 - */
 - public void setPercent(char percent) {
 - this.percent = percent;
 - }
 - /**
 - * Gets the character used for a digit in a pattern.
 - */
 - public char getDigit() {
 - return digit;
 - }
 - /**
 - * Set the character used for a digit in a pattern.
 - */
 - public void setDigit(char digit) {
 - this.digit = digit;
 - }
 - /**
 - * Gets the character used to separate positive and negative subpatterns
 - * in a pattern.
 - */
 - public char getPatternSeparator() {
 - return patternSeparator;
 - }
 - /**
 - * Set the character used to separate positive and negative subpatterns
 - * in a pattern.
 - */
 - public void setPatternSeparator(char patternSeparator) {
 - this.patternSeparator = patternSeparator;
 - }
 - /**
 - * Gets the character used to represent infinity. Almost always left
 - * unchanged.
 - */
 - public String getInfinity() {
 - return infinity;
 - }
 - /**
 - * Set the character used to represent infinity. Almost always left
 - * unchanged.
 - */
 - public void setInfinity(String infinity) {
 - this.infinity = infinity;
 - }
 - /**
 - * Gets the character used to represent NaN. Almost always left
 - * unchanged.
 - */
 - public String getNaN() {
 - return NaN;
 - }
 - /**
 - * Set the character used to represent NaN. Almost always left
 - * unchanged.
 - */
 - public void setNaN(String NaN) {
 - this.NaN = NaN;
 - }
 - /**
 - * Gets the character used to represent minus sign. If no explicit
 - * negative format is specified, one is formed by prefixing
 - * minusSign to the positive format.
 - */
 - public char getMinusSign() {
 - return minusSign;
 - }
 - /**
 - * Set the character used to represent minus sign. If no explicit
 - * negative format is specified, one is formed by prefixing
 - * minusSign to the positive format.
 - */
 - public void setMinusSign(char minusSign) {
 - this.minusSign = minusSign;
 - }
 - /**
 - * Return the string denoting the local currency.
 - */
 - public String getCurrencySymbol()
 - {
 - return currencySymbol;
 - }
 - /**
 - * Set the string denoting the local currency.
 - */
 - public void setCurrencySymbol(String currency)
 - {
 - currencySymbol = currency;
 - }
 - /**
 - * Return the international string denoting the local currency.
 - */
 - public String getInternationalCurrencySymbol()
 - {
 - return intlCurrencySymbol;
 - }
 - /**
 - * Set the international string denoting the local currency.
 - */
 - public void setInternationalCurrencySymbol(String currency)
 - {
 - intlCurrencySymbol = currency;
 - }
 - /**
 - * Return the monetary decimal separator.
 - */
 - public char getMonetaryDecimalSeparator()
 - {
 - return monetarySeparator;
 - }
 - /**
 - * Set the monetary decimal separator.
 - */
 - public void setMonetaryDecimalSeparator(char sep)
 - {
 - monetarySeparator = sep;
 - }
 - //------------------------------------------------------------
 - // BEGIN Package Private methods ... to be made public later
 - //------------------------------------------------------------
 - /**
 - * Return the character used to separate the mantissa from the exponent.
 - */
 - char getExponentialSymbol()
 - {
 - return exponential;
 - }
 - /**
 - * Set the character used to separate the mantissa from the exponent.
 - */
 - void setExponentialSymbol(char exp)
 - {
 - exponential = exp;
 - }
 - //------------------------------------------------------------
 - // END Package Private methods ... to be made public later
 - //------------------------------------------------------------
 - /**
 - * Standard override.
 - */
 - public Object clone() {
 - try {
 - return (DecimalFormatSymbols)super.clone();
 - // other fields are bit-copied
 - } catch (CloneNotSupportedException e) {
 - throw new InternalError();
 - }
 - }
 - /**
 - * Override equals.
 - */
 - public boolean equals(Object obj) {
 - if (obj == null) return false;
 - if (this == obj) return true;
 - if (getClass() != obj.getClass()) return false;
 - DecimalFormatSymbols other = (DecimalFormatSymbols) obj;
 - return (zeroDigit == other.zeroDigit &&
 - groupingSeparator == other.groupingSeparator &&
 - decimalSeparator == other.decimalSeparator &&
 - percent == other.percent &&
 - perMill == other.perMill &&
 - digit == other.digit &&
 - minusSign == other.minusSign &&
 - patternSeparator == other.patternSeparator &&
 - infinity.equals(other.infinity) &&
 - NaN.equals(other.NaN) &&
 - currencySymbol.equals(other.currencySymbol) &&
 - intlCurrencySymbol.equals(other.intlCurrencySymbol) &&
 - monetarySeparator == other.monetarySeparator);
 - }
 - /**
 - * Override hashCode.
 - */
 - public int hashCode() {
 - int result = zeroDigit;
 - result = result * 37 + groupingSeparator;
 - result = result * 37 + decimalSeparator;
 - return result;
 - }
 - /**
 - * Initializes the symbols from the LocaleElements resource bundle.
 - * Note: The organization of LocaleElements badly needs to be
 - * cleaned up.
 - */
 - private void initialize( Locale locale ) {
 - /* try the cache first */
 - String[][] data = (String[][]) cachedLocaleData.get(locale);
 - String[] numberElements;
 - String[] currencyElements;
 - if (data == null) { /* cache miss */
 - data = new String[2][];
 - ResourceBundle rb = ResourceBundle.getBundle
 - ("java.text.resources.LocaleElements", locale);
 - data[0] = rb.getStringArray("NumberElements");
 - data[1] = rb.getStringArray("CurrencyElements");
 - /* update cache */
 - cachedLocaleData.put(locale, data);
 - }
 - numberElements = data[0];
 - currencyElements = data[1];
 - decimalSeparator = numberElements[0].charAt(0);
 - groupingSeparator = numberElements[1].charAt(0);
 - patternSeparator = numberElements[2].charAt(0);
 - percent = numberElements[3].charAt(0);
 - zeroDigit = numberElements[4].charAt(0); //different for Arabic,etc.
 - digit = numberElements[5].charAt(0);
 - minusSign = numberElements[6].charAt(0);
 - exponential = numberElements[7].charAt(0);
 - perMill = numberElements[8].charAt(0);
 - infinity = numberElements[9];
 - NaN = numberElements[10];
 - currencySymbol = currencyElements[0];
 - intlCurrencySymbol = currencyElements[1];
 - // if the resource data specified the empty string as the monetary decimal
 - // separator, that means we should just use the regular separator as the
 - // monetary separator
 - if (currencyElements[2].length() == 0)
 - monetarySeparator = decimalSeparator;
 - else
 - monetarySeparator = currencyElements[2].charAt(0);
 - }
 - /**
 - * Read the default serializable fields, then if <code>serialVersionOnStream</code>
 - * is less than 1, initialize <code>monetarySeparator</code> to be
 - * the same as <code>decimalSeparator</code> and <code>exponential</code>
 - * to be 'E'.
 - * Finally, set serialVersionOnStream back to the maximum allowed value so that
 - * default serialization will work properly if this object is streamed out again.
 - *
 - * @since JDK 1.1.6
 - */
 - private void readObject(ObjectInputStream stream)
 - throws IOException, ClassNotFoundException
 - {
 - stream.defaultReadObject();
 - if (serialVersionOnStream < 1)
 - {
 - // Didn't have monetarySeparator or exponential field;
 - // use defaults.
 - monetarySeparator = decimalSeparator;
 - exponential = 'E';
 - }
 - serialVersionOnStream = currentSerialVersion;
 - }
 - /**
 - * Character used for zero.
 - *
 - * @serial
 - * @see #getZeroDigit
 - */
 - private char zeroDigit;
 - /**
 - * Character used for thousands separator.
 - *
 - * @serial
 - * @see #getGroupingSeparator
 - */
 - private char groupingSeparator;
 - /**
 - * Character used for decimal sign.
 - *
 - * @serial
 - * @see #getDecimalSeparator
 - */
 - private char decimalSeparator;
 - /**
 - * Character used for mille percent sign.
 - *
 - * @serial
 - * @see #getPerMill
 - */
 - private char perMill;
 - /**
 - * Character used for percent sign.
 - * @serial
 - * @see #getPercent
 - */
 - private char percent;
 - /**
 - * Character used for a digit in a pattern.
 - *
 - * @serial
 - * @see #getDigit
 - */
 - private char digit;
 - /**
 - * Character used to separate positive and negative subpatterns
 - * in a pattern.
 - *
 - * @serial
 - * @see #getPatternSeparator
 - */
 - private char patternSeparator;
 - /**
 - * Character used to represent infinity.
 - * @serial
 - * @see #getInfinity
 - */
 - private String infinity;
 - /**
 - * Character used to represent NaN.
 - * @serial
 - * @see #getNaN
 - */
 - private String NaN;
 - /**
 - * Character used to represent minus sign.
 - * @serial
 - * @see #getMinusSign
 - */
 - private char minusSign;
 - /**
 - * String denoting the local currency, e.g. "$".
 - * @serial
 - * @see #getCurrencySymbol
 - */
 - private String currencySymbol;
 - /**
 - * International string denoting the local currency, e.g. "USD".
 - * @serial
 - * @see #getInternationalCurrencySymbol
 - */
 - private String intlCurrencySymbol;
 - /**
 - * The decimal separator used when formatting currency values.
 - * @serial
 - * @since JDK 1.1.6
 - * @see #getMonetaryDecimalSeparator
 - */
 - private char monetarySeparator; // Field new in JDK 1.1.6
 - /**
 - * The character used to distinguish the exponent in a number formatted
 - * in exponential notation, e.g. 'E' for a number such as "1.23E45".
 - * <p>
 - * Note that the public API provides no way to set this field,
 - * even though it is supported by the implementation and the stream format.
 - * The intent is that this will be added to the API in the future.
 - *
 - * @serial
 - * @since JDK 1.1.6
 - */
 - private char exponential; // Field new in JDK 1.1.6
 - // Proclaim JDK 1.1 FCS compatibility
 - static final long serialVersionUID = 5772796243397350300L;
 - // The internal serial version which says which version was written
 - // - 0 (default) for version up to JDK 1.1.5
 - // - 1 for version from JDK 1.1.6, which includes two new fields:
 - // monetarySeparator and exponential.
 - private static final int currentSerialVersion = 1;
 - /**
 - * Describes the version of <code>DecimalFormatSymbols</code> present on the stream.
 - * Possible values are:
 - * <ul>
 - * <li><b>0</b> (or uninitialized): versions prior to JDK 1.1.6.
 - *
 - * <li><b>1</b>: Versions written by JDK 1.1.6 or later, which includes
 - * two new fields: <code>monetarySeparator</code> and <code>exponential</code>.
 - * </ul>
 - * When streaming out a <code>DecimalFormatSymbols</code>, the most recent format
 - * (corresponding to the highest allowable <code>serialVersionOnStream</code>)
 - * is always written.
 - *
 - * @serial
 - * @since JDK 1.1.6
 - */
 - private int serialVersionOnStream = currentSerialVersion;
 - /**
 - * cache to hold the NumberElements and the CurrencyElements
 - * of a Locale.
 - */
 - private static final Hashtable cachedLocaleData = new Hashtable(3);
 - }