package sbt.eclipse.wizards;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IProjectDescription;
import org.eclipse.core.resources.IWorkspace;
import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.resources.WorkspaceJob;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Path;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.wizard.Wizard;
import org.eclipse.ui.IImportWizard;
import org.eclipse.ui.IWorkbench;
import sbt.eclipse.SbtClasspathContainer;
import sbt.eclipse.logic.ClasspathContainerConfigurer;
import sbt.eclipse.logic.ClasspathRemoverConfigurer;
import sbt.eclipse.logic.DefaultOutputPathConfigurer;
import sbt.eclipse.logic.SourceFoldersConfigurer;
import sbt.eclipse.logic.UnmanagedLibsConfigurer;
/**
* @author Joonas Javanainen
*
*/
public class SbtImportWizard extends Wizard implements IImportWizard {
private SbtImportWizardPage page;
/*
* (non-Javadoc)
*
* @see org.eclipse.jface.wizard.Wizard#performFinish()
*/
@Override
public boolean performFinish() {
if (!page.isPageComplete()) {
return false;
}
Job job = new WorkspaceJob("Importing SBT project") {
@Override
public IStatus runInWorkspace(IProgressMonitor monitor)
throws CoreException {
IWorkspace workspace = ResourcesPlugin.getWorkspace();
String name = page.getLoadedProperties().getProperty(
"project.name");
IProjectDescription description = workspace
.newProjectDescription(name);
description.setLocation(new Path(page.getRoot()
.getAbsolutePath()));
description.setNatureIds(new String[] { JavaCore.NATURE_ID });
IWorkspaceRoot root = workspace.getRoot();
IProject project = root.getProject(name);
project.create(description, monitor);
project.open(monitor);
new ClasspathRemoverConfigurer(project).run(monitor);
new DefaultOutputPathConfigurer(project).run(monitor);
new SourceFoldersConfigurer(project).run(monitor);
new UnmanagedLibsConfigurer(project).run(monitor);
new ClasspathContainerConfigurer(
SbtClasspathContainer.CLASSPATH_CONTAINER_ID, project)
.run(monitor);
return Status.OK_STATUS;
}
};
job.schedule();
return true;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.ui.IWorkbenchWizard#init(org.eclipse.ui.IWorkbench,
* org.eclipse.jface.viewers.IStructuredSelection)
*/
public void init(IWorkbench workbench, IStructuredSelection selection) {
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jface.wizard.Wizard#addPages()
*/
@Override
public void addPages() {
page = new SbtImportWizardPage("Import SBT project");
addPage(page);
}
}