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 | |
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')
21 files changed, 422 insertions, 20 deletions
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.core.scripting/src/org/eclipse/tcf/te/tcf/core/scripting/events/ScriptEvent.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.core.scripting/src/org/eclipse/tcf/te/tcf/core/scripting/events/ScriptEvent.java index d4145a9bb..9c0b13678 100644 --- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.core.scripting/src/org/eclipse/tcf/te/tcf/core/scripting/events/ScriptEvent.java +++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.core.scripting/src/org/eclipse/tcf/te/tcf/core/scripting/events/ScriptEvent.java @@ -52,7 +52,7 @@ public class ScriptEvent extends EventObject { * @param type The script event type. Must not be <code>null</code>.
* @param message The script event message or <code>null</code>.
*
- * @exception IllegalArgumentException if eventId == null.
+ * @exception IllegalArgumentException if type == null.
*/
public ScriptEvent(Object source, Type type, Message message) {
super(source);
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.core.scripting/src/org/eclipse/tcf/te/tcf/core/scripting/launcher/ScriptLauncher.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.core.scripting/src/org/eclipse/tcf/te/tcf/core/scripting/launcher/ScriptLauncher.java index 52a17287c..ec65b0510 100644 --- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.core.scripting/src/org/eclipse/tcf/te/tcf/core/scripting/launcher/ScriptLauncher.java +++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.core.scripting/src/org/eclipse/tcf/te/tcf/core/scripting/launcher/ScriptLauncher.java @@ -156,6 +156,7 @@ public class ScriptLauncher extends PlatformObject implements IScriptLauncher { @Override
public void onMessageSent(char type, String token, String service, String name, byte[] data) {
+ if (isFiltered(type, name)) return;
String message = formatMessage(type, token, service, name, data, false);
ScriptEvent event = new ScriptEvent(ScriptLauncher.this, ScriptEvent.Type.OUTPUT, new ScriptEvent.Message(type, message));
EventManager.getInstance().fireEvent(event);
@@ -163,6 +164,7 @@ public class ScriptLauncher extends PlatformObject implements IScriptLauncher { @Override
public void onMessageReceived(char type, String token, String service, String name, byte[] data) {
+ if (isFiltered(type, name)) return;
String message = formatMessage(type, token, service, name, data, true);
ScriptEvent event = new ScriptEvent(ScriptLauncher.this, ScriptEvent.Type.OUTPUT, new ScriptEvent.Message(type, message));
EventManager.getInstance().fireEvent(event);
@@ -173,6 +175,26 @@ public class ScriptLauncher extends PlatformObject implements IScriptLauncher { }
/**
+ * Checks if a given message is filtered. Filtered messages are not send to
+ * the script output console.
+ *
+ * @param type The message type.
+ * @param name The message name.
+ *
+ * @return <code>True</code> if the message is filtered, <code>false</code> otherwise.
+ */
+ private boolean isFiltered(char type, String name) {
+ boolean filtered = false;
+
+ // Filter out the heart beat and framework messages
+ if (type == 'F' || (name != null && name.toLowerCase().contains("heartbeat"))) { //$NON-NLS-1$
+ filtered = true;
+ }
+
+ return filtered;
+ }
+
+ /**
* Format the trace message.
*/
protected String formatMessage(char type, String token, String service, String name, byte[] data, boolean received) {
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)); } /** diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui.console/src/org/eclipse/tcf/te/tcf/ui/console/AbstractConsole.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui.console/src/org/eclipse/tcf/te/tcf/ui/console/AbstractConsole.java index 0e04a45a9..38716bde9 100644 --- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui.console/src/org/eclipse/tcf/te/tcf/ui/console/AbstractConsole.java +++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui.console/src/org/eclipse/tcf/te/tcf/ui/console/AbstractConsole.java @@ -421,22 +421,17 @@ public class AbstractConsole extends MessageConsole implements IConsoleListener, break; case 'E': stream = streams.get(IPreferenceKeys.PREF_CONSOLE_COLOR_EVENT); - if (stream != null) { - // Heart beat message are not shown - if (!message.toLowerCase().contains("heartbeat")) stream.println(message); //$NON-NLS-1$ - } + if (stream != null) stream.println(message); break; case 'P': stream = streams.get(IPreferenceKeys.PREF_CONSOLE_COLOR_PROGRESS); if (stream != null) stream.println(message); break; case 'N': + case 'F': stream = streams.get(IPreferenceKeys.PREF_CONSOLE_COLOR_TEXT); if (stream != null) stream.println(message); break; - case 'F': - // Framework messages are not shown - break; default: stream = streams.get(IPreferenceKeys.PREF_CONSOLE_COLOR_ERROR); if (stream != null) stream.println(message); diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui.views/META-INF/MANIFEST.MF b/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui.views/META-INF/MANIFEST.MF index e18a49c70..13645f47c 100644 --- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui.views/META-INF/MANIFEST.MF +++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui.views/META-INF/MANIFEST.MF @@ -15,6 +15,7 @@ Require-Bundle: org.eclipse.core.runtime;bundle-version="3.7.0", org.eclipse.tcf.te.ui;bundle-version="1.0.0", org.eclipse.tcf.te.ui.swt;bundle-version="1.0.0", org.eclipse.tcf.te.tcf.core.scripting;bundle-version="1.0.0", + org.eclipse.tcf.te.tcf.log.core;bundle-version="1.0.0", org.eclipse.tcf.te.tcf.ui;bundle-version="1.0.0", org.eclipse.tcf.te.tcf.ui.console;bundle-version="1.0.0" Bundle-RequiredExecutionEnvironment: JavaSE-1.6 diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui.views/icons/eview16/monitor_console.gif b/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui.views/icons/eview16/monitor_console.gif Binary files differnew file mode 100644 index 000000000..1fc2e86b7 --- /dev/null +++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui.views/icons/eview16/monitor_console.gif diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui.views/plugin.xml b/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui.views/plugin.xml index 15276aa92..d929e39c9 100644 --- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui.views/plugin.xml +++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui.views/plugin.xml @@ -55,6 +55,16 @@ </consolePageParticipant>
</extension>
+ <extension point="org.eclipse.ui.console.consolePageParticipants">
+ <consolePageParticipant
+ class="org.eclipse.tcf.te.tcf.ui.console.PageParticipant"
+ id="org.eclipse.tcf.te.tcf.ui.console.PageParticipant">
+ <enablement>
+ <instanceof value="org.eclipse.tcf.te.tcf.ui.views.monitor.console.Console"/>
+ </enablement>
+ </consolePageParticipant>
+ </extension>
+
<!-- Script Pad menu contributions -->
<extension point="org.eclipse.ui.viewActions">
<viewContribution
@@ -178,4 +188,15 @@ </eventListener>
</extension>
+<!-- Monitor console event listener contributions -->
+ <extension point="org.eclipse.tcf.te.runtime.eventListeners">
+ <eventListener
+ class="org.eclipse.tcf.te.tcf.ui.views.monitor.events.EventListener"
+ forcePluginActivation="true">
+ <eventType
+ class="org.eclipse.tcf.te.tcf.log.core.events.MonitorEvent">
+ </eventType>
+ </eventListener>
+ </extension>
+
</plugin>
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui.views/src/org/eclipse/tcf/te/tcf/ui/views/activator/UIPlugin.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui.views/src/org/eclipse/tcf/te/tcf/ui/views/activator/UIPlugin.java index 30e7bada8..fd17b6e04 100644 --- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui.views/src/org/eclipse/tcf/te/tcf/ui/views/activator/UIPlugin.java +++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui.views/src/org/eclipse/tcf/te/tcf/ui/views/activator/UIPlugin.java @@ -76,6 +76,8 @@ public class UIPlugin extends AbstractUIPlugin { protected void initializeImageRegistry(ImageRegistry registry) {
URL url = UIPlugin.getDefault().getBundle().getEntry(ImageConsts.IMAGE_DIR_ROOT + ImageConsts.IMAGE_DIR_OBJ + "scriptpad_console.gif"); //$NON-NLS-1$
registry.put(ImageConsts.SCRIPT_PAD_CONSOLE, ImageDescriptor.createFromURL(url));
+ url = UIPlugin.getDefault().getBundle().getEntry(ImageConsts.IMAGE_DIR_ROOT + ImageConsts.IMAGE_DIR_OBJ + "monitor_console.gif"); //$NON-NLS-1$
+ registry.put(ImageConsts.MONITOR_CONSOLE, ImageDescriptor.createFromURL(url));
}
/**
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui.views/src/org/eclipse/tcf/te/tcf/ui/views/help/IContextHelpIds.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui.views/src/org/eclipse/tcf/te/tcf/ui/views/help/IContextHelpIds.java index b524c1919..aff7669b2 100644 --- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui.views/src/org/eclipse/tcf/te/tcf/ui/views/help/IContextHelpIds.java +++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui.views/src/org/eclipse/tcf/te/tcf/ui/views/help/IContextHelpIds.java @@ -22,12 +22,17 @@ public interface IContextHelpIds { public final static String PREFIX = UIPlugin.getUniqueIdentifier() + "."; //$NON-NLS-1$ /** - * Script Pad console view. + * Script Pad console. */ - public final static String SCRIPT_PAD_CONSOLE_VIEW = PREFIX + "ScriptPadConsoleView"; //$NON-NLS-1$ + public final static String SCRIPT_PAD_CONSOLE = PREFIX + "ScriptPadConsole"; //$NON-NLS-1$ /** * Script Pad error: open failed */ public final static String SCRIPT_PAD_ERROR_OPEN_FILE = PREFIX + "ScriptPadErrorOpenFile"; //$NON-NLS-1$ + + /** + * Communication monitor console. + */ + public final static String MONITOR_CONSOLE = PREFIX + "MonitorConsole"; //$NON-NLS-1$ } diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui.views/src/org/eclipse/tcf/te/tcf/ui/views/internal/ImageConsts.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui.views/src/org/eclipse/tcf/te/tcf/ui/views/internal/ImageConsts.java index 982029b34..9810ae9ea 100644 --- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui.views/src/org/eclipse/tcf/te/tcf/ui/views/internal/ImageConsts.java +++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui.views/src/org/eclipse/tcf/te/tcf/ui/views/internal/ImageConsts.java @@ -61,7 +61,12 @@ public interface ImageConsts { // ***** The image constants ***** /** - * The key to access the Script Pad console view image. + * The key to access the Script Pad console image. */ public static final String SCRIPT_PAD_CONSOLE = "ScriptPadConsole"; //$NON-NLS-1$ + + /** + * The key to access the Monitor console image. + */ + public static final String MONITOR_CONSOLE = "MonitorConsole"; //$NON-NLS-1$ } diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui.views/src/org/eclipse/tcf/te/tcf/ui/views/monitor/console/Console.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui.views/src/org/eclipse/tcf/te/tcf/ui/views/monitor/console/Console.java new file mode 100644 index 000000000..3201e5659 --- /dev/null +++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui.views/src/org/eclipse/tcf/te/tcf/ui/views/monitor/console/Console.java @@ -0,0 +1,63 @@ +/*******************************************************************************
+ * 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.ui.views.monitor.console;
+
+import java.util.concurrent.atomic.AtomicReference;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.tcf.protocol.IPeer;
+import org.eclipse.tcf.protocol.Protocol;
+import org.eclipse.tcf.te.tcf.ui.console.AbstractConsole;
+import org.eclipse.tcf.te.tcf.ui.views.activator.UIPlugin;
+import org.eclipse.tcf.te.tcf.ui.views.help.IContextHelpIds;
+import org.eclipse.tcf.te.tcf.ui.views.internal.ImageConsts;
+import org.eclipse.tcf.te.tcf.ui.views.nls.Messages;
+
+/**
+ * Communication monitor console implementation.
+ */
+public class Console extends AbstractConsole {
+
+ /**
+ * Constructor.
+ *
+ * @param peer The peer. Must not be <code>null</code>.
+ */
+ public Console(final IPeer peer) {
+ super(Messages.Monitor_Console_name, UIPlugin.getImageDescriptor(ImageConsts.MONITOR_CONSOLE));
+
+ Assert.isNotNull(peer);
+
+ // Determine name and id of the peer
+ final AtomicReference<String> name = new AtomicReference<String>();
+ final AtomicReference<String> id = new AtomicReference<String>();
+
+ Runnable runnable = new Runnable() {
+ @Override
+ public void run() {
+ name.set(peer.getName());
+ id.set(peer.getID());
+ }
+ };
+ if (Protocol.isDispatchThread()) runnable.run();
+ else Protocol.invokeAndWait(runnable);
+
+ setName(NLS.bind(Messages.Monitor_Console_name_with_peer, name.get(), id.get()));
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.console.AbstractConsole#getHelpContextId()
+ */
+ @Override
+ public String getHelpContextId() {
+ return IContextHelpIds.MONITOR_CONSOLE;
+ }
+}
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui.views/src/org/eclipse/tcf/te/tcf/ui/views/monitor/console/Factory.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui.views/src/org/eclipse/tcf/te/tcf/ui/views/monitor/console/Factory.java new file mode 100644 index 000000000..ce74e91ac --- /dev/null +++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui.views/src/org/eclipse/tcf/te/tcf/ui/views/monitor/console/Factory.java @@ -0,0 +1,103 @@ +/******************************************************************************* + * 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.ui.views.monitor.console; + +import java.util.HashMap; +import java.util.Map; + +import org.eclipse.core.runtime.Assert; +import org.eclipse.tcf.protocol.IPeer; +import org.eclipse.ui.console.ConsolePlugin; +import org.eclipse.ui.console.IConsole; +import org.eclipse.ui.console.IConsoleManager; + +/** + * Communication monitor console factory implementation. + */ +public class Factory { + // Map of active consoles per peer + private static final Map<IPeer, Console> CONSOLES = new HashMap<IPeer, Console>(); + + /** + * Show the console. Called by {@link Console}. + * + * @param peer The peer. Must not be <code>null</code>. + * @param createNew If <code>true</code>, a new console instance will be created and returned. + * + * @return The console instance or <code>null</code>. + */ + public static Console showConsole(IPeer peer, boolean createNew) { + Assert.isNotNull(peer); + // Get the console for the channel + Console console = getConsole(peer, createNew); + if (console != null) { + // Get the console manager + IConsoleManager manager = ConsolePlugin.getDefault().getConsoleManager(); + // Add the console to the manager if not yet done + if (!isConsoleAlreadyAdded(console)) manager.addConsoles(new IConsole[] {console}); + // Show the console view with the TCF communication monitor console + manager.showConsoleView(console); + } + + return console; + } + + /** + * Checks if the given console is already added to the console manager. + * + * @param console The console. Must not be <code>null</code>. + * @return <code>True</code> if the console exist, <code>false</code> otherwise. + */ + private static boolean isConsoleAlreadyAdded(IConsole console) { + Assert.isNotNull(console); + // Assume the console to be not yet added + boolean alreadyAdded = false; + // Check all consoles if it is the same instance as the passed in one + for (IConsole candidate : ConsolePlugin.getDefault().getConsoleManager().getConsoles()) { + if (candidate == console) { + alreadyAdded = true; + break; + } + } + return alreadyAdded; + } + + /** + * Returns the communication monitor console instance associated with the given peer. + * + * @param peer The peer. Must not be <code>null</code>. + * @param createNew If <code>true</code>, a new console instance will be created and returned. + * + * @return The console instance or <code>null</code>. + */ + public static Console getConsole(IPeer peer, boolean createNew) { + Assert.isNotNull(peer); + // Lookup the peer specific console + Console console = CONSOLES.get(peer); + if (console == null && createNew) { + // Create a new console instance + console = new Console(peer); + // And store the new console in the map + CONSOLES.put(peer, console); + } + + return console; + } + + /** + * Shutdown all known consoles. + */ + public static void shutdown() { + // Shutdown all channel specific consoles + for (Console console : CONSOLES.values()) console.shutdown(); + // Clear the map + CONSOLES.clear(); + } +} diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui.views/src/org/eclipse/tcf/te/tcf/ui/views/monitor/events/EventListener.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui.views/src/org/eclipse/tcf/te/tcf/ui/views/monitor/events/EventListener.java new file mode 100644 index 000000000..e483c7a68 --- /dev/null +++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui.views/src/org/eclipse/tcf/te/tcf/ui/views/monitor/events/EventListener.java @@ -0,0 +1,61 @@ +/*******************************************************************************
+ * 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.ui.views.monitor.events;
+
+import java.util.EventObject;
+
+import org.eclipse.tcf.protocol.IPeer;
+import org.eclipse.tcf.te.tcf.log.core.events.MonitorEvent;
+import org.eclipse.tcf.te.tcf.ui.views.monitor.console.Console;
+import org.eclipse.tcf.te.tcf.ui.views.monitor.console.Factory;
+import org.eclipse.tcf.te.ui.events.AbstractEventListener;
+
+/**
+ * Communication monitor console event listener
+ */
+public class EventListener extends AbstractEventListener {
+
+ /* (non-Javadoc)
+ * @see org.eclipse.tcf.te.runtime.interfaces.events.IEventListener#eventFired(java.util.EventObject)
+ */
+ @Override
+ public void eventFired(EventObject event) {
+ if (event instanceof MonitorEvent) {
+ MonitorEvent monitorEvent = (MonitorEvent)event;
+
+ // Get the event type and message
+ MonitorEvent.Type type = monitorEvent.getType();
+ MonitorEvent.Message message = monitorEvent.getMessage();
+
+ switch (type) {
+ case OPEN:
+ break;
+ case CLOSE:
+ // Channel close messages are logged only if there is an error
+ if (message != null && message.text != null && !message.text.contains("(error=null)")) { //$NON-NLS-1$
+ Console console = Factory.showConsole((IPeer)monitorEvent.getSource(), true);
+ if (console != null) {
+ // Message type 'R' is an unknown type and will lead to print the
+ // message text using the error color.
+ console.appendMessage('R', message.text);
+ }
+ }
+ break;
+ case ACTIVITY:
+ Console console = Factory.showConsole((IPeer)monitorEvent.getSource(), true);
+ if (console != null && message != null) {
+ console.appendMessage(message.type, message.text);
+ }
+ break;
+ }
+ }
+ }
+
+}
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui.views/src/org/eclipse/tcf/te/tcf/ui/views/nls/Messages.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui.views/src/org/eclipse/tcf/te/tcf/ui/views/nls/Messages.java index 7cd7327fc..d5ad2f1ff 100644 --- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui.views/src/org/eclipse/tcf/te/tcf/ui/views/nls/Messages.java +++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui.views/src/org/eclipse/tcf/te/tcf/ui/views/nls/Messages.java @@ -29,7 +29,10 @@ public class Messages extends NLS { // **** Declare externalized string id's down here ***** - public static String Console_name; + public static String ScriptPad_Console_name; + + public static String Monitor_Console_name; + public static String Monitor_Console_name_with_peer; public static String ScriptPad_error_title; public static String ScriptPad_error_openFile; diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui.views/src/org/eclipse/tcf/te/tcf/ui/views/nls/Messages.properties b/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui.views/src/org/eclipse/tcf/te/tcf/ui/views/nls/Messages.properties index 7e3068eea..5614f5e16 100644 --- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui.views/src/org/eclipse/tcf/te/tcf/ui/views/nls/Messages.properties +++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui.views/src/org/eclipse/tcf/te/tcf/ui/views/nls/Messages.properties @@ -3,8 +3,12 @@ # Externalized Strings. # -Console_name=Script Pad Console +ScriptPad_Console_name=Script Pad Console + +Monitor_Console_name=Monitor Console +Monitor_Console_name_with_peer=Monitor Console: {0} [{1}] ScriptPad_error_title=Error ScriptPad_error_openFile=Failed to open file ''{0}''.\n\nPossible cause:\n{1} ScriptPad_error_saveFile=Failed to save file ''{0}''.\n\nPossible cause:\n{1} + diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui.views/src/org/eclipse/tcf/te/tcf/ui/views/scriptpad/console/Console.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui.views/src/org/eclipse/tcf/te/tcf/ui/views/scriptpad/console/Console.java index a67ccc523..65b3d7fb8 100644 --- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui.views/src/org/eclipse/tcf/te/tcf/ui/views/scriptpad/console/Console.java +++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui.views/src/org/eclipse/tcf/te/tcf/ui/views/scriptpad/console/Console.java @@ -24,7 +24,7 @@ public class Console extends AbstractConsole { * Constructor.
*/
public Console() {
- super(Messages.Console_name, UIPlugin.getImageDescriptor(ImageConsts.SCRIPT_PAD_CONSOLE));
+ super(Messages.ScriptPad_Console_name, UIPlugin.getImageDescriptor(ImageConsts.SCRIPT_PAD_CONSOLE));
}
/* (non-Javadoc)
@@ -32,6 +32,6 @@ public class Console extends AbstractConsole { */
@Override
public String getHelpContextId() {
- return IContextHelpIds.SCRIPT_PAD_CONSOLE_VIEW;
+ return IContextHelpIds.SCRIPT_PAD_CONSOLE;
}
}
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.ui.forms/src/org/eclipse/tcf/te/ui/forms/parts/TablePart.java b/target_explorer/plugins/org.eclipse.tcf.te.ui.forms/src/org/eclipse/tcf/te/ui/forms/parts/TablePart.java index 8e538ef41..232e34888 100644 --- a/target_explorer/plugins/org.eclipse.tcf.te.ui.forms/src/org/eclipse/tcf/te/ui/forms/parts/TablePart.java +++ b/target_explorer/plugins/org.eclipse.tcf.te.ui.forms/src/org/eclipse/tcf/te/ui/forms/parts/TablePart.java @@ -76,7 +76,7 @@ public class TablePart extends AbstractStructuredViewerPart implements ISelectio Assert.isNotNull(parent);
// Adjust the style bits
- style |= SWT.H_SCROLL | SWT.V_SCROLL | (toolkit != null ? toolkit.getBorderStyle() : SWT.BORDER);
+ style |= SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER;
TableViewer viewer = createTableViewer(parent, style);
Assert.isNotNull(viewer);
|