com.nokia.carbide.internal.discovery.ui.wizard.AbstractImportExportPage.java Source code

Java tutorial

Introduction

Here is the source code for com.nokia.carbide.internal.discovery.ui.wizard.AbstractImportExportPage.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.internal.discovery.ui.wizard;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.jface.layout.GridLayoutFactory;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.CheckStateChangedEvent;
import org.eclipse.jface.viewers.CheckboxTableViewer;
import org.eclipse.jface.viewers.ColumnLabelProvider;
import org.eclipse.jface.viewers.ICheckStateListener;
import org.eclipse.jface.viewers.TableViewerColumn;
import org.eclipse.jface.viewers.ViewerSorter;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Image;
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.Label;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.Text;

import com.nokia.carbide.discovery.ui.Activator;
import com.nokia.carbide.discovery.ui.Messages;
import com.nokia.carbide.internal.discovery.ui.p2.FeatureInfo;

/**
 * Abstract superclass of import and export page
 */
abstract class AbstractImportExportPage extends WizardPage {

    protected Text pathText;
    protected Button browseButton;
    protected CheckboxTableViewer viewer;
    protected Button checkAllButton;
    protected Button checkNoneButton;
    protected static final ImageDescriptor FEATURE_IMGDESC = Activator.getImageDescriptor("icons/iu_obj.gif"); //$NON-NLS-1$
    protected Image featureImg;

    public AbstractImportExportPage(String pageName) {
        super(pageName);
    }

    public void createControl(Composite parent) {
        initializeDialogUnits(parent);
        featureImg = FEATURE_IMGDESC.createImage();

        Composite composite = new Composite(parent, SWT.NONE);
        GridLayoutFactory.swtDefaults().numColumns(2).applyTo(composite);
        GridDataFactory.fillDefaults().applyTo(composite);
        composite.setSize(composite.computeSize(SWT.DEFAULT, SWT.DEFAULT));

        Dialog.applyDialogFont(composite);
        setControl(composite);
    }

    protected void createBrowseGroup(Composite parent, String labelText) {
        Composite composite = new Composite(parent, SWT.NONE);
        GridLayoutFactory.fillDefaults().numColumns(3).applyTo(composite);
        GridDataFactory.fillDefaults().align(SWT.FILL, SWT.BEGINNING).grab(true, false).applyTo(composite);

        Label label = new Label(composite, SWT.NONE);
        label.setText(labelText);

        pathText = new Text(composite, SWT.BORDER);
        GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).grab(true, false).hint(250, SWT.DEFAULT)
                .applyTo(pathText);
        pathText.addModifyListener(new ModifyListener() {
            public void modifyText(ModifyEvent e) {
                setPageComplete(validatePage());
            }
        });
        browseButton = new Button(composite, SWT.PUSH);
        browseButton.setText(Messages.AbstractImportExportPage_BrowseButtonLabel);
        browseButton.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL));
        setButtonLayoutData(browseButton);

        new Label(parent, SWT.NONE); // spacer
    }

    protected void createViewerGroup(Composite parent, String labelText) {
        Label label = new Label(parent, SWT.NONE);
        label.setText(labelText);
        GridDataFactory.defaultsFor(label).span(2, 1).applyTo(label);

        viewer = CheckboxTableViewer.newCheckList(parent, SWT.BORDER);
        TableViewerColumn featureColumn = new TableViewerColumn(viewer, SWT.LEFT);
        featureColumn.getColumn().setText(Messages.AbstractImportExportPage_FeatureColTitle);
        featureColumn.setLabelProvider(new ColumnLabelProvider() {
            @Override
            public Image getImage(Object element) {
                return featureImg;
            }

            @Override
            public String getText(Object element) {
                if (element instanceof FeatureInfo)
                    return ((FeatureInfo) element).getId();
                return null;
            }
        });
        TableViewerColumn versionColumn = new TableViewerColumn(viewer, SWT.LEFT);
        versionColumn.getColumn().setText(Messages.AbstractImportExportPage_VersionColTitle);
        versionColumn.setLabelProvider(new ColumnLabelProvider() {
            @Override
            public String getText(Object element) {
                if (element instanceof FeatureInfo) {
                    return ((FeatureInfo) element).getVersion().toString();
                }
                return null;
            }
        });
        viewer.setSorter(new ViewerSorter());

        viewer.getControl().setLayoutData(
                new GridData(GridData.FILL_BOTH | GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL));
        viewer.setContentProvider(new ArrayContentProvider());
        viewer.getTable().setHeaderVisible(true);

        Composite buttonComposite = new Composite(parent, SWT.NONE);
        GridDataFactory.swtDefaults().align(SWT.END, SWT.BEGINNING).applyTo(buttonComposite);
        buttonComposite.setLayout(new GridLayout());
        checkAllButton = new Button(buttonComposite, SWT.PUSH);
        checkAllButton.setText(Messages.AbstractImportExportPage_CheckAllLabel);
        setButtonLayoutData(checkAllButton);
        checkAllButton.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                viewer.setAllChecked(true);
                enableButtons();
                setPageComplete(validatePage());
            }
        });
        checkNoneButton = new Button(buttonComposite, SWT.PUSH);
        checkNoneButton.setText(Messages.AbstractImportExportPage_CheckNoneLabel);
        setButtonLayoutData(checkNoneButton);
        checkNoneButton.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                viewer.setAllChecked(false);
                enableButtons();
                setPageComplete(validatePage());
            }
        });
        viewer.addCheckStateListener(new ICheckStateListener() {
            public void checkStateChanged(CheckStateChangedEvent event) {
                enableButtons();
                setPageComplete(validatePage());
            }
        });
    }

    protected abstract boolean validatePage();

    public Collection<FeatureInfo> getSelectedFeatures() {
        Object[] checkedElements = viewer.getCheckedElements();
        List<FeatureInfo> infos = new ArrayList<FeatureInfo>();
        for (Object o : checkedElements) {
            infos.add((FeatureInfo) o);
        }
        return infos;
    }

    protected void packColumns() {
        TableColumn[] columns = viewer.getTable().getColumns();
        for (TableColumn column : columns) {
            column.pack();
        }
    }

    protected void updateViewer() {
        packColumns();
        viewer.setAllChecked(true);
        enableButtons();
        setPageComplete(validatePage());
    }

    private void enableButtons() {
        checkAllButton.setEnabled(viewer.getTable().getItemCount() > viewer.getCheckedElements().length);
        checkNoneButton.setEnabled(viewer.getCheckedElements().length > 0);
    }

    @Override
    public void dispose() {
        super.dispose();
        featureImg.dispose();
    }
}