1 // 2017 and later: Unicode, Inc. and others. 2 // License & terms of use: http://www.unicode.org/copyright.html#License 3 package com.ibm.icu.impl.number; 4 5 import com.ibm.icu.text.DecimalFormatSymbols; 6 import com.ibm.icu.util.Currency; 7 import com.ibm.icu.util.ULocale; 8 9 public class CustomSymbolCurrency extends Currency { 10 private static final long serialVersionUID = 2497493016770137670L; 11 // TODO: Serialization methods? 12 13 private String symbol1; 14 private String symbol2; 15 16 public static Currency resolve(Currency currency, ULocale locale, DecimalFormatSymbols symbols) { 17 if (currency == null) { 18 currency = symbols.getCurrency(); 19 } 20 String currency1Sym = symbols.getCurrencySymbol(); 21 String currency2Sym = symbols.getInternationalCurrencySymbol(); 22 if (currency == null) { 23 return new CustomSymbolCurrency("XXX", currency1Sym, currency2Sym); 24 } 25 if (!currency.equals(symbols.getCurrency())) { 26 return currency; 27 } 28 String currency1 = currency.getName(symbols.getULocale(), Currency.SYMBOL_NAME, null); 29 String currency2 = currency.getCurrencyCode(); 30 if (!currency1.equals(currency1Sym) || !currency2.equals(currency2Sym)) { 31 return new CustomSymbolCurrency(currency2, currency1Sym, currency2Sym); 32 } 33 return currency; 34 } 35 36 public CustomSymbolCurrency(String isoCode, String currency1Sym, String currency2Sym) { 37 super(isoCode); 38 this.symbol1 = currency1Sym; 39 this.symbol2 = currency2Sym; 40 } 41 42 @Override 43 public String getName(ULocale locale, int nameStyle, boolean[] isChoiceFormat) { 44 if (nameStyle == SYMBOL_NAME) { 45 return symbol1; 46 } 47 return super.getName(locale, nameStyle, isChoiceFormat); 48 } 49 50 @Override 51 public String getName( 52 ULocale locale, int nameStyle, String pluralCount, boolean[] isChoiceFormat) { 53 if (nameStyle == PLURAL_LONG_NAME && subType.equals("XXX")) { 54 // Plural in absence of a currency should return the symbol 55 return symbol1; 56 } 57 return super.getName(locale, nameStyle, pluralCount, isChoiceFormat); 58 } 59 60 @Override 61 public String getCurrencyCode() { 62 return symbol2; 63 } 64 65 @Override 66 public int hashCode() { 67 return super.hashCode() ^ symbol1.hashCode() ^ symbol2.hashCode(); 68 } 69 70 @Override 71 public boolean equals(Object other) { 72 return super.equals(other) 73 && ((CustomSymbolCurrency)other).symbol1.equals(symbol1) 74 && ((CustomSymbolCurrency)other).symbol2.equals(symbol2); 75 } 76 } 77