]> gitweb.fperrin.net Git - Dictionary.git/blob - jars/icu4j-4_4_2-src/main/classes/localespi/src/com/ibm/icu/impl/icuadapter/NumberFormatJDK.java
go
[Dictionary.git] / jars / icu4j-4_4_2-src / main / classes / localespi / src / com / ibm / icu / impl / icuadapter / NumberFormatJDK.java
1 /*\r
2  *******************************************************************************\r
3  * Copyright (C) 2008, International Business Machines Corporation and         *\r
4  * others. All Rights Reserved.                                                *\r
5  *******************************************************************************\r
6  */\r
7 package com.ibm.icu.impl.icuadapter;\r
8 \r
9 import java.math.RoundingMode;\r
10 import java.text.FieldPosition;\r
11 import java.text.NumberFormat;\r
12 import java.text.ParseException;\r
13 import java.text.ParsePosition;\r
14 \r
15 import com.ibm.icu.impl.jdkadapter.NumberFormatICU;\r
16 import com.ibm.icu.math.BigDecimal;\r
17 import com.ibm.icu.util.Currency;\r
18 import com.ibm.icu.util.CurrencyAmount;\r
19 \r
20 /**\r
21  * NumberFormatJDK is an adapter class which wraps java.text.NumberFormat and\r
22  * implements ICU4J NumberFormat APIs.\r
23  */\r
24 public class NumberFormatJDK extends com.ibm.icu.text.NumberFormat {\r
25 \r
26     private static final long serialVersionUID = -1739846528146803964L;\r
27 \r
28     private NumberFormat fJdkNfmt;\r
29 \r
30     private NumberFormatJDK(NumberFormat jdkNfmt) {\r
31         fJdkNfmt = jdkNfmt;\r
32     }\r
33 \r
34     public static com.ibm.icu.text.NumberFormat wrap(NumberFormat jdkNfmt) {\r
35         if (jdkNfmt instanceof NumberFormatICU) {\r
36             return ((NumberFormatICU)jdkNfmt).unwrap();\r
37         }\r
38         return new NumberFormatJDK(jdkNfmt);\r
39     }\r
40 \r
41     public NumberFormat unwrap() {\r
42         return fJdkNfmt;\r
43     }\r
44 \r
45     @Override\r
46     public Object clone() {\r
47         NumberFormatJDK other = (NumberFormatJDK)super.clone();\r
48         other.fJdkNfmt = (NumberFormat)fJdkNfmt.clone();\r
49         return other;\r
50     }\r
51 \r
52     @Override\r
53     public boolean equals(Object obj) {\r
54         if (obj instanceof NumberFormatJDK) {\r
55             return ((NumberFormatJDK)obj).fJdkNfmt.equals(fJdkNfmt);\r
56         }\r
57         return false;\r
58     }\r
59 \r
60     //public String format(java.math.BigDecimal number)\r
61     //public String format(BigDecimal number)\r
62 \r
63     @Override\r
64     public StringBuffer format(java.math.BigDecimal number, StringBuffer toAppendTo, FieldPosition pos) {\r
65         return fJdkNfmt.format(number, toAppendTo, pos);\r
66     }\r
67 \r
68     @Override\r
69     public StringBuffer format(BigDecimal number, StringBuffer toAppendTo, FieldPosition pos) {\r
70         return fJdkNfmt.format(number.toBigDecimal(), toAppendTo, pos);\r
71     }\r
72 \r
73     @Override\r
74     public StringBuffer format(java.math.BigInteger number, StringBuffer toAppendTo, FieldPosition pos) {\r
75         return fJdkNfmt.format(number, toAppendTo, pos);\r
76     }\r
77 \r
78     //public String format(java.math.BigInteger number) \r
79 \r
80     //String format(CurrencyAmount currAmt)\r
81 \r
82     @Override\r
83     public StringBuffer format(CurrencyAmount currAmt, StringBuffer toAppendTo, FieldPosition pos) {\r
84         java.util.Currency save = fJdkNfmt.getCurrency();\r
85         String currCode = currAmt.getCurrency().getCurrencyCode();\r
86         boolean same = save.getCurrencyCode().equals(currCode);\r
87         if (!same) {\r
88             fJdkNfmt.setCurrency(java.util.Currency.getInstance(currCode));\r
89         }\r
90         fJdkNfmt.format(currAmt.getNumber(), toAppendTo, pos);\r
91         if (!same) {\r
92             fJdkNfmt.setCurrency(save);\r
93         }\r
94         return toAppendTo;\r
95     }\r
96 \r
97     //public String format(double number)\r
98 \r
99     @Override\r
100     public StringBuffer format(double number, StringBuffer toAppendTo, FieldPosition pos) {\r
101         return fJdkNfmt.format(number, toAppendTo, pos);\r
102     }\r
103 \r
104     //public String format(long number)\r
105 \r
106     @Override\r
107     public StringBuffer format(long number, StringBuffer toAppendTo, FieldPosition pos) {\r
108         return fJdkNfmt.format(number, toAppendTo, pos);\r
109     }\r
110 \r
111     @Override\r
112     public StringBuffer format(Object number, StringBuffer toAppendTo, FieldPosition pos) {\r
113         return fJdkNfmt.format(number, toAppendTo, pos);\r
114     }\r
115 \r
116     @Override\r
117     public Currency getCurrency() {\r
118         java.util.Currency jdkCurrency = fJdkNfmt.getCurrency();\r
119         if (jdkCurrency == null) {\r
120             return null;\r
121         }\r
122         return Currency.getInstance(jdkCurrency.getCurrencyCode());\r
123     }\r
124 \r
125     //protected Currency getEffectiveCurrency()\r
126 \r
127     @Override\r
128     public int getMaximumFractionDigits() {\r
129         return fJdkNfmt.getMaximumFractionDigits();\r
130     }\r
131 \r
132     @Override\r
133     public int getMaximumIntegerDigits() {\r
134         return fJdkNfmt.getMaximumIntegerDigits();\r
135     }\r
136 \r
137     @Override\r
138     public int getMinimumFractionDigits() {\r
139         return fJdkNfmt.getMinimumFractionDigits();\r
140     }\r
141 \r
142     public int getMinumumIntegerDigits() {\r
143         return fJdkNfmt.getMinimumIntegerDigits();\r
144     }\r
145 \r
146     @Override\r
147     public int getRoundingMode() {\r
148         RoundingMode jdkMode = fJdkNfmt.getRoundingMode();\r
149         int icuMode = BigDecimal.ROUND_UP;\r
150 \r
151         if (jdkMode.equals(RoundingMode.CEILING)) {\r
152             icuMode = BigDecimal.ROUND_CEILING;\r
153         } else if (jdkMode.equals(RoundingMode.DOWN)) {\r
154             icuMode = BigDecimal.ROUND_DOWN;\r
155         } else if (jdkMode.equals(RoundingMode.FLOOR)) {\r
156             icuMode = BigDecimal.ROUND_FLOOR;\r
157         } else if (jdkMode.equals(RoundingMode.HALF_DOWN)) {\r
158             icuMode = BigDecimal.ROUND_HALF_DOWN;\r
159         } else if (jdkMode.equals(RoundingMode.HALF_EVEN)) {\r
160             icuMode = BigDecimal.ROUND_HALF_EVEN;\r
161         } else if (jdkMode.equals(RoundingMode.HALF_UP)) {\r
162             icuMode = BigDecimal.ROUND_HALF_UP;\r
163         } else if (jdkMode.equals(RoundingMode.UNNECESSARY)) {\r
164             icuMode = BigDecimal.ROUND_UNNECESSARY;\r
165         } else if (jdkMode.equals(RoundingMode.UP)) {\r
166             icuMode = BigDecimal.ROUND_UP;\r
167         }\r
168         return icuMode;\r
169     }\r
170 \r
171     @Override\r
172     public int hashCode() {\r
173         return fJdkNfmt.hashCode();\r
174     }\r
175 \r
176     @Override\r
177     public boolean isGroupingUsed() {\r
178         return fJdkNfmt.isGroupingUsed();\r
179     }\r
180 \r
181     @Override\r
182     public boolean isParseIntegerOnly() {\r
183         return fJdkNfmt.isParseIntegerOnly();\r
184     }\r
185 \r
186     @Override\r
187     public boolean isParseStrict() {\r
188         // JDK NumberFormat does not support strict parsing\r
189         return false;\r
190     }\r
191 \r
192     @Override\r
193     public Number parse(String text) throws ParseException {\r
194         return fJdkNfmt.parse(text);\r
195     }\r
196 \r
197     @Override\r
198     public Number parse(String text, ParsePosition parsePosition) {\r
199         return fJdkNfmt.parse(text, parsePosition);\r
200     }\r
201 \r
202     //public Object parseObject(String source, ParsePosition parsePosition)\r
203 \r
204     @Override\r
205     public void setCurrency(Currency theCurrency) {\r
206         if (theCurrency == null) {\r
207             fJdkNfmt.setCurrency(null);\r
208             return;\r
209         } else {\r
210             fJdkNfmt.setCurrency(java.util.Currency.getInstance(theCurrency.getCurrencyCode()));\r
211         }\r
212     }\r
213 \r
214     @Override\r
215     public void setGroupingUsed(boolean newValue) {\r
216         fJdkNfmt.setGroupingUsed(newValue);\r
217     }\r
218 \r
219     @Override\r
220     public void setMaximumFractionDigits(int newValue) {\r
221         fJdkNfmt.setMaximumFractionDigits(newValue);\r
222     }\r
223 \r
224     @Override\r
225     public void setMaximumIntegerDigits(int newValue) {\r
226         fJdkNfmt.setMaximumIntegerDigits(newValue);\r
227     }\r
228 \r
229     @Override\r
230     public void setMinimumFractionDigits(int newValue) {\r
231         fJdkNfmt.setMinimumFractionDigits(newValue);\r
232     }\r
233 \r
234     @Override\r
235     public void setMinimumIntegerDigits(int newValue) {\r
236         fJdkNfmt.setMinimumIntegerDigits(newValue);\r
237     }\r
238 \r
239     @Override\r
240     public void setParseIntegerOnly(boolean value) {\r
241         fJdkNfmt.setParseIntegerOnly(value);\r
242     }\r
243 \r
244     @Override\r
245     public void setParseStrict(boolean value) {\r
246         // JDK NumberFormat does not support strict parsing - ignore this operation\r
247     }\r
248 \r
249     @Override\r
250     public void setRoundingMode(int roundingMode) {\r
251         RoundingMode mode = null;\r
252         switch (roundingMode) {\r
253         case BigDecimal.ROUND_CEILING:\r
254             mode = RoundingMode.CEILING;\r
255             break;\r
256         case BigDecimal.ROUND_DOWN:\r
257             mode = RoundingMode.DOWN;\r
258             break;\r
259         case BigDecimal.ROUND_FLOOR:\r
260             mode = RoundingMode.FLOOR;\r
261             break;\r
262         case BigDecimal.ROUND_HALF_DOWN:\r
263             mode = RoundingMode.HALF_DOWN;\r
264             break;\r
265         case BigDecimal.ROUND_HALF_EVEN:\r
266             mode = RoundingMode.HALF_EVEN;\r
267             break;\r
268         case BigDecimal.ROUND_HALF_UP:\r
269             mode = RoundingMode.HALF_UP;\r
270             break;\r
271         case BigDecimal.ROUND_UNNECESSARY:\r
272             mode = RoundingMode.UNNECESSARY;\r
273             break;\r
274         case BigDecimal.ROUND_UP:\r
275             mode = RoundingMode.UP;\r
276             break;\r
277         }\r
278         if (mode == null) {\r
279             throw new IllegalArgumentException("Invalid rounding mode: " + roundingMode);\r
280         }\r
281         fJdkNfmt.setRoundingMode(mode);\r
282     }\r
283 }