summaryrefslogtreecommitdiffstats
path: root/server/src/com/vaadin/event
diff options
context:
space:
mode:
authorJonatan Kronqvist <jonatan@vaadin.com>2014-02-06 17:30:40 +0200
committerJonatan Kronqvist <jonatan@vaadin.com>2014-02-06 17:30:41 +0200
commitdc7c1763bb111da6b6964379fbc0ccbe1ab5c8d0 (patch)
treeb4545bfe09c81edf5f3dc77a7fbdbdb96bebb719 /server/src/com/vaadin/event
parent927c497e78e8907c3d62ed4bacbd4b4bcfe1a580 (diff)
parent1ac492e46b70de9314083492bd8e136e1c8398e3 (diff)
downloadvaadin-framework-dc7c1763bb111da6b6964379fbc0ccbe1ab5c8d0.tar.gz
vaadin-framework-dc7c1763bb111da6b6964379fbc0ccbe1ab5c8d0.zip
Merge changes from origin/7.1
5b2ddc1 Make test work reliably by activating @Push 10ca7ed Catch and log exceptions in session lifecycle listeners (#12915) 8abf434 Move working sass tests from sasslangbroken to sasslang. 1ac492e Move a sass test that no longer fails. Change-Id: I960e80fd2120c20bc7b042eccbadb1e748ec0f00
Diffstat (limited to 'server/src/com/vaadin/event')
-rw-r--r--server/src/com/vaadin/event/EventRouter.java39
1 files changed, 38 insertions, 1 deletions
diff --git a/server/src/com/vaadin/event/EventRouter.java b/server/src/com/vaadin/event/EventRouter.java
index 73bfa33881..fdc543143b 100644
--- a/server/src/com/vaadin/event/EventRouter.java
+++ b/server/src/com/vaadin/event/EventRouter.java
@@ -23,6 +23,10 @@ import java.util.EventObject;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.List;
+import java.util.logging.Logger;
+
+import com.vaadin.server.ErrorEvent;
+import com.vaadin.server.ErrorHandler;
/**
* <code>EventRouter</code> class implementing the inheritable event listening
@@ -154,6 +158,25 @@ public class EventRouter implements MethodEventSource {
* the Event to be sent to all listeners.
*/
public void fireEvent(EventObject event) {
+ fireEvent(event, null);
+ }
+
+ /**
+ * Sends an event to all registered listeners. The listeners will decide if
+ * the activation method should be called or not.
+ * <p>
+ * If an error handler is set, the processing of other listeners will
+ * continue after the error handler method call unless the error handler
+ * itself throws an exception.
+ *
+ * @param event
+ * the Event to be sent to all listeners.
+ * @param errorHandler
+ * error handler to use to handle any exceptions thrown by
+ * listeners or null to let the exception propagate to the
+ * caller, preventing further listener calls
+ */
+ public void fireEvent(EventObject event, ErrorHandler errorHandler) {
// It is not necessary to send any events if there are no listeners
if (listenerList != null) {
@@ -164,7 +187,16 @@ public class EventRouter implements MethodEventSource {
// will filter out unwanted events.
final Object[] listeners = listenerList.toArray();
for (int i = 0; i < listeners.length; i++) {
- ((ListenerMethod) listeners[i]).receiveEvent(event);
+ ListenerMethod listenerMethod = (ListenerMethod) listeners[i];
+ if (null != errorHandler) {
+ try {
+ listenerMethod.receiveEvent(event);
+ } catch (Exception e) {
+ errorHandler.error(new ErrorEvent(e));
+ }
+ } else {
+ listenerMethod.receiveEvent(event);
+ }
}
}
@@ -208,4 +240,9 @@ public class EventRouter implements MethodEventSource {
}
return listeners;
}
+
+ private Logger getLogger() {
+ return Logger.getLogger(EventRouter.class.getName());
+ }
+
}