All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.myfaces.shared_tomahawk.util.MessageUtils Maven / Gradle / Ivy

Go to download

JSF components and utilities that can be used with any JSF implementation. This library is based on the JSF1.1 version of Tomahawk, but with minor source code and build changes to take advantage of JSF2.1 features. A JSF2.1 implementation is required to use this version of the Tomahawk library.

The newest version!
/*
 * 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.shared_tomahawk.util;

import java.text.MessageFormat;
import java.util.Locale;
import java.util.MissingResourceException;
import java.util.ResourceBundle;
import java.util.logging.Level;
import java.util.logging.Logger;

import javax.el.ValueExpression;
import javax.faces.FactoryFinder;
import javax.faces.application.Application;
import javax.faces.application.ApplicationFactory;
import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;

/**
 * Utility class to support multilingual FacesMessages using ResourceBundles.
 * Standard messages are stored at DEFAULT_BUNDLE.
* The summary of the message is stored at the requested key value. The detail * of the message is stored at <messageId>_detail. * * @see FacesMessage * @see java.util.ResourceBundle * * @author Thomas Spiegl (latest modification by $Author: lu4242 $) * @author Manfred Geiler * @author Sean Schofield * @author Stpehan Strittmatter * @version $Revision: 1380845 $ $Date: 2012-09-04 15:10:04 -0500 (Tue, 04 Sep 2012) $ */ public final class MessageUtils { /** Utility class, do not instatiate */ private MessageUtils() { // nope } /** Default bundle for messages (javax.faces.Messages) */ private static final String DEFAULT_BUNDLE = "javax.faces.Messages"; /** Suffix for message details (_detail)*/ private static final String DETAIL_SUFFIX = "_detail"; //private static Log log = LogFactory.getLog(MessageUtils.class); private static Logger log = Logger.getLogger(MessageUtils.class.getName()); /** * @param severity serverity of message * @param messageId id of message * @param arg arument of message * * @return generated FacesMessage */ public static FacesMessage getMessage(FacesMessage.Severity severity, String messageId, Object arg) { return getMessage(severity, messageId, 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 * @param messageId id of message * @param args aruments of message * * @return generated FacesMessage */ public static FacesMessage getMessage(FacesMessage.Severity severity, String messageId, Object[] args) { return getMessage(severity, messageId, 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, Object[] args, FacesContext facesContext) { FacesMessage message = getMessage(facesContext, messageId, args); message.setSeverity(severity); 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) { 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, FacesContext facesContext) { 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, String forClientId) { 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, String forClientId, FacesContext facesContext) { if(log.isLoggable(Level.FINEST)) { log.finest("adding message " + messageId + " for clientId " + forClientId); } facesContext.addMessage(forClientId, getMessage(severity, messageId, args, facesContext)); } public static void addMessage(String bundleBaseName, FacesMessage.Severity severity, String messageId, Object[] args, String forClientId, FacesContext facesContext) { if(log.isLoggable(Level.FINEST)) { log.finest("adding message " + messageId + " for clientId " + forClientId); } facesContext.addMessage(forClientId, getMessage(bundleBaseName, severity, messageId, args, facesContext)); } /** * Uses MessageFormat and the supplied parameters to fill in the param placeholders in the String. * * @param locale The Locale to use when performing the substitution. * @param msgtext The original parameterized String. * @param params The params to fill in the String with. * @return The updated String. */ public static String substituteParams(Locale locale, String msgtext, Object params[]) { String localizedStr = null; if(params == null || msgtext == null) { return msgtext; } if(locale != null) { 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) { locale = context.getViewRoot().getLocale(); if(locale == null) { locale = Locale.getDefault(); } } else { locale = Locale.getDefault(); } return getMessageFromBundle(bundleBaseName, context , locale, messageId, params); } public static FacesMessage getMessage(Locale locale, String messageId, Object params[]) { String summary = null; String detail = null; String bundleName = getApplication().getMessageBundle(); ResourceBundle bundle = null; if (bundleName != null) { try { bundle = ResourceBundle.getBundle(bundleName, locale, org.apache.myfaces.shared_tomahawk.util.ClassUtils.getCurrentLoader(bundleName)); summary = bundle.getString(messageId); } catch (MissingResourceException e) { // NoOp } } if (summary == null) { try { bundle = ResourceBundle.getBundle(DEFAULT_BUNDLE, locale, org.apache.myfaces.shared_tomahawk.util.ClassUtils.getCurrentLoader(DEFAULT_BUNDLE)); if(bundle == null) { throw new NullPointerException(); } summary = bundle.getString(messageId); } catch(MissingResourceException e) { // NoOp } } if(summary == null) { summary = messageId; } 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); } } 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, org.apache.myfaces.shared_tomahawk.util.ClassUtils.getCurrentLoader(bundleName)); summary = bundle.getString(messageId); } catch (MissingResourceException e) { // NoOp } } if (summary == null) { try { bundle = ResourceBundle.getBundle(bundleBaseName, locale, org.apache.myfaces.shared_tomahawk.util.ClassUtils.getCurrentLoader(bundleBaseName)); if(bundle == null) { throw new NullPointerException(); } summary = bundle.getString(messageId); } catch(MissingResourceException e) { // NoOp } } if (summary == null) { try { bundle = ResourceBundle.getBundle(DEFAULT_BUNDLE, locale, org.apache.myfaces.shared_tomahawk.util.ClassUtils.getCurrentLoader(DEFAULT_BUNDLE)); if(bundle == null) { throw new NullPointerException(); } summary = bundle.getString(messageId); } catch(MissingResourceException e) { // NoOp } } if(summary == null) { summary = messageId; } 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 * @return generated FacesMessage */ public static FacesMessage getMessage(String bundleBaseName, String messageId, Object params[]) { return getMessage(bundleBaseName, getCurrentLocale(), messageId, params); } /** * * @return currently applicable Locale for this request. */ public static Locale getCurrentLocale() { return getCurrentLocale(FacesContext.getCurrentInstance()); } public static Locale getCurrentLocale(FacesContext context) { Locale locale; if(context != null && context.getViewRoot() != null) { locale = context.getViewRoot().getLocale(); if(locale == null) { locale = Locale.getDefault(); } } else { locale = Locale.getDefault(); } return locale; } /** * @param severity severity of message * @param bundleBaseName baseName of ResourceBundle to load localized messages * @param messageId id of message * @param params parameters to set at localized message * @return generated FacesMessage */ public static FacesMessage getMessage(FacesMessage.Severity severity, String bundleBaseName, String messageId, Object params[]) { FacesMessage msg = getMessage(bundleBaseName, messageId, params); msg.setSeverity(severity); return msg; } /** * 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 * @param params parameters to set at localized message * @return generated FacesMessage */ public static FacesMessage getMessage(String bundleBaseName, Locale locale, String messageId, Object params[]) { if (bundleBaseName == null) { throw new NullPointerException( "Unable to locate ResourceBundle: bundle is null"); } ResourceBundle bundle = ResourceBundle.getBundle(bundleBaseName, locale); return getMessage(bundle, messageId, params); } /** * @param bundle ResourceBundle to load localized messages * @param messageId id of message * @param params parameters to set at localized message * @return generated FacesMessage */ public static FacesMessage getMessage(ResourceBundle bundle, String messageId, Object params[]) { String summary = null; String detail = null; try { summary = bundle.getString(messageId); } catch (MissingResourceException e) { // NoOp } if(summary == null) { summary = messageId; } summary = substituteParams(bundle.getLocale(), summary, params); try { detail = substituteParams(bundle.getLocale(), bundle.getString(messageId + DETAIL_SUFFIX), params); } catch(MissingResourceException e) { // NoOp } return new FacesMessage(summary, detail); } /** * * @param context * @param messageId * @return generated FacesMessage */ public static FacesMessage getMessage(FacesContext context, String messageId) { return getMessage(context, messageId, ((Object []) (null))); } public static FacesMessage getMessage(String bundleBaseName, FacesContext context, String messageId) { return getMessage(bundleBaseName, context, messageId, ((Object []) (null))); } /** * * @param context * @param messageId * @param params * @return generated FacesMessage */ public static FacesMessage getMessage(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 = getMessage(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 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"); ValueExpression expression = null; if (label != null && label instanceof String && ((String)label).length() == 0 ) { // Note component.getAttributes().get("label") internally try to // evaluate the EL expression for the label, but in some cases, // when PSS is disabled and f:loadBundle is used, when the view is // restored the bundle is not set to the EL expression returns an // empty String. It is not possible to check if there is a // hardcoded label, but we can check if there is // an EL expression set, so the best in this case is use that, and if // there is an EL expression set, use it, otherwise use the hardcoded // value. See MYFACES-3591 for details. expression = component.getValueExpression("label"); if (expression != null) { // Set the label to null and use the EL expression instead. label = null; } } if(label != null) { return label; } expression = (expression == null) ? component.getValueExpression("label") : expression; 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 context.getApplication(); } else { ApplicationFactory afactory = (ApplicationFactory)FactoryFinder.getFactory( "javax.faces.application.ApplicationFactory"); return afactory.getApplication(); } } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy