org.eclipse.jubula.client.ui.rcp.wizards.pages.UpdateReusedProjectsDialog.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.jubula.client.ui.rcp.wizards.pages.UpdateReusedProjectsDialog.java

Source

/*******************************************************************************
 * Copyright (c) 2016 BREDEX GmbH.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *     BREDEX GmbH - initial API and implementation and/or initial documentation
 *******************************************************************************/
package org.eclipse.jubula.client.ui.rcp.wizards.pages;

import java.awt.Desktop;
import java.net.URI;
import java.util.Map;

import org.eclipse.jface.dialogs.TitleAreaDialog;
import org.eclipse.jface.viewers.ColumnLabelProvider;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TableViewerColumn;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jubula.client.core.model.IReusedProjectPO;
import org.eclipse.jubula.client.core.model.ProjectVersion;
import org.eclipse.jubula.client.ui.constants.Constants;
import org.eclipse.jubula.client.ui.constants.ContextHelpIds;
import org.eclipse.jubula.client.ui.constants.IconConstants;
import org.eclipse.jubula.client.ui.rcp.Plugin;
import org.eclipse.jubula.client.ui.rcp.i18n.Messages;
import org.eclipse.jubula.client.ui.utils.LayoutUtil;
import org.eclipse.jubula.client.ui.widgets.UIComponentHelper;
import org.eclipse.jubula.tools.internal.constants.StringConstants;
import org.eclipse.jubula.tools.internal.constants.SwtToolkitConstants;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
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.Label;
import org.eclipse.swt.widgets.Link;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;

/**
 * @author BREDEX GmbH
 * @created 01.07.2016
 */
public class UpdateReusedProjectsDialog extends TitleAreaDialog implements ISelectionChangedListener {

    /** Title of project name column */
    private static final String PROJECT_NAME_COLUMN = "Project Name"; //$NON-NLS-1$

    /** Title of current project version column */
    private static final String CURRENT_VERSION = "Current version"; //$NON-NLS-1$

    /** Title of new project version column */
    private static final String NEW_VERSION = "New version"; //$NON-NLS-1$

    /** Margin size */
    private static final int MARGIN = 20;

    /** info about reused projects and newest versions */
    private Map<IReusedProjectPO, ProjectVersion> m_oldReusedProjects;

    /** dont ask again */
    private Button m_dontAskAgain;

    /** Project name label provider */
    private ColumnLabelProvider m_nameProvider = new ColumnLabelProvider() {
        @Override
        public String getText(Object element) {
            if (element instanceof Map.Entry) {
                Map.Entry project = (Map.Entry) element;
                if (project.getKey() instanceof IReusedProjectPO) {
                    return ((IReusedProjectPO) project.getKey()).getName();
                }
            }
            return StringConstants.EMPTY;
        }
    };

    /** Current version of reused project */
    private ColumnLabelProvider m_currentVersionProvider = new ColumnLabelProvider() {
        @Override
        public String getText(Object element) {
            if (element instanceof Map.Entry) {
                Map.Entry project = (Map.Entry) element;
                if (project.getKey() instanceof IReusedProjectPO) {
                    return ((IReusedProjectPO) project.getKey()).getVersionString();
                }
            }
            return StringConstants.EMPTY;
        }
    };

    /** Newest version of reused project */
    private ColumnLabelProvider m_newVersionProvider = new ColumnLabelProvider() {
        @Override
        public String getText(Object element) {
            if (element instanceof Map.Entry) {
                Map.Entry project = (Map.Entry) element;
                if (project.getValue() instanceof ProjectVersion) {
                    return ((ProjectVersion) project.getValue()).toString();
                }
            }
            return StringConstants.EMPTY;
        }
    };

    /**
     * @param shell active shell
     * @param oldReusedProjects info about reused projects and newest versions
     */
    public UpdateReusedProjectsDialog(Shell shell, Map<IReusedProjectPO, ProjectVersion> oldReusedProjects) {
        super(shell);
        m_oldReusedProjects = oldReusedProjects;
    }

    @Override
    public Control createDialogArea(Composite parent) {
        setTitle(Messages.UpdateReusedProjectsTitle);
        setTitleImage(IconConstants.getImage(IconConstants.BIG_PROJECT_STRING));
        setMessage(Messages.UpdateReusedProjectsMessage);

        GridData gridData;
        GridLayout layout = new GridLayout();
        layout.numColumns = 1;
        layout.makeColumnsEqualWidth = true;
        parent.setLayout(layout);

        LayoutUtil.createSeparator(createComposite(parent, 0, MARGIN));

        TableViewer viewer = new TableViewer(createComposite(parent), SWT.NONE);
        viewer.addSelectionChangedListener(this);
        viewer.setUseHashlookup(true);
        viewer.setContentProvider(new GeneralContentProvider());
        createColumns(viewer);
        viewer.setInput(m_oldReusedProjects);
        Table table = viewer.getTable();
        table.setData(SwtToolkitConstants.WIDGET_NAME, Messages.UpdateReusedProjectsWidgetName);
        table.setLinesVisible(true);
        table.setHeaderVisible(true);
        GridData tableGridData = new GridData(GridData.FILL_BOTH);
        tableGridData.grabExcessVerticalSpace = true;
        tableGridData.horizontalSpan = 3;
        table.setLayoutData(tableGridData);

        createComposite(parent, MARGIN, MARGIN);
        createDontAskCheckBox(createComposite(parent));
        createOkLabel(createComposite(parent));

        LayoutUtil.createSeparator(createComposite(parent, MARGIN, 0));

        Plugin.getHelpSystem().setHelp(parent, ContextHelpIds.PROJECT_USED_PROPERTY_PAGE);
        return parent;
    }

    /**
     * @param parent parent composite
     * @return the new composite
     */
    private Composite createComposite(Composite parent) {
        return createComposite(parent, 0, 0);
    }

    /**
     * @param parent parent composite
     * @param top margin
     * @param bottom margin
     * @return new composite
     */
    private Composite createComposite(Composite parent, int top, int bottom) {
        Composite composite = new Composite(parent, SWT.NONE);
        GridData gridData = new GridData();
        gridData.grabExcessHorizontalSpace = true;
        gridData.horizontalAlignment = GridData.FILL;
        composite.setLayoutData(gridData);
        GridLayout layout = new GridLayout();
        layout.marginTop = top;
        layout.marginBottom = bottom;
        composite.setLayout(layout);
        return composite;
    }

    /**
     * Creates the OK label.
     * @param parent the parent composite
     */
    private void createOkLabel(Composite parent) {
        String text = Messages.UpdateReusedProjectsMessage;
        Label nextLabel = UIComponentHelper.createLabelWithText(parent, text);
        Link link = new Link(parent, SWT.NONE);
        link.setText(Messages.DatabaseMigrationWebsiteLinkLabel);
        link.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent event) {
                openUri(Messages.DatabaseMigrationWebsiteLink);
            }
        });
        GridData gridData = new GridData();
        gridData.grabExcessHorizontalSpace = true;
        gridData.verticalAlignment = GridData.END;
        nextLabel.setLayoutData(gridData);
    }

    /**
     * @param uriString string of url
     */
    private void openUri(String uriString) {
        Desktop desktop = Desktop.isDesktopSupported() ? Desktop.getDesktop() : null;
        if (desktop != null && desktop.isSupported(Desktop.Action.BROWSE)) {
            try {
                URI uri = new URI(uriString);
                desktop.browse(uri);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    /**
     * Column creator
     * @param tableViewer parent viewer
     */
    private void createColumns(TableViewer tableViewer) {
        createTableViewerColumn(tableViewer, PROJECT_NAME_COLUMN, 200).setLabelProvider(m_nameProvider);
        createTableViewerColumn(tableViewer, CURRENT_VERSION, 150).setLabelProvider(m_currentVersionProvider);
        createTableViewerColumn(tableViewer, NEW_VERSION, 150).setLabelProvider(m_newVersionProvider);
    }

    /**
     * @param tableViewer parent viewer
     * @param title of column
     * @param bound of column
     * @return column
     */
    private TableViewerColumn createTableViewerColumn(TableViewer tableViewer, String title, int bound) {
        final TableViewerColumn viewerColumn = new TableViewerColumn(tableViewer, SWT.NONE);
        final TableColumn column = viewerColumn.getColumn();
        column.setText(title);
        column.setWidth(bound);
        column.setResizable(true);
        column.setMoveable(true);
        return viewerColumn;
    }

    /** Content provider */
    private static class GeneralContentProvider implements IStructuredContentProvider {
        @Override
        public void dispose() {
            // noting
        }

        @Override
        public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
            // noting
        }

        @Override
        public Object[] getElements(Object inputElement) {
            if (inputElement != null && inputElement instanceof Map) {
                return ((Map) inputElement).entrySet().toArray();
            }
            return null;
        }
    }

    /** Creates the dont ask again check box
     * @param parent 
     */
    private void createDontAskCheckBox(Composite parent) {
        m_dontAskAgain = new Button(parent, SWT.CHECK);
        m_dontAskAgain.setText(Messages.InfoNaggerDialogToggleMsg);
        m_dontAskAgain.setSelection(
                Plugin.getDefault().getPreferenceStore().getBoolean(Constants.UPDATE_REUSED_PROJECT_KEY));
        GridData data = new GridData();
        data.grabExcessVerticalSpace = true;
        data.verticalAlignment = GridData.END;
        m_dontAskAgain.setLayoutData(data);
    }

    /** Disable the selection */
    @Override
    public void selectionChanged(final SelectionChangedEvent event) {
        if (!event.getSelection().isEmpty() && event.getSource() instanceof TableViewer) {
            ((TableViewer) event.getSource()).setSelection(StructuredSelection.EMPTY);
        }
    }

    /** Save the check box selection*/
    protected void okPressed() {
        Plugin.getDefault().getPreferenceStore().setValue(Constants.UPDATE_REUSED_PROJECT_KEY,
                m_dontAskAgain.getSelection());
        super.okPressed();
    }
}