/**
* Aptana Studio
* Copyright (c) 2005-2011 by Appcelerator, Inc. All Rights Reserved.
* Licensed under the terms of the GNU Public License (GPL) v3 (with exceptions).
* Please see the license.html included with this distribution for details.
* Any modifications to this file must keep this entire header intact.
*/
package com.aptana.ruby.ui.wizards;
import java.lang.reflect.InvocationTargetException;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IProjectDescription;
import org.eclipse.core.runtime.IExecutableExtension;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.dialogs.IDialogSettings;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.ui.IWorkbench;
import com.aptana.core.build.UnifiedBuilder;
import com.aptana.core.projects.templates.TemplateType;
import com.aptana.projects.WebProjectNature;
import com.aptana.projects.wizards.AbstractNewProjectWizard;
import com.aptana.ruby.core.RubyProjectNature;
import com.aptana.ruby.ui.RubyUIPlugin;
/**
* Ruby project wizard.
*
* @author cwilliams, sgibly
*/
public class NewRubyProjectWizard extends AbstractNewProjectWizard implements IExecutableExtension
{
private boolean cloneFromGit;
private String cloneSourceURI;
/*
* (non-Javadoc)
* @see com.aptana.projects.internal.wizards.NewProjectWizard#initDialogSettings()
*/
@Override
protected void initDialogSettings()
{
IDialogSettings workbenchSettings = RubyUIPlugin.getDefault().getDialogSettings();
IDialogSettings section = workbenchSettings.getSection("BasicNewProjectResourceWizard");//$NON-NLS-1$
if (section == null)
{
section = workbenchSettings.addNewSection("BasicNewProjectResourceWizard");//$NON-NLS-1$
}
setDialogSettings(section);
}
protected WizardNewRubyProjectCreationPage createMainPage()
{
WizardNewRubyProjectCreationPage mainPage = new WizardNewRubyProjectCreationPage(
"basicNewProjectPage", selectedTemplate); //$NON-NLS-1$
mainPage.setTitle(Messages.NewProject_title);
mainPage.setDescription(Messages.NewRubyProject_description);
mainPage.setWizard(this);
mainPage.setPageComplete(false);
return mainPage;
}
/*
* (non-Javadoc) Method declared on BasicNewResourceWizard.
*/
protected void initializeDefaultPageImageDescriptor()
{
ImageDescriptor desc = RubyUIPlugin.imageDescriptorFromPlugin(RubyUIPlugin.getPluginIdentifier(),
"icons/newproj_wiz.png"); //$NON-NLS-1$
setDefaultPageImageDescriptor(desc);
}
@Override
protected String[] getProjectNatures()
{
return new String[] { RubyProjectNature.ID, WebProjectNature.ID };
}
@Override
protected String getProjectCreateEventName()
{
return "project.create.ruby"; //$NON-NLS-1$
}
@Override
protected TemplateType[] getProjectTemplateTypes()
{
return new TemplateType[] { TemplateType.RUBY };
}
@Override
protected String[] getProjectBuilders()
{
return new String[] { UnifiedBuilder.ID };
}
/*
* (non-Javadoc)
* @see com.aptana.projects.internal.wizards.NewProjectWizard#getProjectCreationDescription()
*/
protected String getProjectCreationDescription()
{
return Messages.NewRubyProject_windowTitle;
}
/*
* (non-Javadoc) Method declared on IWorkbenchWizard.
*/
public void init(IWorkbench workbench, IStructuredSelection currentSelection)
{
super.init(workbench, currentSelection);
setWindowTitle(Messages.NewRubyProject_windowTitle);
}
/*
* (non-Javadoc)
* @see com.aptana.projects.internal.wizards.NewProjectWizard#shouldCloneFromGit()
*/
@Override
protected boolean isCloneFromGit()
{
// First check the main page specific settings for the git clone. In case the setting is off, check the super
// for any template that requires a clone.
return cloneFromGit || super.isCloneFromGit();
}
@Override
public boolean performFinish()
{
cloneFromGit = mainPage.isCloneFromGit();
cloneSourceURI = mainPage.getCloneURI();
return super.performFinish();
}
@Override
protected void cloneFromGit(IProject newProjectHandle, IProjectDescription description, IProgressMonitor monitor)
throws InvocationTargetException
{
// We override the default implementation since this project wizard may define a git clone location even without
// any project templates.
if (cloneFromGit)
{
doCloneFromGit(cloneSourceURI, newProjectHandle, description, monitor);
}
else
{
// The super cloneFromGit will deal with the project template cloning
super.cloneFromGit(newProjectHandle, description, monitor);
}
}
}