/** * Copyright (c) 2013-2016 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.server.protocol; import tern.server.protocol.html.ScriptTagRegion; import com.eclipsesource.json.JsonArray; import com.eclipsesource.json.JsonObject; /** * Tern JSON document. * * @see http://ternjs.net/doc/manual.html#protocol */ public class TernDoc extends JsonObject { private static final long serialVersionUID = 1L; private static final String FILES_FIELD_NAME = "files"; private static final String QUERY_FIELD_NAME = "query"; public TernDoc() { this(null); } public TernDoc(TernQuery query) { setQuery(query); } /** * Set the tern query which describes the kind of information you want to * ask for. * * @param query * the tern query which describes the kind of information you * want to ask for. */ public void setQuery(TernQuery query) { if (query != null) { super.set(QUERY_FIELD_NAME, query); } else { super.remove(QUERY_FIELD_NAME); } } /** * Return the tern query which describes the kind of information you want to * ask for and null otherwise. * * @return */ public TernQuery getQuery() { return (TernQuery) super.get(QUERY_FIELD_NAME); } /** * Add a tern file specifications. It may be omitted when the query should * operate on the code that the server already has, without adding anything * new. * * @param name * the file name. * @param text * the file text content. * @param tags * null if it's JS file content and filled if it's HTML file. * @param offset * null if "full" file type and "part" otherwise. */ public void addFile(String name, String text, ScriptTagRegion[] tags, Integer offset) { addFile(new TernFile(name, text, tags, offset)); } /** * Delete the given file name. * * @param name * file name to delete. */ public void delFile(String name) { addFile(new TernFile(name)); } /** * Add a tern file specifications. It may be omitted when the query should * operate on the code that the server already has, without adding anything * new. * * @param file * the tern file to add. */ public void addFile(TernFile file) { getFiles().add(file); } /** * Return the array of file specifications. * * @return the array of file specifications. */ public JsonArray getFiles() { JsonArray files = (JsonArray) super.get(FILES_FIELD_NAME); if (files == null) { files = new JsonArray(); super.add(FILES_FIELD_NAME, files); } return files; } /** * Returns true if tern doc has files and false otherwise. * * @return true if tern doc has files and false otherwise. */ public boolean hasFiles() { JsonArray files = (JsonArray) super.get(FILES_FIELD_NAME); return files != null && files.size() > 0; } public void cleanFiles() { super.remove(FILES_FIELD_NAME); } }