myfaces-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From lu4...@apache.org
Subject svn commit: r1003673 - in /myfaces/commons/trunk/myfaces-commons-utils/src/main/java/org/apache/myfaces/commons/util: MessageUtils.java ParametrizableFacesMessage.java
Date Fri, 01 Oct 2010 22:11:10 GMT
Author: lu4242
Date: Fri Oct  1 22:11:09 2010
New Revision: 1003673

URL: http://svn.apache.org/viewvc?rev=1003673&view=rev
Log:
MFCOMMONS-13 Update MessageUtils to new implementation in shared

Added:
    myfaces/commons/trunk/myfaces-commons-utils/src/main/java/org/apache/myfaces/commons/util/ParametrizableFacesMessage.java
Modified:
    myfaces/commons/trunk/myfaces-commons-utils/src/main/java/org/apache/myfaces/commons/util/MessageUtils.java

Modified: myfaces/commons/trunk/myfaces-commons-utils/src/main/java/org/apache/myfaces/commons/util/MessageUtils.java
URL: http://svn.apache.org/viewvc/myfaces/commons/trunk/myfaces-commons-utils/src/main/java/org/apache/myfaces/commons/util/MessageUtils.java?rev=1003673&r1=1003672&r2=1003673&view=diff
==============================================================================
--- myfaces/commons/trunk/myfaces-commons-utils/src/main/java/org/apache/myfaces/commons/util/MessageUtils.java
(original)
+++ myfaces/commons/trunk/myfaces-commons-utils/src/main/java/org/apache/myfaces/commons/util/MessageUtils.java
Fri Oct  1 22:11:09 2010
@@ -79,6 +79,18 @@ public final class MessageUtils
                           new Object[]{arg},
                           FacesContext.getCurrentInstance());
     }
+    
+    public static FacesMessage getMessage(String bundleBaseName, 
+            FacesMessage.Severity severity,
+            String messageId,
+            Object arg)
+    {
+        return getMessage(bundleBaseName,
+                          severity,
+                          messageId,
+                          new Object[]{arg},
+                          FacesContext.getCurrentInstance());
+    }
 
     /**
      * @param severity serverity of message
@@ -96,6 +108,18 @@ public final class MessageUtils
                           args,
                           FacesContext.getCurrentInstance());
     }
+    
+    public static FacesMessage getMessage(String bundleBaseName, 
+            FacesMessage.Severity severity,
+            String messageId,
+            Object[] args)
+    {
+        return getMessage(bundleBaseName,
+                          severity,
+                          messageId,
+                          args,
+                          FacesContext.getCurrentInstance());
+    }    
 
     public static FacesMessage getMessage(FacesMessage.Severity severity,
                                           String messageId,
@@ -108,6 +132,18 @@ public final class MessageUtils
         return message;
     }
 
+    public static FacesMessage getMessage(String bundleBaseName,
+            FacesMessage.Severity severity,
+            String messageId,
+            Object[] args,
+            FacesContext facesContext)
+    {
+        FacesMessage message = getMessage(bundleBaseName, facesContext, messageId, args);
+        message.setSeverity(severity);
+        
+        return message;
+    }
+
     public static void addMessage(FacesMessage.Severity severity,
                                   String messageId,
                                   Object[] args)
@@ -115,6 +151,14 @@ public final class MessageUtils
         addMessage(severity, messageId, args, null, FacesContext.getCurrentInstance());
     }
 
+    public static void addMessage(String bundleBaseName, 
+            FacesMessage.Severity severity,
+            String messageId,
+            Object[] args)
+    {
+        addMessage(bundleBaseName, severity, messageId, args, null, FacesContext.getCurrentInstance());
+    }
+
     public static void addMessage(FacesMessage.Severity severity,
                                   String messageId,
                                   Object[] args,
@@ -123,6 +167,15 @@ public final class MessageUtils
         addMessage(severity, messageId, args, null, facesContext);
     }
 
+    public static void addMessage(String bundleBaseName, 
+            FacesMessage.Severity severity,
+            String messageId,
+            Object[] args,
+            FacesContext facesContext)
+    {
+        addMessage(bundleBaseName, severity, messageId, args, null, facesContext);
+    }
+
     public static void addMessage(FacesMessage.Severity severity,
                                   String messageId,
                                   Object[] args,
@@ -131,6 +184,15 @@ public final class MessageUtils
         addMessage(severity, messageId, args, forClientId, FacesContext.getCurrentInstance());
     }
 
+    public static void addMessage(String bundleBaseName,
+            FacesMessage.Severity severity,
+            String messageId,
+            Object[] args,
+            String forClientId)
+    {
+        addMessage(bundleBaseName, severity, messageId, args, forClientId, FacesContext.getCurrentInstance());
+    }
+
     public static void addMessage(FacesMessage.Severity severity,
                                   String messageId,
                                   Object[] args,
@@ -144,6 +206,20 @@ public final class MessageUtils
                                 getMessage(severity, messageId, args, facesContext));
     }
 
+    public static void addMessage(String bundleBaseName,
+            FacesMessage.Severity severity,
+            String messageId,
+            Object[] args,
+            String forClientId,
+            FacesContext facesContext)
+    {
+        if(log.isTraceEnabled()) {
+        log.trace("adding message " + messageId + " for clientId " + forClientId);
+        }
+        facesContext.addMessage(forClientId,
+                  getMessage(bundleBaseName, severity, messageId, args, facesContext));
+    }
+
     /**
      * Uses <code>MessageFormat</code> and the supplied parameters to fill in
the param placeholders in the String.
      *
@@ -170,6 +246,12 @@ public final class MessageUtils
 
     public static FacesMessage getMessage(String messageId, Object params[])
     {
+        Locale locale = getCurrentLocale();
+        return getMessage(locale, messageId, params);
+    }
+
+    public static FacesMessage getMessageFromBundle(String bundleBaseName, String messageId,
Object params[])
+    {
         Locale locale = null;
         FacesContext context = FacesContext.getCurrentInstance();
         if(context != null && context.getViewRoot() != null)
@@ -181,7 +263,7 @@ public final class MessageUtils
         {
             locale = Locale.getDefault();
         }
-        return getMessage(locale, messageId, params);
+        return getMessageFromBundle(bundleBaseName, context , locale, messageId, params);
     }
 
     public static FacesMessage getMessage(Locale locale, String messageId, Object params[])
@@ -229,21 +311,124 @@ public final class MessageUtils
             throw new NullPointerException(
                 "Unable to locate ResourceBundle: bundle is null");
         }
-        summary = substituteParams(locale, summary, params);
+        if (params != null && locale != null)
+        {
+            try
+            {
+                detail = bundle.getString(messageId + DETAIL_SUFFIX);
+            }
+            catch(MissingResourceException e) {
+                // NoOp
+            }
+            return new ParametrizableFacesMessage(summary, detail, params, locale);
+        }
+        else
+        {
+            summary = substituteParams(locale, summary, params);
+            try
+            {
+                detail = substituteParams(locale,
+                    bundle.getString(messageId + DETAIL_SUFFIX), params);
+            }
+            catch(MissingResourceException e) {
+                // NoOp
+            }
+            return new FacesMessage(summary, detail);
+        }
+    }
+    
+    public static FacesMessage getMessageFromBundle(String bundleBaseName, FacesContext context,
Locale locale, String messageId, Object params[])
+    {
+        String summary = null;
+        String detail = null;
+        String bundleName = context.getApplication().getMessageBundle();
+        ResourceBundle bundle = null;
+
+        if (bundleName != null)
+        {
+            try
+            {
+                bundle = ResourceBundle.getBundle(bundleName, locale, getCurrentLoader(bundleName));
+                summary = bundle.getString(messageId);
+            }
+            catch (MissingResourceException e) {
+                // NoOp
+            }
+        }
 
-        try
+        if (summary == null)
+        {
+            try
+            {
+                bundle = ResourceBundle.getBundle(bundleBaseName, locale, getCurrentLoader(bundleBaseName));
+                if(bundle == null)
+                {
+                    throw new NullPointerException();
+                }
+                summary = bundle.getString(messageId);
+            }
+            catch(MissingResourceException e) {
+                // NoOp
+            }
+        }
+        
+        if (summary == null)
         {
-            detail = substituteParams(locale,
-                bundle.getString(messageId + DETAIL_SUFFIX), params);
+            try
+            {
+                bundle = ResourceBundle.getBundle(DEFAULT_BUNDLE, locale, getCurrentLoader(DEFAULT_BUNDLE));
+                if(bundle == null)
+                {
+                    throw new NullPointerException();
+                }
+                summary = bundle.getString(messageId);
+            }
+            catch(MissingResourceException e) {
+                // NoOp
+            }
         }
-        catch(MissingResourceException e) {
-            // NoOp
+
+        if(summary == null)
+        {
+            summary = messageId;
         }
 
-        return new FacesMessage(summary, detail);
+        if (bundle == null)
+        {
+            throw new NullPointerException(
+                "Unable to locate ResourceBundle: bundle is null");
+        }
+        
+        if (params != null && locale != null)
+        {
+            try
+            {
+                detail = bundle.getString(messageId + DETAIL_SUFFIX);
+            }
+            catch(MissingResourceException e) {
+                // NoOp
+            }
+            return new ParametrizableFacesMessage(summary, detail, params, locale);
+        }
+        else
+        {
+            summary = substituteParams(locale, summary, params);
+            try
+            {
+                detail = substituteParams(locale,
+                    bundle.getString(messageId + DETAIL_SUFFIX), params);
+            }
+            catch(MissingResourceException e) {
+                // NoOp
+            }
+            return new FacesMessage(summary, detail);
+        }
     }
 
     /**
+     *  Retrieve the message from a specific bundle. It does not look on application message
bundle
+     * or default message bundle. If it is required to look on those bundles use getMessageFromBundle
instead
+     * 
      * @param bundleBaseName baseName of ResourceBundle to load localized messages
      * @param messageId id of message
      * @param params parameters to set at localized message
@@ -259,14 +444,19 @@ public final class MessageUtils
      * @return  currently applicable Locale for this request.
      */
     public static Locale getCurrentLocale() {
+        return getCurrentLocale(FacesContext.getCurrentInstance());
+    }
+    
+    public static Locale getCurrentLocale(FacesContext context) {
         Locale locale;
-        
-        FacesContext context = FacesContext.getCurrentInstance();
-        if(context != null && context.getViewRoot() != null) {
+        if(context != null && context.getViewRoot() != null)
+        {
             locale = context.getViewRoot().getLocale();
             if(locale == null)
                 locale = Locale.getDefault();
-        } else {
+        }
+        else
+        {
             locale = Locale.getDefault();
         }
         
@@ -289,6 +479,9 @@ public final class MessageUtils
     }
 
     /**
+     *  Retrieve the message from a specific bundle. It does not look on application message
bundle
+     * or default message bundle. If it is required to look on those bundles use getMessageFromBundle
instead
+     * 
      * @param bundleBaseName baseName of ResourceBundle to load localized messages
      * @param locale current locale
      * @param messageId id of message
@@ -357,6 +550,11 @@ public final class MessageUtils
     {
         return getMessage(context, messageId, ((Object []) (null)));
     }
+    
+    public static FacesMessage getMessage(String bundleBaseName, FacesContext context, String
messageId)
+    {
+        return getMessage(bundleBaseName, context, messageId, ((Object []) (null)));
+    }
 
     /**
      *
@@ -369,7 +567,7 @@ public final class MessageUtils
     {
         if(context == null || messageId == null)
             throw new NullPointerException(" context " + context + " messageId " + messageId);
-        Locale locale = getCurrentLocale();
+        Locale locale = getCurrentLocale(context);
         if(null == locale)
             throw new NullPointerException(" locale " + locale);
         FacesMessage message = getMessage(locale, messageId, params);
@@ -384,19 +582,53 @@ public final class MessageUtils
             return getMessage(locale, messageId, params);
         }
     }
+    
+    public static FacesMessage getMessage(String bundleBaseName, FacesContext context, String
messageId, Object params[])
+    {
+        if(context == null || messageId == null)
+            throw new NullPointerException(" context " + context + " messageId " + messageId);
+        Locale locale = getCurrentLocale(context);
+        if(null == locale)
+            throw new NullPointerException(" locale " + locale);
+        FacesMessage message = getMessageFromBundle(bundleBaseName, context, locale, messageId,
params);
+        if(message != null)
+        {
+            return message;
+        } else
+        {
+            // TODO /FIX:  Note that this has fallback behavior to default Locale for message,
+            // but similar behavior above does not.  The methods should probably behave
+            locale = Locale.getDefault();
+            return getMessageFromBundle(bundleBaseName, context, locale, messageId, params);
+        }
+    }
+    
+    public static Object getLabel(FacesContext facesContext, UIComponent component) {
+        Object label = component.getAttributes().get("label");
+        if(label != null)
+            return label;
+        
+        ValueExpression expression = component.getValueExpression("label");
+        if(expression != null)
+            return expression;
+        
+        //If no label is not specified, use clientId
+        return component.getClientId( facesContext );
+    }
 
     private static Application getApplication()
     {
         FacesContext context = FacesContext.getCurrentInstance();
         if(context != null)
         {
-            return FacesContext.getCurrentInstance().getApplication();
+            return context.getApplication();
         } else
         {
             ApplicationFactory afactory = (ApplicationFactory)FactoryFinder.getFactory("javax.faces.application.ApplicationFactory");
             return afactory.getApplication();
         }
     }
+    
     private static ClassLoader getCurrentLoader(Object defaultObject)
     {
         ClassLoader loader = Thread.currentThread().getContextClassLoader();
@@ -406,17 +638,5 @@ public final class MessageUtils
         }
         return loader;
     }
-
-    public static String getLabel(FacesContext facesContext, UIComponent component) {
-        Object label = component.getAttributes().get("label");
-        if(label != null)
-          return label.toString();
-
-        ValueExpression expression = component.getValueExpression("label");
-        if (expression != null)
-          return expression.getExpressionString();
-
-        //If no label is not specified, use clientId
-        return component.getClientId( facesContext );
-      }
-}
\ No newline at end of file
+    
+}

Added: myfaces/commons/trunk/myfaces-commons-utils/src/main/java/org/apache/myfaces/commons/util/ParametrizableFacesMessage.java
URL: http://svn.apache.org/viewvc/myfaces/commons/trunk/myfaces-commons-utils/src/main/java/org/apache/myfaces/commons/util/ParametrizableFacesMessage.java?rev=1003673&view=auto
==============================================================================
--- myfaces/commons/trunk/myfaces-commons-utils/src/main/java/org/apache/myfaces/commons/util/ParametrizableFacesMessage.java
(added)
+++ myfaces/commons/trunk/myfaces-commons-utils/src/main/java/org/apache/myfaces/commons/util/ParametrizableFacesMessage.java
Fri Oct  1 22:11:09 2010
@@ -0,0 +1,127 @@
+/*
+ * 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.
+ */
+package org.apache.myfaces.commons.util;
+
+import java.text.MessageFormat;
+import java.util.Locale;
+
+import javax.el.ValueExpression;
+import javax.faces.application.FacesMessage;
+import javax.faces.context.FacesContext;
+import javax.faces.el.ValueBinding;
+
+/** 
+ * This class encapsulates a FacesMessage to evaluate the label
+ * expression on render response, where f:loadBundle is available
+ * 
+ * @author Leonardo Uribe (latest modification by $Author: skitching $)
+ * @version $Revision: 676298 $ $Date: 2008-07-13 05:31:48 -0500 (Dom, 13 Jul 2008) $
+ */
+public class ParametrizableFacesMessage extends FacesMessage
+{
+    /**
+     * 
+     */
+    private static final long serialVersionUID = 7792947730961657948L;
+
+    private final Object _args[];
+    private String _evaluatedDetail;
+    private String _evaluatedSummary;
+    private transient Object _evaluatedArgs[];
+    private Locale _locale;
+
+    public ParametrizableFacesMessage(
+            String summary, String detail, Object[] args, Locale locale)
+    {
+        super(summary, detail);
+        if(locale == null) throw new NullPointerException("locale");
+        _locale = locale;
+        _args = args;
+    }
+
+    public ParametrizableFacesMessage(FacesMessage.Severity severity,
+            String summary, String detail, Object[] args, Locale locale)
+    {
+        super(severity, summary, detail);
+        if(locale == null) throw new NullPointerException("locale");
+        _locale = locale;
+        _args = args;
+    }
+
+    public String getDetail()
+    {
+        if (_evaluatedArgs == null && _args != null)
+        {
+            evaluateArgs();
+        }
+        if (_evaluatedDetail == null)
+        {
+            MessageFormat format = new MessageFormat(super.getDetail(), _locale);
+            _evaluatedDetail = format.format(_evaluatedArgs);
+        }
+        return _evaluatedDetail;
+    }
+
+    public String getSummary()
+    {
+        if (_evaluatedArgs == null && _args != null)
+        {
+            evaluateArgs();
+        }
+        if (_evaluatedSummary == null)
+        {
+            MessageFormat format = new MessageFormat(super.getSummary(), _locale);
+            _evaluatedSummary = format.format(_evaluatedArgs);
+        }
+        return _evaluatedSummary;
+    }
+
+    private void evaluateArgs()
+    {
+        _evaluatedArgs = new Object[_args.length];
+        FacesContext facesContext = null;
+        for (int i = 0; i < _args.length; i++)
+        {
+            if (_args[i] == null)
+            {
+                continue;
+            }
+            else if (_args[i] instanceof ValueBinding)
+            {
+                if (facesContext == null)
+                {
+                    facesContext = FacesContext.getCurrentInstance();
+                }
+                _evaluatedArgs[i] = ((ValueBinding)_args[i]).getValue(facesContext);
+            }
+            else if (_args[i] instanceof ValueExpression)
+            {
+                if (facesContext == null)
+                {
+                    facesContext = FacesContext.getCurrentInstance();
+                }
+                _evaluatedArgs[i] = ((ValueExpression)_args[i]).getValue(facesContext.getELContext());
+            }
+            else 
+            {
+                _evaluatedArgs[i] = _args[i];
+            }
+        }
+    }
+}



Mime
View raw message