001 package org.apache.myfaces.tobago.util; 002 003 /* 004 * Licensed to the Apache Software Foundation (ASF) under one or more 005 * contributor license agreements. See the NOTICE file distributed with 006 * this work for additional information regarding copyright ownership. 007 * The ASF licenses this file to You under the Apache License, Version 2.0 008 * (the "License"); you may not use this file except in compliance with 009 * the License. You may obtain a copy of the License at 010 * 011 * http://www.apache.org/licenses/LICENSE-2.0 012 * 013 * Unless required by applicable law or agreed to in writing, software 014 * distributed under the License is distributed on an "AS IS" BASIS, 015 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 016 * See the License for the specific language governing permissions and 017 * limitations under the License. 018 */ 019 020 import org.apache.commons.logging.Log; 021 import org.apache.commons.logging.LogFactory; 022 import org.apache.myfaces.tobago.context.ResourceManagerUtil; 023 024 import javax.faces.application.FacesMessage; 025 import javax.faces.context.FacesContext; 026 import java.util.HashMap; 027 import java.util.Locale; 028 import java.util.Map; 029 import java.util.ResourceBundle; 030 import java.text.MessageFormat; 031 032 /* 033 * User: weber 034 * Date: Jun 14, 2005 035 * Time: 5:40:04 PM 036 */ 037 public class MessageFactory { 038 039 private static final Log LOG = LogFactory.getLog(MessageFactory.class); 040 041 private static Map<Locale, ResourceBundle> facesMessagesMap 042 = new HashMap<Locale, ResourceBundle>(); 043 044 public static FacesMessage createFacesMessage(FacesContext facesContext, 045 String key, FacesMessage.Severity severity, Object[] args) { 046 return createFacesMessage(facesContext, "tobago", key, severity, args); 047 } 048 049 public static FacesMessage createFacesMessage(FacesContext facesContext, 050 String key, FacesMessage.Severity severity) { 051 return createFacesMessage(facesContext, key, severity, new Object[0]); 052 } 053 054 public static FacesMessage createFacesMessage(FacesContext facesContext, 055 String bundle, String key, FacesMessage.Severity severity, Object[] args) { 056 String summary = getMessageText(facesContext, bundle, key); 057 String detail = getMessageText(facesContext, bundle, key + "_detail"); 058 if (args != null && args.length > 0) { 059 if (summary != null) { 060 MessageFormat format = new MessageFormat(summary, facesContext.getViewRoot().getLocale()); 061 summary = format.format(args); 062 } 063 064 if (detail != null) { 065 MessageFormat format = new MessageFormat(detail, facesContext.getViewRoot().getLocale()); 066 detail = format.format(args); 067 } 068 } 069 return new FacesMessage(severity, summary != null ? summary : key, detail); 070 } 071 072 public static FacesMessage createFacesMessage(FacesContext facesContext, 073 String bundle, String key, FacesMessage.Severity severity) { 074 return createFacesMessage(facesContext, bundle, key, severity, new Object[0]); 075 } 076 077 private static String getMessageText( 078 FacesContext facesContext, String bundle, String key) { 079 String message = ResourceManagerUtil.getProperty(facesContext, bundle, key); 080 if (message == null || message.length() < 1) { 081 try { 082 Locale locale = facesContext.getViewRoot().getLocale(); 083 message = getFacesMessages(locale).getString(key); 084 } catch (Exception e) { 085 /* ignore at this point */ 086 } 087 } 088 return message; 089 } 090 091 private static ResourceBundle getFacesMessages(Locale locale) { 092 ResourceBundle facesMessages = facesMessagesMap.get(locale); 093 if (facesMessages == null) { 094 facesMessages 095 = ResourceBundle.getBundle(FacesMessage.FACES_MESSAGES, locale); 096 facesMessagesMap.put(locale, facesMessages); 097 } 098 return facesMessages; 099 } 100 }