X-Git-Url: http://secure.phpeclipse.com diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/wizards/NewProjectCreationWizard.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/wizards/NewProjectCreationWizard.java new file mode 100644 index 0000000..d5ee680 --- /dev/null +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/wizards/NewProjectCreationWizard.java @@ -0,0 +1,99 @@ +package net.sourceforge.phpeclipse.wizards; + +import java.lang.reflect.InvocationTargetException; + +import net.sourceforge.phpeclipse.PHPeclipsePlugin; +import net.sourceforge.phpeclipse.PHPCore; +import org.eclipse.core.resources.IProject; +import org.eclipse.core.resources.IProjectDescription; +import org.eclipse.core.resources.IWorkspace; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IConfigurationElement; +import org.eclipse.core.runtime.IExecutableExtension; +import org.eclipse.core.runtime.IPath; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.Platform; +import org.eclipse.core.runtime.SubProgressMonitor; +import org.eclipse.jface.operation.IRunnableWithProgress; +import org.eclipse.ui.INewWizard; +import org.eclipse.ui.actions.WorkspaceModifyDelegatingOperation; +import org.eclipse.ui.dialogs.WizardNewProjectCreationPage; +import org.eclipse.ui.wizards.newresource.BasicNewProjectResourceWizard; +import org.eclipse.ui.wizards.newresource.BasicNewResourceWizard; + +public class NewProjectCreationWizard extends BasicNewResourceWizard implements INewWizard, IExecutableExtension { + protected WizardNewProjectCreationPage projectPage; + protected IConfigurationElement configurationElement; + protected IProject newProject; + + public NewProjectCreationWizard() { + setWindowTitle(PHPWizardMessages.getString("NewProjectCreationWizard.windowTitle")); + } + + public boolean performFinish() { + IRunnableWithProgress projectCreationOperation = new WorkspaceModifyDelegatingOperation(getProjectCreationRunnable()); + + try { + getContainer().run(false, true, projectCreationOperation); + } catch (Exception e) { + PHPeclipsePlugin.log(e); + return false; + } + + BasicNewProjectResourceWizard.updatePerspective(configurationElement); + selectAndReveal(newProject); + + return true; + } + + protected IRunnableWithProgress getProjectCreationRunnable() { + return new IRunnableWithProgress() { + public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { + int remainingWorkUnits = 10; + monitor.beginTask(PHPWizardMessages.getString("NewProjectCreationWizard.projectCreationMessage"), remainingWorkUnits); + + IWorkspace workspace = PHPeclipsePlugin.getWorkspace(); + newProject = projectPage.getProjectHandle(); + + IProjectDescription description = workspace.newProjectDescription(newProject.getName()); + IPath path = Platform.getLocation(); + IPath customPath = projectPage.getLocationPath(); + if (!path.equals(customPath)) { + path = customPath; + description.setLocation(path); + } + + try { + if (!newProject.exists()) { + newProject.create(description, new SubProgressMonitor(monitor, 1)); + remainingWorkUnits--; + } + if (!newProject.isOpen()) { + newProject.open(new SubProgressMonitor(monitor, 1)); + remainingWorkUnits--; + } + PHPCore.addPHPNature(newProject, new SubProgressMonitor(monitor, remainingWorkUnits)); + } catch (CoreException e) { + throw new InvocationTargetException(e); + } finally { + monitor.done(); + } + } + }; + } + + public void addPages() { + super.addPages(); + + projectPage = new WizardNewProjectCreationPage(PHPWizardMessages.getString("WizardNewProjectCreationPage.pageName")); + projectPage.setTitle(PHPWizardMessages.getString("WizardNewProjectCreationPage.pageTitle")); + projectPage.setDescription(PHPWizardMessages.getString("WizardNewProjectCreationPage.pageDescription")); + + addPage(projectPage); + } + + public void setInitializationData(IConfigurationElement config, String propertyName, Object data) throws CoreException { + configurationElement = config; + } + +} \ No newline at end of file