diff --git a/spring-data-neo4j-rest/src/main/java/org/springframework/data/graph/neo4j/rest/support/RestGraphDatabase.java b/spring-data-neo4j-rest/src/main/java/org/springframework/data/graph/neo4j/rest/support/RestGraphDatabase.java index a480495a7..4a9bf223f 100644 --- a/spring-data-neo4j-rest/src/main/java/org/springframework/data/graph/neo4j/rest/support/RestGraphDatabase.java +++ b/spring-data-neo4j-rest/src/main/java/org/springframework/data/graph/neo4j/rest/support/RestGraphDatabase.java @@ -73,8 +73,7 @@ public class RestGraphDatabase implements GraphDatabaseService, GraphDatabase { @Override public Relationship createRelationship(Node startNode, Node endNode, RelationshipType type, Property... props) { - Relationship relationship = startNode.createRelationshipTo(endNode, type); - return relationship; + return RestRelationship.create((RestNode)startNode,(RestNode)endNode,type,props); } @Override diff --git a/spring-data-neo4j-rest/src/main/java/org/springframework/data/graph/neo4j/rest/support/RestNode.java b/spring-data-neo4j-rest/src/main/java/org/springframework/data/graph/neo4j/rest/support/RestNode.java index 414b300d8..b5d12a17d 100644 --- a/spring-data-neo4j-rest/src/main/java/org/springframework/data/graph/neo4j/rest/support/RestNode.java +++ b/spring-data-neo4j-rest/src/main/java/org/springframework/data/graph/neo4j/rest/support/RestNode.java @@ -21,9 +21,7 @@ import org.neo4j.graphdb.*; import org.neo4j.graphdb.Traverser.Order; import org.neo4j.helpers.collection.IterableWrapper; import org.neo4j.helpers.collection.IteratorUtil; -import org.neo4j.helpers.collection.MapUtil; -import javax.ws.rs.core.Response.Status; import java.net.URI; import java.util.Collection; import java.util.Map; @@ -42,14 +40,7 @@ public class RestNode extends RestEntity implements Node { } public Relationship createRelationshipTo( Node toNode, RelationshipType type ) { - Map data = MapUtil.map( "to", ( (RestNode) toNode ).getUri(), - "type", type.name() ); - - ClientResponse response = restRequest.post( "relationships", JsonHelper.createJsonFrom( data ) ); - if ( restRequest.statusOtherThan( response, Status.CREATED ) ) { - throw new RuntimeException( "" + response.getStatus() ); - } - return new RestRelationship( response.getLocation(), getRestGraphDatabase() ); + return RestRelationship.create(this,(RestNode)toNode,type); } public Iterable getRelationships() { diff --git a/spring-data-neo4j-rest/src/main/java/org/springframework/data/graph/neo4j/rest/support/RestRelationship.java b/spring-data-neo4j-rest/src/main/java/org/springframework/data/graph/neo4j/rest/support/RestRelationship.java index 8a94a4105..a6b733b98 100644 --- a/spring-data-neo4j-rest/src/main/java/org/springframework/data/graph/neo4j/rest/support/RestRelationship.java +++ b/spring-data-neo4j-rest/src/main/java/org/springframework/data/graph/neo4j/rest/support/RestRelationship.java @@ -16,8 +16,12 @@ package org.springframework.data.graph.neo4j.rest.support; +import com.sun.jersey.api.client.ClientResponse; import org.neo4j.graphdb.*; +import org.neo4j.helpers.collection.MapUtil; +import org.springframework.data.graph.core.Property; +import javax.ws.rs.core.Response; import java.net.URI; import java.util.Map; @@ -74,4 +78,18 @@ public class RestRelationship extends RestEntity implements Relationship { public boolean isType( RelationshipType type ) { return type.name().equals( getStructuralData().get( "type" ) ); } + + public static Relationship create(RestNode startNode, RestNode endNode, RelationshipType type, Property... props) { + final RestRequest restRequest = startNode.getRestRequest(); + Map data = MapUtil.map("to", endNode.getUri(), "type", type.name()); + if (props!=null && props.length>0) { + data.put("data",Property.toMap(props)); + } + + ClientResponse response = restRequest.post( "relationships", JsonHelper.createJsonFrom( data ) ); + if ( restRequest.statusOtherThan( response, Response.Status.CREATED ) ) { + throw new RuntimeException( "" + response.getStatus() ); + } + return new RestRelationship( response.getLocation(), startNode.getRestGraphDatabase() ); + } } diff --git a/spring-data-neo4j-rest/src/main/java/org/springframework/data/graph/neo4j/rest/support/index/RestIndex.java b/spring-data-neo4j-rest/src/main/java/org/springframework/data/graph/neo4j/rest/support/index/RestIndex.java index 929c594ed..dc3fa9d0c 100644 --- a/spring-data-neo4j-rest/src/main/java/org/springframework/data/graph/neo4j/rest/support/index/RestIndex.java +++ b/spring-data-neo4j-rest/src/main/java/org/springframework/data/graph/neo4j/rest/support/index/RestIndex.java @@ -95,7 +95,8 @@ public abstract class RestIndex implements Index } public IndexHits query( String key, Object value ) { - ClientResponse response = restRequest.get( indexPath( key ) + "?query=" + RestRequest.encode( value ) ); + String indexPath=key!=null ? indexPath( key ): indexPath("null"); + ClientResponse response = restRequest.get( indexPath + "?query=" + RestRequest.encode( value ) ); if ( restRequest.statusIs( response, Response.Status.OK ) ) { Collection hits = (Collection) restRequest.toEntity( response ); return new SimpleIndexHits( hits, hits.size() ); @@ -107,7 +108,7 @@ public abstract class RestIndex implements Index protected abstract T createEntity( Map item ); public IndexHits query( Object value ) { - throw new UnsupportedOperationException(); + return query(null,value); } private class SimpleIndexHits implements IndexHits { diff --git a/spring-data-neo4j/src/main/java/org/springframework/data/graph/core/Property.java b/spring-data-neo4j/src/main/java/org/springframework/data/graph/core/Property.java index f99eb82a0..7426a36b5 100644 --- a/spring-data-neo4j/src/main/java/org/springframework/data/graph/core/Property.java +++ b/spring-data-neo4j/src/main/java/org/springframework/data/graph/core/Property.java @@ -64,6 +64,7 @@ public class Property { } public static Map toMap(Property... props) { + if (props==null) return null; final HashMap result = new HashMap(); for (Property prop : props) { result.put(prop.name,prop.value); diff --git a/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/template/Neo4jTemplateApiTest.java b/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/template/Neo4jTemplateApiTest.java index cd5397403..345caf979 100644 --- a/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/template/Neo4jTemplateApiTest.java +++ b/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/template/Neo4jTemplateApiTest.java @@ -297,7 +297,7 @@ public class Neo4jTemplateApiTest { assertNotNull(relationship); assertEquals(referenceNode, relationship.getStartNode()); assertEquals(node1,relationship.getEndNode()); - assertEquals(HAS, relationship.getType()); + assertEquals(HAS.name(), relationship.getType().name()); assertEquals("rel2",relationship.getProperty("name","not set")); }