package org.jboss.seam.international;
import java.io.Serializable;
import java.util.MissingResourceException;
import java.util.ResourceBundle;
import org.jboss.seam.core.Interpolator;
import org.jboss.seam.core.SeamResourceBundle;
import org.jboss.seam.util.Strings;
/**
* A status message which can be created in the business layer and displayed
* in the view layer
*
* @author Pete Muir
*
*/
public class StatusMessage implements Serializable
{
/**
* The severity of the status message
*
*/
public enum Severity
{
INFO,
WARN,
ERROR,
FATAL;
}
private String summaryTemplate;
private String summary;
private String detailTemplate;
private String detail;
private Severity severity = Severity.INFO;
/**
* Create a status message, looking up the message in the resource bundle
* using the provided key. If the message is found, it is used, otherwise,
* the defaultMessageTemplate will be used.
*
*/
public StatusMessage(Severity severity, String key, String detailKey, String defaultMessageTemplate, String defaultMessageDetailTemplate)
{
this.summaryTemplate = getBundleMessage(key, defaultMessageTemplate);
this.detailTemplate = getBundleMessage(detailKey, defaultMessageDetailTemplate);
if ( !Strings.isEmpty(summaryTemplate) )
{
this.severity = severity;
}
}
public boolean isEmpty()
{
return Strings.isEmpty(summary) && Strings.isEmpty(summaryTemplate);
}
public void interpolate(Object... params)
{
if (!Strings.isEmpty(summaryTemplate))
{
this.summary = Interpolator.instance().interpolate(summaryTemplate, params);
}
if (!Strings.isEmpty(detailTemplate))
{
this.detail = Interpolator.instance().interpolate(detailTemplate, params);
}
}
/**
* Get the message
*
*/
public String getSummary()
{
return summary;
}
/**
* Get the message severity
*/
public Severity getSeverity()
{
return severity;
}
public String getDetail()
{
return detail;
}
public static String getBundleMessage(String key, String defaultMessageTemplate)
{
String messageTemplate = defaultMessageTemplate;
if ( key!=null )
{
ResourceBundle resourceBundle = SeamResourceBundle.getBundle();
if ( resourceBundle!=null )
{
try
{
String bundleMessage = resourceBundle.getString(key);
if (bundleMessage!=null)
{
messageTemplate = bundleMessage;
}
}
catch (MissingResourceException mre) {} //swallow
}
}
return messageTemplate;
}
@Override
public String toString()
{
return "[" + severity + "] " + summary + " (" + detail +")";
}
}