// Path: core/fr.opensagres.eclipse.jsbuild.core/src/fr/opensagres/eclipse/jsbuild/core/IJSBuildFileNode.java
// public interface IJSBuildFileNode {
// 
// 	/**
// 	 * Returns the node name.
// 	 * 
// 	 * @return the node name.
// 	 */
// 	String getName();
// 
// 	/**
// 	 * Returns the label of the task.
// 	 * 
// 	 * @return the label of the task.
// 	 */
// 	String getLabel();
// 
// 	/**
// 	 * Returns true if the node have children and false otherwise.
// 	 * 
// 	 * @return true if the node have children and false otherwise.
// 	 */
// 	boolean hasChildren();
// 
// 	/**
// 	 * Returns the parent node.
// 	 * 
// 	 * @return the parent node.
// 	 */
// 	IJSBuildFileNode getParentNode();
// 
// 	/**
// 	 * Returns the tasks children.
// 	 * 
// 	 * @return the tasks children.
// 	 * @throws CoreException
// 	 */
// 	Collection<ITask> getChildNodes();
// 
// 	/**
// 	 * Returns the owner build file.
// 	 * 
// 	 * @return the owner build file.
// 	 */
// 	IJSBuildFile getBuildFile();
// 
// 	/**
// 	 * Returns the factory id {@link IJSBuildFileFactory} which have created
// 	 * this instance.
// 	 * 
// 	 * @return the factory id {@link IJSBuildFileFactory} which have created
// 	 *         this instance.
// 	 */
// 	String getFactoryId();
// 
// 	/**
// 	 * Returns the location of the node and null otherwise.
// 	 * @param document 
// 	 * 
// 	 * @return the location of the node and null otherwise.
// 	 */
// 	Location getLocation(String text);
// }
// 
// Path: core/fr.opensagres.eclipse.jsbuild.core/src/fr/opensagres/eclipse/jsbuild/core/ITask.java
// public interface ITask extends IJSBuildFileNode {
// 
// 	ITask[] EMPTY_TASK = new ITask[0];
// 
// 	/**
// 	 * Returns true if this task is the default task and false otherwise.
// 	 * 
// 	 * @return true if this task is the default task and false otherwise.
// 	 */
// 	boolean isDefault();
// 
// }
// 
// Path: core/fr.opensagres.eclipse.jsbuild.core/src/fr/opensagres/eclipse/jsbuild/core/JSBuildFileFactoryManager.java
// public class JSBuildFileFactoryManager {
// 
// 	/**
// 	 * Returns the factory id for the given file and null otherwise.
// 	 * 
// 	 * @param file
// 	 *            (Gruntfile.js, gulpfile.js, etc)
// 	 * @return the factory id for the given file and null otherwise.
// 	 */
// 	public static String findFactoryId(IFile file) {
// 		return JSBuildFileFactoriesRegistryReader.getInstance().findFactoryId(
// 				file);
// 	}
// 
// 	/**
// 	 * Create an instance of {@link IJSBuildFile} from the given file.
// 	 * 
// 	 * @param file
// 	 *            (Gruntfile.js, gulpfile.js).
// 	 * @param factoryId
// 	 *            the factory id.
// 	 * @return an instance of {@link IJSBuildFile} from the given file.
// 	 */
// 	public static IJSBuildFile create(IFile file, String factoryId) {
// 		return JSBuildFileFactoriesRegistryReader.getInstance().create(file,
// 				factoryId);
// 	}
// 
// 	public static IJSBuildFileNode tryToCreate(IResource resource) {
// 		if (resource == null || resource.getType() != IResource.FILE) {
// 			return null;
// 		}
// 		IFile file = (IFile) resource;
// 		String factoryId = findFactoryId(file);
// 		if (factoryId == null) {
// 			return null;
// 		}
// 		return create(file, factoryId);
// 	}
// }


import java.io.File;
import java.util.Collection;
import java.util.Collections;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import org.eclipse.debug.core.ILaunchConfiguration;
import fr.opensagres.eclipse.jsbuild.core.IJSBuildFileNode;
import fr.opensagres.eclipse.jsbuild.core.ITask;
import fr.opensagres.eclipse.jsbuild.core.JSBuildFileFactoryManager;

		// Platform.getContentTypeManager().getContentType(AntCorePlugin.ANT_BUILDFILE_CONTENT_TYPE);
		// if (antType != null) {
		// return fileType.isKindOf(antType);
		// }
		// }
		// }
		// return false;
		// How to check content type of Gruntfile.js, glupfile.js?
		return true;
	}

	public static String getKnownBuildFileExtensionsAsPattern() {
		return "js";
	}

	public static IFile getFile(String fullPath) {
		IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
		return root.getFile(new Path(fullPath));
	}

	public static ITask[] getTargets(String path,
			ILaunchConfiguration fLaunchConfiguration) throws CoreException {
		File buildfile = getBuildFile(path);
		if (buildfile == null) {
			return null;
		}
		IFile file = getFileForLocation(buildfile.getAbsolutePath());
		if (file == null) {
			return null;
		}

// Path: core/fr.opensagres.eclipse.jsbuild.core/src/fr/opensagres/eclipse/jsbuild/core/IJSBuildFileNode.java
// public interface IJSBuildFileNode {
// 
// 	/**
// 	 * Returns the node name.
// 	 * 
// 	 * @return the node name.
// 	 */
// 	String getName();
// 
// 	/**
// 	 * Returns the label of the task.
// 	 * 
// 	 * @return the label of the task.
// 	 */
// 	String getLabel();
// 
// 	/**
// 	 * Returns true if the node have children and false otherwise.
// 	 * 
// 	 * @return true if the node have children and false otherwise.
// 	 */
// 	boolean hasChildren();
// 
// 	/**
// 	 * Returns the parent node.
// 	 * 
// 	 * @return the parent node.
// 	 */
// 	IJSBuildFileNode getParentNode();
// 
// 	/**
// 	 * Returns the tasks children.
// 	 * 
// 	 * @return the tasks children.
// 	 * @throws CoreException
// 	 */
// 	Collection<ITask> getChildNodes();
// 
// 	/**
// 	 * Returns the owner build file.
// 	 * 
// 	 * @return the owner build file.
// 	 */
// 	IJSBuildFile getBuildFile();
// 
// 	/**
// 	 * Returns the factory id {@link IJSBuildFileFactory} which have created
// 	 * this instance.
// 	 * 
// 	 * @return the factory id {@link IJSBuildFileFactory} which have created
// 	 *         this instance.
// 	 */
// 	String getFactoryId();
// 
// 	/**
// 	 * Returns the location of the node and null otherwise.
// 	 * @param document 
// 	 * 
// 	 * @return the location of the node and null otherwise.
// 	 */
// 	Location getLocation(String text);
// }
// 
// Path: core/fr.opensagres.eclipse.jsbuild.core/src/fr/opensagres/eclipse/jsbuild/core/ITask.java
// public interface ITask extends IJSBuildFileNode {
// 
// 	ITask[] EMPTY_TASK = new ITask[0];
// 
// 	/**
// 	 * Returns true if this task is the default task and false otherwise.
// 	 * 
// 	 * @return true if this task is the default task and false otherwise.
// 	 */
// 	boolean isDefault();
// 
// }
// 
// Path: core/fr.opensagres.eclipse.jsbuild.core/src/fr/opensagres/eclipse/jsbuild/core/JSBuildFileFactoryManager.java
// public class JSBuildFileFactoryManager {
// 
// 	/**
// 	 * Returns the factory id for the given file and null otherwise.
// 	 * 
// 	 * @param file
// 	 *            (Gruntfile.js, gulpfile.js, etc)
// 	 * @return the factory id for the given file and null otherwise.
// 	 */
// 	public static String findFactoryId(IFile file) {
// 		return JSBuildFileFactoriesRegistryReader.getInstance().findFactoryId(
// 				file);
// 	}
// 
// 	/**
// 	 * Create an instance of {@link IJSBuildFile} from the given file.
// 	 * 
// 	 * @param file
// 	 *            (Gruntfile.js, gulpfile.js).
// 	 * @param factoryId
// 	 *            the factory id.
// 	 * @return an instance of {@link IJSBuildFile} from the given file.
// 	 */
// 	public static IJSBuildFile create(IFile file, String factoryId) {
// 		return JSBuildFileFactoriesRegistryReader.getInstance().create(file,
// 				factoryId);
// 	}
// 
// 	public static IJSBuildFileNode tryToCreate(IResource resource) {
// 		if (resource == null || resource.getType() != IResource.FILE) {
// 			return null;
// 		}
// 		IFile file = (IFile) resource;
// 		String factoryId = findFactoryId(file);
// 		if (factoryId == null) {
// 			return null;
// 		}
// 		return create(file, factoryId);
// 	}
// }


// Path: core/fr.opensagres.eclipse.jsbuild.ui/src/fr/opensagres/eclipse/jsbuild/internal/ui/JSBuildFileUtil.java
import java.io.File;
import java.util.Collection;
import java.util.Collections;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import org.eclipse.debug.core.ILaunchConfiguration;
import fr.opensagres.eclipse.jsbuild.core.IJSBuildFileNode;
import fr.opensagres.eclipse.jsbuild.core.ITask;
import fr.opensagres.eclipse.jsbuild.core.JSBuildFileFactoryManager;

		// Platform.getContentTypeManager().getContentType(AntCorePlugin.ANT_BUILDFILE_CONTENT_TYPE);
		// if (antType != null) {
		// return fileType.isKindOf(antType);
		// }
		// }
		// }
		// return false;
		// How to check content type of Gruntfile.js, glupfile.js?
		return true;
	}

	public static String getKnownBuildFileExtensionsAsPattern() {
		return "js";
	}

	public static IFile getFile(String fullPath) {
		IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
		return root.getFile(new Path(fullPath));
	}

	public static ITask[] getTargets(String path,
			ILaunchConfiguration fLaunchConfiguration) throws CoreException {
		File buildfile = getBuildFile(path);
		if (buildfile == null) {
			return null;
		}
		IFile file = getFileForLocation(buildfile.getAbsolutePath());
		if (file == null) {
			return null;
		}

		IJSBuildFileNode buildFileNode = JSBuildFileFactoryManager
