package org.transgalactica.fwk.web.message;
import java.util.ArrayList;
import java.util.List;
import org.springframework.context.MessageSourceResolvable;
import org.springframework.context.support.DefaultMessageSourceResolvable;
import org.springframework.ui.ExtendedModelMap;
import org.springframework.ui.Model;
import org.transgalactica.fwk.validation.exception.BusinessException;
import org.transgalactica.fwk.validation.exception.ExceptionUtils;
import org.transgalactica.fwk.validation.exception.MultipleErrorsException;
/**
* Add message to a Model. Message could be shown in view using
* <code><spring:message/></code> tag.
*
* @see MessageSourceResolvable
*/
public abstract class BusinessMessageUtils {
public static final String BUSINESS_ERRORS_MESSAGES_ATTRIBUTE = "businessErrors";
public static final String BUSINESS_MESSAGES_ATTRIBUTE = "businessMessages";
protected BusinessMessageUtils() {
}
public static Model addBusinessMessage(String code) {
Model model = new ExtendedModelMap();
addBusinessMessage(model, code);
return model;
}
public static void addBusinessMessage(Model model, String code) {
addBusinessMessage(model, new DefaultMessageSourceResolvable(code));
}
public static Model addBusinessMessage(MessageSourceResolvable message) {
Model model = new ExtendedModelMap();
addBusinessMessage(model, message);
return model;
}
public static void addBusinessMessage(Model model, MessageSourceResolvable message) {
addMessage(BUSINESS_MESSAGES_ATTRIBUTE, model, message);
}
public static Model addBusinessException(BusinessException exception) {
Model model = new ExtendedModelMap();
addBusinessException(model, exception);
return model;
}
public static void addBusinessException(Model model, BusinessException exception) {
if (exception instanceof MultipleErrorsException) {
MultipleErrorsException errorsException = (MultipleErrorsException) exception;
for (MessageSourceResolvable message : errorsException.getErrors()) {
addBusinessErrorMessage(model, message);
}
}
else {
MessageSourceResolvable message = ExceptionUtils.getMessageSourceResolvable(exception);
addBusinessErrorMessage(model, message);
}
}
public static Model addBusinessErrorMessage(String code) {
Model model = new ExtendedModelMap();
addBusinessErrorMessage(model, code);
return model;
}
public static void addBusinessErrorMessage(Model model, String code) {
addBusinessErrorMessage(model, new DefaultMessageSourceResolvable(code));
}
public static Model addBusinessErrorMessage(MessageSourceResolvable message) {
Model model = new ExtendedModelMap();
addBusinessErrorMessage(model, message);
return model;
}
public static void addBusinessErrorMessage(Model model, MessageSourceResolvable message) {
addMessage(BUSINESS_ERRORS_MESSAGES_ATTRIBUTE, model, message);
}
protected static void addMessage(String attributeKey, Model model, MessageSourceResolvable message) {
List<MessageSourceResolvable> messages = (List<MessageSourceResolvable>) model.asMap().get(attributeKey);
if (messages == null) {
messages = new ArrayList<MessageSourceResolvable>(2);
model.addAttribute(attributeKey, messages);
}
messages.add(message);
model.addAttribute(attributeKey, messages);
}
}