package net.sf.eclipsefp.haskell.ui.actions;
import java.util.Collection;
import net.sf.eclipsefp.haskell.core.cabal.CabalImplementationManager;
import net.sf.eclipsefp.haskell.core.util.ResourceUtil;
import net.sf.eclipsefp.haskell.ui.HaskellUIPlugin;
import net.sf.eclipsefp.haskell.ui.internal.util.UITexts;
import net.sf.eclipsefp.haskell.ui.wizards.cabal.CabalTestWizard;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.dialogs.ErrorDialog;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.wizard.WizardDialog;
import org.eclipse.osgi.service.resolver.VersionRange;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.IObjectActionDelegate;
import org.eclipse.ui.IWorkbenchPart;
import org.osgi.framework.Version;
/**
* <p>Cabal test action, contextual on project</p>
*
* @author JP Moresmau
*/
public class CabalTestAction implements IObjectActionDelegate {
private Shell currentShell;
private IProject project;
@Override
public void setActivePart( final IAction arg0, final IWorkbenchPart arg1 ) {
currentShell=arg1.getSite().getShell();
}
@Override
public void run( final IAction arg0 ) {
if (project!=null){
Version v=CabalImplementationManager.getCabalLibraryVersion();
if (v!=null && new VersionRange(new Version(1,10,0),true,null,true).isIncluded( v )){
WizardDialog wd=new WizardDialog( currentShell, new CabalTestWizard( project ) );
wd.open();
} else {
final IStatus st=new Status( IStatus.ERROR, HaskellUIPlugin.getPluginId(),UITexts.test_version_fail);
ErrorDialog.openError( currentShell, UITexts.test_error, UITexts.test_version_fail, st);
}
}
}
@Override
public void selectionChanged( final IAction arg0, final ISelection arg1 ) {
Collection<IProject> prjs=ResourceUtil.getProjects( arg1 );
if (prjs.size()>0){
project=prjs.iterator().next();
}
}
}