/** * 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: * Piotr Tomiak <piotr@genuitec.com> - initial API and implementation * Angelo Zerr <angelo.zerr@gmail.com> - initial API and implementation */ package tern; import java.io.IOException; import tern.server.protocol.TernFile; import tern.server.protocol.html.ScriptTagRegion; public interface ITernFile extends ITernAdaptable { /** * Protocol for file hosted in a different Tern project within the workspace */ String PROJECT_PROTOCOL = "project://"; //$NON-NLS-1$ /** * Protocol for file from outside the workspace, referred by its filesystem path */ String EXTERNAL_PROTOCOL = "external://"; //$NON-NLS-1$ /** * Returns name of the file as passed to the tern server. It can be e.g.: * <ul> * <li>{@code src/bar.js}: when file belongs to the same project</li> * <li>{@code project://JSProject/foo.js}: when file belongs to a different project in the workspace</li> * <li>{@code external://C:\JS resources\jquery.js}: when file does not belong to the workspace</li> * </ul> * Name is created in context of the project. * * @return full file name */ String getFullName(ITernProject context); /** * Returns the last segment of the full file name. E.g. {@bar.js}; * * @return last segment of the file name */ String getFileName(); /** * Returns whether the file is present in the filesystem and * is accessible. This should be a relatively fast method and in * case of non filesystem files, it may return false if method is sure that * contents are not accessible. Even if this method returns true, * getContents method can still fail with IOException. */ boolean isAccessible(); /** * Returns contents of the file. * * @return contents of the file, never null * @throws IOException if contents of the file cannot be retrieved */ String getContents() throws IOException; /** * Returns file relative to the given one, or null if there is no such file. * * @param relativePath Relative path to the requested file. * @return Relative file or null */ ITernFile getRelativeFile(String relativePath); /** * Provides a way to adapt ITernFile to an environment specific object representing file. * E.g. it can return {@link java.io.File} object or Eclipse * {@code org.eclipse.core.resources.IFile}. * * @param adapterClass * @return Adapter extending/implementing requested class or null */ Object getAdapter(@SuppressWarnings("rawtypes") Class adapterClass); /** * Convenience method to provide extension of referred file. * @return */ String getFileExtension(); /** * Converts file to tern server file, * which can be sent over to the server * * @return * @throws IOException */ TernFile toTernServerFile(ITernProject context) throws IOException; /** * Returns an array of tag names, which contents should be treated as * JavaScript content. * @return */ ScriptTagRegion[] getScriptTags(ITernProject context); }