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