package com.joe.jsf.helper; import java.util.Map; import javax.faces.application.FacesMessage; import javax.faces.application.FacesMessage.Severity; import javax.faces.context.FacesContext; import com.joe.utilities.core.util.MessageHandler; import com.joe.utilities.core.util.ReturnStatus; import com.joe.utilities.core.util.ReturnStatusItem; /** * This class is used by the presentation tier to facilitate message handling specifically for * and within the JSF environment. * * @author John J. Jones III * @version 1.0 * * Creation date: Mar 8, 2007 * Copyright (c) 2007 MEDecision, Inc. All rights reserved. */ public class FacesMessageHandler { /** * This method is used to process Return Status Items that when the result object returned * from the facade was not a success. The faces messages are built by using the * messagehandler to obtain the message detail and summary values from the application message * bundle. * * @param returnStatus * @param componentString * @throws RuntimeException */ public static void processReturnStatusMessages(ReturnStatus returnStatus, String componentString) throws RuntimeException{ // Do nothing with empty status object if (returnStatus == null) return; // instantiate array of Return status items ReturnStatusItem statusItems[] = returnStatus.getResultStatusItems(); // iterate through result items and add s to faces context for (int i=0; i<statusItems.length;i++) { // add faces message Severity messageSeverity = null; if (statusItems[i].getStatus().equals(ReturnStatus.Status.INFORMATIONAL)) { messageSeverity = FacesMessage.SEVERITY_INFO; } else if (statusItems[i].getStatus().equals(ReturnStatus.Status.WARNING)) { messageSeverity = FacesMessage.SEVERITY_WARN; } else { messageSeverity = FacesMessage.SEVERITY_ERROR; } if(componentString == null) addMessage(messageSeverity,statusItems[i].getDefaultMessage()); else addMessage(componentString, statusItems[i].getCode(), statusItems[i].getParameterMap(), messageSeverity); } } /** * This method is used to add a single faces message (with severity of WARNING) to the * faces context. * * @param messageComponentString * @param messageCode */ public static void addWarningMessage(String messageComponentString, String messageCode) { addMessage(messageComponentString, messageCode, null, FacesMessage.SEVERITY_WARN); } /** * This method is used to add a single faces message (with severity of WARNING) to the * faces context with parameters. * * @param messageComponentString * @param messageCode * @param paramMap */ public static void addWarningMessageWithParams(String messageComponentString, String messageCode, Map<String, String> paramMap) { addMessage(messageComponentString, messageCode, paramMap, FacesMessage.SEVERITY_WARN); } /** * This method is used to add a single faces message (with severity of ERROR) to the * faces context with parameters. * * @param messageComponentString * @param messageCode * @param paramMap */ public static void addErrorMessageWithParams(String messageComponentString, String messageCode, Map<String, String> paramMap) { addMessage(messageComponentString, messageCode, paramMap, FacesMessage.SEVERITY_ERROR); } /** * This method is used to add a single faces message (with severity of INFORMATION) to the * faces context. * * @param messageComponentString * @param messageCode */ public static void addInformationMessage(String messageComponentString, String messageCode) { addMessage(messageComponentString, messageCode, null, FacesMessage.SEVERITY_INFO); } /** * This method is used to add a single faces message (with severity of INFORMATION) to the * faces context with parameters. * * @param messageComponentString * @param messageCode * @param paramMap */ public static void addInformationMessageWithParams(String messageComponentString, String messageCode, Map<String, String> paramMap) { addMessage(messageComponentString, messageCode, paramMap, FacesMessage.SEVERITY_INFO); } /** * This method is used to add a single faces message (with severity of ERROR) to the * faces context. * * @param messageComponentString * @param messageCode */ public static void addErrorMessage(String messageComponentString, String messageCode) { addMessage(messageComponentString, messageCode, null, FacesMessage.SEVERITY_ERROR); } /** * @deprecated DEVELOPERS SHOULD NOT ALLOW CALLS TO THIS METHOD TO REACH PRODUCTION. * USE addErrorMessage(String,String) INSTEAD. * * This method provides a temporary way of adding a faces message to the context. This method * merely uses the passed "message" directly as both the message detail and summary, and does * not obtain anything from the message bundle via the messagehandler. * * @param message */ @Deprecated public static void addErrorMessage(String message) { // get faces context instance FacesContext facesContext = FacesContext.getCurrentInstance(); // create faces message based on component string and message code FacesMessage facesMessage = new FacesMessage(message,message); facesMessage.setSeverity(FacesMessage.SEVERITY_ERROR); /* TODO figure out what first parameter should be (CLIENT IDENTIFIER) */ facesContext.addMessage(null, facesMessage); } /** * Returns if the Faces Context getMessages has any messages defined. * @return boolean */ public static boolean hasMessages() { // if a message exists in the faces messages iterator return true if (FacesContext.getCurrentInstance().getMessages().hasNext()) { return true; } else return false; } /** * This method obtains the faces context, creates the faces message, obtains the message * detail and summary values from MessageHandler, sets the severity, and adds the faces * message to the faces context. * * @param messageComponentString * @param messageCode * @param paramMap * @param messageSeverity */ private static void addMessage(String messageComponentString, String messageCode, Map<String, String> paramMap, Severity messageSeverity) { // get faces context instance FacesContext facesContext = FacesContext.getCurrentInstance(); // create faces message based on component string and message code FacesMessage facesMessage = new FacesMessage(); if (paramMap==null || paramMap.isEmpty()) { // if paramMap is empty, get detail message without params facesMessage.setDetail(MessageHandler.getMessageValueDetail(messageComponentString, messageCode)); } else { // get message with params facesMessage.setDetail(MessageHandler.getMessageValueDetail(messageComponentString,messageCode,paramMap)); } facesMessage.setSummary(MessageHandler.getMessageValueSummary(messageComponentString, messageCode)); facesMessage.setSeverity(messageSeverity); /* TODO figure out what first parameter should be (CLIENT IDENTIFIER) */ facesContext.addMessage(null, facesMessage); } private static void addMessage(Severity messageSeverity, String defaultMessage) { // get faces context instance FacesContext facesContext = FacesContext.getCurrentInstance(); // create faces message based on component string and message code FacesMessage facesMessage = new FacesMessage(); facesMessage.setDetail(defaultMessage); facesMessage.setSeverity(messageSeverity); /* TODO figure out what first parameter should be (CLIENT IDENTIFIER) */ facesContext.addMessage(null, facesMessage); } }