/*=============================================================================# # Copyright (c) 2005-2016 Stephan Wahlbrink (WalWare.de) 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: # Stephan Wahlbrink - initial API and implementation #=============================================================================*/ package de.walware.statet.r.internal.ui.wizards; import java.lang.reflect.InvocationTargetException; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.SubProgressMonitor; import org.eclipse.ui.dialogs.WizardNewProjectReferencePage; import de.walware.ecommons.ui.util.DialogUtil; import de.walware.statet.ext.ui.wizards.NewElementWizard; import de.walware.statet.ext.ui.wizards.StatetWizardsMessages; import de.walware.statet.r.core.RProjects; import de.walware.statet.r.internal.ui.RUIPlugin; import de.walware.statet.r.ui.RUI; public class NewRPkgProjectWizard extends NewElementWizard { private NewRProjectWizardPage fFirstPage; private RPkgProjectWizardPage fRPkgPage; private WizardNewProjectReferencePage fReferencePage; private ProjectCreator fNewRProject; public NewRPkgProjectWizard() { setDialogSettings(DialogUtil.getDialogSettings(RUIPlugin.getDefault(), "NewElementWizard")); //$NON-NLS-1$ setDefaultPageImageDescriptor(RUI.getImageDescriptor(RUIPlugin.IMG_WIZBAN_NEW_RPKGPROJECT)); setWindowTitle(Messages.NewRPkgProjectWizard_title); } @Override public void addPages() { super.addPages(); fFirstPage = new NewRProjectWizardPage(getSelection(), Messages.NewRPkgProjectWizardPage_title); addPage(fFirstPage); fRPkgPage = new RPkgProjectWizardPage(fFirstPage); addPage(fRPkgPage); // only add page if there are already projects in the workspace if (ResourcesPlugin.getWorkspace().getRoot().getProjects().length > 0) { fReferencePage = new WizardNewProjectReferencePage("BasicProjectReferencePage"); //$NON-NLS-1$ fReferencePage.setTitle(StatetWizardsMessages.NewProjectReferencePage_title); fReferencePage.setDescription(StatetWizardsMessages.NewProjectReferencePage_description); addPage(fReferencePage); } } // protected ISchedulingRule getSchedulingRule() { // root-rule required to change project description @Override public boolean performFinish() { final String pkgName = fRPkgPage.getPkgName(); fNewRProject = new ProjectCreator( fFirstPage.getProjectName(), (fFirstPage.useDefaults()) ? null : fFirstPage.getLocationPath(), (fReferencePage != null) ? fReferencePage.getReferencedProjects() : null, fFirstPage.getSelectedWorkingSets() ) { @Override protected void doConfigProject(final IProject project, final IProgressMonitor monitor) throws CoreException { RProjects.setupRPkgProject(fNewRProject.getProjectHandle(), null, pkgName, monitor); } }; final boolean result = super.performFinish(); if (result && fNewRProject.getProjectHandle() != null) { updatePerspective(); selectAndReveal(fNewRProject.getProjectHandle()); } return result; } @Override protected void doFinish(final IProgressMonitor monitor) throws InterruptedException, CoreException, InvocationTargetException { try { monitor.beginTask("Create new R project...", 1000); //$NON-NLS-1$ fNewRProject.createProject(new SubProgressMonitor(monitor, 1000) ); // fFirstPage.saveSettings(); } finally { monitor.done(); } } }