package org.lejos.ev3.ldt.wizard;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.IExecutableExtension;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.ui.wizards.NewJavaProjectWizardPageOne;
import org.eclipse.jdt.ui.wizards.NewJavaProjectWizardPageTwo;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.wizard.Wizard;
import org.eclipse.ui.INewWizard;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.IWorkingSet;
import org.eclipse.ui.wizards.newresource.BasicNewProjectResourceWizard;
import org.eclipse.ui.wizards.newresource.BasicNewResourceWizard;
import org.lejos.ev3.ldt.util.LeJOSEV3Util;
public abstract class AbstractNewProjectWizard extends Wizard implements INewWizard, IExecutableExtension{
/*
* code partly inspired or copied from
* org.eclipse.jdt.internal.ui.wizards.JavaProjectWizard
*/
protected NewJavaProjectWizardPageOne pageOne;
protected NewJavaProjectWizardPageTwo pageTwo;
protected IConfigurationElement fConfigElement;
protected IStructuredSelection fSelection;
protected IWorkbench fWorkbench;
public void init(IWorkbench workbench, IStructuredSelection selection) {
fWorkbench = workbench;
fSelection = selection;
}
public void setInitializationData(IConfigurationElement cfig, String propertyName, Object data) {
fConfigElement= cfig;
}
private IWorkbenchPart getActivePart() {
IWorkbenchWindow activeWindow= fWorkbench.getActiveWorkbenchWindow();
if (activeWindow != null) {
IWorkbenchPage activePage= activeWindow.getActivePage();
if (activePage != null) {
return activePage.getActivePart();
}
}
return null;
}
@Override
public void addPages() {
addPage(pageOne);
addPage(pageTwo);
pageOne.init(fSelection, getActivePart());
}
@Override
public boolean performCancel() {
pageTwo.performCancel();
return super.performCancel();
}
@Override
public boolean performFinish() {
NullProgressMonitor pm = new NullProgressMonitor();
try {
pageTwo.performFinish(pm);
} catch (Exception e) {
//TODO not sure how to handle this. There don't seem to be any ways to report an error back to the caller.
LeJOSEV3Util.log(e);
}
IJavaProject newProject = pageTwo.getJavaProject();
IWorkingSet[] workingSets= pageOne.getWorkingSets();
if (workingSets != null && workingSets.length > 0) {
fWorkbench.getWorkingSetManager().addToWorkingSets(newProject, workingSets);
}
BasicNewProjectResourceWizard.updatePerspective(fConfigElement);
BasicNewResourceWizard.selectAndReveal(newProject.getProject(), fWorkbench.getActiveWorkbenchWindow());
return true;
}
}