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

Reply via email to