trace/traceviewer/com.nokia.traceviewer/src/com/nokia/traceviewer/engine/ConnectionChangedListener.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/trace/traceviewer/com.nokia.traceviewer/src/com/nokia/traceviewer/engine/ConnectionChangedListener.java Wed Jun 23 14:49:59 2010 +0300
@@ -0,0 +1,195 @@
+/*
+ * Copyright (c) 2007-2010 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description:
+ *
+ * Connection changed listener
+ *
+ */
+package com.nokia.traceviewer.engine;
+
+import java.util.Collection;
+
+import org.eclipse.swt.widgets.Display;
+
+import com.nokia.carbide.remoteconnections.RemoteConnectionsActivator;
+import com.nokia.carbide.remoteconnections.interfaces.IConnection;
+import com.nokia.carbide.remoteconnections.interfaces.IConnectionTypeProvider;
+import com.nokia.carbide.remoteconnections.interfaces.IService;
+import com.nokia.carbide.remoteconnections.interfaces.IConnectionsManager.IConnectionListener;
+import com.nokia.carbide.remoteconnections.internal.api.IConnection2;
+import com.nokia.traceviewer.TraceViewerPlugin;
+import com.nokia.traceviewer.action.ConnectAction;
+import com.nokia.traceviewer.engine.preferences.PreferenceConstants;
+import com.nokia.traceviewer.internal.api.TraceViewerAPI2Impl;
+
+/**
+ * Connection changed listener
+ */
+class ConnectionChangedListener implements IConnectionListener {
+
+ /*
+ * (non-Javadoc)
+ *
+ * @seecom.nokia.carbide.remoteconnections.interfaces.IConnectionsManager.
+ * IConnectionListener
+ * #connectionAdded(com.nokia.carbide.remoteconnections.interfaces
+ * .IConnection)
+ */
+ public void connectionAdded(IConnection arg0) {
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @seecom.nokia.carbide.remoteconnections.interfaces.IConnectionsManager.
+ * IConnectionListener
+ * #connectionRemoved(com.nokia.carbide.remoteconnections.
+ * interfaces.IConnection)
+ */
+ public void connectionRemoved(IConnection arg0) {
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @seecom.nokia.carbide.remoteconnections.interfaces.IConnectionsManager.
+ * IConnectionListener
+ * #currentConnectionSet(com.nokia.carbide.remoteconnections
+ * .interfaces.IConnection)
+ */
+ public void currentConnectionSet(IConnection newConnection) {
+ if (ConnectionHelper.isCurrentConnectionSelected
+ && newConnection != null
+ && supportsTracingService(newConnection)) {
+
+ // Save new settings
+ if (TraceViewerGlobals.getTraceViewer().getConnection() == null
+ || !TraceViewerGlobals.getTraceViewer().getConnection()
+ .isConnected()) {
+ saveNewSettings();
+
+ // Notify about connection preferences changed to listeners
+ TraceViewerAPI2Impl.notifyConnPrefsChanged(newConnection);
+
+ // If auto connect is on
+ if (TraceViewerPlugin
+ .getDefault()
+ .getPreferenceStore()
+ .getBoolean(
+ PreferenceConstants.AUTO_CONNECT_DYNAMIC_CONNECTIONS_CHECKBOX)) {
+
+ // IConnection2 object, dynamic connection and TraceViewer
+ // view exists
+ if (newConnection instanceof IConnection2) {
+ if (((IConnection2) newConnection).isDynamic()
+ && TraceViewerGlobals.getTraceViewer()
+ .getView() != null) {
+ connect();
+ }
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * Saves new settings
+ */
+ private void saveNewSettings() {
+ // Change connect tooltip
+ final ConnectAction action = (ConnectAction) TraceViewerGlobals
+ .getTraceViewer().getView().getActionFactory()
+ .getConnectAction();
+
+ // UI thread
+ if (Display.getCurrent() != null) {
+ ConnectionHelper.saveConnectionSettingsToPreferenceStore(true);
+ action.changeConnectToolTip();
+
+ // Not in UI thread, sync
+ } else {
+ Display.getDefault().syncExec(new Runnable() {
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Runnable#run()
+ */
+ public void run() {
+ ConnectionHelper
+ .saveConnectionSettingsToPreferenceStore(true);
+ action.changeConnectToolTip();
+ }
+
+ });
+ }
+
+ }
+
+ /**
+ * Connects
+ */
+ private void connect() {
+
+ // Change connect tooltip
+ final ConnectAction action = (ConnectAction) TraceViewerGlobals
+ .getTraceViewer().getView().getActionFactory()
+ .getConnectAction();
+
+ // UI thread
+ if (Display.getCurrent() != null) {
+ action.run();
+
+ // Not in UI thread, sync
+ } else {
+ Display.getDefault().syncExec(new Runnable() {
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Runnable#run()
+ */
+ public void run() {
+ action.run();
+ }
+
+ });
+ }
+ }
+
+ /**
+ * Checks if the connection supports tracing service
+ *
+ * @param connection
+ * connection
+ * @return true if the connection supports tracing service
+ */
+ private boolean supportsTracingService(IConnection connection) {
+ boolean supports = false;
+ IConnectionTypeProvider provider = RemoteConnectionsActivator
+ .getConnectionTypeProvider();
+ Collection<IService> services = provider
+ .getCompatibleServices(connection.getConnectionType());
+ for (IService service : services) {
+ if (service.getIdentifier().equals(
+ "com.nokia.carbide.trk.support.service.TracingService")) { //$NON-NLS-1$
+ supports = true;
+ break;
+ }
+ }
+
+ return supports;
+ }
+
+}