com.nokia.traceviewer.engine.ConnectionHelper.java Source code

Java tutorial

Introduction

Here is the source code for com.nokia.traceviewer.engine.ConnectionHelper.java

Source

/*
 * 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;
    }
}