package uk.ac.cam.echo.server.analysis.internal; import org.hibernate.criterion.Restrictions; import uk.ac.cam.echo.server.HibernateUtil; import uk.ac.cam.echo.server.models.NodeModel; import java.util.*; /** Author: Petar 'PetarV' Veličković A utility class designed to simplify graph generation and conversion into various JSON forms. */ public class GraphUtil2 { public static class Node { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } } private static Map<String, Node> T = new HashMap<String, Node>(); private static Map<Node, Set<Node>> G = new HashMap<Node, Set<Node>>(); public static long lastTS = 0L; private static Node getNode(String val) { String tString = val; if (T.containsKey(tString)) return T.get(tString); Node model = new Node(); model.setName(val); T.put(tString, model); G.put(model, new HashSet<Node>()); return model; } public static void addNode(String name) { getNode(name); } public static void addEdge(String uName, String vName) { Node u = getNode(uName); Node v = getNode(vName); G.get(u).add(v); } public static void flush() { T.clear(); G.clear(); lastTS = 0L; } public static String getJSONGraph() { int idd = 1; StringBuilder jsonGraph = new StringBuilder(); boolean headStart = false; jsonGraph.append('['); for (Node N : G.keySet()) { if (headStart) jsonGraph.append(",\n"); else jsonGraph.append('\n'); jsonGraph.append('{'); jsonGraph.append("\"name\":\"").append(N.getName()).append("\","); jsonGraph.append("\"size\":").append(idd++).append(','); jsonGraph.append("\"imports\":"); jsonGraph.append('['); Set<Node> EE = G.get(N); boolean start = false; for (Node M : EE) { if (start) jsonGraph.append(','); jsonGraph.append('\"').append(M.getName()).append('\"'); start = true; } jsonGraph.append("]}"); headStart = true; } jsonGraph.append("\n]\n"); return jsonGraph.toString(); } }