com.nokia.carbide.trk.support.connection.SerialConnectionFactory.java Source code

Java tutorial

Introduction

Here is the source code for com.nokia.carbide.trk.support.connection.SerialConnectionFactory.java

Source

/*
* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of the License "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: 
*
*/

package com.nokia.carbide.trk.support.connection;

import java.util.HashMap;
import java.util.Map;

import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.ComboViewer;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;

import com.freescale.cdt.debug.cw.core.SerialConnectionSettings;
import com.nokia.carbide.remoteconnections.interfaces.IConnection;
import com.nokia.carbide.remoteconnections.interfaces.IConnectionFactory;
import com.nokia.carbide.remoteconnections.interfaces.IConnectionType;
import com.nokia.carbide.trk.support.Messages;

/**
 * Implementation of IConnectionFactory for serial connections
 */
public class SerialConnectionFactory implements IConnectionFactory {

    private final IConnectionType connectionType;
    private SerialConnectionSettings settings;
    private Map<String, ComboViewer> viewers;
    private boolean showOnlyPort;

    public SerialConnectionFactory(IConnectionType connectionType, boolean showOnlyPort) {
        this.connectionType = connectionType;
        this.showOnlyPort = showOnlyPort;
        viewers = new HashMap<String, ComboViewer>();
        settings = new SerialConnectionSettings(null);
    }

    public IConnection createConnection(Map<String, String> settings) {
        if (settings == null)
            settings = new HashMap<String, String>(this.settings.getSettings());
        SerialConnectionSettings.setDefaultPortNumber(settings.get(SerialConnectionSettings.PORT));
        return new SerialConnection(connectionType, settings);
    }

    public void createEditingUI(Composite parent, IValidationErrorReporter errorReporter,
            Map<String, String> initialSettings) {
        Composite composite = new Composite(parent, SWT.NONE);
        composite.setLayout(new GridLayout(2, false));
        composite.setLayoutData(new GridData(GridData.FILL_BOTH));

        createComboForSettings(composite, Messages.getString("SerialConnectionFactory.PortLabel"), //$NON-NLS-1$
                SerialConnectionSettings.PORT, settings.getComPortStrings());
        if (!showOnlyPort) {
            createComboForSettings(composite, Messages.getString("SerialConnectionFactory.BaudLabel"), //$NON-NLS-1$
                    SerialConnectionSettings.BAUD, SerialConnectionSettings.BAUD_VALS);
        }
        //      createComboForSettings(composite, 
        //            Messages.getString("SerialConnectionFactory.DataBitsLabel"),  //$NON-NLS-1$
        //            SerialConnectionSettings.DATA_BITS, SerialConnectionSettings.DATA_BIT_VALS, listener);
        //      createComboForSettings(composite, 
        //            Messages.getString("SerialConnectionFactory.ParityLabel"),  //$NON-NLS-1$
        //            SerialConnectionSettings.PARITY, SerialConnectionSettings.PARITY_VALS, listener);
        //      createComboForSettings(composite, 
        //            Messages.getString("SerialConnectionFactory.StopBitsLabel"),  //$NON-NLS-1$
        //            SerialConnectionSettings.STOP_BITS, SerialConnectionSettings.STOP_BIT_VALS, listener);
        //      createComboForSettings(composite, 
        //            Messages.getString("SerialConnectionFactory.FlowControlLabel"),  //$NON-NLS-1$
        //            SerialConnectionSettings.FLOW_CONTROL, SerialConnectionSettings.FLOW_CONTROL_VALS, listener);

        if (initialSettings != null)
            settings.initialize(initialSettings);

        putSettingsToUI();
    }

    private void createComboForSettings(Composite composite, String labelStr, final String key, String[] input) {
        Label label = new Label(composite, SWT.NONE);
        label.setText(labelStr);

        final ComboViewer viewer = new ComboViewer(composite, SWT.READ_ONLY);
        viewer.getCombo().setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
        viewer.setContentProvider(new ArrayContentProvider());
        viewer.setLabelProvider(new LabelProvider() {
            @Override
            public String getText(Object element) {
                int index = SerialConnectionSettings.toIndex(key, element.toString());
                return SerialConnectionSettings.toDisplayString(key, index);
            }
        });
        viewer.addSelectionChangedListener(new ISelectionChangedListener() {
            public void selectionChanged(SelectionChangedEvent event) {
                int index = viewer.getCombo().getSelectionIndex();
                settings.setByIndex(key, index);
            }
        });
        viewer.setInput(input);
        viewer.getControl().setData(".uid", "SerialConnectionFactory." + key); //$NON-NLS-1$ //$NON-NLS-2$
        viewers.put(key, viewer);
    }

    public Map<String, String> getSettingsFromUI() {
        return new HashMap<String, String>(settings.getSettings());
    }

    private void putSettingsToUI() {
        Map<String, String> map = settings.getSettings();
        for (String key : map.keySet()) {
            ComboViewer viewer = viewers.get(key);
            if (viewer != null) {
                String element = map.get(key);
                viewer.setSelection(element != null ? new StructuredSelection(element) : StructuredSelection.EMPTY);
            }
        }
    }
}