diff options
author | Uwe Stieber | 2011-12-18 09:00:56 +0000 |
---|---|---|
committer | Uwe Stieber | 2011-12-18 09:00:56 +0000 |
commit | 1bee2b5b8aa49b326e80d04884d7d188ea156998 (patch) | |
tree | 6ff37756a08bb70e0636c2ce8d703856eebe3016 /target_explorer/plugins/org.eclipse.tcf.te.tcf.log.core | |
parent | 5b5dcf236034b834b3772f3b3bc9145a54c8d2b4 (diff) | |
download | org.eclipse.tcf-1bee2b5b8aa49b326e80d04884d7d188ea156998.tar.gz org.eclipse.tcf-1bee2b5b8aa49b326e80d04884d7d188ea156998.tar.xz org.eclipse.tcf-1bee2b5b8aa49b326e80d04884d7d188ea156998.zip |
Target Explorer: Add communication monitor console
Diffstat (limited to 'target_explorer/plugins/org.eclipse.tcf.te.tcf.log.core')
5 files changed, 121 insertions, 4 deletions
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.log.core/META-INF/MANIFEST.MF b/target_explorer/plugins/org.eclipse.tcf.te.tcf.log.core/META-INF/MANIFEST.MF index 842b9de60..21d55a344 100644 --- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.log.core/META-INF/MANIFEST.MF +++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.log.core/META-INF/MANIFEST.MF @@ -13,6 +13,7 @@ Bundle-RequiredExecutionEnvironment: JavaSE-1.6 Bundle-ActivationPolicy: lazy Bundle-Localization: plugin Export-Package: org.eclipse.tcf.te.tcf.log.core.activator;x-internal:=true, + org.eclipse.tcf.te.tcf.log.core.events, org.eclipse.tcf.te.tcf.log.core.interfaces, org.eclipse.tcf.te.tcf.log.core.internal;x-internal:=true, org.eclipse.tcf.te.tcf.log.core.internal.listener;x-internal:=true, diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.log.core/src/org/eclipse/tcf/te/tcf/log/core/events/MonitorEvent.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.log.core/src/org/eclipse/tcf/te/tcf/log/core/events/MonitorEvent.java new file mode 100644 index 000000000..059f76cd1 --- /dev/null +++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.log.core/src/org/eclipse/tcf/te/tcf/log/core/events/MonitorEvent.java @@ -0,0 +1,82 @@ +/*******************************************************************************
+ * Copyright (c) 2011 Wind River Systems, Inc. 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:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tcf.te.tcf.log.core.events;
+
+import java.util.EventObject;
+
+/**
+ * Monitor event implementation.
+ */
+public class MonitorEvent extends EventObject {
+ private static final long serialVersionUID = 2503050052196826683L;
+
+ /**
+ * Monitor event types.
+ */
+ public static enum Type { OPEN, ACTIVITY, CLOSE }
+
+ /**
+ * Immutable monitor event message.
+ */
+ public static final class Message {
+ /** The message type */
+ public final char type;
+ /** The message text */
+ public final String text;
+
+ /**
+ * Constructor.
+ */
+ public Message(char type, String text) {
+ this.type = type;
+ this.text = text;
+ }
+ }
+
+
+ private Type type;
+ private Message message;
+
+ /**
+ * Constructor.
+ *
+ * @param source The source object. Must not be <code>null</code>.
+ * @param type The event type. Must not be <code>null</code>.
+ * @param message The event message or <code>null</code>.
+ *
+ * @exception IllegalArgumentException if type == null.
+ */
+ public MonitorEvent(Object source, Type type, Message message) {
+ super(source);
+
+ if (type == null) throw new IllegalArgumentException("null type"); //$NON-NLS-1$
+ this.type = type;
+
+ this.message = message;
+ }
+
+ /**
+ * Returns the event type.
+ *
+ * @return The event type.
+ */
+ public Type getType() {
+ return type;
+ }
+
+ /**
+ * Returns the event message.
+ *
+ * @return The event message or <code>null</code>.
+ */
+ public Message getMessage() {
+ return message;
+ }
+}
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.log.core/src/org/eclipse/tcf/te/tcf/log/core/internal/LogManager.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.log.core/src/org/eclipse/tcf/te/tcf/log/core/internal/LogManager.java index 9c475542e..f394a0b41 100644 --- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.log.core/src/org/eclipse/tcf/te/tcf/log/core/internal/LogManager.java +++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.log.core/src/org/eclipse/tcf/te/tcf/log/core/internal/LogManager.java @@ -23,10 +23,12 @@ import org.eclipse.osgi.util.NLS; import org.eclipse.tcf.protocol.IChannel;
import org.eclipse.tcf.protocol.IPeer;
import org.eclipse.tcf.protocol.Protocol;
+import org.eclipse.tcf.te.runtime.events.EventManager;
import org.eclipse.tcf.te.tcf.core.Tcf;
import org.eclipse.tcf.te.tcf.core.interfaces.listeners.IChannelStateChangeListener;
import org.eclipse.tcf.te.tcf.core.interfaces.listeners.IProtocolStateChangeListener;
import org.eclipse.tcf.te.tcf.log.core.activator.CoreBundleActivator;
+import org.eclipse.tcf.te.tcf.log.core.events.MonitorEvent;
import org.eclipse.tcf.te.tcf.log.core.interfaces.IPreferenceKeys;
import org.eclipse.tcf.te.tcf.log.core.internal.listener.ChannelStateChangeListener;
import org.eclipse.tcf.te.tcf.log.core.internal.listener.ChannelTraceListener;
@@ -137,7 +139,7 @@ public final class LogManager implements IProtocolStateChangeListener { * <b>Note:</b> This method is supposed to be called from {@link Startup} only!
*/
/* default */ final void initListeners() {
- Assert.isTrue(Protocol.isDispatchThread());
+ Assert.isTrue(Protocol.isDispatchThread(), "Illegal Thread Access"); //$NON-NLS-1$
// If the channel state change listener instance has been created
// already, there is nothing left to do here
@@ -175,7 +177,7 @@ public final class LogManager implements IProtocolStateChangeListener { */
public FileWriter getWriter(IChannel channel) {
Assert.isNotNull(channel);
- Assert.isTrue(Protocol.isDispatchThread());
+ Assert.isTrue(Protocol.isDispatchThread(), "Illegal Thread Access"); //$NON-NLS-1$
// Before looking up the writer, check the file limits
checkLimits(channel);
@@ -207,7 +209,7 @@ public final class LogManager implements IProtocolStateChangeListener { */
public void closeWriter(IChannel channel, String message) {
Assert.isNotNull(channel);
- Assert.isTrue(Protocol.isDispatchThread());
+ Assert.isTrue(Protocol.isDispatchThread(), "Illegal Thread Access"); //$NON-NLS-1$
// Remove the writer from the map
String logName = getLogName(channel);
@@ -240,7 +242,7 @@ public final class LogManager implements IProtocolStateChangeListener { */
public String getLogName(IChannel channel) {
Assert.isNotNull(channel);
- Assert.isTrue(Protocol.isDispatchThread());
+ Assert.isTrue(Protocol.isDispatchThread(), "Illegal Thread Access"); //$NON-NLS-1$
String logName = null;
@@ -381,4 +383,31 @@ public final class LogManager implements IProtocolStateChangeListener { }
}
}
+
+ /**
+ * Sends an event to the monitor signaling the given message and type.
+ *
+ * @param channel The channel. Must not be <code>null</code>.
+ * @param type The message type. Must not be <code>null</code>.
+ * @param message The message. Must not be <code>null</code>.
+ */
+ public void monitor(IChannel channel, MonitorEvent.Type type, MonitorEvent.Message message) {
+ Assert.isNotNull(channel);
+ Assert.isNotNull(type);
+ Assert.isNotNull(message);
+ Assert.isTrue(Protocol.isDispatchThread(), "Illegal Thread Access"); //$NON-NLS-1$
+
+ // If monitoring is not enabled, return immediately
+ if (!CoreBundleActivator.getScopedPreferences().getBoolean(IPreferenceKeys.PREF_MONITOR_ENABLED)) {
+ return;
+ }
+
+ // The source of a monitor event is the peer.
+ IPeer peer = channel.getRemotePeer();
+ if (peer != null) {
+ MonitorEvent event = new MonitorEvent(peer, type, message);
+ EventManager.getInstance().fireEvent(event);
+ }
+ }
+
}
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.log.core/src/org/eclipse/tcf/te/tcf/log/core/internal/listener/ChannelTraceListener.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.log.core/src/org/eclipse/tcf/te/tcf/log/core/internal/listener/ChannelTraceListener.java index 7ff7d24f1..be031d30b 100644 --- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.log.core/src/org/eclipse/tcf/te/tcf/log/core/internal/listener/ChannelTraceListener.java +++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.log.core/src/org/eclipse/tcf/te/tcf/log/core/internal/listener/ChannelTraceListener.java @@ -21,6 +21,7 @@ import org.eclipse.tcf.core.AbstractChannel.TraceListener; import org.eclipse.tcf.protocol.IChannel; import org.eclipse.tcf.te.tcf.core.utils.JSONUtils; import org.eclipse.tcf.te.tcf.log.core.activator.CoreBundleActivator; +import org.eclipse.tcf.te.tcf.log.core.events.MonitorEvent; import org.eclipse.tcf.te.tcf.log.core.interfaces.IPreferenceKeys; import org.eclipse.tcf.te.tcf.log.core.interfaces.ITracing; import org.eclipse.tcf.te.tcf.log.core.internal.LogManager; @@ -83,6 +84,7 @@ public class ChannelTraceListener implements TraceListener { }); LogManager.getInstance().closeWriter(channel, message); + LogManager.getInstance().monitor(channel, MonitorEvent.Type.CLOSE, new MonitorEvent.Message('F', message)); } /* (non-Javadoc) @@ -141,6 +143,7 @@ public class ChannelTraceListener implements TraceListener { /* ignored on purpose */ } } + LogManager.getInstance().monitor(channel, MonitorEvent.Type.ACTIVITY, new MonitorEvent.Message(type, message)); } /** diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.log.core/src/org/eclipse/tcf/te/tcf/log/core/internal/listener/ChannelTraceListenerManager.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.log.core/src/org/eclipse/tcf/te/tcf/log/core/internal/listener/ChannelTraceListenerManager.java index 28607bc1b..f3e4b62ad 100644 --- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.log.core/src/org/eclipse/tcf/te/tcf/log/core/internal/listener/ChannelTraceListenerManager.java +++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.log.core/src/org/eclipse/tcf/te/tcf/log/core/internal/listener/ChannelTraceListenerManager.java @@ -21,6 +21,7 @@ import org.eclipse.tcf.core.AbstractChannel; import org.eclipse.tcf.protocol.IChannel; import org.eclipse.tcf.protocol.Protocol; import org.eclipse.tcf.te.tcf.log.core.activator.CoreBundleActivator; +import org.eclipse.tcf.te.tcf.log.core.events.MonitorEvent; import org.eclipse.tcf.te.tcf.log.core.interfaces.IPreferenceKeys; import org.eclipse.tcf.te.tcf.log.core.interfaces.ITracing; import org.eclipse.tcf.te.tcf.log.core.internal.LogManager; @@ -107,6 +108,7 @@ public class ChannelTraceListenerManager { /* ignored on purpose */ } } + LogManager.getInstance().monitor(channel, MonitorEvent.Type.OPEN, new MonitorEvent.Message('F', message)); } /** |