From f3421f2de65cf4fa8027db4f6cd9e8f65e925e47 Mon Sep 17 00:00:00 2001 From: nrkkalyan Date: Sat, 21 Apr 2012 16:19:45 +0200 Subject: [PATCH] Added support for cypher query and traverse --- .../neo4j/rest/graphdb/RestGraphDatabase.java | 20 ++++++-- .../neo4j/rest/graphdb/entity/RestNode.java | 49 ++++++++++++++----- 2 files changed, 54 insertions(+), 15 deletions(-) diff --git a/src/main/java/org/neo4j/rest/graphdb/RestGraphDatabase.java b/src/main/java/org/neo4j/rest/graphdb/RestGraphDatabase.java index 31cf007..9392c35 100644 --- a/src/main/java/org/neo4j/rest/graphdb/RestGraphDatabase.java +++ b/src/main/java/org/neo4j/rest/graphdb/RestGraphDatabase.java @@ -20,6 +20,8 @@ package org.neo4j.rest.graphdb; +import java.util.Map; + import org.neo4j.graphdb.DynamicRelationshipType; import org.neo4j.graphdb.Node; import org.neo4j.graphdb.Relationship; @@ -28,8 +30,6 @@ import org.neo4j.rest.graphdb.query.RestCypherQueryEngine; import org.neo4j.rest.graphdb.util.ResultConverter; -import java.util.Map; - public class RestGraphDatabase extends AbstractRemoteDatabase { private RestAPI restAPI; @@ -59,18 +59,22 @@ public RestAPI getRestAPI(){ } + @Override public RestIndexManager index() { return this.restAPI.index(); } + @Override public Node createNode() { return this.restAPI.createNode(null); } + @Override public Node getNodeById( long id ) { return this.restAPI.getNodeById(id); } + @Override public Node getReferenceNode() { return this.restAPI.getReferenceNode(); } @@ -80,9 +84,18 @@ public Iterable getAllNodes() { return cypherQueryEngine.query("start n=node(*) return n", null).to(Node.class); } + public Iterable> execute( String statement, Map params ) + { + return cypherQueryEngine.query( statement, params ); + } + + @Override public Iterable getRelationshipTypes() { - return cypherQueryEngine.query("start n=node(*) match n-[r]->() return distinct type(r) as rel_type", null).to(RelationshipType.class, new ResultConverter, RelationshipType>() { + return cypherQueryEngine.query( "start n=node(*) match n-[r]->() return distinct type(r) as rel_type", null ).to( + RelationshipType.class,// + new ResultConverter, RelationshipType>() + { @Override public RelationshipType convert(Map row, Class type) { return DynamicRelationshipType.withName((String)row.get("rel_type")); @@ -90,6 +103,7 @@ public RelationshipType convert(Map row, Class }); } + @Override public Relationship getRelationshipById( long id ) { return this.restAPI.getRelationshipById(id); } diff --git a/src/main/java/org/neo4j/rest/graphdb/entity/RestNode.java b/src/main/java/org/neo4j/rest/graphdb/entity/RestNode.java index d8aa259..c2ed80d 100644 --- a/src/main/java/org/neo4j/rest/graphdb/entity/RestNode.java +++ b/src/main/java/org/neo4j/rest/graphdb/entity/RestNode.java @@ -35,6 +35,7 @@ import org.neo4j.helpers.collection.CombiningIterable; import org.neo4j.helpers.collection.IterableWrapper; import org.neo4j.helpers.collection.IteratorUtil; +import org.neo4j.kernel.impl.traversal.OldTraverserWrapper; import org.neo4j.rest.graphdb.RestAPI; import org.neo4j.rest.graphdb.traversal.RestDirection; @@ -51,14 +52,17 @@ public RestNode( Map data, RestAPI restApi ) { super( data, restApi ); } + @Override public Relationship createRelationshipTo( Node toNode, RelationshipType type ) { - return this.restApi.createRelationship(this,(RestNode)toNode,type,null); + return this.restApi.createRelationship(this,toNode,type,null); } + @Override public Iterable getRelationships() { return restApi.wrapRelationships( restRequest.get( "relationships/all" ) ); } + @Override public Iterable getRelationships( RelationshipType... types ) { String path = getStructuralData().get( "all_relationships" ) + "/"; int counter = 0; @@ -72,10 +76,12 @@ public Iterable getRelationships( RelationshipType... types ) { } + @Override public Iterable getRelationships( Direction direction ) { return restApi.wrapRelationships( restRequest.get( "relationships/" + RestDirection.from( direction ).shortName ) ); } + @Override public Iterable getRelationships( RelationshipType type, Direction direction ) { String relationshipsKey = RestDirection.from( direction ).longName + "_relationships"; @@ -83,41 +89,57 @@ public Iterable getRelationships( RelationshipType type, return restApi.wrapRelationships( restRequest.get( relationship + "/" + type.name() ) ); } + @Override public Relationship getSingleRelationship( RelationshipType type, Direction direction ) { return IteratorUtil.singleOrNull( getRelationships( type, direction ) ); } + @Override public boolean hasRelationship() { return getRelationships().iterator().hasNext(); } + @Override public boolean hasRelationship( RelationshipType... types ) { return getRelationships( types ).iterator().hasNext(); } + @Override public boolean hasRelationship( Direction direction ) { return getRelationships( direction ).iterator().hasNext(); } + @Override public boolean hasRelationship( RelationshipType type, Direction direction ) { return getRelationships( type, direction ).iterator().hasNext(); } - public Traverser traverse( Order order, StopEvaluator stopEvaluator, - ReturnableEvaluator returnableEvaluator, Object... rels ) { - throw new UnsupportedOperationException(); + @Override + public Traverser traverse( Order traversalOrder, StopEvaluator stopEvaluator, + ReturnableEvaluator returnableEvaluator, Object... relationshipTypesAndDirections ) + { + return OldTraverserWrapper.traverse( this, traversalOrder, stopEvaluator, returnableEvaluator, + relationshipTypesAndDirections ); + } - public Traverser traverse( Order order, StopEvaluator stopEvaluator, - ReturnableEvaluator returnableEvaluator, RelationshipType type, Direction direction ) { - throw new UnsupportedOperationException(); + @Override + public Traverser traverse( Order traversalOrder, StopEvaluator stopEvaluator, + ReturnableEvaluator returnableEvaluator, RelationshipType relationshipType, Direction direction ) + { + + return OldTraverserWrapper.traverse( this, traversalOrder, stopEvaluator, returnableEvaluator, + relationshipType, direction ); } - public Traverser traverse( Order order, StopEvaluator stopEvaluator, - ReturnableEvaluator returnableEvaluator, RelationshipType type, Direction direction, - RelationshipType secondType, Direction secondDirection ) { - throw new UnsupportedOperationException(); + @Override + public Traverser traverse( Order traversalOrder, StopEvaluator stopEvaluator, + ReturnableEvaluator returnableEvaluator, RelationshipType firstRelationshipType, Direction firstDirection, + RelationshipType secondRelationshipType, Direction secondDirection ) + { + return OldTraverserWrapper.traverse( this, traversalOrder, stopEvaluator, returnableEvaluator, + firstRelationshipType, firstDirection, secondRelationshipType, secondDirection ); } @Override @@ -133,7 +155,10 @@ protected Iterable underlyingObjectToObject(RelationshipType relat @Override public boolean hasRelationship(Direction direction, RelationshipType... types) { for (RelationshipType relationshipType : types) { - if (hasRelationship(relationshipType,direction)) return true; + if (hasRelationship(relationshipType,direction)) + { + return true; + } } return false; }