diff --git a/neo4j/example/pom.xml b/neo4j/example/pom.xml index a4a14e9d..f0739169 100644 --- a/neo4j/example/pom.xml +++ b/neo4j/example/pom.xml @@ -2,70 +2,58 @@ - 4.0.0 + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + 4.0.0 - spring-data-neo4j-example - Spring Data Neo4j - Example - - 4.0.0.BUILD-SNAPSHOT - 1.1.2-SNAPSHOT - 2.2.4 - + spring-data-neo4j-example + Spring Data Neo4j - Example + + 4.0.0.RC2 + 1.1.1 + 2.2.4 + - - org.springframework.data.examples - spring-data-neo4j-examples - 1.0.0.BUILD-SNAPSHOT - ../pom.xml - + + org.springframework.data.examples + spring-data-neo4j-examples + 1.0.0.BUILD-SNAPSHOT + ../pom.xml + - + - - org.springframework.data - spring-data-neo4j - ${spring-data-neo4j.version} - + + org.springframework.data + spring-data-neo4j + ${spring-data-neo4j.version} + - - org.springframework.data - spring-data-neo4j - ${spring-data-neo4j.version} - test-jar - - - org.neo4j - neo4j-ogm - ${neo4j-ogm.version} - test-jar - test - - - org.neo4j.app - neo4j-server - ${neo4j.version} - - - junit - junit - 4.12 - test - - - org.neo4j.test - neo4j-harness - ${neo4j.version} - test - - + + org.springframework.data + spring-data-neo4j + ${spring-data-neo4j.version} + test-jar + + + org.neo4j + neo4j-ogm + ${neo4j-ogm.version} + test-jar + test + + + org.neo4j.app + neo4j-server + ${neo4j.version} + + + org.neo4j.test + neo4j-harness + ${neo4j.version} + test + + + - - - spring-libs-snapshot - Spring - http://repo.spring.io/libs-snapshot - - \ No newline at end of file diff --git a/neo4j/example/src/main/java/example/springdata/neo4j/domain/Actor.java b/neo4j/example/src/main/java/example/springdata/neo4j/Actor.java similarity index 68% rename from neo4j/example/src/main/java/example/springdata/neo4j/domain/Actor.java rename to neo4j/example/src/main/java/example/springdata/neo4j/Actor.java index c45ef0ea..2d5422e8 100644 --- a/neo4j/example/src/main/java/example/springdata/neo4j/domain/Actor.java +++ b/neo4j/example/src/main/java/example/springdata/neo4j/Actor.java @@ -14,7 +14,12 @@ * limitations under the License. */ -package example.springdata.neo4j.domain; +package example.springdata.neo4j; + +import lombok.AccessLevel; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.RequiredArgsConstructor; import java.util.HashSet; import java.util.Set; @@ -27,41 +32,22 @@ import org.neo4j.ogm.annotation.Relationship; * An Actor node entity. * * @author Luanne Misquitta + * @author Oliver Gierke */ @NodeEntity(label = "Actor") +@NoArgsConstructor(force = true, access = AccessLevel.PRIVATE) +@RequiredArgsConstructor +@Getter public class Actor { - @GraphId private Long id; - private String name; - - @Relationship(type = "ACTED_IN") - private Set roles = new HashSet<>(); - - public Actor() { - } - - public Actor(String name) { - this.name = name; - } - - public String getName() { - return name; - } - - public Long getId() { - return id; - } - - public Set getRoles() { - return roles; - } + private @GraphId Long id; + private final String name; + private final @Relationship(type = "ACTED_IN") Set roles = new HashSet<>(); public void actedIn(Movie movie, String roleName) { - Role role = new Role(); - role.setRole(roleName); - role.setActor(this); - role.setMovie(movie); + Role role = new Role(this, roleName, movie); + roles.add(role); movie.getRoles().add(role); } diff --git a/neo4j/example/src/main/java/example/springdata/neo4j/repo/ActorRepository.java b/neo4j/example/src/main/java/example/springdata/neo4j/ActorRepository.java similarity index 86% rename from neo4j/example/src/main/java/example/springdata/neo4j/repo/ActorRepository.java rename to neo4j/example/src/main/java/example/springdata/neo4j/ActorRepository.java index f8acdf4a..c1f18ea0 100644 --- a/neo4j/example/src/main/java/example/springdata/neo4j/repo/ActorRepository.java +++ b/neo4j/example/src/main/java/example/springdata/neo4j/ActorRepository.java @@ -13,15 +13,13 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package example.springdata.neo4j.repo; +package example.springdata.neo4j; -import example.springdata.neo4j.domain.Actor; import org.springframework.data.neo4j.repository.GraphRepository; /** - * GraphRepository for Actors. + * {@link GraphRepository} for {@link Actor}s. + * * @author Luanne Misquitta */ -public interface ActorRepository extends GraphRepository { - -} +public interface ActorRepository extends GraphRepository {} diff --git a/neo4j/example/src/main/java/example/springdata/neo4j/domain/Movie.java b/neo4j/example/src/main/java/example/springdata/neo4j/Movie.java similarity index 65% rename from neo4j/example/src/main/java/example/springdata/neo4j/domain/Movie.java rename to neo4j/example/src/main/java/example/springdata/neo4j/Movie.java index 33e581e3..eacc9648 100644 --- a/neo4j/example/src/main/java/example/springdata/neo4j/domain/Movie.java +++ b/neo4j/example/src/main/java/example/springdata/neo4j/Movie.java @@ -14,7 +14,12 @@ * limitations under the License. */ -package example.springdata.neo4j.domain; +package example.springdata.neo4j; + +import lombok.AccessLevel; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.RequiredArgsConstructor; import java.util.HashSet; import java.util.Set; @@ -27,34 +32,15 @@ import org.neo4j.ogm.annotation.Relationship; * A Movie node entity. * * @author Luanne Misquitta + * @author Oliver Gierke */ @NodeEntity(label = "Movie") +@NoArgsConstructor(force = true, access = AccessLevel.PRIVATE) +@RequiredArgsConstructor +@Getter public class Movie { - @GraphId private Long id; - private String title; - - @Relationship(type = "ACTED_IN", direction = "INCOMING") - private Set roles = new HashSet<>(); - - public Movie() { - } - - public Movie(String title) { - this.title = title; - } - - public String getTitle() { - return title; - } - - public void setTitle(String title) { - this.title = title; - } - - @Relationship(type = "ACTED_IN", direction = "INCOMING") - public Set getRoles() { - return roles; - } - + private @GraphId Long id; + private final String title; + private final @Relationship(type = "ACTED_IN", direction = "INCOMING") Set roles = new HashSet<>(); } diff --git a/neo4j/example/src/main/java/example/springdata/neo4j/domain/Role.java b/neo4j/example/src/main/java/example/springdata/neo4j/Role.java similarity index 65% rename from neo4j/example/src/main/java/example/springdata/neo4j/domain/Role.java rename to neo4j/example/src/main/java/example/springdata/neo4j/Role.java index 9a7f3e7e..8114b821 100644 --- a/neo4j/example/src/main/java/example/springdata/neo4j/domain/Role.java +++ b/neo4j/example/src/main/java/example/springdata/neo4j/Role.java @@ -13,7 +13,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package example.springdata.neo4j.domain; +package example.springdata.neo4j; + +import lombok.AccessLevel; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.RequiredArgsConstructor; import org.neo4j.ogm.annotation.EndNode; import org.neo4j.ogm.annotation.GraphId; @@ -22,40 +27,17 @@ import org.neo4j.ogm.annotation.StartNode; /** * A Role relationship entity between an actor and movie. + * * @author Luanne Misquitta */ @RelationshipEntity(type = "ACTED_IN") +@NoArgsConstructor(force = true, access = AccessLevel.PRIVATE) +@RequiredArgsConstructor +@Getter public class Role { - @GraphId private Long id; - @StartNode private Actor actor; - @EndNode private Movie movie; - private String role; - - public Role() { - } - - public Actor getActor() { - return actor; - } - - public void setActor(Actor actor) { - this.actor = actor; - } - - public Movie getMovie() { - return movie; - } - - public void setMovie(Movie movie) { - this.movie = movie; - } - - public String getRole() { - return role; - } - - public void setRole(String role) { - this.role = role; - } + private @GraphId Long id; + private final @StartNode Actor actor; + private final String role; + private final @EndNode Movie movie; } diff --git a/neo4j/example/src/test/java/example/springdata/neo4j/ActorRepositoryIntegrationTest.java b/neo4j/example/src/test/java/example/springdata/neo4j/ActorRepositoryIntegrationTest.java index ecc6e2fa..b66284ef 100644 --- a/neo4j/example/src/test/java/example/springdata/neo4j/ActorRepositoryIntegrationTest.java +++ b/neo4j/example/src/test/java/example/springdata/neo4j/ActorRepositoryIntegrationTest.java @@ -13,52 +13,75 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - package example.springdata.neo4j; +import static org.hamcrest.Matchers.*; import static org.junit.Assert.*; -import example.springdata.neo4j.domain.Actor; -import example.springdata.neo4j.domain.Movie; -import example.springdata.neo4j.domain.Role; -import example.springdata.neo4j.repo.ActorRepository; import org.junit.Test; import org.junit.runner.RunWith; +import org.neo4j.ogm.session.SessionFactory; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.test.annotation.DirtiesContext; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.neo4j.config.Neo4jConfiguration; +import org.springframework.data.neo4j.repository.config.EnableNeo4jRepositories; +import org.springframework.data.neo4j.server.InProcessServer; +import org.springframework.data.neo4j.server.Neo4jServer; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.transaction.annotation.EnableTransactionManagement; +import org.springframework.transaction.annotation.Transactional; /** * Simple integration test demonstrating the use of the ActorRepository + * * @author Luanne Misquitta + * @author Oliver Gierke */ -@ContextConfiguration(classes = {ExampleConfig.class}) @RunWith(SpringJUnit4ClassRunner.class) -@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD) +@ContextConfiguration +@Transactional public class ActorRepositoryIntegrationTest { + @Configuration + @EnableTransactionManagement + @EnableNeo4jRepositories + static class ExampleConfig extends Neo4jConfiguration { + + @Override + public Neo4jServer neo4jServer() { + return new InProcessServer(); + } + + @Override + public SessionFactory getSessionFactory() { + return new SessionFactory("example.springdata.neo4j"); + } + } + @Autowired ActorRepository actorRepository; /** - * @see DATAGRAPH-752 - * Test case to demonstrate saving node and relationship entities, and loading them via the repository. + * @see #131 */ @Test public void shouldBeAbleToSaveAndLoadActor() { - Actor daniel = new Actor("Daniel Radcliffe"); Movie goblet = new Movie("Harry Potter and the Goblet of Fire"); - daniel.actedIn(goblet,"Harry Potter"); - actorRepository.save(daniel); //saves the actor and the movie + Actor daniel = new Actor("Daniel Radcliffe"); + daniel.actedIn(goblet, "Harry Potter"); + + actorRepository.save(daniel); // saves the actor and the movie Actor actor = actorRepository.findOne(daniel.getId()); - assertNotNull(actor); - assertEquals(daniel.getName(),actor.getName()); - assertEquals(1,actor.getRoles().size()); - Role role = actor.getRoles().iterator().next(); - assertEquals("Harry Potter", role.getRole()); - } + assertThat(actor, is(notNullValue())); + assertThat(actor.getName(), is(daniel.getName())); + assertThat(actor.getRoles(), hasSize(1)); + + Role role = actor.getRoles().iterator().next(); + + assertThat(role.getRole(), is("Harry Potter")); + } } diff --git a/neo4j/example/src/test/java/example/springdata/neo4j/ExampleConfig.java b/neo4j/example/src/test/java/example/springdata/neo4j/ExampleConfig.java deleted file mode 100644 index 18bab351..00000000 --- a/neo4j/example/src/test/java/example/springdata/neo4j/ExampleConfig.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright 2015 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package example.springdata.neo4j; - -import org.neo4j.ogm.session.SessionFactory; -import org.springframework.context.annotation.Configuration; -import org.springframework.data.neo4j.config.Neo4jConfiguration; -import org.springframework.data.neo4j.repository.config.EnableNeo4jRepositories; -import org.springframework.data.neo4j.server.InProcessServer; -import org.springframework.data.neo4j.server.Neo4jServer; -import org.springframework.transaction.annotation.EnableTransactionManagement; - -/** - * @author Luanne Misquitta - */ -@Configuration -@EnableTransactionManagement -@EnableNeo4jRepositories("example.springdata.neo4j.repo") -public class ExampleConfig extends Neo4jConfiguration{ - - @Override - public Neo4jServer neo4jServer() { - return new InProcessServer(); - } - - @Override - public SessionFactory getSessionFactory() { - return new SessionFactory("example.springdata.neo4j.domain"); - } -} diff --git a/neo4j/pom.xml b/neo4j/pom.xml index 9b28ccb1..b99f7f7d 100644 --- a/neo4j/pom.xml +++ b/neo4j/pom.xml @@ -2,24 +2,24 @@ - 4.0.0 + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + 4.0.0 - spring-data-neo4j-examples - pom + spring-data-neo4j-examples + pom - - org.springframework.data.examples - spring-data-examples - 1.0.0.BUILD-SNAPSHOT - + + org.springframework.data.examples + spring-data-examples + 1.0.0.BUILD-SNAPSHOT + - Spring Data Neo4j 4 - Examples - Sample projects for Spring Data Neo4j 4 + Spring Data Neo4j 4 - Examples + Sample projects for Spring Data Neo4j 4 - - example - + + example + \ No newline at end of file diff --git a/pom.xml b/pom.xml index 7effc720..8ebb7085 100644 --- a/pom.xml +++ b/pom.xml @@ -69,7 +69,7 @@ org.projectlombok lombok - 1.16.4 + 1.16.6 provided