- From 5ff8e662f8f4846fb8cb2aeb4536bbafb4fa4246 Mon Sep 17 00:00:00 2001
- From: unknown <karlsnic@.fi.dom>
- Date: Fri, 4 Nov 2011 13:55:57 +0200
- Subject: [PATCH] messagepropagation
- ---
- .../jboss/seam/faces/status/MessagesAdapter.java | 130 ++++++++++++--------
- 1 files changed, 81 insertions(+), 49 deletions(-)
- diff --git a/impl/src/main/java/org/jboss/seam/faces/status/MessagesAdapter.java b/impl/src/main/java/org/jboss/seam/faces/status/MessagesAdapter.java
- index a000552..c26351e 100644
- --- a/impl/src/main/java/org/jboss/seam/faces/status/MessagesAdapter.java
- +++ b/impl/src/main/java/org/jboss/seam/faces/status/MessagesAdapter.java
- @@ -17,6 +17,7 @@
- package org.jboss.seam.faces.status;
- import java.io.Serializable;
- +import java.util.LinkedHashSet;
- import java.util.Set;
- import javax.enterprise.event.Observes;
- @@ -42,64 +43,95 @@ import org.jboss.solder.logging.Logger;
- * </p>
- * <p/>
- * <p>
- - * NOTE This class is using method parameter injection of Messages rather than field injection to work around GLASSFISH-15721.
- - * This shouldn't be necessary starting with Weld 1.1.1.
- + * NOTE This class is using method parameter injection of Messages rather than
- + * field injection to work around GLASSFISH-15721. This shouldn't be necessary
- + * starting with Weld 1.1.1.
- * </p>
- - *
- + *
- * @author <a href="mailto:lincolnbaxter@gmail.com">Lincoln Baxter, III</a>
- * @author <a href="http://community.jboss.org/people/dan.j.allen">Dan Allen</a>
- */
- -public class MessagesAdapter implements Serializable {
- - private static final long serialVersionUID = -2908193057765795662L;
- - private transient final Logger log = Logger.getLogger(MessagesAdapter.class);
- +public class MessagesAdapter implements Serializable
- +{
- + private static final long serialVersionUID = -2908193057765795662L;
- + private transient final Logger log = Logger.getLogger(MessagesAdapter.class);
- +
- + private static final String FLASH_MESSAGES_KEY = MessagesAdapter.class.getName() + ".FLASH_KEY";
- - private static final String FLASH_MESSAGES_KEY = MessagesAdapter.class.getName() + ".FLASH_KEY";
- + @Inject
- + RenderContext context;
- - @Inject
- - RenderContext context;
- + private abstract class MessageProcessor
- + {
- + public void process(Messages messages)
- + {
- + @SuppressWarnings("unchecked")
- + Set<Message> savedMessages = (Set<Message>) context.get(FLASH_MESSAGES_KEY);
- + Set<Message> combinedMessages = new LinkedHashSet<Message>();
- + if (savedMessages != null)
- + {
- + log.debug("Picked up " + savedMessages.size() + " previously stored messages");
- + combinedMessages.addAll(savedMessages);
- + }
- + combinedMessages.addAll(messages.getAll());
- + if (!combinedMessages.isEmpty())
- + {
- + work(combinedMessages);
- + messages.clear();
- + }
- + }
- - void flushBeforeNavigate(@Observes final PreNavigateEvent event, Messages messages) {
- - if (!messages.getAll().isEmpty()) {
- - log.debug("Saving status Messages to Flash Scope");
- - context.put(FLASH_MESSAGES_KEY, messages.getAll());
- - messages.clear();
- - }
- - }
- + protected abstract void work(Set<Message> combinedMessages);
- + }
- - @SuppressWarnings("unchecked")
- - void convert(@Observes @Before @RenderResponse final PhaseEvent event, Messages messages) {
- - Set<Message> savedMessages = (Set<Message>) context.get(FLASH_MESSAGES_KEY);
- - if (savedMessages != null) {
- - for (Message m : savedMessages) {
- - event.getFacesContext().addMessage(m.getTargets(),
- - new FacesMessage(getSeverity(m.getLevel()), m.getText(), null));
- - }
- - }
- + void flushBeforeNavigate(@Observes final PreNavigateEvent event, Messages messages)
- + {
- + new MessageProcessor()
- + {
- + @Override
- + protected void work(Set<Message> combinedMessages)
- + {
- + log.debug("Saving " + combinedMessages.size() + " status Messages to Flash Scope");
- + context.put(FLASH_MESSAGES_KEY, combinedMessages);
- + }
- + }.process(messages);
- + }
- - for (Message m : messages.getAll()) {
- - event.getFacesContext().addMessage(m.getTargets(), new FacesMessage(getSeverity(m.getLevel()), m.getText(), null));
- - }
- - messages.clear();
- - }
- + void convert(@Observes @Before @RenderResponse final PhaseEvent event, Messages messages)
- + {
- + new MessageProcessor()
- + {
- + @Override
- + protected void work(Set<Message> combinedMessages)
- + {
- + for (Message m : combinedMessages)
- + {
- + event.getFacesContext().addMessage(m.getTargets(), new FacesMessage(getSeverity(m.getLevel()), m.getText(), null));
- + }
- + }
- + }.process(messages);
- + }
- - private Severity getSeverity(final Level level) {
- - Severity result = FacesMessage.SEVERITY_INFO;
- - switch (level) {
- - case INFO:
- - break;
- - case WARN:
- - result = FacesMessage.SEVERITY_WARN;
- - break;
- - case ERROR:
- - result = FacesMessage.SEVERITY_ERROR;
- - break;
- - case FATAL:
- - result = FacesMessage.SEVERITY_FATAL;
- - break;
- - default:
- - break;
- - }
- - return result;
- - }
- + private Severity getSeverity(final Level level)
- + {
- + Severity result = FacesMessage.SEVERITY_INFO;
- + switch (level)
- + {
- + case INFO:
- + break;
- + case WARN:
- + result = FacesMessage.SEVERITY_WARN;
- + break;
- + case ERROR:
- + result = FacesMessage.SEVERITY_ERROR;
- + break;
- + case FATAL:
- + result = FacesMessage.SEVERITY_FATAL;
- + break;
- + default:
- + break;
- + }
- + return result;
- + }
- }
- --
- 1.7.0.2.msysgit.0