content: /**
   *  Copyright (c) 2013-2016 Angelo ZERR and Genuitec LLC.
   *  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
   *  Piotr Tomiak <piotr@genuitec.com> - refactoring of file management API
   */
  package tern.eclipse.ide.core;
  
  import java.io.IOException;
  import java.util.List;
  
  import org.eclipse.core.resources.IFile;
  import org.eclipse.core.resources.IProject;
  import org.eclipse.core.resources.IResource;
  
  import tern.ITernProject;
  import tern.TernException;
  import tern.scriptpath.ITernScriptPath;
  import tern.scriptpath.ITernScriptPath.ScriptPathsType;
  import tern.server.ITernModule;
  import tern.server.ITernServerListener;
  
  /**
   * IDE tern project API.
   *
   */
  public interface IIDETernProject extends ITernProject {
  
  	// -------------- Utility
  
  	IFile getIDEFile(String name);
  
  	// -------------- Tern server.
  
  	void addServerListener(ITernServerListener listener);
  
  	void removeServerListener(ITernServerListener listener);
  
  	void disposeServer();
  
  	boolean isServerDisposed();
  
  	// -------------- Tern script paths.
  
  	void setScriptPaths(List<ITernScriptPath> scriptPaths) throws IOException;
  
  	/**
  	 * Returns the list of script paths.
  	 * 
  	 * @return
  	 */
  	ITernScriptPath getScriptPath(String path);
  
  	ITernScriptPath createScriptPath(IResource resource, ScriptPathsType type,
  			String[] inclusionPatterns, String[] exclusionPatterns);
  
  	ITernScriptPath addExternalScriptPath(IResource resource,
  			ScriptPathsType type, String[] inclusionPatterns,
  			String[] exclusionPatterns, String external) throws IOException;
  
  	void removeExternalScriptPaths(String external);
  
  	// -------------- misc
  
  	void configureConsole();
  
  	<T> T getData(String key);
  
  	void setData(String key, Object value);
  
  	IProject getProject();
  
  	/**
  	 * Returns the tern plugin hosted on the root project.
  	 * 
  	 * @return the tern plugin hosted on the root project.
  	 */
  	List<ITernModule> getProjectModules();
  
  	/**
  	 * Returns the list of tern modules of the repository and project modules.
  	 * 
  	 * @return
  	 * @throws TernException
  	 */
  	List<ITernModule> getAllModules() throws TernException;
  
  	/**
  	 * Returns the working copy of the tern project.
  	 * 
  	 * @param caller
  	 * @return
  	 * @throws TernException
  	 */
  	IWorkingCopy getWorkingCopy(Object caller) throws TernException;
  
  	/**
  	 * Returns true if the given resource is in the scope of the tern script
  	 * paths and false otherwise.
  	 * 
  	 * @param resource to check
  	 * @param context scope context which maintains include/exclude containers and null otherwise.
  	 * 
  	 * @return true if the given resource is in the scope of the tern script
  	 *         paths and false otherwise.
  	 */
  	boolean isInScope(IResource resource, IScopeContext context);
  
  	/**
  	 * Returns the tern script path reporter and null otherwise.
  	 * 
  	 * @return the tern script path reporter and null otherwise.
  	 */
  	IIDETernScriptPathReporter getScriptPathReporter();
  }
  