org.eclipse.jpt.common.ui.internal.wizards.JavaProjectWizardPage.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.jpt.common.ui.internal.wizards.JavaProjectWizardPage.java

Source

/*******************************************************************************
 * Copyright (c) 2010, 2013 Oracle. 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:
 *     Oracle - initial API and implementation
 ******************************************************************************/
package org.eclipse.jpt.common.ui.internal.wizards;

import org.eclipse.core.resources.IProject;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.jpt.common.core.internal.utility.ProjectTools;
import org.eclipse.jpt.common.ui.internal.WorkbenchTools;
import org.eclipse.jpt.common.utility.internal.ArrayTools;
import org.eclipse.jpt.common.utility.internal.StringTools;
import org.eclipse.jpt.common.utility.internal.iterable.IterableTools;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.graphics.Image;
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 org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableItem;

/**
 *  JavaProjectWizardPage
 */
public class JavaProjectWizardPage extends WizardPage {

    private IJavaProject javaProject;
    private String destinationLabel;
    private Table projectTable;
    private TableViewer projectTableViewer;

    private static String SELECT_PROJECT_PAGE_NAME = "SelectJavaProject"; //$NON-NLS-1$
    private static int PROJECT_NAME_COLUMN_INDEX = 0;

    // ********** constructor **********

    public JavaProjectWizardPage(IJavaProject javaProject) {
        super(SELECT_PROJECT_PAGE_NAME);

        this.javaProject = javaProject;
    }

    // ********** IDialogPage implementation  **********

    public void createControl(Composite parent) {
        Composite composite = new Composite(parent, SWT.NULL);
        GridLayout layout = new GridLayout();
        layout.numColumns = 1;
        composite.setLayout(layout);

        this.buildLabel(composite, this.destinationLabel);

        this.projectTable = this.buildProjectTable(composite, this.buildProjectTableSelectionListener());

        this.projectTableViewer = this.buildProjectTableViewer(this.projectTable,
                this.buildProjectTableLabelProvider(), this.buildProjectTableContentProvider());
        this.fillProjectList();
        this.setControl(composite);
        this.setTableSelection(this.javaProject);
        this.validate();
    }

    // ********** listeners **********

    private SelectionListener buildProjectTableSelectionListener() {
        return new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                selectedProjectChanged();
            }

            @Override
            public void widgetDefaultSelected(SelectionEvent e) {
                widgetSelected(e);
            }

            @Override
            public String toString() {
                return "PromptProjectWizardPage project table selection listener"; //$NON-NLS-1$
            }
        };
    }

    // ********** listener callbacks **********

    protected void selectedProjectChanged() {
        if (this.projectTable.getSelectionIndex() != -1) {
            TableItem item = this.projectTable.getItem(this.projectTable.getSelectionIndex());
            String projectName = item.getText(0);
            if (!StringTools.isBlank(projectName)) {

                IProject project = this.javaProject.getProject().getWorkspace().getRoot().getProject(projectName);
                this.setJavaProject(JavaCore.create(project));
                this.validate();
            }
        }
    }

    // ********** intra-wizard methods **********

    public IJavaProject getJavaProject() {
        return this.javaProject;
    }

    public void setDestinationLabel(String destinationLabel) {
        this.destinationLabel = destinationLabel;
    }

    // ********** protected methods **********

    protected void setTableSelection(IJavaProject javaProject) {
        if (javaProject != null) {
            String projectName = javaProject.getProject().getName();
            for (TableItem item : this.projectTable.getItems()) {
                if (item.getText(0).equals(projectName)) {
                    this.projectTable.setSelection(item);
                }
            }
        }
    }

    protected void fillProjectList() {
        this.projectTableViewer.setInput(this.getSortedJavaProjectsNames());
    }

    // ********** internal methods **********

    private void validate() {
        this.setPageComplete(this.projectTable.getSelectionIndex() != -1);
    }

    private void setJavaProject(IJavaProject project) {
        this.javaProject = project;
    }

    private String[] getSortedJavaProjectsNames() {
        return ArrayTools.sort(this.getJavaProjectsNames());
    }

    private String[] getJavaProjectsNames() {
        return ArrayTools.array(IterableTools.transform(this.getJavaProjects(), ProjectTools.NAME_TRANSFORMER),
                StringTools.EMPTY_STRING_ARRAY);
    }

    protected Iterable<IProject> getJavaProjects() {
        return IterableTools.filter(this.getProjects(), ProjectTools.IS_JAVA_PROJECT);
    }

    protected Iterable<IProject> getProjects() {
        return IterableTools.iterable(this.javaProject.getProject().getWorkspace().getRoot().getProjects());
    }

    // ********** inner classes **********

    private final class ProjectTableLabelProvider extends LabelProvider implements ITableLabelProvider {

        public Image getColumnImage(Object element, int columnIndex) {
            return (columnIndex == PROJECT_NAME_COLUMN_INDEX)
                    ? WorkbenchTools.getSharedImage(org.eclipse.ui.ide.IDE.SharedImages.IMG_OBJ_PROJECT)
                    : null;
        }

        public String getColumnText(Object element, int columnIndex) {
            assert element instanceof String;
            String projectName = (String) element;
            if (columnIndex == PROJECT_NAME_COLUMN_INDEX)
                return projectName;
            return null;
        }
    }

    private final class ProjectTableContentProvider implements IStructuredContentProvider {

        public Object[] getElements(Object inputElement) {
            return ((String[]) inputElement);
        }

        public void dispose() {
        }

        public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
        }
    }

    // ********** UI components **********

    private ITableLabelProvider buildProjectTableLabelProvider() {
        return new ProjectTableLabelProvider();
    }

    private IStructuredContentProvider buildProjectTableContentProvider() {
        return new ProjectTableContentProvider();
    }

    private Label buildLabel(Composite parent, String text) {
        Label label = new Label(parent, SWT.NONE);
        label.setText(text);
        return label;
    }

    private Table buildProjectTable(Composite parent, SelectionListener listener) {
        TableViewer tableViewer = new TableViewer(parent, SWT.SINGLE | SWT.BORDER | SWT.V_SCROLL | SWT.VIRTUAL);

        Table table = tableViewer.getTable();
        table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
        table.addSelectionListener(listener);
        return table;
    }

    private TableViewer buildProjectTableViewer(Table parent, ITableLabelProvider labelProvider,
            IStructuredContentProvider contentProvider) {

        TableViewer tableViewer = new TableViewer(parent);
        tableViewer.setLabelProvider(labelProvider);
        tableViewer.setContentProvider(contentProvider);
        return tableViewer;
    }
}