diff --git a/spring-data-neo4j-aspects/src/test/java/org/springframework/data/neo4j/aspects/LeadRelationship.java b/spring-data-neo4j-aspects/src/test/java/org/springframework/data/neo4j/aspects/LeadRelationship.java
new file mode 100644
index 000000000..9b888f246
--- /dev/null
+++ b/spring-data-neo4j-aspects/src/test/java/org/springframework/data/neo4j/aspects/LeadRelationship.java
@@ -0,0 +1,62 @@
+package org.springframework.data.neo4j.aspects;
+
+import org.springframework.data.neo4j.annotation.*;
+import org.springframework.data.neo4j.support.index.IndexType;
+
+import java.util.Date;
+import java.util.UUID;
+
+/**
+* @author mh
+* @since 30.08.15
+*/
+@RelationshipEntity(type="LEAD")
+public class LeadRelationship {
+
+ @GraphId
+ private Long id;
+
+ @Indexed(unique = true)
+ private Long uuid;
+
+ @Indexed(indexType = IndexType.SIMPLE, indexName = "date-index")
+ private Date createdDate = new Date();
+
+ @StartNode
+ private Person person;
+ @EndNode
+ private Group group;
+
+ public LeadRelationship() {
+ }
+
+ public LeadRelationship(Person person, Group group) {
+ this.person = person;
+ this.group = group;
+ this.uuid = Math.abs(UUID.randomUUID().getMostSignificantBits());
+ }
+
+ public Long getId() {
+ return id;
+ }
+
+ public Long getUuid() {
+ return uuid;
+ }
+
+ public Date getCreatedDate() {
+ return createdDate;
+ }
+
+ public Person getPerson() {
+ return person;
+ }
+
+ public Group getGroup() {
+ return group;
+ }
+
+ public void setCreatedDate(Date createdDate) {
+ this.createdDate = createdDate;
+ }
+}
diff --git a/spring-data-neo4j-aspects/src/test/resources/org/springframework/data/neo4j/aspects/support/Neo4jGraphPersistenceTests-context.xml b/spring-data-neo4j-aspects/src/test/resources/org/springframework/data/neo4j/aspects/support/Neo4jGraphPersistenceTests-context.xml
index b594b19ea..7c300e62a 100644
--- a/spring-data-neo4j-aspects/src/test/resources/org/springframework/data/neo4j/aspects/support/Neo4jGraphPersistenceTests-context.xml
+++ b/spring-data-neo4j-aspects/src/test/resources/org/springframework/data/neo4j/aspects/support/Neo4jGraphPersistenceTests-context.xml
@@ -121,6 +121,7 @@
org.springframework.data.neo4j.aspects.Developer
org.springframework.data.neo4j.aspects.Person
org.springframework.data.neo4j.aspects.Group
+ org.springframework.data.neo4j.aspects.LeadRelationship
org.springframework.data.neo4j.aspects.SubGroup
org.springframework.data.neo4j.aspects.Toyota
org.springframework.data.neo4j.aspects.Volvo
diff --git a/spring-data-neo4j-rest/src/main/java/org/neo4j/rest/graphdb/RestAPICypherImpl.java b/spring-data-neo4j-rest/src/main/java/org/neo4j/rest/graphdb/RestAPICypherImpl.java
index 05063f0db..7ba28756a 100644
--- a/spring-data-neo4j-rest/src/main/java/org/neo4j/rest/graphdb/RestAPICypherImpl.java
+++ b/spring-data-neo4j-rest/src/main/java/org/neo4j/rest/graphdb/RestAPICypherImpl.java
@@ -27,23 +27,30 @@ import org.neo4j.helpers.collection.IteratorUtil;
import org.neo4j.helpers.collection.MapUtil;
import org.neo4j.index.impl.lucene.AbstractIndexHits;
import org.neo4j.rest.graphdb.converter.RestEntityExtractor;
+import org.neo4j.rest.graphdb.converter.RestIndexHitsConverter;
import org.neo4j.rest.graphdb.entity.RestEntity;
+import org.neo4j.rest.graphdb.entity.RestEntityCache;
import org.neo4j.rest.graphdb.entity.RestNode;
import org.neo4j.rest.graphdb.entity.RestRelationship;
import org.neo4j.rest.graphdb.index.IndexInfo;
import org.neo4j.rest.graphdb.index.RestIndex;
import org.neo4j.rest.graphdb.index.RestIndexManager;
+import org.neo4j.rest.graphdb.index.SimpleIndexHits;
import org.neo4j.rest.graphdb.query.*;
+import org.neo4j.rest.graphdb.transaction.TransactionFinishListener;
import org.neo4j.rest.graphdb.traversal.RestTraversalDescription;
import org.neo4j.rest.graphdb.traversal.RestTraverser;
import org.neo4j.rest.graphdb.util.QueryResult;
import org.neo4j.rest.graphdb.util.QueryResultBuilder;
import org.neo4j.rest.graphdb.util.ResultConverter;
+import org.springframework.dao.DataIntegrityViolationException;
+import javax.ws.rs.core.Response;
import java.util.*;
import static java.util.Arrays.asList;
import static org.neo4j.helpers.collection.MapUtil.map;
+import static org.neo4j.rest.graphdb.RestAPIIndexImpl.queryPath;
import static org.neo4j.rest.graphdb.query.CypherTransaction.ResultType.row;
import static org.neo4j.rest.graphdb.query.CypherTransaction.Statement;
@@ -64,8 +71,9 @@ public class RestAPICypherImpl implements RestAPI {
public static final String GET_REL_TYPES_QUERY = _MATCH_NODE_QUERY + " MATCH (n)-[r]-() RETURN distinct type(r) as relType";
- private RestIndexManager restIndex = new RestIndexManager(this);
- private RestIndexManager restIndexOld;
+ private RestAPIIndex restAPIIndex;
+ private final RestEntityCache entityCache = new RestEntityCache(this);
+ private RestEntityExtractor restEntityExtractor = new RestEntityExtractor(this);
private String createNodeQuery(Collection labels) {
String labelString = toLabelString(labels);
@@ -98,7 +106,7 @@ public class RestAPICypherImpl implements RestAPI {
protected RestAPICypherImpl(RestAPI restAPI) {
this.restAPI = restAPI;
- restIndexOld = new RestIndexManager(restAPI);
+ restAPIIndex = new RestAPIIndexImpl(this);
}
@Override
@@ -117,8 +125,41 @@ public class RestAPICypherImpl implements RestAPI {
}
@Override
- public RestRelationship addToCache(RestRelationship restRelationship) {
- return restAPI.addToCache(restRelationship);
+ public RestNode addToCache(RestNode restNode) {
+ return entityCache.addToCache(restNode);
+ }
+
+ @Override
+ public RestRelationship addToCache(RestRelationship rel) {
+ return entityCache.addToCache(rel);
+ }
+
+ @Override
+ public RestNode getNodeFromCache(long id) {
+ return entityCache.getNode(id);
+ }
+
+ @Override
+ public RestRelationship getRelFromCache(long id) {
+ return entityCache.getRelationship(id);
+ }
+
+ @Override
+ public void removeNodeFromCache(long id) {
+ entityCache.removeNode(id);
+ }
+ @Override
+ public void removeRelFromCache(long id) {
+ entityCache.removeRelationship(id);
+ }
+
+ @Override
+ public RestNode getNodeById(long id) {
+ return getNodeById(id, Load.FromServer);
+ }
+ @Override
+ public RestRelationship getRelationshipById(long id) {
+ return getRelationshipById(id, Load.FromServer);
}
@Override
@@ -145,33 +186,6 @@ public class RestAPICypherImpl implements RestAPI {
}
}
- public RestNode getNodeFromCache(long id) {
- return restAPI.getNodeFromCache(id);
- }
- public RestRelationship getRelFromCache(long id) {
- return restAPI.getRelFromCache(id);
- }
-
- @Override
- public void removeNodeFromCache(long id) {
- restAPI.removeNodeFromCache(id);
- }
- @Override
- public void removeRelFromCache(long id) {
- restAPI.removeRelFromCache(id);
- }
-
- @Override
- public RestNode getNodeById(long id) {
- return getNodeById(id, Load.FromServer);
- }
-
- @Override
- public RestRelationship getRelationshipById(long id) {
- return getRelationshipById(id, Load.FromServer);
- }
-
-
private RestNode toNode(List