diff options
-rw-r--r-- | plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/event/Notifier.java | 8 | ||||
-rw-r--r-- | plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/event/ThrowableEventAdapter.java | 83 |
2 files changed, 91 insertions, 0 deletions
diff --git a/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/event/Notifier.java b/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/event/Notifier.java index 06057d4597..531771ad13 100644 --- a/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/event/Notifier.java +++ b/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/event/Notifier.java @@ -13,6 +13,7 @@ package org.eclipse.net4j.util.event; import org.eclipse.net4j.internal.util.bundle.OM; import org.eclipse.net4j.util.CheckUtil; import org.eclipse.net4j.util.collection.ConcurrentArray; +import org.eclipse.net4j.util.om.trace.ContextTracer; import java.util.concurrent.ExecutorService; @@ -24,6 +25,8 @@ import java.util.concurrent.ExecutorService; */ public class Notifier implements INotifier { + private static final ContextTracer TRACER = new ContextTracer(OM.DEBUG, Notifier.class); + private ConcurrentArray<IListener> listeners = new ConcurrentArray<IListener>() { @Override @@ -117,6 +120,11 @@ public class Notifier implements INotifier */ protected void fireThrowable(Throwable throwable) { + if (TRACER.isEnabled()) + { + TRACER.trace(throwable); + } + IListener[] listeners = getListeners(); if (listeners.length != 0) { diff --git a/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/event/ThrowableEventAdapter.java b/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/event/ThrowableEventAdapter.java new file mode 100644 index 0000000000..9b67f4c0aa --- /dev/null +++ b/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/event/ThrowableEventAdapter.java @@ -0,0 +1,83 @@ +/* + * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Eike Stepper - initial API and implementation + */ +package org.eclipse.net4j.util.event; + +import java.io.PrintStream; + +/** + * A {@link IListener listener} that dispatches throwable {@link ThrowableEvent events} to methods that can be + * overridden by extenders. + * + * @author Eike Stepper + * @apiviz.exclude + * @since 3.3 + */ +public class ThrowableEventAdapter implements IListener +{ + public ThrowableEventAdapter() + { + } + + public final void notifyEvent(IEvent event) + { + if (event instanceof ThrowableEvent) + { + ThrowableEvent e = (ThrowableEvent)event; + notifyLifecycleEvent(e); + } + else + { + notifyOtherEvent(event); + } + } + + protected void notifyLifecycleEvent(ThrowableEvent event) + { + onThrowable(event.getSource(), event.getThrowable()); + } + + protected void notifyOtherEvent(IEvent event) + { + } + + protected void onThrowable(INotifier source, Throwable t) + { + } + + /** + * Prints the stack traces of throwable {@link ThrowableEvent events} to a {@link PrintStream}. + * + * @author Eike Stepper + * @apiviz.exclude + */ + public static class ToPrintStream extends ThrowableEventAdapter + { + public static final ToPrintStream CONSOLE = new ToPrintStream(System.out); + + private final PrintStream out; + + public ToPrintStream(PrintStream out) + { + this.out = out; + } + + public final PrintStream getOut() + { + return out; + } + + @Override + protected void onThrowable(INotifier source, Throwable t) + { + t.printStackTrace(out); + } + } +} |