/** * A link:javadocs/org/neo4j/graphdb/traversal/TraversalDescription.html[traversal description] is * built using a fluent interface and such a description can then spawn * link:javadocs/org/neo4j/graphdb/traversal/Traverser.html[traversers]. @@graph * * <p>With the definition of the +RelationshipTypes+ as @@sourceRels * * <p>The graph can be traversed with for example the following traverser, starting at the ``Joe'' * node: @@knowslikestraverser * * <p>The traversal will output: @@knowslikesoutput * * <p>Since * link:javadocs/org/neo4j/graphdb/traversal/TraversalDescription.html[+TraversalDescription+]s * are immutable it is also useful to create template descriptions which holds common settings * shared by different traversals. For example, let's start with this traverser: @@basetraverser * * <p>This traverser would yield the following output (we will keep starting from the ``Joe'' * node): @@baseoutput * * <p>Now let's create a new traverser from it, restricting depth to three: @@depth3 * * <p>This will give us the following result: @@output3 * * <p>Or how about from depth two to four? That's done like this: @@depth4 * * <p>This traversal gives us: @@output4 * * <p>For various useful evaluators, see the * link:javadocs/org/neo4j/graphdb/traversal/Evaluators.html[Evaluators] Java API or simply * implement the link:javadocs/org/neo4j/graphdb/traversal/Evaluator.html[Evaluator] interface * yourself. * * <p>If you're not interested in the link:javadocs/org/neo4j/graphdb/Path.html[+Path+]s, but the * link:javadocs/org/neo4j/graphdb/Node.html[+Node+]s you can transform the traverser into an * iterable of link:javadocs/org/neo4j/graphdb/traversal/Traverser.html#nodes()[nodes] like * this: @@nodes * * <p>In this case we use it to retrieve the names: @@nodeoutput * * <p>link:javadocs/org/neo4j/graphdb/traversal/Traverser.html#relationships()[Relationships] are * fine as well, here's how to get them: @@relationships * * <p>Here the relationship types are written, and we get: @@relationshipoutput * * <p>TIP: The source code for the traversers in this example is available at: @@github */ @Test @Documented @Graph({ "Joe KNOWS Sara", "Lisa LIKES Joe", "Peter KNOWS Sara", "Dirk KNOWS Peter", "Lars KNOWS Dirk", "Ed KNOWS Lars", "Lisa KNOWS Lars" }) public void how_to_use_the_Traversal_framework() { Node joe = data.get().get("Joe"); TraversalExample example = new TraversalExample(db); gen.get() .addSnippet( "graph", createGraphVizWithNodeId("Traversal Example Graph", graphdb(), gen.get().getTitle())); try (Transaction tx = db.beginTx()) { String output = example.knowsLikesTraverser(joe); gen.get().addSnippet("knowslikesoutput", createOutputSnippet(output)); output = example.traverseBaseTraverser(joe); gen.get().addSnippet("baseoutput", createOutputSnippet(output)); output = example.depth3(joe); gen.get().addSnippet("output3", createOutputSnippet(output)); output = example.depth4(joe); gen.get().addSnippet("output4", createOutputSnippet(output)); output = example.nodes(joe); gen.get().addSnippet("nodeoutput", createOutputSnippet(output)); output = example.relationships(joe); gen.get().addSnippet("relationshipoutput", createOutputSnippet(output)); gen.get() .addSourceSnippets( example.getClass(), "knowslikestraverser", "sourceRels", "basetraverser", "depth3", "depth4", "nodes", "relationships"); gen.get().addGithubSourceLink("github", example.getClass(), "community/embedded-examples"); } }
@Test public void runAll() throws IOException { TraversalExample.main(null); }