diff --git a/icu4j/main/classes/core/src/com/ibm/icu/text/NumberFormat.java b/icu4j/main/classes/core/src/com/ibm/icu/text/NumberFormat.java index 1546f5c23f2..7d0cddce069 100644 --- a/icu4j/main/classes/core/src/com/ibm/icu/text/NumberFormat.java +++ b/icu4j/main/classes/core/src/com/ibm/icu/text/NumberFormat.java @@ -1448,45 +1448,6 @@ public abstract class NumberFormat extends UFormat { * @stable ICU 3.2 */ protected static String getPattern(ULocale forLocale, int choice) { - - /* The following code takes care of a few cases where the - * resource data in the underlying JDK lags the new features - * we have added to ICU4J: scientific notation, rounding, and - * secondary grouping. - * - * We detect these cases here and return various hard-coded - * resource data. This is the simplest solution for now, but - * it is not a good long-term mechanism. - * - * We should replace this code with a data-driven mechanism - * that reads the bundle com.ibm.icu.impl.data.LocaleElements - * and parses an exception table that overrides the standard - * data at java.text.resource.LocaleElements*.java. - * Alternatively, we should create our own copy of the - * resource data, and use that exclusively. - */ - - // TEMPORARY, until we get scientific patterns into the main - // resources: Retrieve scientific patterns from our resources. - //if (choice == SCIENTIFICSTYLE) { - // Temporarily hard code; retrieve from resource later - /*For ICU compatibility [Richard/GCL]*/ - // return "#E0"; - // return NumberFormat.getBaseStringArray("NumberPatterns")[SCIENTIFICSTYLE]; - //} - - /* {dlf} - // Try the cache first - String[] numberPatterns = (String[]) cachedLocaleData.get(forLocale); - if (numberPatterns == null) { - OverlayBundle resource = new OverlayBundle(new String[] - { "com.ibm.icu.impl.data.LocaleElements", RESOURCE_BASE }, forLocale); - numberPatterns = resource.getStringArray("NumberPatterns"); - // Update the cache - cachedLocaleData.put(forLocale, numberPatterns); - } - */ - /* for ISOCURRENCYSTYLE and PLURALCURRENCYSTYLE, * the pattern is the same as the pattern of CURRENCYSTYLE * but by replacing the single currency sign with @@ -1500,7 +1461,8 @@ public abstract class NumberFormat extends UFormat { break; case CURRENCYSTYLE: String cfKeyValue = forLocale.getKeywordValue("cf"); - patternKey = (cfKeyValue != null && cfKeyValue.equals("account"))? "accountingFormat": "currencyFormat"; + patternKey = (cfKeyValue != null && cfKeyValue.equals("account")) ? + "accountingFormat" : "currencyFormat"; break; case CASHCURRENCYSTYLE: case ISOCURRENCYSTYLE: @@ -1527,11 +1489,10 @@ public abstract class NumberFormat extends UFormat { getBundleInstance(ICUData.ICU_BASE_NAME, forLocale); NumberingSystem ns = NumberingSystem.getInstance(forLocale); - String result = null; - try { - result = rb.getStringWithFallback("NumberElements/" + ns.getName() + "/patterns/"+ patternKey); - } catch ( MissingResourceException ex ) { - result = rb.getStringWithFallback("NumberElements/latn/patterns/"+ patternKey); + String result = rb.findStringWithFallback( + "NumberElements/" + ns.getName() + "/patterns/" + patternKey); + if (result == null) { + result = rb.getStringWithFallback("NumberElements/latn/patterns/" + patternKey); } return result; diff --git a/icu4j/main/classes/core/src/com/ibm/icu/util/OverlayBundle.java b/icu4j/main/classes/core/src/com/ibm/icu/util/OverlayBundle.java deleted file mode 100644 index 745fc792a7f..00000000000 --- a/icu4j/main/classes/core/src/com/ibm/icu/util/OverlayBundle.java +++ /dev/null @@ -1,180 +0,0 @@ -/** - ******************************************************************************* - * Copyright (C) 2001-2014, International Business Machines Corporation and * - * others. All Rights Reserved. * - ******************************************************************************* - */ -package com.ibm.icu.util; - -import java.util.Enumeration; -import java.util.Locale; -import java.util.MissingResourceException; -import java.util.ResourceBundle; - -/** - * A ResourceBundle that overlays one hierarchy atop another. This is - * best explained by example. Suppose one wants to use the - * resource hiararchy (in JDK 1.2 and 1.3, but not 1.4) at - * "java.text.resources.LocaleElements", but one wants to use - * a modified version of the "NumberPatterns" resource in the - * fr_FR locale. One way to do this is to add special case code - * to the lookup operation to check for fr_FR and the key - * "NumberPatterns", and in that case, load up custom data. However, - * this becomes unwieldy and places some information about the - * effective resource hierarchy into the code. - * - * The OverlayBundle solves this problem by layering another - * hierarchy, e.g, "com.acme.resources.LocaleElements", on top of a - * base hierarchy. When a resource is requested, it is first sought - * in the overlay hierarchy, and if not found there, it is sought in - * the base hierarchy. Multiple overlays are supported, but in - * practice one is usually sufficient. - * - * The OverlayBundle also addresses the problem of country-oriented - * data. To specify the default data for a language, one just sets - * the language resource bundle data. However, specifying the default - * data for a country using the standard ResourceBundle mechanism is - * impossible. The OverlayBundle recognizes "wildcard" locales with - * the special language code "xx". When looking up data for a locale - * with a non-empty country, if an exact locale match cannot be found, - * the OverlayBundle looks for data in the locale xx_YY, where YY is - * the country being sought. This effectively adds another entry in - * the fallback sequence for a locale aa_BB: aa_BB, xx_BB, aa, root. - * Wildcard locales are not implemented for the base hierarchy, only - * for overlays. - * - * The OverlayBundle is implemented as an array of n ResourceBundle - * base names. The base names are searched from 0 to n-1. Base name - * n-1 is special; it is the base hierarchy. This should be a - * well-populated hierarchy with most of the default data, typically, - * the icu or sun core hierarchies. The base hierarchy is - * treated differently from the overlays above it. It does not get - * wildcard resolution, and the getKeys() framework method is - * delegated to the base hierarchy bundle. - * - * Usage: Instantiate an OverlayBundle directly (not via a factory - * method as in ResourceBundle). Instead of specifying a single base - * name, pass it an array of 2 or more base names. After that, use it - * exactly as you would use ResourceBundle. - * - * @see java.util.ResourceBundle - * @author Alan Liu - * @internal - * @deprecated ICU 2.4. This class may be removed or modified. - */ -@Deprecated -// prepare to deprecate in next release -///CLOVER:OFF -public class OverlayBundle extends ResourceBundle { - - /** - * The array of base names, with the length-1 entry being the base - * hierarchy, typically "sun.text.resources.LocaleElements". - */ - private String[] baseNames; - - /** - * The requested locale. - */ - private Locale locale; - - /** - * Loaded bundles. These will be null until they are loaded on - * demand. - */ - private ResourceBundle[] bundles; - - /** - * Construct an overlay bundle given a sequence of base names and - * a locale. - * @internal - * @deprecated ICU 2.4. This class may be removed or modified. - */ - @Deprecated - public OverlayBundle(String[] baseNames, - Locale locale) { - this.baseNames = baseNames; - this.locale = locale; - bundles = new ResourceBundle[baseNames.length]; - } - - /** - * ResourceBundle framework method. Delegates to - * bundles[i].getObject(). - * @internal - * @deprecated ICU 2.4. This class may be removed or modified. - */ - @Deprecated - protected Object handleGetObject(String key) - throws MissingResourceException { - - Object o = null; - - for (int i=0; i getKeys() { - // Return the enumeration of the last bundle, which is the base - // of our hierarchy stack. - int i = bundles.length - 1; - load(i); - return bundles[i].getKeys(); - } - - /** - * Load the i-th bundle and implement wildcard resolution. - */ - private void load(int i) - throws MissingResourceException { - - if (bundles[i] == null) { - boolean tryWildcard = false; - try { - bundles[i] = ResourceBundle.getBundle(baseNames[i], locale); - if (bundles[i].getLocale().equals(locale)) { - return; - } - if (locale.getCountry().length() != 0 && i != bundles.length-1) { - tryWildcard = true; - } - } catch (MissingResourceException e) { - if (i == bundles.length-1) { - throw e; - } - tryWildcard = true; - } - if (tryWildcard) { - Locale wildcard = new Locale("xx", locale.getCountry(), - locale.getVariant()); - try { - bundles[i] = ResourceBundle.getBundle(baseNames[i], wildcard); - } catch (MissingResourceException e) { - if (bundles[i] == null) { - throw e; - } - } - } - } - } -}