/*=============================================================================#
# 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.WizardNewProjectCreationPage;
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 NewRProjectWizard extends NewElementWizard {
private WizardNewProjectCreationPage fFirstPage;
private WizardNewProjectReferencePage fReferencePage;
private ProjectCreator fNewRProject;
public NewRProjectWizard() {
setDialogSettings(DialogUtil.getDialogSettings(RUIPlugin.getDefault(), "NewElementWizard")); //$NON-NLS-1$
setDefaultPageImageDescriptor(RUI.getImageDescriptor(RUIPlugin.IMG_WIZBAN_NEW_RPROJECT));
setWindowTitle(Messages.NewRProjectWizard_title);
}
@Override
public void addPages() {
super.addPages();
fFirstPage = new NewRProjectWizardPage(getSelection(), null);
addPage(fFirstPage);
// 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() {
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.setupRProject(fNewRProject.getProjectHandle(), 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();
}
}
}