Home | History | Annotate | Download | only in impl
      1 /* GENERATED SOURCE. DO NOT MODIFY. */
      2 //  2016 and later: Unicode, Inc. and others.
      3 // License & terms of use: http://www.unicode.org/copyright.html#License
      4 /*
      5  *******************************************************************************
      6  * Copyright (C) 2009-2016, International Business Machines Corporation and
      7  * others. All Rights Reserved.
      8  *******************************************************************************
      9  */
     10 package android.icu.impl;
     11 
     12 import java.util.Collections;
     13 import java.util.Map;
     14 
     15 import android.icu.text.CurrencyDisplayNames;
     16 import android.icu.text.DecimalFormatSymbols;
     17 import android.icu.util.ULocale;
     18 
     19 /**
     20  * @hide Only a subset of ICU is exposed in Android
     21  */
     22 public class CurrencyData {
     23     public static final CurrencyDisplayInfoProvider provider;
     24 
     25     private CurrencyData() {}
     26 
     27     public static interface CurrencyDisplayInfoProvider {
     28         CurrencyDisplayInfo getInstance(ULocale locale, boolean withFallback);
     29         boolean hasData();
     30     }
     31 
     32     public static abstract class CurrencyDisplayInfo extends CurrencyDisplayNames {
     33         public abstract Map<String, String> getUnitPatterns();
     34         public abstract CurrencyFormatInfo getFormatInfo(String isoCode);
     35         public abstract CurrencySpacingInfo getSpacingInfo();
     36     }
     37 
     38     public static final class CurrencyFormatInfo {
     39         public final String currencyPattern;
     40         public final String monetarySeparator;
     41         public final String monetaryGroupingSeparator;
     42 
     43         public CurrencyFormatInfo(String currencyPattern, String monetarySeparator,
     44                 String monetaryGroupingSeparator) {
     45             this.currencyPattern = currencyPattern;
     46             this.monetarySeparator = monetarySeparator;
     47             this.monetaryGroupingSeparator = monetaryGroupingSeparator;
     48         }
     49     }
     50 
     51     public static final class CurrencySpacingInfo {
     52         private final String[][] symbols = new String[SpacingType.COUNT.ordinal()][SpacingPattern.COUNT.ordinal()];
     53 
     54         public static enum SpacingType { BEFORE, AFTER, COUNT };
     55         public static enum SpacingPattern {
     56             CURRENCY_MATCH(DecimalFormatSymbols.CURRENCY_SPC_CURRENCY_MATCH),
     57             SURROUNDING_MATCH(DecimalFormatSymbols.CURRENCY_SPC_SURROUNDING_MATCH),
     58             INSERT_BETWEEN(DecimalFormatSymbols.CURRENCY_SPC_INSERT),
     59             COUNT;
     60 
     61             SpacingPattern() {}
     62             SpacingPattern(int value) { assert value == ordinal(); }
     63         };
     64 
     65         public CurrencySpacingInfo() {}
     66 
     67         public CurrencySpacingInfo(String... strings) {
     68             assert strings.length == 6;
     69 
     70             int k = 0;
     71             for (int i=0; i<SpacingType.COUNT.ordinal(); i++) {
     72                 for (int j=0; j<SpacingPattern.COUNT.ordinal(); j++) {
     73                     symbols[i][j] = strings[k];
     74                     k++;
     75                 }
     76             }
     77         }
     78 
     79         public void setSymbolIfNull(SpacingType type, SpacingPattern pattern, String value) {
     80             int i = type.ordinal();
     81             int j = pattern.ordinal();
     82             if (symbols[i][j] == null) {
     83                 symbols[i][j] = value;
     84             }
     85         }
     86 
     87         public String[] getBeforeSymbols() {
     88             return symbols[SpacingType.BEFORE.ordinal()];
     89         }
     90 
     91         public String[] getAfterSymbols() {
     92             return symbols[SpacingType.AFTER.ordinal()];
     93         }
     94 
     95         private static final String DEFAULT_CUR_MATCH = "[:letter:]";
     96         private static final String DEFAULT_CTX_MATCH = "[:digit:]";
     97         private static final String DEFAULT_INSERT = " ";
     98 
     99         public static final CurrencySpacingInfo DEFAULT = new CurrencySpacingInfo(
    100                 DEFAULT_CUR_MATCH, DEFAULT_CTX_MATCH, DEFAULT_INSERT,
    101                 DEFAULT_CUR_MATCH, DEFAULT_CTX_MATCH, DEFAULT_INSERT);
    102     }
    103 
    104     static {
    105         CurrencyDisplayInfoProvider temp = null;
    106         try {
    107             Class<?> clzz = Class.forName("android.icu.impl.ICUCurrencyDisplayInfoProvider");
    108             temp = (CurrencyDisplayInfoProvider) clzz.newInstance();
    109         } catch (Throwable t) {
    110             temp = new CurrencyDisplayInfoProvider() {
    111                 @Override
    112                 public CurrencyDisplayInfo getInstance(ULocale locale, boolean withFallback) {
    113                     return DefaultInfo.getWithFallback(withFallback);
    114                 }
    115 
    116                 @Override
    117                 public boolean hasData() {
    118                     return false;
    119                 }
    120             };
    121         }
    122         provider = temp;
    123     }
    124 
    125     public static class DefaultInfo extends CurrencyDisplayInfo {
    126         private final boolean fallback;
    127 
    128         private DefaultInfo(boolean fallback) {
    129             this.fallback = fallback;
    130         }
    131 
    132         public static final CurrencyDisplayInfo getWithFallback(boolean fallback) {
    133             return fallback ? FALLBACK_INSTANCE : NO_FALLBACK_INSTANCE;
    134         }
    135 
    136         @Override
    137         public String getName(String isoCode) {
    138             return fallback ? isoCode : null;
    139         }
    140 
    141         @Override
    142         public String getPluralName(String isoCode, String pluralType) {
    143             return fallback ? isoCode : null;
    144         }
    145 
    146         @Override
    147         public String getSymbol(String isoCode) {
    148             return fallback ? isoCode : null;
    149         }
    150 
    151         @Override
    152         public Map<String, String> symbolMap() {
    153             return Collections.emptyMap();
    154         }
    155 
    156         @Override
    157         public Map<String, String> nameMap() {
    158             return Collections.emptyMap();
    159         }
    160 
    161         @Override
    162         public ULocale getULocale() {
    163             return ULocale.ROOT;
    164         }
    165 
    166         @Override
    167         public Map<String, String> getUnitPatterns() {
    168             if (fallback) {
    169                 return Collections.emptyMap();
    170             }
    171             return null;
    172         }
    173 
    174         @Override
    175         public CurrencyFormatInfo getFormatInfo(String isoCode) {
    176             return null;
    177         }
    178 
    179         @Override
    180         public CurrencySpacingInfo getSpacingInfo() {
    181             return fallback ? CurrencySpacingInfo.DEFAULT : null;
    182         }
    183 
    184         private static final CurrencyDisplayInfo FALLBACK_INSTANCE = new DefaultInfo(true);
    185         private static final CurrencyDisplayInfo NO_FALLBACK_INSTANCE = new DefaultInfo(false);
    186     }
    187 }
    188