blob: 32b408f8e560d1b67a86f989215aca990c7ae34e [file] [log] [blame]
/*
*******************************************************************************
* Copyright (C) 2008, International Business Machines Corporation and *
* others. All Rights Reserved. *
*******************************************************************************
*/
package com.ibm.icu.impl.jdkadapter;
import java.math.RoundingMode;
import java.text.FieldPosition;
import java.text.ParseException;
import java.text.ParsePosition;
import java.util.Currency;
import com.ibm.icu.impl.icuadapter.NumberFormatJDK;
import com.ibm.icu.text.NumberFormat;
/**
* NumberFormatICU is an adapter class which wraps ICU4J NumberFormat and
* implements java.text.NumberFormat APIs.
*/
public class NumberFormatICU extends java.text.NumberFormat {
private static final long serialVersionUID = 4892903815641574060L;
private NumberFormat fIcuNfmt;
private NumberFormatICU(NumberFormat icuNfmt) {
fIcuNfmt = icuNfmt;
}
public static java.text.NumberFormat wrap(NumberFormat icuNfmt) {
if (icuNfmt instanceof NumberFormatJDK) {
return ((NumberFormatJDK)icuNfmt).unwrap();
}
return new NumberFormatICU(icuNfmt);
}
public NumberFormat unwrap() {
return fIcuNfmt;
}
@Override
public Object clone() {
NumberFormatICU other = (NumberFormatICU)super.clone();
other.fIcuNfmt = (NumberFormat)fIcuNfmt.clone();
return other;
}
@Override
public boolean equals(Object obj) {
if (obj instanceof NumberFormatICU) {
return ((NumberFormatICU)obj).fIcuNfmt.equals(fIcuNfmt);
}
return false;
}
//public String format(double number)
@Override
public StringBuffer format(double number, StringBuffer toAppendTo, FieldPosition pos) {
return fIcuNfmt.format(number, toAppendTo, pos);
}
//public String format(long number);
@Override
public StringBuffer format(long number, StringBuffer toAppendTo, FieldPosition pos) {
return fIcuNfmt.format(number, toAppendTo, pos);
}
@Override
public StringBuffer format(Object number, StringBuffer toAppendTo, FieldPosition pos) {
return fIcuNfmt.format(number, toAppendTo, pos);
}
@Override
public Currency getCurrency() {
com.ibm.icu.util.Currency icuCurrency = fIcuNfmt.getCurrency();
if (icuCurrency == null) {
return null;
}
return Currency.getInstance(icuCurrency.getCurrencyCode());
}
@Override
public int getMaximumFractionDigits() {
return fIcuNfmt.getMaximumFractionDigits();
}
@Override
public int getMaximumIntegerDigits() {
return fIcuNfmt.getMaximumIntegerDigits();
}
@Override
public int getMinimumFractionDigits() {
return fIcuNfmt.getMinimumFractionDigits();
}
@Override
public int getMinimumIntegerDigits() {
return fIcuNfmt.getMinimumIntegerDigits();
}
@Override
public RoundingMode getRoundingMode() {
int icuMode = fIcuNfmt.getRoundingMode();
RoundingMode mode = RoundingMode.UP;
switch (icuMode) {
case com.ibm.icu.math.BigDecimal.ROUND_CEILING:
mode = RoundingMode.CEILING;
break;
case com.ibm.icu.math.BigDecimal.ROUND_DOWN:
mode = RoundingMode.DOWN;
break;
case com.ibm.icu.math.BigDecimal.ROUND_FLOOR:
mode = RoundingMode.FLOOR;
break;
case com.ibm.icu.math.BigDecimal.ROUND_HALF_DOWN:
mode = RoundingMode.HALF_DOWN;
break;
case com.ibm.icu.math.BigDecimal.ROUND_HALF_EVEN:
mode = RoundingMode.HALF_EVEN;
break;
case com.ibm.icu.math.BigDecimal.ROUND_HALF_UP:
mode = RoundingMode.HALF_UP;
break;
case com.ibm.icu.math.BigDecimal.ROUND_UNNECESSARY:
mode = RoundingMode.UNNECESSARY;
break;
case com.ibm.icu.math.BigDecimal.ROUND_UP:
mode = RoundingMode.UP;
break;
}
return mode;
}
@Override
public int hashCode() {
return fIcuNfmt.hashCode();
}
@Override
public boolean isGroupingUsed() {
return fIcuNfmt.isGroupingUsed();
}
@Override
public boolean isParseIntegerOnly() {
return fIcuNfmt.isParseIntegerOnly();
}
@Override
public Number parse(String source) throws ParseException {
return fIcuNfmt.parse(source);
}
@Override
public Number parse(String source, ParsePosition parsePosition) {
return fIcuNfmt.parse(source, parsePosition);
}
//public Object parseObject(String source, ParsePosition pos)
@Override
public void setCurrency(Currency currency) {
if (currency == null) {
fIcuNfmt.setCurrency(null);
} else {
fIcuNfmt.setCurrency(com.ibm.icu.util.Currency.getInstance(currency.getCurrencyCode()));
}
}
@Override
public void setGroupingUsed(boolean newValue) {
fIcuNfmt.setGroupingUsed(newValue);
}
@Override
public void setMaximumFractionDigits(int newValue) {
fIcuNfmt.setMaximumFractionDigits(newValue);
}
@Override
public void setMaximumIntegerDigits(int newValue) {
fIcuNfmt.setMaximumIntegerDigits(newValue);
}
@Override
public void setMinimumFractionDigits(int newValue) {
fIcuNfmt.setMinimumFractionDigits(newValue);
}
@Override
public void setMinimumIntegerDigits(int newValue) {
fIcuNfmt.setMinimumIntegerDigits(newValue);
}
@Override
public void setParseIntegerOnly(boolean value) {
fIcuNfmt.setParseIntegerOnly(value);
}
@Override
public void setRoundingMode(RoundingMode roundingMode) {
if (roundingMode.equals(RoundingMode.CEILING)) {
fIcuNfmt.setRoundingMode(com.ibm.icu.math.BigDecimal.ROUND_CEILING);
} else if (roundingMode.equals(RoundingMode.DOWN)) {
fIcuNfmt.setRoundingMode(com.ibm.icu.math.BigDecimal.ROUND_DOWN);
} else if (roundingMode.equals(RoundingMode.FLOOR)) {
fIcuNfmt.setRoundingMode(com.ibm.icu.math.BigDecimal.ROUND_FLOOR);
} else if (roundingMode.equals(RoundingMode.HALF_DOWN)) {
fIcuNfmt.setRoundingMode(com.ibm.icu.math.BigDecimal.ROUND_HALF_DOWN);
} else if (roundingMode.equals(RoundingMode.HALF_EVEN)) {
fIcuNfmt.setRoundingMode(com.ibm.icu.math.BigDecimal.ROUND_HALF_EVEN);
} else if (roundingMode.equals(RoundingMode.HALF_UP)) {
fIcuNfmt.setRoundingMode(com.ibm.icu.math.BigDecimal.ROUND_HALF_UP);
} else if (roundingMode.equals(RoundingMode.UNNECESSARY)) {
fIcuNfmt.setRoundingMode(com.ibm.icu.math.BigDecimal.ROUND_UNNECESSARY);
} else if (roundingMode.equals(RoundingMode.UP)) {
fIcuNfmt.setRoundingMode(com.ibm.icu.math.BigDecimal.ROUND_UP);
} else {
throw new IllegalArgumentException("Invalid rounding mode was specified.");
}
}
}