/**
* 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.outline;
import tern.server.protocol.IJSONObjectHelper;
import tern.server.protocol.ITernResultProcessor;
import tern.server.protocol.TernDoc;
/**
* Tern outline result processor.
*
*/
public class TernOutlineResultProcessor implements ITernResultProcessor<ITernOutlineCollector> {
public static final TernOutlineResultProcessor INSTANCE = new TernOutlineResultProcessor();
private static final String OUTLINE_FIELD_NAME = "outline"; // $NON-NLS-1$
private static final String CHILDREN_FIELD_NAME = "children"; // $NON-NLS-1$
@Override
public void process(TernDoc doc, IJSONObjectHelper helper, Object jsonObject, ITernOutlineCollector collector) {
Iterable<Object> outline = helper.getList(jsonObject, OUTLINE_FIELD_NAME);
IJSNodeRoot root = collector.createRoot();
if (outline != null) {
addChildren(outline, root, collector, helper);
}
}
protected void addChildren(Iterable<Object> jsonNodes, IJSNode parent, ITernOutlineCollector collector,
IJSONObjectHelper helper) {
String name = null;
String type = null;
String kind = null;
String value = null;
Long start = null;
Long end = null;
String file = null;
IJSNode node = null;
Iterable<Object> jsonChildren;
for (Object jsonNode : jsonNodes) {
name = helper.getText(jsonNode, "name");
type = helper.getText(jsonNode, "type");
kind = helper.getText(jsonNode, "kind");
value = helper.getText(jsonNode, "value");
start = helper.getLong(jsonNode, "start");
end = helper.getLong(jsonNode, "end");
file = helper.getText(jsonNode, "file");
node = collector.createNode(name, type, kind, value, start, end, file, parent, jsonNode, helper);
jsonChildren = helper.getList(jsonNode, CHILDREN_FIELD_NAME); // $NON-NLS-1$
if (jsonChildren != null) {
addChildren(jsonChildren, node, collector, helper);
}
}
}
}