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         public abstract String getNarrowSymbol(String isoCode);
     37     }
     38 
     39     public static final class CurrencyFormatInfo {
     40         public final String isoCode;
     41         public final String currencyPattern;
     42         public final String monetaryDecimalSeparator;
     43         public final String monetaryGroupingSeparator;
     44 
     45         public CurrencyFormatInfo(String isoCode, String currencyPattern, String monetarySeparator,
     46                 String monetaryGroupingSeparator) {
     47             this.isoCode = isoCode;
     48             this.currencyPattern = currencyPattern;
     49             this.monetaryDecimalSeparator = monetarySeparator;
     50             this.monetaryGroupingSeparator = monetaryGroupingSeparator;
     51         }
     52     }
     53 
     54     public static final class CurrencySpacingInfo {
     55         private final String[][] symbols = new String[SpacingType.COUNT.ordinal()][SpacingPattern.COUNT.ordinal()];
     56 
     57         public boolean hasBeforeCurrency = false;
     58         public boolean hasAfterCurrency = false;
     59 
     60         public static enum SpacingType { BEFORE, AFTER, COUNT };
     61         public static enum SpacingPattern {
     62             CURRENCY_MATCH(DecimalFormatSymbols.CURRENCY_SPC_CURRENCY_MATCH),
     63             SURROUNDING_MATCH(DecimalFormatSymbols.CURRENCY_SPC_SURROUNDING_MATCH),
     64             INSERT_BETWEEN(DecimalFormatSymbols.CURRENCY_SPC_INSERT),
     65             COUNT;
     66 
     67             SpacingPattern() {}
     68             SpacingPattern(int value) { assert value == ordinal(); }
     69         };
     70 
     71         public CurrencySpacingInfo() {}
     72 
     73         public CurrencySpacingInfo(String... strings) {
     74             assert strings.length == 6;
     75 
     76             int k = 0;
     77             for (int i=0; i<SpacingType.COUNT.ordinal(); i++) {
     78                 for (int j=0; j<SpacingPattern.COUNT.ordinal(); j++) {
     79                     symbols[i][j] = strings[k];
     80                     k++;
     81                 }
     82             }
     83         }
     84 
     85         public void setSymbolIfNull(SpacingType type, SpacingPattern pattern, String value) {
     86             int i = type.ordinal();
     87             int j = pattern.ordinal();
     88             if (symbols[i][j] == null) {
     89                 symbols[i][j] = value;
     90             }
     91         }
     92 
     93         public String[] getBeforeSymbols() {
     94             return symbols[SpacingType.BEFORE.ordinal()];
     95         }
     96 
     97         public String[] getAfterSymbols() {
     98             return symbols[SpacingType.AFTER.ordinal()];
     99         }
    100 
    101         private static final String DEFAULT_CUR_MATCH = "[:letter:]";
    102         private static final String DEFAULT_CTX_MATCH = "[:digit:]";
    103         private static final String DEFAULT_INSERT = " ";
    104 
    105         public static final CurrencySpacingInfo DEFAULT = new CurrencySpacingInfo(
    106                 DEFAULT_CUR_MATCH, DEFAULT_CTX_MATCH, DEFAULT_INSERT,
    107                 DEFAULT_CUR_MATCH, DEFAULT_CTX_MATCH, DEFAULT_INSERT);
    108     }
    109 
    110     static {
    111         CurrencyDisplayInfoProvider temp = null;
    112         try {
    113             Class<?> clzz = Class.forName("android.icu.impl.ICUCurrencyDisplayInfoProvider");
    114             temp = (CurrencyDisplayInfoProvider) clzz.newInstance();
    115         } catch (Throwable t) {
    116             temp = new CurrencyDisplayInfoProvider() {
    117                 @Override
    118                 public CurrencyDisplayInfo getInstance(ULocale locale, boolean withFallback) {
    119                     return DefaultInfo.getWithFallback(withFallback);
    120                 }
    121 
    122                 @Override
    123                 public boolean hasData() {
    124                     return false;
    125                 }
    126             };
    127         }
    128         provider = temp;
    129     }
    130 
    131     public static class DefaultInfo extends CurrencyDisplayInfo {
    132         private final boolean fallback;
    133 
    134         private DefaultInfo(boolean fallback) {
    135             this.fallback = fallback;
    136         }
    137 
    138         public static final CurrencyDisplayInfo getWithFallback(boolean fallback) {
    139             return fallback ? FALLBACK_INSTANCE : NO_FALLBACK_INSTANCE;
    140         }
    141 
    142         @Override
    143         public String getName(String isoCode) {
    144             return fallback ? isoCode : null;
    145         }
    146 
    147         @Override
    148         public String getPluralName(String isoCode, String pluralType) {
    149             return fallback ? isoCode : null;
    150         }
    151 
    152         @Override
    153         public String getSymbol(String isoCode) {
    154             return fallback ? isoCode : null;
    155         }
    156 
    157         @Override
    158         public String getNarrowSymbol(String isoCode) {
    159             return fallback ? isoCode : null;
    160         }
    161 
    162         @Override
    163         public Map<String, String> symbolMap() {
    164             return Collections.emptyMap();
    165         }
    166 
    167         @Override
    168         public Map<String, String> nameMap() {
    169             return Collections.emptyMap();
    170         }
    171 
    172         @Override
    173         public ULocale getULocale() {
    174             return ULocale.ROOT;
    175         }
    176 
    177         @Override
    178         public Map<String, String> getUnitPatterns() {
    179             if (fallback) {
    180                 return Collections.emptyMap();
    181             }
    182             return null;
    183         }
    184 
    185         @Override
    186         public CurrencyFormatInfo getFormatInfo(String isoCode) {
    187             return null;
    188         }
    189 
    190         @Override
    191         public CurrencySpacingInfo getSpacingInfo() {
    192             return fallback ? CurrencySpacingInfo.DEFAULT : null;
    193         }
    194 
    195         private static final CurrencyDisplayInfo FALLBACK_INSTANCE = new DefaultInfo(true);
    196         private static final CurrencyDisplayInfo NO_FALLBACK_INSTANCE = new DefaultInfo(false);
    197     }
    198 }
    199