package edu.asu.spring.quadriga.service.network.impl;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.springframework.stereotype.Service;
import edu.asu.spring.quadriga.service.network.ID3Creator;
import edu.asu.spring.quadriga.transform.Link;
import edu.asu.spring.quadriga.transform.Node;
import edu.asu.spring.quadriga.transform.PredicateNode;
@Service
public class D3Creator implements ID3Creator {
@Override
public String getD3JSON(Map<String, Node> nodes, List<Link> links) {
StringBuffer buffer = new StringBuffer();
// nodes
buffer.append("{\n\"nodes\":[");
List<Node> nodeList = new ArrayList<Node>(nodes.values());
for (Node node : nodeList) {
buffer.append("{\"name\":\"");
buffer.append(node.getLabel());
buffer.append("\",");
buffer.append("\"id\":\"");
buffer.append(node.getId());
buffer.append("\",");
buffer.append("\"conceptId\":\"");
buffer.append(node.getConceptId());
buffer.append("\",");
buffer.append("\"conceptCpId\":\"");
buffer.append(node.getConceptIdShort());
buffer.append("\",");
buffer.append("\"group\":");
if (node instanceof PredicateNode) {
buffer.append("0");
} else {
buffer.append("1");
}
buffer.append(",");
// add source reference
buffer.append("\"sourceReference\": \"" + node.getSourceReference() + "\",");
// source reference end
buffer.append("\"statementid\":[");
for (int j = 0; j < node.getStatementIds().size(); j++) {
buffer.append("\"");
buffer.append(node.getStatementIds().get(j));
buffer.append("\"");
if(j < node.getStatementIds().size()-1){
buffer.append(",");
}
}
buffer.append("]\n");
buffer.append("}");
if (nodeList.indexOf(node) < nodeList.size() - 1) {
buffer.append(",");
}
buffer.append("\n");
}
buffer.append("],");
// links
buffer.append("\n\"links\":[\n");
for (Link link : links) {
buffer.append("{\"source\":");
buffer.append(nodeList.indexOf(link.getSubject()));
buffer.append(",");
buffer.append("\"target\":");
buffer.append(nodeList.indexOf(link.getObject()));
buffer.append(",");
buffer.append("\"label\":");
buffer.append("\"");
buffer.append(link.getLabel());
buffer.append("\",");
// add source reference
buffer.append("\"sourceReference\": \"" + link.getSourceReference() + "\",");
// source reference end
buffer.append("}");
if (links.indexOf(link) < links.size() - 1) {
buffer.append(",");
}
buffer.append("\n");
}
buffer.append("]\n}");
return buffer.toString();
}
}