package net.sf.eclipsefp.haskell.core.project;
import net.sf.eclipsefp.haskell.core.HaskellCorePlugin;
import net.sf.eclipsefp.haskell.core.hlint.HLintBuilder;
import net.sf.eclipsefp.haskell.core.partitioned.alex.AlexBuilder;
import net.sf.eclipsefp.haskell.core.partitioned.happy.HappyBuilder;
import net.sf.eclipsefp.haskell.core.partitioned.uuagc.UuagcBuilder;
import net.sf.eclipsefp.haskell.core.util.ResourceUtil;
import net.sf.eclipsefp.haskell.util.FileUtil;
import org.eclipse.core.resources.ICommand;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IProjectDescription;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
public class HaskellResource {
private final IResource fResource;
public HaskellResource( final IResource resource ) {
fResource = resource;
}
public boolean isHaskellFile() {
return fResource instanceof IFile
&& FileUtil.hasHaskellExtension( fResource );
}
public boolean isSourceFolder() {
if( !( fResource instanceof IFolder ) ) {
return false;
}
IFolder folder = ( IFolder )fResource;
return ResourceUtil.isInHaskellProject( folder )
&& ResourceUtil.isSourceFolder( folder );
}
public boolean isProjectExecutable(){
if (fResource instanceof IProject){
IProject project=(IProject)fResource;
return !ResourceUtil.getProjectExecutables( project ).isEmpty();
}
return false;
}
public boolean isProjectYesod(){
if (fResource instanceof IProject){
IProject project=(IProject)fResource;
if (project.isAccessible()){
try {
return project.hasNature( YesodNature.NATURE_ID );
} catch (CoreException ce){
HaskellCorePlugin.log( ce );
}
}
}
return false;
}
public boolean isProjectTestSuite(){
if (fResource instanceof IProject){
IProject project=(IProject)fResource;
return !ResourceUtil.getProjectTestSuites( project ).isEmpty();
}
return false;
}
public boolean isProjectBenchmark(){
if (fResource instanceof IProject){
IProject project=(IProject)fResource;
return !ResourceUtil.getProjectBenchmarks( project ).isEmpty();
}
return false;
}
public boolean hasProjectBuilder(final String builderId) {
if (fResource instanceof IProject){
IProject project=(IProject)fResource;
try {
IProjectDescription desc = project.getDescription();
ICommand[] commands = desc.getBuildSpec();
for( int i = 0; i < commands.length; ++i ) {
if( commands[ i ].getBuilderName().equals( builderId ) ) {
return true;
}
}
} catch (CoreException ce){
HaskellCorePlugin.log( ce );
}
}
return false;
}
public boolean hasProjectHLintBuilder(){
return hasProjectBuilder( HLintBuilder.BUILDER_ID );
}
public boolean needsProjectHLintBuilder(){
return !hasProjectHLintBuilder();
}
public boolean hasProjectAlexBuilder(){
return hasProjectBuilder( AlexBuilder.BUILDER_ID );
}
public boolean needsProjectAlexBuilder(){
return !hasProjectAlexBuilder();
}
public boolean hasProjectHappyBuilder(){
return hasProjectBuilder( HappyBuilder.BUILDER_ID );
}
public boolean needsProjectHappyBuilder(){
return !hasProjectHappyBuilder();
}
public boolean hasProjectUuagcBuilder(){
return hasProjectBuilder( UuagcBuilder.BUILDER_ID );
}
public boolean needsProjectUuagcBuilder(){
return !hasProjectUuagcBuilder();
}
}