com.nokia.carbide.remoteconnections.internal.ui.DeviceDiscoveryPrequisiteErrorDialog.java Source code

Java tutorial

Introduction

Here is the source code for com.nokia.carbide.remoteconnections.internal.ui.DeviceDiscoveryPrequisiteErrorDialog.java

Source

/*
* Copyright (c) 2010 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.remoteconnections.internal.ui;

import java.net.URL;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Collection;

import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.TrayDialog;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.ListViewer;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.window.IShellProvider;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.SashForm;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Link;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.browser.IWebBrowser;

import com.nokia.carbide.remoteconnections.Messages;
import com.nokia.carbide.remoteconnections.RemoteConnectionsActivator;

public class DeviceDiscoveryPrequisiteErrorDialog extends TrayDialog {

    private class AgentItem {
        public String agentName;
        public String agentErrorText;
        public URL agentLocation;

        AgentItem(String name, String text, URL location) {
            agentName = name;
            agentErrorText = text;
            agentLocation = location;
            // if location is not null and error text doesn't contain href
            //  then do it here
            if (agentLocation != null && !agentErrorText.contains("href")) { //$NON-NLS-1$
                String msg = MessageFormat.format(
                        Messages.getString("DeviceDiscoveryPrequisiteErrorDialog_ErrorFormatWithURL"), //$NON-NLS-1$
                        agentErrorText, location, location);
                agentErrorText = msg;
            }
        }
    }

    private Collection<AgentItem> agentList = new ArrayList<AgentItem>();
    private boolean dontAskAgain;
    private ListViewer agentListViewer;
    private Link errorText;
    private Button dontAskAgainCheckBox;

    /**
     * @param parentShell
     */
    public DeviceDiscoveryPrequisiteErrorDialog(Shell parentShell) {
        super(parentShell);
        agentList.clear();
    }

    /**
     * @param parentShell
     */
    public DeviceDiscoveryPrequisiteErrorDialog(IShellProvider parentShell) {
        super(parentShell);
        agentList.clear();
    }

    public void addAgentData(String name, String errorText, URL location) {
        agentList.add(new AgentItem(name, errorText, location));
    }

    public boolean isDontAskAgainChecked() {
        return dontAskAgain;
    }

    @Override
    protected void createButtonsForButtonBar(Composite parent) {
        // OK button == "Close"
        // no Cancel button
        createButton(parent, IDialogConstants.OK_ID, IDialogConstants.CLOSE_LABEL, true);
    }

    @Override
    protected Control createDialogArea(Composite parent) {
        initializeDialogUnits(parent);

        Composite container = new Composite(parent, SWT.NONE);
        GridLayout layout = new GridLayout(1, true);
        container.setLayout(layout);
        container.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));

        // Message at top
        Text topMessage = new Text(container, SWT.MULTI | SWT.WRAP);
        topMessage.setText(Messages.getString("DeviceDiscoveryPrequisiteErrorDialog_Description")); //$NON-NLS-1$
        topMessage.setEditable(false);
        topMessage.setDoubleClickEnabled(false);
        GridData topMsgData = new GridData(SWT.LEFT, SWT.CENTER, true, false);
        topMsgData.heightHint = 48;
        topMessage.setLayoutData(topMsgData);
        topMessage.setToolTipText(Messages.getString("DeviceDiscoveryPrequisiteErrorDialog_ToolTipText")); //$NON-NLS-1$

        // next two panes can be resized with a sash form
        SashForm sashForm = new SashForm(container, SWT.VERTICAL);
        GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true);
        sashForm.setLayoutData(gridData);

        // this pane lists all the agent display names
        agentListViewer = new ListViewer(sashForm, SWT.V_SCROLL | SWT.BORDER);
        agentListViewer.setContentProvider(new ArrayContentProvider());
        agentListViewer.setLabelProvider(new LabelProvider() {

            @Override
            public String getText(Object element) {
                return ((AgentItem) element).agentName;
            }

        });
        agentListViewer.addSelectionChangedListener(new ISelectionChangedListener() {

            public void selectionChanged(SelectionChangedEvent event) {
                IStructuredSelection selection = (IStructuredSelection) event.getSelection();
                AgentItem item = (AgentItem) selection.getFirstElement();
                errorText.setText(item.agentErrorText);
            }

        });
        agentListViewer.setInput(agentList);

        // pane to view the information about the selected agent
        errorText = new Link(sashForm, SWT.V_SCROLL | SWT.BORDER | SWT.WRAP);
        errorText.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_LIST_BACKGROUND));
        errorText.setToolTipText(Messages.getString("DeviceDiscoveryPrequisiteErrorDialog_ErrorTextToolTipText")); //$NON-NLS-1$
        errorText.addListener(SWT.Selection, new Listener() {

            public void handleEvent(Event event) {
                // Launch an external browser
                String siteText = event.text;
                IWorkbench workbench = PlatformUI.getWorkbench();
                try {
                    IWebBrowser browser = workbench.getBrowserSupport().getExternalBrowser();
                    browser.openURL(new URL(siteText));
                } catch (Exception e) {
                    RemoteConnectionsActivator.logError(e);
                }
            }

        });

        // add initial weights to the above two panes
        sashForm.setWeights(new int[] { 150, 200 });

        // now the don't ask again check box
        dontAskAgainCheckBox = new Button(container, SWT.CHECK);
        dontAskAgainCheckBox.setLayoutData(new GridData(GridData.BEGINNING, GridData.CENTER, true, false));
        dontAskAgainCheckBox.setText(Messages.getString("DeviceDiscoveryPrequisiteErrorDialog_DontAskAgainLabel")); //$NON-NLS-1$
        dontAskAgainCheckBox
                .setToolTipText(Messages.getString("DeviceDiscoveryPrequisiteErrorDialog_DontAskAgainToolTipText")); //$NON-NLS-1$
        dontAskAgainCheckBox.addSelectionListener(new SelectionAdapter() {

            public void widgetSelected(SelectionEvent e) {
                dontAskAgain = dontAskAgainCheckBox.getSelection();
            }

        });

        // now finish by selecting the top most agent in the list
        // and bringing it into view
        Object o = agentListViewer.getElementAt(0);
        if (o != null)
            agentListViewer.setSelection(new StructuredSelection(o));

        ISelection selection = agentListViewer.getSelection();
        if (selection != null && !selection.isEmpty()) {
            agentListViewer.reveal(selection);
        }

        return container;
    }

    @Override
    protected Point getInitialSize() {
        return new Point(400, 400);
    }

    @Override
    protected void configureShell(Shell newShell) {
        super.configureShell(newShell);
        // set our title to the dialog
        newShell.setText(Messages.getString("DeviceDiscoveryPrequisiteErrorDialog_Title")); //$NON-NLS-1$
    }
}