diff -r ed1c9f64298a -r 5b9d4d8641ce trace/traceviewer/com.nokia.traceviewer/src/com/nokia/traceviewer/engine/ConnectionHelper.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/trace/traceviewer/com.nokia.traceviewer/src/com/nokia/traceviewer/engine/ConnectionHelper.java Wed Jun 23 14:49:59 2010 +0300 @@ -0,0 +1,338 @@ +/* + * 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 Helper class + * + */ +package com.nokia.traceviewer.engine; + +import org.eclipse.core.runtime.CoreException; +import org.eclipse.jface.preference.IPreferenceNode; +import org.eclipse.jface.preference.IPreferencePage; +import org.eclipse.jface.preference.IPreferenceStore; +import org.eclipse.jface.preference.PreferenceDialog; +import org.eclipse.jface.preference.PreferenceManager; +import org.eclipse.jface.preference.PreferenceNode; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.ui.PlatformUI; + +import com.nokia.carbide.remoteconnections.RemoteConnectionsActivator; +import com.nokia.carbide.remoteconnections.interfaces.IClientServiceSiteUI2; +import com.nokia.carbide.remoteconnections.interfaces.IConnection; +import com.nokia.carbide.remoteconnections.interfaces.IService; +import com.nokia.carbide.remoteconnections.interfaces.IConnectionsManager.ISelectedConnectionInfo; +import com.nokia.traceviewer.TraceViewerPlugin; +import com.nokia.traceviewer.action.ConnectAction; +import com.nokia.traceviewer.engine.preferences.PreferenceConstants; +import com.nokia.traceviewer.engine.preferences.TraceViewerConnectionPreferencesPage; + +/** + * Connection Helper class + */ +public class ConnectionHelper { + + /** + * Current connection identifier + */ + public static String CURRENT_CONNECTION_ID = "com.nokia.carbide.remoteConnections.currentConnection"; //$NON-NLS-1$ + + /** + * Client service UI + */ + private static IClientServiceSiteUI2 clientServiceUI = getClientServiceUI(); + + /** + * Tells if "Current connection" is selected from TraceViewer preferences + */ + public static boolean isCurrentConnectionSelected; + + static { + + // Current connection is selected if ID is CURRENT_CONNECTION_ID or + // empty + String currConn = TraceViewerPlugin.getDefault().getPreferenceStore() + .getString(PreferenceConstants.SELECTED_CONNECTION_ID); + isCurrentConnectionSelected = currConn.equals(CURRENT_CONNECTION_ID) + || currConn.equals(""); //$NON-NLS-1$ + } + + /** + * The current connection ensured + */ + public static IConnection currentEnsuredConnection; + + /** + * Gets tracing service + * + * @return tracing service + */ + public static IService getTracingService() { + IService service = RemoteConnectionsActivator + .getConnectionTypeProvider().findServiceByID( + "com.nokia.carbide.trk.support.service.TracingService"); //$NON-NLS-1$ + return service; + } + + /** + * Gets selected connection object + * + * @return selected connection object + */ + public static IConnection getSelectedConnection() { + String selectedConnId = clientServiceUI.getSelectedConnection(); + + IConnection conn = null; + + // Current connection selected + if (selectedConnId != null + && selectedConnId.equals(CURRENT_CONNECTION_ID)) { + isCurrentConnectionSelected = true; + } else { + isCurrentConnectionSelected = false; + conn = getConnectionWithID(selectedConnId); + + // If connection doesn't exist, create ClientUI and select the + // connection + if (conn == null) { + createClientUI(); + + // Select connection with ID + selectedConnId = TraceViewerPlugin.getDefault() + .getPreferenceStore().getString( + PreferenceConstants.SELECTED_CONNECTION_ID); + clientServiceUI.selectConnection(selectedConnId); + conn = getConnectionWithID(selectedConnId); + } + } + + return conn; + } + + /** + * Gets connection with current ID + * + * @return connection + */ + public static IConnection getConnectionWithCurrentID() { + String selectedConnId = TraceViewerPlugin.getDefault() + .getPreferenceStore().getString( + PreferenceConstants.SELECTED_CONNECTION_ID); + IConnection ret = getConnectionWithID(selectedConnId); + + return ret; + } + + /** + * Gets connection with ID + * + * @param id + * the ID + * @return connection + */ + public static IConnection getConnectionWithID(String id) { + IConnection ret = RemoteConnectionsActivator.getConnectionsManager() + .findConnection(id); + + return ret; + } + + /** + * Gets client service UI + * + * @return client service UI + */ + public static IClientServiceSiteUI2 getClientServiceUI() { + IClientServiceSiteUI2 ui = null; + IService service = getTracingService(); + + if (service != null) { + ui = RemoteConnectionsActivator.getConnectionsManager() + .getClientSiteUI2(service); + } + return ui; + } + + /** + * Select connection from client UI with ID + * + * @param id + * the ID + */ + public static void selectConnectionFromUIWithID(String id) { + if (clientServiceUI != null) { + clientServiceUI.selectConnection(id); + } + } + + /** + * Creates client service UI + * + * @param composite + * composite + * @return composite or null if client service UI couldn't be constructed + */ + public static Composite createClientServiceUI(Composite composite) { + Composite ret = null; + if (clientServiceUI != null) { + clientServiceUI.createComposite(composite); + ret = composite; + } + return ret; + } + + /** + * Creates Client UI + */ + private static void createClientUI() { + PreferenceManager mgr = new PreferenceManager(); + + // Create connection preference page + IPreferencePage connectionPage = new TraceViewerConnectionPreferencesPage(); + IPreferenceNode connectionNode = new PreferenceNode("1", connectionPage); //$NON-NLS-1$ + mgr.addToRoot(connectionNode); + + // Create the dialog + PreferenceDialog dialog = new PreferenceDialog(PlatformUI + .getWorkbench().getDisplay().getActiveShell(), mgr); + dialog.create(); + } + + /** + * Saves connection settings to preference store + * + * @param ensureConnection + * if true, connection is ensured. It means that if the saved ID + * is not a ID of a "real" connection, we must find a real + * connection for this virtual ID + * @return found IConnection object + */ + public static IConnection saveConnectionSettingsToPreferenceStore( + boolean ensureConnection) { + + IPreferenceStore store = TraceViewerPlugin.getDefault() + .getPreferenceStore(); + + IConnection conn = null; + + if (ensureConnection) { + String selectedConnId = clientServiceUI.getSelectedConnection(); + if (selectedConnId == null && isCurrentConnectionSelected) { + selectedConnId = CURRENT_CONNECTION_ID; + } else if (selectedConnId == null) { + selectedConnId = store + .getString(PreferenceConstants.SELECTED_CONNECTION_ID); + } + + try { + ISelectedConnectionInfo ret = RemoteConnectionsActivator + .getConnectionsManager().ensureConnection( + selectedConnId, getTracingService()); + conn = ret.getConnection(); + } catch (CoreException e) { + e.printStackTrace(); + } + + } else { + conn = ConnectionHelper.getSelectedConnection(); + } + + // Save the currently ensured connection object + currentEnsuredConnection = conn; + + if (conn != null + && PlatformUI.getWorkbench().getDisplay().getActiveShell() != null + && !PlatformUI.getWorkbench().getDisplay().getActiveShell() + .isDisposed()) { + + String connectionTypeId = conn.getConnectionType().getIdentifier(); + boolean isMusti = connectionTypeId + .equals("com.nokia.carbide.trk.support.connection.TCPIPConnectionType"); //$NON-NLS-1$ + + boolean isPlatsim = connectionTypeId + .equals("com.nokia.carbide.trk.support.connection.PlatSimConnectionType"); //$NON-NLS-1$ + + // TCP / IP connection + if (isMusti || isPlatsim) { + String address = conn.getSettings().get("ipAddress"); //$NON-NLS-1$ + String port = conn.getSettings().get("port"); //$NON-NLS-1$ + int channel = PreferenceConstants.TCPIP_DEFAULT_CHANNEL; + if (isMusti) { + try { + channel = Integer.parseInt(conn.getSettings().get( + "mustiChannel")); //$NON-NLS-1$ + } catch (NumberFormatException e) { + channel = 1; + } + } + + // Save Connection type, IP address, port number and channel + store.setValue(PreferenceConstants.CONNECTION_TYPE, + PreferenceConstants.CONNECTION_TYPE_TCPIP); + store.setValue(PreferenceConstants.IP_ADDRESS, address); + store.setValue(PreferenceConstants.TCPIP_PORT, port); + store.setValue(PreferenceConstants.TCPIP_CHANNEL, channel); + + // USB connection + } else if (connectionTypeId + .equals("com.nokia.carbide.trk.support.connection.USBConnectionType")) { //$NON-NLS-1$ + String portNumStr = conn.getSettings().get("port"); //$NON-NLS-1$ + int portNum = Integer.parseInt(portNumStr); + + // Save Connection type and port number + store.setValue(PreferenceConstants.CONNECTION_TYPE, + PreferenceConstants.CONNECTION_TYPE_USB_SERIAL); + store + .setValue(PreferenceConstants.USB_SERIAL_COM_PORT, + portNum); + + } + + // Save selected connection name. Only save the identifier if we + // have not selected the "current connection" + store.setValue(PreferenceConstants.SELECTED_CONNECTION_NAME, conn + .getDisplayName()); + + if (!isCurrentConnectionSelected) { + store.setValue(PreferenceConstants.SELECTED_CONNECTION_ID, conn + .getIdentifier()); + } + + // Current connection selected + } else if (isCurrentConnectionSelected) { + store.setValue(PreferenceConstants.CONNECTION_TYPE, + CURRENT_CONNECTION_ID); + store.setValue(PreferenceConstants.SELECTED_CONNECTION_ID, + CURRENT_CONNECTION_ID); + store.setValue(PreferenceConstants.SELECTED_CONNECTION_NAME, + CURRENT_CONNECTION_ID); + + // Couldn't find connection + } else { + store.setValue(PreferenceConstants.CONNECTION_TYPE, ""); //$NON-NLS-1$ + + // Resetting selected connection identifier + store.setValue(PreferenceConstants.SELECTED_CONNECTION_ID, ""); //$NON-NLS-1$ + store.setValue(PreferenceConstants.SELECTED_CONNECTION_NAME, ""); //$NON-NLS-1$ + } + + // Change connection button tooltip + ConnectAction action = (ConnectAction) TraceViewerGlobals + .getTraceViewer().getView().getActionFactory() + .getConnectAction(); + action.changeConnectToolTip(); + + return conn; + } +}