This example shows how to use a path context holding a represenation of a path.
First, we create a toy graph:
Node A = db.createNode(); Node B = db.createNode(); Node C = db.createNode(); Node D = db.createNode(); A.createRelationshipTo( B, REL1 ); B.createRelationshipTo( C, REL2 ); C.createRelationshipTo( D, REL3 ); A.createRelationshipTo( C, REL2 );
Now, the order of relationships (REL1 -> REL2 -> REL3) is stored in an ArrayList. Upon traversal, the Evaluator can check against it to for instance ensure that only paths are included and returned that have the predefined order of relationships:
final ArrayList<RelationshipType> orderedPathContext = new ArrayList<RelationshipType>(); orderedPathContext.add( REL1 ); orderedPathContext.add( withName( "REL2" ) ); orderedPathContext.add( withName( "REL3" ) ); TraversalDescription td = Traversal.description().evaluator( new Evaluator() { public Evaluation evaluate( Path path ) { if ( path.length() == 0 ) { return Evaluation.EXCLUDE_AND_CONTINUE; } String currentName = path.lastRelationship().getType().name(); String relationshipType = orderedPathContext.get( path.length() - 1 ).name(); if ( path.length() == orderedPathContext.size() ) { if ( currentName.equals( relationshipType ) ) { return Evaluation.INCLUDE_AND_PRUNE; } else { return Evaluation.EXCLUDE_AND_PRUNE; } } else { if ( currentName.equals( relationshipType ) ) { return Evaluation.EXCLUDE_AND_CONTINUE; } else { return Evaluation.EXCLUDE_AND_PRUNE; } } } } ); Traverser t = td.traverse( db.getNodeById( 1 ) ); for ( Path path : t ) { System.out.println( path ); }
Full source code: OrderedPathTest