OSDN Git Service

0f404a57235dd7e23a4b561ea6d44cbf6cbf89d5
[pf3gnuchains/gcc-fork.git] / libjava / java / text / DecimalFormatSymbols.java
1 // DecimalFormatSymbols.java - Symbols used to format numbers.
2
3 /* Copyright (C) 1999, 2000  Free Software Foundation
4
5    This file is part of libgcj.
6
7 This software is copyrighted work licensed under the terms of the
8 Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
9 details.  */
10
11 package java.text;
12
13 import java.io.Serializable;
14 import java.util.Locale;
15 import java.util.MissingResourceException;
16 import java.util.ResourceBundle;
17 import java.io.ObjectInputStream;
18 import java.io.IOException;
19
20 /**
21  * @author Tom Tromey <tromey@cygnus.com>
22  * @date February 24, 1999
23  */
24 /* Written using "Java Class Libraries", 2nd edition, plus online
25  * API docs for JDK 1.2 from http://www.javasoft.com.
26  * Status:  Believed complete and correct to 1.2.
27  */
28
29 public final class DecimalFormatSymbols implements Cloneable, Serializable
30 {
31   public Object clone ()
32     {
33       return new DecimalFormatSymbols (this);
34     }
35
36   private DecimalFormatSymbols (DecimalFormatSymbols orig)
37     {
38       this.currencySymbol = orig.currencySymbol;
39       this.decimalSeparator = orig.decimalSeparator;
40       this.digit = orig.digit;
41       this.exponential = orig.exponential;
42       this.groupingSeparator = orig.groupingSeparator;
43       this.infinity = orig.infinity;
44       this.intlCurrencySymbol = orig.intlCurrencySymbol;
45       this.monetarySeparator = orig.monetarySeparator;
46       this.minusSign = orig.minusSign;
47       this.NaN = orig.NaN;
48       this.patternSeparator = orig.patternSeparator;
49       this.percent = orig.percent;
50       this.perMill = orig.perMill;
51       this.zeroDigit = orig.zeroDigit;
52     }
53
54   public DecimalFormatSymbols ()
55     {
56       this (Locale.getDefault());
57     }
58
59   private final String safeGetString (ResourceBundle bundle,
60                                       String name, String def)
61     {
62       if (bundle != null)
63         {
64           try
65             {
66               return bundle.getString(name);
67             }
68           catch (MissingResourceException x)
69             {
70             }
71         }
72       return def;
73     }
74
75   private final char safeGetChar (ResourceBundle bundle,
76                                   String name, char def)
77     {
78       String r = null;
79       if (bundle != null)
80         {
81           try
82             {
83               r = bundle.getString(name);
84             }
85           catch (MissingResourceException x)
86             {
87             }
88         }
89       if (r == null || r.length() < 1)
90         return def;
91       return r.charAt(0);
92     }
93
94   public DecimalFormatSymbols (Locale loc)
95     {
96       ResourceBundle res;
97       try
98         {
99           res = ResourceBundle.getBundle("gnu.gcj.text.LocaleData", loc);
100         }
101       catch (MissingResourceException x)
102         {
103           res = null;
104         }
105       currencySymbol = safeGetString (res, "currencySymbol", "$");
106       decimalSeparator = safeGetChar (res, "decimalSeparator", '.');
107       digit = safeGetChar (res, "digit", '#');
108       exponential = safeGetChar (res, "exponential", 'E');
109       groupingSeparator = safeGetChar (res, "groupingSeparator", ',');
110       infinity = safeGetString (res, "infinity", "\u221e");
111       // FIXME: default?
112       intlCurrencySymbol = safeGetString (res, "intlCurrencySymbol", "$");
113       try
114         {
115           monetarySeparator = safeGetChar (res, "monetarySeparator", '.');
116         }
117       catch (MissingResourceException x)
118         {
119           monetarySeparator = decimalSeparator;
120         }
121       minusSign = safeGetChar (res, "minusSign", '-');
122       NaN = safeGetString (res, "NaN", "\ufffd");
123       patternSeparator = safeGetChar (res, "patternSeparator", ';');
124       percent = safeGetChar (res, "percent", '%');
125       perMill = safeGetChar (res, "perMill", '\u2030');
126       zeroDigit = safeGetChar (res, "zeroDigit", '0');
127     }
128
129   public boolean equals (Object obj)
130     {
131       if (! (obj instanceof DecimalFormatSymbols))
132         return false;
133       DecimalFormatSymbols dfs = (DecimalFormatSymbols) obj;
134       return (currencySymbol.equals(dfs.currencySymbol)
135               && decimalSeparator == dfs.decimalSeparator
136               && digit == dfs.digit
137               && exponential == dfs.exponential
138               && groupingSeparator == dfs.groupingSeparator
139               && infinity.equals(dfs.infinity)
140               && intlCurrencySymbol.equals(dfs.intlCurrencySymbol)
141               && minusSign == dfs.minusSign
142               && monetarySeparator == dfs.monetarySeparator
143               && NaN.equals(dfs.NaN)
144               && patternSeparator == dfs.patternSeparator
145               && percent == dfs.percent
146               && perMill == dfs.perMill
147               && zeroDigit == dfs.zeroDigit);
148     }
149
150   public String getCurrencySymbol ()
151     {
152       return currencySymbol;
153     }
154
155   public char getDecimalSeparator ()
156     {
157       return decimalSeparator;
158     }
159
160   public char getDigit ()
161     {
162       return digit;
163     }
164
165   // This is our own extension.
166   char getExponential ()
167     {
168       return exponential;
169     }
170
171   public char getGroupingSeparator ()
172     {
173       return groupingSeparator;
174     }
175
176   public String getInfinity ()
177     {
178       return infinity;
179     }
180
181   public String getInternationalCurrencySymbol ()
182     {
183       return intlCurrencySymbol;
184     }
185
186   public char getMinusSign ()
187     {
188       return minusSign;
189     }
190
191   public char getMonetaryDecimalSeparator ()
192     {
193       return monetarySeparator;
194     }
195
196   public String getNaN ()
197     {
198       return NaN;
199     }
200
201   public char getPatternSeparator ()
202     {
203       return patternSeparator;
204     }
205
206   public char getPercent ()
207     {
208       return percent;
209     }
210
211   public char getPerMill ()
212     {
213       return perMill;
214     }
215
216   public char getZeroDigit ()
217     {
218       return zeroDigit;
219     }
220
221   public int hashCode ()
222     {
223       // Compute based on zero digit, grouping separator, and decimal
224       // separator -- JCL book.  This probably isn't a very good hash
225       // code.
226       return zeroDigit << 16 + groupingSeparator << 8 + decimalSeparator;
227     }
228
229   public void setCurrencySymbol (String currency)
230     {
231       currencySymbol = currency;
232     }
233
234   public void setDecimalSeparator (char decimalSep)
235     {
236       decimalSeparator = decimalSep;
237     }
238
239   public void setDigit (char digit)
240     {
241       this.digit = digit;
242     }
243
244   // This is our own extension.
245   void setExponential (char exp)
246     {
247       exponential = exp;
248     }
249
250   public void setGroupingSeparator (char groupSep)
251     {
252       groupingSeparator = groupSep;
253     }
254
255   public void setInfinity (String infinity)
256     {
257       this.infinity = infinity;
258     }
259
260   public void setInternationalCurrencySymbol (String currency)
261     {
262       intlCurrencySymbol = currency;
263     }
264
265   public void setMinusSign (char minusSign)
266     {
267       this.minusSign = minusSign;
268     }
269
270   public void setMonetaryDecimalSeparator (char decimalSep)
271     {
272       monetarySeparator = decimalSep;
273     }
274
275   public void setNaN (String nan)
276     {
277       NaN = nan;
278     }
279
280   public void setPatternSeparator (char patternSep)
281     {
282       patternSeparator = patternSep;
283     }
284
285   public void setPercent (char percent)
286     {
287       this.percent = percent;
288     }
289
290   public void setPerMill (char perMill)
291     {
292       this.perMill = perMill;
293     }
294
295   public void setZeroDigit (char zeroDigit)
296     {
297       this.zeroDigit = zeroDigit;
298     }
299
300   // The names of the instance variables are fixed by the
301   // serialization spec.
302   private String currencySymbol;
303   private char decimalSeparator;
304   private char digit;
305   private char exponential;
306   private char groupingSeparator;
307   private String infinity;
308   private String intlCurrencySymbol;
309   private char minusSign;
310   private char monetarySeparator;
311   private String NaN;
312   private char patternSeparator;
313   private char percent;
314   private char perMill;
315   private int serialVersionOnStream = 1;
316   private char zeroDigit;
317   private static final long serialVersionUID = 5772796243397350300L;
318
319   private void readObject(ObjectInputStream stream)
320     throws IOException, ClassNotFoundException
321   {
322     stream.defaultReadObject();
323     if (serialVersionOnStream < 1)
324       {
325         monetarySeparator = decimalSeparator;
326         exponential = 'E';
327         serialVersionOnStream = 1;
328       }
329   }
330 }