Skip to content

Instantly share code, notes, and snippets.

@dkuppitz
Last active November 5, 2017 18:55
Show Gist options
  • Save dkuppitz/217c3ec13fabcb35d2299ddca428508d to your computer and use it in GitHub Desktop.
Save dkuppitz/217c3ec13fabcb35d2299ddca428508d to your computer and use it in GitHub Desktop.
package com.stackoverflow;
import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerGraph;
import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
import org.apache.tinkerpop.gremlin.structure.Graph;
import org.apache.tinkerpop.gremlin.structure.Vertex;
import static org.apache.tinkerpop.gremlin.process.traversal.Operator.*;
import static org.apache.tinkerpop.gremlin.process.traversal.Order.*;
import static org.apache.tinkerpop.gremlin.process.traversal.P.*;
import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.*;
import static org.apache.tinkerpop.gremlin.structure.Column.*;
import static org.apache.tinkerpop.gremlin.structure.T.*;
/**
* @author Daniel Kuppitz (me@gremlin.guru)
*/
public class App {
public static void main(String[] args) {
final Graph graph = TinkerGraph.open();
final GraphTraversalSource g = graph.traversal();
final Vertex web = graph.addVertex(label, "Server", "name", "WEB");
final Vertex app = graph.addVertex(label, "Server", "name", "APP1");
final Vertex app2 = graph.addVertex(label, "Server", "name", "APP2");
final Vertex app3 = graph.addVertex(label, "Server", "name", "APP3");
final Vertex sql = graph.addVertex(label, "Server", "name", "SQL");
web.addEdge("DEPENDS_ON", app);
web.addEdge("DEPENDS_ON", app2);
app.addEdge("DEPENDS_ON", sql);
app3.addEdge("DEPENDS_ON", sql);
app2.addEdge("DEPENDS_ON", app3);
final Traversal repeatTraversal =
cap("x").unfold().
filter(select(values).not(unfold().where(without("y")))).
select(keys).where(without("y")).
aggregate("y").
aggregate("z").
by(project("a","b").
by().
by(coalesce(select("z").unfold().select("b").order().by(decr).limit(1).
sack(assign).sack(sum).by(constant(1)).sack(),
constant(0))));
g.V().group("x").by("name").by(out("DEPENDS_ON").values("name").fold()).barrier().
repeat(repeatTraversal).cap("z").unfold().
group().by(select("b")).by(select("a").fold()).
forEachRemaining(System.out::println);
}
}
@dkuppitz
Copy link
Author

dkuppitz commented Nov 2, 2017

Output:

{0=[SQL], 1=[APP3, APP1], 2=[APP2], 3=[WEB]}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment