001 /*
002 * Copyright 2011 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 */
016 package org.kuali.kfs.sys;
017
018 import java.text.MessageFormat;
019 import java.util.List;
020
021 import org.apache.commons.lang.StringUtils;
022 import org.kuali.kfs.sys.context.SpringContext;
023 import org.kuali.rice.kns.bo.BusinessObject;
024 import org.kuali.rice.kns.datadictionary.DataDictionary;
025 import org.kuali.rice.kns.service.DataDictionaryService;
026 import org.kuali.rice.kns.service.KualiConfigurationService;
027
028 /**
029 * This class provides a set of utilities that can be used to build error message
030 */
031 public class MessageBuilder {
032 private static KualiConfigurationService kualiConfigurationService = SpringContext.getBean(KualiConfigurationService.class);
033 private static DataDictionaryService dataDictionaryService = SpringContext.getBean(DataDictionaryService.class);
034 private static DataDictionary dataDictionary = dataDictionaryService.getDataDictionary();
035
036 /**
037 * add the given message into the given message list
038 *
039 * @param messageList the given message list
040 * @param message the given message
041 */
042 public static void addMessageIntoList(List<Message> messageList, Message message) {
043 if (message != null) {
044 messageList.add(message);
045 }
046 }
047
048 /**
049 * Build the error message with the message body and error type
050 */
051 public static Message buildMessage(String errorMessageKey, int errorType) {
052 return MessageBuilder.buildMessage(errorMessageKey, null, errorType);
053 }
054
055 /**
056 * Build the message for a fatal error with the message body and invalid value
057 */
058 public static Message buildMessage(String errorMessageKey, String invalidValue) {
059 return buildMessage(errorMessageKey, invalidValue, Message.TYPE_FATAL);
060 }
061
062 /**
063 * Build the error message with the message body, invalid value and error type
064 */
065 public static Message buildMessage(String errorMessageKey, String invalidValue, int errorType) {
066 String errorMessageBody = getPropertyString(errorMessageKey);
067 String errorMessage = formatMessageBody(errorMessageBody, invalidValue);
068 return new Message(errorMessage, errorType);
069 }
070
071 /**
072 * Format the error message body based on the given error message and invalid value
073 */
074 public static String formatMessageBody(String errorMessageBody, String invalidValue) {
075 String value = StringUtils.isBlank(invalidValue) ? "" : "[" + invalidValue + "]";
076 return errorMessageBody + value;
077 }
078
079 /**
080 * Build the error message with the message body, invalid value and error type. The message body contains place holders.
081 */
082 public static Message buildMessageWithPlaceHolder(String errorMessageKey, int errorType, Object... invalidValues) {
083 String errorMessageBody = getPropertyString(errorMessageKey);
084 String errorMessage = MessageFormat.format(errorMessageBody, invalidValues);
085 return new Message(errorMessage, errorType);
086 }
087
088 /**
089 * Build the message for a fatal error with the message body and invalid value. The message body contains place holders.
090 */
091 public static Message buildMessageWithPlaceHolder(String errorMessageKey, Object... invalidValues) {
092 return buildMessageWithPlaceHolder(errorMessageKey, Message.TYPE_FATAL, invalidValues);
093 }
094
095 /**
096 * get the message from application resource properties with the given key
097 *
098 * @param messageKey the given message key
099 * @return the message from application resource properties with the given key
100 */
101 public static String getPropertyString(String messageKey) {
102 return kualiConfigurationService.getPropertyString(messageKey);
103 }
104
105 /**
106 * build the error message with the given label and current value
107 *
108 * @param label the given label
109 * @param currentValue the given current value
110 * @return the error message built from the given label and current value
111 */
112 public static String buildErrorMessageWithDataDictionary(Class<? extends BusinessObject> businessObjectClass, String attributeName, String currentValue) {
113 String label = getShortLabel(businessObjectClass, attributeName);
114
115 return label + ":" + currentValue;
116 }
117
118 /**
119 * get the label of the specified attribute of the given business object
120 *
121 * @param businessObjectClass the given business object
122 * @param attributeName the specified attribute name
123 * @return the label of the specified attribute of the given business object
124 */
125 public static String getShortLabel(Class<? extends BusinessObject> businessObjectClass, String attributeName) {
126 return dataDictionary.getBusinessObjectEntry(businessObjectClass.getName()).getAttributeDefinition(attributeName).getShortLabel();
127 }
128 }