Changeset View
Changeset View
Standalone View
Standalone View
java/src/main/java/org/softwareheritage/graph/Entry.java
Show All 36 Lines | public class Entry { | ||||
private int count_visitor(NodeCountVisitor f, long srcNodeId) { | private int count_visitor(NodeCountVisitor f, long srcNodeId) { | ||||
int[] count = {0}; | int[] count = {0}; | ||||
f.accept(srcNodeId, (node) -> { | f.accept(srcNodeId, (node) -> { | ||||
count[0]++; | count[0]++; | ||||
}); | }); | ||||
return count[0]; | return count[0]; | ||||
} | } | ||||
public int count_leaves(String direction, String edgesFmt, String src) { | public int count_leaves(String direction, String edgesFmt, String src, long maxEdges) { | ||||
long srcNodeId = graph.getNodeId(new SWHID(src)); | long srcNodeId = graph.getNodeId(new SWHID(src)); | ||||
Traversal t = new Traversal(graph.copy(), direction, edgesFmt); | Traversal t = new Traversal(graph.copy(), direction, edgesFmt, maxEdges); | ||||
return count_visitor(t::leavesVisitor, srcNodeId); | return count_visitor(t::leavesVisitor, srcNodeId); | ||||
} | } | ||||
public int count_neighbors(String direction, String edgesFmt, String src) { | public int count_neighbors(String direction, String edgesFmt, String src, long maxEdges) { | ||||
long srcNodeId = graph.getNodeId(new SWHID(src)); | long srcNodeId = graph.getNodeId(new SWHID(src)); | ||||
Traversal t = new Traversal(graph.copy(), direction, edgesFmt); | Traversal t = new Traversal(graph.copy(), direction, edgesFmt, maxEdges); | ||||
return count_visitor(t::neighborsVisitor, srcNodeId); | return count_visitor(t::neighborsVisitor, srcNodeId); | ||||
} | } | ||||
public int count_visit_nodes(String direction, String edgesFmt, String src) { | public int count_visit_nodes(String direction, String edgesFmt, String src, long maxEdges) { | ||||
long srcNodeId = graph.getNodeId(new SWHID(src)); | long srcNodeId = graph.getNodeId(new SWHID(src)); | ||||
Traversal t = new Traversal(graph.copy(), direction, edgesFmt); | Traversal t = new Traversal(graph.copy(), direction, edgesFmt, maxEdges); | ||||
return count_visitor(t::visitNodesVisitor, srcNodeId); | return count_visitor(t::visitNodesVisitor, srcNodeId); | ||||
} | } | ||||
public QueryHandler get_handler(String clientFIFO) { | public QueryHandler get_handler(String clientFIFO) { | ||||
return new QueryHandler(graph.copy(), clientFIFO); | return new QueryHandler(graph.copy(), clientFIFO); | ||||
} | } | ||||
private interface NodeCountVisitor { | private interface NodeCountVisitor { | ||||
▲ Show 20 Lines • Show All 79 Lines • ▼ Show 20 Lines | public class QueryHandler { | ||||
open(); | open(); | ||||
Traversal t = new Traversal(graph, direction, edgesFmt, maxEdges); | Traversal t = new Traversal(graph, direction, edgesFmt, maxEdges); | ||||
t.visitNodesVisitor(srcNodeId, null, (srcId, dstId) -> { | t.visitNodesVisitor(srcNodeId, null, (srcId, dstId) -> { | ||||
writeEdge(graph.getSWHID(srcId), graph.getSWHID(dstId)); | writeEdge(graph.getSWHID(srcId), graph.getSWHID(dstId)); | ||||
}); | }); | ||||
close(); | close(); | ||||
} | } | ||||
public void walk(String direction, String edgesFmt, String algorithm, String src, String dst) { | public void walk(String direction, String edgesFmt, String algorithm, String src, String dst, long maxEdges, | ||||
String returnTypes) { | |||||
long srcNodeId = graph.getNodeId(new SWHID(src)); | long srcNodeId = graph.getNodeId(new SWHID(src)); | ||||
open(); | open(); | ||||
ArrayList<Long> res; | ArrayList<Long> res; | ||||
Traversal t = new Traversal(graph, direction, edgesFmt, maxEdges, returnTypes); | |||||
if (dst.matches("ori|snp|rel|rev|dir|cnt")) { | if (dst.matches("ori|snp|rel|rev|dir|cnt")) { | ||||
Node.Type dstType = Node.Type.fromStr(dst); | Node.Type dstType = Node.Type.fromStr(dst); | ||||
Traversal t = new Traversal(graph, direction, edgesFmt); | |||||
res = t.walk(srcNodeId, dstType, algorithm); | res = t.walk(srcNodeId, dstType, algorithm); | ||||
} else { | } else { | ||||
long dstNodeId = graph.getNodeId(new SWHID(dst)); | long dstNodeId = graph.getNodeId(new SWHID(dst)); | ||||
Traversal t = new Traversal(graph, direction, edgesFmt); | |||||
res = t.walk(srcNodeId, dstNodeId, algorithm); | res = t.walk(srcNodeId, dstNodeId, algorithm); | ||||
} | } | ||||
for (Long nodeId : res) { | for (Long nodeId : res) { | ||||
writeNode(graph.getSWHID(nodeId)); | writeNode(graph.getSWHID(nodeId)); | ||||
} | } | ||||
close(); | close(); | ||||
} | } | ||||
public void random_walk(String direction, String edgesFmt, int retries, String src, String dst) { | public void random_walk(String direction, String edgesFmt, int retries, String src, String dst, long maxEdges, | ||||
String returnTypes) { | |||||
long srcNodeId = graph.getNodeId(new SWHID(src)); | long srcNodeId = graph.getNodeId(new SWHID(src)); | ||||
open(); | open(); | ||||
ArrayList<Long> res; | ArrayList<Long> res; | ||||
Traversal t = new Traversal(graph, direction, edgesFmt, maxEdges, returnTypes); | |||||
if (dst.matches("ori|snp|rel|rev|dir|cnt")) { | if (dst.matches("ori|snp|rel|rev|dir|cnt")) { | ||||
Node.Type dstType = Node.Type.fromStr(dst); | Node.Type dstType = Node.Type.fromStr(dst); | ||||
Traversal t = new Traversal(graph, direction, edgesFmt); | |||||
res = t.randomWalk(srcNodeId, dstType, retries); | res = t.randomWalk(srcNodeId, dstType, retries); | ||||
} else { | } else { | ||||
long dstNodeId = graph.getNodeId(new SWHID(dst)); | long dstNodeId = graph.getNodeId(new SWHID(dst)); | ||||
Traversal t = new Traversal(graph, direction, edgesFmt); | |||||
res = t.randomWalk(srcNodeId, dstNodeId, retries); | res = t.randomWalk(srcNodeId, dstNodeId, retries); | ||||
} | } | ||||
for (Long nodeId : res) { | for (Long nodeId : res) { | ||||
writeNode(graph.getSWHID(nodeId)); | writeNode(graph.getSWHID(nodeId)); | ||||
} | } | ||||
close(); | close(); | ||||
} | } | ||||
} | } | ||||
} | } |