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