package org.eclipselabs.spray.xtext.ui.wizard; import org.eclipse.core.resources.IWorkspace; import org.eclipse.ui.dialogs.WizardNewProjectCreationPage; import org.eclipse.xtext.ui.wizard.IProjectCreator; import org.eclipse.xtext.ui.wizard.IProjectInfo; import org.eclipse.xtext.ui.wizard.XtextNewProjectWizard; import org.eclipselabs.spray.xtext.ui.SprayUiModule; import com.google.inject.Inject; import com.google.inject.name.Named; public class SprayNewProjectWizard extends XtextNewProjectWizard { private WizardNewProjectCreationPage mainPage; private SprayGeneratorSettingsPage generatorSettingsPage; private SprayProjectInfo projectInfo; @Inject private IWorkspace workspace; @Inject @Named(value = SprayUiModule.NEW_PROJECT_NAME) private String newProjectName; @Inject public SprayNewProjectWizard(IProjectCreator projectCreator) { super(projectCreator); setWindowTitle("New Spray Project"); } /** * Use this method to add pages to the wizard. * The one-time generated version of this class will add a default new project page to the wizard. */ public void addPages() { mainPage = new SprayWizardNewProjectCreationPage("basicNewProjectPage"); mainPage.setTitle("Spray Project"); mainPage.setDescription("Create a new Spray project."); ((SprayWizardNewProjectCreationPage) mainPage).setProjectInfo((SprayProjectInfo) getProjectInfo()); String projectName = newProjectName; // check if project with default name already exists. if (!workspace.getRoot().getProject(newProjectName).exists()) { mainPage.setInitialProjectName(projectName); } else { // append counter until project with appended counter does not exist int i = 1; do { projectName = newProjectName + i; if (!workspace.getRoot().getProject(projectName).exists()) { mainPage.setInitialProjectName(projectName); break; } i++; } while (true); } addPage(mainPage); generatorSettingsPage = new SprayGeneratorSettingsPage(); generatorSettingsPage.setProjectInfo((SprayProjectInfo) getProjectInfo()); addPage(generatorSettingsPage); } /** * Use this method to read the project settings from the wizard pages and feed them into the project info class. */ @Override protected IProjectInfo getProjectInfo() { if (projectInfo == null) { projectInfo = new org.eclipselabs.spray.xtext.ui.wizard.SprayProjectInfo(); } projectInfo.setProjectName(mainPage.getProjectName()); return projectInfo; } }