diff -r ed1c9f64298a -r 5b9d4d8641ce 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 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; + } + +}