17935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert/*
27935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert *******************************************************************************
37935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Copyright (C) 2008-2011, International Business Machines Corporation and    *
47935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * others. All Rights Reserved.                                                *
57935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert *******************************************************************************
67935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */
77935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertpackage com.ibm.icu.impl.jdkadapter;
87935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
97935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.math.RoundingMode;
107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.text.AttributedCharacterIterator;
117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.text.AttributedString;
127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.text.CharacterIterator;
137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.text.DecimalFormatSymbols;
147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.text.FieldPosition;
157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.text.ParsePosition;
167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.util.Currency;
177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.util.HashMap;
187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.util.Map;
197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.util.Map.Entry;
207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.text.DecimalFormat;
227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.text.NumberFormat;
237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert/**
257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * DecimalFormatICU is an adapter class which wraps ICU4J DecimalFormat and
267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * implements java.text.DecimalFormat APIs.
277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */
287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertpublic class DecimalFormatICU extends java.text.DecimalFormat {
297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    private static final long serialVersionUID = 6441573352964019403L;
317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    private DecimalFormat fIcuDecfmt;
337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    private DecimalFormatICU(DecimalFormat icuDecfmt) {
357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        fIcuDecfmt = icuDecfmt;
367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static java.text.DecimalFormat wrap(DecimalFormat icuDecfmt) {
397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        return new DecimalFormatICU(icuDecfmt);
407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public DecimalFormat unwrap() {
437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        return fIcuDecfmt;
447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    // Methods overriding java.text.DecimalFormat
477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    @Override
487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public void applyLocalizedPattern(String pattern) {
497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        fIcuDecfmt.applyLocalizedPattern(pattern);
507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    @Override
537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public void applyPattern(String pattern) {
547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        fIcuDecfmt.applyPattern(pattern);
557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    @Override
587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public Object clone() {
597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        DecimalFormatICU other = (DecimalFormatICU)super.clone();
607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        other.fIcuDecfmt = (DecimalFormat)fIcuDecfmt.clone();
617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        return other;
627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    @Override
657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public boolean equals(Object obj) {
667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        if (obj instanceof DecimalFormatICU) {
677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            return ((DecimalFormatICU)obj).fIcuDecfmt.equals(fIcuDecfmt);
687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        return false;
707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    @Override
737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public StringBuffer format(double number, StringBuffer result, FieldPosition fieldPosition) {
747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        return fIcuDecfmt.format(number, result, fieldPosition);
757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    @Override
787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public StringBuffer format(long number, StringBuffer result, FieldPosition fieldPosition) {
797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        return fIcuDecfmt.format(number, result, fieldPosition);
807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    @Override
837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public AttributedCharacterIterator formatToCharacterIterator(Object obj) {
847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        AttributedCharacterIterator aci = fIcuDecfmt.formatToCharacterIterator(obj);
857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        // Create a new AttributedString
877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        StringBuilder sb = new StringBuilder(aci.getEndIndex() - aci.getBeginIndex());
887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        char c = aci.first();
897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        while (true) {
907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            sb.append(c);
917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            c = aci.next();
927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            if (c == CharacterIterator.DONE) {
937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                break;
947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            }
957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        AttributedString resstr = new AttributedString(sb.toString());
977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        // Mapping attributes
997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        Map<AttributedCharacterIterator.Attribute,Object> attributes = null;
1007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        int index = aci.getBeginIndex();
1017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        int residx = 0;
1027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        while (true) {
1037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            if (aci.setIndex(index) == CharacterIterator.DONE) {
1047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                break;
1057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            }
1067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            attributes = aci.getAttributes();
1077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            if (attributes != null) {
1087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                int end = aci.getRunLimit();
1097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                Map<AttributedCharacterIterator.Attribute,Object> jdkAttributes =
1107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                    new HashMap<AttributedCharacterIterator.Attribute,Object>();
1117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                for (Entry<AttributedCharacterIterator.Attribute, Object> entry
1127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                        : attributes.entrySet()) {
1137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                    AttributedCharacterIterator.Attribute key = entry.getKey();
1147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                    AttributedCharacterIterator.Attribute jdkKey = mapAttribute(key);
1157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                    Object jdkVal = entry.getValue();
1167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                    if (jdkVal instanceof AttributedCharacterIterator.Attribute) {
1177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                        jdkVal = mapAttribute((AttributedCharacterIterator.Attribute)jdkVal);
1187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                    }
1197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                    jdkAttributes.put(jdkKey, jdkVal);
1207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                }
1217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                int resend = residx + (end - index);
1227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                resstr.addAttributes(jdkAttributes, residx, resend);
1237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                index = end;
1257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                residx = resend;
1267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            }
1277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
1287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        return resstr.getIterator();
1297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
1307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    @Override
1327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public Currency getCurrency() {
1337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        com.ibm.icu.util.Currency icuCurrency = fIcuDecfmt.getCurrency();
1347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        if (icuCurrency == null) {
1357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            return null;
1367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
1377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        return Currency.getInstance(icuCurrency.getCurrencyCode());
1387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
1397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    @Override
1417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public DecimalFormatSymbols getDecimalFormatSymbols() {
1427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        return DecimalFormatSymbolsICU.wrap(fIcuDecfmt.getDecimalFormatSymbols());
1437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
1447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    @Override
1467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public int getGroupingSize() {
1477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        return fIcuDecfmt.getGroupingSize();
1487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
1497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    @Override
1517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public int getMaximumFractionDigits() {
1527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        return fIcuDecfmt.getMaximumFractionDigits();
1537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
1547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    @Override
1567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public int getMaximumIntegerDigits() {
1577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        return fIcuDecfmt.getMaximumIntegerDigits();
1587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
1597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    @Override
1617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public int getMinimumFractionDigits() {
1627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        return fIcuDecfmt.getMinimumFractionDigits();
1637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
1647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    @Override
1667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public int getMinimumIntegerDigits() {
1677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        return fIcuDecfmt.getMinimumIntegerDigits();
1687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
1697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    @Override
1717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public int getMultiplier() {
1727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        return fIcuDecfmt.getMultiplier();
1737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
1747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    @Override
1767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public String getNegativePrefix() {
1777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        return fIcuDecfmt.getNegativePrefix();
1787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
1797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    @Override
1817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public String getNegativeSuffix() {
1827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        return fIcuDecfmt.getNegativeSuffix();
1837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
1847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    @Override
1867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public String getPositivePrefix() {
1877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        return fIcuDecfmt.getPositivePrefix();
1887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
1897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    @Override
1917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public String getPositiveSuffix() {
1927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        return fIcuDecfmt.getPositiveSuffix();
1937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
1947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    @Override
1967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public RoundingMode getRoundingMode() {
1977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        int icuMode = fIcuDecfmt.getRoundingMode();
1987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        RoundingMode mode = RoundingMode.UP;
1997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        switch (icuMode) {
2007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        case com.ibm.icu.math.BigDecimal.ROUND_CEILING:
2017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            mode = RoundingMode.CEILING;
2027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            break;
2037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        case com.ibm.icu.math.BigDecimal.ROUND_DOWN:
2047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            mode = RoundingMode.DOWN;
2057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            break;
2067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        case com.ibm.icu.math.BigDecimal.ROUND_FLOOR:
2077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            mode = RoundingMode.FLOOR;
2087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            break;
2097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        case com.ibm.icu.math.BigDecimal.ROUND_HALF_DOWN:
2107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            mode = RoundingMode.HALF_DOWN;
2117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            break;
2127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        case com.ibm.icu.math.BigDecimal.ROUND_HALF_EVEN:
2137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            mode = RoundingMode.HALF_EVEN;
2147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            break;
2157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        case com.ibm.icu.math.BigDecimal.ROUND_HALF_UP:
2167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            mode = RoundingMode.HALF_UP;
2177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            break;
2187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        case com.ibm.icu.math.BigDecimal.ROUND_UNNECESSARY:
2197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            mode = RoundingMode.UNNECESSARY;
2207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            break;
2217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        case com.ibm.icu.math.BigDecimal.ROUND_UP:
2227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            mode = RoundingMode.UP;
2237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            break;
2247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
2257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        return mode;
2267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
2277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    @Override
2297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public int hashCode() {
2307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        return fIcuDecfmt.hashCode();
2317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
2327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    @Override
2347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public boolean isDecimalSeparatorAlwaysShown() {
2357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        return fIcuDecfmt.isDecimalSeparatorAlwaysShown();
2367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
2377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    @Override
2397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public boolean isParseBigDecimal() {
2407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        return fIcuDecfmt.isParseBigDecimal();
2417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
2427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    @Override
2447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public Number parse(String text, ParsePosition pos) {
2457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        return fIcuDecfmt.parse(text, pos);
2467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
2477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    @Override
2497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public void setCurrency(Currency currency) {
2507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        if (currency == null) {
2517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            fIcuDecfmt.setCurrency(null);
2527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        } else {
2537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            fIcuDecfmt.setCurrency(com.ibm.icu.util.Currency.getInstance(currency.getCurrencyCode()));
2547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
2557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
2567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    @Override
2587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public void setDecimalFormatSymbols(DecimalFormatSymbols newSymbols) {
2597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        com.ibm.icu.text.DecimalFormatSymbols icuDecfs = null;
2607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        if (newSymbols instanceof DecimalFormatSymbolsICU) {
2617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            icuDecfs = ((DecimalFormatSymbolsICU)newSymbols).unwrap();
2627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        } else {
2637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            icuDecfs = fIcuDecfmt.getDecimalFormatSymbols();
2647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            Currency currency = newSymbols.getCurrency();
2667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            if (currency == null) {
2677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                icuDecfs.setCurrency(null);
2687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            } else {
2697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                icuDecfs.setCurrency(com.ibm.icu.util.Currency.getInstance(currency.getCurrencyCode()));
2707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            }
2717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            // Copy symbols
2737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            icuDecfs.setCurrencySymbol(newSymbols.getCurrencySymbol());
2747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            icuDecfs.setDecimalSeparator(newSymbols.getDecimalSeparator());
2757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            icuDecfs.setDigit(newSymbols.getDigit());
2767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            icuDecfs.setExponentSeparator(newSymbols.getExponentSeparator());
2777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            icuDecfs.setGroupingSeparator(newSymbols.getGroupingSeparator());
2787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            icuDecfs.setInfinity(newSymbols.getInfinity());
2797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            icuDecfs.setInternationalCurrencySymbol(newSymbols.getInternationalCurrencySymbol());
2807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            icuDecfs.setMinusSign(newSymbols.getMinusSign());
2817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            icuDecfs.setMonetaryDecimalSeparator(newSymbols.getMonetaryDecimalSeparator());
2827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            icuDecfs.setNaN(newSymbols.getNaN());
2837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            icuDecfs.setPatternSeparator(newSymbols.getPatternSeparator());
2847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            icuDecfs.setPercent(newSymbols.getPercent());
2857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            icuDecfs.setPerMill(newSymbols.getPerMill());
2867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            icuDecfs.setZeroDigit(newSymbols.getZeroDigit());
2877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
2887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        fIcuDecfmt.setDecimalFormatSymbols(icuDecfs);
2897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
2907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    @Override
2927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public void setDecimalSeparatorAlwaysShown(boolean newValue) {
2937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        if (fIcuDecfmt != null) {
2947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            fIcuDecfmt.setDecimalSeparatorAlwaysShown(newValue);
2957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
2967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
2977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    @Override
2997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public void setGroupingSize(int newValue) {
3007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        if (fIcuDecfmt != null) {
3017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            fIcuDecfmt.setGroupingSize(newValue);
3027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
3037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
3047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
3057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    @Override
3067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public void setMaximumFractionDigits(int newValue) {
3077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        if (fIcuDecfmt != null) {
3087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            fIcuDecfmt.setMaximumFractionDigits(newValue);
3097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
3107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
3117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
3127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    @Override
3137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public void setMaximumIntegerDigits(int newValue) {
3147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        if (fIcuDecfmt != null) {
3157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            fIcuDecfmt.setMaximumIntegerDigits(newValue);
3167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
3177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
3187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
3197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    @Override
3207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public void setMinimumFractionDigits(int newValue) {
3217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        if (fIcuDecfmt != null) {
3227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            fIcuDecfmt.setMinimumFractionDigits(newValue);
3237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
3247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
3257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
3267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    @Override
3277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public void setMinimumIntegerDigits(int newValue) {
3287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        if (fIcuDecfmt != null) {
3297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            fIcuDecfmt.setMinimumIntegerDigits(newValue);
3307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
3317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
3327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
3337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    @Override
3347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public void setMultiplier(int newValue) {
3357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        fIcuDecfmt.setMultiplier(newValue);
3367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
3377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
3387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    @Override
3397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public void setNegativePrefix(String newValue) {
3407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        fIcuDecfmt.setNegativePrefix(newValue);
3417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
3427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
3437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    @Override
3447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public void setNegativeSuffix(String newValue) {
3457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        fIcuDecfmt.setNegativeSuffix(newValue);
3467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
3477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
3487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    @Override
3497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public void setParseBigDecimal(boolean newValue) {
3507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        fIcuDecfmt.setParseBigDecimal(newValue);
3517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
3527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
3537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    @Override
3547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public void setPositivePrefix(String newValue) {
3557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        fIcuDecfmt.setPositivePrefix(newValue);
3567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
3577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
3587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    @Override
3597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public void setPositiveSuffix(String newValue) {
3607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        fIcuDecfmt.setPositiveSuffix(newValue);
3617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
3627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
3637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    @Override
3647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public void setRoundingMode(RoundingMode roundingMode) {
3657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        if (roundingMode.equals(RoundingMode.CEILING)) {
3667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            fIcuDecfmt.setRoundingMode(com.ibm.icu.math.BigDecimal.ROUND_CEILING);
3677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        } else if (roundingMode.equals(RoundingMode.DOWN)) {
3687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            fIcuDecfmt.setRoundingMode(com.ibm.icu.math.BigDecimal.ROUND_DOWN);
3697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        } else if (roundingMode.equals(RoundingMode.FLOOR)) {
3707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            fIcuDecfmt.setRoundingMode(com.ibm.icu.math.BigDecimal.ROUND_FLOOR);
3717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        } else if (roundingMode.equals(RoundingMode.HALF_DOWN)) {
3727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            fIcuDecfmt.setRoundingMode(com.ibm.icu.math.BigDecimal.ROUND_HALF_DOWN);
3737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        } else if (roundingMode.equals(RoundingMode.HALF_EVEN)) {
3747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            fIcuDecfmt.setRoundingMode(com.ibm.icu.math.BigDecimal.ROUND_HALF_EVEN);
3757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        } else if (roundingMode.equals(RoundingMode.HALF_UP)) {
3767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            fIcuDecfmt.setRoundingMode(com.ibm.icu.math.BigDecimal.ROUND_HALF_UP);
3777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        } else if (roundingMode.equals(RoundingMode.UNNECESSARY)) {
3787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            fIcuDecfmt.setRoundingMode(com.ibm.icu.math.BigDecimal.ROUND_UNNECESSARY);
3797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        } else if (roundingMode.equals(RoundingMode.UP)) {
3807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            fIcuDecfmt.setRoundingMode(com.ibm.icu.math.BigDecimal.ROUND_UP);
3817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        } else {
3827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            throw new IllegalArgumentException("Invalid rounding mode was specified.");
3837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
3847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
3857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
3867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    @Override
3877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public String toLocalizedPattern() {
3887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        return fIcuDecfmt.toLocalizedPattern();
3897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
3907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
3917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    @Override
3927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public String toPattern() {
3937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        return fIcuDecfmt.toPattern();
3947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
3957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
3967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    // Methods overriding java.text.NumberFormat
3977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
3987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    @Override
3997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public boolean isGroupingUsed() {
4007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        return fIcuDecfmt.isGroupingUsed();
4017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
4027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
4037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    @Override
4047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public boolean isParseIntegerOnly() {
4057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        return fIcuDecfmt.isParseIntegerOnly();
4067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
4077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
4087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    @Override
4097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public void setGroupingUsed(boolean newValue) {
4107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        if (fIcuDecfmt != null) {
4117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            fIcuDecfmt.setGroupingUsed(newValue);
4127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
4137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
4147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
4157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    @Override
4167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public void setParseIntegerOnly(boolean value) {
4177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        fIcuDecfmt.setParseIntegerOnly(value);
4187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
4197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
4207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    private static AttributedCharacterIterator.Attribute mapAttribute(AttributedCharacterIterator.Attribute icuAttribute) {
4217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        AttributedCharacterIterator.Attribute jdkAttribute = icuAttribute;
4227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
4237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        if (icuAttribute == NumberFormat.Field.CURRENCY) {
4247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            jdkAttribute = java.text.NumberFormat.Field.CURRENCY;
4257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        } else if (icuAttribute == NumberFormat.Field.DECIMAL_SEPARATOR) {
4267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            jdkAttribute = java.text.NumberFormat.Field.DECIMAL_SEPARATOR;
4277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        } else if (icuAttribute == NumberFormat.Field.EXPONENT) {
4287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            jdkAttribute = java.text.NumberFormat.Field.EXPONENT;
4297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        } else if (icuAttribute == NumberFormat.Field.EXPONENT_SIGN) {
4307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            jdkAttribute = java.text.NumberFormat.Field.EXPONENT_SIGN;
4317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        } else if (icuAttribute == NumberFormat.Field.EXPONENT_SYMBOL) {
4327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            jdkAttribute = java.text.NumberFormat.Field.EXPONENT_SYMBOL;
4337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        } else if (icuAttribute == NumberFormat.Field.FRACTION) {
4347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            jdkAttribute = java.text.NumberFormat.Field.FRACTION;
4357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        } else if (icuAttribute == NumberFormat.Field.GROUPING_SEPARATOR) {
4367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            jdkAttribute = java.text.NumberFormat.Field.GROUPING_SEPARATOR;
4377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        } else if (icuAttribute == NumberFormat.Field.INTEGER) {
4387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            jdkAttribute = java.text.NumberFormat.Field.INTEGER;
4397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        } else if (icuAttribute == NumberFormat.Field.PERCENT) {
4407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            jdkAttribute = java.text.NumberFormat.Field.PERCENT;
4417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        } else if (icuAttribute == NumberFormat.Field.PERMILLE) {
4427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            jdkAttribute = java.text.NumberFormat.Field.PERMILLE;
4437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        } else if (icuAttribute == NumberFormat.Field.SIGN) {
4447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            jdkAttribute = java.text.NumberFormat.Field.SIGN;
4457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
4467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
4477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        return jdkAttribute;
4487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
4497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
4507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert}
451