Home | History | Annotate | Download | only in number
      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