package net.sourceforge.phpeclipse.wizards;

import java.lang.reflect.InvocationTargetException;

import net.sourceforge.phpdt.core.JavaCore;
import net.sourceforge.phpdt.internal.ui.util.ExceptionHandler;

import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IProjectDescription;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.Platform;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.INewWizard;
import org.eclipse.ui.dialogs.WizardNewProjectCreationPage;
import org.eclipse.ui.wizards.newresource.BasicNewProjectResourceWizard;
import org.eclipse.ui.wizards.newresource.BasicNewResourceWizard;

public class TempnewPHPProject extends BasicNewResourceWizard implements INewWizard {
  /*
   * This class has been added to cvs to provide a project page that works correctly and doesn't freezde while i investigate the
   * errors completely
   */
  private WizardNewProjectCreationPage phpProjPage;

  private IConfigurationElement fConfigElement;

  public TempnewPHPProject() {
    setNeedsProgressMonitor(true);
    setWindowTitle("New Project creation"); //$NON-NLS-1$

  }

  public void addPages() {
    super.addPages();
    phpProjPage = new WizardNewProjectCreationPage("NewProjectCreationWizard"); //$NON-NLS-1$
    phpProjPage.setTitle(PHPWizardMessages.getString("WizardNewProjectCreationPage.pageTitle")); //$NON-NLS-1$
    phpProjPage.setDescription(PHPWizardMessages.getString("WizardNewProjectCreationPage.pageDescription")); //$NON-NLS-1$
    addPage(phpProjPage);
  }

  public void setInitializationData(IConfigurationElement cfig, String propertyName, Object data) {
    fConfigElement = cfig;
  }

  protected void initializeDefaultPageImageDescriptor() {
    // not used yet
  }

  protected void finishPage() throws InterruptedException, CoreException {
    createProject(phpProjPage.getProjectHandle(), phpProjPage.getLocationPath(), new NullProgressMonitor());
    BasicNewProjectResourceWizard.updatePerspective(fConfigElement);
    selectAndReveal(phpProjPage.getProjectHandle());
  }

  protected void handleFinishException(Shell shell, InvocationTargetException e) {
    ExceptionHandler.handle(e, getShell(), "Error title", "Error message");
  }

  public boolean performFinish() {
    try {
      finishPage();
    } catch (InterruptedException e) {
    } catch (CoreException e) {
    }
    return true;
  }

  public void createProject(IProject project, IPath locationPath, IProgressMonitor monitor) throws CoreException {
    try {
      if (!project.exists()) {
        IProjectDescription desc = project.getWorkspace().newProjectDescription(project.getName());
        if (Platform.getLocation().equals(locationPath)) {
          locationPath = null;
        }
        desc.setLocation(locationPath);
        project.create(desc, monitor);
        monitor = null;
      }
      if (!project.isOpen()) {
        project.open(monitor);
        monitor = null;
      }
      JavaCore.addPHPNature(project, new NullProgressMonitor());
    } finally {
      if (monitor != null) {
        monitor.done();
      }
    }
  }
}