diff --git a/spring-binding/src/main/java/org/springframework/binding/message/MessageBuilder.java b/spring-binding/src/main/java/org/springframework/binding/message/MessageBuilder.java index 7567641e..b5cb7558 100644 --- a/spring-binding/src/main/java/org/springframework/binding/message/MessageBuilder.java +++ b/spring-binding/src/main/java/org/springframework/binding/message/MessageBuilder.java @@ -38,6 +38,7 @@ import org.springframework.core.style.ToStringCreator; * *

* @author Keith Donald + * @author Jeremy Grelle */ public class MessageBuilder { @@ -78,6 +79,15 @@ public class MessageBuilder { return this; } + /** + * Records that the message being built is a fatal message. + * @return this, for fluent API usage + */ + public MessageBuilder fatal() { + severity = Severity.FATAL; + return this; + } + /** * Records that the message being built is against the provided source. * @param source the source generating the message diff --git a/spring-binding/src/main/java/org/springframework/binding/message/Severity.java b/spring-binding/src/main/java/org/springframework/binding/message/Severity.java index 66016828..801e284f 100644 --- a/spring-binding/src/main/java/org/springframework/binding/message/Severity.java +++ b/spring-binding/src/main/java/org/springframework/binding/message/Severity.java @@ -21,6 +21,7 @@ import org.springframework.core.enums.StaticLabeledEnum; * Enum exposing supported message severities. * * @author Keith Donald + * @author Jeremy Grelle * @see Message */ public class Severity extends StaticLabeledEnum { @@ -37,10 +38,15 @@ public class Severity extends StaticLabeledEnum { public static final Severity WARNING = new Severity(1, "Warning"); /** - * THe "Error" severity. Used to indicate a significant problem like a business rule violation. + * The "Error" severity. Used to indicate a significant problem like a business rule violation. */ public static final Severity ERROR = new Severity(2, "Error"); + /** + * The "Fatal" severity. Used to indicate a fatal problem like a system error. + */ + public static final Severity FATAL = new Severity(3, "Fatal"); + private Severity(int code, String label) { super(code, label); } diff --git a/spring-binding/src/test/java/org/springframework/binding/message/MessageBuilderTests.java b/spring-binding/src/test/java/org/springframework/binding/message/MessageBuilderTests.java index 0718a902..88b132e3 100644 --- a/spring-binding/src/test/java/org/springframework/binding/message/MessageBuilderTests.java +++ b/spring-binding/src/test/java/org/springframework/binding/message/MessageBuilderTests.java @@ -26,6 +26,14 @@ public class MessageBuilderTests extends TestCase { assertNull(message.getSource()); } + public void testBuildFatal() { + MessageResolver resolver = builder.fatal().defaultText("foo").build(); + Message message = resolver.resolveMessage(messageSource, locale); + assertEquals("foo", message.getText()); + assertEquals(Severity.FATAL, message.getSeverity()); + assertNull(message.getSource()); + } + public void testBuildError() { MessageResolver resolver = builder.error().defaultText("foo").build(); Message message = resolver.resolveMessage(messageSource, locale); diff --git a/spring-faces/src/main/java/org/springframework/faces/webflow/FlowFacesContext.java b/spring-faces/src/main/java/org/springframework/faces/webflow/FlowFacesContext.java index 254b0c22..633094dd 100644 --- a/spring-faces/src/main/java/org/springframework/faces/webflow/FlowFacesContext.java +++ b/spring-faces/src/main/java/org/springframework/faces/webflow/FlowFacesContext.java @@ -120,9 +120,12 @@ public class FlowFacesContext extends FacesContext { } else if (message.getSeverity() == FacesMessage.SEVERITY_WARN) { summaryResolver = new MessageBuilder().source(summarySource).defaultText(summaryText.toString()).warning() .build(); - } else { + } else if (message.getSeverity() == FacesMessage.SEVERITY_ERROR) { summaryResolver = new MessageBuilder().source(summarySource).defaultText(summaryText.toString()).error() .build(); + } else { + summaryResolver = new MessageBuilder().source(summarySource).defaultText(summaryText.toString()).fatal() + .build(); } context.getMessageContext().addMessage(summaryResolver); @@ -138,9 +141,12 @@ public class FlowFacesContext extends FacesContext { } else if (message.getSeverity() == FacesMessage.SEVERITY_WARN) { detailResolver = new MessageBuilder().source(detailSource).defaultText(detailText.toString()).warning() .build(); - } else { + } else if (message.getSeverity() == FacesMessage.SEVERITY_ERROR) { detailResolver = new MessageBuilder().source(detailSource).defaultText(detailText.toString()).error() .build(); + } else { + detailResolver = new MessageBuilder().source(detailSource).defaultText(detailText.toString()).fatal() + .build(); } context.getMessageContext().addMessage(detailResolver); @@ -168,7 +174,7 @@ public class FlowFacesContext extends FacesContext { if (message.getSeverity().getOrdinal() > max.getOrdinal()) { max = message.getSeverity(); } - if (max.getOrdinal() == FacesMessage.SEVERITY_ERROR.getOrdinal()) + if (max.getOrdinal() == FacesMessage.SEVERITY_FATAL.getOrdinal()) break; } return max; @@ -281,8 +287,10 @@ public class FlowFacesContext extends FacesContext { return new FacesMessage(FacesMessage.SEVERITY_INFO, summaryMessage.getText(), detailMessage.getText()); } else if (summaryMessage.getSeverity() == Severity.WARNING) { return new FacesMessage(FacesMessage.SEVERITY_WARN, summaryMessage.getText(), detailMessage.getText()); - } else { + } else if (summaryMessage.getSeverity() == Severity.ERROR) { return new FacesMessage(FacesMessage.SEVERITY_ERROR, summaryMessage.getText(), detailMessage.getText()); + } else { + return new FacesMessage(FacesMessage.SEVERITY_FATAL, summaryMessage.getText(), detailMessage.getText()); } } diff --git a/spring-faces/src/test/java/org/springframework/faces/webflow/FlowFacesContextTests.java b/spring-faces/src/test/java/org/springframework/faces/webflow/FlowFacesContextTests.java index 720d7cb0..4d9d0828 100644 --- a/spring-faces/src/test/java/org/springframework/faces/webflow/FlowFacesContextTests.java +++ b/spring-faces/src/test/java/org/springframework/faces/webflow/FlowFacesContextTests.java @@ -89,7 +89,7 @@ public class FlowFacesContextTests extends TestCase { assertNotNull(i.next()); iterationCount++; } - assertEquals("There should be 4 messages to iterate", 4, iterationCount); + assertEquals("There should be 5 messages to iterate", 5, iterationCount); } public final void testGetMessagesByClientId_ForComponent() { @@ -158,7 +158,7 @@ public class FlowFacesContextTests extends TestCase { EasyMock.expect(requestContext.getMessageContext()).andStubReturn(messageContext); EasyMock.replay(new Object[] { requestContext }); - assertEquals(FacesMessage.SEVERITY_ERROR, facesContext.getMaximumSeverity()); + assertEquals(FacesMessage.SEVERITY_FATAL, facesContext.getMaximumSeverity()); } private void setupMessageContext() { @@ -177,6 +177,8 @@ public class FlowFacesContextTests extends TestCase { .build()); prepopulatedMessageContext.addMessage(new MessageBuilder().source("null_detail").defaultText("baz").error() .build()); + prepopulatedMessageContext.addMessage(new MessageBuilder().defaultText("Subzero Wins - Fatality").fatal() + .build()); } private class TestGetMessagesContext implements MessageContext {