// Path: grunt/tern.eclipse.ide.grunt/src/tern/eclipse/ide/grunt/internal/query/TernGruntTasksQuery.java
// public class TernGruntTasksQuery extends TernQuery {
// 
// 	public TernGruntTasksQuery() {
// 		super("grunt-tasks");
// 	}
// 
// }
// 
// Path: core/fr.opensagres.eclipse.jsbuild.core/src/fr/opensagres/eclipse/jsbuild/core/AbstractBuildFile.java
// public abstract class AbstractBuildFile extends AbstractBuildFileNode implements
// 		IJSBuildFile {
// 
// 	private final IFile file;
// 	private final String factoryId;
// 	private boolean parsed;
// 	private final Map<String, ITask> tasks;
// 
// 	public AbstractBuildFile(IFile file, String factoryId) {
// 		this.file = file;
// 		this.factoryId = factoryId;
// 		this.tasks = new HashMap<String, ITask>();
// 	}
// 
// 	@Override
// 	public String getName() {
// 		return file.getName();
// 	}
// 
// 	@Override
// 	public IFile getBuildFileResource() {
// 		return file;
// 	}
// 
// 	@Override
// 	public String getBuildFileName() {
// 		return file.getFullPath().toOSString();
// 	}
// 
// 	@Override
// 	public IJSBuildFileNode getParentNode() {
// 		return null;
// 	}
// 
// 	@Override
// 	public String getFactoryId() {
// 		return factoryId;
// 	}
// 
// 	@Override
// 	public void parseBuildFile() throws CoreException {
// 		parseBuildFile(false);
// 	}
// 
// 	@Override
// 	public void parseBuildFile(boolean force) throws CoreException {
// 		if (parsed && !force) {
// 			return;
// 		}
// 		tasks.clear();
// 		doParseBuildFile();
// 		parsed = true;
// 	}
// 
// 	protected void addTask(ITask task) {
// 		tasks.put(task.getName(), task);
// 	}
// 
// 	@Override
// 	public void dispose() {
// 
// 	}
// 
// 	public ITask getTask(String name) {
// 		return tasks.get(name);
// 	}
// 
// 	@Override
// 	public Collection<ITask> getChildNodes() {
// 		return tasks.values();
// 	}
// 
// 	@Override
// 	public IJSBuildFile getBuildFile() {
// 		return this;
// 	}
// 
// 	@Override
// 	public boolean hasChildren() {
// 		// even if build file has not tasks, we consider that there are children
// 		// in order to load
// 		// the tasks when getChildNodes is called with the
// 		// JSBuildFileContentProvider in order to load tasks with lazy mode.
// 		return true;
// 	}
// 
// 	protected abstract void doParseBuildFile() throws CoreException;
// }
// 
// 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: grunt/fr.opensagres.eclipse.jsbuild.grunt.core/src/fr/opensagres/eclipse/jsbuild/grunt/core/IGruntFile.java
// public interface IGruntFile extends IJSBuildFile {
// 
// }


import org.eclipse.core.resources.IFile;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import tern.ITernFile;
import tern.eclipse.ide.core.IIDETernProject;
import tern.eclipse.ide.grunt.internal.query.TernGruntTasksQuery;
import tern.server.protocol.IJSONObjectHelper;
import tern.server.protocol.completions.ITernCompletionCollector;
import tern.server.protocol.completions.TernCompletionProposalRec;
import fr.opensagres.eclipse.jsbuild.core.AbstractBuildFile;
import fr.opensagres.eclipse.jsbuild.core.ITask;
import fr.opensagres.eclipse.jsbuild.grunt.core.IGruntFile;

/**
 *  Copyright (c) 2013-2014 Angelo ZERR.
 *  All rights reserved. This program and the accompanying materials
 *  are made available under the terms of the Eclipse Public License v1.0
 *  which accompanies this distribution, and is available at
 *  http://www.eclipse.org/legal/epl-v10.html
 *
 *  Contributors:
 *  Angelo Zerr <angelo.zerr@gmail.com> - initial API and implementation
 */
package tern.eclipse.ide.grunt.internal;



public class GruntFile extends AbstractBuildFile implements IGruntFile {

	public GruntFile(IFile file, String factoryId) {
		super(file, factoryId);
	}

	@Override
	public ITask getDefaultTask() {
		return getTask(GruntTask.DEFAULT_NAME);
	}

	@Override
	protected void doParseBuildFile() throws CoreException {
		IFile gruntFile = getBuildFileResource();
		IIDETernProject ternProject = GruntProject.getGruntProject(gruntFile
				.getProject());

// Path: grunt/tern.eclipse.ide.grunt/src/tern/eclipse/ide/grunt/internal/query/TernGruntTasksQuery.java
// public class TernGruntTasksQuery extends TernQuery {
// 
// 	public TernGruntTasksQuery() {
// 		super("grunt-tasks");
// 	}
// 
// }
// 
// Path: core/fr.opensagres.eclipse.jsbuild.core/src/fr/opensagres/eclipse/jsbuild/core/AbstractBuildFile.java
// public abstract class AbstractBuildFile extends AbstractBuildFileNode implements
// 		IJSBuildFile {
// 
// 	private final IFile file;
// 	private final String factoryId;
// 	private boolean parsed;
// 	private final Map<String, ITask> tasks;
// 
// 	public AbstractBuildFile(IFile file, String factoryId) {
// 		this.file = file;
// 		this.factoryId = factoryId;
// 		this.tasks = new HashMap<String, ITask>();
// 	}
// 
// 	@Override
// 	public String getName() {
// 		return file.getName();
// 	}
// 
// 	@Override
// 	public IFile getBuildFileResource() {
// 		return file;
// 	}
// 
// 	@Override
// 	public String getBuildFileName() {
// 		return file.getFullPath().toOSString();
// 	}
// 
// 	@Override
// 	public IJSBuildFileNode getParentNode() {
// 		return null;
// 	}
// 
// 	@Override
// 	public String getFactoryId() {
// 		return factoryId;
// 	}
// 
// 	@Override
// 	public void parseBuildFile() throws CoreException {
// 		parseBuildFile(false);
// 	}
// 
// 	@Override
// 	public void parseBuildFile(boolean force) throws CoreException {
// 		if (parsed && !force) {
// 			return;
// 		}
// 		tasks.clear();
// 		doParseBuildFile();
// 		parsed = true;
// 	}
// 
// 	protected void addTask(ITask task) {
// 		tasks.put(task.getName(), task);
// 	}
// 
// 	@Override
// 	public void dispose() {
// 
// 	}
// 
// 	public ITask getTask(String name) {
// 		return tasks.get(name);
// 	}
// 
// 	@Override
// 	public Collection<ITask> getChildNodes() {
// 		return tasks.values();
// 	}
// 
// 	@Override
// 	public IJSBuildFile getBuildFile() {
// 		return this;
// 	}
// 
// 	@Override
// 	public boolean hasChildren() {
// 		// even if build file has not tasks, we consider that there are children
// 		// in order to load
// 		// the tasks when getChildNodes is called with the
// 		// JSBuildFileContentProvider in order to load tasks with lazy mode.
// 		return true;
// 	}
// 
// 	protected abstract void doParseBuildFile() throws CoreException;
// }
// 
// 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: grunt/fr.opensagres.eclipse.jsbuild.grunt.core/src/fr/opensagres/eclipse/jsbuild/grunt/core/IGruntFile.java
// public interface IGruntFile extends IJSBuildFile {
// 
// }


// Path: grunt/tern.eclipse.ide.grunt/src/tern/eclipse/ide/grunt/internal/GruntFile.java
import org.eclipse.core.resources.IFile;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import tern.ITernFile;
import tern.eclipse.ide.core.IIDETernProject;
import tern.eclipse.ide.grunt.internal.query.TernGruntTasksQuery;
import tern.server.protocol.IJSONObjectHelper;
import tern.server.protocol.completions.ITernCompletionCollector;
import tern.server.protocol.completions.TernCompletionProposalRec;
import fr.opensagres.eclipse.jsbuild.core.AbstractBuildFile;
import fr.opensagres.eclipse.jsbuild.core.ITask;
import fr.opensagres.eclipse.jsbuild.grunt.core.IGruntFile;

/**
 *  Copyright (c) 2013-2014 Angelo ZERR.
 *  All rights reserved. This program and the accompanying materials
 *  are made available under the terms of the Eclipse Public License v1.0
 *  which accompanies this distribution, and is available at
 *  http://www.eclipse.org/legal/epl-v10.html
 *
 *  Contributors:
 *  Angelo Zerr <angelo.zerr@gmail.com> - initial API and implementation
 */
package tern.eclipse.ide.grunt.internal;



public class GruntFile extends AbstractBuildFile implements IGruntFile {

	public GruntFile(IFile file, String factoryId) {
		super(file, factoryId);
	}

	@Override
	public ITask getDefaultTask() {
		return getTask(GruntTask.DEFAULT_NAME);
	}

	@Override
	protected void doParseBuildFile() throws CoreException {
		IFile gruntFile = getBuildFileResource();
		IIDETernProject ternProject = GruntProject.getGruntProject(gruntFile
				.getProject());

		TernGruntTasksQuery query = new TernGruntTasksQuery();
