/*******************************************************************************
* Copyright (c) 2005 RadRails.org and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*******************************************************************************/
package org.radrails.rails.internal.ui.wizards;
import org.eclipse.core.resources.IProject;
import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.ui.actions.WorkspaceModifyDelegatingOperation;
import org.eclipse.ui.plugin.AbstractUIPlugin;
import org.eclipse.ui.progress.UIJob;
import org.eclipse.ui.wizards.newresource.BasicNewProjectResourceWizard;
import org.radrails.rails.internal.core.RailsPlugin;
import org.radrails.rails.internal.ui.RailsInstallDialog;
import org.radrails.rails.internal.ui.wizards.pages.WizardNewRailsProjectPage;
import org.radrails.rails.ui.RailsUILog;
import org.radrails.rails.ui.RailsUIPlugin;
/**
* This wizard creates a new Rails project.
*
* @author mkent
* @author cwilliams
*/
public class NewRailsProjectWizard extends BasicNewProjectResourceWizard
{
private WizardNewRailsProjectPage page;
private RailsProjectCreator creator;
/**
* Default constructor.
*/
public NewRailsProjectWizard()
{
setNeedsProgressMonitor(true);
setWindowTitle("New Rails project");
creator = null;
}
/**
* @see org.eclipse.jface.wizard.IWizard#performFinish()
*/
public boolean performFinish()
{
if (railsNotInstalled() && page.getGenerateButtonSelection()) // asking to generate rails project, but rails
// isn't installed
{
UIJob dialog = new RailsInstallDialog(RailsUIPlugin.getInstance().getGemManager());
dialog.schedule(); // TODO clear out error message if/when job finishes successfully?
return true;
}
creator = new RailsProjectCreator(page);
IRunnableWithProgress newProjectOp = new WorkspaceModifyDelegatingOperation(creator);
// Run the project creation operation
try
{
getContainer().run(false, true, newProjectOp);
}
catch (Exception e)
{
RailsUILog.logError("Error creating project", e);
return false;
}
if (getNewProject() == null)
{
return false;
}
updatePerspective();
selectAndReveal(getNewProject());
return true;
}
@Override
public IProject getNewProject()
{
if (creator == null)
return null;
return creator.getProject();
}
private boolean railsNotInstalled()
{
return RailsPlugin.getInstance().getRailsPath() == null;
}
/**
* @see org.eclipse.jface.wizard.IWizard#addPages()
*/
public void addPages()
{
page = new WizardNewRailsProjectPage("new.rails.project1");
page.setTitle(WizardMessages.NewRailsProjectWizardAction_text);
page.setDescription(WizardMessages.NewRailsProjectWizardAction_description);
addPage(page);
}
@Override
protected void initializeDefaultPageImageDescriptor()
{
ImageDescriptor desc = AbstractUIPlugin.imageDescriptorFromPlugin(RailsUIPlugin.getInstance().getBundle()
.getSymbolicName(), "icons/newproj_wiz.gif");//$NON-NLS-1$
setDefaultPageImageDescriptor(desc);
}
}