001/** 002 * Copyright 2005-2018 The Kuali Foundation 003 * 004 * Licensed under the Educational Community License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.opensource.org/licenses/ecl2.php 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016package org.kuali.rice.krad.uif.lifecycle; 017 018import java.io.Serializable; 019import java.text.MessageFormat; 020 021import org.apache.commons.lang.StringUtils; 022import org.kuali.rice.krad.messages.MessageService; 023import org.kuali.rice.krad.service.KRADServiceLocatorWeb; 024import org.kuali.rice.krad.uif.UifConstants; 025import org.kuali.rice.krad.uif.util.ScriptUtils; 026import org.kuali.rice.krad.uif.view.View; 027import org.kuali.rice.krad.uif.view.ViewModel; 028import org.kuali.rice.krad.util.ErrorMessage; 029import org.kuali.rice.krad.util.GlobalVariables; 030import org.kuali.rice.krad.util.GrowlMessage; 031import org.kuali.rice.krad.util.KRADConstants; 032import org.kuali.rice.krad.util.MessageMap; 033 034/** 035 * @author Kuali Rice Team (rice.collab@kuali.org) 036 */ 037public class LifecycleBase implements Serializable { 038 private static final long serialVersionUID = 9150578453981086356L; 039 040 public static void performPostLifecycleProcessing(View view, Object model, ViewPostMetadata viewPostMetadata) { 041 String growlScript = buildGrowlScript(view.isGrowlMessagingEnabled()); 042 ((ViewModel) model).setGrowlScript(growlScript); 043 044 } 045 046 /** 047 * Builds JS script that will invoke the show growl method to display a growl message when the 048 * page is rendered. 049 * 050 * <p>A growl call will be created for any explicit growl messages added to the message map.</p> 051 * 052 * @param growlMessagingEnabled indicates whether growls have been enabled, if not any growl messages are 053 * written as info messages 054 * @return JS script string for generated growl messages 055 */ 056 protected static String buildGrowlScript(boolean growlMessagingEnabled) { 057 StringBuilder growlScript = new StringBuilder(); 058 059 MessageService messageService = KRADServiceLocatorWeb.getMessageService(); 060 061 MessageMap messageMap = GlobalVariables.getMessageMap(); 062 for (GrowlMessage growl : messageMap.getGrowlMessages()) { 063 if (growlMessagingEnabled) { 064 String message = messageService.getMessageText(growl.getNamespaceCode(), growl.getComponentCode(), 065 growl.getMessageKey()); 066 067 if (StringUtils.isBlank(message)) { 068 continue; 069 } 070 071 if (growl.getMessageParameters() != null) { 072 message = message.replace("'", "''"); 073 message = MessageFormat.format(message, (Object[]) growl.getMessageParameters()); 074 } 075 076 // escape single quotes in message or title since that will cause problem with plugin 077 message = message.replace("'", "\\'"); 078 079 String title = growl.getTitle(); 080 if (StringUtils.isNotBlank(growl.getTitleKey())) { 081 title = messageService.getMessageText(growl.getNamespaceCode(), growl.getComponentCode(), 082 growl.getTitleKey()); 083 } 084 title = title.replace("'", "\\'"); 085 086 growlScript.append(ScriptUtils.buildFunctionCall(UifConstants.JsFunctions.SHOW_GROWL, message, title, 087 growl.getTheme())); 088 089 } else { 090 ErrorMessage infoMessage = new ErrorMessage(growl.getMessageKey(), growl.getMessageParameters()); 091 infoMessage.setNamespaceCode(growl.getNamespaceCode()); 092 infoMessage.setComponentCode(growl.getComponentCode()); 093 094 messageMap.putInfoForSectionId(KRADConstants.GLOBAL_INFO, infoMessage); 095 } 096 } 097 098 return growlScript.toString(); 099 } 100 101}