diff --git a/pom.xml b/pom.xml
index 445e78622..b21a6853e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -12,6 +12,7 @@
spring-data-graph-core
spring-data-neo4j
spring-data-neo4j-roo
+ spring-data-neo4j-rest
diff --git a/spring-data-neo4j-rest/pom.xml b/spring-data-neo4j-rest/pom.xml
new file mode 100644
index 000000000..7efd5b256
--- /dev/null
+++ b/spring-data-neo4j-rest/pom.xml
@@ -0,0 +1,133 @@
+
+ 4.0.0
+
+ org.springframework.data
+ spring-data-graph-parent
+ 1.0.0.BUILD-SNAPSHOT
+ ../spring-data-graph-parent/pom.xml
+
+ org.neo4j
+ spring-data-neo4j-rest
+ jar
+ 1.0.0.BUILD-SNAPSHOT
+ Spring Data Graph REST Wrapper
+
+ UTF-8
+ 1.5.10
+ 1.4
+ 1.3.M05
+
+
+
+
+ neo4j
+ http://m2.neo4j.org
+
+
+ Sun
+ http://download.java.net/maven/2
+
+
+
+
+ junit
+ junit
+ test
+
+
+ org.neo4j
+ neo4j
+
+
+ org.neo4j.app
+ neo4j-server
+ ${neo4j.version}
+ test
+
+
+ com.tinkerpop
+ gremlin
+
+
+ org.neo4j
+ neo4j
+
+
+ org.mortbay.jetty
+ jetty
+
+
+ com.sun.jersey
+ jersey-server
+
+
+ org.codehaus.jackson
+ jackson-jaxrs
+
+
+ org.codehaus.jackson
+ jackson-mapper-asl
+
+
+ de.huxhorn.lilith
+ de.huxhorn.lilith.3rdparty.rrd4j
+
+
+ com.sun.jersey.contribs
+ jersey-multipart
+
+
+ org.apache.felix
+ org.apache.felix.main
+
+
+ org.apache.felix
+ org.apache.felix.fileinstall
+
+
+ org.neo4j
+ neo4j-shell
+
+
+
+
+ org.mortbay.jetty
+ jetty
+ 6.1.25
+ test
+
+
+
+ org.codehaus.jackson
+ jackson-jaxrs
+ 1.6.1
+
+
+ org.codehaus.jackson
+ jackson-mapper-asl
+ 1.6.1
+
+
+ com.sun.jersey
+ jersey-server
+ ${jersey.version}
+
+
+ com.sun.jersey
+ jersey-client
+ ${jersey.version}
+
+
+
+
+
+ maven-compiler-plugin
+
+ 1.6
+ 1.6
+
+
+
+
+
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
new file mode 100644
index 000000000..87a15ac0b
--- /dev/null
+++ b/spring-data-neo4j-rest/src/main/java/org/neo4j/kernel/RestConfig.java
@@ -0,0 +1,133 @@
+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;
+import org.neo4j.kernel.impl.transaction.LockManager;
+import org.neo4j.kernel.impl.transaction.TxModule;
+import org.neo4j.kernel.impl.transaction.xaframework.LogBufferFactory;
+import org.neo4j.kernel.impl.transaction.xaframework.TxIdGenerator;
+import org.neo4j.rest.graphdb.RestGraphDatabase;
+
+import javax.transaction.*;
+import javax.transaction.xa.XAResource;
+import java.util.Collections;
+import java.util.Map;
+
+/**
+* @author mh
+* @since 23.02.11
+*/
+public class RestConfig extends Config {
+ public RestConfig(GraphDatabaseService graphDb, String storeDir, StoreId storeId,
+ Map inputParams, KernelPanicEventGenerator kpe,
+ TxModule txModule, LockManager lockManager, LockReleaser lockReleaser,
+ IdGeneratorFactory idGeneratorFactory,
+ TxEventSyncHookFactory txSyncHookFactory, RelationshipTypeCreator relTypeCreator,
+ TxIdGenerator txIdGenerator, LastCommittedTxIdSetter lastCommittedTxIdSetter,
+ FileSystemAbstraction fileSystem, LogBufferFactory logBufferFactory) {
+ super(graphDb, storeDir, storeId,
+ inputParams, kpe, txModule, lockManager, lockReleaser, idGeneratorFactory, txSyncHookFactory, relTypeCreator, txIdGenerator, lastCommittedTxIdSetter, fileSystem, logBufferFactory);
+ }
+
+ public RestConfig(RestGraphDatabase restGraphDatabase) {
+ super(restGraphDatabase, restGraphDatabase.getStoreDir(), null,
+ Collections.emptyMap(),null,
+ new TxModule(true,null){
+ @Override
+ public TransactionManager getTxManager() {
+ return new NullTransactionManager();
+ }
+ },
+ null,null,
+ null,null,null,null,null,
+ null,null);
+ }
+
+ private static class NullTransactionManager implements TransactionManager {
+ private static final Transaction TRANSACTION = new Transaction() {
+ @Override
+ public void commit() throws HeuristicMixedException, HeuristicRollbackException, RollbackException, SecurityException, SystemException {
+
+ }
+
+ @Override
+ public boolean delistResource(XAResource xaResource, int i) throws IllegalStateException, SystemException {
+ return false;
+ }
+
+ @Override
+ public boolean enlistResource(XAResource xaResource) throws IllegalStateException, RollbackException, SystemException {
+ return false;
+ }
+
+ @Override
+ public int getStatus() throws SystemException {
+ return Status.STATUS_NO_TRANSACTION;
+ }
+
+ @Override
+ public void registerSynchronization(Synchronization synchronization) throws IllegalStateException, RollbackException, SystemException {
+
+ }
+
+ @Override
+ public void rollback() throws IllegalStateException, SystemException {
+
+ }
+
+ @Override
+ public void setRollbackOnly() throws IllegalStateException, SystemException {
+
+ }
+ };
+
+ @Override
+ public void begin() throws NotSupportedException, SystemException {
+
+ }
+
+ @Override
+ public void commit() throws HeuristicMixedException, HeuristicRollbackException, IllegalStateException, RollbackException, SecurityException, SystemException {
+
+ }
+
+ @Override
+ public int getStatus() throws SystemException {
+ return 0;
+ }
+
+ @Override
+ public Transaction getTransaction() throws SystemException {
+ return TRANSACTION;
+ }
+
+ @Override
+ public void resume(Transaction transaction) throws IllegalStateException, InvalidTransactionException, SystemException {
+
+ }
+
+ @Override
+ public void rollback() throws IllegalStateException, SecurityException, SystemException {
+
+ }
+
+ @Override
+ public void setRollbackOnly() throws IllegalStateException, SystemException {
+
+ }
+
+ @Override
+ public void setTransactionTimeout(int i) throws SystemException {
+
+ }
+
+ @Override
+ public Transaction suspend() throws SystemException {
+ return TRANSACTION;
+ }
+ }
+}
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
new file mode 100644
index 000000000..497c61737
--- /dev/null
+++ b/spring-data-neo4j-rest/src/main/java/org/neo4j/rest/graphdb/GraphDatabaseFactory.java
@@ -0,0 +1,39 @@
+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/JsonHelper.java b/spring-data-neo4j-rest/src/main/java/org/neo4j/rest/graphdb/JsonHelper.java
new file mode 100644
index 000000000..de6a2a764
--- /dev/null
+++ b/spring-data-neo4j-rest/src/main/java/org/neo4j/rest/graphdb/JsonHelper.java
@@ -0,0 +1,58 @@
+package org.neo4j.rest.graphdb;
+
+/**
+ * @author mh
+ * @since 13.12.10
+ */
+
+import org.codehaus.jackson.JsonGenerator;
+import org.codehaus.jackson.map.ObjectMapper;
+
+import java.io.IOException;
+import java.io.StringWriter;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+public class JsonHelper {
+
+ static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
+
+ @SuppressWarnings("unchecked")
+ public static Map jsonToMap( String json ) {
+ return (Map) readJson( json );
+ }
+
+ @SuppressWarnings("unchecked")
+ public static List