--- /dev/null
+package net.sourceforge.phpeclipse.wizards;
+
+import java.lang.reflect.InvocationTargetException;
+import java.net.URI;
+
+import net.sourceforge.phpdt.core.JavaCore;
+import net.sourceforge.phpdt.ui.actions.OpenPHPPerspectiveAction;
+import net.sourceforge.phpeclipse.PHPeclipsePlugin;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IProjectDescription;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IWorkspace;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExecutableExtension;
+import org.eclipse.core.runtime.IProgressMonitor;
+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);
+ // open the PHP perspective
+ new OpenPHPPerspectiveAction().run();
+ 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();
+ String projectName = projectPage.getProjectHandle().getName();
+ newProject = ResourcesPlugin.getWorkspace().getRoot().getProject(projectName);
+ IProjectDescription description = workspace
+ .newProjectDescription(projectName);
+
+ URI uriPath = (!projectPage.useDefaults()) ? projectPage
+ .getLocationURI() : null;
+ if (uriPath != null) {
+ description.setLocationURI(uriPath);
+ }
+
+ try {
+ if (!newProject.exists()) {
+ newProject.create(description, new SubProgressMonitor(
+ monitor, 1));
+ remainingWorkUnits--;
+ }
+ if (!newProject.isOpen()) {
+ newProject.open(IResource.BACKGROUND_REFRESH, new SubProgressMonitor(monitor, 1));
+ remainingWorkUnits--;
+ }
+ JavaCore.addPHPNature(newProject, new SubProgressMonitor(
+ monitor, remainingWorkUnits));
+
+ } catch (CoreException e) {
+ System.out.println(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