Cool. To not mess around with interfaces too much I'm thinking of having:
TraversalDescription#traverse( Node startNode, Node...
additionalStartNodes );
TraversalDescription#traverse( Path startPath, Path...
additionalStartPaths );
TraversalDescription#traverse( Iterable<Path> startPaths );
that would be rather similar, wouldn't it?
2011/7/30 Niels Hoogeveen <[email protected]>
>
> I would be all for it if this could become part of 1.5.
> I am willing to put time into this.
> > Date: Sat, 30 Jul 2011 11:33:01 +0200
> > From: [email protected]
> > To: [email protected]
> > Subject: Re: [Neo4j] Composable traversals
> >
> > Yes, FYI that's the exact thing we've been discussing :)
> >
> > 2011/7/29 Niels Hoogeveen <[email protected]>
> >
> > >
> > > Great, I would much rather see this become part of the core API than
> have
> > > this as part of the Enhanced API.
> > > To make things work correctly, one important change to core is needed:
> The
> > > Node interface needs to extends Traverser (the interface in
> > > org.neo4j.graphdb.traversal, not the one in org.neo4j.graphdb).
> > > This is actually not a big deal. There Traverser interface supports
> three
> > > methods:
> > > Iterator<path> iterator() [return 1 path with 1 element in the path,
> being
> > > the node itself]Iterable<Node> nodes() [return an iterable over the
> node
> > > itself]Iterable<Relationship> relationships() [return an empty
> iterable]
> > > With that addition, it's not all too difficult to enhance the current
> > > implementation of Traverser. It only adds one more iteration level over
> the
> > > current implementation. Instead of having one start node, we now have
> > > multiple start paths. When returning values from the Traverser, the
> start
> > > paths and the result paths need to be concatenated.
> > > In the new scenario, all "old" traverse() methods can remain the same,
> > > since Node becomes a Traverser, so those methods are just special cases
> > > where Iterable<Path> consists of 1 path, with just 1 element.
> > > Niels
> > > > Date: Fri, 29 Jul 2011 18:36:28 +0200
> > > > From: [email protected]
> > > > To: [email protected]
> > > > Subject: Re: [Neo4j] Composable traversals
> > > >
> > > > There have been thoughts a long while to make something like this
> with
> > > the
> > > > traversal framework, but time has never been allocated to evolve it.
> I'm
> > > > adding stuff to the framework in a side track and will surely add
> some
> > > > aspect of composable traversers also.
> > > >
> > > > 2011/7/29 Niels Hoogeveen <[email protected]>
> > > >
> > > > >
> > > > > I'd like to take a stab at implementing traversals in the Enhanced
> API.
> > > One
> > > > > of the things I'd like to do, is to make traversals composable.
> > > > >
> > > > > Right now a Traverser is created by either calling the traverse
> method
> > > on
> > > > > Node, or to call the traverse(Node) method on TraversalDescription.
> > > > >
> > > > > This makes traversals inherently non-composable, so we can't define
> a
> > > > > single traversal that returns the parents of all our friends.
> > > > >
> > > > > To make Traversers composable we need a function:
> > > > >
> > > > > Traverser traverse(Traverser, TraversalDescription)
> > > > >
> > > > > My take on it is to make Element (which is a superinterface of
> Node)
> > > into a
> > > > > Traverser.
> > > > >
> > > > > Traverser is basically another name for Iterable<Path>.
> > > > >
> > > > > Every Node (or more generally every Element) can be seen as an
> > > > > Iterabe<Path>, returning a single Path, which contains a single
> > > > > path-element, the Node/Element itself.
> > > > >
> > > > > Composing traversals would entail the concatenation of the paths
> > > returned
> > > > > with the paths supplied, so when we ask for the parents of all our
> > > friends,
> > > > > the returned paths would take the form:
> > > > >
> > > > > Node --FRIEND--> Node --> PARENT --> Node
> > > > >
> > > > > Niels
> > > > >
> > > > > _______________________________________________
> > > > > Neo4j mailing list
> > > > > [email protected]
> > > > > https://lists.neo4j.org/mailman/listinfo/user
> > > > >
> > > >
> > > >
> > > >
> > > > --
> > > > Mattias Persson, [[email protected]]
> > > > Hacker, Neo Technology
> > > > www.neotechnology.com
> > > > _______________________________________________
> > > > Neo4j mailing list
> > > > [email protected]
> > > > https://lists.neo4j.org/mailman/listinfo/user
> > >
> > > _______________________________________________
> > > Neo4j mailing list
> > > [email protected]
> > > https://lists.neo4j.org/mailman/listinfo/user
> > >
> >
> >
> >
> > --
> > Mattias Persson, [[email protected]]
> > Hacker, Neo Technology
> > www.neotechnology.com
> > _______________________________________________
> > Neo4j mailing list
> > [email protected]
> > https://lists.neo4j.org/mailman/listinfo/user
>
> _______________________________________________
> Neo4j mailing list
> [email protected]
> https://lists.neo4j.org/mailman/listinfo/user
>
--
Mattias Persson, [[email protected]]
Hacker, Neo Technology
www.neotechnology.com
_______________________________________________
Neo4j mailing list
[email protected]
https://lists.neo4j.org/mailman/listinfo/user