diff --git a/spring-data-rest-example/src/main/java/org/springframework/data/rest/example/RestExporterWebInitializer.java b/spring-data-rest-example/src/main/java/org/springframework/data/rest/example/RestExporterWebInitializer.java index 72bcf5e72..26aab4ba2 100644 --- a/spring-data-rest-example/src/main/java/org/springframework/data/rest/example/RestExporterWebInitializer.java +++ b/spring-data-rest-example/src/main/java/org/springframework/data/rest/example/RestExporterWebInitializer.java @@ -20,8 +20,8 @@ public class RestExporterWebInitializer implements WebApplicationInitializer { @Override public void onStartup(ServletContext servletContext) throws ServletException { AnnotationConfigWebApplicationContext rootCtx = new AnnotationConfigWebApplicationContext(); rootCtx.register( - JpaRepositoryConfig.class, - MongoDbRepositoryConfig.class, + //JpaRepositoryConfig.class, + //MongoDbRepositoryConfig.class, //GemfireRepositoryConfig.class, Neo4jRepositoryConfig.class ); diff --git a/spring-data-rest-example/src/main/java/org/springframework/data/rest/example/jpa/JpaLoader.java b/spring-data-rest-example/src/main/java/org/springframework/data/rest/example/jpa/JpaLoader.java new file mode 100644 index 000000000..28e18b686 --- /dev/null +++ b/spring-data-rest-example/src/main/java/org/springframework/data/rest/example/jpa/JpaLoader.java @@ -0,0 +1,37 @@ +package org.springframework.data.rest.example.jpa; + +import java.util.Arrays; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.transaction.annotation.Transactional; + +/** + * @author Jon Brisbin + */ +public class JpaLoader { + + private final static Logger LOG = LoggerFactory.getLogger(JpaLoader.class); + @Autowired + PersonRepository people; + + @Transactional + public void loadData() { + Person billyBob = people.save(new Person("Billy Bob", "Thornton")); + LOG.info("Saved {}", billyBob); + Person john = people.save(new Person("John", "Doe")); + LOG.info("Saved {}", john); + Person jane = people.save(new Person("Jane", "Doe")); + LOG.info("Saved {}", jane); + john.setSiblings(Arrays.asList(jane)); + john.setFather(billyBob); + jane.setSiblings(Arrays.asList(john)); + jane.setFather(billyBob); + + people.save(Arrays.asList(john, jane)); + + LOG.info("Person count: {}", people.count()); + } + +} diff --git a/spring-data-rest-example/src/main/java/org/springframework/data/rest/example/jpa/JpaRepositoryConfig.java b/spring-data-rest-example/src/main/java/org/springframework/data/rest/example/jpa/JpaRepositoryConfig.java index c6ad17225..7c60a5376 100644 --- a/spring-data-rest-example/src/main/java/org/springframework/data/rest/example/jpa/JpaRepositoryConfig.java +++ b/spring-data-rest-example/src/main/java/org/springframework/data/rest/example/jpa/JpaRepositoryConfig.java @@ -57,4 +57,8 @@ public class JpaRepositoryConfig { return txManager; } + @Bean(initMethod = "loadData") public JpaLoader jpaLoader() { + return new JpaLoader(); + } + } diff --git a/spring-data-rest-example/src/main/java/org/springframework/data/rest/example/jpa/Person.java b/spring-data-rest-example/src/main/java/org/springframework/data/rest/example/jpa/Person.java index c8b72bdd3..f78170705 100644 --- a/spring-data-rest-example/src/main/java/org/springframework/data/rest/example/jpa/Person.java +++ b/spring-data-rest-example/src/main/java/org/springframework/data/rest/example/jpa/Person.java @@ -109,4 +109,15 @@ public class Person { this.created = Calendar.getInstance().getTime(); } + @Override public String toString() { + return "Person{" + + "id=" + id + + ", firstName='" + firstName + '\'' + + ", lastName='" + lastName + '\'' + + ", siblings=[" + siblings.size() + "]" + + ", father=" + father + + ", created=" + created + + '}'; + } + } \ No newline at end of file diff --git a/spring-data-rest-example/src/main/java/org/springframework/data/rest/example/jpa/PersonLoader.java b/spring-data-rest-example/src/main/java/org/springframework/data/rest/example/jpa/PersonLoader.java deleted file mode 100644 index 5dabb5b12..000000000 --- a/spring-data-rest-example/src/main/java/org/springframework/data/rest/example/jpa/PersonLoader.java +++ /dev/null @@ -1,31 +0,0 @@ -package org.springframework.data.rest.example.jpa; - -import java.util.Arrays; - -import org.springframework.beans.factory.InitializingBean; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -/** - * @author Jon Brisbin - */ -@Component -public class PersonLoader implements InitializingBean { - - @Autowired - PersonRepository people; - - @Override public void afterPropertiesSet() throws Exception { - Person billyBob = people.save(new Person("Billy Bob", "Thornton")); - - Person john = new Person("John", "Doe"); - Person jane = new Person("Jane", "Doe"); - john.addSibling(jane); - john.setFather(billyBob); - jane.addSibling(john); - jane.setFather(billyBob); - - people.save(Arrays.asList(john, jane)); - } - -} diff --git a/spring-data-rest-example/src/main/java/org/springframework/data/rest/example/neo4j/Movie.java b/spring-data-rest-example/src/main/java/org/springframework/data/rest/example/neo4j/Movie.java new file mode 100644 index 000000000..adb7411b6 --- /dev/null +++ b/spring-data-rest-example/src/main/java/org/springframework/data/rest/example/neo4j/Movie.java @@ -0,0 +1,47 @@ +package org.springframework.data.rest.example.neo4j; + +import org.springframework.data.neo4j.annotation.GraphId; +import org.springframework.data.neo4j.annotation.NodeEntity; +import org.springframework.data.neo4j.annotation.RelatedTo; + +/** + * @author Jon Brisbin + */ +@NodeEntity +public class Movie { + + @GraphId + private Long id; + private String name; + @RelatedTo(enforceTargetType = true) + private Studio studio; + + public Movie() { + } + + public Movie(String name, Studio studio) { + this.name = name; + this.studio = studio; + } + + public Long getId() { + return id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Studio getStudio() { + return studio; + } + + public void setStudio(Studio studio) { + this.studio = studio; + } + +} diff --git a/spring-data-rest-example/src/main/java/org/springframework/data/rest/example/neo4j/MovieRepository.java b/spring-data-rest-example/src/main/java/org/springframework/data/rest/example/neo4j/MovieRepository.java new file mode 100644 index 000000000..b94383073 --- /dev/null +++ b/spring-data-rest-example/src/main/java/org/springframework/data/rest/example/neo4j/MovieRepository.java @@ -0,0 +1,9 @@ +package org.springframework.data.rest.example.neo4j; + +import org.springframework.data.neo4j.repository.GraphRepository; + +/** + * @author Jon Brisbin + */ +public interface MovieRepository extends GraphRepository { +} diff --git a/spring-data-rest-example/src/main/java/org/springframework/data/rest/example/neo4j/FriendLoader.java b/spring-data-rest-example/src/main/java/org/springframework/data/rest/example/neo4j/Neo4jLoader.java similarity index 55% rename from spring-data-rest-example/src/main/java/org/springframework/data/rest/example/neo4j/FriendLoader.java rename to spring-data-rest-example/src/main/java/org/springframework/data/rest/example/neo4j/Neo4jLoader.java index 7a14eccd4..c19c5fbfa 100644 --- a/spring-data-rest-example/src/main/java/org/springframework/data/rest/example/neo4j/FriendLoader.java +++ b/spring-data-rest-example/src/main/java/org/springframework/data/rest/example/neo4j/Neo4jLoader.java @@ -3,20 +3,27 @@ package org.springframework.data.rest.example.neo4j; import java.util.HashSet; import java.util.Set; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; /** * @author Jon Brisbin */ -public class FriendLoader { +public class Neo4jLoader { + private static final Logger LOG = LoggerFactory.getLogger(Neo4jLoader.class); @Autowired private FriendRepository friends; + @Autowired + private MovieRepository movies; + @Autowired + private StudioRepository studios; @SuppressWarnings({"unchecked"}) @Transactional - public void loadFriends() { + public void loadData() { Friend bob = new Friend("Bob"); Friend dean = new Friend("Dean"); Friend jim = new Friend("Jim"); @@ -29,7 +36,12 @@ public class FriendLoader { this.friends.save(bob); - System.out.println("Saved Bob: " + bob); + LOG.info("Loaded {}", bob); + + Studio studio = studios.save(new Studio("MGM")); + Movie wizardOfOz = movies.save(new Movie("The Wizard of Oz", studio)); + + LOG.info("Loaded {} and {}", studio, wizardOfOz); } } diff --git a/spring-data-rest-example/src/main/java/org/springframework/data/rest/example/neo4j/Neo4jRepositoryConfig.java b/spring-data-rest-example/src/main/java/org/springframework/data/rest/example/neo4j/Neo4jRepositoryConfig.java index e43c95598..9e822e38c 100644 --- a/spring-data-rest-example/src/main/java/org/springframework/data/rest/example/neo4j/Neo4jRepositoryConfig.java +++ b/spring-data-rest-example/src/main/java/org/springframework/data/rest/example/neo4j/Neo4jRepositoryConfig.java @@ -9,10 +9,10 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.neo4j.config.EnableNeo4jRepositories; import org.springframework.data.neo4j.config.JtaTransactionManagerFactoryBean; +import org.springframework.data.neo4j.support.Neo4jExceptionTranslator; import org.springframework.data.neo4j.support.Neo4jTemplate; import org.springframework.data.neo4j.support.mapping.Neo4jMappingContext; import org.springframework.transaction.annotation.EnableTransactionManagement; -import org.springframework.transaction.support.TransactionTemplate; /** * @author Jon Brisbin @@ -41,8 +41,12 @@ public class Neo4jRepositoryConfig { return new JtaTransactionManagerFactoryBean(graphDatabaseService()); } - @Bean(initMethod = "loadFriends") public FriendLoader friendLoader() { - return new FriendLoader(); + @Bean public Neo4jExceptionTranslator exceptionTranslator() { + return new Neo4jExceptionTranslator(); + } + + @Bean(initMethod = "loadData") public Neo4jLoader neo4jLoader() { + return new Neo4jLoader(); } } diff --git a/spring-data-rest-example/src/main/java/org/springframework/data/rest/example/neo4j/Studio.java b/spring-data-rest-example/src/main/java/org/springframework/data/rest/example/neo4j/Studio.java new file mode 100644 index 000000000..1d4a68f16 --- /dev/null +++ b/spring-data-rest-example/src/main/java/org/springframework/data/rest/example/neo4j/Studio.java @@ -0,0 +1,35 @@ +package org.springframework.data.rest.example.neo4j; + +import org.springframework.data.neo4j.annotation.GraphId; +import org.springframework.data.neo4j.annotation.NodeEntity; + +/** + * @author Jon Brisbin + */ +@NodeEntity +public class Studio { + + @GraphId + private Long id; + private String name; + + public Studio() { + } + + public Studio(String name) { + this.name = name; + } + + public Long getId() { + return id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + +} diff --git a/spring-data-rest-example/src/main/java/org/springframework/data/rest/example/neo4j/StudioRepository.java b/spring-data-rest-example/src/main/java/org/springframework/data/rest/example/neo4j/StudioRepository.java new file mode 100644 index 000000000..f415b2221 --- /dev/null +++ b/spring-data-rest-example/src/main/java/org/springframework/data/rest/example/neo4j/StudioRepository.java @@ -0,0 +1,9 @@ +package org.springframework.data.rest.example.neo4j; + +import org.springframework.data.neo4j.repository.GraphRepository; + +/** + * @author Jon Brisbin + */ +public interface StudioRepository extends GraphRepository { +} diff --git a/spring-data-rest-example/src/main/resources/META-INF/spring/neo4j-config.xml b/spring-data-rest-example/src/main/resources/META-INF/spring/neo4j-config.xml deleted file mode 100644 index a2bb4bc2b..000000000 --- a/spring-data-rest-example/src/main/resources/META-INF/spring/neo4j-config.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - \ No newline at end of file