eu.geclipse.ui.wizards.NewGridProjectWizard.java Source code

Java tutorial

Introduction

Here is the source code for eu.geclipse.ui.wizards.NewGridProjectWizard.java

Source

/*****************************************************************************
 * Copyright (c) 2006, 2007 g-Eclipse Consortium 
 * 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
 *
 * Initial development of the original code was made for the
 * g-Eclipse project founded by European Union
 * project number: FP6-IST-034327  http://www.geclipse.eu/
 *
 * Contributors:
 *    Mathias Stuempert - initial API and implementation
 *    Harald Kornmayer 
 *    Pawel Wolniewicz
 *****************************************************************************/

package eu.geclipse.ui.wizards;

import java.lang.reflect.InvocationTargetException;
import java.net.URL;

import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.Status;
import org.eclipse.jface.dialogs.ErrorDialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.MessageDialogWithToggle;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.wizard.IWizardPage;
import org.eclipse.jface.wizard.Wizard;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.INewWizard;
import org.eclipse.ui.IPerspectiveDescriptor;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.actions.WorkspaceModifyDelegatingOperation;
import org.eclipse.ui.dialogs.WizardNewProjectCreationPage;
import org.eclipse.ui.dialogs.WizardNewProjectReferencePage;

import eu.geclipse.ui.internal.Activator;
import eu.geclipse.ui.internal.preference.PerspectivePreferencePage;

/**
 * Wizard to create Grid Project in the Eclipse workspace. 
 * 
 * @author korn
 */

public class NewGridProjectWizard extends Wizard implements INewWizard {

    private WizardNewProjectCreationPage creationPage;

    private VoSelectionWizardPage voPage;

    private GridProjectStructureWizardPage structurePage;

    private WizardNewProjectReferencePage referencePage;

    private IProject project = null;

    /**
     *  when the wizard is finished, the Grid project is created. 
     */
    @Override
    public boolean performFinish() {
        IProject proj = createNewProject();
        if (proj != null) {
            switchPerspective();
        }
        return proj != null;
    }

    private void switchPerspective() {
        final IWorkbench workBench = Activator.getDefault().getWorkbench();
        Display display = workBench.getDisplay();
        display.asyncExec(new Runnable() {

            public void run() {
                IWorkbenchPage page = null;
                IWorkbenchWindow window = workBench.getActiveWorkbenchWindow();
                if (window != null) {
                    page = window.getActivePage();
                    if (page != null) {
                        IPreferenceStore ps = Activator.getDefault().getPreferenceStore();
                        String newPerspectiveId = ps.getString(PerspectivePreferencePage.KEY_DEFAULT_PERSPECTIVE);
                        if (newPerspectiveId == null) {
                            return;
                        }
                        IPerspectiveDescriptor perspectiveDescriptor = page.getPerspective();
                        if (perspectiveDescriptor != null
                                && !perspectiveDescriptor.getId().equals(newPerspectiveId)) {
                            //check if we are in one of g-Eclipse perspectives
                            if (perspectiveDescriptor.getId().equals(Activator.ID_USER_PERSPECTIVE)
                                    || perspectiveDescriptor.getId().equals(Activator.ID_OPERATOR_PERSPECTIVE)
                                    || perspectiveDescriptor.getId().equals(Activator.ID_DEVELOPER_PERSPECTIVE)) {
                                //check if it is allowed to switch from g-Eclipse perspective
                                if (ps.getBoolean(
                                        PerspectivePreferencePage.KEY_NOT_SWITCH_FROM_GECLIPSE_PERSPECTIVE)) {
                                    return;
                                }
                            }
                            try {
                                String newLine = System.getProperty("line.separator"); //$NON-NLS-1$
                                String message = Messages
                                        .getString("NewGridProjectWizard.PerspectiveSwitchingInfo_line1"); //$NON-NLS-1$
                                message += newLine + newLine;
                                message += Messages
                                        .getString("NewGridProjectWizard.PerspectiveSwitchingInfo_line2"); //$NON-NLS-1$
                                message += newLine + newLine;
                                message += Messages
                                        .getString("NewGridProjectWizard.PerspectiveSwitchingInfo_line3"); //$NON-NLS-1$
                                String toggleMessage = Messages.getString("NewGridProjectWizard.RememberQuestion"); //$NON-NLS-1$
                                String ask = ps.getString(PerspectivePreferencePage.KEY_REMEMBER_SWITCHING);
                                if (MessageDialogWithToggle.NEVER.equalsIgnoreCase(ask)) {
                                    return;
                                }
                                if (MessageDialogWithToggle.ALWAYS.equalsIgnoreCase(ask)
                                        || MessageDialogWithToggle
                                                .openYesNoQuestion(window.getShell(),
                                                        Messages.getString(
                                                                "NewGridProjectWizard.ConfirmPerpectiveSwitch"), //$NON-NLS-1$
                                                        message, toggleMessage, false, ps,
                                                        PerspectivePreferencePage.KEY_REMEMBER_SWITCHING)
                                                .getReturnCode() == IDialogConstants.YES_ID) {
                                    String pId = ps.getString(PerspectivePreferencePage.KEY_DEFAULT_PERSPECTIVE);
                                    window.getWorkbench().showPerspective(pId, window);
                                }
                            } catch (Exception e) {
                                Status status = new Status(Status.ERROR, Activator.PLUGIN_ID,
                                        Messages.getString("NewGridProjectWizard.PerspectiveSwitchingError"), //$NON-NLS-1$
                                        e);
                                ErrorDialog.openError(window.getShell(),
                                        Messages.getString("NewGridProjectWizard.PerspectiveSwitchingError"), //$NON-NLS-1$
                                        Messages.getString("NewGridProjectWizard.ManualPerspectiveSwitching"), //$NON-NLS-1$
                                        status);
                            }
                        }
                    }
                }
            }
        });
    }

    /**
     * Initialize the Grid project in the Grid project in the workspace
     */
    public void init(final IWorkbench workbench, final IStructuredSelection selection) {
        setWindowTitle(Messages.getString("NewGridProjectWizard.windowTitle")); //$NON-NLS-1$
        URL imgUrl = Activator.getDefault().getBundle().getEntry("icons/wizban/newgridprj_wiz.gif"); //$NON-NLS-1$
        setDefaultPageImageDescriptor(ImageDescriptor.createFromURL(imgUrl));
    }

    /**
     * Adds the different pages for the wizard i.e. for VO selection, Project Structure,
     * reference projects.  
     */
    @Override
    public void addPages() {

        this.creationPage = new WizardNewProjectCreationPage("newGridProjectBasicPage"); //$NON-NLS-1$
        this.creationPage.setTitle(Messages.getString("NewGridProjectWizard.basic_page_title")); //$NON-NLS-1$
        this.creationPage.setDescription(Messages.getString("NewGridProjectWizard.basic_page_description")); //$NON-NLS-1$
        addPage(this.creationPage);

        this.voPage = new VoSelectionWizardPage(false);
        addPage(this.voPage);

        this.structurePage = new GridProjectStructureWizardPage();
        addPage(this.structurePage);

        if (ResourcesPlugin.getWorkspace().getRoot().getProjects().length > 0) {
            this.referencePage = new WizardNewProjectReferencePage("newGridProjectReferencePage"); //$NON-NLS-1$
            this.referencePage.setTitle(Messages.getString("NewGridProjectWizard.reference_page_title")); //$NON-NLS-1$
            this.referencePage
                    .setDescription(Messages.getString("NewGridProjectWizard.reference_page_description")); //$NON-NLS-1$
            addPage(this.referencePage);
        }

    }

    @Override
    public boolean canFinish() {
        boolean result = false;
        IWizardPage currentPage = getContainer().getCurrentPage();
        if (currentPage != this.creationPage) {
            result = super.canFinish();
        }
        return result;
    }

    /**
     * Creates the Grid Project in the workspace and 
     * @return
     */
    private IProject createNewProject() {

        if ((this.project == null) && (this.creationPage != null)) {

            GridProjectProperties properties = new GridProjectProperties();

            properties.setProjectName(this.creationPage.getProjectName());
            properties.setProjectLocation(
                    this.creationPage.useDefaults() ? null : this.creationPage.getLocationPath());
            properties.setProjectVo(this.voPage.getSelectedVos()[0]);

            properties.addProjectFolders(this.structurePage.getProjectFolders());

            if (this.referencePage != null) {
                properties.setReferencesProjects(this.referencePage.getReferencedProjects());
            }

            GridProjectCreationOperation creationOp = new GridProjectCreationOperation(properties);
            WorkspaceModifyDelegatingOperation modifyOp = new WorkspaceModifyDelegatingOperation(creationOp);

            // Create the new project
            try {
                getContainer().run(true, true, modifyOp);
                this.project = creationOp.getProject();
            } catch (InterruptedException intExc) {
                eu.geclipse.ui.internal.Activator.logException(intExc);
            } catch (InvocationTargetException itExc) {
                eu.geclipse.ui.internal.Activator.logException(itExc);
            }
        }
        return this.project;
    }
}