updating test cases
This commit is contained in:
parent
6e6b4612f8
commit
718c04ceeb
@ -8,12 +8,20 @@
|
|||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
|
<java.version>1.8</java.version>
|
||||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
<spring.version>4.2.5.RELEASE</spring.version>
|
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
|
||||||
<spring-data-neo4j.version>4.0.0.RELEASE</spring-data-neo4j.version>
|
<neo4j.version>3.0.1</neo4j.version>
|
||||||
<nosqlunit.version>0.8.0</nosqlunit.version>
|
<spring-data-neo4j.version>4.1.1.RELEASE</spring-data-neo4j.version>
|
||||||
|
<spring-data-releasetrain.version>Hopper-SR1</spring-data-releasetrain.version>
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
|
<parent>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-parent</artifactId>
|
||||||
|
<version>1.3.0.RELEASE</version>
|
||||||
|
</parent>
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.springframework.data</groupId>
|
<groupId>org.springframework.data</groupId>
|
||||||
@ -22,15 +30,8 @@
|
|||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.springframework</groupId>
|
<groupId>org.springframework.boot</groupId>
|
||||||
<artifactId>spring-core</artifactId>
|
<artifactId>spring-boot-starter-data-rest</artifactId>
|
||||||
<version>${spring.version}</version>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.springframework</groupId>
|
|
||||||
<artifactId>spring-context</artifactId>
|
|
||||||
<version>${spring.version}</version>
|
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
@ -40,23 +41,95 @@
|
|||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<!-- end::dependencies[] -->
|
||||||
|
|
||||||
|
<!-- Test Dependencies -->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>log4j</groupId>
|
<groupId>org.springframework.boot</groupId>
|
||||||
<artifactId>log4j</artifactId>
|
<artifactId>spring-boot-starter-test</artifactId>
|
||||||
<version>1.2.16</version>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.data</groupId>
|
||||||
|
<artifactId>spring-data-neo4j</artifactId>
|
||||||
|
<version>${spring-data-neo4j.version}</version>
|
||||||
|
<type>test-jar</type>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.neo4j</groupId>
|
||||||
|
<artifactId>neo4j-kernel</artifactId>
|
||||||
|
<version>${neo4j.version}</version>
|
||||||
|
<type>test-jar</type>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.neo4j.app</groupId>
|
||||||
|
<artifactId>neo4j-server</artifactId>
|
||||||
|
<version>${neo4j.version}</version>
|
||||||
|
<type>test-jar</type>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.neo4j</groupId>
|
||||||
|
<artifactId>neo4j-ogm-test</artifactId>
|
||||||
|
<version>2.0.2</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.neo4j.test</groupId>
|
||||||
|
<artifactId>neo4j-harness</artifactId>
|
||||||
|
<version>${neo4j.version}</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>junit</groupId>
|
||||||
|
<artifactId>junit</artifactId>
|
||||||
|
<version>4.12</version>
|
||||||
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>junit</groupId>
|
<groupId>junit</groupId>
|
||||||
<artifactId>junit</artifactId>
|
<artifactId>junit</artifactId>
|
||||||
<version>4.12</version>
|
<version>4.12</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.springframework</groupId>
|
<groupId>org.springframework</groupId>
|
||||||
<artifactId>spring-test</artifactId>
|
<artifactId>spring-test</artifactId>
|
||||||
<version>${spring.version}</version>
|
<version>4.2.3.RELEASE</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-maven-plugin</artifactId>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
|
||||||
|
<repositories>
|
||||||
|
<repository>
|
||||||
|
<id>spring-milestones</id>
|
||||||
|
<url>http://repo.spring.io/libs-snapshot</url>
|
||||||
|
<snapshots>
|
||||||
|
<enabled>true</enabled>
|
||||||
|
</snapshots>
|
||||||
|
</repository>
|
||||||
|
</repositories>
|
||||||
|
<pluginRepositories>
|
||||||
|
<pluginRepository>
|
||||||
|
<id>spring-milestones</id>
|
||||||
|
<url>http://repo.spring.io/libs-snapshot</url>
|
||||||
|
<snapshots>
|
||||||
|
<enabled>true</enabled>
|
||||||
|
</snapshots>
|
||||||
|
</pluginRepository>
|
||||||
|
</pluginRepositories>
|
||||||
</project>
|
</project>
|
||||||
|
@ -1,32 +0,0 @@
|
|||||||
package com.baeldung.spring.data.neo4j.config;
|
|
||||||
|
|
||||||
|
|
||||||
import org.neo4j.ogm.session.SessionFactory;
|
|
||||||
import org.springframework.context.annotation.ComponentScan;
|
|
||||||
import org.springframework.context.annotation.Configuration;
|
|
||||||
import org.springframework.context.annotation.Import;
|
|
||||||
import org.springframework.data.neo4j.config.Neo4jConfiguration;
|
|
||||||
import org.springframework.data.neo4j.repository.config.EnableNeo4jRepositories;
|
|
||||||
import org.springframework.data.neo4j.server.Neo4jServer;
|
|
||||||
import org.springframework.data.neo4j.server.RemoteServer;
|
|
||||||
import org.springframework.scheduling.annotation.EnableScheduling;
|
|
||||||
import org.springframework.transaction.annotation.EnableTransactionManagement;
|
|
||||||
|
|
||||||
|
|
||||||
@Configuration
|
|
||||||
@ComponentScan("com.baeldung.spring.data.neo4j")
|
|
||||||
@EnableNeo4jRepositories(basePackages = "com.baeldung.spring.data.neo4j.repostory")
|
|
||||||
public class LibraryNeo4jConfiguration extends Neo4jConfiguration {
|
|
||||||
|
|
||||||
public static final String URL = System.getenv("NEO4J_URL") != null ? System.getenv("NEO4J_URL") : "http://localhost:7474";
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Neo4jServer neo4jServer() {
|
|
||||||
return new RemoteServer(URL,"neo4j","password");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public SessionFactory getSessionFactory() {
|
|
||||||
return new SessionFactory("com.baeldung.spring.data.neo4j.model");
|
|
||||||
}
|
|
||||||
}
|
|
@ -0,0 +1,38 @@
|
|||||||
|
package com.baeldung.spring.data.neo4j.config;
|
||||||
|
|
||||||
|
import org.neo4j.ogm.session.SessionFactory;
|
||||||
|
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
|
||||||
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.context.annotation.ComponentScan;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
import org.springframework.data.neo4j.config.Neo4jConfiguration;
|
||||||
|
import org.springframework.data.neo4j.repository.config.EnableNeo4jRepositories;
|
||||||
|
import org.springframework.scheduling.annotation.EnableScheduling;
|
||||||
|
import org.springframework.transaction.annotation.EnableTransactionManagement;
|
||||||
|
|
||||||
|
|
||||||
|
@EnableTransactionManagement
|
||||||
|
@EnableScheduling
|
||||||
|
@EnableAutoConfiguration
|
||||||
|
@ComponentScan(basePackages = {"com.baeldung.spring.data.neo4j.services"})
|
||||||
|
@Configuration
|
||||||
|
@EnableNeo4jRepositories(basePackages = "com.baeldung.spring.data.neo4j.repostory")
|
||||||
|
public class MovieDatabaseNeo4jConfiguration extends Neo4jConfiguration {
|
||||||
|
|
||||||
|
public static final String URL = System.getenv("NEO4J_URL") != null ? System.getenv("NEO4J_URL") : "http://neo4j:movies@localhost:7474";
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
public org.neo4j.ogm.config.Configuration getConfiguration() {
|
||||||
|
org.neo4j.ogm.config.Configuration config = new org.neo4j.ogm.config.Configuration();
|
||||||
|
config
|
||||||
|
.driverConfiguration()
|
||||||
|
.setDriverClassName("org.neo4j.ogm.drivers.http.driver.HttpDriver")
|
||||||
|
.setURI(URL);
|
||||||
|
return config;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SessionFactory getSessionFactory() {
|
||||||
|
return new SessionFactory(getConfiguration(), "com.baeldung.spring.data.neo4j.domain");
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,34 @@
|
|||||||
|
package com.baeldung.spring.data.neo4j.config;
|
||||||
|
|
||||||
|
import org.neo4j.ogm.session.SessionFactory;
|
||||||
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.context.annotation.ComponentScan;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
import org.springframework.context.annotation.Profile;
|
||||||
|
import org.springframework.data.neo4j.config.Neo4jConfiguration;
|
||||||
|
import org.springframework.data.neo4j.repository.config.EnableNeo4jRepositories;
|
||||||
|
import org.springframework.data.neo4j.server.Neo4jServer;
|
||||||
|
import org.springframework.transaction.annotation.EnableTransactionManagement;
|
||||||
|
|
||||||
|
|
||||||
|
@EnableTransactionManagement
|
||||||
|
@ComponentScan(basePackages = {"com.baeldung.spring.data.neo4j.services"})
|
||||||
|
@Configuration
|
||||||
|
@EnableNeo4jRepositories(basePackages = "com.baeldung.spring.data.neo4j.repostory")
|
||||||
|
@Profile({"embedded", "test"})
|
||||||
|
public class MovieDatabaseNeo4jTestConfiguration extends Neo4jConfiguration {
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
public org.neo4j.ogm.config.Configuration getConfiguration() {
|
||||||
|
org.neo4j.ogm.config.Configuration config = new org.neo4j.ogm.config.Configuration();
|
||||||
|
config
|
||||||
|
.driverConfiguration()
|
||||||
|
.setDriverClassName("org.neo4j.ogm.drivers.embedded.driver.EmbeddedDriver");
|
||||||
|
return config;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SessionFactory getSessionFactory() {
|
||||||
|
return new SessionFactory(getConfiguration(), "com.baeldung.spring.data.neo4j.domain");
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,63 @@
|
|||||||
|
package com.baeldung.spring.data.neo4j.domain;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonIdentityInfo;
|
||||||
|
import com.voodoodyne.jackson.jsog.JSOGGenerator;
|
||||||
|
import org.neo4j.ogm.annotation.GraphId;
|
||||||
|
import org.neo4j.ogm.annotation.NodeEntity;
|
||||||
|
import org.neo4j.ogm.annotation.Relationship;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@JsonIdentityInfo(generator=JSOGGenerator.class)
|
||||||
|
|
||||||
|
@NodeEntity
|
||||||
|
public class Movie {
|
||||||
|
@GraphId
|
||||||
|
Long id;
|
||||||
|
|
||||||
|
private String title;
|
||||||
|
|
||||||
|
private int released;
|
||||||
|
private String tagline;
|
||||||
|
|
||||||
|
@Relationship(type="ACTED_IN", direction = Relationship.INCOMING) private List<Role> roles;
|
||||||
|
|
||||||
|
// end::movie[]
|
||||||
|
|
||||||
|
public Movie() { }
|
||||||
|
|
||||||
|
public String getTitle() {
|
||||||
|
return title;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getReleased() {
|
||||||
|
return released;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getTagline() {
|
||||||
|
return tagline;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Collection<Role> getRoles() {
|
||||||
|
return roles;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTitle(String title) {
|
||||||
|
this.title = title;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setReleased(int released) {
|
||||||
|
this.released = released;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTagline(String tagline) {
|
||||||
|
this.tagline = tagline;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setRoles(List<Role> roles) {
|
||||||
|
this.roles = roles;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,50 @@
|
|||||||
|
package com.baeldung.spring.data.neo4j.domain;
|
||||||
|
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonIdentityInfo;
|
||||||
|
import com.voodoodyne.jackson.jsog.JSOGGenerator;
|
||||||
|
import org.neo4j.ogm.annotation.GraphId;
|
||||||
|
import org.neo4j.ogm.annotation.NodeEntity;
|
||||||
|
import org.neo4j.ogm.annotation.Relationship;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@JsonIdentityInfo(generator=JSOGGenerator.class)
|
||||||
|
@NodeEntity
|
||||||
|
public class Person {
|
||||||
|
@GraphId
|
||||||
|
Long id;
|
||||||
|
|
||||||
|
private String name;
|
||||||
|
private int born;
|
||||||
|
|
||||||
|
@Relationship(type = "ACTED_IN")
|
||||||
|
private List<Movie> movies;
|
||||||
|
|
||||||
|
public Person() { }
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getBorn() {
|
||||||
|
return born;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Movie> getMovies() {
|
||||||
|
return movies;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBorn(int born) {
|
||||||
|
this.born = born;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMovies(List<Movie> movies) {
|
||||||
|
this.movies = movies;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,50 @@
|
|||||||
|
package com.baeldung.spring.data.neo4j.domain;
|
||||||
|
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonIdentityInfo;
|
||||||
|
import com.voodoodyne.jackson.jsog.JSOGGenerator;
|
||||||
|
import org.neo4j.ogm.annotation.EndNode;
|
||||||
|
import org.neo4j.ogm.annotation.GraphId;
|
||||||
|
import org.neo4j.ogm.annotation.RelationshipEntity;
|
||||||
|
import org.neo4j.ogm.annotation.StartNode;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
|
|
||||||
|
@JsonIdentityInfo(generator=JSOGGenerator.class)
|
||||||
|
@RelationshipEntity(type = "ACTED_IN")
|
||||||
|
public class Role {
|
||||||
|
@GraphId
|
||||||
|
Long id;
|
||||||
|
private Collection<String> roles;
|
||||||
|
@StartNode
|
||||||
|
private Person person;
|
||||||
|
@EndNode
|
||||||
|
private Movie movie;
|
||||||
|
|
||||||
|
public Role() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public Collection<String> getRoles() {
|
||||||
|
return roles;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Person getPerson() {
|
||||||
|
return person;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Movie getMovie() {
|
||||||
|
return movie;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setRoles(Collection<String> roles) {
|
||||||
|
this.roles = roles;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPerson(Person person) {
|
||||||
|
this.person = person;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMovie(Movie movie) {
|
||||||
|
this.movie = movie;
|
||||||
|
}
|
||||||
|
}
|
@ -1,54 +0,0 @@
|
|||||||
package com.baeldung.spring.data.neo4j.model;
|
|
||||||
|
|
||||||
import org.neo4j.graphdb.Direction;
|
|
||||||
import org.neo4j.ogm.annotation.*;
|
|
||||||
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.concurrent.atomic.AtomicLong;
|
|
||||||
|
|
||||||
@NodeEntity
|
|
||||||
public class Book {
|
|
||||||
|
|
||||||
private static final AtomicLong TS = new AtomicLong();
|
|
||||||
|
|
||||||
@GraphId
|
|
||||||
private Long id;
|
|
||||||
private String title;
|
|
||||||
private int released;
|
|
||||||
|
|
||||||
@Relationship(type="AUTHORED_BY", direction = Relationship.INCOMING)
|
|
||||||
private Person person;
|
|
||||||
|
|
||||||
public Book() {
|
|
||||||
this.id = TS.getAndIncrement();
|
|
||||||
}
|
|
||||||
|
|
||||||
public Long getId() {
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getTitle() {
|
|
||||||
return title;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setTitle(String title) {
|
|
||||||
this.title = title;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getReleased() {
|
|
||||||
return released;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setReleased(int released) {
|
|
||||||
this.released = released;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Person getPerson() {
|
|
||||||
return person;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setPerson(Person person) {
|
|
||||||
this.person = person;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,52 +0,0 @@
|
|||||||
package com.baeldung.spring.data.neo4j.model;
|
|
||||||
|
|
||||||
import org.neo4j.ogm.annotation.*;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.concurrent.atomic.AtomicLong;
|
|
||||||
|
|
||||||
@NodeEntity
|
|
||||||
public class Person {
|
|
||||||
|
|
||||||
private static final AtomicLong TS = new AtomicLong();
|
|
||||||
|
|
||||||
@GraphId
|
|
||||||
private Long id;
|
|
||||||
private String name;
|
|
||||||
private int born;
|
|
||||||
|
|
||||||
@Relationship(type = "AUTHORED_BY")
|
|
||||||
private List<Book> books;
|
|
||||||
|
|
||||||
public Person() {
|
|
||||||
this.id = TS.incrementAndGet();
|
|
||||||
}
|
|
||||||
|
|
||||||
public Long getId() {
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getName() {
|
|
||||||
return name;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setName(String name) {
|
|
||||||
this.name = name;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getBorn() {
|
|
||||||
return born;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setBorn(int born) {
|
|
||||||
this.born = born;
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<Book> getBooks() {
|
|
||||||
return books;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setBooks(List<Book> books) {
|
|
||||||
this.books = books;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,16 +0,0 @@
|
|||||||
package com.baeldung.spring.data.neo4j.repostory;
|
|
||||||
|
|
||||||
import com.baeldung.spring.data.neo4j.model.Book;
|
|
||||||
import org.springframework.data.neo4j.annotation.Query;
|
|
||||||
import org.springframework.data.neo4j.repository.GraphRepository;
|
|
||||||
import org.springframework.data.repository.query.Param;
|
|
||||||
import org.springframework.stereotype.Repository;
|
|
||||||
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
@Repository
|
|
||||||
public interface BookRepository extends GraphRepository<Book> {
|
|
||||||
|
|
||||||
}
|
|
@ -0,0 +1,25 @@
|
|||||||
|
package com.baeldung.spring.data.neo4j.repostory;
|
||||||
|
|
||||||
|
import com.baeldung.spring.data.neo4j.domain.Movie;
|
||||||
|
import org.springframework.data.neo4j.annotation.Query;
|
||||||
|
import org.springframework.data.neo4j.repository.GraphRepository;
|
||||||
|
import org.springframework.data.repository.query.Param;
|
||||||
|
import org.springframework.data.rest.core.annotation.RepositoryRestResource;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
|
||||||
|
@RepositoryRestResource(collectionResourceRel = "movies", path = "movies")
|
||||||
|
public interface MovieRepository extends GraphRepository<Movie> {
|
||||||
|
Movie findByTitle(@Param("title") String title);
|
||||||
|
|
||||||
|
@Query("MATCH (m:Movie) WHERE m.title =~ ('(?i).*'+{title}+'.*') RETURN m")
|
||||||
|
Collection<Movie> findByTitleContaining(@Param("title") String title);
|
||||||
|
|
||||||
|
@Query("MATCH (m:Movie)<-[:ACTED_IN]-(a:Person) RETURN m.title as movie, collect(a.name) as cast LIMIT {limit}")
|
||||||
|
List<Map<String,Object>> graph(@Param("limit") int limit);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
@ -0,0 +1,11 @@
|
|||||||
|
package com.baeldung.spring.data.neo4j.repostory;
|
||||||
|
|
||||||
|
import com.baeldung.spring.data.neo4j.domain.Person;
|
||||||
|
import org.springframework.data.neo4j.repository.GraphRepository;
|
||||||
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
|
|
||||||
|
@Repository
|
||||||
|
public interface PersonRepository extends GraphRepository<Person> {
|
||||||
|
|
||||||
|
}
|
@ -1,18 +0,0 @@
|
|||||||
package com.baeldung.spring.data.neo4j.service;
|
|
||||||
|
|
||||||
import com.baeldung.spring.data.neo4j.model.Book;
|
|
||||||
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
public interface BookService {
|
|
||||||
|
|
||||||
Book save(Book book);
|
|
||||||
|
|
||||||
void delete(long bookId);
|
|
||||||
|
|
||||||
long bookCount();
|
|
||||||
|
|
||||||
Book findBookById(Long id);
|
|
||||||
|
|
||||||
void deleteAllInGraph();
|
|
||||||
}
|
|
@ -1,38 +0,0 @@
|
|||||||
package com.baeldung.spring.data.neo4j.service;
|
|
||||||
|
|
||||||
|
|
||||||
import com.baeldung.spring.data.neo4j.model.Book;
|
|
||||||
import com.baeldung.spring.data.neo4j.repostory.BookRepository;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
import org.springframework.stereotype.Service;
|
|
||||||
|
|
||||||
import java.util.*;
|
|
||||||
|
|
||||||
@Service
|
|
||||||
public class BookServiceImpl implements BookService {
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private BookRepository bookRepository;
|
|
||||||
|
|
||||||
public Book save(final Book book){
|
|
||||||
return bookRepository.save(book);
|
|
||||||
}
|
|
||||||
|
|
||||||
public long bookCount(){
|
|
||||||
return bookRepository.count();
|
|
||||||
}
|
|
||||||
|
|
||||||
public Book findBookById(final Long id){
|
|
||||||
return bookRepository.findOne(id);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void delete(final long bookId){
|
|
||||||
bookRepository.delete(bookId);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void deleteAllInGraph(){
|
|
||||||
bookRepository.deleteAll();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
@ -0,0 +1,50 @@
|
|||||||
|
package com.baeldung.spring.data.neo4j.services;
|
||||||
|
|
||||||
|
import com.baeldung.spring.data.neo4j.repostory.MovieRepository;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
@Service
|
||||||
|
@Transactional
|
||||||
|
public class MovieService {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
MovieRepository movieRepository;
|
||||||
|
|
||||||
|
private Map<String, Object> toD3Format(Iterator<Map<String, Object>> result) {
|
||||||
|
List<Map<String,Object>> nodes = new ArrayList<Map<String,Object>>();
|
||||||
|
List<Map<String,Object>> rels= new ArrayList<Map<String,Object>>();
|
||||||
|
int i=0;
|
||||||
|
while (result.hasNext()) {
|
||||||
|
Map<String, Object> row = result.next();
|
||||||
|
nodes.add(map("title",row.get("movie"),"label","movie"));
|
||||||
|
int target=i;
|
||||||
|
i++;
|
||||||
|
for (Object name : (Collection) row.get("cast")) {
|
||||||
|
Map<String, Object> actor = map("title", name,"label","actor");
|
||||||
|
int source = nodes.indexOf(actor);
|
||||||
|
if (source == -1) {
|
||||||
|
nodes.add(actor);
|
||||||
|
source = i++;
|
||||||
|
}
|
||||||
|
rels.add(map("source",source,"target",target));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return map("nodes", nodes, "links", rels);
|
||||||
|
}
|
||||||
|
|
||||||
|
private Map<String, Object> map(String key1, Object value1, String key2, Object value2) {
|
||||||
|
Map<String, Object> result = new HashMap<String,Object>(2);
|
||||||
|
result.put(key1,value1);
|
||||||
|
result.put(key2,value2);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Map<String, Object> graph(int limit) {
|
||||||
|
Iterator<Map<String, Object>> result = movieRepository.graph(limit).iterator();
|
||||||
|
return toD3Format(result);
|
||||||
|
}
|
||||||
|
}
|
@ -1,79 +0,0 @@
|
|||||||
package com.baeldung.spring.data.neo4j;
|
|
||||||
|
|
||||||
import com.baeldung.spring.data.neo4j.config.LibraryNeo4jConfiguration;
|
|
||||||
import com.baeldung.spring.data.neo4j.model.Book;
|
|
||||||
import com.baeldung.spring.data.neo4j.model.Person;
|
|
||||||
import com.baeldung.spring.data.neo4j.service.BookService;
|
|
||||||
import org.junit.Test;
|
|
||||||
import org.junit.runner.RunWith;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
import org.springframework.test.context.ContextConfiguration;
|
|
||||||
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
|
||||||
|
|
||||||
import static org.junit.Assert.assertEquals;
|
|
||||||
import static org.junit.Assert.assertNull;
|
|
||||||
|
|
||||||
@RunWith(SpringJUnit4ClassRunner.class)
|
|
||||||
@ContextConfiguration(classes = LibraryNeo4jConfiguration.class)
|
|
||||||
public class BookServiceTest {
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private BookService bookServiceImpl;
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testSavingBook() {
|
|
||||||
final Person author1 = new Person();
|
|
||||||
author1.setName("Mark Twain");
|
|
||||||
author1.setBorn(1835);
|
|
||||||
final Book book = new Book();
|
|
||||||
book.setTitle("The Adventures of Tom Sawyer");
|
|
||||||
book.setReleased(1876);
|
|
||||||
book.setPerson(author1);
|
|
||||||
|
|
||||||
final Book savedBook = bookServiceImpl.save(book);
|
|
||||||
assertEquals(book.getTitle(), savedBook.getTitle());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testFindingTheSavedBook() {
|
|
||||||
final Person author1 = new Person();
|
|
||||||
author1.setName("Edgar Allan Poe");
|
|
||||||
author1.setBorn(1809);
|
|
||||||
final Book book = new Book();
|
|
||||||
book.setTitle("The Cask of Amontillado");
|
|
||||||
book.setReleased(1846);
|
|
||||||
book.setPerson(author1);
|
|
||||||
|
|
||||||
bookServiceImpl.save(book);
|
|
||||||
final Book retrievedBook = bookServiceImpl.findBookById(book.getId());
|
|
||||||
assertEquals(book.getTitle(), retrievedBook.getTitle());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testCountTheSavedBooks() {
|
|
||||||
long bookCount = bookServiceImpl.bookCount();
|
|
||||||
assertEquals(bookCount, 2);
|
|
||||||
}
|
|
||||||
@Test
|
|
||||||
public void testDeletingASavedBook() {
|
|
||||||
final Person author1 = new Person();
|
|
||||||
author1.setName("Rider Haggard");
|
|
||||||
author1.setBorn(1856);
|
|
||||||
final Book book = new Book();
|
|
||||||
book.setTitle("King Solomon's Mines");
|
|
||||||
book.setReleased(1885);
|
|
||||||
book.setPerson(author1);
|
|
||||||
|
|
||||||
final Book savedBook = bookServiceImpl.save(book);
|
|
||||||
bookServiceImpl.delete(savedBook.getId());
|
|
||||||
final Book retrievedBook = bookServiceImpl.findBookById(book.getId());
|
|
||||||
assertNull(retrievedBook);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testDeleteAllSavedBook() {
|
|
||||||
bookServiceImpl.deleteAllInGraph();
|
|
||||||
final long bookCount = bookServiceImpl.bookCount();
|
|
||||||
assertEquals(bookCount, 0);
|
|
||||||
}
|
|
||||||
}
|
|
@ -0,0 +1,131 @@
|
|||||||
|
package com.baeldung.spring.data.neo4j;
|
||||||
|
|
||||||
|
import com.baeldung.spring.data.neo4j.config.MovieDatabaseNeo4jTestConfiguration;
|
||||||
|
import com.baeldung.spring.data.neo4j.domain.Movie;
|
||||||
|
import com.baeldung.spring.data.neo4j.domain.Person;
|
||||||
|
import com.baeldung.spring.data.neo4j.domain.Role;
|
||||||
|
import com.baeldung.spring.data.neo4j.repostory.MovieRepository;
|
||||||
|
import com.baeldung.spring.data.neo4j.repostory.PersonRepository;
|
||||||
|
import org.junit.Before;
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.junit.runner.RunWith;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.test.annotation.DirtiesContext;
|
||||||
|
import org.springframework.test.context.ActiveProfiles;
|
||||||
|
import org.springframework.test.context.ContextConfiguration;
|
||||||
|
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
import static junit.framework.TestCase.assertNull;
|
||||||
|
import static org.junit.Assert.assertEquals;
|
||||||
|
import static org.junit.Assert.assertNotNull;
|
||||||
|
|
||||||
|
@RunWith(SpringJUnit4ClassRunner.class)
|
||||||
|
@ContextConfiguration(classes = MovieDatabaseNeo4jTestConfiguration.class)
|
||||||
|
@ActiveProfiles(profiles = "test")
|
||||||
|
public class MovieRepositoryTest {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private MovieRepository instance;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private PersonRepository personRepository;
|
||||||
|
|
||||||
|
public MovieRepositoryTest() {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Before
|
||||||
|
public void initializeDatabase() {
|
||||||
|
System.out.println("seeding embedded database");
|
||||||
|
Movie matrix = new Movie();
|
||||||
|
matrix.setTitle("The Italian Job");
|
||||||
|
matrix.setReleased(1999);
|
||||||
|
instance.save(matrix);
|
||||||
|
|
||||||
|
Person mark = new Person();
|
||||||
|
mark.setName("Mark Wahlberg");
|
||||||
|
personRepository.save(mark);
|
||||||
|
|
||||||
|
Role neo = new Role();
|
||||||
|
neo.setMovie(matrix);
|
||||||
|
neo.setPerson(mark);
|
||||||
|
Collection<String> roleNames = new HashSet();
|
||||||
|
roleNames.add("Charlie Croker");
|
||||||
|
neo.setRoles(roleNames);
|
||||||
|
List<Role> roles = new ArrayList();
|
||||||
|
roles.add(neo);
|
||||||
|
matrix.setRoles(roles);
|
||||||
|
instance.save(matrix);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@DirtiesContext
|
||||||
|
public void testFindByTitle() {
|
||||||
|
System.out.println("findByTitle");
|
||||||
|
String title = "The Italian Job";
|
||||||
|
Movie result = instance.findByTitle(title);
|
||||||
|
assertNotNull(result);
|
||||||
|
assertEquals(1999, result.getReleased());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@DirtiesContext
|
||||||
|
public void testCount() {
|
||||||
|
System.out.println("count");
|
||||||
|
long result = instance.count();
|
||||||
|
assertNotNull(result);
|
||||||
|
assertEquals(1, result);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@DirtiesContext
|
||||||
|
public void testFindAll() {
|
||||||
|
System.out.println("findAll");
|
||||||
|
Collection<Movie> result = (Collection<Movie>) instance.findAll();
|
||||||
|
assertNotNull(result);
|
||||||
|
assertEquals(1, result.size());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@DirtiesContext
|
||||||
|
public void testFindByTitleContaining() {
|
||||||
|
System.out.println("findByTitleContaining");
|
||||||
|
String title = "Italian";
|
||||||
|
Collection<Movie> result = instance.findByTitleContaining(title);
|
||||||
|
assertNotNull(result);
|
||||||
|
assertEquals(1,result.size());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@DirtiesContext
|
||||||
|
public void testGraph() {
|
||||||
|
System.out.println("graph");
|
||||||
|
List<Map<String,Object>> graph = instance.graph(5);
|
||||||
|
assertEquals(1,graph.size());
|
||||||
|
Map<String,Object> map = graph.get(0);
|
||||||
|
assertEquals(2,map.size());
|
||||||
|
String[] cast = (String[])map.get("cast");
|
||||||
|
String movie = (String)map.get("movie");
|
||||||
|
assertEquals("The Italian Job",movie);
|
||||||
|
assertEquals("Mark Wahlberg", cast[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@DirtiesContext
|
||||||
|
public void testDeleteMovie() {
|
||||||
|
System.out.println("deleteMovie");
|
||||||
|
instance.delete(
|
||||||
|
instance.findByTitle("The Italian Job"));
|
||||||
|
assertNull(instance.findByTitle("The Italian Job"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@DirtiesContext
|
||||||
|
public void testDeleteAll() {
|
||||||
|
System.out.println("deleteAll");
|
||||||
|
instance.deleteAll();
|
||||||
|
Collection<Movie> result = (Collection<Movie>) instance.findAll();
|
||||||
|
assertEquals(0,result.size());
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user