Search in sources :

Example 81 with Path

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");
}
Also used : Path(org.neo4j.graphdb.Path) Test(org.junit.Test)

Example 82 with Path

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);
}
Also used : ShortestPath(org.neo4j.graphalgo.impl.path.ShortestPath) Path(org.neo4j.graphdb.Path) Node(org.neo4j.graphdb.Node) ShortestPath(org.neo4j.graphalgo.impl.path.ShortestPath) Collection(java.util.Collection) HashSet(java.util.HashSet) Test(org.junit.Test)

Example 83 with Path

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());
}
Also used : Path(org.neo4j.graphdb.Path) ArrayList(java.util.ArrayList)

Example 84 with Path

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;
        }
    };
}
Also used : Path(org.neo4j.graphdb.Path) PrefetchingIterator(org.neo4j.helpers.collection.PrefetchingIterator) BranchOrderingPolicy(org.neo4j.graphdb.traversal.BranchOrderingPolicy) HashMap(java.util.HashMap) Node(org.neo4j.graphdb.Node) BranchSelector(org.neo4j.graphdb.traversal.BranchSelector) Predicate(org.neo4j.helpers.Predicate) Traverser(org.neo4j.graphdb.traversal.Traverser) TraversalDescription(org.neo4j.graphdb.traversal.TraversalDescription) LiteDepthFirstSelector(org.neo4j.graphalgo.impl.util.LiteDepthFirstSelector) TraversalBranch(org.neo4j.graphdb.traversal.TraversalBranch)

Example 85 with Path

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;
}
Also used : Path(org.neo4j.graphdb.Path)

Aggregations

Path (org.neo4j.graphdb.Path)112 Test (org.junit.Test)66 Node (org.neo4j.graphdb.Node)49 Relationship (org.neo4j.graphdb.Relationship)30 WeightedPath (org.neo4j.graphalgo.WeightedPath)20 Transaction (org.neo4j.graphdb.Transaction)18 ArrayList (java.util.ArrayList)15 Traverser (org.neo4j.graphdb.traversal.Traverser)15 TraversalDescription (org.neo4j.graphdb.traversal.TraversalDescription)12 HashSet (java.util.HashSet)9 Evaluator (org.neo4j.graphdb.traversal.Evaluator)9 LinkedList (java.util.LinkedList)6 RelationshipType (org.neo4j.graphdb.RelationshipType)6 TraversalBranch (org.neo4j.graphdb.traversal.TraversalBranch)6 Predicate (org.neo4j.helpers.Predicate)6 HashMap (java.util.HashMap)5 Map (java.util.Map)5 PathFinder (org.neo4j.graphalgo.PathFinder)4 GraphDatabaseService (org.neo4j.graphdb.GraphDatabaseService)4 ExactDepthPathFinder (org.neo4j.graphalgo.impl.path.ExactDepthPathFinder)3