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