Hi Michael,

Great utilities. It'll be interesting to try and use them as soon as
possible in a project to see what they can do.

Over time I've collected some various utilities in neo-utils. They
aren't very organized :) but there's stuff in there which I see myself
writing over and over again, f.ex:

o If you'd like to have a "sub reference" node to the neo reference
node, f.ex. a node to connect all users to:

    NeoUtil neoUtil = new NeoUtil( neo );
    Node usersRefNode = neoUtil.getOrCreateSubReferenceNode( MyRelTypes.USERS );

o Simple methods which wraps a single node/relationship
has/get/set/removeProperty in a transaction.

    public String methodWhichIsntInATransactionRightNow()
    {
        return ( String ) neoUtil.getProperty( "myKey" );
    }

o Various handling of node/relationship array property values.

    List<Object> values = neoUtil.neoPropertyAsList( node.getProperty(
"keyWithOrWithoutArrayValue" ) );
    values.add( "Mattias" );
    node.setProperty( "keyWithOrWithoutArrayValue", values );

o Expose a node as a Collection (1 to *) or a Link (1 to 0..1)

    public class User extends NodeWrapperImpl
    ....

    Collection<User> users = new NodeWrapperRelationshipSet<User>(
        neo, usersRefNode, MyRelTypes.USERS, User.class );
    for ( User user : users ) ...
    users.add( ... );
    users.remove( ... );
    users.clear();
    a.s.o.

Feel free to try out neo-utils as well and give feedback. I should
definately document that component more though.


--
Mattias Persson
Neo Technology
[EMAIL PROTECTED]

2008/9/24 Michael Hunger <[EMAIL PROTECTED]>:
> Hi folks,
>
> after a cool geek cruise with Emil and other. I added my contribution to the 
> svn.
> You can find it under neo-template-api.
>
> It's an IoC, ResourceManagement API (like Spring Templates) which executes 
> the callback within a neo transaction.
>
> I also added wrapper for the NeoService for just having the Node stuff 
> available and a Status interface for marking the
> transaction for rollback.
>
> Other stuff I did was creating a GraphDescription class which can be used 
> programmatically and with property files to
> setup test data (dot syntax files are next).
>
> The Traversal class has a fluent API for specifiying what you want.
>
> some examples:
>         final NeoTemplate template = new NeoTemplate(neo);
>         template.execute(new NeoCallback()
>         {
>             public void neo(final Status status, final Graph graph) throws 
> Exception
>             {
>                 Node refNode = graph.getReferenceNode();
>                 Node node = graph.createNode(_("name", "Test"), _("size", 
> 100));
>                 refNode.createRelationshipTo(node, HAS);
>
>                 final Relationship toTestNode = 
> refNode.getSingleRelationship(HAS, Direction.OUTGOING);
>                 final Node nodeByRelationship = toTestNode.getEndNode();
>                 assertEquals("Test", nodeByRelationship.getProperty("name"));
>                 assertEquals(100, nodeByRelationship.getProperty("size"));
>             }
>         });
>         template.execute(new NeoCallback()
>         {
>             public void neo(final Status status, final Graph graph) throws 
> Exception
>             {
>                 Node refNode = graph.getReferenceNode();
>                 final Relationship toTestNode = 
> refNode.getSingleRelationship(HAS, Direction.OUTGOING);
>                 final Node nodeByRelationship = toTestNode.getEndNode();
>                 assertEquals("Test", nodeByRelationship.getProperty("name"));
>                 assertEquals(100, nodeByRelationship.getProperty("size"));
>             }
>         });
>
>
> some traversal fluent api possibilities:
>         final Traversal traversal = 
> Traversal.walk().breadthFirst().depthFirst()
>                 .stopOn(StopEvaluator.DEPTH_ONE).first().all()
>                 .incoming(HAS).outgoing(HAS).twoway(HAS);
>
> use just graph.traverse(traversal,[startNode],[Mapper])
> like in:
>                 assertEquals("all members", asList(names),
>                         graph.traverse(graph.getReferenceNode(), traversal,
>                                 new Mapper<Node, String>()
>                                 {
>                                     public String map(final Node node)
>                                     {
>                                         return (String) 
> node.getProperty("name", "");
>                                     }
>                                 }));
>
>
>
>         template.execute(new NeoCallback()
>         {
>             public void neo(final Status status, final Graph graph) throws 
> Exception
>             {
>                 final GraphDescription heaven = new GraphDescription();
>                 heaven.add("adam", "age", 1);
>                 heaven.add("eve", "age", 0);
>                 heaven.relate("adam", HAS, "eve");
>                 graph.load(heaven);
>
>                 checkHeaven(graph);
>             }
>         });
>
>
> Have fun
>
> Michael
>
> --
> Michael Hunger
> Independent Consultant
>
> Web: http://www.jexp.de
> Email: [EMAIL PROTECTED]
>
> Enthusiastic Evangelist for Better Software Development
>
> Don't stop where you are: http://creating.passionate-developers.org
> We support Software Engineering Radio (www.se-radio.net)
> _______________________________________________
> Neo mailing list
> User@lists.neo4j.org
> https://lists.neo4j.org/mailman/listinfo/user
>
_______________________________________________
Neo mailing list
User@lists.neo4j.org
https://lists.neo4j.org/mailman/listinfo/user

Reply via email to