You are viewing a plain text version of this content. The canonical link for it is here.
Posted to adffaces-commits@incubator.apache.org by sl...@apache.org on 2007/03/17 17:01:10 UTC

svn commit: r519370 - in /incubator/adffaces/trunk/trinidad: trinidad-api/src/main/java/org/apache/myfaces/trinidad/util/LocaleUtils.java trinidad-impl/src/test/java/org/apache/myfaces/trinidadinternal/renderkit/MApplication.java

Author: slessard
Date: Sat Mar 17 10:01:09 2007
New Revision: 519370

URL: http://svn.apache.org/viewvc?view=rev&rev=519370
Log:
Applied my patch for ADFFACES-417: Load text resources from application specific bundle before falling back to the embedded ResourceBundle

Modified:
    incubator/adffaces/trunk/trinidad/trinidad-api/src/main/java/org/apache/myfaces/trinidad/util/LocaleUtils.java
    incubator/adffaces/trunk/trinidad/trinidad-impl/src/test/java/org/apache/myfaces/trinidadinternal/renderkit/MApplication.java

Modified: incubator/adffaces/trunk/trinidad/trinidad-api/src/main/java/org/apache/myfaces/trinidad/util/LocaleUtils.java
URL: http://svn.apache.org/viewvc/incubator/adffaces/trunk/trinidad/trinidad-api/src/main/java/org/apache/myfaces/trinidad/util/LocaleUtils.java?view=diff&rev=519370&r1=519369&r2=519370
==============================================================================
--- incubator/adffaces/trunk/trinidad/trinidad-api/src/main/java/org/apache/myfaces/trinidad/util/LocaleUtils.java (original)
+++ incubator/adffaces/trunk/trinidad/trinidad-api/src/main/java/org/apache/myfaces/trinidad/util/LocaleUtils.java Sat Mar 17 10:01:09 2007
@@ -25,6 +25,7 @@
 import java.util.MissingResourceException;
 import java.util.ResourceBundle;
 
+import javax.faces.application.Application;
 import javax.faces.application.FacesMessage;
 import javax.faces.context.FacesContext;
 
@@ -122,32 +123,44 @@
   {
     _assertContextNotNull(context);
 
-    if (null == resourceId)
+    if (resourceId == null)
+    {
       throw new NullPointerException("resourceId is null");
+    }
 
     Locale locale = _getLocale(context);
     ClassLoader loader = _getClassLoader();
 
-    ResourceBundle bundle = _getAdfFacesMessageBundle(locale, loader);
-    String summary = null;
-
-    // unable to find adf faces app level bundle
-    if (null != bundle)
-    {
-      summary = _getBundleString(bundle, resourceId);
-    }
-
-    // Lookup in faces bundle
-    if (null == summary)
-    {
-      bundle = _getFacesMessageBundle(locale, loader);
-
-      if (null == bundle)
-        throw new NullPointerException("faces bundle not available ");
-      summary = _getBundleString(bundle, resourceId);
+    // First we look in the application specific bundle
+    ResourceBundle bundle = _getApplicationFacesMessageBundle(context, locale, loader);
+    BundleSummaryInfo summary = _getBundleSummaryInfo(bundle, resourceId);
+    if(summary == null)
+    {
+      // The application did not override the resource, let look in the 
+      // private Trinidad bundle
+      bundle = _getTrinidadMessageBundle(locale, loader);
+      summary = _getBundleSummaryInfo(bundle, resourceId);
+      
+      if(summary == null)
+      {
+        // The internal bundle does not know of the requested resource either,
+        // let check the default JSF IMPL message bundle
+        bundle = _getDefaultFacesMessageBundle(locale, loader);
+        if(bundle == null)
+        {
+          // That bundle is from the spec, it should never be null
+          throw new NullPointerException("The default FacesMessage.FACES_MESSAGES cannot be found");
+        }
+        
+        summary = _getBundleSummaryInfo(bundle, resourceId);
+        if(summary == null)
+        {
+          summary = new BundleSummaryInfo(null, "???" + resourceId + "???");
+        }
+      }
     }
-
-    return new BundleSummaryInfo(bundle, summary);
+    
+    return summary;
   }
 
   /**
@@ -160,7 +173,7 @@
    * @param loader ClassLoader to pickup the bundle
    * @return Resource bundle for the given locale.
    */
-  private static ResourceBundle _getAdfFacesMessageBundle(
+  private static ResourceBundle _getTrinidadMessageBundle(
     Locale locale,
     ClassLoader loader
     )
@@ -186,8 +199,64 @@
 
     return bundle;
   }
+  
+  private static BundleSummaryInfo _getBundleSummaryInfo(
+    ResourceBundle bundle,
+    String resourceId)
+  {
+    assert resourceId != null;
+    
+    if(bundle != null)
+    {
+      // The bundle exists
+      String summary = _getBundleString(bundle, resourceId);
+      if(summary != null)
+      {
+        // The resource exists
+        return new BundleSummaryInfo(bundle, summary);
+      }
+    }
+    
+    return null;
+  }
 
-  private static ResourceBundle _getFacesMessageBundle(
+  private static ResourceBundle _getApplicationFacesMessageBundle(
+    FacesContext context,
+    Locale locale,
+    ClassLoader loader
+    )
+  {
+    assert context != null;
+    assert locale  != null;
+    assert loader  != null;
+    
+    Application application = context.getApplication();
+    if(application == null)
+    {
+      // Should not happen, but better check than a NullPointerException
+      return null;
+    }
+    
+    String bundleName = application.getMessageBundle();
+    if(bundleName == null)
+    {
+      // There's no specified message bundle in faces-config.xml
+      return null;
+    }
+    
+    try
+    {
+      return ResourceBundle.getBundle(bundleName, locale, loader);
+    }
+    catch (MissingResourceException missingResource)
+    {
+      _LOG.warning("Unable to load faces-config.xml defined message bundle {0}", bundleName);
+      _LOG.warning(missingResource);
+      return null;
+    }
+  }
+
+  private static ResourceBundle _getDefaultFacesMessageBundle(
     Locale locale,
     ClassLoader loader
     )
@@ -241,19 +310,16 @@
    */
   private static String _getBundleString(ResourceBundle bundle, String key)
   {
-    Object localeStr = null;
     try
     {
-      localeStr =  bundle.getObject(key);
-      if (null != localeStr )
-        localeStr = localeStr.toString();
+      Object localeStr = bundle.getObject(key);
+      return localeStr == null ? null : localeStr.toString();
     }
     catch (MissingResourceException mre)
     {
-      _LOG.warning("Key " + key + " not found in " + bundle);
+      _LOG.finer("Key {0} not found in {1}", new Object[]{key, bundle});
+      return null;
     }
-
-    return (String)localeStr;
   }
 
 

Modified: incubator/adffaces/trunk/trinidad/trinidad-impl/src/test/java/org/apache/myfaces/trinidadinternal/renderkit/MApplication.java
URL: http://svn.apache.org/viewvc/incubator/adffaces/trunk/trinidad/trinidad-impl/src/test/java/org/apache/myfaces/trinidadinternal/renderkit/MApplication.java?view=diff&rev=519370&r1=519369&r2=519370
==============================================================================
--- incubator/adffaces/trunk/trinidad/trinidad-impl/src/test/java/org/apache/myfaces/trinidadinternal/renderkit/MApplication.java (original)
+++ incubator/adffaces/trunk/trinidad/trinidad-impl/src/test/java/org/apache/myfaces/trinidadinternal/renderkit/MApplication.java Sat Mar 17 10:01:09 2007
@@ -91,7 +91,10 @@
   @Override
   public String getMessageBundle()
   {
-    throw new UnsupportedOperationException("Not implemented yet");
+    // The spec prevents throwing a UnsupportedOperationException and we have class 
+    // reading that property. Therefore it's better to return null which is a valid 
+    // return value.
+    return null;
   }
 
   @Override