next();
+
+ /**
+ * Closes the result, freeing up any resources held by the result.
+ *
+ * This is an idempotent operation, invoking it multiple times has the same effect as invoking it exactly once.
+ * It is thus safe (and even encouraged, for style and simplicity) to invoke this method even after consuming all
+ * rows in the result through the {@link #next() next-method}.
+ */
+ void close();
+
+ /**
+ * Provides a textual representation of the query result.
+ *
+ * The execution result represented by this object will be consumed in its entirety after this method is called.
+ * Calling any of the other iterating methods on it should not be expected to return any results.
+ *
+ *
+ * @return the execution result formatted as a string
+ */
+ String resultAsString();
+
+ /**
+ * Provides a textual representation of the query result to the provided {@link PrintWriter}.
+ *
+ * The execution result represented by this object will be consumed in its entirety after this method is called.
+ * Calling any of the other iterating methods on it should not be expected to return any results.
+ *
+ * @param writer the {@link PrintWriter} to receive the textual representation of the query result.
+ */
+ void writeAsStringTo(PrintWriter writer);
+
+ /** Removing rows from the result is not supported. */
+ void remove();
+}
diff --git a/spring-data-neo4j-rest/src/main/java/org/neo4j/rest/graphdb/AbstractRemoteDatabase.java b/spring-data-neo4j-rest/src/main/java/org/neo4j/rest/graphdb/AbstractRemoteDatabase.java
index 9db4c9bc8..e6c8c0bd4 100644
--- a/spring-data-neo4j-rest/src/main/java/org/neo4j/rest/graphdb/AbstractRemoteDatabase.java
+++ b/spring-data-neo4j-rest/src/main/java/org/neo4j/rest/graphdb/AbstractRemoteDatabase.java
@@ -22,26 +22,12 @@ package org.neo4j.rest.graphdb;
import org.neo4j.graphdb.*;
import org.neo4j.graphdb.event.KernelEventHandler;
import org.neo4j.graphdb.event.TransactionEventHandler;
-import org.neo4j.kernel.GraphDatabaseAPI;
-import org.neo4j.kernel.IdGeneratorFactory;
-import org.neo4j.kernel.KernelData;
-import org.neo4j.kernel.TransactionBuilder;
-import org.neo4j.kernel.guard.Guard;
-import org.neo4j.kernel.impl.core.KernelPanicEventGenerator;
-import org.neo4j.kernel.impl.core.NodeManager;
-import org.neo4j.kernel.impl.nioneo.store.StoreId;
-import org.neo4j.kernel.impl.persistence.PersistenceSource;
-import org.neo4j.kernel.impl.transaction.LockManager;
-import org.neo4j.kernel.impl.transaction.XaDataSourceManager;
-import org.neo4j.kernel.impl.transaction.xaframework.TxIdGenerator;
-import org.neo4j.kernel.impl.util.StringLogger;
-import org.neo4j.kernel.info.DiagnosticsManager;
import org.neo4j.rest.graphdb.transaction.NullTransaction;
-import javax.transaction.TransactionManager;
-import java.util.Collection;
+import java.util.Map;
-abstract class AbstractRemoteDatabase implements GraphDatabaseAPI {
+
+abstract class AbstractRemoteDatabase implements GraphDatabaseService {
public Transaction beginTx() {
return new NullTransaction();
}
@@ -62,11 +48,8 @@ abstract class AbstractRemoteDatabase implements GraphDatabaseAPI {
throw new UnsupportedOperationException();
}
- @Override
- public TransactionBuilder tx() {
- throw new UnsupportedOperationException();
- }
-
+ public abstract Result execute(String s, Map map);
+ public abstract Result execute(String s);
@Override
public void shutdown() {
}
diff --git a/spring-data-neo4j-rest/src/main/java/org/neo4j/rest/graphdb/CypherRestGraphDatabase.java b/spring-data-neo4j-rest/src/main/java/org/neo4j/rest/graphdb/CypherRestGraphDatabase.java
index fa03d38c4..2a7fee148 100644
--- a/spring-data-neo4j-rest/src/main/java/org/neo4j/rest/graphdb/CypherRestGraphDatabase.java
+++ b/spring-data-neo4j-rest/src/main/java/org/neo4j/rest/graphdb/CypherRestGraphDatabase.java
@@ -23,7 +23,7 @@ package org.neo4j.rest.graphdb;
import org.neo4j.graphdb.*;
import org.neo4j.graphdb.schema.Schema;
import org.neo4j.graphdb.traversal.BidirectionalTraversalDescription;
-import org.neo4j.kernel.impl.nioneo.store.StoreId;
+import org.neo4j.helpers.collection.IteratorUtil;
import org.neo4j.rest.graphdb.entity.RestNode;
import org.neo4j.rest.graphdb.index.RestIndexManager;
import org.neo4j.rest.graphdb.query.RestCypherTransactionManager;
@@ -82,16 +82,11 @@ public class CypherRestGraphDatabase extends AbstractRemoteDatabase implements R
public Relationship getRelationshipById( long id ) {
return this.restAPI.getRelationshipById(id);
}
- @Override
+
public String getStoreDir() {
return restAPI.getBaseUri();
}
- @Override
- public StoreId storeId() {
- return null;
- }
-
@Override
public boolean isAvailable(long timeout) {
return restAPI!=null;
@@ -101,7 +96,6 @@ public class CypherRestGraphDatabase extends AbstractRemoteDatabase implements R
return restAPI.getTxManager();
}
- @Override
public DependencyResolver getDependencyResolver() {
return new DependencyResolver.Adapter() {
@Override
@@ -148,6 +142,31 @@ public class CypherRestGraphDatabase extends AbstractRemoteDatabase implements R
};
}
+ public ResourceIterator findNodes(Label label, String property, Object value) {
+ return findNodesByLabelAndProperty(label, property,value).iterator();
+ }
+
+ public Node findNode(Label label, String property, Object value) {
+ return IteratorUtil.single(findNodes(label,property,value));
+ }
+
+ public ResourceIterator findNodes(Label label) {
+ Iterable nodes = restAPI.getNodesByLabel(label.name());
+ return new ResourceIterableWrapper(nodes) {
+ protected Node underlyingObjectToObject(RestNode node) {
+ return node;
+ }
+ }.iterator();
+ }
+
+ public Result execute(String s) {
+ throw new UnsupportedOperationException();
+ }
+
+ public Result execute(String s, Map map) {
+ throw new UnsupportedOperationException();
+ }
+
@Override
public Schema schema() {
throw new UnsupportedOperationException();
diff --git a/spring-data-neo4j-rest/src/main/java/org/neo4j/rest/graphdb/RestGraphDatabase.java b/spring-data-neo4j-rest/src/main/java/org/neo4j/rest/graphdb/RestGraphDatabase.java
index 018e66848..bb442cf28 100644
--- a/spring-data-neo4j-rest/src/main/java/org/neo4j/rest/graphdb/RestGraphDatabase.java
+++ b/spring-data-neo4j-rest/src/main/java/org/neo4j/rest/graphdb/RestGraphDatabase.java
@@ -23,7 +23,7 @@ package org.neo4j.rest.graphdb;
import org.neo4j.graphdb.*;
import org.neo4j.graphdb.schema.Schema;
import org.neo4j.graphdb.traversal.BidirectionalTraversalDescription;
-import org.neo4j.kernel.impl.nioneo.store.StoreId;
+import org.neo4j.helpers.collection.IteratorUtil;
import org.neo4j.rest.graphdb.entity.RestNode;
import org.neo4j.rest.graphdb.index.RestIndexManager;
import org.neo4j.rest.graphdb.query.RestCypherQueryEngine;
@@ -35,6 +35,7 @@ import org.neo4j.rest.graphdb.util.ResourceIterableWrapper;
import javax.transaction.TransactionManager;
import java.util.Collection;
import java.util.LinkedHashSet;
+import java.util.Map;
/**
* @deprecated use CypherRestGraphDatabase instead
@@ -87,16 +88,11 @@ public class RestGraphDatabase extends AbstractRemoteDatabase implements RestAPI
public Relationship getRelationshipById( long id ) {
return this.restAPI.getRelationshipById(id);
}
- @Override
+
public String getStoreDir() {
return restAPI.getBaseUri();
}
- @Override
- public StoreId storeId() {
- return null;
- }
-
@Override
public boolean isAvailable(long timeout) {
return restAPI!=null;
@@ -106,7 +102,6 @@ public class RestGraphDatabase extends AbstractRemoteDatabase implements RestAPI
return new NullTransactionManager();
}
- @Override
public DependencyResolver getDependencyResolver() {
return new DependencyResolver.Adapter() {
@Override
@@ -144,6 +139,31 @@ public class RestGraphDatabase extends AbstractRemoteDatabase implements RestAPI
};
}
+ public ResourceIterator findNodes(Label label, String property, Object value) {
+ return findNodesByLabelAndProperty(label, property,value).iterator();
+ }
+
+ public Node findNode(Label label, String property, Object value) {
+ return IteratorUtil.single(findNodes(label,property,value));
+ }
+
+ public ResourceIterator findNodes(Label label) {
+ Iterable nodes = restAPI.getNodesByLabel(label.name());
+ return new ResourceIterableWrapper(nodes) {
+ protected Node underlyingObjectToObject(RestNode node) {
+ return node;
+ }
+ }.iterator();
+ }
+
+ public Result execute(String s) {
+ throw new UnsupportedOperationException();
+ }
+
+ public Result execute(String s, Map map) {
+ throw new UnsupportedOperationException();
+ }
+
@Override
public Schema schema() {
throw new UnsupportedOperationException();
diff --git a/spring-data-neo4j-rest/src/main/java/org/neo4j/rest/graphdb/transaction/NullTransaction.java b/spring-data-neo4j-rest/src/main/java/org/neo4j/rest/graphdb/transaction/NullTransaction.java
index 6cd51b5c9..c6c0dfba6 100644
--- a/spring-data-neo4j-rest/src/main/java/org/neo4j/rest/graphdb/transaction/NullTransaction.java
+++ b/spring-data-neo4j-rest/src/main/java/org/neo4j/rest/graphdb/transaction/NullTransaction.java
@@ -39,6 +39,9 @@ public class NullTransaction implements Transaction {
public void failure() {
}
+ public void terminate() {
+ }
+
@Override
public Lock acquireWriteLock(PropertyContainer propertyContainer) {
return null;
diff --git a/spring-data-neo4j-rest/src/main/java/org/neo4j/rest/graphdb/transaction/RemoteCypherTransaction.java b/spring-data-neo4j-rest/src/main/java/org/neo4j/rest/graphdb/transaction/RemoteCypherTransaction.java
index e6327c07f..28aaf39b1 100644
--- a/spring-data-neo4j-rest/src/main/java/org/neo4j/rest/graphdb/transaction/RemoteCypherTransaction.java
+++ b/spring-data-neo4j-rest/src/main/java/org/neo4j/rest/graphdb/transaction/RemoteCypherTransaction.java
@@ -68,6 +68,10 @@ public class RemoteCypherTransaction implements Transaction {
close();
}
+ public void terminate() {
+ throw new UnsupportedOperationException();
+ }
+
@Override
public void close() {
if (tx() != null && innerCounter.decrementAndGet() > 0) {
diff --git a/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/config/JtaTransactionManagerFactoryBean.java b/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/config/JtaTransactionManagerFactoryBean.java
index b00faa108..559c5907c 100644
--- a/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/config/JtaTransactionManagerFactoryBean.java
+++ b/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/config/JtaTransactionManagerFactoryBean.java
@@ -22,6 +22,7 @@ import org.neo4j.graphdb.GraphDatabaseService;
import org.neo4j.kernel.GraphDatabaseAPI;
import org.springframework.beans.factory.FactoryBean;
import org.springframework.data.neo4j.core.GraphDatabase;
+import org.springframework.data.neo4j.support.Neo4jEmbeddedTransactionManager;
import org.springframework.transaction.jta.JtaTransactionManager;
import org.springframework.transaction.jta.UserTransactionAdapter;
@@ -70,7 +71,7 @@ public class JtaTransactionManagerFactoryBean implements FactoryBean