]> gitweb.fperrin.net Git - Dictionary.git/blob - jars/icu4j-4_4_2-src/main/classes/localespi/src/com/ibm/icu/impl/jdkadapter/NumberFormatICU.java
go
[Dictionary.git] / jars / icu4j-4_4_2-src / main / classes / localespi / src / com / ibm / icu / impl / jdkadapter / NumberFormatICU.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.jdkadapter;\r
8 \r
9 import java.math.RoundingMode;\r
10 import java.text.FieldPosition;\r
11 import java.text.ParseException;\r
12 import java.text.ParsePosition;\r
13 import java.util.Currency;\r
14 \r
15 import com.ibm.icu.impl.icuadapter.NumberFormatJDK;\r
16 import com.ibm.icu.text.NumberFormat;\r
17 \r
18 /**\r
19  * NumberFormatICU is an adapter class which wraps ICU4J NumberFormat and\r
20  * implements java.text.NumberFormat APIs.\r
21  */\r
22 public class NumberFormatICU extends java.text.NumberFormat {\r
23 \r
24     private static final long serialVersionUID = 4892903815641574060L;\r
25 \r
26     private NumberFormat fIcuNfmt;\r
27 \r
28     private NumberFormatICU(NumberFormat icuNfmt) {\r
29         fIcuNfmt = icuNfmt;\r
30     }\r
31 \r
32     public static java.text.NumberFormat wrap(NumberFormat icuNfmt) {\r
33         if (icuNfmt instanceof NumberFormatJDK) {\r
34             return ((NumberFormatJDK)icuNfmt).unwrap();\r
35         }\r
36         return new NumberFormatICU(icuNfmt);\r
37     }\r
38 \r
39     public NumberFormat unwrap() {\r
40         return fIcuNfmt;\r
41     }\r
42 \r
43     @Override\r
44     public Object clone() {\r
45         NumberFormatICU other = (NumberFormatICU)super.clone();\r
46         other.fIcuNfmt = (NumberFormat)fIcuNfmt.clone();\r
47         return other;\r
48     }\r
49 \r
50     @Override\r
51     public boolean equals(Object obj) {\r
52         if (obj instanceof NumberFormatICU) {\r
53             return ((NumberFormatICU)obj).fIcuNfmt.equals(fIcuNfmt);\r
54         }\r
55         return false;\r
56     }\r
57 \r
58     //public String format(double number)\r
59 \r
60     @Override\r
61     public StringBuffer format(double number, StringBuffer toAppendTo, FieldPosition pos) {\r
62         return fIcuNfmt.format(number, toAppendTo, pos);\r
63     }\r
64 \r
65     //public String format(long number);\r
66 \r
67     @Override\r
68     public StringBuffer format(long number, StringBuffer toAppendTo, FieldPosition pos) {\r
69         return fIcuNfmt.format(number, toAppendTo, pos);\r
70     }\r
71 \r
72     @Override\r
73     public StringBuffer format(Object number, StringBuffer toAppendTo, FieldPosition pos) {\r
74         return fIcuNfmt.format(number, toAppendTo, pos);\r
75     }\r
76 \r
77     @Override\r
78     public Currency getCurrency() {\r
79         com.ibm.icu.util.Currency icuCurrency = fIcuNfmt.getCurrency();\r
80         if (icuCurrency == null) {\r
81             return null;\r
82         }\r
83         return Currency.getInstance(icuCurrency.getCurrencyCode());\r
84     }\r
85 \r
86     @Override\r
87     public int getMaximumFractionDigits() {\r
88         return fIcuNfmt.getMaximumFractionDigits();\r
89     }\r
90 \r
91     @Override\r
92     public int getMaximumIntegerDigits() {\r
93         return fIcuNfmt.getMaximumIntegerDigits();\r
94     }\r
95 \r
96     @Override\r
97     public int getMinimumFractionDigits() {\r
98         return fIcuNfmt.getMinimumFractionDigits();\r
99     }\r
100 \r
101     @Override\r
102     public int getMinimumIntegerDigits() {\r
103         return fIcuNfmt.getMinimumIntegerDigits();\r
104     }\r
105 \r
106     @Override\r
107     public RoundingMode getRoundingMode() {\r
108         int icuMode = fIcuNfmt.getRoundingMode();\r
109         RoundingMode mode = RoundingMode.UP;\r
110         switch (icuMode) {\r
111         case com.ibm.icu.math.BigDecimal.ROUND_CEILING:\r
112             mode = RoundingMode.CEILING;\r
113             break;\r
114         case com.ibm.icu.math.BigDecimal.ROUND_DOWN:\r
115             mode = RoundingMode.DOWN;\r
116             break;\r
117         case com.ibm.icu.math.BigDecimal.ROUND_FLOOR:\r
118             mode = RoundingMode.FLOOR;\r
119             break;\r
120         case com.ibm.icu.math.BigDecimal.ROUND_HALF_DOWN:\r
121             mode = RoundingMode.HALF_DOWN;\r
122             break;\r
123         case com.ibm.icu.math.BigDecimal.ROUND_HALF_EVEN:\r
124             mode = RoundingMode.HALF_EVEN;\r
125             break;\r
126         case com.ibm.icu.math.BigDecimal.ROUND_HALF_UP:\r
127             mode = RoundingMode.HALF_UP;\r
128             break;\r
129         case com.ibm.icu.math.BigDecimal.ROUND_UNNECESSARY:\r
130             mode = RoundingMode.UNNECESSARY;\r
131             break;\r
132         case com.ibm.icu.math.BigDecimal.ROUND_UP:\r
133             mode = RoundingMode.UP;\r
134             break;\r
135         }\r
136         return mode;\r
137     }\r
138 \r
139     @Override\r
140     public int hashCode() {\r
141         return fIcuNfmt.hashCode();\r
142     }\r
143 \r
144     @Override\r
145     public boolean isGroupingUsed() {\r
146         return fIcuNfmt.isGroupingUsed();\r
147     }\r
148 \r
149     @Override\r
150     public boolean isParseIntegerOnly() {\r
151         return fIcuNfmt.isParseIntegerOnly();\r
152     }\r
153 \r
154     @Override\r
155     public Number parse(String source) throws ParseException {\r
156         return fIcuNfmt.parse(source);\r
157     }\r
158 \r
159     @Override\r
160     public Number parse(String source, ParsePosition parsePosition) {\r
161         return fIcuNfmt.parse(source, parsePosition);\r
162     }\r
163 \r
164     //public Object parseObject(String source, ParsePosition pos)\r
165 \r
166     @Override\r
167     public void setCurrency(Currency currency) {\r
168         if (currency == null) {\r
169             fIcuNfmt.setCurrency(null);\r
170         } else {\r
171             fIcuNfmt.setCurrency(com.ibm.icu.util.Currency.getInstance(currency.getCurrencyCode()));\r
172         }\r
173     }\r
174 \r
175     @Override\r
176     public void setGroupingUsed(boolean newValue) {\r
177         fIcuNfmt.setGroupingUsed(newValue);\r
178     }\r
179 \r
180     @Override\r
181     public void setMaximumFractionDigits(int newValue) {\r
182         fIcuNfmt.setMaximumFractionDigits(newValue);\r
183     }\r
184 \r
185     @Override\r
186     public void setMaximumIntegerDigits(int newValue) {\r
187         fIcuNfmt.setMaximumIntegerDigits(newValue);\r
188     }\r
189 \r
190     @Override\r
191     public void setMinimumFractionDigits(int newValue) {\r
192         fIcuNfmt.setMinimumFractionDigits(newValue);\r
193     }\r
194 \r
195     @Override\r
196     public void setMinimumIntegerDigits(int newValue) {\r
197         fIcuNfmt.setMinimumIntegerDigits(newValue);\r
198     }\r
199 \r
200     @Override\r
201     public void setParseIntegerOnly(boolean value) {\r
202         fIcuNfmt.setParseIntegerOnly(value);\r
203     }\r
204 \r
205     @Override\r
206     public void setRoundingMode(RoundingMode roundingMode) {\r
207         if (roundingMode.equals(RoundingMode.CEILING)) {\r
208             fIcuNfmt.setRoundingMode(com.ibm.icu.math.BigDecimal.ROUND_CEILING);\r
209         } else if (roundingMode.equals(RoundingMode.DOWN)) {\r
210             fIcuNfmt.setRoundingMode(com.ibm.icu.math.BigDecimal.ROUND_DOWN);\r
211         } else if (roundingMode.equals(RoundingMode.FLOOR)) {\r
212             fIcuNfmt.setRoundingMode(com.ibm.icu.math.BigDecimal.ROUND_FLOOR);\r
213         } else if (roundingMode.equals(RoundingMode.HALF_DOWN)) {\r
214             fIcuNfmt.setRoundingMode(com.ibm.icu.math.BigDecimal.ROUND_HALF_DOWN);\r
215         } else if (roundingMode.equals(RoundingMode.HALF_EVEN)) {\r
216             fIcuNfmt.setRoundingMode(com.ibm.icu.math.BigDecimal.ROUND_HALF_EVEN);\r
217         } else if (roundingMode.equals(RoundingMode.HALF_UP)) {\r
218             fIcuNfmt.setRoundingMode(com.ibm.icu.math.BigDecimal.ROUND_HALF_UP);\r
219         } else if (roundingMode.equals(RoundingMode.UNNECESSARY)) {\r
220             fIcuNfmt.setRoundingMode(com.ibm.icu.math.BigDecimal.ROUND_UNNECESSARY);\r
221         } else if (roundingMode.equals(RoundingMode.UP)) {\r
222             fIcuNfmt.setRoundingMode(com.ibm.icu.math.BigDecimal.ROUND_UP);\r
223         } else {\r
224             throw new IllegalArgumentException("Invalid rounding mode was specified.");\r
225         }\r
226     }\r
227 }\r