diff --git a/spring-data-neo4j-rest/pom.xml b/spring-data-neo4j-rest/pom.xml
index a16d22487..82ef9d30a 100644
--- a/spring-data-neo4j-rest/pom.xml
+++ b/spring-data-neo4j-rest/pom.xml
@@ -42,7 +42,6 @@
org.springframework.data
spring-data-neo4j
1.0.0.BUILD-SNAPSHOT
- test
org.hibernate
diff --git a/spring-data-neo4j-rest/src/main/java/org/neo4j/kernel/RestConfig.java b/spring-data-neo4j-rest/src/main/java/org/neo4j/kernel/RestConfig.java
index 87a15ac0b..e8008799a 100644
--- a/spring-data-neo4j-rest/src/main/java/org/neo4j/kernel/RestConfig.java
+++ b/spring-data-neo4j-rest/src/main/java/org/neo4j/kernel/RestConfig.java
@@ -1,8 +1,6 @@
package org.neo4j.kernel;
import org.neo4j.graphdb.GraphDatabaseService;
-import org.neo4j.kernel.Config;
-import org.neo4j.kernel.IdGeneratorFactory;
import org.neo4j.kernel.impl.core.*;
import org.neo4j.kernel.impl.nioneo.store.FileSystemAbstraction;
import org.neo4j.kernel.impl.nioneo.store.StoreId;
@@ -48,7 +46,7 @@ public class RestConfig extends Config {
}
private static class NullTransactionManager implements TransactionManager {
- private static final Transaction TRANSACTION = new Transaction() {
+ private static final Transaction NULL_JAVA_TRANSACTION = new Transaction() {
@Override
public void commit() throws HeuristicMixedException, HeuristicRollbackException, RollbackException, SecurityException, SystemException {
@@ -102,7 +100,7 @@ public class RestConfig extends Config {
@Override
public Transaction getTransaction() throws SystemException {
- return TRANSACTION;
+ return NULL_JAVA_TRANSACTION;
}
@Override
@@ -127,7 +125,7 @@ public class RestConfig extends Config {
@Override
public Transaction suspend() throws SystemException {
- return TRANSACTION;
+ return NULL_JAVA_TRANSACTION;
}
}
-}
+}
\ No newline at end of file
diff --git a/spring-data-neo4j-rest/src/main/java/org/neo4j/rest/graphdb/GraphDatabaseFactory.java b/spring-data-neo4j-rest/src/main/java/org/neo4j/rest/graphdb/GraphDatabaseFactory.java
deleted file mode 100644
index 497c61737..000000000
--- a/spring-data-neo4j-rest/src/main/java/org/neo4j/rest/graphdb/GraphDatabaseFactory.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package org.neo4j.rest.graphdb;
-
-import org.neo4j.graphdb.GraphDatabaseService;
-import org.neo4j.kernel.EmbeddedGraphDatabase;
-
-import java.io.File;
-import java.net.URI;
-import java.net.URISyntaxException;
-
-/**
- * @author mh
- * @since 25.01.11
- */
-public class GraphDatabaseFactory {
- public static GraphDatabaseService databaseFor(String url) {
- return databaseFor( url, null,null );
- }
-
- public static GraphDatabaseService databaseFor(String url, String username, String password) {
- if (url.startsWith( "http://" ) || url.startsWith( "https://" )) {
- return new RestGraphDatabase( toURI( url ), username,password );
- }
- String path=url;
- if (url.startsWith( "file:" )) {
- path = toURI( url ).getPath();
- }
- File file = new File( path );
- if (!file.isDirectory()) file=file.getParentFile();
- return new EmbeddedGraphDatabase( file.getAbsolutePath() );
- }
-
- private static URI toURI( String uri ) {
- try {
- return new URI(uri);
- } catch ( URISyntaxException e ) {
- throw new RuntimeException( "Error using URI "+uri, e);
- }
- }
-}
diff --git a/spring-data-neo4j-rest/src/main/java/org/neo4j/rest/graphdb/RestEntity.java b/spring-data-neo4j-rest/src/main/java/org/neo4j/rest/graphdb/RestEntity.java
index 2b9c201a9..aa06cb93a 100644
--- a/spring-data-neo4j-rest/src/main/java/org/neo4j/rest/graphdb/RestEntity.java
+++ b/spring-data-neo4j-rest/src/main/java/org/neo4j/rest/graphdb/RestEntity.java
@@ -1,6 +1,7 @@
package org.neo4j.rest.graphdb;
import com.sun.jersey.api.client.ClientResponse;
+import org.neo4j.graphdb.GraphDatabaseService;
import org.neo4j.graphdb.NotFoundException;
import org.neo4j.graphdb.PropertyContainer;
import org.neo4j.helpers.collection.IterableWrapper;
@@ -154,7 +155,11 @@ public class RestEntity implements PropertyContainer {
return getClass().equals( o.getClass() ) && getId() == ( (RestEntity) o ).getId();
}
- public RestGraphDatabase getGraphDatabase() {
+ public GraphDatabaseService getGraphDatabase() {
+ throw new UnsupportedOperationException("No GraphDatabaseService semantics for the REST-API");
+ }
+
+ public RestGraphDatabase getRestGraphDatabase() {
return graphDatabase;
}
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 dc11bcbfa..eaca8e9f2 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
@@ -4,18 +4,22 @@ import com.sun.jersey.api.client.ClientResponse;
import org.neo4j.graphdb.*;
import org.neo4j.graphdb.event.KernelEventHandler;
import org.neo4j.graphdb.event.TransactionEventHandler;
-import org.neo4j.graphdb.index.IndexManager;
+import org.neo4j.graphdb.index.Index;
+import org.neo4j.graphdb.traversal.TraversalDescription;
import org.neo4j.kernel.AbstractGraphDatabase;
import org.neo4j.kernel.Config;
import org.neo4j.kernel.RestConfig;
import org.neo4j.rest.graphdb.index.RestIndexManager;
+import org.springframework.data.graph.core.GraphDatabase;
+import org.springframework.data.graph.core.Property;
import javax.ws.rs.core.Response.Status;
import java.io.Serializable;
import java.net.URI;
import java.util.Map;
-public class RestGraphDatabase extends AbstractGraphDatabase {
+public class RestGraphDatabase extends AbstractGraphDatabase implements GraphDatabase {
+
private RestRequest restRequest;
private long propertyRefetchTimeInMillis = 1000;
@@ -28,86 +32,62 @@ public class RestGraphDatabase extends AbstractGraphDatabase {
restRequest = new RestRequest( uri, user, password );
}
- public Transaction beginTx() {
- return new Transaction() {
- public void success() {
- }
-
- public void finish() {
-
- }
-
- public void failure() {
- }
- };
+ @Override
+ public Node getNodeById(long id) {
+ ClientResponse response = restRequest.get("node/" + id);
+ if ( restRequest.statusIs(response, Status.NOT_FOUND) ) {
+ throw new NotFoundException( "" + id );
+ }
+ return new RestNode( restRequest.toMap(response), this );
}
- public TransactionEventHandler registerTransactionEventHandler( TransactionEventHandler tTransactionEventHandler ) {
- throw new UnsupportedOperationException();
- }
-
- public TransactionEventHandler unregisterTransactionEventHandler( TransactionEventHandler tTransactionEventHandler ) {
- throw new UnsupportedOperationException();
- }
-
- public KernelEventHandler registerKernelEventHandler( KernelEventHandler kernelEventHandler ) {
- throw new UnsupportedOperationException();
- }
-
- public KernelEventHandler unregisterKernelEventHandler( KernelEventHandler kernelEventHandler ) {
- throw new UnsupportedOperationException();
- }
-
- public IndexManager index() {
- return new RestIndexManager( restRequest, this );
- }
-
- public Node createNode() {
- ClientResponse response = restRequest.post( "node", null );
- if ( restRequest.statusOtherThan( response, Status.CREATED ) ) {
+ @Override
+ public Node createNode(Property... props) {
+ ClientResponse response = restRequest.post("node", null);
+ if ( restRequest.statusOtherThan(response, Status.CREATED) ) {
throw new RuntimeException( "" + response.getStatus() );
}
return new RestNode( response.getLocation(), this );
}
- public boolean enableRemoteShell() {
- throw new UnsupportedOperationException();
- }
-
- public boolean enableRemoteShell( Map config ) {
- throw new UnsupportedOperationException();
- }
-
- public Iterable getAllNodes() {
- throw new UnsupportedOperationException();
- }
-
- public Node getNodeById( long id ) {
- ClientResponse response = restRequest.get( "node/" + id );
- if ( restRequest.statusIs( response, Status.NOT_FOUND ) ) {
- throw new NotFoundException( "" + id );
- }
- return new RestNode( restRequest.toMap( response ), this );
- }
-
- public Node getReferenceNode() {
- Map, ?> map = restRequest.toMap( restRequest.get( "" ) );
- return new RestNode( (String) map.get( "reference_node" ), this );
- }
-
- public Relationship getRelationshipById( long id ) {
- ClientResponse response = restRequest.get( "relationship/" + id );
+ @Override
+ public Relationship getRelationshipById(long id) {
+ ClientResponse response = restRequest.get("relationship/" + id);
if ( restRequest.statusIs( response, Status.NOT_FOUND ) ) {
throw new NotFoundException( "" + id );
}
return new RestRelationship( restRequest.toMap( response ), this );
}
- public Iterable getRelationshipTypes() {
- throw new UnsupportedOperationException();
+ @Override
+ public Relationship createRelationship(Node startNode, Node endNode, RelationshipType type, Property... props) {
+ Relationship relationship = startNode.createRelationshipTo(endNode, type);
+ return relationship;
}
- public void shutdown() {
+ @Override
+ public Index getIndex(String indexName) {
+ return (Index) index().forNodes(indexName); // todo
+ }
+
+ @Override
+ public Index createIndex(Class type, String indexName, boolean fullText) {
+ return (Index) index().forNodes(indexName); // todo
+ }
+
+ @Override
+ public TraversalDescription createTraversalDescription() {
+ return new RestTraversal();
+ }
+
+ public RestIndexManager index() {
+ return new RestIndexManager( restRequest, this );
+ }
+
+ @Override
+ public Node getReferenceNode() {
+ Map, ?> map = restRequest.toMap( restRequest.get( "" ) );
+ return new RestNode( (String) map.get( "reference_node" ), this );
}
public RestRequest getRestRequest() {
@@ -117,9 +97,77 @@ public class RestGraphDatabase extends AbstractGraphDatabase {
public long getPropertyRefetchTimeInMillis() {
return propertyRefetchTimeInMillis;
}
+
+ @Override
+ public Node createNode() {
+ return createNode((Property[])null);
+ }
+
+ @Override
+ public Iterable getAllNodes() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public Iterable getRelationshipTypes() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void shutdown() {
+
+ }
+
+ @Override
+ public boolean enableRemoteShell() {
+ return false;
+ }
+
+ @Override
+ public boolean enableRemoteShell(Map initialProperties) {
+ return false;
+ }
+
+ @Override
+ public Transaction beginTx() {
+ return new Transaction() {
+ @Override
+ public void failure() {
+ }
+
+ @Override
+ public void success() {
+ }
+
+ @Override
+ public void finish() {
+ }
+ };
+ }
+
+ @Override
+ public TransactionEventHandler registerTransactionEventHandler(TransactionEventHandler handler) {
+ return handler;
+ }
+
+ @Override
+ public TransactionEventHandler unregisterTransactionEventHandler(TransactionEventHandler handler) {
+ return handler;
+ }
+
+ @Override
+ public KernelEventHandler registerKernelEventHandler(KernelEventHandler handler) {
+ return handler;
+ }
+
+ @Override
+ public KernelEventHandler unregisterKernelEventHandler(KernelEventHandler handler) {
+ return handler;
+ }
+
@Override
public String getStoreDir() {
- return restRequest.getUri().toString();
+ return getRestRequest().getUri().toString();
}
@Override
diff --git a/spring-data-neo4j-rest/src/main/java/org/neo4j/rest/graphdb/RestNode.java b/spring-data-neo4j-rest/src/main/java/org/neo4j/rest/graphdb/RestNode.java
index 27bdb2a60..b0870e38e 100644
--- a/spring-data-neo4j-rest/src/main/java/org/neo4j/rest/graphdb/RestNode.java
+++ b/spring-data-neo4j-rest/src/main/java/org/neo4j/rest/graphdb/RestNode.java
@@ -35,7 +35,7 @@ public class RestNode extends RestEntity implements Node {
if ( restRequest.statusOtherThan( response, Status.CREATED ) ) {
throw new RuntimeException( "" + response.getStatus() );
}
- return new RestRelationship( response.getLocation(), getGraphDatabase() );
+ return new RestRelationship( response.getLocation(), getRestGraphDatabase() );
}
public Iterable getRelationships() {
@@ -48,7 +48,7 @@ public class RestNode extends RestEntity implements Node {
(Collection