Cedric, Thank you for your feedback! We value it highly.
I'm trying to understand your use case. You have entities of classes A, B, and C. Your graph looks like this: A --RELATED_TO--> B A --RELATED_TO--> C And you want to provide query methods for getting all B's and C's for a given A. Correct? If yes, could you please elaborate a bit more on the actual use case? I.e. what are the A's and B's and C's. It would be interesting to know what kind of a use case would drive this graph and these queries. Thanks, David On Wed, Feb 23, 2011 at 2:10 PM, cedric.hurst <[email protected]> wrote: > > Firstly, thanks for your great work on the Spring Data Graph API so far. I > took a look at the draft you had out here: > > https://gist.github.com/835408 > > And it looks like an awesome start. I'm relatively new to Neo4J (saw the > SpringOne keynote and the roo talk), but one thing I think would be very > useful is if there was some sort of higher-level PathMapper that worked at > the GraphBacked level, instead of working at the Neo4j node level. > > In my immediate case, I have three NodeBacked types in my graph: TypeA, > TypeB, and TypeC. Types B and C can be related to Type A through the same > relationship type, but I want to define two traversals that include only > each type respectively. I'm using the FieldTraversalDescriptionBuilder but > its falling down when I try to do something like the following: > > class TypeA { > @GraphTraversal(traversalBuilder = RelatedTraversalBuilder.class, > elementClass = TypeB.class) > private Iterable<TypeB> typeBs; > > @GraphTraversal(traversalBuilder = RelatedTraversalBuilder.class, > elementClass = TypeC.class) > private Iterable<TypeC> typeCs; > > private static class RelatedTraversalBuilder implements > FieldTraversalDescriptionBuilder { > public TraversalDescription build(NodeBacked start, Field field) { > return new > TraversalDescriptionImpl().relationships(RelTypes.RELATED_TO); > } > } > } > > In this particular case, the traversal will return a mix of TypeB and TypeC > and throw a class cast exception. > > I'd love to have some abstraction of a Path such that path.startNode() and > path.endNode() would return the actual NodeBacked classes themselves, so I > could write my PathMappers to use something like: > > class MyPathMapper implements PathMapper { > public Void mapPath(GraphPath path) { > if(path.endNode() instanceof TypeB) { > return Evaluator.INCLUDE_AND_PRUNE > } else { > return Evaluator.EXCLUDE_AND_PRUNE > } > } > } > > It seems like the template should be able to provide this with something > along the lines of: > > interface PathMapper<T> { > ... > @Override > public Void mapPath(GraphPath graphPath) { > eachPath(graphPath); > return null; > } > } > > interface GraphPath { > NodeBacked startNode(); > NodeBacked endNode(); > ... > } > > The key here is, of course, that GraphPath provides NodeBacked classes > instead of primitive neo4j nodes. Beyond the simple instanceof example I > gave, I think it would also be useful for evaluating paths using on > NodeEntity properties rather than having to call > node.getProperty('somePropertyNameThatIWillProbablyMisspell'). > > Not sure if my request makes sense, or is reasonable to implement, but I > think it would certainly make my life a lot easier. > -- > View this message in context: > http://neo4j-user-list.438527.n3.nabble.com/Neo4j-Spring-Neo4jTemplate-tp2525460p2563548.html > Sent from the Neo4J User List mailing list archive at Nabble.com. > _______________________________________________ > Neo4j mailing list > [email protected] > https://lists.neo4j.org/mailman/listinfo/user > -- David Montag Neo Technology, www.neotechnology.com Cell: 650.556.4411 [email protected] _______________________________________________ Neo4j mailing list [email protected] https://lists.neo4j.org/mailman/listinfo/user

