package net.sf.eclipsefp.haskell.ui.wizards.web; import java.net.URI; import net.sf.eclipsefp.haskell.core.HaskellCorePlugin; import net.sf.eclipsefp.haskell.core.project.HaskellNature; import net.sf.eclipsefp.haskell.ui.internal.backend.BackendManager; import net.sf.eclipsefp.haskell.ui.internal.preferences.IPreferenceConstants; import net.sf.eclipsefp.haskell.ui.internal.util.UITexts; import net.sf.eclipsefp.haskell.util.ProcessRunner; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.wizard.Wizard; import org.eclipse.swt.widgets.Display; import org.eclipse.ui.INewWizard; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.dialogs.WizardNewProjectCreationPage; /** * * @author Alejandro Serrano * */ public class NewSnapProjectWizard extends Wizard implements INewWizard { private WizardNewProjectCreationPage mainPage; public NewSnapProjectWizard() { super(); setWindowTitle( UITexts.newSnapProjectWizard_windowTitle ); } @Override public void init( final IWorkbench workbench, final IStructuredSelection selection ) { // Do nothing } @Override public void addPages() { super.addPages(); mainPage = new WizardNewProjectCreationPage( UITexts.newSnapProjectWizard_pageTitle ); mainPage.setTitle( UITexts.newSnapProjectWizard_pageTitle ); mainPage.setDescription( UITexts.newSnapProjectWizard_pageDesc ); addPage( mainPage ); } @Override public boolean performFinish() { final String name = mainPage.getProjectName(); final URI location = ( !mainPage.useDefaults() ) ? mainPage.getLocationURI() :null; // else location == null new Job(UITexts.newYesodProjectWizard_job) { @Override protected IStatus run( final IProgressMonitor arg0 ) { try { IProject project = CustomProjectSupport.createBaseProject(name, location); String serverExecutable =BackendManager.getExecutablePath( IPreferenceConstants.SNAP_EXECUTABLE, "snap",false ); String[] cmdLine = new String[] { serverExecutable, "init" }; IPath path = project.getLocation(); Process p = Runtime.getRuntime().exec(cmdLine, null, path.toFile()); Thread[] ts=ProcessRunner.consume( p ); // Parse the output p.waitFor(); for (Thread t:ts){ t.join(); } CustomProjectSupport.addNature(project, HaskellNature.NATURE_ID); project.refreshLocal( IResource.DEPTH_INFINITE, null ); } catch (Exception e) { HaskellCorePlugin.log( UITexts.newSnapProjectWizard_error, e ); Display.getDefault().asyncExec( new Runnable(){ @Override public void run() { MessageDialog .openError( getShell(), UITexts.newSnapProjectWizard_error_title, UITexts.newSnapProjectWizard_error_message); } } ); } return Status.OK_STATUS; } }.schedule(); return true; } }