package __PACKAGE__;
import java.text.MessageFormat;
import java.util.Locale;
import java.util.MissingResourceException;
import java.util.ResourceBundle;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
public class MessageFactory {
private static String DEFAULT_DETAIL_SUFFIX = "_detail";
private MessageFactory() {
}
public static FacesMessage getMessage(final Locale locale, final String messageId,
final FacesMessage.Severity severity, final Object... params) {
final FacesMessage facesMessage = getMessage(locale, messageId, params);
facesMessage.setSeverity(severity);
return facesMessage;
}
public static FacesMessage getMessage(final Locale locale, final String messageId,
final Object... params) {
String summary = null;
String detail = null;
final FacesContext context = FacesContext.getCurrentInstance();
final ResourceBundle bundle = context.getApplication()
.getResourceBundle(context, "messages");
try {
summary = getFormattedText(locale, bundle.getString(messageId),
params);
}
catch (final MissingResourceException e) {
summary = messageId;
}
try {
detail = getFormattedText(locale,
bundle.getString(messageId + DEFAULT_DETAIL_SUFFIX), params);
}
catch (final MissingResourceException e) {
// NoOp
}
return new FacesMessage(summary, detail);
}
public static FacesMessage getMessage(final String messageId,
final FacesMessage.Severity severity, final Object... params) {
final FacesMessage facesMessage = getMessage(getLocale(), messageId, params);
facesMessage.setSeverity(severity);
return facesMessage;
}
public static FacesMessage getMessage(final String messageId, final Object... params) {
return getMessage(getLocale(), messageId, params);
}
private static String getFormattedText(final Locale locale, final String message,
final Object params[]) {
MessageFormat messageFormat = null;
if (params == null || message == null) {
return message;
}
messageFormat = locale == null ? new MessageFormat(message)
: new MessageFormat(message, locale);
return messageFormat.format(params);
}
private static Locale getLocale() {
Locale locale = null;
final FacesContext facesContext = FacesContext.getCurrentInstance();
if (facesContext != null && facesContext.getViewRoot() != null) {
locale = facesContext.getViewRoot().getLocale();
if (locale == null) {
locale = Locale.getDefault();
}
}
else {
locale = Locale.getDefault();
}
return locale;
}
}