You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by lu...@apache.org on 2010/11/13 02:34:04 UTC
svn commit: r1034621 - in
/myfaces/commons/branches/jsf_11/myfaces-commons-utils/src/main/java/org/apache/myfaces/commons/util:
MessageUtils.java ParametrizableFacesMessage.java
Author: lu4242
Date: Sat Nov 13 01:34:04 2010
New Revision: 1034621
URL: http://svn.apache.org/viewvc?rev=1034621&view=rev
Log:
MFCOMMONS-13 Update MessageUtils to new implementation in shared
Added:
myfaces/commons/branches/jsf_11/myfaces-commons-utils/src/main/java/org/apache/myfaces/commons/util/ParametrizableFacesMessage.java
Modified:
myfaces/commons/branches/jsf_11/myfaces-commons-utils/src/main/java/org/apache/myfaces/commons/util/MessageUtils.java
Modified: myfaces/commons/branches/jsf_11/myfaces-commons-utils/src/main/java/org/apache/myfaces/commons/util/MessageUtils.java
URL: http://svn.apache.org/viewvc/myfaces/commons/branches/jsf_11/myfaces-commons-utils/src/main/java/org/apache/myfaces/commons/util/MessageUtils.java?rev=1034621&r1=1034620&r2=1034621&view=diff
==============================================================================
--- myfaces/commons/branches/jsf_11/myfaces-commons-utils/src/main/java/org/apache/myfaces/commons/util/MessageUtils.java (original)
+++ myfaces/commons/branches/jsf_11/myfaces-commons-utils/src/main/java/org/apache/myfaces/commons/util/MessageUtils.java Sat Nov 13 01:34:04 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.
*
@@ -157,19 +233,23 @@ public final class MessageUtils
String localizedStr = null;
if(params == null || msgtext == null)
return msgtext;
- StringBuffer b = new StringBuffer(100);
- MessageFormat mf = new MessageFormat(msgtext);
+
if(locale != null)
{
- mf.setLocale(locale);
- b.append(mf.format(((Object) (params))));
- localizedStr = b.toString();
+ MessageFormat mf = new MessageFormat(msgtext,locale);
+ localizedStr = mf.format(params);
}
return localizedStr;
}
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 +261,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[])
@@ -227,23 +307,126 @@ public final class MessageUtils
if (bundle == null)
{
throw new NullPointerException(
- "Unable to locate ResrouceBundle: bundle is null");
+ "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);
+ }
+ }
+
+ 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
+ }
}
- summary = substituteParams(locale, summary, params);
- 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 +442,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 +477,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 +548,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 +565,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 +580,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;
+
+ ValueBinding expression = component.getValueBinding("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 +636,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();
-
- ValueBinding expression = component.getValueBinding("label");
- if (expression != null)
- return expression.getExpressionString();
-
- //If no label is not specified, use clientId
- return component.getClientId( facesContext );
- }
+
}
Added: myfaces/commons/branches/jsf_11/myfaces-commons-utils/src/main/java/org/apache/myfaces/commons/util/ParametrizableFacesMessage.java
URL: http://svn.apache.org/viewvc/myfaces/commons/branches/jsf_11/myfaces-commons-utils/src/main/java/org/apache/myfaces/commons/util/ParametrizableFacesMessage.java?rev=1034621&view=auto
==============================================================================
--- myfaces/commons/branches/jsf_11/myfaces-commons-utils/src/main/java/org/apache/myfaces/commons/util/ParametrizableFacesMessage.java (added)
+++ myfaces/commons/branches/jsf_11/myfaces-commons-utils/src/main/java/org/apache/myfaces/commons/util/ParametrizableFacesMessage.java Sat Nov 13 01:34:04 2010
@@ -0,0 +1,118 @@
+/*
+ * 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.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
+ {
+ _evaluatedArgs[i] = _args[i];
+ }
+ }
+ }
+}