Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorUwe Stieber2011-12-18 09:00:56 +0000
committerUwe Stieber2011-12-18 09:00:56 +0000
commit1bee2b5b8aa49b326e80d04884d7d188ea156998 (patch)
tree6ff37756a08bb70e0636c2ce8d703856eebe3016 /target_explorer/plugins/org.eclipse.tcf.te.tcf.log.core
parent5b5dcf236034b834b3772f3b3bc9145a54c8d2b4 (diff)
downloadorg.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')
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.tcf.log.core/META-INF/MANIFEST.MF1
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.tcf.log.core/src/org/eclipse/tcf/te/tcf/log/core/events/MonitorEvent.java82
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.tcf.log.core/src/org/eclipse/tcf/te/tcf/log/core/internal/LogManager.java37
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.tcf.log.core/src/org/eclipse/tcf/te/tcf/log/core/internal/listener/ChannelTraceListener.java3
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.tcf.log.core/src/org/eclipse/tcf/te/tcf/log/core/internal/listener/ChannelTraceListenerManager.java2
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));
}
/**

Back to the top