2 *******************************************************************************
\r
3 * Copyright (C) 2008, International Business Machines Corporation and *
\r
4 * others. All Rights Reserved. *
\r
5 *******************************************************************************
\r
7 package com.ibm.icu.impl.jdkadapter;
\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
15 import com.ibm.icu.impl.icuadapter.NumberFormatJDK;
\r
16 import com.ibm.icu.text.NumberFormat;
\r
19 * NumberFormatICU is an adapter class which wraps ICU4J NumberFormat and
\r
20 * implements java.text.NumberFormat APIs.
\r
22 public class NumberFormatICU extends java.text.NumberFormat {
\r
24 private static final long serialVersionUID = 4892903815641574060L;
\r
26 private NumberFormat fIcuNfmt;
\r
28 private NumberFormatICU(NumberFormat icuNfmt) {
\r
32 public static java.text.NumberFormat wrap(NumberFormat icuNfmt) {
\r
33 if (icuNfmt instanceof NumberFormatJDK) {
\r
34 return ((NumberFormatJDK)icuNfmt).unwrap();
\r
36 return new NumberFormatICU(icuNfmt);
\r
39 public NumberFormat unwrap() {
\r
44 public Object clone() {
\r
45 NumberFormatICU other = (NumberFormatICU)super.clone();
\r
46 other.fIcuNfmt = (NumberFormat)fIcuNfmt.clone();
\r
51 public boolean equals(Object obj) {
\r
52 if (obj instanceof NumberFormatICU) {
\r
53 return ((NumberFormatICU)obj).fIcuNfmt.equals(fIcuNfmt);
\r
58 //public String format(double number)
\r
61 public StringBuffer format(double number, StringBuffer toAppendTo, FieldPosition pos) {
\r
62 return fIcuNfmt.format(number, toAppendTo, pos);
\r
65 //public String format(long number);
\r
68 public StringBuffer format(long number, StringBuffer toAppendTo, FieldPosition pos) {
\r
69 return fIcuNfmt.format(number, toAppendTo, pos);
\r
73 public StringBuffer format(Object number, StringBuffer toAppendTo, FieldPosition pos) {
\r
74 return fIcuNfmt.format(number, toAppendTo, pos);
\r
78 public Currency getCurrency() {
\r
79 com.ibm.icu.util.Currency icuCurrency = fIcuNfmt.getCurrency();
\r
80 if (icuCurrency == null) {
\r
83 return Currency.getInstance(icuCurrency.getCurrencyCode());
\r
87 public int getMaximumFractionDigits() {
\r
88 return fIcuNfmt.getMaximumFractionDigits();
\r
92 public int getMaximumIntegerDigits() {
\r
93 return fIcuNfmt.getMaximumIntegerDigits();
\r
97 public int getMinimumFractionDigits() {
\r
98 return fIcuNfmt.getMinimumFractionDigits();
\r
102 public int getMinimumIntegerDigits() {
\r
103 return fIcuNfmt.getMinimumIntegerDigits();
\r
107 public RoundingMode getRoundingMode() {
\r
108 int icuMode = fIcuNfmt.getRoundingMode();
\r
109 RoundingMode mode = RoundingMode.UP;
\r
111 case com.ibm.icu.math.BigDecimal.ROUND_CEILING:
\r
112 mode = RoundingMode.CEILING;
\r
114 case com.ibm.icu.math.BigDecimal.ROUND_DOWN:
\r
115 mode = RoundingMode.DOWN;
\r
117 case com.ibm.icu.math.BigDecimal.ROUND_FLOOR:
\r
118 mode = RoundingMode.FLOOR;
\r
120 case com.ibm.icu.math.BigDecimal.ROUND_HALF_DOWN:
\r
121 mode = RoundingMode.HALF_DOWN;
\r
123 case com.ibm.icu.math.BigDecimal.ROUND_HALF_EVEN:
\r
124 mode = RoundingMode.HALF_EVEN;
\r
126 case com.ibm.icu.math.BigDecimal.ROUND_HALF_UP:
\r
127 mode = RoundingMode.HALF_UP;
\r
129 case com.ibm.icu.math.BigDecimal.ROUND_UNNECESSARY:
\r
130 mode = RoundingMode.UNNECESSARY;
\r
132 case com.ibm.icu.math.BigDecimal.ROUND_UP:
\r
133 mode = RoundingMode.UP;
\r
140 public int hashCode() {
\r
141 return fIcuNfmt.hashCode();
\r
145 public boolean isGroupingUsed() {
\r
146 return fIcuNfmt.isGroupingUsed();
\r
150 public boolean isParseIntegerOnly() {
\r
151 return fIcuNfmt.isParseIntegerOnly();
\r
155 public Number parse(String source) throws ParseException {
\r
156 return fIcuNfmt.parse(source);
\r
160 public Number parse(String source, ParsePosition parsePosition) {
\r
161 return fIcuNfmt.parse(source, parsePosition);
\r
164 //public Object parseObject(String source, ParsePosition pos)
\r
167 public void setCurrency(Currency currency) {
\r
168 if (currency == null) {
\r
169 fIcuNfmt.setCurrency(null);
\r
171 fIcuNfmt.setCurrency(com.ibm.icu.util.Currency.getInstance(currency.getCurrencyCode()));
\r
176 public void setGroupingUsed(boolean newValue) {
\r
177 fIcuNfmt.setGroupingUsed(newValue);
\r
181 public void setMaximumFractionDigits(int newValue) {
\r
182 fIcuNfmt.setMaximumFractionDigits(newValue);
\r
186 public void setMaximumIntegerDigits(int newValue) {
\r
187 fIcuNfmt.setMaximumIntegerDigits(newValue);
\r
191 public void setMinimumFractionDigits(int newValue) {
\r
192 fIcuNfmt.setMinimumFractionDigits(newValue);
\r
196 public void setMinimumIntegerDigits(int newValue) {
\r
197 fIcuNfmt.setMinimumIntegerDigits(newValue);
\r
201 public void setParseIntegerOnly(boolean value) {
\r
202 fIcuNfmt.setParseIntegerOnly(value);
\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
224 throw new IllegalArgumentException("Invalid rounding mode was specified.");
\r