Also, the latest graph-algo is 0.6-SNAPSHOT... so use that instead

2010/6/23 Anders Nawroth <and...@neotechnology.com>

> Hi!
>
> See:
> http://www.mail-archive.com/user@lists.neo4j.org/msg04044.html
>
> /anders
>
> On 06/23/2010 03:44 PM, Alex Averbuch wrote:
> > Hi Tobias,
> > It seems as though the new changes have broken the AStar code I'm using.
> >
> > I use:
> > neo4j-apoc 1.1-SNAPSHOT
> > neo4j-graph-algo 0.5-SNAPSHOT
> >
> > AStar uses DefaultExpander and can no longer find it.
> >
> > Here's an example of the code that worked until now.
> >
> > DefaultExpander relExpander = new DefaultExpander();
> > relExpander.add(GISRelationshipTypes.BICYCLE_WAY, Direction.BOTH);
> > AStar sp = new AStar(graphDb, relExpander, costEval, estimateEval);
> > Path path = sp.findSinglePath(startNode, endNode);
> >
> > The problem seems to be that AStar wants a RelationshipExpander but now I
> > can only create an Expansion<Relationship>.
> >
> > Do you have any suggestions as to how to make this work again?
> >
> > Regards,
> > Alex
> >
> >
> > On Wed, Jun 23, 2010 at 11:14 AM, Tobias Ivarsson<
> > tobias.ivars...@neotechnology.com>  wrote:
> >
> >> Hi Neo4j enthusiasts!
> >>
> >> Yesterday I committed an API that Mattias and I have been working on for
> a
> >> few days. It comes in the form of two new interfaces Expander and
> Expansion
> >> (in the org.neo4j.graphdb package), and four new methods in the Node
> >> interface (method names starting with "expand").
> >>
> >> The two main problems this API solves are:
> >> 1. Adds a clean way for getting related nodes from a source node.
> >> 2. Adds a type safe way for declaratively specifying any combination of
> >> RelationshipTypes and Directions to expand.
> >>
> >> This replaces what was actually an anti-pattern, but something we saw
> >> people
> >> doing a lot: using a depth-one traversal to get the nodes related to a
> >> node,
> >> without needing to bother with the Relationship interface. Example:
> >>
> >> // The most convenient way to write it in the past:
> >> Node source = ...
> >> Traverser traverser = source.traverse(
> >>     Traverser.Order.DEPTH_FIRST,
> >>     new StopAtDepth( 1 ),
> >>     ReturnableEvaluator.ALL_BUT_START_NODE,
> >>     TYPE_ONE, Direction.INCOMING,
> >>     TYPE_TWO, Direction.OUTGOING);
> >> for (Node related : traverser) {
> >>     doSomethingWith( related );
> >> }
> >>
> >> // The previously recommended (and bloated) way of doing it:
> >> Node source = ...
> >> for (Relationship rel : source.getRelationships( TYPE_ONE, TYPE_TWO )) {
> >>     Node related;
> >>     if (rel.isType(TYPE_ONE)) {
> >>         related = rel.getStartNode();
> >>         if (related.equals(source)) continue; // we only want INCOMING
> >> TYPE_ONE
> >>     } else if (rel.isType(TYPE_TWO)) {
> >>         related = rel.getEndNode();
> >>         if (related.equals(source)) continue; // we only want OUTGOING
> >> TYPE_TWO
> >>     } else {
> >>         continue; // should never happen, but makes javac know that
> related
> >> is != null
> >>     }
> >>     doSomethingWith( related );
> >> }
> >>
> >> // With the new API:
> >> Node source = ...
> >> for (Node related : source.expand( TYPE_ONE, Direction.INCOMING )
> >>                           .add( TYPE_TWO, Direction.OUTGOING ).nodes())
> {
> >>     doSomethingWith( related );
> >> }
> >>
> >> The return type of the Node.expand(...)-methods are the new Expansion
> type,
> >> it defaults to expanding to Relationship, but the
> Expansion.nodes()-method
> >> makes it expand to Node. It also contains the add()-methods seen above
> for
> >> specifying RelationshipTypes to include in the expansion. The spelling
> of
> >> this method isn't perfectly decided yet, we are choosing between "add",
> >> "and" and "include", we want something that reads nicely in the code,
> but
> >> doesn't conflict with keywords in other JVM-languages ("and" is a
> keyword
> >> in
> >> Python, and I think "include" means something special in Ruby). There is
> >> also an Expansion.exlude(RelationshipType)-method for use together with
> the
> >> Node.expandAll().
> >>
> >> The Expansion is backed by the newly added companion interface Expander.
> >> This is an extension of RelationshipExpander that adds builder
> >> capabilities.
> >> It turns the functionality of the DefultExpander implementation class
> (now
> >> removed) into an interface in the API. RelationshipExpander is still
> around
> >> as a single method interface, which is useful for when you want to
> >> implement
> >> your own expansion logic.
> >>
> >> This API is added to trunk so that we can get feedback from everyone who
> >> use
> >> the snapshot builds of Neo4j, if the response to this API isn't
> positive,
> >> it
> >> will probably be removed before the release of 1.1, so please submit
> >> comments in this thread on what you think about this API.
> >>
> >> Happy Hacking,
> >> --
> >> Tobias Ivarsson<tobias.ivars...@neotechnology.com>
> >> Hacker, Neo Technology
> >> www.neotechnology.com
> >> Cellphone: +46 706 534857
> >> _______________________________________________
> >> Neo4j mailing list
> >> User@lists.neo4j.org
> >> https://lists.neo4j.org/mailman/listinfo/user
> >>
> > _______________________________________________
> > Neo4j mailing list
> > User@lists.neo4j.org
> > https://lists.neo4j.org/mailman/listinfo/user
> _______________________________________________
> Neo4j mailing list
> User@lists.neo4j.org
> https://lists.neo4j.org/mailman/listinfo/user
>



-- 
Mattias Persson, [matt...@neotechnology.com]
Hacker, Neo Technology
www.neotechnology.com
_______________________________________________
Neo4j mailing list
User@lists.neo4j.org
https://lists.neo4j.org/mailman/listinfo/user

Reply via email to