list = info.currencies(CurrencyFilter.onRegion(country));
+ if (list.size() > 0) {
+ String code = list.get(0);
+ boolean isPreEuro = "PREEURO".equals(variant);
+ if (isPreEuro && EUR_STR.equals(code)) {
+ if (list.size() < 2) {
+ return null;
+ }
+ code = list.get(1);
}
- else if (isEuro) {
- curriso = EUR_STR;
- }
- if (curriso != null) {
- return new Currency(curriso);
- }
- } catch (MissingResourceException ex) {
- // We don't know about this region.
- // As of CLDR 1.5.1, the data includes deprecated region history too.
- // So if we get here, either the region doesn't exist, or the data is really bad.
- // Deprecated regions should return the last valid currency for that region in the data.
- // We don't try to resolve it to a new region.
+ return new Currency(code);
}
return null;
}
@@ -379,88 +288,76 @@ public class Currency extends MeasureUnit implements Serializable {
// end registry stuff
/**
- * Given a key and a locale, returns an array of string values in a preferred
- * order that would make a difference. These are all and only those values where
- * the open (creation) of the service with the locale formed from the input locale
- * plus input keyword and that value has different behavior than creation with the
- * input locale alone.
- * @param key one of the keys supported by this service. For now, only
- * "currency" is supported.
+ * Given a key and a locale, returns an array of values for the key for which data
+ * exists. If commonlyUsed is true, these are the values that typically are used
+ * with this locale, otherwise these are all values for which data exists.
+ * This is a common service API.
+ *
+ * The only supported key is "currency", other values return an empty array.
+ *
+ * Currency information is based on the region of the locale. If the locale does not
+ * indicate a region, {@link ULocale#addLikelySubtags(ULocale)} is used to infer a region,
+ * except for the 'und' locale.
+ *
+ * If commonlyUsed is true, only the currencies known to be in use as of the current date
+ * are returned. When there are more than one, these are returned in preference order
+ * (typically, this occurs when a country is transitioning to a new currency, and the
+ * newer currency is preferred), see
+ * Unicode TR#35 Sec. C1.
+ * If commonlyUsed is false, all currencies ever used in any locale are returned, in no
+ * particular order.
+ *
+ * @param key key whose values to look up. the only recognized key is "currency"
* @param locale the locale
- * @param commonlyUsed if set to true it will return only commonly used values
- * with the given locale in preferred order. Otherwise,
- * it will return all the available values for the locale.
- * @return an array of string values for the given key and the locale.
+ * @param commonlyUsed if true, return only values that are currently used in the locale.
+ * Otherwise returns all values.
+ * @return an array of values for the given key and the locale. If there is no data, the
+ * array will be empty.
* @draft ICU 4.2
* @provisional This API might change or be removed in a future release.
*/
- public static final String[] getKeywordValuesForLocale(String key, ULocale locale, boolean commonlyUsed) {
- // Resolve region
+ public static final String[] getKeywordValuesForLocale(String key, ULocale locale,
+ boolean commonlyUsed) {
+
+ // The only keyword we recognize is 'currency'
+ if (!"currency".equals(key)) {
+ return EMPTY_STRING_ARRAY;
+ }
+
+ CurrencyMetaInfo info = CurrencyMetaInfo.getInstance();
+ if (!commonlyUsed) {
+ // Behavior change from 4.3.3, no longer sort the currencies
+ List result = info.currencies(null);
+ return result.toArray(new String[result.size()]);
+ }
+
+ // Don't resolve region if the requested locale is 'und', it will resolve to US
+ // which we don't want.
String prefRegion = locale.getCountry();
- if (prefRegion.length() == 0){
+ if (prefRegion.length() == 0) {
+ if (UND.equals(locale)) {
+ return EMPTY_STRING_ARRAY;
+ }
ULocale loc = ULocale.addLikelySubtags(locale);
prefRegion = loc.getCountry();
+ }
+
+ CurrencyFilter filter = CurrencyFilter.now().withRegion(prefRegion);
+
+ // currencies are in region's preferred order when we're filtering on region, which
+ // matches our spec
+ List result = info.currencies(filter);
+
+ // No fallback anymore (change from 4.3.3)
+ if (result.size() == 0) {
+ return EMPTY_STRING_ARRAY;
}
- // Read values from supplementalData
- List values = new ArrayList();
- List otherValues = new ArrayList();
-
- UResourceBundle bundle = UResourceBundle.getBundleInstance(
- ICUResourceBundle.ICU_CURR_BASE_NAME, "supplementalData");
- bundle = bundle.get("CurrencyMap");
- Enumeration keyEnum = bundle.getKeys();
- boolean done = false;
- while (keyEnum.hasMoreElements() && !done) {
- String region = keyEnum.nextElement();
- boolean isPrefRegion = prefRegion.equals(region);
- if (!isPrefRegion && commonlyUsed) {
- // With commonlyUsed=true, we do not put
- // currencies for other regions in the
- // result list.
- continue;
- }
- UResourceBundle regbndl = bundle.get(region);
- for (int i = 0; i < regbndl.getSize(); i++) {
- UResourceBundle curbndl = regbndl.get(i);
- if (curbndl.getType() != UResourceBundle.TABLE) {
- // Currently, an empty ARRAY is mixed in..
- continue;
- }
- String curID = curbndl.getString("id");
- boolean hasTo = false;
- try {
- UResourceBundle to = curbndl.get("to");
- if (to != null) {
- hasTo = true;
- }
- } catch (MissingResourceException e) {
- // Do nothing here...
- }
- if (isPrefRegion && !hasTo && !values.contains(curID)) {
- // Currently active currency for the target country
- values.add(curID);
- } else if (!otherValues.contains(curID) && !commonlyUsed){
- otherValues.add(curID);
- }
- }
- }
- if (commonlyUsed) {
- if (values.size() == 0) {
- // This could happen if no valid region is supplied in the input
- // locale. In this case, we use the CLDR's default.
- return getKeywordValuesForLocale(key, new ULocale("und"), true);
- }
- } else {
- // Consolidate the list
- for (String curID : otherValues) {
- if (!values.contains(curID)) {
- values.add(curID);
- }
- }
- }
- return values.toArray(new String[values.size()]);
+ return result.toArray(new String[result.size()]);
}
+
+ private static final ULocale UND = new ULocale("und");
+ private static final String[] EMPTY_STRING_ARRAY = new String[0];
/**
* Return a hashcode for this currency.
@@ -554,79 +451,39 @@ public class Currency extends MeasureUnit implements Serializable {
* @return display string for this currency. If the resource data
* contains no entry for this currency, then the ISO 4217 code is
* returned. If isChoiceFormat[0] is true, then the result is a
- * ChoiceFormat pattern. Otherwise it is a static string.
+ * ChoiceFormat pattern. Otherwise it is a static string. Note:
+ * as of ICU 4.4, choice formats are not used, and the value returned
+ * in isChoiceFormat is always false.
+ *
* @throws IllegalArgumentException if the nameStyle is not SYMBOL_NAME
* or LONG_NAME.
+ * @see #getName(ULocale, int, String, boolean[])
* @stable ICU 3.2
*/
- public String getName(ULocale locale,
- int nameStyle,
- boolean[] isChoiceFormat) {
-
- // Look up the Currencies resource for the given locale. The
- // Currencies locale data looks like this:
- //|en {
- //| Currencies {
- //| USD { "US$", "US Dollar" }
- //| CHF { "Sw F", "Swiss Franc" }
- //| INR { "=0#Rs|1#Re|1 1) {
- throw new IllegalArgumentException();
+ public String getName(ULocale locale, int nameStyle, boolean[] isChoiceFormat) {
+ if (!(nameStyle == SYMBOL_NAME || nameStyle == LONG_NAME)) {
+ throw new IllegalArgumentException("bad name style: " + nameStyle);
}
- String s = null;
-
- try {
- UResourceBundle rb = UResourceBundle.getBundleInstance(ICUResourceBundle.ICU_CURR_BASE_NAME,locale);
- ICUResourceBundle currencies = (ICUResourceBundle)rb.get("Currencies");
-
- // Fetch resource with multi-level resource inheritance fallback
- s = currencies.getWithFallback(isoCode).getString(nameStyle);
- }catch (MissingResourceException e) {
- //TODO what should be done here?
+ // We no longer support choice format data in names. Data should not contain
+ // choice patterns.
+ if (isChoiceFormat != null) {
+ isChoiceFormat[0] = false;
}
- // Determine if this is a ChoiceFormat pattern. One leading mark
- // indicates a ChoiceFormat. Two indicates a static string that
- // starts with a mark. In either case, the first mark is ignored,
- // if present. Marks in the rest of the string have no special
- // meaning.
- isChoiceFormat[0] = false;
- if (s != null) {
- int i=0;
- while (i < s.length() && s.charAt(i) == '=' && i < 2) {
- ++i;
- }
- isChoiceFormat[0]= (i == 1);
- if (i != 0) {
- // Skip over first mark
- s = s.substring(1);
- }
- return s;
- }
-
- // If we fail to find a match, use the ISO 4217 code
- return isoCode;
+ CurrencyDisplayNames names = CurrencyDisplayNames.getInstance(locale);
+ return nameStyle == SYMBOL_NAME ? names.getSymbol(isoCode) : names.getName(isoCode);
}
/**
- * Returns the display name for the given currency in the
- * given locale.
- * This is a convenient method of
- * getName(ULocale, int, String, boolean[]);
+ * Returns the display name for the given currency in the given locale.
+ * This is a convenience overload of getName(ULocale, int, String, boolean[]);
* @draft ICU 4.2
* @provisional This API might change or be removed in a future release.
*/
- public String getName(Locale locale,
- int nameStyle,
- String pluralCount,
- boolean[] isChoiceFormat) {
- return getName(ULocale.forLocale(locale), nameStyle,
- pluralCount, isChoiceFormat);
+ public String getName(Locale locale, int nameStyle, String pluralCount,
+ boolean[] isChoiceFormat) {
+ return getName(ULocale.forLocale(locale), nameStyle, pluralCount, isChoiceFormat);
}
/**
@@ -646,68 +503,27 @@ public class Currency extends MeasureUnit implements Serializable {
* @return display string for this currency. If the resource data
* contains no entry for this currency, then the ISO 4217 code is
* returned. If isChoiceFormat[0] is true, then the result is a
- * ChoiceFormat pattern. Otherwise it is a static string.
- * @throws IllegalArgumentException if the nameStyle is not SYMBOL_NAME
- * or LONG_NAME, or PLURAL_LONG_NAME.
+ * ChoiceFormat pattern. Otherwise it is a static string. Note:
+ * as of ICU 4.4, choice formats are not used, and the value returned
+ * in isChoiceFormat is always false.
+ * @throws IllegalArgumentException if the nameStyle is not SYMBOL_NAME,
+ * LONG_NAME, or PLURAL_LONG_NAME.
* @draft ICU 4.2
* @provisional This API might change or be removed in a future release.
*/
- public String getName(ULocale locale,
- int nameStyle,
- String pluralCount,
- boolean[] isChoiceFormat) {
+ public String getName(ULocale locale, int nameStyle, String pluralCount,
+ boolean[] isChoiceFormat) {
if (nameStyle != PLURAL_LONG_NAME) {
return getName(locale, nameStyle, isChoiceFormat);
}
- // Look up the CurrencyPlurals resource for the given locale. The
- // CurrencyPlurals locale data looks like this:
- //|en {
- //| CurrencyPlurals {
- //| USD{
- //| one{"US dollar"}
- //| other{"US dollars"}
- //| }
- //| ...
- //| }
- //|}
- //
- // Algorithm detail: http://unicode.org/reports/tr35/#Currencies
- // especially the fallback rule.
- String s = null;
- ICUResourceBundle isoCodeBundle;
- // search at run time, not saved in initialization
- try {
- UResourceBundle rb = UResourceBundle.getBundleInstance(ICUResourceBundle.ICU_CURR_BASE_NAME,locale);
- // get handles fallback
- ICUResourceBundle currencies = (ICUResourceBundle)rb.get("CurrencyPlurals");
-
- // Fetch resource with multi-level resource inheritance fallback
- isoCodeBundle = currencies.getWithFallback(isoCode);
- } catch (MissingResourceException e) {
- // if there is no CurrencyPlurals defined or no plural long names
- // defined in the locale chain, fall back to long name.
- return getName(locale, LONG_NAME, isChoiceFormat);
+ // We no longer support choice format
+ if (isChoiceFormat != null) {
+ isChoiceFormat[0] = false;
}
- try {
- s = isoCodeBundle.getStringWithFallback(pluralCount);
- } catch (MissingResourceException e1) {
- try {
- // if there is no name corresponding to 'pluralCount' defined,
- // fall back to name corresponding to "other".
- s = isoCodeBundle.getStringWithFallback("other");
- } catch (MissingResourceException e) {
- // if there is no name corresponding to plural count "other",
- // fall back to long name.
- return getName(locale, LONG_NAME, isChoiceFormat);
- }
- }
- // No support for choice format for getting plural currency names.
- if (s != null) {
- return s;
- }
- // If we fail to find a match, use the ISO 4217 code
- return isoCode;
+
+ CurrencyDisplayNames names = CurrencyDisplayNames.getInstance(locale);
+ return names.getPluralName(isoCode, pluralCount);
}
/**
@@ -734,8 +550,10 @@ public class Currency extends MeasureUnit implements Serializable {
public static String parse(ULocale locale, String text, int type, ParsePosition pos) {
Vector> currencyTrieVec = CURRENCY_NAME_CACHE.get(locale);
if (currencyTrieVec == null) {
- TextTrieMap currencyNameTrie = new TextTrieMap(true);
- TextTrieMap currencySymbolTrie = new TextTrieMap(false);
+ TextTrieMap currencyNameTrie =
+ new TextTrieMap(true);
+ TextTrieMap currencySymbolTrie =
+ new TextTrieMap(false);
currencyTrieVec = new Vector>();
currencyTrieVec.addElement(currencySymbolTrie);
currencyTrieVec.addElement(currencyNameTrie);
@@ -784,126 +602,22 @@ public class Currency extends MeasureUnit implements Serializable {
return isoResult;
}
- private static void setupCurrencyTrieVec(ULocale locale, Vector> trieVec) {
- // Look up the Currencies resource for the given locale. The
- // Currencies locale data looks like this:
- //|en {
- //| Currencies {
- //| USD { "US$", "US Dollar" }
- //| CHF { "Sw F", "Swiss Franc" }
- //| INR { "=0#Rs|1#Re|1> trieVec) {
TextTrieMap symTrie = trieVec.elementAt(0);
TextTrieMap trie = trieVec.elementAt(1);
- HashSet visited = new HashSet();
- ULocale parentLocale = locale;
- while (parentLocale != null) {
- UResourceBundle rb = UResourceBundle.getBundleInstance(ICUResourceBundle.ICU_CURR_BASE_NAME,parentLocale);
- // We can't cast this to String[][]; the cast has to happen later
- try {
- UResourceBundle currencies = rb.get("Currencies");
- // Do a linear search
- for (int i=0; i 1 && name.charAt(0) == '=' &&
- name.charAt(1) != '=') {
- // handle choice format here
- name = name.substring(1);
- ChoiceFormat choice = new ChoiceFormat(name);
- Object[] names = choice.getFormats();
- for (int nameIndex = 0; nameIndex < names.length;
- ++nameIndex) {
- info = new CurrencyStringInfo(ISOCode,
- (String)names[nameIndex]);
- symTrie.put((String)names[nameIndex], info);
- }
- } else {
- info = new CurrencyStringInfo(ISOCode, name);
- symTrie.put(name, info);
- }
-
- info = new CurrencyStringInfo(ISOCode, item.getString(1));
- trie.put(item.getString(1), info);
- visited.add(ISOCode);
- }
- }
- }
- catch (MissingResourceException e) {}
-
- parentLocale = parentLocale.getFallback();
+ CurrencyDisplayNames names = CurrencyDisplayNames.getInstance(locale);
+ for (Map.Entry e : names.symbolMap().entrySet()) {
+ String symbol = e.getKey();
+ String isoCode = e.getValue();
+ symTrie.put(symbol, new CurrencyStringInfo(isoCode, symbol));
}
- // Look up the CurrencyPlurals resource for the given locale. The
- // CurrencyPlurals locale data looks like this:
- //|en {
- //| CurrencyPlurals {
- //| USD {
- //| one{"US Dollar"}
- //| other{"US dollars"}
- //| }
- //| //...
- //| }
- //|}
-
- Map> visitedInMap = new HashMap>();
- parentLocale = locale;
- while (parentLocale != null) {
- UResourceBundle rb = UResourceBundle.getBundleInstance(ICUResourceBundle.ICU_CURR_BASE_NAME,parentLocale);
- try {
- UResourceBundle currencies;
- currencies = rb.get("CurrencyPlurals");
- for (int i=0; i visitPluralCount = visitedInMap.get(ISOCode);
- if (visitPluralCount == null) {
- visitPluralCount = new HashSet();
- visitedInMap.put(ISOCode, visitPluralCount);
- }
- for (int j=0; j e : names.nameMap().entrySet()) {
+ String name = e.getKey();
+ String isoCode = e.getValue();
+ trie.put(name, new CurrencyStringInfo(isoCode, name));
}
}
@@ -925,7 +639,8 @@ public class Currency extends MeasureUnit implements Serializable {
}
}
- private static class CurrencyNameResultHandler implements TextTrieMap.ResultHandler {
+ private static class CurrencyNameResultHandler
+ implements TextTrieMap.ResultHandler {
private ArrayList resultList;
public boolean handlePrefixMatch(int matchLength, Iterator values) {
@@ -971,7 +686,9 @@ public class Currency extends MeasureUnit implements Serializable {
* @stable ICU 2.2
*/
public int getDefaultFractionDigits() {
- return (findData())[0];
+ CurrencyMetaInfo info = CurrencyMetaInfo.getInstance();
+ CurrencyDigits digits = info.currencyDigits(isoCode);
+ return digits.fractionDigits;
}
/**
@@ -981,9 +698,10 @@ public class Currency extends MeasureUnit implements Serializable {
* @stable ICU 2.2
*/
public double getRoundingIncrement() {
- int[] data = findData();
+ CurrencyMetaInfo info = CurrencyMetaInfo.getInstance();
+ CurrencyDigits digits = info.currencyDigits(isoCode);
- int data1 = data[1]; // rounding increment
+ int data1 = digits.roundingIncrement;
// If there is no rounding return 0.0 to indicate no rounding.
// This is the high-runner case, by far.
@@ -991,7 +709,7 @@ public class Currency extends MeasureUnit implements Serializable {
return 0.0;
}
- int data0 = data[0]; // fraction digits
+ int data0 = digits.fractionDigits;
// If the meta data is invalid, return 0.0 to indicate no rounding.
if (data0 < 0 || data0 >= POW10.length) {
@@ -1022,67 +740,10 @@ public class Currency extends MeasureUnit implements Serializable {
isoCode = theISOCode;
}
- /**
- * Internal function to look up currency data. Result is an array of
- * two Integers. The first is the fraction digits. The second is the
- * rounding increment, or 0 if none. The rounding increment is in
- * units of 10^(-fraction_digits).
- */
- private int[] findData() {
-
- try {
- // Get CurrencyMeta resource out of root locale file. [This may
- // move out of the root locale file later; if it does, update this
- // code.]
- UResourceBundle root = ICUResourceBundle.getBundleInstance(ICUResourceBundle.ICU_CURR_BASE_NAME, "supplementalData", ICUResourceBundle.ICU_DATA_CLASS_LOADER);
- UResourceBundle currencyMeta = root.get("CurrencyMeta");
-
- //Integer[] i = null;
- //int defaultPos = -1;
- int[] i = currencyMeta.get(isoCode).getIntVector();
-
- // Do a linear search for isoCode. At the same time,
- // record the position of the DEFAULT meta data. If the
- // meta data becomes large, make this faster.
- /*for (int j=0; j= 0) {
- break;
- }
- }
- */
- if (i == null) {
- i = currencyMeta.get("DEFAULT").getIntVector();
- }
-
- if (i != null && i.length >= 2) {
- return i;
- }
- }
- catch (MissingResourceException e) {}
-
- // Config/build error; return hard-coded defaults
- return LAST_RESORT_DATA;
- }
-
- // Default currency meta data of last resort. We try to use the
- // defaults encoded in the meta data resource bundle. If there is a
- // configuration/build error and these are not available, we use these
- // hard-coded defaults (which should be identical).
- private static final int[] LAST_RESORT_DATA = new int[] { 2, 0 };
-
// POW10[i] = 10^i
- private static final int[] POW10 = { 1, 10, 100, 1000, 10000, 100000,
- 1000000, 10000000, 100000000, 1000000000 };
+ private static final int[] POW10 = {
+ 1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000, 1000000000
+ };
// -------- BEGIN ULocale boilerplate --------
diff --git a/icu4j/main/classes/core/src/com/ibm/icu/util/UResourceBundle.java b/icu4j/main/classes/core/src/com/ibm/icu/util/UResourceBundle.java
index 49cc2be9a71..72fbc604adb 100644
--- a/icu4j/main/classes/core/src/com/ibm/icu/util/UResourceBundle.java
+++ b/icu4j/main/classes/core/src/com/ibm/icu/util/UResourceBundle.java
@@ -653,22 +653,37 @@ public abstract class UResourceBundle extends ResourceBundle{
* @stable ICU 3.8
*/
public UResourceBundle get(String aKey) {
- UResourceBundle obj = handleGet(aKey, null, this);
+ UResourceBundle obj = findTopLevel(aKey);
if (obj == null) {
- UResourceBundle res = this;
- while ((res = res.getParent()) != null && obj == null) {
- //call the get method to recursively fetch the resource
- obj = res.handleGet(aKey, null, this);
- }
- if (obj == null) {
- String fullName = ICUResourceBundle.getFullName(getBaseName(), getLocaleID());
- throw new MissingResourceException(
- "Can't find resource for bundle " + fullName + ", key "
- + aKey, this.getClass().getName(), aKey);
+ String fullName = ICUResourceBundle.getFullName(getBaseName(), getLocaleID());
+ throw new MissingResourceException(
+ "Can't find resource for bundle " + fullName + ", key "
+ + aKey, this.getClass().getName(), aKey);
+ }
+ return obj;
+ }
+
+ /**
+ * Returns a resource in a given resource that has a given key, or null if the
+ * resource is not found.
+ *
+ * @param aKey the key associated with the wanted resource
+ * @return the resource, or null
+ * @internal ICU internal use only
+ * @see #get(String)
+ */
+ protected UResourceBundle findTopLevel(String aKey) {
+ // NOTE: this only works for top-level resources. For resources at lower
+ // levels, it fails when you fall back to the parent, since you're now
+ // looking at root resources, not at the corresponding nested resource.
+ for (UResourceBundle res = this; res != null; res = res.getParent()) {
+ UResourceBundle obj = res.handleGet(aKey, null, this);
+ if (obj != null) {
+ ((ICUResourceBundle) obj).setLoadingStatus(getLocaleID());
+ return obj;
}
}
- ((ICUResourceBundle)obj).setLoadingStatus(getLocaleID());
- return obj;
+ return null;
}
/**
@@ -713,6 +728,33 @@ public abstract class UResourceBundle extends ResourceBundle{
((ICUResourceBundle)obj).setLoadingStatus(getLocaleID());
return obj;
}
+
+ /**
+ * Returns a resource in a given resource that has a given index, or null if the
+ * resource is not found.
+ *
+ * @param aKey the key associated with the wanted resource
+ * @return the resource, or null
+ * @see #get(int)
+ * @internal ICU internal use only
+ */
+ protected UResourceBundle findTopLevel(int index) {
+ // NOTE: this _barely_ works for top-level resources. For resources at lower
+ // levels, it fails when you fall back to the parent, since you're now
+ // looking at root resources, not at the corresponding nested resource.
+ // Not only that, but unless the indices correspond 1-to-1, the index will
+ // lose meaning. Essentially this only works if the child resource arrays
+ // are prefixes of their parent arrays.
+ for (UResourceBundle res = this; res != null; res = res.getParent()) {
+ UResourceBundle obj = res.handleGet(index, null, this);
+ if (obj != null) {
+ ((ICUResourceBundle) obj).setLoadingStatus(getLocaleID());
+ return obj;
+ }
+ }
+ return null;
+ }
+
/**
* Returns the keys in this bundle as an enumeration
* @return an enumeration containing key strings,
@@ -754,6 +796,7 @@ public abstract class UResourceBundle extends ResourceBundle{
}
return keys;
}
+
private Set keys = null;
/**
* Returns a Set of the keys contained only in this ResourceBundle.
diff --git a/icu4j/main/classes/currdata/.classpath b/icu4j/main/classes/currdata/.classpath
new file mode 100644
index 00000000000..f145b1f226d
--- /dev/null
+++ b/icu4j/main/classes/currdata/.classpath
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/icu4j/main/classes/currdata/.externalToolBuilders/copy-data-currdata.launch b/icu4j/main/classes/currdata/.externalToolBuilders/copy-data-currdata.launch
new file mode 100644
index 00000000000..ba71d5ab375
--- /dev/null
+++ b/icu4j/main/classes/currdata/.externalToolBuilders/copy-data-currdata.launch
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/icu4j/main/classes/currdata/.externalToolBuilders/copy-data-langdata.launch b/icu4j/main/classes/currdata/.externalToolBuilders/copy-data-langdata.launch
new file mode 100644
index 00000000000..8d9cef16ce9
--- /dev/null
+++ b/icu4j/main/classes/currdata/.externalToolBuilders/copy-data-langdata.launch
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/icu4j/main/classes/currdata/.project b/icu4j/main/classes/currdata/.project
new file mode 100644
index 00000000000..377b9c51b12
--- /dev/null
+++ b/icu4j/main/classes/currdata/.project
@@ -0,0 +1,29 @@
+
+
+ icu4j-currdata
+
+
+ icu4j-core
+ icu4j-shared
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ org.eclipse.ui.externaltools.ExternalToolBuilder
+ full,incremental,
+
+
+ LaunchConfigHandle
+ <project>/.externalToolBuilders/copy-data-currdata.launch.launch
+
+
+
+
+
+ org.eclipse.jdt.core.javanature
+
+
diff --git a/icu4j/main/classes/currdata/.settings/org.eclipse.jdt.core.prefs b/icu4j/main/classes/currdata/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 00000000000..e46367f90ca
--- /dev/null
+++ b/icu4j/main/classes/currdata/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,345 @@
+#Thu Aug 27 17:47:12 EDT 2009
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.doc.comment.support=enabled
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=ignore
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
+org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=disabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=all_standard_tags
+org.eclipse.jdt.core.compiler.problem.missingJavadocTags=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nullReference=warning
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=warning
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.5
+org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_assignment=0
+org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
+org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
+org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
+org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
+org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
+org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_after_package=1
+org.eclipse.jdt.core.formatter.blank_lines_before_field=0
+org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
+org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
+org.eclipse.jdt.core.formatter.blank_lines_before_method=1
+org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
+org.eclipse.jdt.core.formatter.blank_lines_before_package=0
+org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
+org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
+org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false
+org.eclipse.jdt.core.formatter.comment.format_block_comments=true
+org.eclipse.jdt.core.formatter.comment.format_header=false
+org.eclipse.jdt.core.formatter.comment.format_html=true
+org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true
+org.eclipse.jdt.core.formatter.comment.format_line_comments=true
+org.eclipse.jdt.core.formatter.comment.format_source_code=true
+org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true
+org.eclipse.jdt.core.formatter.comment.indent_root_tags=true
+org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
+org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=insert
+org.eclipse.jdt.core.formatter.comment.line_length=120
+org.eclipse.jdt.core.formatter.compact_else_if=true
+org.eclipse.jdt.core.formatter.continuation_indentation=2
+org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
+org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
+org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_empty_lines=false
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false
+org.eclipse.jdt.core.formatter.indentation.size=4
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_member=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
+org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.join_lines_in_comments=true
+org.eclipse.jdt.core.formatter.join_wrapped_lines=true
+org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.lineSplit=120
+org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
+org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
+org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
+org.eclipse.jdt.core.formatter.tabulation.char=space
+org.eclipse.jdt.core.formatter.tabulation.size=4
+org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
+org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
diff --git a/icu4j/main/classes/currdata/.settings/org.eclipse.jdt.ui.prefs b/icu4j/main/classes/currdata/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 00000000000..646a3929f0a
--- /dev/null
+++ b/icu4j/main/classes/currdata/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,10 @@
+#Wed Jun 17 11:09:27 EDT 2009
+eclipse.preferences.version=1
+formatter_profile=_ICU4J Standard
+formatter_settings_version=11
+org.eclipse.jdt.ui.ignorelowercasenames=true
+org.eclipse.jdt.ui.importorder=java;javax;org;com;
+org.eclipse.jdt.ui.javadoc=true
+org.eclipse.jdt.ui.ondemandthreshold=99
+org.eclipse.jdt.ui.staticondemandthreshold=99
+org.eclipse.jdt.ui.text.custom_code_templates=/**\r\n * @return the ${bare_field_name}\r\n *//**\r\n * @param ${param} the ${bare_field_name} to set\r\n *//**\r\n * ${tags}\r\n *//*\r\n *******************************************************************************\r\n * Copyright (C) ${year}, International Business Machines Corporation and *\r\n * others. All Rights Reserved. *\r\n *******************************************************************************\r\n *//**\r\n * @author ${user}\r\n *\r\n * ${tags}\r\n *//**\r\n * \r\n *//**\r\n * ${tags}\r\n *//* (non-Javadoc)\r\n * ${see_to_overridden}\r\n *//**\r\n * ${tags}\r\n * ${see_to_target}\r\n */${filecomment}\r\n${package_declaration}\r\n\r\n${typecomment}\r\n${type_declaration}\r\n\r\n\r\n\r\n// ${todo} Auto-generated catch block\r\n${exception_var}.printStackTrace();// ${todo} Auto-generated method stub\r\n${body_statement}${body_statement}\r\n// ${todo} Auto-generated constructor stubreturn ${field};${field} \= ${param};
diff --git a/icu4j/main/classes/currdata/build.properties b/icu4j/main/classes/currdata/build.properties
new file mode 100644
index 00000000000..a21fb196196
--- /dev/null
+++ b/icu4j/main/classes/currdata/build.properties
@@ -0,0 +1,6 @@
+#*******************************************************************************
+#* Copyright (C) 2009, International Business Machines Corporation and *
+#* others. All Rights Reserved. *
+#*******************************************************************************
+shared.dir = ../../shared
+javac.compilerarg = -Xlint:all,-deprecation,-dep-ann
diff --git a/icu4j/main/classes/currdata/build.xml b/icu4j/main/classes/currdata/build.xml
new file mode 100644
index 00000000000..3051404f6a0
--- /dev/null
+++ b/icu4j/main/classes/currdata/build.xml
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/icu4j/main/classes/currdata/currdata-build.launch b/icu4j/main/classes/currdata/currdata-build.launch
new file mode 100644
index 00000000000..959fd3eb7a0
--- /dev/null
+++ b/icu4j/main/classes/currdata/currdata-build.launch
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/icu4j/main/classes/currdata/manifest.stub b/icu4j/main/classes/currdata/manifest.stub
new file mode 100644
index 00000000000..57d1a636059
--- /dev/null
+++ b/icu4j/main/classes/currdata/manifest.stub
@@ -0,0 +1,11 @@
+Manifest-Version: 1.0
+
+Name: com/ibm/icu/impl
+Specification-Title: ICU for Java Currency Name Data
+Specification-Version: @SPECVERSION@
+Specification-Vendor: ICU
+Implementation-Title: ICU for Java Currency Name Data
+Implementation-Version: @IMPLVERSION@
+Implementation-Vendor: IBM Corporation
+Implementation-Vendor-Id: com.ibm
+Copyright-Info: @COPYRIGHT@
\ No newline at end of file
diff --git a/icu4j/main/classes/currdata/src/com/ibm/icu/impl/ICUCurrencyDisplayInfoProvider.java b/icu4j/main/classes/currdata/src/com/ibm/icu/impl/ICUCurrencyDisplayInfoProvider.java
new file mode 100644
index 00000000000..b293c976f72
--- /dev/null
+++ b/icu4j/main/classes/currdata/src/com/ibm/icu/impl/ICUCurrencyDisplayInfoProvider.java
@@ -0,0 +1,280 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 2009, International Business Machines Corporation and *
+ * others. All Rights Reserved. *
+ *******************************************************************************
+ */
+package com.ibm.icu.impl;
+
+import java.lang.ref.SoftReference;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+import java.util.TreeMap;
+
+import com.ibm.icu.impl.CurrencyData.CurrencyDisplayInfo;
+import com.ibm.icu.impl.CurrencyData.CurrencyDisplayInfoProvider;
+import com.ibm.icu.impl.CurrencyData.CurrencyFormatInfo;
+import com.ibm.icu.impl.CurrencyData.CurrencySpacingInfo;
+import com.ibm.icu.util.ULocale;
+import com.ibm.icu.util.UResourceBundle;
+
+public class ICUCurrencyDisplayInfoProvider implements CurrencyDisplayInfoProvider {
+ public ICUCurrencyDisplayInfoProvider() {
+ }
+
+ public CurrencyDisplayInfo getInstance(ULocale locale, boolean withFallback) {
+ // this is a test
+ ICUResourceBundle rb = (ICUResourceBundle) UResourceBundle.getBundleInstance(
+ ICUResourceBundle.ICU_CURR_BASE_NAME, locale);
+ if (!withFallback) {
+ int status = rb.getLoadingStatus();
+ if (status == ICUResourceBundle.FROM_DEFAULT || status == ICUResourceBundle.FROM_ROOT) {
+ return CurrencyData.DefaultInfo.getWithFallback(false);
+ }
+ }
+ return new ICUCurrencyDisplayInfo(rb, withFallback);
+ }
+
+ public boolean hasData() {
+ return true;
+ }
+
+ static class ICUCurrencyDisplayInfo extends CurrencyDisplayInfo {
+ private final boolean fallback;
+ private final ICUResourceBundle rb;
+ private final ICUResourceBundle currencies;
+ private final ICUResourceBundle plurals;
+ private SoftReference