[kaffe] CVS kaffe (robilad): resynced with gnu classpath: currency fixes

Kaffe CVS cvs-commits at kaffe.org
Sat Jan 22 11:09:00 PST 2005


PatchSet 5899 
Date: 2005/01/22 19:00:10
Author: robilad
Branch: HEAD
Tag: (none) 
Log:
resynced with gnu classpath: currency fixes

2005-01-22  Dalibor Topic  <robilad at kaffe.org>

Resynced with GNU Classpath.

2005-01-20  Andrew John Hughes  <gnu_andrew at member.fsf.org>

* java/util/Currency.java:
Added new countryMap which maps country codes
to international currency codes.  The cache
has been altered to map currency codes to
Currency objects.
(getInstance(java.util.Locale)): adds to both
caches and attempts initial lookup from country map
(getInstance(java.lang.String)): attempts to
use code -> currency map first

Members: 
	libraries/javalib/java/util/Currency.java:1.13->1.14 

Index: kaffe/libraries/javalib/java/util/Currency.java
diff -u kaffe/libraries/javalib/java/util/Currency.java:1.13 kaffe/libraries/javalib/java/util/Currency.java:1.14
--- kaffe/libraries/javalib/java/util/Currency.java:1.13	Sat Jan 22 18:56:32 2005
+++ kaffe/libraries/javalib/java/util/Currency.java	Sat Jan 22 19:00:10 2005
@@ -106,11 +106,25 @@
   private transient String currencySymbol;
   
   /**
+   * A cached map of country codes
+   * instances to international currency code
+   * <code>String</code>s.  Seperating this
+   * from the <code>Currency</code> instances
+   * ensures we have a common lookup between
+   * the two <code>getInstance()</code> methods.
+   *
+   * @see #getInstance(java.util.Locale)
+   * @serial ignored.
+   */
+  private static transient Map countryMap;
+
+  /**
    * A cache of <code>Currency</code> instances to
    * ensure the singleton nature of this class.  The key
-   * is the locale of the currency.
+   * is the international currency code.
    *
    * @see #getInstance(java.util.Locale)
+   * @see #getInstance(java.lang.String) 
    * @see #readResolve()
    * @serial ignored.
    */
@@ -121,6 +135,8 @@
    */
   static
   {
+    /* Create a hash map for the locale mappings */
+    countryMap = new HashMap();
     /* Create a hash map for the cache */
     cache = new HashMap();
     /* Create the properties object */
@@ -250,31 +266,38 @@
      */
     Currency newCurrency;
 
-    if (locale == null || locale.getCountry() == null)
+    String country = locale.getCountry();
+    if (locale == null || country == null)
       {
 	throw new
 	  NullPointerException("The locale or its country is null.");
       }
     /* Attempt to get the currency from the cache */
-    newCurrency = (Currency) cache.get(locale);
-    if (newCurrency == null)
+    String code = (String) countryMap.get(country);
+    if (code == null)
       {
         /* Create the currency for this locale */
-        newCurrency = new Currency (locale);
+        newCurrency = new Currency(locale);
         /* 
          * If the currency code is null, then creation failed
          * and we return null.
          */
-        if (newCurrency.getCurrencyCode() == null)
+	code = newCurrency.getCurrencyCode();
+        if (code == null)
           {
             return null;
           }
         else 
           {
             /* Cache it */
-            cache.put(locale, newCurrency);
+            countryMap.put(country, code);
+	    cache.put(code, newCurrency);
           }
       }
+    else
+      {
+	newCurrency = (Currency) cache.get(code);
+      }
     /* Return the instance */
     return newCurrency;
   }
@@ -300,31 +323,39 @@
       {
         throw new NullPointerException("The supplied currency code is null.");
       }
-    /* Get all locales */
-    allLocales = Locale.getAvailableLocales();
-    /* Loop through each locale, looking for the code */
-    for (int i = 0;i < allLocales.length; i++)
+    Currency newCurrency = (Currency) cache.get(currencyCode);
+    if (newCurrency == null)
       {
-	try
+	/* Get all locales */
+	allLocales = Locale.getAvailableLocales();
+	/* Loop through each locale, looking for the code */
+	for (int i = 0;i < allLocales.length; i++)
 	  {
-	    Currency testCurrency = getInstance (allLocales[i]);
-	    if (testCurrency != null &&
-		testCurrency.getCurrencyCode().equals(currencyCode))
+	    try
 	      {
-		return testCurrency;
+		Currency testCurrency = getInstance (allLocales[i]);
+		if (testCurrency != null &&
+		    testCurrency.getCurrencyCode().equals(currencyCode))
+		  {
+		    return testCurrency;
+		  }
+	      }
+	    catch (IllegalArgumentException exception)
+	      {
+		/* Ignore locales without valid countries */
 	      }
 	  }
-	catch (IllegalArgumentException exception)
-	  {
-	    /* Ignore locales without valid countries */
-	  }
+	/* 
+	 * If we get this far, the code is not supported by any of
+	 * our locales.
+	 */
+	throw new IllegalArgumentException("The currency code, " + currencyCode +
+					   ", is not supported.");
+      }
+    else
+      {
+	return newCurrency;
       }
-    /* 
-     * If we get this far, the code is not supported by any of
-     * our locales.
-     */
-    throw new IllegalArgumentException("The currency code, " + currencyCode +
-                                       ", is not supported.");
   }
 
   /**



More information about the kaffe mailing list