use of org.neo4j.graphdb.Path in project graphdb by neo4j-attic.
the class TestExactDepthPathFinder method testSingle.
@Test
public void testSingle() {
PathFinder<Path> finder = newFinder();
Path path = finder.findSinglePath(graph.getNode("SOURCE"), graph.getNode("TARGET"));
assertNotNull(path);
assertPathDef(path, "SOURCE", "z", "9", "0", "TARGET");
}
use of org.neo4j.graphdb.Path in project graphdb by neo4j-attic.
the class TestShortestPath method makeSureDescentStopsWhenPathIsFound.
@Test
public void makeSureDescentStopsWhenPathIsFound() throws Exception {
/*
* (a)==>(b)==>(c)==>(d)==>(e)
* \
* v
* (f)-->(g)-->(h)-->(i)
*/
graph.makeEdgeChain("a,b,c,d,e");
graph.makeEdgeChain("a,b,c,d,e");
graph.makeEdgeChain("a,f,g,h,i");
Node a = graph.getNode("a");
Node b = graph.getNode("b");
Node c = graph.getNode("c");
final Set<Node> allowedNodes = new HashSet<Node>(Arrays.asList(a, b, c));
PathFinder<Path> finder = new ShortestPath(100, Traversal.expanderForAllTypes(Direction.OUTGOING)) {
@Override
protected Collection<Node> filterNextLevelNodes(Collection<Node> nextNodes) {
for (Node node : nextNodes) {
if (!allowedNodes.contains(node)) {
fail("Node " + node.getProperty(KEY_ID) + " shouldn't be expanded");
}
}
return nextNodes;
}
};
finder.findAllPaths(a, c);
}
use of org.neo4j.graphdb.Path in project graphdb by neo4j-attic.
the class Neo4jAlgoTestCase method assertPaths.
public void assertPaths(Iterable<? extends Path> paths, String... pathDefinitions) {
List<String> pathDefs = new ArrayList<String>(Arrays.asList(pathDefinitions));
for (Path path : paths) {
String pathDef = getPathDef(path);
int index = pathDefs.indexOf(pathDef);
if (index != -1) {
pathDefs.remove(index);
} else {
fail("Unexpected path " + pathDef);
}
}
assertTrue("These were expected, but not found: " + pathDefs.toString(), pathDefs.isEmpty());
}
use of org.neo4j.graphdb.Path in project graphdb by neo4j-attic.
the class ExactDepthPathFinder method paths.
private Iterator<Path> paths(final Node start, final Node end) {
TraversalDescription base = Traversal.description().uniqueness(Uniqueness.RELATIONSHIP_PATH).order(new BranchOrderingPolicy() {
public BranchSelector create(TraversalBranch startSource) {
return new LiteDepthFirstSelector(startSource, startThreshold);
}
});
final int firstHalf = onDepth / 2;
Traverser startTraverser = base.prune(Traversal.pruneAfterDepth(firstHalf)).expand(expander).filter(new Predicate<Path>() {
public boolean accept(Path item) {
return item.length() == firstHalf;
}
}).traverse(start);
final int secondHalf = onDepth - firstHalf;
Traverser endTraverser = base.prune(Traversal.pruneAfterDepth(secondHalf)).expand(expander.reversed()).filter(new Predicate<Path>() {
public boolean accept(Path item) {
return item.length() == secondHalf;
}
}).traverse(end);
final Iterator<Path> startIterator = startTraverser.iterator();
final Iterator<Path> endIterator = endTraverser.iterator();
final Map<Node, Visit> visits = new HashMap<Node, Visit>();
return new PrefetchingIterator<Path>() {
@Override
protected Path fetchNextOrNull() {
Path[] found = null;
while (found == null && (startIterator.hasNext() || endIterator.hasNext())) {
found = goOneStep(start, startIterator, visits);
if (found == null) {
found = goOneStep(end, endIterator, visits);
}
}
return found != null ? toPath(found, start) : null;
}
};
}
use of org.neo4j.graphdb.Path in project graphdb by neo4j-attic.
the class ExactDepthPathFinder method goOneStep.
private Path[] goOneStep(Node node, Iterator<Path> visitor, Map<Node, Visit> visits) {
if (!visitor.hasNext()) {
return null;
}
Path position = visitor.next();
Visit visit = visits.get(position.endNode());
if (visit != null) {
if (visitor != visit.visitor) {
return new Path[] { visit.position, position };
}
} else {
visits.put(position.endNode(), new Visit(position, visitor));
}
return null;
}
Aggregations