From 20dc7ad9d993254d6a08bc4cacc89a0ef96e8bd3 Mon Sep 17 00:00:00 2001 From: Michael Hunger Date: Sat, 5 Nov 2011 07:09:27 +0100 Subject: [PATCH] added cineasts spring-data-mapping project --- pom.xml | 1 + spring-data-neo4j-examples/cineasts/Readme.md | 16 + spring-data-neo4j-examples/cineasts/pom.xml | 364 +++++++++ .../cineasts/controller/AuthController.java | 63 ++ .../cineasts/controller/ImportController.java | 64 ++ .../cineasts/controller/MovieController.java | 132 ++++ .../cineasts/controller/UserController.java | 64 ++ .../java/org/neo4j/cineasts/domain/Movie.java | 228 ++++++ .../cineasts/domain/MovieRecommendation.java | 17 + .../org/neo4j/cineasts/domain/Person.java | 126 ++++ .../org/neo4j/cineasts/domain/Rating.java | 52 ++ .../java/org/neo4j/cineasts/domain/Role.java | 38 + .../java/org/neo4j/cineasts/domain/Roles.java | 9 + .../java/org/neo4j/cineasts/domain/User.java | 117 +++ .../movieimport/MovieDbApiClient.java | 46 ++ .../movieimport/MovieDbException.java | 14 + .../movieimport/MovieDbImportService.java | 132 ++++ .../movieimport/MovieDbJsonMapper.java | 704 ++++++++++++++++++ .../movieimport/MovieDbLocalStorage.java | 95 +++ .../cineasts/movieimport/MovieImporter.java | 50 ++ .../cineasts/repository/MovieRepository.java | 31 + .../cineasts/repository/PersonRepository.java | 12 + .../cineasts/repository/UserRepository.java | 11 + .../cineasts/service/CineastsRepository.java | 19 + .../cineasts/service/CineastsUserDetails.java | 62 ++ .../service/CineastsUserDetailsService.java | 77 ++ .../cineasts/service/DatabasePopulator.java | 55 ++ .../service/FriendsMovieRecommendations.java | 74 ++ .../service/MovieRecommendations.java | 82 ++ .../service/Neo4jDatabaseCleaner.java | 67 ++ .../src/main/resources/log4j.properties | 7 + .../WEB-INF/applicatioContext-security.xml | 32 + .../webapp/WEB-INF/applicationContext.xml | 35 + .../src/main/webapp/WEB-INF/decorators.xml | 8 + .../WEB-INF/dispatcherServlet-servlet.xml | 28 + .../main/webapp/WEB-INF/views/actors/show.jsp | 36 + .../webapp/WEB-INF/views/auth/deniedpage.jsp | 7 + .../webapp/WEB-INF/views/auth/loginpage.jsp | 36 + .../WEB-INF/views/auth/registerpage.jsp | 37 + .../WEB-INF/views/decorators/frontpage.jsp | 30 + .../webapp/WEB-INF/views/decorators/main.jsp | 31 + .../webapp/WEB-INF/views/import/result.jsp | 15 + .../webapp/WEB-INF/views/includes/footer.jsp | 5 + .../views/includes/header-frontpage.jsp | 3 + .../webapp/WEB-INF/views/includes/header.jsp | 3 + .../WEB-INF/views/includes/header_login.jsp | 24 + .../main/webapp/WEB-INF/views/includes/js.jsp | 0 .../webapp/WEB-INF/views/includes/links.jsp | 0 .../WEB-INF/views/includes/navigation.jsp | 15 + .../webapp/WEB-INF/views/includes/search.jsp | 5 + .../webapp/WEB-INF/views/includes/style.jsp | 4 + .../src/main/webapp/WEB-INF/views/index.jsp | 11 + .../main/webapp/WEB-INF/views/movies/list.jsp | 26 + .../main/webapp/WEB-INF/views/movies/show.jsp | 170 +++++ .../main/webapp/WEB-INF/views/user/index.jsp | 104 +++ .../main/webapp/WEB-INF/views/user/public.jsp | 86 +++ .../cineasts/src/main/webapp/WEB-INF/web.xml | 58 ++ .../webapp/images/actor-picture-frame.png | Bin 0 -> 33009 bytes .../src/main/webapp/images/cineasts.png | Bin 0 -> 30853 bytes .../webapp/images/filmroll-horizontal.png | Bin 0 -> 538 bytes .../webapp/images/filmroll-vertical-full.png | Bin 0 -> 4375 bytes .../src/main/webapp/images/header-curtain.png | Bin 0 -> 1023 bytes .../main/webapp/images/header-splash-bg.png | Bin 0 -> 588 bytes .../src/main/webapp/images/logo-splash.png | Bin 0 -> 169388 bytes .../cineasts/src/main/webapp/images/logo.png | Bin 0 -> 9129 bytes .../src/main/webapp/images/logo/neo4j.png | Bin 0 -> 12651 bytes .../main/webapp/images/logo/springdata.jpg | Bin 0 -> 5022 bytes .../webapp/images/logo/springdatagraph.png | Bin 0 -> 11018 bytes .../main/webapp/images/logo/springsource.png | Bin 0 -> 6522 bytes .../main/webapp/images/movie-placeholder.png | Bin 0 -> 12141 bytes .../cineasts/src/main/webapp/images/neo4j.png | Bin 0 -> 12568 bytes .../images/profile-placeholder-small.png | Bin 0 -> 3688 bytes .../webapp/images/profile-placeholder.png | Bin 0 -> 3628 bytes .../src/main/webapp/images/rated_0.png | Bin 0 -> 214 bytes .../src/main/webapp/images/rated_1.png | Bin 0 -> 1234 bytes .../src/main/webapp/images/rated_2.png | Bin 0 -> 1331 bytes .../src/main/webapp/images/rated_3.png | Bin 0 -> 1336 bytes .../src/main/webapp/images/rated_4.png | Bin 0 -> 1275 bytes .../src/main/webapp/images/rated_5.png | Bin 0 -> 1224 bytes .../src/main/webapp/images/rating-active.png | Bin 0 -> 1343 bytes .../main/webapp/images/rating-disabled.png | Bin 0 -> 3489 bytes .../images/searchbar-big-searchicon.png | Bin 0 -> 1495 bytes .../src/main/webapp/images/searchbar-big.png | Bin 0 -> 1101 bytes .../src/main/webapp/images/springdata.jpg | Bin 0 -> 8569 bytes .../main/webapp/images/springdatagraph.png | Bin 0 -> 53140 bytes .../src/main/webapp/images/springsource.png | Bin 0 -> 6793 bytes .../cineasts/src/main/webapp/images/star.png | Bin 0 -> 4769 bytes .../src/main/webapp/resources/forms.css | 13 + .../src/main/webapp/resources/grid.css | 18 + .../src/main/webapp/resources/style.css | 328 ++++++++ .../src/main/webapp/resources/typography.css | 32 + .../org/neo4j/cineasts/domain/DomainTest.java | 82 ++ .../movieimport/MovieDbApiClientTest.java | 28 + .../movieimport/MovieDbImportServiceTest.java | 51 ++ .../movieimport/MovieDbLocalStorageTest.java | 76 ++ .../service/MoviesRepositoryTest.java | 88 +++ .../test/resources/movies-test-context.xml | 27 + 97 files changed, 4381 insertions(+) create mode 100644 spring-data-neo4j-examples/cineasts/Readme.md create mode 100644 spring-data-neo4j-examples/cineasts/pom.xml create mode 100644 spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/controller/AuthController.java create mode 100644 spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/controller/ImportController.java create mode 100644 spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/controller/MovieController.java create mode 100644 spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/controller/UserController.java create mode 100644 spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/domain/Movie.java create mode 100644 spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/domain/MovieRecommendation.java create mode 100644 spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/domain/Person.java create mode 100644 spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/domain/Rating.java create mode 100644 spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/domain/Role.java create mode 100644 spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/domain/Roles.java create mode 100644 spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/domain/User.java create mode 100644 spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/movieimport/MovieDbApiClient.java create mode 100644 spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/movieimport/MovieDbException.java create mode 100644 spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/movieimport/MovieDbImportService.java create mode 100644 spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/movieimport/MovieDbJsonMapper.java create mode 100644 spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/movieimport/MovieDbLocalStorage.java create mode 100644 spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/movieimport/MovieImporter.java create mode 100644 spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/repository/MovieRepository.java create mode 100644 spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/repository/PersonRepository.java create mode 100644 spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/repository/UserRepository.java create mode 100644 spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/service/CineastsRepository.java create mode 100644 spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/service/CineastsUserDetails.java create mode 100644 spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/service/CineastsUserDetailsService.java create mode 100644 spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/service/DatabasePopulator.java create mode 100644 spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/service/FriendsMovieRecommendations.java create mode 100644 spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/service/MovieRecommendations.java create mode 100644 spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/service/Neo4jDatabaseCleaner.java create mode 100644 spring-data-neo4j-examples/cineasts/src/main/resources/log4j.properties create mode 100644 spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/applicatioContext-security.xml create mode 100644 spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/applicationContext.xml create mode 100644 spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/decorators.xml create mode 100644 spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/dispatcherServlet-servlet.xml create mode 100644 spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/views/actors/show.jsp create mode 100644 spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/views/auth/deniedpage.jsp create mode 100644 spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/views/auth/loginpage.jsp create mode 100644 spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/views/auth/registerpage.jsp create mode 100644 spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/views/decorators/frontpage.jsp create mode 100644 spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/views/decorators/main.jsp create mode 100644 spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/views/import/result.jsp create mode 100644 spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/views/includes/footer.jsp create mode 100644 spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/views/includes/header-frontpage.jsp create mode 100644 spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/views/includes/header.jsp create mode 100644 spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/views/includes/header_login.jsp create mode 100644 spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/views/includes/js.jsp create mode 100644 spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/views/includes/links.jsp create mode 100644 spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/views/includes/navigation.jsp create mode 100644 spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/views/includes/search.jsp create mode 100644 spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/views/includes/style.jsp create mode 100644 spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/views/index.jsp create mode 100644 spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/views/movies/list.jsp create mode 100644 spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/views/movies/show.jsp create mode 100644 spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/views/user/index.jsp create mode 100644 spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/views/user/public.jsp create mode 100644 spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/web.xml create mode 100644 spring-data-neo4j-examples/cineasts/src/main/webapp/images/actor-picture-frame.png create mode 100644 spring-data-neo4j-examples/cineasts/src/main/webapp/images/cineasts.png create mode 100644 spring-data-neo4j-examples/cineasts/src/main/webapp/images/filmroll-horizontal.png create mode 100644 spring-data-neo4j-examples/cineasts/src/main/webapp/images/filmroll-vertical-full.png create mode 100644 spring-data-neo4j-examples/cineasts/src/main/webapp/images/header-curtain.png create mode 100644 spring-data-neo4j-examples/cineasts/src/main/webapp/images/header-splash-bg.png create mode 100644 spring-data-neo4j-examples/cineasts/src/main/webapp/images/logo-splash.png create mode 100644 spring-data-neo4j-examples/cineasts/src/main/webapp/images/logo.png create mode 100644 spring-data-neo4j-examples/cineasts/src/main/webapp/images/logo/neo4j.png create mode 100644 spring-data-neo4j-examples/cineasts/src/main/webapp/images/logo/springdata.jpg create mode 100644 spring-data-neo4j-examples/cineasts/src/main/webapp/images/logo/springdatagraph.png create mode 100644 spring-data-neo4j-examples/cineasts/src/main/webapp/images/logo/springsource.png create mode 100644 spring-data-neo4j-examples/cineasts/src/main/webapp/images/movie-placeholder.png create mode 100644 spring-data-neo4j-examples/cineasts/src/main/webapp/images/neo4j.png create mode 100644 spring-data-neo4j-examples/cineasts/src/main/webapp/images/profile-placeholder-small.png create mode 100644 spring-data-neo4j-examples/cineasts/src/main/webapp/images/profile-placeholder.png create mode 100644 spring-data-neo4j-examples/cineasts/src/main/webapp/images/rated_0.png create mode 100644 spring-data-neo4j-examples/cineasts/src/main/webapp/images/rated_1.png create mode 100644 spring-data-neo4j-examples/cineasts/src/main/webapp/images/rated_2.png create mode 100644 spring-data-neo4j-examples/cineasts/src/main/webapp/images/rated_3.png create mode 100644 spring-data-neo4j-examples/cineasts/src/main/webapp/images/rated_4.png create mode 100644 spring-data-neo4j-examples/cineasts/src/main/webapp/images/rated_5.png create mode 100644 spring-data-neo4j-examples/cineasts/src/main/webapp/images/rating-active.png create mode 100644 spring-data-neo4j-examples/cineasts/src/main/webapp/images/rating-disabled.png create mode 100644 spring-data-neo4j-examples/cineasts/src/main/webapp/images/searchbar-big-searchicon.png create mode 100644 spring-data-neo4j-examples/cineasts/src/main/webapp/images/searchbar-big.png create mode 100644 spring-data-neo4j-examples/cineasts/src/main/webapp/images/springdata.jpg create mode 100644 spring-data-neo4j-examples/cineasts/src/main/webapp/images/springdatagraph.png create mode 100644 spring-data-neo4j-examples/cineasts/src/main/webapp/images/springsource.png create mode 100644 spring-data-neo4j-examples/cineasts/src/main/webapp/images/star.png create mode 100644 spring-data-neo4j-examples/cineasts/src/main/webapp/resources/forms.css create mode 100644 spring-data-neo4j-examples/cineasts/src/main/webapp/resources/grid.css create mode 100644 spring-data-neo4j-examples/cineasts/src/main/webapp/resources/style.css create mode 100644 spring-data-neo4j-examples/cineasts/src/main/webapp/resources/typography.css create mode 100644 spring-data-neo4j-examples/cineasts/src/test/java/org/neo4j/cineasts/domain/DomainTest.java create mode 100644 spring-data-neo4j-examples/cineasts/src/test/java/org/neo4j/cineasts/movieimport/MovieDbApiClientTest.java create mode 100644 spring-data-neo4j-examples/cineasts/src/test/java/org/neo4j/cineasts/movieimport/MovieDbImportServiceTest.java create mode 100644 spring-data-neo4j-examples/cineasts/src/test/java/org/neo4j/cineasts/movieimport/MovieDbLocalStorageTest.java create mode 100644 spring-data-neo4j-examples/cineasts/src/test/java/org/neo4j/cineasts/service/MoviesRepositoryTest.java create mode 100644 spring-data-neo4j-examples/cineasts/src/test/resources/movies-test-context.xml diff --git a/pom.xml b/pom.xml index b1a220d91..fc75050bd 100644 --- a/pom.xml +++ b/pom.xml @@ -157,6 +157,7 @@ spring-data-neo4j-examples/hello-worlds spring-data-neo4j-examples/imdb spring-data-neo4j-examples/cineasts + spring-data-neo4j-examples/cineasts-aspects spring-data-neo4j-examples/cineasts-rest spring-data-neo4j-examples/myrestaurants-social diff --git a/spring-data-neo4j-examples/cineasts/Readme.md b/spring-data-neo4j-examples/cineasts/Readme.md new file mode 100644 index 000000000..4913adb66 --- /dev/null +++ b/spring-data-neo4j-examples/cineasts/Readme.md @@ -0,0 +1,16 @@ +![Cineasts.net Logo](https://github.com/jexp/cineasts/raw/master/cineasts.png) +Cineasts.net +============ + +This project is the demo/tutorial application for the [Spring Data Graph](http://github.com/springsource/spring-data-graph) library which provides convenient access to the [Neo4j](http://neo4j.org) graph database. + +This tutorial creates a complete web application built on top of Spring Data Graph. + +It uses a domain that should be familiar to most - movies. So for cineasts.net we decided to add a social +touch to the whole movie rating business, allowing friends to share their ratings and get recommendations +for new friends and movies. + +The tutorial is presented as a colloquial description of the steps necessary to create the application. +It provides the configuration and code examples that are needed to understand what's happening. + +The complete tutorial is contained in this projects [github wiki](https://github.com/jexp/cineasts/wiki). \ No newline at end of file diff --git a/spring-data-neo4j-examples/cineasts/pom.xml b/spring-data-neo4j-examples/cineasts/pom.xml new file mode 100644 index 000000000..c3b54477b --- /dev/null +++ b/spring-data-neo4j-examples/cineasts/pom.xml @@ -0,0 +1,364 @@ + + 4.0.0 + + org.neo4j.examples + cineasts + 2.0-SNAPSHOT + war + + Movies + + + UTF-8 + 3.0.6.RELEASE + 1.6.1 + UTF-8 + 1.5.M02 + 2.0.0.BUILD-SNAPSHOT + 1.6.12.M1 + 1.6.1 + + + + + spring-maven-release + Spring Maven Release Repository + http://maven.springframework.org/release + + + spring-maven-snapshot + Spring Maven Snapshot Repository + + true + + http://maven.springframework.org/snapshot + + + spring-maven-milestone + Spring Maven Milestone Repository + http://maven.springframework.org/milestone + + + neo4j-release-repository + Neo4j Maven 2 release repository + http://m2.neo4j.org/releases + + true + + + false + + + + neo4j-snapshot-repository + Neo4j Maven 2 snapshot repository + http://m2.neo4j.org/snapshots + + true + + + false + + + + jboss-public-repo + http://repository.jboss.org/maven2/ + JBoss public available repo + + + + + + spring-maven-release + Spring Maven Release Repository + http://maven.springframework.org/release + + + spring-maven-milestone + Spring Maven Milestone Repository + http://maven.springframework.org/milestone + + + + + + + org.springframework + spring-core + ${spring.version} + + + commons-logging + commons-logging + + + + + org.springframework + spring-test + ${spring.version} + test + + + commons-logging + commons-logging + + + + + + org.springframework + spring-context + ${spring.version} + + + org.springframework + spring-aop + ${spring.version} + + + org.springframework + spring-aspects + ${spring.version} + + + org.springframework + spring-tx + ${spring.version} + + + + org.springframework + spring-webmvc + ${spring.version} + + + commons-logging + commons-logging + + + + + + org.springframework.security + spring-security-web + ${spring.version} + + + org.springframework.security + spring-security-config + ${spring.version} + + + + org.slf4j + slf4j-api + ${org.slf4j-version} + + + org.slf4j + jcl-over-slf4j + ${org.slf4j-version} + + + org.slf4j + slf4j-log4j12 + ${org.slf4j-version} + runtime + + + log4j + log4j + 1.2.16 + runtime + + + + org.springframework.data + spring-data-neo4j-aspects + ${spring-data-graph.version} + + + org.hibernate.javax.persistence + hibernate-jpa-2.0-api + + + + + + opensymphony + sitemesh + 2.4.2 + + + + org.hibernate + hibernate-validator + 4.0.2.GA + + + + javax.servlet + servlet-api + 2.5 + provided + + + javax.servlet.jsp + jsp-api + 2.1 + provided + + + javax.servlet + jstl + 1.2 + + + + org.codehaus.jackson + jackson-mapper-asl + 1.7.2 + + + + org.aspectj + aspectjrt + ${aspectj.version} + + + + cglib + cglib-nodep + 2.2 + + + + org.hibernate.javax.persistence + hibernate-jpa-2.0-api + 1.0.0.Final + + + + + + org.neo4j + neo4j-kernel + ${neo4j.version} + test-jar + test + + + org.neo4j + neo4j-cypher + ${neo4j.version} + + + + junit + junit + 4.8.1 + test + + + + + + org.mortbay.jetty + jetty-maven-plugin + 7.1.2.v20100523 + + + / + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 2.1 + + 1.6 + 1.6 + + + + org.apache.maven.plugins + maven-surefire-plugin + + true + + **/*Tests.java + **/*Test.java + + + **/Abstract*.java + + junit:junit + + + + + org.apache.maven.plugins + maven-eclipse-plugin + 2.8 + + + 1.5 + + org.eclipse.ajdt.ui.ajnature + org.eclipse.jdt.core.javanature + org.springframework.ide.eclipse.core.springnature + + + + + + org.codehaus.mojo + aspectj-maven-plugin + 1.2 + + + org.aspectj + aspectjrt + ${aspectj.version} + + + org.aspectj + aspectjtools + ${aspectj.version} + + + + + + compile + test-compile + + + + + true + + + org.springframework + spring-aspects + + + org.springframework.data + spring-data-neo4j-aspects + + + 1.6 + 1.6 + + + + + + diff --git a/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/controller/AuthController.java b/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/controller/AuthController.java new file mode 100644 index 000000000..48d7d7c4d --- /dev/null +++ b/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/controller/AuthController.java @@ -0,0 +1,63 @@ +package org.neo4j.cineasts.controller; + + +import org.neo4j.cineasts.service.CineastsUserDetailsService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; + +/** + * Handles and retrieves the login or denied page depending on the URI template + */ +@Controller +@RequestMapping("/auth") +public class AuthController { + + private final static Logger logger = LoggerFactory.getLogger(AuthController.class); + + @Autowired + CineastsUserDetailsService userDetailsService; + @RequestMapping(value = "/login", method = RequestMethod.GET) + public String login(@RequestParam(value = "login_error", required = false) boolean error, Model model) { + logger.debug("Received request to show login page, error "+error); + if (error) { + model.addAttribute("error", "You have entered an invalid username or password!"); + } + return "/auth/loginpage"; + } + + @RequestMapping(value = "/register", method = RequestMethod.POST) + public String register( + @RequestParam(value = "j_username") String login, + @RequestParam(value = "j_displayname") String name, + @RequestParam(value = "j_password") String password, + Model model) { + + try { + userDetailsService.register(login,name,password); + return "forward:/user/"+login; + } catch(Exception e) { + model.addAttribute("j_username",login); + model.addAttribute("j_displayname",name); + model.addAttribute("error",e.getMessage()); + return "/auth/registerpage"; + } + } + + @RequestMapping(value = "/denied", method = RequestMethod.GET) + public String denied() { + logger.debug("Received request to show denied page"); + return "/auth/deniedpage"; + } + + @RequestMapping(value = "/registerpage", method = RequestMethod.GET) + public String registerPage() { + logger.debug("Received request to show register page"); + return "/auth/registerpage"; + } +} \ No newline at end of file diff --git a/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/controller/ImportController.java b/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/controller/ImportController.java new file mode 100644 index 000000000..61aa74861 --- /dev/null +++ b/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/controller/ImportController.java @@ -0,0 +1,64 @@ +package org.neo4j.cineasts.controller; + +import org.neo4j.cineasts.movieimport.MovieDbImportService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; + +import java.util.LinkedHashMap; +import java.util.Map; + +/** + * @author mh + * @since 04.03.11 + */ +@Controller +public class ImportController { + + private MovieDbImportService importService; + private static final Logger log = LoggerFactory.getLogger(ImportController.class); + + @Autowired + public ImportController(MovieDbImportService importService) { + this.importService = importService; + } + + @RequestMapping(value = "/import/{ids}", method = RequestMethod.GET) + public String importMovie(@PathVariable String ids, Model model) { + long start=System.currentTimeMillis(); + final Map movies = importService.importMovies(extractRanges(ids)); + long duration = (System.currentTimeMillis() - start) / 1000; + model.addAttribute("duration", duration); + model.addAttribute("ids", ids); + model.addAttribute("movies", movies.entrySet()); + return "import/result"; + } + + + private Map extractRanges(String ids) { + Map ranges = new LinkedHashMap(); + StringBuilder errors = new StringBuilder(); + for (String token : ids.split(",")) { + try { + if (token.contains("-")) { + String[] range = token.split("-"); + ranges.put(Integer.parseInt(range[0]), Integer.parseInt(range[1])); + } else { + int id = Integer.parseInt(token); + ranges.put(id, id); + } + } catch (Exception e) { + errors.append(token).append(": ").append(e.getMessage()).append("\n"); + } + } + if (errors.length() > 0) { + throw new RuntimeException("Error parsing ids\n" + errors); + } + return ranges; + } +} diff --git a/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/controller/MovieController.java b/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/controller/MovieController.java new file mode 100644 index 000000000..ddfa15478 --- /dev/null +++ b/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/controller/MovieController.java @@ -0,0 +1,132 @@ +package org.neo4j.cineasts.controller; + +import org.neo4j.cineasts.domain.Movie; +import org.neo4j.cineasts.domain.Person; +import org.neo4j.cineasts.domain.Rating; +import org.neo4j.cineasts.domain.User; +import org.neo4j.cineasts.repository.MovieRepository; +import org.neo4j.cineasts.repository.PersonRepository; +import org.neo4j.cineasts.service.CineastsRepository; +import org.neo4j.cineasts.service.CineastsUserDetailsService; +import org.neo4j.cineasts.service.DatabasePopulator; +import org.neo4j.helpers.collection.IteratorUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.*; + +import java.util.Collection; +import java.util.Collections; + +/** + * @author mh + * @since 04.03.11 + */ +@Controller +public class MovieController { + + @Autowired + private MovieRepository movieRepository; + @Autowired + private PersonRepository personRepository; + @Autowired + private CineastsUserDetailsService userDetailsService; + @Autowired + private DatabasePopulator populator; + private static final Logger log = LoggerFactory.getLogger(MovieController.class); + + /** + * Only matches 'GET /moviies/{id}}' requests for JSON content; a 404 is sent otherwise. + * TODO send a 406 if an unsupported representation, such as XML, is requested. See SPR-7353. + */ + @RequestMapping(value = "/movies/{id}", method = RequestMethod.GET, headers = "Accept=application/json") + public + @ResponseBody + Movie getMovie(@PathVariable String id) { + return movieRepository.findById(id); + } + + + @RequestMapping(value = "/movies/{movieId}", method = RequestMethod.GET, headers = "Accept=text/html") + public String singleMovieView(final Model model, @PathVariable String movieId) { + User user = addUser(model); + Movie movie = movieRepository.findById(movieId); + model.addAttribute("id", movieId); + if (movie != null) { + model.addAttribute("movie", movie); + final int stars = movie.getStars(); + model.addAttribute("stars", stars); + Rating rating = null; + if (user!=null) rating = movie.getRelationshipTo(user, Rating.class, "RATED"); + if (rating == null) rating = new Rating().rate(stars,null); + model.addAttribute("userRating",rating); + } + return "/movies/show"; + } + + @RequestMapping(value = "/movies/{movieId}", method = RequestMethod.POST, headers = "Accept=text/html") + public String updateMovie(Model model, @PathVariable String movieId, @RequestParam(value = "rated",required = false) Integer stars, @RequestParam(value = "comment",required = false) String comment) { + Movie movie = movieRepository.findById(movieId); + User user = userDetailsService.getUserFromSession(); + if (user != null && movie != null) { + int stars1 = stars==null ? -1 : stars; + String comment1 = comment!=null ? comment.trim() : null; + user.rate(movie, stars1, comment1); + } + return singleMovieView(model,movieId); + } + + private User addUser(Model model) { + User user = userDetailsService.getUserFromSession(); + model.addAttribute("user", user); + return user; + } + + @RequestMapping(value = "/movies", method = RequestMethod.GET, headers = "Accept=text/html") + public String findMovies(Model model, @RequestParam("q") String query) { + if (query!=null && !query.isEmpty()) { + Page movies = movieRepository.findByTitleLike(query, new PageRequest(0, 20)); + model.addAttribute("movies", movies.getContent()); + } else { + model.addAttribute("movies", Collections.emptyList()); + } + model.addAttribute("query", query); + addUser(model); + return "/movies/list"; + } + + @RequestMapping(value = "/actors/{id}", method = RequestMethod.GET, headers = "Accept=text/html") + public String singleActorView(Model model, @PathVariable String id) { + Person person = personRepository.findById(id); + model.addAttribute("actor", person); + model.addAttribute("id", id); + model.addAttribute("roles", IteratorUtil.asCollection(person.getRoles())); + addUser(model); + return "/actors/show"; + } + + //@RequestMapping(value = "/admin/populate", method = RequestMethod.GET) + @RequestMapping(value = "/populate", method = RequestMethod.GET) + public String populateDatabase(Model model) { + Collection movies=populator.populateDatabase(); + model.addAttribute("movies",movies); + addUser(model); + return "/movies/list"; + } + + @RequestMapping(value = "/admin/clean", method = RequestMethod.GET) + public String clean(Model model) { + populator.cleanDb(); + return "movies/list"; + } + + @RequestMapping(value = "/", method = RequestMethod.GET) + public String index(Model model) { + addUser(model); + return "index"; + } +} diff --git a/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/controller/UserController.java b/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/controller/UserController.java new file mode 100644 index 000000000..05bb133c6 --- /dev/null +++ b/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/controller/UserController.java @@ -0,0 +1,64 @@ +package org.neo4j.cineasts.controller; + + +import org.neo4j.cineasts.domain.User; +import org.neo4j.cineasts.repository.MovieRepository; +import org.neo4j.cineasts.service.CineastsUserDetailsService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; + +/** + * Handles and retrieves the login or denied page depending on the URI template + */ +@Controller +public class UserController { + + @Autowired CineastsUserDetailsService userDetailsService; + @Autowired + MovieRepository movieRepository; + + private final static Logger logger = LoggerFactory.getLogger(UserController.class); + + @RequestMapping(value = "/user", method = RequestMethod.GET) + public String profile(Model model) { + final User user = userDetailsService.getUserFromSession(); + model.addAttribute("user", user); + if (user!=null) { + model.addAttribute("recommendations", movieRepository.getRecommendations(user)); + } + return "/user/index"; + } + + @RequestMapping(value = "/user/{login}/friends", method = RequestMethod.POST) + public String addFriend(Model model, @PathVariable("login") String login) { + userDetailsService.addFriend(login); + return "forward:/user/"+login; + } + + @RequestMapping(value = "/user/{login}") + public String publicProfile(Model model, @PathVariable("login") String login) { + User profiled = userDetailsService.findUser(login); + User user = userDetailsService.getUserFromSession(); + + return publicProfile(model, profiled, user); + } + + private String publicProfile(Model model, User profiled, User user) { + if (profiled.equals(user)) return profile(model); + + model.addAttribute("profiled", profiled); + model.addAttribute("user", user); + model.addAttribute("isFriend", areFriends(profiled, user)); + return "/user/public"; + } + + private boolean areFriends(User user, User loggedIn) { + return user!=null && user.isFriend(loggedIn); + } +} \ No newline at end of file diff --git a/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/domain/Movie.java b/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/domain/Movie.java new file mode 100644 index 000000000..fdad46ad6 --- /dev/null +++ b/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/domain/Movie.java @@ -0,0 +1,228 @@ +package org.neo4j.cineasts.domain; + +import org.neo4j.graphdb.Direction; +import org.neo4j.helpers.collection.IteratorUtil; +import org.springframework.data.neo4j.annotation.NodeEntity; +import org.springframework.data.neo4j.annotation.RelatedTo; +import org.springframework.data.neo4j.annotation.RelatedToVia; +import org.springframework.data.neo4j.annotation.Indexed; +import org.springframework.data.neo4j.support.index.IndexType; + +import java.util.*; + +import static org.neo4j.graphdb.Direction.INCOMING; + + +/** + * @author mh + * @since 04.03.11 + */ +@NodeEntity +public class Movie { + + @Indexed + String id; + + @Indexed(indexType=IndexType.FULLTEXT, indexName = "search") + String title; + + String description; + + @RelatedTo(type="DIRECTED", direction = INCOMING) + Person director; + + @RelatedTo(type = "ACTS_IN", direction = INCOMING) + Set actors; + + @RelatedToVia(elementClass = Role.class, type = "ACTS_IN", direction = INCOMING) + Iterable roles; + + @RelatedToVia(elementClass = Rating.class, type = "RATED", direction = INCOMING) + Iterable ratings; + private String language; + private String imdbId; + private String tagline; + private Date releaseDate; + private Integer runtime; + private String homepage; + private String trailer; + private String genre; + private String studio; + private Integer version; + private Date lastModified; + private String imageUrl; + + public Movie() { + } + + public Movie(String id, String title) { + this.id = id; + this.title = title; + } + + public Collection getActors() { + return actors; + } + + public Collection getRoles() { + return IteratorUtil.asCollection(roles); + } + + public int getYear() { + if (releaseDate==null) return 0; + Calendar cal = Calendar.getInstance(); + cal.setTime(releaseDate); + return cal.get(Calendar.YEAR); + } + + public String getId() { + return id; + } + + public String getTitle() { + return title; + } + + @Override + public String toString() { + return String.format("%s (%s) [%s]", title, releaseDate, id); + } + + public String getDescription() { + return description; + } + + public int getStars() { + Iterable allRatings = ratings; + + if (allRatings == null) return 0; + int stars=0, count=0; + for (Rating rating : allRatings) { + stars += rating.getStars(); + count++; + } + return count==0 ? 0 : stars / count; + } + + public Collection getRatings() { + Iterable allRatings = ratings; + return allRatings == null ? Collections.emptyList() : IteratorUtil.asCollection(allRatings); + } + + public Person getDirector() { + return director; + } + + public void setTitle(String title) { + this.title=title; + } + + public void setLanguage(String language) { + this.language = language; + } + + public void setImdbId(String imdbId) { + this.imdbId = imdbId; + } + + public void setTagline(String tagline) { + this.tagline = tagline; + } + + public void setDescription(String description) { + this.description = description; + } + + public void setReleaseDate(Date releaseDate) { + this.releaseDate = releaseDate; + } + + public void setRuntime(Integer runtime) { + this.runtime = runtime; + } + + public void setHomepage(String homepage) { + this.homepage = homepage; + } + + public void setTrailer(String trailer) { + this.trailer = trailer; + } + + public void setGenre(String genre) { + this.genre = genre; + } + + public void setStudio(String studio) { + this.studio = studio; + } + + public void setVersion(Integer version) { + this.version = version; + } + + public void setLastModified(Date lastModified) { + this.lastModified = lastModified; + } + + public void setImageUrl(String imageUrl) { + this.imageUrl = imageUrl; + } + + public String getLanguage() { + return language; + } + + public String getImdbId() { + return imdbId; + } + + public String getTagline() { + return tagline; + } + + public Date getReleaseDate() { + return releaseDate; + } + + public Integer getRuntime() { + return runtime; + } + + public String getHomepage() { + return homepage; + } + + public String getTrailer() { + return trailer; + } + + public String getGenre() { + return genre; + } + + public String getStudio() { + return studio; + } + + public Integer getVersion() { + return version; + } + + public Date getLastModified() { + return lastModified; + } + + public String getImageUrl() { + return imageUrl; + } + + public String getYoutubeId() { + String trailerUrl = trailer; + if (trailerUrl==null || !trailerUrl.contains("youtu")) return null; + String[] parts = trailerUrl.split("[=/]"); + int numberOfParts = parts.length; + return numberOfParts > 0 ? parts[numberOfParts-1] : null; + } +} + diff --git a/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/domain/MovieRecommendation.java b/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/domain/MovieRecommendation.java new file mode 100644 index 000000000..5568c7239 --- /dev/null +++ b/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/domain/MovieRecommendation.java @@ -0,0 +1,17 @@ +package org.neo4j.cineasts.domain; + +import org.springframework.data.neo4j.annotation.MapResult; +import org.springframework.data.neo4j.annotation.ResultColumn; + +/** +* @author mh +* @since 04.11.11 +*/ +@MapResult +public interface MovieRecommendation { + @ResultColumn("otherMovie") + Movie getMovie(); + + @ResultColumn("avg(r3.stars)") + int getRating(); +} diff --git a/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/domain/Person.java b/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/domain/Person.java new file mode 100644 index 000000000..9cb5e9698 --- /dev/null +++ b/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/domain/Person.java @@ -0,0 +1,126 @@ +package org.neo4j.cineasts.domain; + +import org.springframework.data.neo4j.annotation.Indexed; +import org.springframework.data.neo4j.annotation.NodeEntity; +import org.springframework.data.neo4j.annotation.RelatedTo; +import org.springframework.data.neo4j.annotation.RelatedToVia; +import org.springframework.data.neo4j.support.index.IndexType; + +import java.util.Date; +import java.util.Set; + +/** + * @author mh + * @since 12.03.11 + */ +@NodeEntity +public class Person { + @Indexed + String id; + @Indexed(indexType=IndexType.FULLTEXT, indexName = "people") + String name; + private Date birthday; + private String birthplace; + private String biography; + private Integer version; + private Date lastModified; + private String profileImageUrl; + + public Person(String id, String name) { + this.id = id; + this.name = name; + } + + public Person() { + } + + public String getId() { + return id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + @Override + public String toString() { + return String.format("%s [%s]", name, id); + } + + public void setBirthday(Date birthday) { + this.birthday = birthday; + } + + public void setBirthplace(String birthplace) { + this.birthplace = birthplace; + } + + public void setBiography(String biography) { + this.biography = biography; + } + + public void setVersion(Integer version) { + this.version = version; + } + + public void setLastModified(Date lastModified) { + this.lastModified = lastModified; + } + + public Date getBirthday() { + return birthday; + } + + public String getBirthplace() { + return birthplace; + } + + public String getBiography() { + return biography; + } + + public Integer getVersion() { + return version; + } + + public Date getLastModified() { + return lastModified; + } + + public void setProfileImageUrl(String profileImageUrl) { + this.profileImageUrl = profileImageUrl; + } + + public String getProfileImageUrl() { + return profileImageUrl; + } + + @RelatedTo(elementClass = Movie.class, type = "DIRECTED") + private Set directedMovies; + + public Set getDirectedMovies() { + return directedMovies; + } + + public void directed(Movie movie) { + this.directedMovies.add(movie); + } + + @RelatedToVia(elementClass = Role.class, type = "ACTS_IN") + Iterable roles; + + public Iterable getRoles() { + return roles; + } + + public Role playedIn(Movie movie, String roleName) { + Role role = relateTo(movie, Role.class, "ACTS_IN"); + role.setName(roleName); + return role; + } + +} diff --git a/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/domain/Rating.java b/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/domain/Rating.java new file mode 100644 index 000000000..ea14ea5f9 --- /dev/null +++ b/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/domain/Rating.java @@ -0,0 +1,52 @@ +package org.neo4j.cineasts.domain; + +import org.springframework.data.neo4j.annotation.EndNode; +import org.springframework.data.neo4j.annotation.RelationshipEntity; +import org.springframework.data.neo4j.annotation.StartNode; + +/** + * @author mh + * @since 04.03.11 + */ +@RelationshipEntity +public class Rating { + private static final int MAX_STARS = 5; + private static final int MIN_STARS = 0; + + @StartNode + User user; + @EndNode Movie movie; + + int stars; + String comment; + + public User getUser() { + return user; + } + + public Movie getMovie() { + return movie; + } + + public int getStars() { + return stars; + } + + public void setStars(int stars) { + this.stars = stars; + } + + public String getComment() { + return comment; + } + + public void setComment(String comment) { + this.comment = comment; + } + + public Rating rate(int stars, String comment) { + if (stars>= MIN_STARS && stars <= MAX_STARS) this.stars=stars; + if (comment!=null && !comment.isEmpty()) this.comment = comment; + return this; + } +} diff --git a/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/domain/Role.java b/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/domain/Role.java new file mode 100644 index 000000000..e5a4dac27 --- /dev/null +++ b/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/domain/Role.java @@ -0,0 +1,38 @@ +package org.neo4j.cineasts.domain; + +import org.springframework.data.neo4j.annotation.EndNode; +import org.springframework.data.neo4j.annotation.RelationshipEntity; +import org.springframework.data.neo4j.annotation.StartNode; + +/** + * @author mh + * @since 04.03.11 + */ +@RelationshipEntity +public class Role { + @EndNode Movie movie; + @StartNode Person actor; + + String name; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Movie getMovie() { + return movie; + } + + public Person getActor() { + return actor; + } + + @Override + public String toString() { + return String.format("%s acts as %s in %s", actor, name, movie); + } +} diff --git a/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/domain/Roles.java b/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/domain/Roles.java new file mode 100644 index 000000000..3319ab32f --- /dev/null +++ b/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/domain/Roles.java @@ -0,0 +1,9 @@ +package org.neo4j.cineasts.domain; + +/** +* @author mh +* @since 12.03.11 +*/ +public enum Roles { + ACTS_IN, DIRECTED +} diff --git a/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/domain/User.java b/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/domain/User.java new file mode 100644 index 000000000..8d362207a --- /dev/null +++ b/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/domain/User.java @@ -0,0 +1,117 @@ +package org.neo4j.cineasts.domain; + +import org.neo4j.graphdb.Direction; +import org.neo4j.helpers.collection.IteratorUtil; +import org.springframework.data.neo4j.annotation.Indexed; +import org.springframework.data.neo4j.annotation.NodeEntity; +import org.springframework.data.neo4j.annotation.RelatedTo; +import org.springframework.data.neo4j.annotation.RelatedToVia; +import org.springframework.security.authentication.encoding.Md5PasswordEncoder; +import org.springframework.security.core.GrantedAuthority; + +import java.util.Collection; +import java.util.Set; + +@NodeEntity +public class User { + private static final String SALT = "cewuiqwzie"; + public static final String FRIEND = "FRIEND"; + public static final String RATED = "RATED"; + @Indexed + String login; + String name; + String password; + String info; + private Roles[] roles; + + public User() { + } + + public User(String login, String name, String password, Roles... roles) { + this.login = login; + this.name = name; + this.password = encode(password); + this.roles = roles; + } + + private String encode(String password) { + return new Md5PasswordEncoder().encodePassword(password, SALT); + } + + @RelatedToVia(elementClass = Rating.class, type = RATED) + Iterable ratings; + + @RelatedTo(elementClass = Movie.class, type = RATED) + Set favorites; + + + @RelatedTo(elementClass = User.class, type = FRIEND, direction = Direction.BOTH) + Set friends; + + public void addFriend(User friend) { + this.friends.add(friend); + } + + public Rating rate(Movie movie, int stars, String comment) { + return relateTo(movie, Rating.class, RATED).rate(stars, comment); + } + + public Collection getRatings() { + return IteratorUtil.asCollection(ratings); + } + + @Override + public String toString() { + return String.format("%s (%s)", name, login); + } + + public String getName() { + return name; + } + + public Set getFriends() { + return friends; + } + + public Roles[] getRole() { + return roles; + } + + + public String getLogin() { + return login; + } + + public String getPassword() { + return password; + } + + public String getInfo() { + return info; + } + public void setInfo(String info) { + this.info = info; + } + public void updatePassword(String old, String newPass1, String newPass2) { + if (!password.equals(encode(old))) throw new IllegalArgumentException("Existing Password invalid"); + if (!newPass1.equals(newPass2)) throw new IllegalArgumentException("New Passwords don't match"); + this.password = encode(newPass1); + } + + public void setName(String name) { + this.name = name; + } + + public boolean isFriend(User other) { + return other!=null && getFriends().contains(other); + } + + public enum Roles implements GrantedAuthority { + ROLE_USER, ROLE_ADMIN; + + @Override + public String getAuthority() { + return name(); + } + } +} diff --git a/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/movieimport/MovieDbApiClient.java b/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/movieimport/MovieDbApiClient.java new file mode 100644 index 000000000..f07fc9753 --- /dev/null +++ b/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/movieimport/MovieDbApiClient.java @@ -0,0 +1,46 @@ +package org.neo4j.cineasts.movieimport; + +import org.codehaus.jackson.map.ObjectMapper; + +import java.net.URL; +import java.util.Collections; +import java.util.List; +import java.util.Map; + +public class MovieDbApiClient { + + private final String baseUrl = "http://api.themoviedb.org/"; + private final String apiKey; + protected final ObjectMapper mapper; + + public MovieDbApiClient(String apiKey) { + this.apiKey = apiKey; + mapper = new ObjectMapper(); + } + + public Map getMovie(String id) { + return loadJsonData(id, buildMovieUrl(id)); + } + + private Map loadJsonData(String id, String url) { + try { + List value = mapper.readValue(new URL(url), List.class); + if (value.isEmpty() || value.get(0).equals("Nothing found.")) return Collections.singletonMap("not_found",System.currentTimeMillis()); + return (Map) value.get(0); + } catch (Exception e) { + throw new RuntimeException("Failed to get data from " + url, e); + } + } + + private String buildMovieUrl(String movieId) { + return String.format("%s2.1/Movie.getInfo/en/json/%s/%s", baseUrl, apiKey, movieId); + } + + public Map getPerson(String id) { + return loadJsonData(id, buildPersonUrl(id)); + } + + private String buildPersonUrl(String personId) { + return String.format("%s2.1/Person.getInfo/en/json/%s/%s", baseUrl, apiKey, personId); + } +} diff --git a/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/movieimport/MovieDbException.java b/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/movieimport/MovieDbException.java new file mode 100644 index 000000000..a1da5992b --- /dev/null +++ b/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/movieimport/MovieDbException.java @@ -0,0 +1,14 @@ +package org.neo4j.cineasts.movieimport; + +public class MovieDbException extends RuntimeException { + + private static final long serialVersionUID = 1L; + + public MovieDbException(String message) { + super(message); + } + + public MovieDbException(String message, Throwable cause) { + super(message, cause); + } +} diff --git a/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/movieimport/MovieDbImportService.java b/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/movieimport/MovieDbImportService.java new file mode 100644 index 000000000..6f8250c96 --- /dev/null +++ b/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/movieimport/MovieDbImportService.java @@ -0,0 +1,132 @@ +package org.neo4j.cineasts.movieimport; + +import org.neo4j.cineasts.domain.*; +import org.neo4j.cineasts.repository.MovieRepository; +import org.neo4j.cineasts.repository.PersonRepository; +import org.neo4j.cineasts.service.CineastsRepository; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Collection; +import java.util.LinkedHashMap; +import java.util.Map; + +@Service +public class MovieDbImportService { + + private static final Logger logger = LoggerFactory.getLogger(MovieDbImportService.class); + MovieDbJsonMapper movieDbJsonMapper = new MovieDbJsonMapper(); + + @Autowired + MovieRepository movieRepository; + @Autowired + PersonRepository personRepository; + + @Autowired + MovieDbApiClient client; + + @Autowired + MovieDbLocalStorage localStorage; + + @Transactional + public Map importMovies(Map ranges) { + final Map movies=new LinkedHashMap(); + for (Map.Entry entry : ranges.entrySet()) { + for (int id = entry.getKey(); id <= entry.getValue(); id++) { + String result = importMovieFailsafe(id); + movies.put(id, result); + } + } + return movies; + } + + private String importMovieFailsafe(Integer id) { + try { + Movie movie = doImportMovie(String.valueOf(id)); + return movie.getTitle(); + } catch (Exception e) { + return e.getMessage(); + } + } + + @Transactional + public Movie importMovie(String movieId) { + return doImportMovie(movieId); + } + + private Movie doImportMovie(String movieId) { + logger.debug("Importing movie " + movieId); + + Movie movie = movieRepository.findById(movieId); + if (movie == null) { // Not found: Create fresh + movie = new Movie(movieId,null); + } + + Map data = loadMovieData(movieId); + if (data.containsKey("not_found")) throw new RuntimeException("Data for Movie "+movieId+" not found."); + movieDbJsonMapper.mapToMovie(data, movie); + movie.persist(); + relatePersonsToMovie(movie, data); + return movie; + } + + private Map loadMovieData(String movieId) { + if (localStorage.hasMovie(movieId)) { + return localStorage.loadMovie(movieId); + } + + Map data = client.getMovie(movieId); + localStorage.storeMovie(movieId, data); + return data; + } + + private void relatePersonsToMovie(Movie movie, Map data) { + Collection cast = (Collection) data.get("cast"); + for (Map entry : cast) { + String id = "" + entry.get("id"); + String jobName = (String) entry.get("job"); + Roles job = movieDbJsonMapper.mapToRole(jobName); + if (job==null) { + if (logger.isInfoEnabled()) logger.info("Could not add person with job "+jobName+" "+entry); + continue; + } + Person person = doImportPerson(id); + switch (job) { + case DIRECTED: + person.directed(movie); + break; + case ACTS_IN: + person.playedIn(movie, (String) entry.get("character")); + break; + } + } + } + + @Transactional + public Person importPerson(String personId) { + return doImportPerson(personId); + } + + private Person doImportPerson(String personId) { + logger.debug("Importing person " + personId); + Person person = personRepository.findById(personId); + if (person!=null) return person; + Map data = loadPersonData(personId); + if (data.containsKey("not_found")) throw new RuntimeException("Data for Person "+personId+" not found."); + Person newPerson=new Person(personId,null); + movieDbJsonMapper.mapToPerson(data, newPerson); + return newPerson.persist(); + } + + private Map loadPersonData(String personId) { + if (localStorage.hasPerson(personId)) { + return localStorage.loadPerson(personId); + } + Map data = client.getPerson(personId); + localStorage.storePerson(personId, data); + return localStorage.loadPerson(personId); + } +} diff --git a/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/movieimport/MovieDbJsonMapper.java b/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/movieimport/MovieDbJsonMapper.java new file mode 100644 index 000000000..c1675830c --- /dev/null +++ b/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/movieimport/MovieDbJsonMapper.java @@ -0,0 +1,704 @@ +package org.neo4j.cineasts.movieimport; + +import org.neo4j.cineasts.domain.Movie; +import org.neo4j.cineasts.domain.Person; +import org.neo4j.cineasts.domain.Roles; +import org.springframework.stereotype.Component; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; +import java.util.Map; + +@Component +public class MovieDbJsonMapper { + + public void mapToMovie(Map data, Movie movie) { + try { + movie.setTitle((String) data.get("name")); + movie.setLanguage((String) data.get("language")); + movie.setImdbId((String) data.get("imdb_id")); + movie.setTagline((String) data.get("tagline")); + movie.setDescription(limit((String) data.get("overview"), 500)); + movie.setReleaseDate(toDate(data, "released", "yyyy-MM-dd")); + movie.setRuntime((Integer) data.get("runtime")); + movie.setHomepage((String) data.get("homepage")); + movie.setTrailer((String) data.get("trailer")); + movie.setGenre(extractFirst(data, "genres", "name")); + movie.setStudio(extractFirst(data,"studios", "name")); + movie.setVersion((Integer)data.get("version")); + movie.setLastModified(toDate(data,"last_modified_at","yyyy-MM-dd HH:mm:ss")); + movie.setImageUrl(selectImageUrl((List) data.get("posters"), "poster", "mid")); + } catch (Exception e) { + throw new MovieDbException("Failed to map json for movie", e); + } + } + + private String selectImageUrl(List data, final String type, final String size) { + if (data==null) return null; + for (Map entry : data) { + Map image = (Map) entry.get("image"); + if (image.get("type").equals(type) && image.get("size").equals(size)) return (String) image.get("url"); + } + return null; + } + + + private String extractFirst(Map data, String field, String property) { + List inner = (List) data.get(field); + if (inner == null || inner.isEmpty()) return null; + return (String) inner.get(0).get(property); + } + + private Date toDate(Map data, String field, final String pattern) throws ParseException { + String dateString = (String) data.get(field); + if (dateString == null || dateString.isEmpty()) return null; + return new SimpleDateFormat(pattern).parse(dateString); + } + + /* + [{"popularity":3, +"translated":true, +"adult":false, +"language":"en", +"original_name":"[Rec]", +"name":"[Rec]", +"alternative_name":"[REC]", +"movie_type":"movie", +"id":8329, +"imdb_id":"tt1038988", +"url":"http://www.themoviedb.org/movie/8329", +"votes":11, +"rating":7.2, +"status":"Released", +"tagline":"One Witness. One Camera", +"certification":"R", +"overview":"\"REC\" turns on a young TV reporter and her cameraman who cover the night shift at the local fire station. Receiving a call from an old lady trapped in her house, +they reach her building to hear horrifying screams -- which begin a long nightmare and a uniquely dramatic TV report.", +"keywords":["terror", +"lebende leichen", +"obsession", +"camcorder", +"firemen", +"reality tv ", +"bite", +"cinematographer", +"attempt to escape", +"virus", +"lodger", +"live-reportage", +"schwerverletzt"], +"released":"2007-08-29", +"runtime":78, +"budget":0, +"revenue":0, +"homepage":"http://www.3l-filmverleih.de/rec", +"trailer":"http://www.youtube.com/watch?v=YQUkX_XowqI", +"genres":[{"type":"genre", +"url":"http://themoviedb.org/genre/horror", +"name":"Horror", +"id":27}], +"studios":[{"url":"http://www.themoviedb.org/company/2270", +"name":"Filmax Group", +"id":2270}], +"languages_spoken":[{"code":"es", +"name":"Spanish", +"native_name":"Espa\u00f1ol"}], +"countries":[{"code":"ES", +"name":"Spain", +"url":"http://www.themoviedb.org/country/es"}], +"posters":[{"image":{"type":"poster", +"size":"original", +"height":1000, +"width":706, +"url":"http://cf1.imgobject.com/posters/3a0/4cc8df415e73d650240003a0/rec-original.jpg", +"id":"4cc8df415e73d650240003a0"}}, +{"image":{"type":"poster", +"size":"mid", +"height":708, +"width":500, +"url":"http://cf1.imgobject.com/posters/3a0/4cc8df415e73d650240003a0/rec-mid.jpg", +"id":"4cc8df415e73d650240003a0"}}, +{"image":{"type":"poster", +"size":"cover", +"height":262, +"width":185, +"url":"http://cf1.imgobject.com/posters/3a0/4cc8df415e73d650240003a0/rec-cover.jpg", +"id":"4cc8df415e73d650240003a0"}}, +{"image":{"type":"poster", +"size":"thumb", +"height":130, +"width":92, +"url":"http://cf1.imgobject.com/posters/3a0/4cc8df415e73d650240003a0/rec-thumb.jpg", +"id":"4cc8df415e73d650240003a0"}}, +{"image":{"type":"poster", +"size":"original", +"height":1000, +"width":711, +"url":"http://cf1.imgobject.com/posters/1e7/4bc92117017a3c57fe00d1e7/rec-original.jpg", +"id":"4bc92117017a3c57fe00d1e7"}}, +{"image":{"type":"poster", +"size":"mid", +"height":703, +"width":500, +"url":"http://cf1.imgobject.com/posters/1e7/4bc92117017a3c57fe00d1e7/rec-mid.jpg", +"id":"4bc92117017a3c57fe00d1e7"}}, +{"image":{"type":"poster", +"size":"cover", +"height":260, +"width":185, +"url":"http://cf1.imgobject.com/posters/1e7/4bc92117017a3c57fe00d1e7/rec-cover.jpg", +"id":"4bc92117017a3c57fe00d1e7"}}, +{"image":{"type":"poster", +"size":"thumb", +"height":129, +"width":92, +"url":"http://cf1.imgobject.com/posters/1e7/4bc92117017a3c57fe00d1e7/rec-thumb.jpg", +"id":"4bc92117017a3c57fe00d1e7"}}, +{"image":{"type":"poster", +"size":"original", +"height":1500, +"width":1000, +"url":"http://cf1.imgobject.com/posters/1ec/4bc92118017a3c57fe00d1ec/rec-original.jpg", +"id":"4bc92118017a3c57fe00d1ec"}}, +{"image":{"type":"poster", +"size":"mid", +"height":750, +"width":500, +"url":"http://cf1.imgobject.com/posters/1ec/4bc92118017a3c57fe00d1ec/rec-mid.jpg", +"id":"4bc92118017a3c57fe00d1ec"}}, +{"image":{"type":"poster", +"size":"cover", +"height":278, +"width":185, +"url":"http://cf1.imgobject.com/posters/1ec/4bc92118017a3c57fe00d1ec/rec-cover.jpg", +"id":"4bc92118017a3c57fe00d1ec"}}, +{"image":{"type":"poster", +"size":"thumb", +"height":138, +"width":92, +"url":"http://cf1.imgobject.com/posters/1ec/4bc92118017a3c57fe00d1ec/rec-thumb.jpg", +"id":"4bc92118017a3c57fe00d1ec"}}, +{"image":{"type":"poster", +"size":"original", +"height":1429, +"width":1000, +"url":"http://cf1.imgobject.com/posters/1f1/4bc92118017a3c57fe00d1f1/rec-original.jpg", +"id":"4bc92118017a3c57fe00d1f1"}}, +{"image":{"type":"poster", +"size":"mid", +"height":715, +"width":500, +"url":"http://cf1.imgobject.com/posters/1f1/4bc92118017a3c57fe00d1f1/rec-mid.jpg", +"id":"4bc92118017a3c57fe00d1f1"}}, +{"image":{"type":"poster", +"size":"cover", +"height":265, +"width":185, +"url":"http://cf1.imgobject.com/posters/1f1/4bc92118017a3c57fe00d1f1/rec-cover.jpg", +"id":"4bc92118017a3c57fe00d1f1"}}, +{"image":{"type":"poster", +"size":"thumb", +"height":132, +"width":92, +"url":"http://cf1.imgobject.com/posters/1f1/4bc92118017a3c57fe00d1f1/rec-thumb.jpg", +"id":"4bc92118017a3c57fe00d1f1"}}, +{"image":{"type":"poster", +"size":"original", +"height":1125, +"width":800, +"url":"http://cf1.imgobject.com/posters/1f6/4bc92118017a3c57fe00d1f6/rec-original.jpg", +"id":"4bc92118017a3c57fe00d1f6"}}, +{"image":{"type":"poster", +"size":"mid", +"height":703, +"width":500, +"url":"http://cf1.imgobject.com/posters/1f6/4bc92118017a3c57fe00d1f6/rec-mid.jpg", +"id":"4bc92118017a3c57fe00d1f6"}}, +{"image":{"type":"poster", +"size":"cover", +"height":260, +"width":185, +"url":"http://cf1.imgobject.com/posters/1f6/4bc92118017a3c57fe00d1f6/rec-cover.jpg", +"id":"4bc92118017a3c57fe00d1f6"}}, +{"image":{"type":"poster", +"size":"thumb", +"height":129, +"width":92, +"url":"http://cf1.imgobject.com/posters/1f6/4bc92118017a3c57fe00d1f6/rec-thumb.jpg", +"id":"4bc92118017a3c57fe00d1f6"}}], +"backdrops":[{"image":{"type":"backdrop", +"size":"original", +"height":1080, +"width":1920, +"url":"http://cf1.imgobject.com/backdrops/1df/4bc92117017a3c57fe00d1df/rec-original.jpg", +"id":"4bc92117017a3c57fe00d1df"}}, +{"image":{"type":"backdrop", +"size":"poster", +"height":439, +"width":780, +"url":"http://cf1.imgobject.com/backdrops/1df/4bc92117017a3c57fe00d1df/rec-poster.jpg", +"id":"4bc92117017a3c57fe00d1df"}}, +{"image":{"type":"backdrop", +"size":"thumb", +"height":169, +"width":300, +"url":"http://cf1.imgobject.com/backdrops/1df/4bc92117017a3c57fe00d1df/rec-thumb.jpg", +"id":"4bc92117017a3c57fe00d1df"}}, +{"image":{"type":"backdrop", +"size":"original", +"height":1080, +"width":1920, +"url":"http://cf1.imgobject.com/backdrops/1d7/4bc92113017a3c57fe00d1d7/rec-original.jpg", +"id":"4bc92113017a3c57fe00d1d7"}}, +{"image":{"type":"backdrop", +"size":"poster", +"height":439, +"width":780, +"url":"http://cf1.imgobject.com/backdrops/1d7/4bc92113017a3c57fe00d1d7/rec-poster.jpg", +"id":"4bc92113017a3c57fe00d1d7"}}, +{"image":{"type":"backdrop", +"size":"thumb", +"height":169, +"width":300, +"url":"http://cf1.imgobject.com/backdrops/1d7/4bc92113017a3c57fe00d1d7/rec-thumb.jpg", +"id":"4bc92113017a3c57fe00d1d7"}}, +{"image":{"type":"backdrop", +"size":"original", +"height":1080, +"width":1920, +"url":"http://cf1.imgobject.com/backdrops/1e3/4bc92117017a3c57fe00d1e3/rec-original.jpg", +"id":"4bc92117017a3c57fe00d1e3"}}, +{"image":{"type":"backdrop", +"size":"poster", +"height":439, +"width":780, +"url":"http://cf1.imgobject.com/backdrops/1e3/4bc92117017a3c57fe00d1e3/rec-poster.jpg", +"id":"4bc92117017a3c57fe00d1e3"}}, +{"image":{"type":"backdrop", +"size":"thumb", +"height":169, +"width":300, +"url":"http://cf1.imgobject.com/backdrops/1e3/4bc92117017a3c57fe00d1e3/rec-thumb.jpg", +"id":"4bc92117017a3c57fe00d1e3"}}, +{"image":{"type":"backdrop", +"size":"original", +"height":1080, +"width":1920, +"url":"http://cf1.imgobject.com/backdrops/1d3/4bc92113017a3c57fe00d1d3/rec-original.jpg", +"id":"4bc92113017a3c57fe00d1d3"}}, +{"image":{"type":"backdrop", +"size":"poster", +"height":439, +"width":780, +"url":"http://cf1.imgobject.com/backdrops/1d3/4bc92113017a3c57fe00d1d3/rec-poster.jpg", +"id":"4bc92113017a3c57fe00d1d3"}}, +{"image":{"type":"backdrop", +"size":"thumb", +"height":169, +"width":300, +"url":"http://cf1.imgobject.com/backdrops/1d3/4bc92113017a3c57fe00d1d3/rec-thumb.jpg", +"id":"4bc92113017a3c57fe00d1d3"}}, +{"image":{"type":"backdrop", +"size":"original", +"height":1080, +"width":1920, +"url":"http://cf1.imgobject.com/backdrops/1db/4bc92114017a3c57fe00d1db/rec-original.jpg", +"id":"4bc92114017a3c57fe00d1db"}}, +{"image":{"type":"backdrop", +"size":"poster", +"height":439, +"width":780, +"url":"http://cf1.imgobject.com/backdrops/1db/4bc92114017a3c57fe00d1db/rec-poster.jpg", +"id":"4bc92114017a3c57fe00d1db"}}, +{"image":{"type":"backdrop", +"size":"thumb", +"height":169, +"width":300, +"url":"http://cf1.imgobject.com/backdrops/1db/4bc92114017a3c57fe00d1db/rec-thumb.jpg", +"id":"4bc92114017a3c57fe00d1db"}}, +{"image":{"type":"backdrop", +"size":"original", +"height":1080, +"width":1920, +"url":"http://cf1.imgobject.com/backdrops/6f4/4d0e39c25e73d637100016f4/rec-original.jpg", +"id":"4d0e39c25e73d637100016f4"}}, +{"image":{"type":"backdrop", +"size":"poster", +"height":439, +"width":780, +"url":"http://cf1.imgobject.com/backdrops/6f4/4d0e39c25e73d637100016f4/rec-poster.jpg", +"id":"4d0e39c25e73d637100016f4"}}, +{"image":{"type":"backdrop", +"size":"thumb", +"height":169, +"width":300, +"url":"http://cf1.imgobject.com/backdrops/6f4/4d0e39c25e73d637100016f4/rec-thumb.jpg", +"id":"4d0e39c25e73d637100016f4"}}, +{"image":{"type":"backdrop", +"size":"original", +"height":1080, +"width":1920, +"url":"http://cf1.imgobject.com/backdrops/567/4d0e39dd5e73d6370a001567/rec-original.jpg", +"id":"4d0e39dd5e73d6370a001567"}}, +{"image":{"type":"backdrop", +"size":"poster", +"height":439, +"width":780, +"url":"http://cf1.imgobject.com/backdrops/567/4d0e39dd5e73d6370a001567/rec-poster.jpg", +"id":"4d0e39dd5e73d6370a001567"}}, +{"image":{"type":"backdrop", +"size":"thumb", +"height":169, +"width":300, +"url":"http://cf1.imgobject.com/backdrops/567/4d0e39dd5e73d6370a001567/rec-thumb.jpg", +"id":"4d0e39dd5e73d6370a001567"}}, +{"image":{"type":"backdrop", +"size":"original", +"height":1080, +"width":1920, +"url":"http://cf1.imgobject.com/backdrops/58a/4d0e39fb5e73d6371c00158a/rec-original.jpg", +"id":"4d0e39fb5e73d6371c00158a"}}, +{"image":{"type":"backdrop", +"size":"poster", +"height":439, +"width":780, +"url":"http://cf1.imgobject.com/backdrops/58a/4d0e39fb5e73d6371c00158a/rec-poster.jpg", +"id":"4d0e39fb5e73d6371c00158a"}}, +{"image":{"type":"backdrop", +"size":"thumb", +"height":169, +"width":300, +"url":"http://cf1.imgobject.com/backdrops/58a/4d0e39fb5e73d6371c00158a/rec-thumb.jpg", +"id":"4d0e39fb5e73d6371c00158a"}}, +{"image":{"type":"backdrop", +"size":"original", +"height":1080, +"width":1920, +"url":"http://cf1.imgobject.com/backdrops/5f4/4d0e3a185e73d6370e0015f4/rec-original.jpg", +"id":"4d0e3a185e73d6370e0015f4"}}, +{"image":{"type":"backdrop", +"size":"poster", +"height":439, +"width":780, +"url":"http://cf1.imgobject.com/backdrops/5f4/4d0e3a185e73d6370e0015f4/rec-poster.jpg", +"id":"4d0e3a185e73d6370e0015f4"}}, +{"image":{"type":"backdrop", +"size":"thumb", +"height":169, +"width":300, +"url":"http://cf1.imgobject.com/backdrops/5f4/4d0e3a185e73d6370e0015f4/rec-thumb.jpg", +"id":"4d0e3a185e73d6370e0015f4"}}, +{"image":{"type":"backdrop", +"size":"original", +"height":1080, +"width":1920, +"url":"http://cf1.imgobject.com/backdrops/67f/4d0e3a395e73d6371600167f/rec-original.jpg", +"id":"4d0e3a395e73d6371600167f"}}, +{"image":{"type":"backdrop", +"size":"poster", +"height":439, +"width":780, +"url":"http://cf1.imgobject.com/backdrops/67f/4d0e3a395e73d6371600167f/rec-poster.jpg", +"id":"4d0e3a395e73d6371600167f"}}, +{"image":{"type":"backdrop", +"size":"thumb", +"height":169, +"width":300, +"url":"http://cf1.imgobject.com/backdrops/67f/4d0e3a395e73d6371600167f/rec-thumb.jpg", +"id":"4d0e3a395e73d6371600167f"}}], +"cast":[{"name":"Manuela Velasco", +"job":"Actor", +"department":"Actors", +"character":"Angela Vidal", +"id":34793, +"order":0, +"cast_id":1, +"url":"http://www.themoviedb.org/person/34793", +"profile":"http://cf1.imgobject.com/profiles/390/4c0157fa017a3c702d001390/manuela-velasco-thumb.jpg"}, +{"name":"Carlos Lasarte", +"job":"Actor", +"department":"Actors", +"character":"C\u00e9sar", +"id":54519, +"order":2, +"cast_id":3, +"url":"http://www.themoviedb.org/person/54519", +"profile":"http://cf1.imgobject.com/profiles/ba6/4d27aa297b9aa134d3001ba6/carlos-lasarte-thumb.jpg"}, +{"name":"Pablo Rosso", +"job":"Actor", +"department":"Actors", +"character":"Marcos", +"id":54520, +"order":3, +"cast_id":4, +"url":"http://www.themoviedb.org/person/54520", +"profile":""}, +{"name":"David Vert", +"job":"Actor", +"department":"Actors", +"character":"Alex", +"id":54521, +"order":4, +"cast_id":5, +"url":"http://www.themoviedb.org/person/54521", +"profile":"http://cf1.imgobject.com/profiles/c7e/4d27aad57b9aa134cb001c7e/david-vert-thumb.jpg"}, +{"name":"Vicente Gil", +"job":"Actor", +"department":"Actors", +"character":"Polizist", +"id":54522, +"order":5, +"cast_id":6, +"url":"http://www.themoviedb.org/person/54522", +"profile":"http://cf1.imgobject.com/profiles/c86/4d27ab237b9aa134cb001c86/vicente-gil-thumb.jpg"}, +{"name":"Martha Carbonell", +"job":"Actor", +"department":"Actors", +"character":"Frau Izquierdo", +"id":54523, +"order":6, +"cast_id":7, +"url":"http://www.themoviedb.org/person/54523", +"profile":"http://cf1.imgobject.com/profiles/c90/4d27ab777b9aa134cb001c90/martha-carbonell-thumb.jpg"}, +{"name":"Carlos Vicente", +"job":"Actor", +"department":"Actors", +"character":"Guillem", +"id":54524, +"order":7, +"cast_id":8, +"url":"http://www.themoviedb.org/person/54524", +"profile":"http://cf1.imgobject.com/profiles/b0f/4d27abcc7b9aa134cf001b0f/carlos-vicente-thumb.jpg"}, +{"name":"Ferran Terraza", +"job":"Actor", +"department":"Actors", +"character":"Manu", +"id":54532, +"order":8, +"cast_id":22, +"url":"http://www.themoviedb.org/person/54532", +"profile":"http://cf1.imgobject.com/profiles/129/4c4bfbab7b9aa1237f000129/ferran-terraza-thumb.jpg"}, +{"name":"Jorge Yamam", +"job":"Actor", +"department":"Actors", +"character":"Sergio", +"id":147878, +"order":9, +"cast_id":23, +"url":"http://www.themoviedb.org/person/147878", +"profile":"http://cf1.imgobject.com/profiles/cbb/4d27ac677b9aa134dc001cbb/jorge-yamam-thumb.jpg"}, +{"name":"Jaume Balaguer\u00f3", +"job":"Director", +"department":"Directing", +"character":"", +"id":54525, +"order":0, +"cast_id":9, +"url":"http://www.themoviedb.org/person/54525", +"profile":""}, +{"name":"Paco Plaza", +"job":"Director", +"department":"Directing", +"character":"", +"id":54526, +"order":0, +"cast_id":10, +"url":"http://www.themoviedb.org/person/54526", +"profile":""}, +{"name":"Jaume Balaguer\u00f3", +"job":"Screenplay", +"department":"Writing", +"character":"", +"id":54525, +"order":0, +"cast_id":11, +"url":"http://www.themoviedb.org/person/54525", +"profile":""}, +{"name":"Paco Plaza", +"job":"Screenplay", +"department":"Writing", +"character":"", +"id":54526, +"order":0, +"cast_id":12, +"url":"http://www.themoviedb.org/person/54526", +"profile":""}, +{"name":"Luis Berdejo", +"job":"Screenplay", +"department":"Writing", +"character":"", +"id":54527, +"order":0, +"cast_id":13, +"url":"http://www.themoviedb.org/person/54527", +"profile":""}, +{"name":"Julio Fern\u00e1ndez", +"job":"Producer", +"department":"Production", +"character":"", +"id":17083, +"order":0, +"cast_id":14, +"url":"http://www.themoviedb.org/person/17083", +"profile":""}, +{"name":"Carlos Fern\u00e1ndez", +"job":"Executive Producer", +"department":"Production", +"character":"", +"id":37950, +"order":0, +"cast_id":15, +"url":"http://www.themoviedb.org/person/37950", +"profile":""}, +{"name":"Alberto Marini", +"job":"Producer", +"department":"Production", +"character":"", +"id":54528, +"order":0, +"cast_id":16, +"url":"http://www.themoviedb.org/person/54528", +"profile":""}, +{"name":"Pablo Rosso", +"job":"Director of Photography", +"department":"Camera", +"character":"", +"id":54520, +"order":0, +"cast_id":17, +"url":"http://www.themoviedb.org/person/54520", +"profile":""}, +{"name":"Gemma Fauria", +"job":"Set Designer", +"department":"Art", +"character":"", +"id":54529, +"order":0, +"cast_id":18, +"url":"http://www.themoviedb.org/person/54529", +"profile":""}, +{"name":"David Gallart", +"job":"Editor", +"department":"Editing", +"character":"", +"id":28500, +"order":0, +"cast_id":19, +"url":"http://www.themoviedb.org/person/28500", +"profile":""}, +{"name":"Xavier Mas", +"job":"Sound Designer", +"department":"Sound", +"character":"", +"id":54530, +"order":0, +"cast_id":20, +"url":"http://www.themoviedb.org/person/54530", +"profile":""}, +{"name":"Gl\u00f2ria Viguer", +"job":"Costume Design", +"department":"Costume \u0026 Make-Up", +"character":"", +"id":54531, +"order":0, +"cast_id":21, +"url":"http://www.themoviedb.org/person/54531", +"profile":""}], +"version":150, +"last_modified_at":"2011-02-20 23:16:57"}] + */ + + public void mapToPerson(Map data, Person person) { + try { + person.setName((String) data.get("name")); + person.setBirthday(toDate(data, "birthday", "yyyy-MM-dd")); + person.setBirthplace((String) data.get("birthplace")); + String biography = (String) data.get("biography"); + person.setBiography(limit(biography,500)); + person.setVersion((Integer) data.get("version")); + person.setProfileImageUrl(selectImageUrl((List) data.get("profile"), "profile", "profile")); + person.setLastModified(toDate(data,"last_modified_at","yyyy-MM-dd HH:mm:ss")); + } catch (Exception e) { + throw new MovieDbException("Failed to map json for person", e); + } + } + + private String limit(String text, int limit) { + if (text==null || text.length() < limit) return text; + return text.substring(0,limit); + } + +/* + [{"popularity":3, +"name":"Glenn Strange", +"known_as":[{"name":"George Glenn Strange"}, +{"name":"Glen Strange"}, +{"name":"Glen 'Peewee' Strange"}, +{"name":"Peewee Strange"}, +{"name":"'Peewee' Strange"}], +"id":30112, +"biography":"", +"known_movies":4, +"birthday":"1899-08-16", +"birthplace":"Weed, + New Mexico, + USA", +"url":"http://www.themoviedb.org/person/30112", +"filmography":[{"name":"Bud Abbott Lou Costello Meet Frankenstein", +"id":3073, +"job":"Actor", +"department":"Actors", +"character":"The Frankenstein Monster", +"cast_id":23, +"url":"http://www.themoviedb.org/movie/3073", +"poster":"http://cf1.imgobject.com/posters/4ca/4bc9185d017a3c57fe0094ca/bud-abbott-lou-costello-meet-frankenstein-cover.jpg", +"adult":false, +"release":"1948-06-15"}, +{"name":"Arizona Days (1937)", +"id":22367, +"job":"Actor", +"department":"Actors", +"character":"Henchman Pete ", +"cast_id":12, +"url":"http://www.themoviedb.org/movie/22367", +"poster":"", +"adult":false, +"release":"1937-01-30"}, +{"name":"House of Dracula", +"id":30793, +"job":"Actor", +"department":"Actors", +"character":"The Frankenstein Monster", +"cast_id":3, +"url":"http://www.themoviedb.org/movie/30793", +"poster":"http://cf1.imgobject.com/posters/7cf/4bc97660017a3c57fe0367cf/house-of-dracula-cover.jpg", +"adult":false, +"release":"1945-01-01"}, +{"name":"The Fargo Kid", +"id":38704, +"job":"Actor", +"department":"Actors", +"character":"Sheriff Dave", +"cast_id":24, +"url":"http://www.themoviedb.org/movie/38704", +"poster":"http://cf1.imgobject.com/posters/04e/4d74018a5e73d6021d00004e/the-fargo-kid-cover.jpg", +"adult":false, +"release":"1940-12-06"}], +"profile":[], +"version":19, +"last_modified_at":"2011-03-07 13:02:35"}] +*/ + + + public Roles mapToRole(String roleString) { + if (roleString.equals("Actor")) { + return Roles.ACTS_IN; + } + if (roleString.equals("Director")) { + return Roles.DIRECTED; + } + return null; + } +} diff --git a/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/movieimport/MovieDbLocalStorage.java b/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/movieimport/MovieDbLocalStorage.java new file mode 100644 index 000000000..199c47986 --- /dev/null +++ b/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/movieimport/MovieDbLocalStorage.java @@ -0,0 +1,95 @@ +package org.neo4j.cineasts.movieimport; + +import org.codehaus.jackson.map.ObjectMapper; + +import java.io.*; +import java.util.Collections; +import java.util.List; +import java.util.Map; + +public class MovieDbLocalStorage { + + private String storagePath; + protected ObjectMapper mapper; + + public MovieDbLocalStorage(String storagePath) { + this.storagePath = storagePath; + ensureStorageDirectoryExists(); + mapper = new ObjectMapper(); + } + + private void ensureStorageDirectoryExists() { + File storageDirectory = new File(storagePath); + if (!storageDirectory.isDirectory()) { + if (!storageDirectory.mkdirs()) { + throw new RuntimeException("Failed to create storage dir"); + } + } + } + + public boolean hasMovie(String movieId) { + return fileForMovie(movieId).exists(); + } + + private File fileForMovie(String movieId) { + return new File(storagePath, String.format("movie_%s.json", movieId)); + } + + public Map loadMovie(String movieId) { + File storageFile = fileForMovie(movieId); + return loadJsonValue(storageFile); + } + + private Map loadJsonValue(File storageFile) { + try { + final Object value = mapper.readValue(storageFile, Object.class); + if (value instanceof List) { + List list = (List) value; + if (list.isEmpty() || list.get(0).equals("Nothing found.")) return Collections.singletonMap("not_found", System.currentTimeMillis()); + return asMap(list.get(0)); + } + return asMap(value); + } catch (Exception e) { + throw new MovieDbException("Failed to load JSON from storage for file " + storageFile.getPath(), e); + } + } + + private Map asMap(Object value) { + if (value instanceof Map) { + return (Map) value; + } + final String typeInformation = value == null ? "null" : value.getClass().getSimpleName(); + throw new MovieDbException("Wrong movie data format, expected Map/JSON-Object but was "+ typeInformation); + } + + public void storeMovie(String movieId, Object movieData) { + File storageFile = fileForMovie(movieId); + storeJsonValue(movieData, storageFile); + } + + private void storeJsonValue(Object jsonData, File storageFile) { + try { + mapper.writeValue(storageFile,jsonData); + } catch (Exception e) { + throw new MovieDbException("Failed to store JSON to storage for file " + storageFile.getPath(), e); + } + } + + public boolean hasPerson(String personId) { + return fileForPerson(personId).exists(); + } + + private File fileForPerson(String personId) { + return new File(storagePath, String.format("person_%s.json", personId)); + } + + public Map loadPerson(String personId) { + File storageFile = fileForPerson(personId); + return loadJsonValue(storageFile); + } + + public void storePerson(String personId, Object personJson) { + File storageFile = fileForPerson(personId); + storeJsonValue(personJson, storageFile); + } +} diff --git a/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/movieimport/MovieImporter.java b/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/movieimport/MovieImporter.java new file mode 100644 index 000000000..0fa2c0fe5 --- /dev/null +++ b/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/movieimport/MovieImporter.java @@ -0,0 +1,50 @@ +package org.neo4j.cineasts.movieimport; + +import org.springframework.context.support.FileSystemXmlApplicationContext; + +import java.util.Collections; +import java.util.Map; + +/** + * @author mh + * @since 04.10.11 + */ +public class MovieImporter { + + private final MovieDbImportService importer; + + public static void main(String[] args) { + final FileSystemXmlApplicationContext ctx = new FileSystemXmlApplicationContext("src/main/webapp/WEB-INF/applicationContext.xml"); + try { + final MovieDbImportService importer = ctx.getBean(MovieDbImportService.class); + final MovieImporter movieImporter = new MovieImporter(importer); + movieImporter.runImport(getMovieIdsToImport(args)); + } finally { + ctx.close(); + } + } + + public MovieImporter(MovieDbImportService importer) { + this.importer = importer; + } + + private void runImport(Map movieIdsToImport) { + final long start = System.currentTimeMillis(); + final Map result = importer.importMovies(movieIdsToImport); + final long time = System.currentTimeMillis() - start; + for (Map.Entry movie : result.entrySet()) { + System.out.println(movie.getKey() + "\t" + movie.getValue()); + } + System.out.println("Imported movies took "+ time+" ms."); + } + + private static Map getMovieIdsToImport(String[] args) { + if (args.length == 0) { + throw new IllegalArgumentException("Usage: MovieImporter 1 10000\nWorking Directory should be the cineasts directory with the json files in data/json."); + } + if (args.length == 1) { + return Collections.singletonMap(Integer.valueOf(args[0]), Integer.valueOf(args[0])); + } + return Collections.singletonMap(Integer.valueOf(args[0]), Integer.valueOf(args[1])); + } +} diff --git a/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/repository/MovieRepository.java b/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/repository/MovieRepository.java new file mode 100644 index 000000000..824479306 --- /dev/null +++ b/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/repository/MovieRepository.java @@ -0,0 +1,31 @@ +package org.neo4j.cineasts.repository; + +import org.neo4j.cineasts.domain.Movie; +import org.neo4j.cineasts.domain.MovieRecommendation; +import org.neo4j.cineasts.domain.User; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.neo4j.annotation.Query; +import org.springframework.data.neo4j.repository.GraphRepository; +import org.springframework.data.neo4j.repository.NamedIndexRepository; + +import java.util.List; + +/** + * @author mh + * @since 02.04.11 + */ +public interface MovieRepository extends GraphRepository, NamedIndexRepository { + Movie findById(String id); + + Page findByTitleLike(String title, Pageable page); + + @Query("start user=node({_0}) " + + " match user-[r:RATED]->movie<-[r2:RATED]-other-[r3:RATED]->otherMovie " + + " where r.stars >= 3 and r2.stars >= 3 and r3.stars >= 3 " + + " return otherMovie, avg(r3.stars) " + + " order by avg(r3.stars) desc, count(*) desc" + + " limit 10") + List getRecommendations(User user); + +} diff --git a/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/repository/PersonRepository.java b/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/repository/PersonRepository.java new file mode 100644 index 000000000..65fbc3b2c --- /dev/null +++ b/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/repository/PersonRepository.java @@ -0,0 +1,12 @@ +package org.neo4j.cineasts.repository; + +import org.neo4j.cineasts.domain.Person; +import org.springframework.data.neo4j.repository.GraphRepository; + +/** + * @author mh + * @since 02.04.11 + */ +public interface PersonRepository extends GraphRepository { + Person findById(String id); +} diff --git a/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/repository/UserRepository.java b/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/repository/UserRepository.java new file mode 100644 index 000000000..d879532be --- /dev/null +++ b/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/repository/UserRepository.java @@ -0,0 +1,11 @@ +package org.neo4j.cineasts.repository; + +import org.neo4j.cineasts.domain.User; +import org.springframework.data.neo4j.repository.GraphRepository; + +/** + * @author mh + * @since 02.04.11 + */ +public interface UserRepository extends GraphRepository { +} diff --git a/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/service/CineastsRepository.java b/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/service/CineastsRepository.java new file mode 100644 index 000000000..da2933071 --- /dev/null +++ b/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/service/CineastsRepository.java @@ -0,0 +1,19 @@ +package org.neo4j.cineasts.service; + +import org.neo4j.cineasts.repository.MovieRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Repository; +import org.springframework.transaction.annotation.Transactional; + +/** + * @author mh + * @since 04.03.11 + */ +@Repository +@Transactional +public class CineastsRepository { + + @Autowired private MovieRepository movieRepository; + + +} diff --git a/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/service/CineastsUserDetails.java b/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/service/CineastsUserDetails.java new file mode 100644 index 000000000..0bad6f7c3 --- /dev/null +++ b/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/service/CineastsUserDetails.java @@ -0,0 +1,62 @@ +package org.neo4j.cineasts.service; + +import org.neo4j.cineasts.domain.User; +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.userdetails.UserDetails; + +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; + +/** +* @author mh +* @since 07.03.11 +*/ +public class CineastsUserDetails implements UserDetails { + private final User user; + + public CineastsUserDetails(User user) { + this.user = user; + } + + @Override + public Collection getAuthorities() { + User.Roles[] roles = user.getRole(); + if (roles ==null) return Collections.emptyList(); + return Arrays.asList(roles); + } + + @Override + public String getPassword() { + return user.getPassword(); + } + + @Override + public String getUsername() { + return user.getLogin(); + } + + @Override + public boolean isAccountNonExpired() { + return true; + } + + @Override + public boolean isAccountNonLocked() { + return true; + } + + @Override + public boolean isCredentialsNonExpired() { + return true; + } + + @Override + public boolean isEnabled() { + return true; + } + + public User getUser() { + return user; + } +} diff --git a/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/service/CineastsUserDetailsService.java b/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/service/CineastsUserDetailsService.java new file mode 100644 index 000000000..3f4e81a67 --- /dev/null +++ b/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/service/CineastsUserDetailsService.java @@ -0,0 +1,77 @@ +package org.neo4j.cineasts.service; + +import org.neo4j.cineasts.domain.User; +import org.neo4j.cineasts.repository.UserRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.dao.DataAccessException; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContext; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.security.core.userdetails.UsernameNotFoundException; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +/** + * @author mh + * @since 06.03.11 + */ +@Service +public class CineastsUserDetailsService implements UserDetailsService { + + @Autowired + private UserRepository userRepository; + + @Override + public UserDetails loadUserByUsername(String login) throws UsernameNotFoundException, DataAccessException { + final User user = findUser(login); + if (user==null) throw new UsernameNotFoundException("Username not found",login); + return new CineastsUserDetails(user); + } + + public User findUser(String login) { + return userRepository.findByPropertyValue("login",login); + } + + + public User getUserFromSession() { + SecurityContext context = SecurityContextHolder.getContext(); + Authentication authentication = context.getAuthentication(); + Object principal = authentication.getPrincipal(); + if (principal instanceof CineastsUserDetails) { + CineastsUserDetails userDetails = (CineastsUserDetails) principal; + return userDetails.getUser(); + } + return null; + } + + @Transactional + public User register(String login, String name, String password) { + User found = findUser(login); + if (found!=null) throw new RuntimeException("Login already taken: "+login); + if (name==null || name.isEmpty()) throw new RuntimeException("No name provided."); + if (password==null || password.isEmpty()) throw new RuntimeException("No password provided."); + User user=userRepository.save(new User(login,name,password,User.Roles.ROLE_USER)); + setUserInSession(user); + return user; + } + + private void setUserInSession(User user) { + SecurityContext context = SecurityContextHolder.getContext(); + CineastsUserDetails userDetails = new CineastsUserDetails(user); + UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(userDetails, user.getPassword(),userDetails.getAuthorities()); + context.setAuthentication(authentication); + + } + + @Transactional + public void addFriend(String login) { + User friend = findUser(login); + User user = getUserFromSession(); + if (!user.equals(friend)) { + user.addFriend(friend); + } + } +} diff --git a/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/service/DatabasePopulator.java b/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/service/DatabasePopulator.java new file mode 100644 index 000000000..00740c8b1 --- /dev/null +++ b/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/service/DatabasePopulator.java @@ -0,0 +1,55 @@ +package org.neo4j.cineasts.service; + +import org.neo4j.cineasts.repository.MovieRepository; +import org.neo4j.kernel.AbstractGraphDatabase; +import org.neo4j.cineasts.domain.*; +import org.neo4j.cineasts.movieimport.MovieDbImportService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.neo4j.support.Neo4jTemplate; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.List; + +import static java.util.Arrays.asList; + +/** + * @author mh + * @since 04.03.11 + */ +@Service +public class DatabasePopulator { + + @Autowired + Neo4jTemplate ctx; + @Autowired + MovieRepository movieRepository; + + @Autowired + MovieDbImportService importService; + private final static Logger log = LoggerFactory.getLogger(DatabasePopulator.class); + + @Transactional + public List populateDatabase() { + User me = new User("micha", "Micha", "password", User.Roles.ROLE_ADMIN,User.Roles.ROLE_USER).persist(); + User ollie = new User("ollie", "Olliver", "password",User.Roles.ROLE_USER).persist(); + me.addFriend(ollie); + List ids = asList(19995 , 194, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 13, 20526, 11, 1893, 1892, 1894, 168, 193, 200, 157, 152, 201, 154, 12155, 58, 285, 118, 22, 392, 5255, 568, 9800, 497, 101, 120, 121, 122); + List result=new ArrayList(ids.size()); + for (Integer id : ids) { + result.add(importService.importMovie(String.valueOf(id))); + } + + //me.rate(repository.getMovie("13"),5,"Inspiring"); + me.rate(movieRepository.findById("603"),5,"Best of the series"); + return result; + } + + @Transactional + public void cleanDb() { + new Neo4jDatabaseCleaner((AbstractGraphDatabase) ctx.getGraphDatabaseService()).cleanDb(); + } +} diff --git a/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/service/FriendsMovieRecommendations.java b/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/service/FriendsMovieRecommendations.java new file mode 100644 index 000000000..9f63b5b01 --- /dev/null +++ b/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/service/FriendsMovieRecommendations.java @@ -0,0 +1,74 @@ +package org.neo4j.cineasts.service; + +import org.neo4j.cineasts.domain.Movie; +import org.neo4j.cineasts.domain.Rating; +import org.neo4j.cineasts.domain.User; +import org.neo4j.graphdb.traversal.Evaluators; +import org.neo4j.graphdb.traversal.TraversalDescription; +import org.neo4j.kernel.Traversal; +import org.neo4j.kernel.Uniqueness; +import org.springframework.data.neo4j.core.EntityPath; + +import java.util.HashMap; +import java.util.Map; + +import static org.neo4j.graphdb.DynamicRelationshipType.withName; + +/** + * @author mh + * @since 04.04.11 + */ +public class FriendsMovieRecommendations { + private final Map ratings = new HashMap(); + private final int ratingDistance; + + public static class MovieRating { + int stars; + int count; + public void update(Rating rating, int weight) { + this.stars += rating.getStars()*weight; + this.count += weight; + } + public int average() { + return count == 0 ? 0 : stars / count; + } + public String toString() { + return String.valueOf(average()); + } + + } + public FriendsMovieRecommendations(int ratingDistance) { + this.ratingDistance = ratingDistance; + } + + public Map getRecommendationsFor(User user) { + TraversalDescription traversal = Traversal.description().breadthFirst() + .uniqueness(Uniqueness.NODE_GLOBAL).relationships(withName(User.FRIEND)) + .evaluator(Evaluators.toDepth(ratingDistance)).evaluator(Evaluators.excludeStartPosition()); + + Iterable result = user.findAllPathsByTraversal(traversal); + Iterable> friends = (Iterable>)result; + for (EntityPath path : friends) { + int weight = ratingDistance - path.length(); + User friend = path.endEntity(); + aggregateRatings(friend,weight); + } + for (Rating rating : user.getRatings()) { + ratings.remove(rating.getMovie()); + } + return ratings; + } + + private void aggregateRatings(User friend, int weight) { + for (Rating rating : friend.getRatings()) { + obtainRating(rating.getMovie()).update(rating, weight); + } + } + + private MovieRating obtainRating(Movie movie) { + if (!ratings.containsKey(movie)) { + ratings.put(movie, new MovieRating()); + } + return ratings.get(movie); + } +} diff --git a/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/service/MovieRecommendations.java b/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/service/MovieRecommendations.java new file mode 100644 index 000000000..ac262f5de --- /dev/null +++ b/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/service/MovieRecommendations.java @@ -0,0 +1,82 @@ +package org.neo4j.cineasts.service; + +import org.neo4j.cineasts.domain.Movie; +import org.neo4j.cineasts.domain.User; +import org.neo4j.cineasts.repository.MovieRepository; +import org.neo4j.graphdb.Path; +import org.neo4j.graphdb.Relationship; +import org.neo4j.graphdb.traversal.Evaluation; +import org.neo4j.graphdb.traversal.Evaluator; +import org.neo4j.graphdb.traversal.TraversalDescription; +import org.neo4j.kernel.Traversal; +import org.neo4j.kernel.Uniqueness; + +import java.util.HashMap; +import java.util.Map; + +import static org.neo4j.graphdb.Direction.OUTGOING; +import static org.neo4j.graphdb.DynamicRelationshipType.withName; + +/** +* @author mh +* @since 04.04.11 +*/ +class MovieRecommendations implements Evaluator { + private final Map ratings=new HashMap(); + private final int ratingDistance; + private MovieRepository movieRepository; + + public MovieRecommendations(MovieRepository movieRepository, int ratingDistance) { + this.movieRepository = movieRepository; + this.ratingDistance = ratingDistance; + } + + public Map getRecommendationsFor(User user) { + TraversalDescription traversal= Traversal.description().breadthFirst() + .uniqueness(Uniqueness.NODE_PATH) + .relationships(withName(User.FRIEND)) + .relationships(withName(User.RATED), OUTGOING) + .evaluator(this); + return averageRecommendations(user, traversal); + } + + private Map averageRecommendations(User user, TraversalDescription traversal) { // todo sort, limit + Map result=new HashMap(); + for (Movie movie : movieRepository.findAllByTraversal(user, traversal)) { + final int[] rating = ratings.get(movie.getNodeId()); + result.put(movie, rating[1]==0 ? 0 : rating[0]/rating[1]); + } + return result; + } + + @Override + public Evaluation evaluate(Path path) { + final int distance = path.length() - 1; + if (distance > ratingDistance) return Evaluation.EXCLUDE_AND_PRUNE; + Relationship rated = path.lastRelationship(); + if (rated != null && rated.getType().name().equals(User.RATED)) { + if (distance == 0) return Evaluation.EXCLUDE_AND_PRUNE; // my rated movies + updateRating(rated, distance); + return Evaluation.INCLUDE_AND_PRUNE; + } + System.out.println(); + return Evaluation.EXCLUDE_AND_CONTINUE; + } + + private void updateRating(Relationship rated, int distance) { + final long movieId = rated.getEndNode().getId(); + int[] rating = obtainRating(movieId); + + int weight = ratingDistance - distance; + final Integer stars = (Integer) rated.getProperty("stars", 0); + rating[0] += weight * stars; + rating[1] += weight; + } + + private int[] obtainRating(long movieId) { + if (!ratings.containsKey(movieId)) { + ratings.put(movieId,new int[2]); + } + return ratings.get(movieId); + } +} diff --git a/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/service/Neo4jDatabaseCleaner.java b/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/service/Neo4jDatabaseCleaner.java new file mode 100644 index 000000000..15d995459 --- /dev/null +++ b/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/service/Neo4jDatabaseCleaner.java @@ -0,0 +1,67 @@ +package org.neo4j.cineasts.service; + +import org.neo4j.graphdb.Direction; +import org.neo4j.graphdb.Node; +import org.neo4j.graphdb.Relationship; +import org.neo4j.graphdb.Transaction; +import org.neo4j.graphdb.index.IndexManager; +import org.neo4j.kernel.AbstractGraphDatabase; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; + +/** + * @author mh + * @since 02.03.11 + */ +public class Neo4jDatabaseCleaner { + private AbstractGraphDatabase graph; + + public Neo4jDatabaseCleaner(AbstractGraphDatabase graph) { + this.graph = graph; + } + + public Map cleanDb() { + Map result = new HashMap(); + Transaction tx = graph.beginTx(); + try { + removeNodes(result); + clearIndex(result); + tx.success(); + } finally { + tx.finish(); + } + return result; + } + + private void removeNodes(Map result) { + Node refNode = graph.getReferenceNode(); + int nodes = 0, relationships = 0; + for (Node node : graph.getAllNodes()) { + for (Relationship rel : node.getRelationships(Direction.OUTGOING)) { + rel.delete(); + relationships++; + } + if (!refNode.equals(node)) { + node.delete(); + nodes++; + } + } + result.put("nodes", nodes); + result.put("relationships", relationships); + + } + + private void clearIndex(Map result) { + IndexManager indexManager = graph.index(); + result.put("node-indexes", Arrays.asList(indexManager.nodeIndexNames())); + result.put("relationship-indexes", Arrays.asList(indexManager.relationshipIndexNames())); + for (String ix : indexManager.nodeIndexNames()) { + indexManager.forNodes(ix).delete(); + } + for (String ix : indexManager.relationshipIndexNames()) { + indexManager.forRelationships(ix).delete(); + } + } +} diff --git a/spring-data-neo4j-examples/cineasts/src/main/resources/log4j.properties b/spring-data-neo4j-examples/cineasts/src/main/resources/log4j.properties new file mode 100644 index 000000000..37867140a --- /dev/null +++ b/spring-data-neo4j-examples/cineasts/src/main/resources/log4j.properties @@ -0,0 +1,7 @@ +log4j.rootLogger=warn, stdout + +log4j.appender.stdout=org.apache.log4j.ConsoleAppender +log4j.appender.stdout.layout=org.apache.log4j.PatternLayout + +#log4j.category.org.springframework.web=DEBUG + diff --git a/spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/applicatioContext-security.xml b/spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/applicatioContext-security.xml new file mode 100644 index 000000000..9f1321d68 --- /dev/null +++ b/spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/applicatioContext-security.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/applicationContext.xml b/spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/applicationContext.xml new file mode 100644 index 000000000..bff684ee6 --- /dev/null +++ b/spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/applicationContext.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/decorators.xml b/spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/decorators.xml new file mode 100644 index 000000000..1dab375ce --- /dev/null +++ b/spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/decorators.xml @@ -0,0 +1,8 @@ + + + / + + + /* + + \ No newline at end of file diff --git a/spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/dispatcherServlet-servlet.xml b/spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/dispatcherServlet-servlet.xml new file mode 100644 index 000000000..2f428fc98 --- /dev/null +++ b/spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/dispatcherServlet-servlet.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/views/actors/show.jsp b/spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/views/actors/show.jsp new file mode 100644 index 000000000..fffb8c52e --- /dev/null +++ b/spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/views/actors/show.jsp @@ -0,0 +1,36 @@ +<%@ page session="false" %> +<%@ taglib uri="http://www.springframework.org/tags" prefix="s" %> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> +<%--@elvariable id="actor" type="org.neo4j.cineasts.domain.Actor"--%> +<%--@elvariable id="role" type="org.neo4j.cineasts.domain.Role"--%> + + +
+
+
+
+

${actor.name}

+

Born in ${actor.birthplace}.

+
+
+
+
+

Biography

+

${actor.biography}

+

Roles

+ + + +
+
+ +

Actor cannot be found.

+
+
diff --git a/spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/views/auth/deniedpage.jsp b/spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/views/auth/deniedpage.jsp new file mode 100644 index 000000000..7057a169d --- /dev/null +++ b/spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/views/auth/deniedpage.jsp @@ -0,0 +1,7 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + + + Access denied + + Unfortunately you are not authorized to see this page. + diff --git a/spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/views/auth/loginpage.jsp b/spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/views/auth/loginpage.jsp new file mode 100644 index 000000000..4ac9ab507 --- /dev/null +++ b/spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/views/auth/loginpage.jsp @@ -0,0 +1,36 @@ +<%@ page import="org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter" %> +<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> +<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form" %> +<%@ taglib uri="http://www.springframework.org/tags" prefix="spring" %> + +<%@ page language="java" contentType="text/html; charset=UTF-8" +pageEncoding="UTF-8"%> + + + + + Login + + + +

Login

+
${error}
+ +
+

+ + +

+

+ + +

+

+ Remember me +

+ +

+ Register + + diff --git a/spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/views/auth/registerpage.jsp b/spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/views/auth/registerpage.jsp new file mode 100644 index 000000000..4a9c2d6e0 --- /dev/null +++ b/spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/views/auth/registerpage.jsp @@ -0,0 +1,37 @@ +<%@ page import="org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter" %> +<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> +<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form" %> +<%@ taglib uri="http://www.springframework.org/tags" prefix="spring" %> + +<%@ page language="java" contentType="text/html; charset=UTF-8" +pageEncoding="UTF-8"%> + + + + + Login + + + +

Login

+
${error}
+ +
+

+ + +

+

+ + +

+

+ + +

+ +
+
+ Login + + diff --git a/spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/views/decorators/frontpage.jsp b/spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/views/decorators/frontpage.jsp new file mode 100644 index 000000000..4d82b031f --- /dev/null +++ b/spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/views/decorators/frontpage.jsp @@ -0,0 +1,30 @@ +<%@ taglib uri="http://www.opensymphony.com/sitemesh/decorator" + prefix="decorator" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %> + + + + + Cineasts.net - <decorator:title default="Welcome" /> + + + <%@ include file="/WEB-INF/views/includes/style.jsp" %> + <%@ include file="/WEB-INF/views/includes/js.jsp" %> + + + +
+ +
+ <%@ include file="/WEB-INF/views/includes/footer.jsp" %> + + diff --git a/spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/views/decorators/main.jsp b/spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/views/decorators/main.jsp new file mode 100644 index 000000000..96d6d65c6 --- /dev/null +++ b/spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/views/decorators/main.jsp @@ -0,0 +1,31 @@ +<%@ taglib uri="http://www.opensymphony.com/sitemesh/decorator" + prefix="decorator" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %> + + + + + Cineasts.net - <decorator:title default="Welcome" /> + + + <%@ include file="/WEB-INF/views/includes/style.jsp" %> + <%@ include file="/WEB-INF/views/includes/js.jsp" %> + + + +
+ +
+ <%@ include file="/WEB-INF/views/includes/footer.jsp" %> + + \ No newline at end of file diff --git a/spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/views/import/result.jsp b/spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/views/import/result.jsp new file mode 100644 index 000000000..5c9f63b43 --- /dev/null +++ b/spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/views/import/result.jsp @@ -0,0 +1,15 @@ +<%@ page session="false" %> +<%@ taglib uri="http://www.springframework.org/tags" prefix="s" %> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> + +

Results for importing movies: "${ids}"

+ +

Imported of ${fn:length(movies)} movies took ${duration} seconds.

+ +
+ +
${entry.key}
+
${entry.value}
+
+
diff --git a/spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/views/includes/footer.jsp b/spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/views/includes/footer.jsp new file mode 100644 index 000000000..57861b0d0 --- /dev/null +++ b/spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/views/includes/footer.jsp @@ -0,0 +1,5 @@ + \ No newline at end of file diff --git a/spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/views/includes/header-frontpage.jsp b/spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/views/includes/header-frontpage.jsp new file mode 100644 index 000000000..c851575ab --- /dev/null +++ b/spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/views/includes/header-frontpage.jsp @@ -0,0 +1,3 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" session="false" %> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> + diff --git a/spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/views/includes/header.jsp b/spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/views/includes/header.jsp new file mode 100644 index 000000000..c851575ab --- /dev/null +++ b/spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/views/includes/header.jsp @@ -0,0 +1,3 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" session="false" %> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> + diff --git a/spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/views/includes/header_login.jsp b/spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/views/includes/header_login.jsp new file mode 100644 index 000000000..39d5c4d3e --- /dev/null +++ b/spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/views/includes/header_login.jsp @@ -0,0 +1,24 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" session="false" %> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> + + diff --git a/spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/views/includes/js.jsp b/spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/views/includes/js.jsp new file mode 100644 index 000000000..e69de29bb diff --git a/spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/views/includes/links.jsp b/spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/views/includes/links.jsp new file mode 100644 index 000000000..e69de29bb diff --git a/spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/views/includes/navigation.jsp b/spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/views/includes/navigation.jsp new file mode 100644 index 000000000..484da2378 --- /dev/null +++ b/spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/views/includes/navigation.jsp @@ -0,0 +1,15 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" session="false" %> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> + + diff --git a/spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/views/includes/search.jsp b/spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/views/includes/search.jsp new file mode 100644 index 000000000..0aebd4917 --- /dev/null +++ b/spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/views/includes/search.jsp @@ -0,0 +1,5 @@ + diff --git a/spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/views/includes/style.jsp b/spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/views/includes/style.jsp new file mode 100644 index 000000000..1d77d9f54 --- /dev/null +++ b/spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/views/includes/style.jsp @@ -0,0 +1,4 @@ + + \ No newline at end of file diff --git a/spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/views/index.jsp b/spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/views/index.jsp new file mode 100644 index 000000000..049b8fe23 --- /dev/null +++ b/spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/views/index.jsp @@ -0,0 +1,11 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" session="false" %> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +
+

Welcome to Cineasts.net

+
+
+ + +
+
+
\ No newline at end of file diff --git a/spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/views/movies/list.jsp b/spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/views/movies/list.jsp new file mode 100644 index 000000000..0aabbaaf0 --- /dev/null +++ b/spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/views/movies/list.jsp @@ -0,0 +1,26 @@ +<%@ page session="false" %> +<%@ taglib uri="http://www.springframework.org/tags" prefix="s" %> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> + +

Results for "${query}"

+ + + + + + +

No movies found for query "${query}".

+
+
diff --git a/spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/views/movies/show.jsp b/spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/views/movies/show.jsp new file mode 100644 index 000000000..9e47500bc --- /dev/null +++ b/spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/views/movies/show.jsp @@ -0,0 +1,170 @@ +<%@ page session="false" %> +<%@ taglib uri="http://www.springframework.org/tags" prefix="s" %> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> + + +${movie.title} + + + +
+
+ <%--@elvariable id="movie" type="org.neo4j.cineasts.domain.Movie"--%> + + +
"/>
+
+

${movie.title} (${movie.year}) ${stars} stars

+
+

<${movie.tagline}

+
+
+ +
+

Movie facts

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Language${movie.language}
Runtime${movie.runtime} Minutes
Genre${movie.genre}
Other sitesTheMovieDb.org | + IMDb +
Buy DVDs & Books">Amazon | + ">CineButler +
In Cinemas">Google Movies +
+
+ +
+ +

Trailers

+ + + + + + + + + +
+
+ +
+

Release info

+ +
    +
  • + + + + + + + + + + + + + + + +
    Released
    Homepage
    Studio${movie.studio}
    +
  • +
+
+ +
+
+
+
+

Overview

+

${movie.description}

+ +

Cast

+ + +
+
+ +

Reviews

+ + +
"> +

Give + + + + to "${movie.title}" saying: + + + +

+
+ +
+ + + +
+
+
+
+ +

No movie found

+

The movie you were looking for could not be found.

+
+
+ diff --git a/spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/views/user/index.jsp b/spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/views/user/index.jsp new file mode 100644 index 000000000..9a852cc1e --- /dev/null +++ b/spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/views/user/index.jsp @@ -0,0 +1,104 @@ +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ page contentType="text/html;charset=UTF-8" language="java" %> +<%--@elvariable id="user" type="org.neo4j.cineasts.domain.User"--%> +<%--@elvariable id="recommendations" type="java.util.List"--%> +<%--@elvariable id="recommendation" type="org.neo4j.cineasts.domain.MovieRecommendation"--%> + + + Profile + + + +
+
+
" />
+
+

Hi ${user.name}!

+

${user.info}

+
+
+
+ + + +

Your friends

+
    + +
  • + ">" /> +
    +

    ">

    +

    ${friend.info}

    +
    +
    +
  • +
    +
+
+ +

You don't have any friends yet

+
+
+
+
+
+
+

Your rated movies

+
+ +
+

${fn:length(ratings)}

+
+ +
+ +
+

Your recommendations

+
+
+

${fn:length(recommendations)}

+
+ +
+
+
+ + + diff --git a/spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/views/user/public.jsp b/spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/views/user/public.jsp new file mode 100644 index 000000000..9b46bae21 --- /dev/null +++ b/spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/views/user/public.jsp @@ -0,0 +1,86 @@ +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> + +<%@ page contentType="text/html;charset=UTF-8" language="java" %> +<%--@elvariable id="user" type="org.neo4j.cineasts.domain.User"--%> + + + Profile for ${name} + + +
+
+
" />
+
+

${name}

+

${profiled.info}

+
+
+
+ +

${name}'s friends

+ + + + + +
    + +
  • + ">" /> +
    +

    ">

    +

    ${friend.info}

    +
    +
    +
  • +
    +
+
+ + ${name} has no friends. + +
+
+ +
+ Add ${name} as a friend. +
+
+
+
+ +
+
+
+

${name}'s rated movies

+
+
+

${fn:length(ratings)}

+
+ + + +
+
+
+ + diff --git a/spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/web.xml b/spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 000000000..f2420a9a0 --- /dev/null +++ b/spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,58 @@ + + + + + contextConfigLocation + + /WEB-INF/applicatioContext-security.xml + /WEB-INF/applicationContext.xml + + + + + org.springframework.web.context.ContextLoaderListener + + + + sitemesh + + com.opensymphony.module.sitemesh.filter.PageFilter + + + + + springSecurityFilterChain + org.springframework.web.filter.DelegatingFilterProxy + + + + springSecurityFilterChain + /* + + + + sitemesh + /* + + + + dispatcherServlet + org.springframework.web.servlet.DispatcherServlet + 1 + + + + dispatcherServlet + / + + + + index.jsp + + + + 60 + + diff --git a/spring-data-neo4j-examples/cineasts/src/main/webapp/images/actor-picture-frame.png b/spring-data-neo4j-examples/cineasts/src/main/webapp/images/actor-picture-frame.png new file mode 100644 index 0000000000000000000000000000000000000000..cb58bc5a996326f051504ed229f4776c2b613e48 GIT binary patch literal 33009 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�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 literal 0 HcmV?d00001 diff --git a/spring-data-neo4j-examples/cineasts/src/main/webapp/images/cineasts.png b/spring-data-neo4j-examples/cineasts/src/main/webapp/images/cineasts.png new file mode 100644 index 0000000000000000000000000000000000000000..e7778456bbc4a477b0dcfc1eef7baecb719b8a10 GIT binary patch literal 30853 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 D(w1J7 literal 0 HcmV?d00001 diff --git a/spring-data-neo4j-examples/cineasts/src/main/webapp/images/filmroll-horizontal.png b/spring-data-neo4j-examples/cineasts/src/main/webapp/images/filmroll-horizontal.png new file mode 100644 index 0000000000000000000000000000000000000000..e4d71d2c25e857a7851d796bea3906304821547a GIT binary patch literal 538 zcmV+#0_FXQP)P001!v1^@s6FBSqg00001b5ch_0Itp) z=>Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RW0|*NZ0FT0j-v9sstVu*cR9M5^ zSi5qsp$oF_W?gNr?UaRW_T=$jW-XmgDg#=kqyL zPbkY}<)jLLR8=*nXmQeQ8ZIC(vJR0*I5qj0bgKV_7^9d36zLOqHe?RRPl$+v1ZAwu zd8y=G%6ldhUPIl#!(_V)KKUh=%f+M=P&r|=XebtoMJe0uwpUglZTl&8{Vq-O;ohJ> z>~8fI_Y4#B{yT^)E2$BvjLL2X1je|;s2%sQ_g9WUWuR+(FtyD*atU_Og&atjy$Ryj zCzNM*bC{!@3ku;s(U?xqg=h6{j)+wEH1p7fIee1sg9Ni8;jNe#`AE8#mf~=DOOB~& ch3RI$0iGs``=t=je*gdg07*qoM6N<$f=R>aE&u=k literal 0 HcmV?d00001 diff --git a/spring-data-neo4j-examples/cineasts/src/main/webapp/images/filmroll-vertical-full.png b/spring-data-neo4j-examples/cineasts/src/main/webapp/images/filmroll-vertical-full.png new file mode 100644 index 0000000000000000000000000000000000000000..3270bbd07b84744374d212305e3f8d4d1d350193 GIT binary patch literal 4375 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 R({TU*002ovPDHLkV1liQj*$QW literal 0 HcmV?d00001 diff --git a/spring-data-neo4j-examples/cineasts/src/main/webapp/images/header-curtain.png b/spring-data-neo4j-examples/cineasts/src/main/webapp/images/header-curtain.png new file mode 100644 index 0000000000000000000000000000000000000000..5b23f8ec7b93ea77f375968af98b0b5ed7062cfb GIT binary patch literal 1023 zcmVPx#32;bRa{vGf6951U69E94oEQKA00(qQO+^RW0|*Zp7E-ZK2LJ#Akx4{BR9M5k zSle#pI1Ce&{{I&@;ylO~%65XxV6jDu_9V8f8!5T~jP{>@VfoC%vxlYckN;uO$E_c1 z;V;kQC$s3^bupHY_+kb%p2Y^aIQJnr+quP8jQ3c5#D6<0^P28IFOqzMDad*2{5cUGCpmr^JI<{5D*~tXD|yyH_4)Tg?Ve z(q;tBBJ)2mAdZvT4?J);YVSYJs`~MbkCb2f`4P0Z)9)ac8Y(tX@$T(?!ELQ;_U8#7hFP;0X`q*7_9bggX?EZFNA|iI?~eZkG@P~uN4@9>%|owk zccI7oWaFd-sPkpyOmTSNcj5S_S)={g_Z8H@9)_ZA+91=Ve5@Eio#Wl-5H4sjuG(Q@ z29qN(&syhZ;iqVLRlW?JH+IP1#Hjm>t96QLhK4UIPxZblT)WS&o99+1n z!Bjb9Qd{EoS-G`a+`@F6^#jOqlU)`5shXe1)PsvlNCyfi|o%Aqd&Z*YGNzaH@ zMAZhWPa-=1?OJ-{C((4UY^~nI4t+oSo1*(jPRbVD7i98op9#O2qdPb;Bpb_WV^@v*dRbcUV_z<)lCP4Z z#bw~!ncXMF3}epJ`kaMp9`A3qYp#yhx|c=&zQv{7WCzZIVa_4Z479pW?}I4!xr#;A z(fML8#{1oSzYAiSFMYl0|Mh!1=Uq tvB?JvuSR0I8$b2a|MkTW55NAe>JM`kwISyHCg1=7002ovPDHLkV1nA(2BiQ1 literal 0 HcmV?d00001 diff --git a/spring-data-neo4j-examples/cineasts/src/main/webapp/images/header-splash-bg.png b/spring-data-neo4j-examples/cineasts/src/main/webapp/images/header-splash-bg.png new file mode 100644 index 0000000000000000000000000000000000000000..e4f78a20a7bba5f772984a9217f8c27a5de6bdf2 GIT binary patch literal 588 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ȒV`q=md(r{+r5yxk?=-^zA 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 UytTgP3jhEB07*qoM6N<$g6%V{y#N3J literal 0 HcmV?d00001 diff --git a/spring-data-neo4j-examples/cineasts/src/main/webapp/images/logo.png b/spring-data-neo4j-examples/cineasts/src/main/webapp/images/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..98fbfde7ce0ae144c5683b6da979eb8197b9e77a GIT binary patch literal 9129 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 literal 0 HcmV?d00001 diff --git a/spring-data-neo4j-examples/cineasts/src/main/webapp/images/logo/neo4j.png b/spring-data-neo4j-examples/cineasts/src/main/webapp/images/logo/neo4j.png new file mode 100644 index 0000000000000000000000000000000000000000..c96c298edbd2332b6f5cfdbcb8a1a2f9728978f4 GIT binary patch literal 12651 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 literal 0 HcmV?d00001 diff --git a/spring-data-neo4j-examples/cineasts/src/main/webapp/images/logo/springdata.jpg b/spring-data-neo4j-examples/cineasts/src/main/webapp/images/logo/springdata.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a45ae83dab5181c86be37ec03c8f04d7a628d5ea GIT binary patch literal 5022 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 literal 0 HcmV?d00001 diff --git a/spring-data-neo4j-examples/cineasts/src/main/webapp/images/logo/springdatagraph.png b/spring-data-neo4j-examples/cineasts/src/main/webapp/images/logo/springdatagraph.png new file mode 100644 index 0000000000000000000000000000000000000000..df46c007f7d19492f77406420d6acc821cf5e29b GIT binary patch literal 11018 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 NYD(IQRY=RQ{{jEkR1N?D literal 0 HcmV?d00001 diff --git a/spring-data-neo4j-examples/cineasts/src/main/webapp/images/neo4j.png b/spring-data-neo4j-examples/cineasts/src/main/webapp/images/neo4j.png new file mode 100644 index 0000000000000000000000000000000000000000..ee5cac71c710f846a596fd6bf839a476951c3397 GIT binary patch literal 12568 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 literal 0 HcmV?d00001 diff --git a/spring-data-neo4j-examples/cineasts/src/main/webapp/images/rated_1.png b/spring-data-neo4j-examples/cineasts/src/main/webapp/images/rated_1.png new file mode 100644 index 0000000000000000000000000000000000000000..48730c132f1bbe786fe9b64f5b4eb290d85722b4 GIT binary patch literal 1234 zcmV;@1TFiCP)Px#A#_DpbW?9;ba!ELWdKKVVQ^?^V?%Flc4cyOWpW@WNp5syY$M5u-cjT!@~_#TXNJ!!U$so~o+j=W_fWjmH2W(tnf#Oi>i^Y#L_FG|iGR zDH_u>O^5(V=wfbM5o6+gRM3WnT_sSw-X#b>IL)*JMM}~)of1pN+#o|z* zQ0T?aXV82vOj6K>gybel7IsvS7$CB1$hz3`gzJHRaM%>`?Ln) zcLZ%%*kvUX6c$x??Mh~~{gt4RT32M?!^ii+^9Ul1^ZO%-n@MU%Q~9IQd!L*0JC{z(&XgA;5+FguF>2-Bm^i67u>Xz_Slcpo*GYv-t!{smkz zt##A;q@WE8yPU?dx6h~>d`|tm(jMjSlxtw;=sRR{I%vbfE*G5rgBzwgt#&TE`4`Z> zVeQu=8q+rXXpQp$oD7u;hRQ@ri#4_=4<_o8l#Pv`hVsp<7qiHjC85?Zu_lZ{r7z$l zJWMXSC-N%lMba(+-E;M7AJ%Fy%pTnxaJvo^-pivVvp?XtbsV9pipTz>FIm%|0VN;8 zOBKc4eC2MqjY6d#;OxZ2Oez(@k!TBtR6ADz?`Eq`M;A2f=z_B!7Zu<>fU`X%kz$jA zlh>>!_NC%7ny_=TtOnmw_M# zZCKb<;xW~Eb_*f>EQi+Jw?TkAe0(q9+{F`loLKKP9vv160vtyW7z$67gQMdKgSW3j zT|ReA6xp6bMdje+8O@*#3%lH-3v!o$u_;w4bv+j0fOQ(oZ?A^_{{FE{IsDk*FBs>om?w wL!|6W8g@D0Br2kF5|so0TfYDR0RR6301{<(FQ0tb;s5{u07*qoM6N<$f+Dg&n*aa+ literal 0 HcmV?d00001 diff --git a/spring-data-neo4j-examples/cineasts/src/main/webapp/images/rated_2.png b/spring-data-neo4j-examples/cineasts/src/main/webapp/images/rated_2.png new file mode 100644 index 0000000000000000000000000000000000000000..b91aa33454f0847a1504d5e4232e41e59efbaa73 GIT binary patch literal 1331 zcmV-31Px#A#_DpbW?9;ba!ELWdKKVVQ^?^V?%Flc4cyOWpW@WNp5syY$a1w)8v zBw7naZ75WcT2P@CD$*!@Xu$^~V#E*d!3RZO6p9ZLC|Hl0uY%q(tMDI-eQ7-@h?3Q39p+ zKYSa${q76+^z$ol>Ww)V9q(HcaWo-c5D#1iaSI&Sk-7 zb@sj2L464L&`$sNAn+&U^R!l}watL9ZD6h_S@bD<1?@Ga(#v1&1eY|vrw-SC`&G^m zf=y#hgp7cPR5&!{Ya5s=(jkpRkTIjH5AW&>SLwi^2ViyeI?!kS`8xv^ z81uCa%oXXGK`A)R3``gnZUtA(4)vimiNbGic?`(P3oIpF2PHS zV=#Fjf_J`rO8$M~>>8Su3Y%oXW6i}^{~-fXdsA&sN}U-@Jao;>mxj6YI? z7hX9GKmGgzJiLEot=b#TWb3zX``QNPijwS)>aH*W-P`mxO(NdCa0d2IO{`BU5Hwy_ zMLBp#t!pNHZ3A;fx}Bst6LFc>|4sI{kuV&t;tRVw+otNauWewiNW(3aN^+J^BY0qY zaQ=1xS89Bko+p{|wGGS_=>~AN9~g;n`_RsOFY#7t46}3Op_<61d~E}BMQy+-7!e0| z4eVea{Rg-=utuAaFDrdXYK=4DYa5s=(jm>qkXEj8Z`+vv*}4Q_PrV3r1+~;1WwV&= zZOw&55o7HZ8}qdd%oXW=2Ke&Ti_kj|ex*X1N*sjR4dBUcfP`(x*ETR$l>24(HQC1q^Y0?u>A5E);8#z- z2zc*<8_f*4F7f;kJQKdQfw`hWNa7xbtT&5*=@`M{<%=-bY@CwCaOUt&5wJRMV#?Px zFjv$*VxYSDjNQ>w4Gv@#uhpMctt*}Vm9p7i0=^h3yX|Wmm@7&X ziS`i#RWoJNdcBj)Lw&#gzuM_mNrbB74Efpy=8DqAzg;`YghH&Zr@}BF%2fYQq-ncO pC}f9281uCa%oY6u009600|3Gx_E|S8=b8Wj002ovPDHLkV1fWRfXM&= literal 0 HcmV?d00001 diff --git a/spring-data-neo4j-examples/cineasts/src/main/webapp/images/rated_3.png b/spring-data-neo4j-examples/cineasts/src/main/webapp/images/rated_3.png new file mode 100644 index 0000000000000000000000000000000000000000..fe3eb1757f38f5384a8d678f5f24f51039a104c2 GIT binary patch literal 1336 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 Bigy42 literal 0 HcmV?d00001 diff --git a/spring-data-neo4j-examples/cineasts/src/main/webapp/images/rating-disabled.png b/spring-data-neo4j-examples/cineasts/src/main/webapp/images/rating-disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..32cfa2c85f44e65880d50ab0e30847bbd329c726 GIT binary patch literal 3489 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 P00000NkvXXu0mjf=iIsU literal 0 HcmV?d00001 diff --git a/spring-data-neo4j-examples/cineasts/src/main/webapp/images/searchbar-big-searchicon.png b/spring-data-neo4j-examples/cineasts/src/main/webapp/images/searchbar-big-searchicon.png new file mode 100644 index 0000000000000000000000000000000000000000..eca23c8e7b680c500fc8089c00a24061912a373c GIT binary patch literal 1495 zcmV;|1t|K7P)Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RW0|*Zu1nxN`QAP@k!{hOwynO51g-j$8Xm7uYXfz5{U3hNMG!2)_1+RBI2qB9PnMfqi+S&q9 z6lXiyb?5 zrcDTr3!}Zg9UR9&Q54<&($Z3F+xCeeNZnzHMxz)S8iXi{kR%C`Bmn@5ii)s%_ZM?! z?8=on*thR1L733x`{+00Z|koiXvoLhTH9i*SmfG4hcb3 z)t8`YTJs}{B6yyM-|x>H^6}%xx(En@fXd1}hBCXdat{b0nlGN`(ckaO?2R)zI`V%a z2wE1Glx%|8Y&PV$u&@xSszMY+?YBT607;S-TA+X$>{G9S(<1nq)GGv9W(L zisX|gf2TM?xyB(kZrrGYjKyN;?(WVA^8Wq%IzT}X;C6pt9CFPXHzGkZ{Gc-0ffam#n10Ff@9eAGC`Ej}4hsWc|9FnGK?Ao;(48v#SptrXdG)>QnILoqNSr(I%lTZ`|d-v|e;ltl%4ymdtYHMpTIQS>x z@%Zdb6a|{5VYONjjYhRSubbU&hs9z+I2_j6KAX*kyu3V|J=;9*8k}|zJAV8}^z`%~ z5{WGA$ten1Syq&lZAM>Tp9c7POLyhURjgXID)W)n=kwvji4%xKIK*PHv_lz1QLx+X z*sx&(>gyXYK0c1x+L|{$Bq0RXuXoG|I9Q z%S(Cv)YKFzDn3mq`ApEx&f9MUT`;5(J9FkVE?v3=j^omTc6D{91YHtH062NF370Ql zMmQW!J9gZ;(>v>%(vm>}z^PNG(AL&EC+NL=I z6D+YEJ$e+?)%(D*EM!?uxdcH#V`HQ7?~{vRb#--66a^P9{G2kPSy@@g&bBX~+%v7A zp&sYYpVxt!OeVP9Zrr`w2ZmvmNA8(+?AQ<3zyAR2b~_YB0Zr3zI-Th3ysZH)dnBjr x;X^;_>l=`rosH(^X0R-~d?jd6K3Ki0_8(2!CzLGgnMwcv002ovPDHLkV1hpkuyOzZ literal 0 HcmV?d00001 diff --git a/spring-data-neo4j-examples/cineasts/src/main/webapp/images/searchbar-big.png b/spring-data-neo4j-examples/cineasts/src/main/webapp/images/searchbar-big.png new file mode 100644 index 0000000000000000000000000000000000000000..faf80be449391442ac2eef0afa1010676ef621ed GIT binary patch literal 1101 zcmXX^3pCqj6uQQTjc{Da`DkV<6ro|Dj(@?Ld%%iF$G(AGS zrv!;8=GBu%bXJeGf}M^1kfA`wF+bgb^*`wZpITf)dyYlc^oV$j_)S*H-QoG{AQ$y@ zj&i1L%-TR*-6_mM=7GGtHl0rFxa|H!PVZ$S$=!2hZS#A$jv}|OX!NlP_ci;lPpO`2 zto*u~lMkBWhvmG@@~0J&aIr9B$|}E|Hf}Y#`?*exV5QSy)}S|3M2V@45V>}kQz;d{ z+`4Yb<;&?R4{6PUS<9_exx-o_eWs`QYI(xbWZTiwl<}^w2X^9}-ah}`WMrsGKG+kD zJ-pCb?U=^u+$^)Pv3U_~L*`$~jk8Hw_Q8PcX!=js{y$c?-k-Iz8OEV3u8$&W6xJ7ayczh&WAQJq{idxbmwn(K@A6#-oF$D}!aXn62M#`E&pnJ91d zsBcFNZNyepVlb*L!WZGft=qMctZvp7w(;;M0)Qp`-&oN#Cjf@XW0C55sN)W(0ONmvG67)AobgCQ4;XX|9{rX& z7wrfUL7sbuB2Z-6uZJ?W!!&e(@go7F0YoWQ8}(qwea(mxdOwA-&A10p>ANZuXk%#n z&xUSGY7iK@ABv`9oYL$AIHL8D{g8;k0?}zdfFb&BAAn##LJiIRHUN%=ncx75gmMbi zc-Y>QYJL*||Hw%yzk)Ua%te1`+J2Eo{gJda?ZI_xMw+ndane1HQbQFm6vzzxdZi8< zspm+nlDf*u?v;eI*ThUtZI*M9!Hcz&Xx z0Hd%sW@tryBlr;WY{RhTuI^x-WEG!}UnISVjg4JdepbEl@2kRqz`*)xfS#WfigaPd zUWxSaHd!DLL}bp)Eu_3O9G=UhEzdBqy}Z17RoPy8%shMjO>9A>{JoA+@Mc4IBW?oF NL2~tSX>kt8{0{@2-b?@h literal 0 HcmV?d00001 diff --git a/spring-data-neo4j-examples/cineasts/src/main/webapp/images/springdata.jpg b/spring-data-neo4j-examples/cineasts/src/main/webapp/images/springdata.jpg new file mode 100644 index 0000000000000000000000000000000000000000..90f4de5749e5eabdfb08e2f0b258d45c953b6045 GIT binary patch literal 8569 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 literal 0 HcmV?d00001 diff --git a/spring-data-neo4j-examples/cineasts/src/main/webapp/images/star.png b/spring-data-neo4j-examples/cineasts/src/main/webapp/images/star.png new file mode 100644 index 0000000000000000000000000000000000000000..983454b9548017c392f75535faeb2bb7cf210b1a GIT binary patch literal 4769 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 literal 0 HcmV?d00001 diff --git a/spring-data-neo4j-examples/cineasts/src/main/webapp/resources/forms.css b/spring-data-neo4j-examples/cineasts/src/main/webapp/resources/forms.css new file mode 100644 index 000000000..2f3103131 --- /dev/null +++ b/spring-data-neo4j-examples/cineasts/src/main/webapp/resources/forms.css @@ -0,0 +1,13 @@ +label { + display: block; + float: left; + width: 120px; +} + +/** + * Label for radio buttons, normal buttons and checkboxes. + */ +label.button-label { + display:inline; + float:none; +} diff --git a/spring-data-neo4j-examples/cineasts/src/main/webapp/resources/grid.css b/spring-data-neo4j-examples/cineasts/src/main/webapp/resources/grid.css new file mode 100644 index 000000000..881cf609a --- /dev/null +++ b/spring-data-neo4j-examples/cineasts/src/main/webapp/resources/grid.css @@ -0,0 +1,18 @@ +.span-1 { width: 6.958%; float:left; margin-right:1.5%; } +.span-2 { width: 15.416%; float:left; margin-right:1.5%; } +.span-3 { width: 23.875%; float:left; margin-right:1.5%; } +.span-4 { width: 32.333%; float:left; margin-right:1.5%; } +.span-5 { width: 40.791%; float:left; margin-right:1.5%; } +.span-6 { width: 49.250%; float:left; margin-right:1.5%; } +.span-7 { width: 57.708%; float:left; margin-right:1.5%; } +.span-8 { width: 66.166%; float:left; margin-right:1.5%; } +.span-9 { width: 74.625%; float:left; margin-right:1.5%; } +.span-10 { width: 83.083%; float:left; margin-right:1.5%; } +.span-11 { width: 91.541%; float:left; margin-right:1.5%; } +.span-12 { width: 100%; float:left; margin-right:0%; } + +.span-third { width: 32%; float:left; margin-right:2%; } +.span-half { width: 49%; float:left; margin-right:2%; } +.span-all { width: 100%; float:left; clear:right; } + +.last { clear:right; margin-right:0; } diff --git a/spring-data-neo4j-examples/cineasts/src/main/webapp/resources/style.css b/spring-data-neo4j-examples/cineasts/src/main/webapp/resources/style.css new file mode 100644 index 000000000..316a5a2a5 --- /dev/null +++ b/spring-data-neo4j-examples/cineasts/src/main/webapp/resources/style.css @@ -0,0 +1,328 @@ + +@import url(typography.css); +@import url(forms.css); +@import url(grid.css); + +* { + outline-style: none; +} + +body { + margin:0; + padding:0; + background : #010100; +} + +a img { border:0; } + +/** + * MAIN COMPONENTS + */ + +#header { + background: url(../images/header-curtain.png) repeat-y bottom center #010100; + border-bottom: 1px solid #5C5C45; +} + +#logo img { + padding: 10px 10px 0; +} + +#header-topbar { + height: 49px; + padding: 0 0 0 10px; + background: url(../images/filmroll-horizontal.png) repeat-x bottom left transparent; +} + +#header-splash { + text-align:center; + background: url(../images/header-splash-bg.png) repeat-x bottom center; +} + +#logo-splash { + position:relative; + top:4px; +} + + +#header-menu { + float: right; + color: #DDDDDD; + height:28px; + background:#0b0f07; + padding: 10px 10px; +} + +.search { + float:left; + padding:0 10px; +} + +.navigation { + float:left; +} + +.navigation a { + color: #d8d8d8; + text-decoration:none; + padding: 0 0 0 5px; +} + +#content { + padding: 10px; +} + +#footer { + text-align:center; + color: #999999; + font-size: 12px; + padding: 10px; + clear:both; +} + +#footer img { + padding: 10px; +} +/** + * SEARCH RESULTS + */ + +.search-results > li { + border-top: 1px solid #666666; + padding: 10px; +} + +.search-result-details { +/* float:left; + padding: 0px 10px; + */ +} + +/** + * PROFILE, ACTOR AND MOVIE PAGES + */ + +.profile-header { + clear:both; +} + +.profile-image { + float:left; +} + +.profile-image img { + width: 100px; +} +.actor-image img, .profile-image img, .friend-image img, .thumbnail img { + border: 1px solid #4C5C2A !important; +} + +.thumbnail { + display:block; + /* float:left;*/ +} +.thumbnail img { + height: 100px; +} + +.actor-framed-image { + background: url(../images/actor-picture-frame.png) no-repeat; + width:166px; + height:214px; + padding: 6px 60px 16px; +} + +.actor-sidebar { + padding: 0 56px; +} + +.profile-header-details { + float: left; + padding: 0 10px; +} + +.profile-feed { + background: none repeat scroll 0 0 #252525; + border: 5px solid #CACF81; + padding: 10px; +} + +.facts { + width:50%; + float:left; +} + +.movie-content-outer, .actor-content-outer { + background: url(../images/filmroll-vertical-full.png) no-repeat top right; + padding-right: 38px; +} + +.movie-content, .actor-content { + background: url(../images/filmroll-vertical-full.png) no-repeat top left; + padding: 0 10px 0 48px; + min-height:690px; +} + +.actors-list li { + width:100px; + float:left; +} + +.actors-list img { + height:92px; + display:block; +} + +.friends-list li { + border-top:1px solid #333; + padding: 5px 0; +} + +.friends-list .friend-image { + float:left; +} + +.friend-image img { + height: 64px; +} +.friends-list .friend-info { + float:left; + padding: 0 5px; +} + +.friends-list h3, .search-results h3 { + border:none; + margin: 5px 0; +} + +.friends-list h3 a, .search-results h3 a { + text-decoration:none; + color: #99CC33; +} + +.rated-movies-list h3 { + margin: 0; + padding: 5px 0; + float: left; +} + +.rated-movies-list h3 a { + color: #99CC33; + text-decoration:none; +} + +.rated-movies-list li { + position:relative; + height:20px; + padding:8px 0; +} + +.rated-movies-list .rating { +/* position:absolute; + right:0; + top:5px; +*/ + float: right; +} + +/** + * BIG SEARCH + */ + +#big-search-wrap { + padding: 20px 0; + text-align: center; +} + +.big-search { + background: url("../images/searchbar-big.png") no-repeat scroll 0 0 transparent; + border: 0 none; + height: 50px; + width: 480px; + font-size: 22px; + padding: 0 10px; +} + +.big-search-submit { + background: url("../images/searchbar-big-searchicon.png") no-repeat scroll 0 0 transparent; + border: 0 none; + color: transparent; + cursor: pointer; + height: 40px; + left: -75px; + position: relative; + width: 41px; +} + +/** + * RATINGS + */ + +.rating-input li, .rating-input lh { + float:left; +} + +.rating { + display: block; + height: 20px; + width: 110px; +} + +.rating li { + height: 28px; + width: 22px; + display:block; + float:left; + padding:0 2px; +} + +.rating li.active { + background: url("/images/rating-active.png") no-repeat scroll center 0 transparent; +} + +.rating li.disabled { +/* background: url("/images/rating-disabled.png") no-repeat scroll center 0 transparent; */ +} + +/** + * TABLES + */ + +table th { + text-align: left; +} + +/** + * LISTS + */ + +ul { + list-style:none; + padding:0; +} + +lh { + font-weight:bold; +} + +/** + * UTILS + */ + +.break { + clear:both; +} + + +/** + * ERRORS + */ + +.error { + color:red; +} + +a { + text-decoration: none; + color: #99CC33; +} diff --git a/spring-data-neo4j-examples/cineasts/src/main/webapp/resources/typography.css b/spring-data-neo4j-examples/cineasts/src/main/webapp/resources/typography.css new file mode 100644 index 000000000..7410d6f29 --- /dev/null +++ b/spring-data-neo4j-examples/cineasts/src/main/webapp/resources/typography.css @@ -0,0 +1,32 @@ + +body { + font-family:tahoma,verdana,sans-serif,serif; + color: #666666; + font-size:13px; +} + +h2 { + color: #314718; /*#99CC33;*/ + font-size: 16px; + text-transform: uppercase; +} + +h3 { + color: #314718; /*#ff6600;*/ + font-size: 14px; + text-transform: uppercase; + border-bottom: 1px solid #333333; +} + +h4 { + margin: 5px 0; +} + +.tiny-link { + color: #222; + font-size:12px; + text-decoration:none; +} +.tiny-link:hover { + text-decoration:underline; +} diff --git a/spring-data-neo4j-examples/cineasts/src/test/java/org/neo4j/cineasts/domain/DomainTest.java b/spring-data-neo4j-examples/cineasts/src/test/java/org/neo4j/cineasts/domain/DomainTest.java new file mode 100644 index 000000000..114ec458c --- /dev/null +++ b/spring-data-neo4j-examples/cineasts/src/test/java/org/neo4j/cineasts/domain/DomainTest.java @@ -0,0 +1,82 @@ +package org.neo4j.cineasts.domain; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.neo4j.cineasts.repository.MovieRepository; +import org.neo4j.cineasts.repository.UserRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Iterator; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +/** + * @author mh + * @since 04.03.11 + */ +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration({"/movies-test-context.xml"}) +@Transactional +public class DomainTest { + + @Autowired + protected MovieRepository movieRepository; + @Autowired + protected UserRepository userRepository; + + @Before + public void setUp() throws Exception { + } + + @Test + public void actorCanPlayARoleInAMovie() { + Person tomHanks = new Person("1","Tom Hanks").persist(); + Movie forestGump = new Movie("1", "Forrest Gump").persist(); + + Role role = tomHanks.playedIn(forestGump, "Forrest"); + + Movie foundForestGump = this.movieRepository.findByPropertyValue(null, "id", "1"); + + assertEquals("created and looked up movie equal", forestGump, foundForestGump); + Role firstRole = foundForestGump.getRoles().iterator().next(); + assertEquals("role forrest",role, firstRole); + assertEquals("role forrest","Forrest", firstRole.getName()); + } + + @Test + public void canFindMovieByTitleQuery() { + Movie forestGump = new Movie("1", "Forrest Gump").persist(); + Iterator queryResults = movieRepository.findAllByQuery("search", "title", "Forre*").iterator(); + assertTrue("found movie by query",queryResults.hasNext()); + Movie foundMovie = queryResults.next(); + assertEquals("created and looked up movie equal", forestGump, foundMovie); + assertFalse("found only one movie by query", queryResults.hasNext()); + } + + @Test + public void userCanRateMovie() { + Movie movie= new Movie("1","Forrest Gump").persist(); + User user = new User("ich","Micha","password").persist(); + Rating awesome = user.rate(movie, 5, "Awesome"); + + + User foundUser = userRepository.findByPropertyValue("login", "ich"); + Rating rating = user.getRatings().iterator().next(); + assertEquals(awesome,rating); + assertEquals("Awesome",rating.getComment()); + assertEquals(5,rating.getStars()); + assertEquals(5,movie.getStars(),0); + } + @Test + public void canFindUserByLogin() { + User user = new User("ich","Micha","password").persist(); + User foundUser = userRepository.findByPropertyValue("login", "ich"); + assertEquals(user, foundUser); + } +} diff --git a/spring-data-neo4j-examples/cineasts/src/test/java/org/neo4j/cineasts/movieimport/MovieDbApiClientTest.java b/spring-data-neo4j-examples/cineasts/src/test/java/org/neo4j/cineasts/movieimport/MovieDbApiClientTest.java new file mode 100644 index 000000000..935c56c29 --- /dev/null +++ b/spring-data-neo4j-examples/cineasts/src/test/java/org/neo4j/cineasts/movieimport/MovieDbApiClientTest.java @@ -0,0 +1,28 @@ +package org.neo4j.cineasts.movieimport; + +import org.junit.Test; + +import java.util.Map; + +import static org.junit.Assert.assertEquals; + +/** + * @author mh + * @since 13.03.11 + */ +public class MovieDbApiClientTest { + private static final String API_KEY = "926d2a79e82920b62f03b1cb57e532e6"; + + @Test + public void testGetMovie() throws Exception { + Map movie = new MovieDbApiClient(API_KEY).getMovie("2"); + assertEquals(2,movie.get("id")); + } + + @Test + public void testGetPerson() throws Exception { + Map person = new MovieDbApiClient(API_KEY).getPerson("30112"); + assertEquals(30112,person.get("id")); + + } +} diff --git a/spring-data-neo4j-examples/cineasts/src/test/java/org/neo4j/cineasts/movieimport/MovieDbImportServiceTest.java b/spring-data-neo4j-examples/cineasts/src/test/java/org/neo4j/cineasts/movieimport/MovieDbImportServiceTest.java new file mode 100644 index 000000000..7cc261452 --- /dev/null +++ b/spring-data-neo4j-examples/cineasts/src/test/java/org/neo4j/cineasts/movieimport/MovieDbImportServiceTest.java @@ -0,0 +1,51 @@ +package org.neo4j.cineasts.movieimport; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.neo4j.cineasts.domain.Movie; +import org.neo4j.cineasts.domain.Person; +import org.neo4j.cineasts.repository.MovieRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.transaction.annotation.Transactional; + +import static org.junit.Assert.assertEquals; + +/** + * @author mh + * @since 13.03.11 + */ +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration({"/movies-test-context.xml"}) +@Transactional +public class MovieDbImportServiceTest { + + @Autowired + MovieDbImportService importService; + + @Autowired + MovieRepository movieRepository; + + @Test + public void testImportMovie() throws Exception { + Movie movie = importService.importMovie("2"); + assertEquals("movie-id","2", movie.getId()); + assertEquals("movie-title","Ariel", movie.getTitle()); + } + + @Test + public void testImportMovieTwice() throws Exception { + Movie movie = importService.importMovie("2"); + Movie movie2 = importService.importMovie("2"); + final Movie foundMovie = movieRepository.findById("2"); + assertEquals("movie-id", movie, foundMovie); + } + + @Test + public void testImportPerson() throws Exception { + Person actor = importService.importPerson("105955"); + assertEquals("movie-id","105955", actor.getId()); + assertEquals("movie-title","George M. Williamson", actor.getName()); + } +} diff --git a/spring-data-neo4j-examples/cineasts/src/test/java/org/neo4j/cineasts/movieimport/MovieDbLocalStorageTest.java b/spring-data-neo4j-examples/cineasts/src/test/java/org/neo4j/cineasts/movieimport/MovieDbLocalStorageTest.java new file mode 100644 index 000000000..54bc6279b --- /dev/null +++ b/spring-data-neo4j-examples/cineasts/src/test/java/org/neo4j/cineasts/movieimport/MovieDbLocalStorageTest.java @@ -0,0 +1,76 @@ +package org.neo4j.cineasts.movieimport; + +import org.junit.Before; +import org.junit.Test; + +import java.io.File; +import java.util.Collections; +import java.util.Map; + +import static java.util.Arrays.asList; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +/** + * @author mh + * @since 13.03.11 + */ +public class MovieDbLocalStorageTest { + + + private static final String ID = "111"; + private static final Map DATA = Collections.singletonMap("id", ID); + protected MovieDbLocalStorage storage; + + @Before + public void setUp() throws Exception { + storage = new MovieDbLocalStorage("target/data"); + } + + @Test + public void testHasMovie() throws Exception { + storage.storeMovie(ID,DATA); + assertEquals(true, storage.hasMovie(ID)); + } + + @Test + public void testLoadMovie() throws Exception { + storage.storeMovie(ID,DATA); + assertEquals(DATA,storage.loadMovie(ID)); + } + + @Test + public void testStoreMovie() throws Exception { + storage.storeMovie(ID,DATA); + assertEquals(true, new File("target/data/movie_"+ID+".json").exists()); + } + + @Test + public void testHasPerson() throws Exception { + storage.storePerson(ID,DATA); + assertEquals(true, storage.hasPerson(ID)); + } + + @Test + public void testLoadPerson() throws Exception { + storage.storePerson(ID,DATA); + assertEquals(DATA,storage.loadPerson(ID)); + } + @Test + public void testLoadPersonFromList() throws Exception { + storage.storePerson(ID,asList(DATA)); + assertEquals(DATA,storage.loadPerson(ID)); + } + @Test + public void testLoadPersonFromInvalidList() throws Exception { + storage.storePerson(ID, asList("Nothing found.")); + final Map personData = storage.loadPerson(ID); + assertTrue("person unexpectedly found", personData.containsKey("not_found")); + } + + @Test + public void testStorePerson() throws Exception { + storage.storePerson(ID,DATA); + assertEquals(true, new File("target/data/person_"+ID+".json").exists()); + } +} diff --git a/spring-data-neo4j-examples/cineasts/src/test/java/org/neo4j/cineasts/service/MoviesRepositoryTest.java b/spring-data-neo4j-examples/cineasts/src/test/java/org/neo4j/cineasts/service/MoviesRepositoryTest.java new file mode 100644 index 000000000..9f7b27851 --- /dev/null +++ b/spring-data-neo4j-examples/cineasts/src/test/java/org/neo4j/cineasts/service/MoviesRepositoryTest.java @@ -0,0 +1,88 @@ +package org.neo4j.cineasts.service; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.neo4j.cineasts.domain.Movie; +import org.neo4j.cineasts.domain.MovieRecommendation; +import org.neo4j.cineasts.domain.Rating; +import org.neo4j.cineasts.domain.User; +import org.neo4j.cineasts.repository.MovieRepository; +import org.neo4j.helpers.collection.IteratorUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.PageRequest; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.transaction.annotation.Transactional; + +import java.util.HashSet; +import java.util.List; + +import static java.util.Arrays.asList; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +/** + * @author mh + * @since 04.03.11 + */ +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration({"/movies-test-context.xml"}) +@Transactional +public class MoviesRepositoryTest { + @Autowired + MovieRepository movieRepository; + + @Test + public void testGetMovie() throws Exception { + Movie movie = new Movie("1", "Test-Movie").persist(); + Movie found = movieRepository.findById("1"); + assertEquals("movie found by id", movie, found); + + } + @Test + public void testGetMovieRecommendations() throws Exception { + Movie movie = new Movie("1", "Test-Movie").persist(); + Movie movie2 = new Movie("2", "Test-Movie2").persist(); + User user=new User("me","me","me").persist(); + user.rate(movie,3,"me"); + User friend=new User("friend","friend","friend").persist(); + friend.rate(movie,5,"friend"); + friend.rate(movie2,3,"friend2"); + assertEquals(2,movieRepository.count()); + final List recommendations = movieRepository.getRecommendations(user); + assertEquals("one recommendation", 1, recommendations.size()); + assertEquals("one recommendation", movie2, recommendations.get(0).getMovie()); + assertEquals("one recommendation", 3, recommendations.get(0).getRating()); + } + @Test + public void testRateMovie() throws Exception { + Movie movie = new Movie("1", "Test-Movie").persist(); + User user=new User("me","me","me").persist(); + user.rate(movie, 5, "comment"); + final Rating rating = IteratorUtil.first(movie.getRatings()); + assertEquals("rating stars", 5, rating.getStars()); + assertEquals("rating comment", "comment", rating.getComment()); + assertEquals("rating user", user, rating.getUser()); + assertEquals("rating movie", movie, rating.getMovie()); + } + + @Test + public void testFindTwoMovies() throws Exception { + Movie movie1 = new Movie("1", "Test-Movie1").persist(); + Movie movie2 = new Movie("2", "Test-Movie2").persist(); + Movie movie3 = new Movie("3", "Another-Movie3").persist(); + List found = movieRepository.findByTitleLike("Test*", new PageRequest(0, 2)).getContent(); + assertEquals("2 movies found", 2, found.size()); + assertEquals("2 correct movies found by query", new HashSet(asList(movie1, movie2)), new HashSet(found)); + } + + @Test + public void testFindTwoMoviesButRestrictToOne() throws Exception { + Movie movie1 = new Movie("1", "Test-Movie1").persist(); + Movie movie2 = new Movie("2", "Test-Movie2").persist(); + Movie movie3 = new Movie("3", "Another-Movie3").persist(); + List found = movieRepository.findByTitleLike("Test*", new PageRequest(0, 1)).getContent(); + assertEquals("1 movie found",1,found.size()); + assertTrue("1 correct movie found by query", found.get(0).getTitle().startsWith("Test")); + } +} diff --git a/spring-data-neo4j-examples/cineasts/src/test/resources/movies-test-context.xml b/spring-data-neo4j-examples/cineasts/src/test/resources/movies-test-context.xml new file mode 100644 index 000000000..51064ec85 --- /dev/null +++ b/spring-data-neo4j-examples/cineasts/src/test/resources/movies-test-context.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file