Keith Donald
2008-04-20 05:11:46 +00:00
parent 655d1ef795
commit bd69bb76a7
2 changed files with 32 additions and 12 deletions

View File

@@ -19,6 +19,7 @@ import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
@@ -42,35 +43,35 @@ class DefaultMessageContext implements StateManageableMessageContext {
private MessageSource messageSource;
private Map objectMessages = new CachingMapDecorator() {
protected Object create(Object objectId) {
private Map sourceMessages = new CachingMapDecorator(new LinkedHashMap()) {
protected Object create(Object source) {
return new ArrayList();
}
};
public DefaultMessageContext(MessageSource messageSource) {
this.messageSource = messageSource;
init(messageSource);
}
// implementing message context
public Message[] getAllMessages() {
List messages = new ArrayList();
for (Iterator it = objectMessages.values().iterator(); it.hasNext();) {
for (Iterator it = sourceMessages.values().iterator(); it.hasNext();) {
messages.addAll((List) it.next());
}
return (Message[]) messages.toArray(new Message[messages.size()]);
}
public Message[] getMessagesBySource(Object source) {
List messages = (List) objectMessages.get(source);
List messages = (List) sourceMessages.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();
Iterator it = sourceMessages.values().iterator();
while (it.hasNext()) {
List sourceMessages = (List) it.next();
for (Iterator it2 = sourceMessages.iterator(); it2.hasNext();) {
@@ -84,7 +85,7 @@ class DefaultMessageContext implements StateManageableMessageContext {
}
public boolean hasErrorMessages() {
Iterator it = objectMessages.values().iterator();
Iterator it = sourceMessages.values().iterator();
while (it.hasNext()) {
List sourceMessages = (List) it.next();
for (Iterator it2 = sourceMessages.iterator(); it2.hasNext();) {
@@ -103,7 +104,7 @@ class DefaultMessageContext implements StateManageableMessageContext {
logger.debug("Resolving message using " + messageResolver);
}
Message message = messageResolver.resolveMessage(messageSource, currentLocale);
List messages = (List) objectMessages.get(message.getSource());
List messages = (List) sourceMessages.get(message.getSource());
if (logger.isDebugEnabled()) {
logger.debug("Adding resolved message " + message);
}
@@ -111,21 +112,29 @@ class DefaultMessageContext implements StateManageableMessageContext {
}
public void clearMessages() {
objectMessages.clear();
sourceMessages.clear();
}
// implementing state manageable message context
public Serializable createMessagesMemento() {
return new HashMap(objectMessages);
return new HashMap(sourceMessages);
}
public void restoreMessages(Serializable messagesMemento) {
this.objectMessages.putAll((Map) messagesMemento);
sourceMessages.putAll((Map) messagesMemento);
}
// internal helpers
private void init(MessageSource messageSource) {
this.messageSource = messageSource;
// create the 'null' source message list eagerly to ensure global messages are indexed first
this.sourceMessages.get(null);
}
public String toString() {
return new ToStringCreator(this).append("objectMessages", objectMessages).toString();
return new ToStringCreator(this).append("sourceMessages", sourceMessages).toString();
}
}