org.eclipse.pde.api.tools.ui.internal.use.PatternSelectionPage.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.pde.api.tools.ui.internal.use.PatternSelectionPage.java

Source

/*******************************************************************************
 * Copyright (c) 2009, 2013 IBM Corporation and others.
 * 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:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
package org.eclipse.pde.api.tools.ui.internal.use;

import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerComparator;
import org.eclipse.jface.wizard.IWizardPage;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.pde.api.tools.ui.internal.ApiUIPlugin;
import org.eclipse.pde.api.tools.ui.internal.IApiToolsHelpContextIds;
import org.eclipse.pde.api.tools.ui.internal.SWTFactory;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.PlatformUI;

/**
 * Wizard page used to select the kind of pattern to create
 * 
 * @since 1.0.1
 */
public class PatternSelectionPage extends WizardPage {

    class PatternElement {
        String name = null, desc = null, imgid = null, pname = null;

        public PatternElement(String name, String desc, String imgid, String pname) {
            this.name = name;
            this.desc = desc;
            this.imgid = imgid;
            this.pname = pname;
        }
    }

    class LP extends LabelProvider {
        @Override
        public String getText(Object element) {
            return ((PatternElement) element).name;
        }

        @Override
        public Image getImage(Object element) {
            PatternElement pelement = (PatternElement) element;
            if (pelement.imgid != null) {
                return ApiUIPlugin.getSharedImage(pelement.imgid);
            }
            return null;
        }
    }

    static final String PAGE_NAME = "select"; //$NON-NLS-1$

    final PatternElement[] fgelements = {
            new PatternElement(Messages.PatternSelectionPage_package_pattern,
                    Messages.PatternSelectionPage_package_pattern_desc, null, DescriptionPatternPage.PAGE_NAME),
            new PatternElement(Messages.PatternSelectionPage_archive_pattern,
                    Messages.PatternSelectionPage_archive_pattern_desc, null, ArchivePatternPage.PAGE_NAME),
            new PatternElement(Messages.PatternSelectionPage_report_conversion_pattern,
                    Messages.PatternSelectionPage_report_conversion_pattern_desc, null,
                    ReportPatternPage.PAGE_NAME) };

    TableViewer viewer = null;
    Text description = null;

    /**
     * Constructor
     */
    protected PatternSelectionPage() {
        super(PAGE_NAME, Messages.PatternSelectionPage_select_pattern, null);
    }

    /*
     * (non-Javadoc)
     * @see
     * org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets
     * .Composite)
     */
    @Override
    public void createControl(Composite parent) {
        Composite comp = SWTFactory.createComposite(parent, 1, 2, GridData.FILL_BOTH);
        SWTFactory.createWrapLabel(comp, Messages.PatternSelectionPage_pattern_types, 1);
        this.viewer = new TableViewer(new Table(comp, SWT.SINGLE | SWT.BORDER | SWT.FULL_SELECTION));
        this.viewer.setLabelProvider(new LP());
        this.viewer.setContentProvider(new ArrayContentProvider());
        this.viewer.setInput(fgelements);
        this.viewer.addSelectionChangedListener(new ISelectionChangedListener() {
            @Override
            public void selectionChanged(SelectionChangedEvent event) {
                String desc = getSelectedElement().desc;
                PatternSelectionPage.this.description
                        .setText((desc == null ? Messages.PatternSelectionPage_no_desc : desc));
                setPageComplete(isPageComplete());
            }
        });
        this.viewer.setComparator(new ViewerComparator() {
            @Override
            public int compare(Viewer viewer, Object e1, Object e2) {
                return ((PatternElement) e1).name.compareTo(((PatternElement) e2).name);
            }
        });

        GridData gd = new GridData(GridData.FILL_HORIZONTAL);
        gd.heightHint = 100;
        this.viewer.getTable().setLayoutData(gd);
        SWTFactory.createHorizontalSpacer(comp, 1);
        SWTFactory.createWrapLabel(comp, Messages.PatternSelectionPage_description, 1);
        this.description = new Text(comp, SWT.BORDER | SWT.READ_ONLY | SWT.WRAP);
        this.description.setEnabled(false);
        gd = new GridData(GridData.FILL_HORIZONTAL);
        gd.heightHint = 50;
        this.description.setLayoutData(gd);
        if (fgelements != null && fgelements.length > 0) {
            this.viewer.setSelection(new StructuredSelection(this.viewer.getElementAt(0)), true);
        }
        setControl(comp);
        PlatformUI.getWorkbench().getHelpSystem().setHelp(getControl(),
                IApiToolsHelpContextIds.APITOOLS_PATTERN_SELECTION_WIZARD_PAGE);
    }

    /*
     * (non-Javadoc)
     * @see org.eclipse.jface.wizard.WizardPage#isPageComplete()
     */
    @Override
    public boolean isPageComplete() {
        if (this.viewer.getSelection().isEmpty()) {
            setErrorMessage(Messages.PatternSelectionPage_must_select_type);
            return false;
        }
        setErrorMessage(null);
        setMessage(Messages.PatternSelectionPage_select_type);
        return true;
    }

    /**
     * @return the selected element in the table
     */
    PatternElement getSelectedElement() {
        IStructuredSelection ss = (IStructuredSelection) this.viewer.getSelection();
        return (PatternElement) ss.getFirstElement();
    }

    /*
     * (non-Javadoc)
     * @see org.eclipse.jface.wizard.WizardPage#getNextPage()
     */
    @Override
    public IWizardPage getNextPage() {
        return getWizard().getPage(nextPage());
    }

    /**
     * @return the id of the next page to show based on the selection on this
     *         page
     */
    public String nextPage() {
        PatternElement element = getSelectedElement();
        if (element != null) {
            return element.pname;
        }
        return null;
    }
}