initial mvc message display

This commit is contained in:
Keith Donald
2008-04-01 18:50:56 +00:00
parent bc35b3d8a6
commit e9f070b3e3
10 changed files with 169 additions and 66 deletions

View File

@@ -26,6 +26,7 @@ import java.util.Map;
import org.springframework.context.MessageSource;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.core.style.ToStringCreator;
import org.springframework.util.Assert;
import org.springframework.util.CachingMapDecorator;
/**
@@ -47,12 +48,36 @@ class DefaultMessageContext implements StateManageableMessageContext {
this.messageSource = messageSource;
}
public Serializable createMessagesMemento() {
return new HashMap(objectMessages);
// implementing message context
public Message[] getAllMessages() {
List messages = new ArrayList();
Iterator it = objectMessages.keySet().iterator();
while (it.hasNext()) {
messages.addAll((List) objectMessages.get(it.next()));
}
return (Message[]) messages.toArray(new Message[messages.size()]);
}
public void restoreMessages(Serializable messagesMemento) {
this.objectMessages.putAll((Map) messagesMemento);
public Message[] getMessagesBySource(Object source) {
List messages = (List) objectMessages.get(source);
return (Message[]) messages.toArray(new Message[messages.size()]);
}
public Message[] getMessagesByCriteria(MessageCriteria criteria) {
Assert.notNull(criteria, "The message criteria is required");
List messages = new ArrayList();
Iterator it = objectMessages.values().iterator();
while (it.hasNext()) {
List sourceMessages = (List) it.next();
for (Iterator it2 = sourceMessages.iterator(); it2.hasNext();) {
Message message = (Message) it2.next();
if (criteria.test(message)) {
messages.add(message);
}
}
}
return (Message[]) messages.toArray(new Message[messages.size()]);
}
public void addMessage(MessageResolver messageResolver) {
@@ -62,24 +87,20 @@ class DefaultMessageContext implements StateManageableMessageContext {
messages.add(message);
}
public Message[] getMessages() {
List messages = new ArrayList();
Iterator i = objectMessages.keySet().iterator();
while (i.hasNext()) {
messages.addAll((List) objectMessages.get(i.next()));
}
return (Message[]) messages.toArray(new Message[messages.size()]);
}
public Message[] getMessages(Object source) {
List messages = (List) objectMessages.get(source);
return (Message[]) messages.toArray(new Message[messages.size()]);
}
public void clearMessages() {
objectMessages.clear();
}
// implementing state manageable message context
public Serializable createMessagesMemento() {
return new HashMap(objectMessages);
}
public void restoreMessages(Serializable messagesMemento) {
this.objectMessages.putAll((Map) messagesMemento);
}
public String toString() {
return new ToStringCreator(this).append("objectMessages", objectMessages).toString();
}

View File

@@ -9,14 +9,20 @@ public interface MessageContext {
* Get all messages in this context. The messages returned should be suitable for display as-is.
* @return the messages
*/
public Message[] getMessages();
public Message[] getAllMessages();
/**
* Get all messages in this context from the source provided.
* @param source the source that recorded the message
* Get all messages in this context for the source provided.
* @param source the source associated with messages, or null for global messages
* @return the source's messages
*/
public Message[] getMessages(Object source);
public Message[] getMessagesBySource(Object source);
/**
* Get all messages that meet the given result criteria.
* @param criteria the message criteria
*/
public Message[] getMessagesByCriteria(MessageCriteria criteria);
/**
* Add a new message to this context.

View File

@@ -20,7 +20,7 @@ public class DefaultMessageContextFactoryTests extends TestCase {
public void testCreateMessageContext() {
MessageContext context = factory.createMessageContext();
context.addMessage(new MessageBuilder().defaultText("Hello world!").build());
Message[] messages = context.getMessages();
Message[] messages = context.getAllMessages();
assertEquals(1, messages.length);
assertEquals("Hello world!", messages[0].getText());
assertEquals(Severity.INFO, messages[0].getSeverity());
@@ -30,7 +30,7 @@ public class DefaultMessageContextFactoryTests extends TestCase {
public void testResolveMessage() {
MessageContext context = factory.createMessageContext();
context.addMessage(new MessageBuilder().warning().source(this).code("message").build());
Message[] messages = context.getMessages(this);
Message[] messages = context.getMessagesBySource(this);
assertEquals(1, messages.length);
assertEquals("Hello world resolved!", messages[0].getText());
assertEquals(Severity.WARNING, messages[0].getSeverity());
@@ -40,7 +40,7 @@ public class DefaultMessageContextFactoryTests extends TestCase {
public void testResolveMessageDefaultText() {
MessageContext context = factory.createMessageContext();
context.addMessage(new MessageBuilder().error().code("bogus").defaultText("Hello world fallback!").build());
Message[] messages = context.getMessages(null);
Message[] messages = context.getAllMessages();
assertEquals(1, messages.length);
assertEquals("Hello world fallback!", messages[0].getText());
assertEquals(Severity.ERROR, messages[0].getSeverity());
@@ -52,7 +52,7 @@ public class DefaultMessageContextFactoryTests extends TestCase {
MessageContext context = factory.createMessageContext();
context.addMessage(new MessageBuilder().error().source(this).code("argmessage").arg("Keith").defaultText(
"Hello world fallback!").build());
Message[] messages = context.getMessages(this);
Message[] messages = context.getAllMessages();
assertEquals(1, messages.length);
assertEquals("Hello world Keith!", messages[0].getText());
assertEquals(Severity.ERROR, messages[0].getSeverity());
@@ -64,7 +64,7 @@ public class DefaultMessageContextFactoryTests extends TestCase {
MessageContext context = factory.createMessageContext();
context.addMessage(new MessageBuilder().error().source(this).codes(new String[] { "bogus", "argmessage" })
.args(new Object[] { "Keith" }).defaultText("Hello world fallback!").build());
Message[] messages = context.getMessages(this);
Message[] messages = context.getMessagesBySource(this);
assertEquals(1, messages.length);
assertEquals("Hello world Keith!", messages[0].getText());
assertEquals(Severity.ERROR, messages[0].getSeverity());
@@ -77,16 +77,16 @@ public class DefaultMessageContextFactoryTests extends TestCase {
context.addMessage(new MessageBuilder().defaultText("Info").build());
context.addMessage(new MessageBuilder().error().defaultText("Error").build());
context.addMessage(new MessageBuilder().warning().source(this).code("message").build());
assertEquals(2, context.getMessages(null).length);
assertEquals(1, context.getMessages(this).length);
assertEquals(2, context.getMessagesBySource(null).length);
assertEquals(1, context.getMessagesBySource(this).length);
assertTrue(context instanceof StateManageableMessageContext);
StateManageableMessageContext manageable = (StateManageableMessageContext) context;
Serializable messages = manageable.createMessagesMemento();
context = factory.createMessageContext();
assertEquals(0, context.getMessages().length);
assertEquals(0, context.getAllMessages().length);
manageable = (StateManageableMessageContext) context;
manageable.restoreMessages(messages);
assertEquals(2, context.getMessages(null).length);
assertEquals(1, context.getMessages(this).length);
assertEquals(2, context.getMessagesBySource(null).length);
assertEquals(1, context.getMessagesBySource(this).length);
}
}