Author: markt
Date: Mon Nov  9 21:18:01 2009
New Revision: 834238

URL: http://svn.apache.org/viewvc?rev=834238&view=rev
Log:
Align all three StringManager implementations

Modified:
    tomcat/trunk/java/org/apache/catalina/tribes/util/StringManager.java
    tomcat/trunk/java/org/apache/naming/StringManager.java
    tomcat/trunk/java/org/apache/tomcat/util/res/StringManager.java

Modified: tomcat/trunk/java/org/apache/catalina/tribes/util/StringManager.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/tribes/util/StringManager.java?rev=834238&r1=834237&r2=834238&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/tribes/util/StringManager.java 
(original)
+++ tomcat/trunk/java/org/apache/catalina/tribes/util/StringManager.java Mon 
Nov  9 21:18:01 2009
@@ -1,21 +1,20 @@
 /*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- * 
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
  *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
  */
 
-
 package org.apache.catalina.tribes.util;
 
 import java.text.MessageFormat;
@@ -23,7 +22,6 @@
 import java.util.Locale;
 import java.util.MissingResourceException;
 import java.util.ResourceBundle;
-import java.net.URLClassLoader;
 
 /**
  * An internationalization / localization helper class which reduces
@@ -44,8 +42,12 @@
  * <p>Please see the documentation for java.util.ResourceBundle for
  * more information.
  *
+ * @version $Revision$ $Date$
+ *
  * @author James Duncan Davidson [dun...@eng.sun.com]
  * @author James Todd [go...@eng.sun.com]
+ * @author Mel Martinez [mmarti...@g1440.com]
+ * @see java.util.ResourceBundle
  */
 
 public class StringManager {
@@ -53,11 +55,8 @@
     /**
      * The ResourceBundle for this StringManager.
      */
-
     private ResourceBundle bundle;
-
-    private static org.apache.juli.logging.Log log=
-        org.apache.juli.logging.LogFactory.getLog( StringManager.class );
+    private Locale locale;
 
     /**
      * Creates a new StringManager for a given package. This is a
@@ -67,60 +66,62 @@
      *
      * @param packageName Name of package to create StringManager for.
      */
-
     private StringManager(String packageName) {
         String bundleName = packageName + ".LocalStrings";
         try {
-            bundle = ResourceBundle.getBundle(bundleName);
-            return;
+            bundle = ResourceBundle.getBundle(bundleName, Locale.getDefault());
         } catch( MissingResourceException ex ) {
-            // Try from the current loader ( that's the case for trusted apps )
-            ClassLoader cl=Thread.currentThread().getContextClassLoader();
+            // Try from the current loader (that's the case for trusted apps)
+            // Should only be required if using a TC5 style classloader 
structure
+            // where common != shared != server
+            ClassLoader cl = Thread.currentThread().getContextClassLoader();
             if( cl != null ) {
                 try {
-                    bundle=ResourceBundle.getBundle(bundleName, 
Locale.getDefault(), cl);
-                    return;
+                    bundle = ResourceBundle.getBundle(
+                            bundleName, Locale.getDefault(), cl);
                 } catch(MissingResourceException ex2) {
+                    // Ignore
                 }
             }
-            if( cl==null )
-                cl=this.getClass().getClassLoader();
-
-            if (log.isDebugEnabled())
-                log.debug("Can't find resource " + bundleName +
-                    " " + cl);
-            if( cl instanceof URLClassLoader ) {
-                if (log.isDebugEnabled()) 
-                    log.debug( ((URLClassLoader)cl).getURLs());
-            }
+        }
+        // Get the actual locale, which may be different from the requested one
+        if (bundle != null) {
+            locale = bundle.getLocale();
         }
     }
 
     /**
-     * Get a string from the underlying resource bundle.
-     *
-     * @param key The resource name
+        Get a string from the underlying resource bundle or return
+        null if the String is not found.
+     
+        @param key to desired resource String
+        @return resource String matching <i>key</i> from underlying
+                bundle or null if not found.
+        @throws IllegalArgumentException if <i>key</i> is null.        
      */
     public String getString(String key) {
-        return MessageFormat.format(getStringInternal(key), (Object [])null);
-    }
+        if(key == null){
+            String msg = "key may not have a null value";
 
-
-    protected String getStringInternal(String key) {
-        if (key == null) {
-            String msg = "key is null";
-
-            throw new NullPointerException(msg);
+            throw new IllegalArgumentException(msg);
         }
 
         String str = null;
 
-        if( bundle==null )
-            return key;
         try {
             str = bundle.getString(key);
-        } catch (MissingResourceException mre) {
-            str = "Cannot find message associated with key '" + key + "'";
+        } catch(MissingResourceException mre) {
+            //bad: shouldn't mask an exception the following way:
+            //   str = "[cannot find message associated with key '" + key + "' 
due to " + mre + "]";
+            //     because it hides the fact that the String was missing
+            //     from the calling code.
+            //good: could just throw the exception (or wrap it in another)
+            //      but that would probably cause much havoc on existing
+            //      code.
+            //better: consistent with container pattern to
+            //      simply return null.  Calling code can then do
+            //      a null check.
+            str = null;
         }
 
         return str;
@@ -130,109 +131,26 @@
      * Get a string from the underlying resource bundle and format
      * it with the given set of arguments.
      *
-     * @param key The resource name
-     * @param args Formatting directives
+     * @param key
+     * @param args
      */
-
-    public String getString(String key, Object[] args) {
-        String iString = null;
-        String value = getStringInternal(key);
-
-        // this check for the runtime exception is some pre 1.1.6
-        // VM's don't do an automatic toString() on the passed in
-        // objects and barf out
-
-        try {
-            // ensure the arguments are not null so pre 1.2 VM's don't barf
-            Object nonNullArgs[] = args;
-            for (int i=0; i<args.length; i++) {
-                if (args[i] == null) {
-                    if (nonNullArgs==args) nonNullArgs = args.clone();
-                    nonNullArgs[i] = "null";
-                }
-            }
-
-            iString = MessageFormat.format(value, nonNullArgs);
-        } catch (IllegalArgumentException iae) {
-            StringBuilder buf = new StringBuilder();
-            buf.append(value);
-            for (int i = 0; i < args.length; i++) {
-                buf.append(" arg[" + i + "]=" + args[i]);
-            }
-            iString = buf.toString();
+    public String getString(final String key, final Object... args) {
+        String value = getString(key);
+        if (value == null) {
+            value = key;
         }
-        return iString;
-    }
-
-    /**
-     * Get a string from the underlying resource bundle and format it
-     * with the given object argument. This argument can of course be
-     * a String object.
-     *
-     * @param key The resource name
-     * @param arg Formatting directive
-     */
-
-    public String getString(String key, Object arg) {
-        Object[] args = new Object[] {arg};
-        return getString(key, args);
-    }
-
-    /**
-     * Get a string from the underlying resource bundle and format it
-     * with the given object arguments. These arguments can of course
-     * be String objects.
-     *
-     * @param key The resource name
-     * @param arg1 Formatting directive
-     * @param arg2 Formatting directive
-     */
 
-    public String getString(String key, Object arg1, Object arg2) {
-        Object[] args = new Object[] {arg1, arg2};
-        return getString(key, args);
+        MessageFormat mf = new MessageFormat(value);
+        mf.setLocale(locale);
+        return mf.format(args, new StringBuffer(), null).toString();
     }
 
-    /**
-     * Get a string from the underlying resource bundle and format it
-     * with the given object arguments. These arguments can of course
-     * be String objects.
-     *
-     * @param key The resource name
-     * @param arg1 Formatting directive
-     * @param arg2 Formatting directive
-     * @param arg3 Formatting directive
-     */
-
-    public String getString(String key, Object arg1, Object arg2,
-                            Object arg3) {
-        Object[] args = new Object[] {arg1, arg2, arg3};
-        return getString(key, args);
-    }
-
-    /**
-     * Get a string from the underlying resource bundle and format it
-     * with the given object arguments. These arguments can of course
-     * be String objects.
-     *
-     * @param key The resource name
-     * @param arg1 Formatting directive
-     * @param arg2 Formatting directive
-     * @param arg3 Formatting directive
-     * @param arg4 Formatting directive
-     */
-
-    public String getString(String key, Object arg1, Object arg2,
-                            Object arg3, Object arg4) {
-        Object[] args = new Object[] {arg1, arg2, arg3, arg4};
-        return getString(key, args);
-    }
     // --------------------------------------------------------------
     // STATIC SUPPORT METHODS
     // --------------------------------------------------------------
 
     private static Hashtable<String, StringManager> managers =
-        new Hashtable<String,StringManager>();
+        new Hashtable<String, StringManager>();
 
     /**
      * Get the StringManager for a particular package. If a manager for
@@ -241,14 +159,13 @@
      *
      * @param packageName The package name
      */
-
     public synchronized static final StringManager getManager(String 
packageName) {
         StringManager mgr = managers.get(packageName);
-
         if (mgr == null) {
             mgr = new StringManager(packageName);
             managers.put(packageName, mgr);
         }
         return mgr;
     }
+
 }

Modified: tomcat/trunk/java/org/apache/naming/StringManager.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/naming/StringManager.java?rev=834238&r1=834237&r2=834238&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/naming/StringManager.java (original)
+++ tomcat/trunk/java/org/apache/naming/StringManager.java Mon Nov  9 21:18:01 
2009
@@ -1,25 +1,25 @@
 /*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- * 
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
  *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */ 
-
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
 
 package org.apache.naming;
 
 import java.text.MessageFormat;
 import java.util.Hashtable;
+import java.util.Locale;
 import java.util.MissingResourceException;
 import java.util.ResourceBundle;
 
@@ -42,8 +42,12 @@
  * <p>Please see the documentation for java.util.ResourceBundle for
  * more information.
  *
+ * @version $Revision$ $Date$
+ *
  * @author James Duncan Davidson [dun...@eng.sun.com]
  * @author James Todd [go...@eng.sun.com]
+ * @author Mel Martinez [mmarti...@g1440.com]
+ * @see java.util.ResourceBundle
  */
 
 public class StringManager {
@@ -51,8 +55,8 @@
     /**
      * The ResourceBundle for this StringManager.
      */
-    
     private ResourceBundle bundle;
+    private Locale locale;
 
     /**
      * Creates a new StringManager for a given package. This is a
@@ -62,31 +66,62 @@
      *
      * @param packageName Name of package to create StringManager for.
      */
-
     private StringManager(String packageName) {
-       String bundleName = packageName + ".LocalStrings";
-       bundle = ResourceBundle.getBundle(bundleName);
+        String bundleName = packageName + ".LocalStrings";
+        try {
+            bundle = ResourceBundle.getBundle(bundleName, Locale.getDefault());
+        } catch( MissingResourceException ex ) {
+            // Try from the current loader (that's the case for trusted apps)
+            // Should only be required if using a TC5 style classloader 
structure
+            // where common != shared != server
+            ClassLoader cl = Thread.currentThread().getContextClassLoader();
+            if( cl != null ) {
+                try {
+                    bundle = ResourceBundle.getBundle(
+                            bundleName, Locale.getDefault(), cl);
+                } catch(MissingResourceException ex2) {
+                    // Ignore
+                }
+            }
+        }
+        // Get the actual locale, which may be different from the requested one
+        if (bundle != null) {
+            locale = bundle.getLocale();
+        }
     }
 
     /**
-     * Get a string from the underlying resource bundle.
-     *
-     * @param key 
+        Get a string from the underlying resource bundle or return
+        null if the String is not found.
+     
+        @param key to desired resource String
+        @return resource String matching <i>key</i> from underlying
+                bundle or null if not found.
+        @throws IllegalArgumentException if <i>key</i> is null.        
      */
-    
     public String getString(String key) {
-        if (key == null) {
-            String msg = "key is null";
+        if(key == null){
+            String msg = "key may not have a null value";
 
-            throw new NullPointerException(msg);
+            throw new IllegalArgumentException(msg);
         }
 
         String str = null;
 
         try {
-           str = bundle.getString(key);
-        } catch (MissingResourceException mre) {
-            str = "Cannot find message associated with key '" + key + "'";
+            str = bundle.getString(key);
+        } catch(MissingResourceException mre) {
+            //bad: shouldn't mask an exception the following way:
+            //   str = "[cannot find message associated with key '" + key + "' 
due to " + mre + "]";
+            //     because it hides the fact that the String was missing
+            //     from the calling code.
+            //good: could just throw the exception (or wrap it in another)
+            //      but that would probably cause much havoc on existing
+            //      code.
+            //better: consistent with container pattern to
+            //      simply return null.  Calling code can then do
+            //      a null check.
+            str = null;
         }
 
         return str;
@@ -99,121 +134,38 @@
      * @param key
      * @param args
      */
-
-    public String getString(String key, Object[] args) {
-       String iString = null;
+    public String getString(final String key, final Object... args) {
         String value = getString(key);
+        if (value == null) {
+            value = key;
+        }
 
-       // this check for the runtime exception is some pre 1.1.6
-       // VM's don't do an automatic toString() on the passed in
-       // objects and barf out
-       
-       try {
-            // ensure the arguments are not null so pre 1.2 VM's don't barf
-            Object nonNullArgs[] = args;
-            for (int i=0; i<args.length; i++) {
-               if (args[i] == null) {
-                   if (nonNullArgs==args) nonNullArgs = args.clone();
-                   nonNullArgs[i] = "null";
-               }
-           }
- 
-            iString = MessageFormat.format(value, nonNullArgs);
-       } catch (IllegalArgumentException iae) {
-           StringBuilder buf = new StringBuilder();
-           buf.append(value);
-           for (int i = 0; i < args.length; i++) {
-               buf.append(" arg[" + i + "]=" + args[i]);
-           }
-           iString = buf.toString();
-       }
-       return iString;
-    }
-
-    /**
-     * Get a string from the underlying resource bundle and format it
-     * with the given object argument. This argument can of course be
-     * a String object.
-     *
-     * @param key
-     * @param arg
-     */
-
-    public String getString(String key, Object arg) {
-       Object[] args = new Object[] {arg};
-       return getString(key, args);
-    }
-
-    /**
-     * Get a string from the underlying resource bundle and format it
-     * with the given object arguments. These arguments can of course
-     * be String objects.
-     *
-     * @param key
-     * @param arg1
-     * @param arg2
-     */
-
-    public String getString(String key, Object arg1, Object arg2) {
-       Object[] args = new Object[] {arg1, arg2};
-       return getString(key, args);
-    }
-    
-    /**
-     * Get a string from the underlying resource bundle and format it
-     * with the given object arguments. These arguments can of course
-     * be String objects.
-     *
-     * @param key
-     * @param arg1
-     * @param arg2
-     * @param arg3
-     */
-
-    public String getString(String key, Object arg1, Object arg2,
-                           Object arg3) {
-       Object[] args = new Object[] {arg1, arg2, arg3};
-       return getString(key, args);
+        MessageFormat mf = new MessageFormat(value);
+        mf.setLocale(locale);
+        return mf.format(args, new StringBuffer(), null).toString();
     }
-    
-    /**
-     * Get a string from the underlying resource bundle and format it
-     * with the given object arguments. These arguments can of course
-     * be String objects.
-     *
-     * @param key
-     * @param arg1
-     * @param arg2
-     * @param arg3
-     * @param arg4
-     */
 
-    public String getString(String key, Object arg1, Object arg2,
-                           Object arg3, Object arg4) {
-       Object[] args = new Object[] {arg1, arg2, arg3, arg4};
-       return getString(key, args);
-    }   
     // --------------------------------------------------------------
     // STATIC SUPPORT METHODS
     // --------------------------------------------------------------
 
-    private static Hashtable<String,StringManager> managers =
-        new Hashtable<String,StringManager>();
+    private static Hashtable<String, StringManager> managers =
+        new Hashtable<String, StringManager>();
 
     /**
      * Get the StringManager for a particular package. If a manager for
      * a package already exists, it will be reused, else a new
      * StringManager will be created and returned.
      *
-     * @param packageName
+     * @param packageName The package name
      */
-
     public synchronized static final StringManager getManager(String 
packageName) {
-       StringManager mgr = managers.get(packageName);
-       if (mgr == null) {
-           mgr = new StringManager(packageName);
-           managers.put(packageName, mgr);
-       }
-       return mgr;
+        StringManager mgr = managers.get(packageName);
+        if (mgr == null) {
+            mgr = new StringManager(packageName);
+            managers.put(packageName, mgr);
+        }
+        return mgr;
     }
+
 }

Modified: tomcat/trunk/java/org/apache/tomcat/util/res/StringManager.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/res/StringManager.java?rev=834238&r1=834237&r2=834238&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/res/StringManager.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/res/StringManager.java Mon Nov  9 
21:18:01 2009
@@ -80,6 +80,7 @@
                     bundle = ResourceBundle.getBundle(
                             bundleName, Locale.getDefault(), cl);
                 } catch(MissingResourceException ex2) {
+                    // Ignore
                 }
             }
         }



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to