com.arc.cdt.importer.internal.ui.ProjectSelectionWizardPage.java Source code

Java tutorial

Introduction

Here is the source code for com.arc.cdt.importer.internal.ui.ProjectSelectionWizardPage.java

Source

/*******************************************************************************
 * Copyright (c) 2005-2012 Synopsys, Incorporated
 * 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:
 * Synopsys, Inc - Initial implementation 
 *******************************************************************************/
package com.arc.cdt.importer.internal.ui;

import java.io.IOException;

import org.eclipse.cdt.managedbuilder.core.IProjectType;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.CheckStateChangedEvent;
import org.eclipse.jface.viewers.CheckboxTableViewer;
import org.eclipse.jface.viewers.ICheckStateListener;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.swt.SWT;
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.Button;
import org.eclipse.swt.widgets.Composite;

import com.arc.cdt.importer.ImporterPlugin;
import com.arc.cdt.importer.core.ICodewrightProject;
import com.arc.cdt.importer.core.ICodewrightProjectSpace;
import com.arc.cdt.importer.core.PSPException;

/**
 * This wizard displays the projects extracted from the
 * CodeWright project-space file and offers the user the option to
 * select a subset if more then one are specified.
 * @author davidp
 * @currentOwner <a href="mailto:davidp@arc.com">davidp</a>
 * @version $Revision$
 * @lastModified $Date$
 * @lastModifiedBy $Author$
 * @reviewed 0 $Revision:1$
 */
class ProjectSelectionWizardPage extends WizardPage {

    private static final String PAGE_NAME = "ProjectSelect";
    private static final String PROJECT_IMAGE_KEY = "MetaDeveloper.project.image";
    private ICodewrightProjectSpace mProjectSpace;
    private CheckboxTableViewer mViewer;
    private static final Object[] EMPTY = new Object[0];
    private String mProjectSpaceError = null;
    private String mProjectError = null;

    /**
     */
    public ProjectSelectionWizardPage() {
        super(PAGE_NAME, "Project selection from Project space", null);

        Image image = ImporterPlugin.getDefault().getImageRegistry().get(PROJECT_IMAGE_KEY);
        if (image == null) {
            ImageDescriptor desc = ImporterPlugin.getDefault().getImageDescriptor("icons/arc.gif");
            if (desc != null)
                ImporterPlugin.getDefault().getImageRegistry().put(PROJECT_IMAGE_KEY, desc);
        }

        this.setTitle("Project selection");
        this.setDescription("Select specific projects to be imported");
    }

    public void createControl(Composite parent) {
        Composite composite = new Composite(parent, SWT.NULL);
        composite.setLayout(new GridLayout(2, false));
        mViewer = CheckboxTableViewer.newCheckList(composite, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER);
        GridData gridData = new GridData(GridData.FILL_BOTH);
        gridData.verticalSpan = 3;
        mViewer.getControl().setLayoutData(gridData);

        mViewer.setContentProvider(new IStructuredContentProvider() {

            public Object[] getElements(Object inputElement) {
                if (inputElement instanceof ICodewrightProjectSpace) {
                    try {
                        return ((ICodewrightProjectSpace) inputElement).getProjects();
                    } catch (Exception e) {
                        return new Exception[] { e };
                    }
                } else
                    return EMPTY;
            }

            public void dispose() {
            }

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

        });

        mViewer.setLabelProvider(new LabelProvider() {
            @Override
            public String getText(Object element) {
                if (element instanceof ICodewrightProject) {
                    return ((ICodewrightProject) element).getName();
                } else if (element instanceof Exception) {
                    return ((Exception) element).getMessage();
                } else
                    return "";
            }

            @Override
            public Image getImage(Object element) {
                if (element instanceof ICodewrightProject) {
                    return ImporterPlugin.getDefault().getImageRegistry().get(PROJECT_IMAGE_KEY);
                }
                return null;
            }

        });

        mViewer.addCheckStateListener(new ICheckStateListener() {

            public void checkStateChanged(CheckStateChangedEvent event) {
                validate();
            }
        });

        Button setAllButton = new Button(composite, SWT.PUSH);
        setAllButton.setText("Select All");
        setAllButton.setLayoutData(new GridData());
        setAllButton.addSelectionListener(new SelectionListener() {

            public void widgetSelected(SelectionEvent e) {
                mViewer.setAllChecked(true);
                validate();
            }

            public void widgetDefaultSelected(SelectionEvent e) {
                widgetSelected(e);

            }
        });

        Button clearAllButton = new Button(composite, SWT.PUSH);
        clearAllButton.setText("Clear All");
        clearAllButton.setLayoutData(new GridData());
        clearAllButton.addSelectionListener(new SelectionListener() {

            public void widgetSelected(SelectionEvent e) {
                mViewer.setAllChecked(false);
                validate();
            }

            public void widgetDefaultSelected(SelectionEvent e) {
                widgetSelected(e);

            }
        });

        setControl(composite);

    }

    private void validate() {
        Object[] elements = mViewer.getCheckedElements();
        ICodewrightProject projects[] = new ICodewrightProject[elements.length];
        System.arraycopy(elements, 0, projects, 0, projects.length);
        getAccessModel().setSelectedProjects(projects);
        mProjectError = null;
        if (projects.length == 0) {
            mProjectError = "No project selected";
        } else {
            IProjectType type = null;
            ICodewrightProject last = null;
            for (ICodewrightProject p : projects) {
                IProjectType t = AccessModel.getProjectType(p);
                if (t == null) {
                    mProjectError = "Project " + p.getName() + " is of unknown type " + p.getTarget();
                } else if (type == null) {
                    type = t;
                    last = p;
                } else if (type != t) {
                    mProjectError = "Project " + p.getName() + " is of type " + p.getTarget()
                            + (p.isLibrary() ? "(library)" : "(exe)") + ", but project "
                            + (last != null
                                    ? last.getName() + " is of type " + last.getTarget()
                                            + (last.isLibrary() ? "(library)" : "(exe)")
                                    : "???");
                }
            }
        }
        setErrorState();
    }

    private void setProjectSpace(ICodewrightProjectSpace projectSpace) {
        mProjectSpaceError = null;
        if (mProjectSpace != projectSpace) {
            mProjectSpace = projectSpace;
            if (projectSpace != null) {
                ICodewrightProject projects[] = null;
                try {
                    projects = projectSpace.getProjects();
                    if (projects == null || projects.length == 0) {
                        mProjectSpaceError = "No projects in project space";
                    }
                } catch (IOException e) {
                    mProjectSpaceError = "Error occurred reading file: " + e.getMessage();
                    mProjectSpace = null;
                } catch (PSPException e) {
                    mProjectSpaceError = e.getMessage();
                    mProjectSpace = null;
                }

            }
            mViewer.setInput(mProjectSpace);
            mViewer.setAllChecked(true);
            validate();
            setErrorState();
        }
    }

    private void setErrorState() {
        if (mProjectSpaceError != null) {
            setErrorMessage(mProjectSpaceError);
            setPageComplete(false);
        } else if (mProjectError != null) {
            setErrorMessage(mProjectError);
            setPageComplete(false);
        } else {
            setErrorMessage(null);
            setPageComplete(mViewer.getCheckedElements().length > 0);
        }
    }

    @Override
    public void setVisible(boolean visible) {
        super.setVisible(visible);
        if (visible) {
            try {
                setProjectSpace(getAccessModel().getProjectSpace());
            } catch (Exception e) {
                mProjectSpaceError = e.getMessage();
                setProjectSpace(null);
                setErrorState();
            }
        }
    }

    private AccessModel getAccessModel() {
        return ((CodeWrightImportWizard) getWizard()).getAccessModel();
    }
}