/** * 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; import java.io.File; import java.io.IOException; import java.util.List; import org.w3c.dom.Node; import com.eclipsesource.json.JsonArray; import com.eclipsesource.json.JsonObject; import com.eclipsesource.json.JsonValue; import tern.repository.ITernRepository; import tern.scriptpath.ITernScriptPath; import tern.server.ITernDef; import tern.server.ITernPlugin; import tern.server.ITernServer; import tern.server.protocol.ITernResultsCollector; import tern.server.protocol.TernQuery; import tern.server.protocol.lint.ITernLintCollector; import tern.server.protocol.push.IMessageHandler; /** * Tern project API. * */ public interface ITernProject extends ITernAdaptable { public static final String TERN_PROJECT_FILE = ".tern-project"; //$NON-NLS-1$ // --------------------- Basic /** * Returns name of the project * * @return */ String getName(); /** * Returns associated tern server if any. This call may result in creating * one if it hasn't been created already. * * @return */ ITernServer getTernServer(); /** * Convenience method for handling exceptions. * * @param t */ void handleException(Throwable t); /** * Set ECMAScript version * * @param ecmaVersion * the ECMAScript version */ void setEcmaVersion(EcmaVersion ecmaVersion); /** * Returns ECMAScript version. * * @return ECMAScript version. */ EcmaVersion getEcmaVersion(); // --------------------- JSON Type Definitions /** * Add JSON Type Definition. * * @param lib * the JSON Type Definition. */ void addLib(ITernDef lib); /** * Add JSON Type Definition. * * @param lib * the JSON Type Definition. */ void addLib(String lib); /** * Returns true if the given lib exists and false otherwise. * * @param lib * @return true if the given lib exists and false otherwise. */ boolean hasLib(String lib); /** * Returns true if the given lib exists and false otherwise. * * @param lib * @return true if the given lib exists and false otherwise. */ boolean hasLib(ITernDef lib); /** * Return the JSON Type Definitions of the tern project. * * @return the JSON Type Definitions of the tern project. */ JsonArray getLibs(); /** * Clear JSON Type Definitions. */ void clearLibs(); // --------------------- Tern Plugins /** * Add Tern plugin. * * @param plugin * the tern plugin to add. * @return true if plugin to add, replace an existing plugin and false * otherwise. */ void addPlugin(ITernPlugin plugin); /** * Add Tern plugin with options. * * @param plugin * the tern plugin to add. * @param options * plugin options. */ void addPlugin(ITernPlugin module, JsonValue options); /** * Returns true if the given plugin exists and false otherwise. * * @param plugin * @return true if the given plugin exists and false otherwise. */ boolean hasPlugin(ITernPlugin plugin); /** * Returns true if the given plugin exists and false otherwise. * * @param plugin * @return true if the given plugin exists and false otherwise. */ boolean hasPlugin(String plugin); /** * Return the JSON plugins of the tern project. * * @return the JSON plugins of the tern project. */ JsonObject getPlugins(); /** * Clear plugins. */ void clearPlugins(); /** * Returns list of tern lint plugins. * * @return list of tern lint plugins. */ ITernPlugin[] getLinters(); // ---------------- Tern save /** * Save the tern project in the file .tern-project of the project base dir. * * @throws IOException */ void save() throws IOException; // ---------------- File management /** * Returns the project base dir. * * @return the project base dir. */ File getProjectDir(); /** * Returns the .tern-project file. * * @return the .tern-project file */ File getTernProjectFile(); /** * Returns a tern file for the specified name. Name must be supported by * current ITernFileFactory and the file must exist, otherwise null is * returned. * * @param name * @return */ ITernFile getFile(String name); /** * Returns a tern file for the file object. File object has to be supported * by current ITernFileFactory and referred file must exist, or null will be * returned * * @param name * @return ITernFile or null, if the file does not exist */ ITernFile getFile(Object fileObject); /** * Returns file cache manager. * * @return */ ITernFileSynchronizer getFileSynchronizer(); /** * Returns a list of script include paths * * @return */ List<ITernScriptPath> getScriptPaths(); /** * Provides a way to adapt ITernProject to an environment specific object * representing project. E.g. it can return {@link java.io.File} object or * Eclipse {@code org.eclipse.core.resources.IProject}. * * @param adapterClass * @return Adapter extending/implementing requested class or null */ Object getAdapter(@SuppressWarnings("rawtypes") Class adapterClass); // ---------- Generic query API void request(TernQuery query, ITernFile file, ITernResultsCollector collector) throws IOException, TernException; void request(TernQuery query, JsonArray names, ITernScriptPath scriptPath, Node domNode, ITernFile file, ITernResultsCollector collector) throws IOException, TernException; // ---------- Lint void request(TernQuery query, ITernFile file, boolean synch, ITernLintCollector collector) throws IOException, TernException; void request(TernQuery query, ITernLintCollector collector) throws IOException, TernException; /** * Returns the tern repository used by the tern project. * * @return the tern repository used by the tern project. */ ITernRepository getRepository(); /** * Set the tern repository used by the tern project. * * @param repository */ void setRepository(ITernRepository repository); /** * Add push message listener. * * @type event type * @param listener */ void on(String type, IMessageHandler listener); /** * Remove server listener. * * @type event type * @param listener */ void off(String type, IMessageHandler listener); }