/**
* 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 com.eclipsesource.json.JsonObject;
import tern.server.protocol.html.HtmlHelper;
import tern.server.protocol.html.ScriptTagRegion;
/**
* Tern file.
*
* @see http://ternjs.net/doc/manual.html#protocol
*/
public class TernFile extends JsonObject {
private static final long serialVersionUID = 1L;
private static final String NAME_FIELD_NAME = "name";
private static final String TEXT_FIELD_NAME = "text";
private static final String OFFSET_FIELD_NAME = "offset";
private static final String TYPE_FIELD_NAME = "type";
private static final String OFFSET_LINES_FIELD_TYPE = "offsetLines";
public enum FileType {
part, full, delete
}
/**
* Tern file to 'delete' file.
*
* @param name
* file name
*/
public TernFile(String name) {
super.add(NAME_FIELD_NAME, name);
super.add(TYPE_FIELD_NAME, FileType.delete.name());
}
/**
* Tern file for 'full' type.
*
* @param name
* file name
* @param text
* content of the file
* @param tags
* supported tags.
*/
public TernFile(String name, String text, ScriptTagRegion[] tags) {
this(name, text, tags, null);
}
/**
* Tern file for 'part' type.
*
* @param name
* file name
* @param text
* content of the file
* @param tags
* supported tags.
*/
public TernFile(String name, String text, ScriptTagRegion[] tags,
Integer offset) {
super.add(NAME_FIELD_NAME, name);
super.add(TEXT_FIELD_NAME, getText(text, tags));
if (offset != null) {
super.add(TYPE_FIELD_NAME, FileType.part.name());
super.add(OFFSET_LINES_FIELD_TYPE, offset);
} else {
super.add(TYPE_FIELD_NAME, FileType.full.name());
}
}
private String getText(String text, ScriptTagRegion[] tags) {
if (text == null || tags == null) {
return text;
}
return HtmlHelper.extractJS(text, tags);
}
public String getName() {
return JsonHelper.getString(this, NAME_FIELD_NAME);
}
public String getText() {
return JsonHelper.getString(this, TEXT_FIELD_NAME);
}
public Integer getOffset() {
return JsonHelper.getInteger(this, OFFSET_FIELD_NAME);
}
public String getType() {
return JsonHelper.getString(this, TYPE_FIELD_NAME);
}
public boolean isType(FileType type) {
return type.name().equals(getType());
}
}