From 723b939b7fd9977cee0d5f25503e4e8984140564 Mon Sep 17 00:00:00 2001 From: Michael Hunger Date: Wed, 28 Sep 2011 01:23:37 +0200 Subject: [PATCH] added examples --- .../cineasts/.gitignore | 12 + spring-data-neo4j-examples/cineasts/Readme.md | 16 + .../cineasts/cineasts.png | Bin 0 -> 30853 bytes spring-data-neo4j-examples/cineasts/pom.xml | 325 +++ .../cineasts/controller/AuthController.java | 63 + .../cineasts/controller/ImportController.java | 64 + .../cineasts/controller/MovieController.java | 122 + .../cineasts/controller/UserController.java | 61 + .../java/org/neo4j/cineasts/domain/Movie.java | 225 ++ .../org/neo4j/cineasts/domain/Person.java | 124 + .../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 | 128 + .../movieimport/MovieDbJsonMapper.java | 704 ++++++ .../movieimport/MovieDbLocalStorage.java | 95 + .../cineasts/repository/MovieRepository.java | 12 + .../cineasts/repository/PersonRepository.java | 11 + .../cineasts/repository/UserRepository.java | 11 + .../cineasts/service/CineastsRepository.java | 62 + .../cineasts/service/CineastsUserDetails.java | 62 + .../service/CineastsUserDetailsService.java | 77 + .../cineasts/service/DatabasePopulator.java | 54 + .../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 | 32 + .../src/main/webapp/WEB-INF/decorators.xml | 8 + .../WEB-INF/dispatcherServlet-servlet.xml | 28 + .../main/webapp/WEB-INF/views/actors/show.jsp | 35 + .../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 | 103 + .../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 | 56 + .../test/resources/movies-test-context.xml | 34 + .../hello-worlds/.gitignore | 10 + .../hello-worlds/.idea/.name | 1 + .../hello-worlds/.idea/ant.xml | 7 + .../hello-worlds/.idea/compiler.xml | 28 + .../hello-worlds/.idea/encodings.xml | 5 + .../Maven__aopalliance_aopalliance_1_0.xml | 13 + .../.idea/libraries/Maven__asm_asm_3_1.xml | 13 + .../libraries/Maven__cglib_cglib_2_2.xml | 13 + .../Maven__cglib_cglib_nodep_2_2.xml | 13 + ..._commons_logging_commons_logging_1_1_1.xml | 13 + ...vax_validation_validation_api_1_0_0_GA.xml | 13 + .../libraries/Maven__junit_junit_4_8_1.xml | 13 + .../libraries/Maven__log4j_log4j_1_2_15.xml | 13 + ...nimo_specs_geronimo_jta_1_1_spec_1_1_1.xml | 13 + ...n__org_apache_lucene_lucene_core_3_1_0.xml | 13 + ...Maven__org_aspectj_aspectjrt_1_6_12_M1.xml | 13 + ...ence_hibernate_jpa_2_0_api_1_0_0_Final.xml | 13 + .../Maven__org_neo4j_neo4j_1_4_1.xml | 13 + ...aven__org_neo4j_neo4j_graph_algo_1_4_1.xml | 13 + ...__org_neo4j_neo4j_graph_matching_1_4_1.xml | 13 + .../Maven__org_neo4j_neo4j_jmx_1_4_1.xml | 13 + .../Maven__org_neo4j_neo4j_kernel_1_4_1.xml | 13 + ...eo4j_neo4j_kernel_test_jar_tests_1_4_1.xml | 13 + ...en__org_neo4j_neo4j_lucene_index_1_4_1.xml | 13 + .../Maven__org_neo4j_neo4j_udc_1_4_1.xml | 13 + .../Maven__org_slf4j_jcl_over_slf4j_1_6_1.xml | 13 + .../Maven__org_slf4j_slf4j_api_1_6_1.xml | 13 + .../Maven__org_slf4j_slf4j_log4j12_1_6_1.xml | 13 + ...data_commons_core_1_2_0_BUILD_SNAPSHOT.xml | 13 + ...spring_data_neo4j_2_0_0_BUILD_SNAPSHOT.xml | 13 + ...ringframework_spring_aop_3_0_5_RELEASE.xml | 13 + ...ringframework_spring_asm_3_0_5_RELEASE.xml | 13 + ...framework_spring_aspects_3_0_5_RELEASE.xml | 13 + ...ngframework_spring_beans_3_0_5_RELEASE.xml | 13 + ...framework_spring_context_3_0_5_RELEASE.xml | 13 + ...k_spring_context_support_3_0_5_RELEASE.xml | 13 + ...ingframework_spring_core_3_0_5_RELEASE.xml | 13 + ...mework_spring_expression_3_0_5_RELEASE.xml | 13 + ...ingframework_spring_jdbc_3_0_5_RELEASE.xml | 13 + ...ringframework_spring_orm_3_0_5_RELEASE.xml | 13 + ...ingframework_spring_test_3_0_5_RELEASE.xml | 13 + ...pringframework_spring_tx_3_0_5_RELEASE.xml | 13 + .../hello-worlds/.idea/misc.xml | 222 ++ .../hello-worlds/.idea/modules.xml | 9 + .../.idea/scopes/scope_settings.xml | 5 + .../hello-worlds/.idea/vcs.xml | 7 + .../hello-worlds/.idea/workspace.xml | 618 +++++ .../.settings/org.eclipse.jdt.core.prefs | 6 + .../.settings/org.maven.ide.eclipse.prefs | 9 + .../hello-worlds/README.md | 10 + .../hello-worlds/build.gradle | 27 + .../hello-worlds/build.xml | 75 + .../hello-worlds/pom.xml | 177 ++ .../hello-worlds/settings/install-ivy.xml | 29 + .../hello-worlds/settings/ivy.xml | 14 + .../hello-worlds/settings/ivysettings.xml | 23 + .../hello-worlds/settings/path.xml | 30 + .../data/neo4j/examples/hellograph/App.java | 39 + .../hellograph/MyWorldRepository.java | 23 + .../hellograph/RelationshipTypes.java | 6 + .../data/neo4j/examples/hellograph/World.java | 63 + .../examples/hellograph/WorldCounter.java | 20 + .../examples/hellograph/WorldRepository.java | 11 + .../hellograph/WorldRepositoryImpl.java | 73 + .../src/main/resources/log4j.properties | 7 + .../resources/spring/helloWorldContext.xml | 20 + .../examples/hellograph/WorldCounterTest.java | 45 + .../hellograph/WorldRepositoryTest.java | 129 + .../neo4j/examples/hellograph/WorldTest.java | 52 + spring-data-neo4j-examples/imdb/.gitignore | 5 + spring-data-neo4j-examples/imdb/README.md | 63 + .../imdb/doc/images/IMDB1.png | Bin 0 -> 47742 bytes spring-data-neo4j-examples/imdb/pom.xml | 439 ++++ .../imdb/src/main/assembly/imdb-src.xml | 26 + .../org/neo4j/examples/imdb/domain/Actor.java | 47 + .../examples/imdb/domain/ActorRepository.java | 11 + .../imdb/domain/ImdbSearchEngine.java | 11 + .../imdb/domain/ImdbSearchEngineImpl.java | 98 + .../examples/imdb/domain/ImdbService.java | 58 + .../examples/imdb/domain/ImdbServiceImpl.java | 91 + .../neo4j/examples/imdb/domain/Lookup.java | 67 + .../imdb/domain/LookupRepository.java | 11 + .../org/neo4j/examples/imdb/domain/Movie.java | 49 + .../examples/imdb/domain/MovieRepository.java | 10 + .../neo4j/examples/imdb/domain/RelTypes.java | 7 + .../org/neo4j/examples/imdb/domain/Role.java | 36 + .../neo4j/examples/imdb/parser/ActorData.java | 25 + .../examples/imdb/parser/ImdbParser.java | 223 ++ .../examples/imdb/parser/ImdbReader.java | 26 + .../examples/imdb/parser/ImdbReaderImpl.java | 41 + .../neo4j/examples/imdb/parser/MovieData.java | 25 + .../neo4j/examples/imdb/parser/RoleData.java | 33 + .../imdb/web/ActorFindControllerDelegate.java | 89 + .../neo4j/examples/imdb/web/ActorForm.java | 13 + .../neo4j/examples/imdb/web/ActorInfo.java | 42 + .../examples/imdb/web/FindController.java | 31 + .../imdb/web/FindControllerDelegate.java | 10 + .../imdb/web/ImdbSetupControllerDelegate.java | 33 + .../imdb/web/MovieFindControllerDelegate.java | 80 + .../neo4j/examples/imdb/web/MovieForm.java | 13 + .../neo4j/examples/imdb/web/MovieInfo.java | 42 + .../examples/imdb/web/SetupController.java | 24 + .../imdb/web/SetupControllerDelegate.java | 10 + .../neo4j/examples/imdb/web/SetupForm.java | 4 + .../imdb/src/main/model/imdb.domain.impl.ucls | 123 + .../model/imdb.domain.interface.simple.ucls | 36 + .../src/main/model/imdb.domain.interface.ucls | 66 + .../model/imdb.domain.service.search.ucls | 107 + .../src/main/model/imdb.domain.service.ucls | 171 ++ .../imdb/src/main/model/imdb.packages.ucls | 76 + .../imdb/src/main/model/imdb.parser.data.ucls | 46 + .../imdb/src/main/model/imdb.parser.ucls | 78 + .../imdb/src/main/model/imdb.util.ucls | 62 + .../imdb/src/main/model/imdb.web.find.ucls | 140 + .../imdb/src/main/model/imdb.web.setup.ucls | 105 + .../src/main/resources/data/actors.list.gz | Bin 0 -> 408049 bytes .../src/main/resources/data/actresses.list.gz | Bin 0 -> 8464 bytes .../src/main/resources/data/movies.list.gz | Bin 0 -> 12985 bytes .../imdb/src/main/webapp/META-INF/MANIFEST.MF | 3 + .../main/webapp/WEB-INF/imdb-app-servlet.xml | 58 + .../main/webapp/WEB-INF/tld/spring-form.tld | 2252 +++++++++++++++++ .../imdb/src/main/webapp/WEB-INF/web.xml | 31 + .../imdb/src/main/webapp/actor.png | Bin 0 -> 911 bytes .../imdb/src/main/webapp/bg.png | Bin 0 -> 519 bytes .../imdb/src/main/webapp/favicon.ico | Bin 0 -> 9158 bytes .../imdb/src/main/webapp/gradient.png | Bin 0 -> 2811 bytes .../imdb/src/main/webapp/index.jsp | 17 + .../imdb/src/main/webapp/jsp/actor-list.jsp | 21 + .../imdb/src/main/webapp/jsp/actor.jsp | 16 + .../imdb/src/main/webapp/jsp/head.jsp | 9 + .../imdb/src/main/webapp/jsp/include.jsp | 3 + .../imdb/src/main/webapp/jsp/menu.jsp | 1 + .../imdb/src/main/webapp/jsp/movie-list.jsp | 47 + .../imdb/src/main/webapp/jsp/movie.jsp | 16 + .../src/main/webapp/jsp/setup-message.jsp | 13 + .../imdb/src/main/webapp/jsp/setup.jsp | 15 + .../imdb/src/main/webapp/menu.png | Bin 0 -> 459 bytes .../imdb/src/main/webapp/movie.png | Bin 0 -> 823 bytes .../imdb/src/main/webapp/setup.png | Bin 0 -> 911 bytes .../imdb/src/main/webapp/style.css | 118 + .../imdb/src/site/apt/index.apt | 28 + .../imdb/src/site/site.xml | 33 + .../test/resources/icons/ACTS_IN.INCOMING.png | Bin 0 -> 823 bytes .../test/resources/icons/ACTS_IN.OUTGOING.png | Bin 0 -> 911 bytes .../test/resources/icons/IMDB.OUTGOING.png | Bin 0 -> 606 bytes .../resources/icons/PART_OF_NAME.OUTGOING.png | Bin 0 -> 617 bytes .../icons/PART_OF_TITLE.OUTGOING.png | Bin 0 -> 617 bytes .../myrestaurants-original/.classpath | 15 + .../myrestaurants-original/.gitignore | 1 + .../myrestaurants-original/.project | 44 + .../.settings/.jsdtscope | 12 + .../.settings/org.eclipse.jdt.core.prefs | 6 + .../org.eclipse.wst.common.component | 10 + ....eclipse.wst.common.project.facet.core.xml | 9 + ...rg.eclipse.wst.jsdt.ui.superType.container | 1 + .../org.eclipse.wst.jsdt.ui.superType.name | 1 + .../org.eclipse.wst.validation.prefs | 10 + .../.settings/org.maven.ide.eclipse.prefs | 9 + .../myrestaurants-original/pom.xml | 513 ++++ .../myrestaurants/dao/RestaurantDao.java | 37 + .../myrestaurants/dao/UserAccountDao.java | 47 + .../myrestaurants/domain/Restaurant.java | 88 + .../myrestaurants/domain/UserAccount.java | 113 + .../web/BaseApplicationController.java | 53 + .../web/RestaurantController.java | 68 + .../myrestaurants/web/SignUpController.java | 114 + .../main/resources/META-INF/persistence.xml | 12 + .../spring/applicationContext-security.xml | 37 + .../META-INF/spring/applicationContext.xml | 85 + .../META-INF/spring/database.properties | 4 + .../src/main/resources/log4j.properties | 20 + .../resources/restaurants-sample-data.sql | 50 + .../src/main/resources/schema.sql | 8 + .../src/main/webapp/META-INF/MANIFEST.MF | 3 + .../webapp/WEB-INF/classes/alt.properties | 1 + .../WEB-INF/classes/standard.properties | 1 + .../WEB-INF/i18n/application.properties | 29 + .../webapp/WEB-INF/i18n/messages.properties | 94 + .../main/webapp/WEB-INF/layouts/default.jspx | 27 + .../main/webapp/WEB-INF/layouts/layouts.xml | 19 + .../webapp/WEB-INF/spring/webmvc-config.xml | 77 + .../main/webapp/WEB-INF/tags/form/create.tagx | 29 + .../webapp/WEB-INF/tags/form/dependency.tagx | 25 + .../WEB-INF/tags/form/fields/checkbox.tagx | 37 + .../WEB-INF/tags/form/fields/column.tagx | 28 + .../WEB-INF/tags/form/fields/datetime.tagx | 75 + .../WEB-INF/tags/form/fields/display.tagx | 51 + .../WEB-INF/tags/form/fields/editor.tagx | 46 + .../WEB-INF/tags/form/fields/input.tagx | 79 + .../WEB-INF/tags/form/fields/reference.tagx | 42 + .../WEB-INF/tags/form/fields/select.tagx | 99 + .../WEB-INF/tags/form/fields/simple.tagx | 35 + .../WEB-INF/tags/form/fields/table.tagx | 159 ++ .../WEB-INF/tags/form/fields/textarea.tagx | 47 + .../main/webapp/WEB-INF/tags/form/find.tagx | 29 + .../main/webapp/WEB-INF/tags/form/list.tagx | 31 + .../main/webapp/WEB-INF/tags/form/show.tagx | 113 + .../main/webapp/WEB-INF/tags/form/update.tagx | 42 + .../webapp/WEB-INF/tags/menu/category.tagx | 25 + .../main/webapp/WEB-INF/tags/menu/item.tagx | 29 + .../main/webapp/WEB-INF/tags/menu/menu.tagx | 13 + .../webapp/WEB-INF/tags/util/language.tagx | 31 + .../WEB-INF/tags/util/load-scripts.tagx | 28 + .../webapp/WEB-INF/tags/util/pagination.tagx | 87 + .../main/webapp/WEB-INF/tags/util/panel.tagx | 32 + .../webapp/WEB-INF/tags/util/placeholder.tagx | 4 + .../main/webapp/WEB-INF/tags/util/theme.tagx | 36 + .../WEB-INF/views/dataAccessFailure.jspx | 29 + .../src/main/webapp/WEB-INF/views/footer.jspx | 36 + .../src/main/webapp/WEB-INF/views/header.jspx | 10 + .../webapp/WEB-INF/views/index-template.jspx | 10 + .../src/main/webapp/WEB-INF/views/index.jspx | 13 + .../src/main/webapp/WEB-INF/views/login.jspx | 59 + .../src/main/webapp/WEB-INF/views/menu.jspx | 36 + .../WEB-INF/views/resourceNotFound.jspx | 28 + .../WEB-INF/views/restaurants/create.jspx | 11 + .../WEB-INF/views/restaurants/list.jspx | 12 + .../WEB-INF/views/restaurants/show.jspx | 10 + .../WEB-INF/views/restaurants/update.jspx | 10 + .../WEB-INF/views/restaurants/views.xml | 16 + .../WEB-INF/views/uncaughtException.jspx | 28 + .../WEB-INF/views/useraccounts/create.jspx | 11 + .../WEB-INF/views/useraccounts/list.jspx | 13 + .../WEB-INF/views/useraccounts/show.jspx | 11 + .../WEB-INF/views/useraccounts/update.jspx | 11 + .../WEB-INF/views/useraccounts/views.xml | 16 + .../src/main/webapp/WEB-INF/views/views.xml | 24 + .../src/main/webapp/WEB-INF/web.xml | 110 + .../src/main/webapp/images/add.png | Bin 0 -> 739 bytes .../src/main/webapp/images/banner-graphic.png | Bin 0 -> 17661 bytes .../src/main/webapp/images/create.png | Bin 0 -> 739 bytes .../src/main/webapp/images/delete.png | Bin 0 -> 655 bytes .../src/main/webapp/images/en.png | Bin 0 -> 599 bytes .../src/main/webapp/images/fav-del.png | Bin 0 -> 840 bytes .../src/main/webapp/images/fav-new.png | Bin 0 -> 610 bytes .../src/main/webapp/images/favicon.ico | Bin 0 -> 1406 bytes .../src/main/webapp/images/list.png | Bin 0 -> 473 bytes .../main/webapp/images/resultset_first.png | Bin 0 -> 522 bytes .../src/main/webapp/images/resultset_last.png | Bin 0 -> 524 bytes .../src/main/webapp/images/resultset_next.png | Bin 0 -> 395 bytes .../main/webapp/images/resultset_previous.png | Bin 0 -> 389 bytes .../src/main/webapp/images/show.png | Bin 0 -> 879 bytes .../src/main/webapp/images/spring-logo.png | Bin 0 -> 2032 bytes .../main/webapp/images/springsource-logo.png | Bin 0 -> 4974 bytes .../src/main/webapp/images/update.png | Bin 0 -> 807 bytes .../src/main/webapp/styles/alt.css | 362 +++ .../src/main/webapp/styles/standard.css | 366 +++ .../myrestaurants-social/.classpath | 17 + .../myrestaurants-social/.gitignore | 1 + .../myrestaurants-social/.project | 58 + .../myrestaurants-social/.settings/.jsdtscope | 12 + .../.settings/org.eclipse.jdt.core.prefs | 6 + .../.settings/org.eclipse.jst.jsp.core.prefs | 30 + .../org.eclipse.wst.common.component | 10 + ....eclipse.wst.common.project.facet.core.xml | 9 + ...rg.eclipse.wst.jsdt.ui.superType.container | 1 + .../org.eclipse.wst.jsdt.ui.superType.name | 1 + .../org.eclipse.wst.validation.prefs | 10 + .../org.eclipse.wst.ws.service.policy.prefs | 3 + .../.settings/org.maven.ide.eclipse.prefs | 9 + .../myrestaurants-social/pom.xml | 534 ++++ .../data/RestaurantRepository.java | 46 + .../data/UserAccountRepository.java | 79 + .../myrestaurants/domain/RatedRestaurant.java | 30 + .../myrestaurants/domain/Recommendation.java | 46 + .../myrestaurants/domain/Restaurant.java | 91 + .../domain/TopRatedRestaurantFinder.java | 107 + .../domain/TopRatedRestaurantTraverser.java | 45 + .../myrestaurants/domain/UserAccount.java | 180 ++ .../web/BaseApplicationController.java | 63 + .../myrestaurants/web/FriendController.java | 102 + .../myrestaurants/web/FriendFormBean.java | 26 + .../web/RatedRestaurantBean.java | 52 + .../web/RecommendationController.java | 170 ++ .../web/RecommendationFormBean.java | 61 + .../web/RestaurantController.java | 72 + .../myrestaurants/web/SignUpController.java | 115 + .../myrestaurants/web/TopNController.java | 68 + .../main/resources/META-INF/persistence.xml | 14 + .../spring/applicationContext-security.xml | 37 + .../META-INF/spring/applicationContext.xml | 88 + .../META-INF/spring/database.properties | 4 + .../src/main/resources/log4j.properties | 22 + .../resources/restaurants-sample-data.sql | 50 + .../src/main/resources/schema.sql | 8 + .../src/main/webapp/META-INF/MANIFEST.MF | 3 + .../webapp/WEB-INF/classes/alt.properties | 1 + .../WEB-INF/classes/standard.properties | 1 + .../WEB-INF/i18n/application.properties | 60 + .../webapp/WEB-INF/i18n/messages.properties | 98 + .../main/webapp/WEB-INF/layouts/default.jspx | 27 + .../main/webapp/WEB-INF/layouts/layouts.xml | 19 + .../webapp/WEB-INF/spring/webmvc-config.xml | 77 + .../main/webapp/WEB-INF/tags/form/create.tagx | 29 + .../webapp/WEB-INF/tags/form/dependency.tagx | 25 + .../WEB-INF/tags/form/fields/checkbox.tagx | 37 + .../WEB-INF/tags/form/fields/column.tagx | 28 + .../WEB-INF/tags/form/fields/datetime.tagx | 75 + .../WEB-INF/tags/form/fields/display.tagx | 51 + .../WEB-INF/tags/form/fields/editor.tagx | 46 + .../WEB-INF/tags/form/fields/input.tagx | 79 + .../WEB-INF/tags/form/fields/reference.tagx | 42 + .../WEB-INF/tags/form/fields/select.tagx | 99 + .../WEB-INF/tags/form/fields/simple.tagx | 35 + .../WEB-INF/tags/form/fields/table.tagx | 179 ++ .../WEB-INF/tags/form/fields/textarea.tagx | 47 + .../main/webapp/WEB-INF/tags/form/find.tagx | 29 + .../main/webapp/WEB-INF/tags/form/list.tagx | 31 + .../main/webapp/WEB-INF/tags/form/show.tagx | 113 + .../main/webapp/WEB-INF/tags/form/update.tagx | 42 + .../webapp/WEB-INF/tags/menu/category.tagx | 25 + .../main/webapp/WEB-INF/tags/menu/item.tagx | 29 + .../main/webapp/WEB-INF/tags/menu/menu.tagx | 13 + .../webapp/WEB-INF/tags/util/language.tagx | 31 + .../WEB-INF/tags/util/load-scripts.tagx | 28 + .../webapp/WEB-INF/tags/util/pagination.tagx | 87 + .../main/webapp/WEB-INF/tags/util/panel.tagx | 32 + .../webapp/WEB-INF/tags/util/placeholder.tagx | 4 + .../main/webapp/WEB-INF/tags/util/theme.tagx | 36 + .../WEB-INF/views/dataAccessFailure.jspx | 29 + .../src/main/webapp/WEB-INF/views/footer.jspx | 36 + .../webapp/WEB-INF/views/friends/create.jspx | 8 + .../webapp/WEB-INF/views/friends/list.jspx | 9 + .../webapp/WEB-INF/views/friends/show.jspx | 7 + .../webapp/WEB-INF/views/friends/update.jspx | 7 + .../webapp/WEB-INF/views/friends/views.xml | 16 + .../src/main/webapp/WEB-INF/views/header.jspx | 10 + .../webapp/WEB-INF/views/index-template.jspx | 10 + .../src/main/webapp/WEB-INF/views/index.jspx | 13 + .../src/main/webapp/WEB-INF/views/login.jspx | 59 + .../src/main/webapp/WEB-INF/views/menu.jspx | 44 + .../WEB-INF/views/recommendations/create.jspx | 14 + .../WEB-INF/views/recommendations/list.jspx | 11 + .../WEB-INF/views/recommendations/show.jspx | 9 + .../WEB-INF/views/recommendations/update.jspx | 10 + .../WEB-INF/views/recommendations/views.xml | 16 + .../WEB-INF/views/resourceNotFound.jspx | 28 + .../WEB-INF/views/restaurants/create.jspx | 11 + .../WEB-INF/views/restaurants/list.jspx | 12 + .../WEB-INF/views/restaurants/show.jspx | 10 + .../WEB-INF/views/restaurants/update.jspx | 10 + .../WEB-INF/views/restaurants/views.xml | 16 + .../main/webapp/WEB-INF/views/topn/list.jspx | 11 + .../main/webapp/WEB-INF/views/topn/views.xml | 7 + .../WEB-INF/views/uncaughtException.jspx | 28 + .../WEB-INF/views/useraccounts/create.jspx | 12 + .../WEB-INF/views/useraccounts/list.jspx | 13 + .../WEB-INF/views/useraccounts/show.jspx | 12 + .../WEB-INF/views/useraccounts/update.jspx | 12 + .../WEB-INF/views/useraccounts/views.xml | 16 + .../src/main/webapp/WEB-INF/views/views.xml | 24 + .../src/main/webapp/WEB-INF/web.xml | 110 + .../src/main/webapp/images/Thumbs.db | Bin 0 -> 8192 bytes .../src/main/webapp/images/add.png | Bin 0 -> 739 bytes .../src/main/webapp/images/banner-graphic.png | Bin 0 -> 25416 bytes .../src/main/webapp/images/create.png | Bin 0 -> 739 bytes .../src/main/webapp/images/delete.png | Bin 0 -> 655 bytes .../src/main/webapp/images/en.png | Bin 0 -> 599 bytes .../src/main/webapp/images/fav-del.png | Bin 0 -> 840 bytes .../src/main/webapp/images/fav-new.png | Bin 0 -> 610 bytes .../src/main/webapp/images/favicon.ico | Bin 0 -> 1406 bytes .../src/main/webapp/images/list.png | Bin 0 -> 473 bytes .../src/main/webapp/images/recommend.gif | Bin 0 -> 574 bytes .../main/webapp/images/resultset_first.png | Bin 0 -> 522 bytes .../src/main/webapp/images/resultset_last.png | Bin 0 -> 524 bytes .../src/main/webapp/images/resultset_next.png | Bin 0 -> 395 bytes .../main/webapp/images/resultset_previous.png | Bin 0 -> 389 bytes .../src/main/webapp/images/show.png | Bin 0 -> 879 bytes .../src/main/webapp/images/spring-logo.png | Bin 0 -> 2032 bytes .../main/webapp/images/springsource-logo.png | Bin 0 -> 4974 bytes .../src/main/webapp/images/thumbsup.png | Bin 0 -> 282 bytes .../src/main/webapp/images/update.png | Bin 0 -> 807 bytes .../src/main/webapp/styles/alt.css | 362 +++ .../src/main/webapp/styles/standard.css | 366 +++ .../springdeveloper/data/neo/PrintNeo4j.java | 61 + .../data/AbstractTestWithUserAccount.java | 77 + .../data/RestaurantRepositoryTest.java | 81 + .../data/UserAccountRelationshipsTest.java | 92 + .../data/UserAccountRepositoryTest.java | 101 + .../domain/TopRatedRestaurantFinderTest.java | 111 + .../myrestaurants/data/DataStore-context.xml | 36 + .../data/RestaurantRepositoryTest-context.xml | 30 + .../UserAccountRelationshipsTest-context.xml | 30 + .../UserAccountRepositoryTest-context.xml | 30 + .../domain/DataStore-context.xml | 38 + .../TopRatedRestaurantFinderTest-context.xml | 20 + spring-data-neo4j-examples/readme.md | 6 + 483 files changed, 22039 insertions(+) create mode 100644 spring-data-neo4j-examples/cineasts/.gitignore create mode 100644 spring-data-neo4j-examples/cineasts/Readme.md create mode 100644 spring-data-neo4j-examples/cineasts/cineasts.png 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/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/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 create mode 100644 spring-data-neo4j-examples/hello-worlds/.gitignore create mode 100644 spring-data-neo4j-examples/hello-worlds/.idea/.name create mode 100644 spring-data-neo4j-examples/hello-worlds/.idea/ant.xml create mode 100644 spring-data-neo4j-examples/hello-worlds/.idea/compiler.xml create mode 100644 spring-data-neo4j-examples/hello-worlds/.idea/encodings.xml create mode 100644 spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__aopalliance_aopalliance_1_0.xml create mode 100644 spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__asm_asm_3_1.xml create mode 100644 spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__cglib_cglib_2_2.xml create mode 100644 spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__cglib_cglib_nodep_2_2.xml create mode 100644 spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__commons_logging_commons_logging_1_1_1.xml create mode 100644 spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__javax_validation_validation_api_1_0_0_GA.xml create mode 100644 spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__junit_junit_4_8_1.xml create mode 100644 spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__log4j_log4j_1_2_15.xml create mode 100644 spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_apache_geronimo_specs_geronimo_jta_1_1_spec_1_1_1.xml create mode 100644 spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_apache_lucene_lucene_core_3_1_0.xml create mode 100644 spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_aspectj_aspectjrt_1_6_12_M1.xml create mode 100644 spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_hibernate_javax_persistence_hibernate_jpa_2_0_api_1_0_0_Final.xml create mode 100644 spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_neo4j_neo4j_1_4_1.xml create mode 100644 spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_neo4j_neo4j_graph_algo_1_4_1.xml create mode 100644 spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_neo4j_neo4j_graph_matching_1_4_1.xml create mode 100644 spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_neo4j_neo4j_jmx_1_4_1.xml create mode 100644 spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_neo4j_neo4j_kernel_1_4_1.xml create mode 100644 spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_neo4j_neo4j_kernel_test_jar_tests_1_4_1.xml create mode 100644 spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_neo4j_neo4j_lucene_index_1_4_1.xml create mode 100644 spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_neo4j_neo4j_udc_1_4_1.xml create mode 100644 spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_slf4j_jcl_over_slf4j_1_6_1.xml create mode 100644 spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_slf4j_slf4j_api_1_6_1.xml create mode 100644 spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_slf4j_slf4j_log4j12_1_6_1.xml create mode 100644 spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_springframework_data_spring_data_commons_core_1_2_0_BUILD_SNAPSHOT.xml create mode 100644 spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_springframework_data_spring_data_neo4j_2_0_0_BUILD_SNAPSHOT.xml create mode 100644 spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_springframework_spring_aop_3_0_5_RELEASE.xml create mode 100644 spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_springframework_spring_asm_3_0_5_RELEASE.xml create mode 100644 spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_springframework_spring_aspects_3_0_5_RELEASE.xml create mode 100644 spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_springframework_spring_beans_3_0_5_RELEASE.xml create mode 100644 spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_springframework_spring_context_3_0_5_RELEASE.xml create mode 100644 spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_springframework_spring_context_support_3_0_5_RELEASE.xml create mode 100644 spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_springframework_spring_core_3_0_5_RELEASE.xml create mode 100644 spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_springframework_spring_expression_3_0_5_RELEASE.xml create mode 100644 spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_springframework_spring_jdbc_3_0_5_RELEASE.xml create mode 100644 spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_springframework_spring_orm_3_0_5_RELEASE.xml create mode 100644 spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_springframework_spring_test_3_0_5_RELEASE.xml create mode 100644 spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_springframework_spring_tx_3_0_5_RELEASE.xml create mode 100644 spring-data-neo4j-examples/hello-worlds/.idea/misc.xml create mode 100644 spring-data-neo4j-examples/hello-worlds/.idea/modules.xml create mode 100644 spring-data-neo4j-examples/hello-worlds/.idea/scopes/scope_settings.xml create mode 100644 spring-data-neo4j-examples/hello-worlds/.idea/vcs.xml create mode 100644 spring-data-neo4j-examples/hello-worlds/.idea/workspace.xml create mode 100644 spring-data-neo4j-examples/hello-worlds/.settings/org.eclipse.jdt.core.prefs create mode 100644 spring-data-neo4j-examples/hello-worlds/.settings/org.maven.ide.eclipse.prefs create mode 100644 spring-data-neo4j-examples/hello-worlds/README.md create mode 100644 spring-data-neo4j-examples/hello-worlds/build.gradle create mode 100644 spring-data-neo4j-examples/hello-worlds/build.xml create mode 100644 spring-data-neo4j-examples/hello-worlds/pom.xml create mode 100644 spring-data-neo4j-examples/hello-worlds/settings/install-ivy.xml create mode 100644 spring-data-neo4j-examples/hello-worlds/settings/ivy.xml create mode 100644 spring-data-neo4j-examples/hello-worlds/settings/ivysettings.xml create mode 100644 spring-data-neo4j-examples/hello-worlds/settings/path.xml create mode 100644 spring-data-neo4j-examples/hello-worlds/src/main/java/org/springframework/data/neo4j/examples/hellograph/App.java create mode 100644 spring-data-neo4j-examples/hello-worlds/src/main/java/org/springframework/data/neo4j/examples/hellograph/MyWorldRepository.java create mode 100644 spring-data-neo4j-examples/hello-worlds/src/main/java/org/springframework/data/neo4j/examples/hellograph/RelationshipTypes.java create mode 100644 spring-data-neo4j-examples/hello-worlds/src/main/java/org/springframework/data/neo4j/examples/hellograph/World.java create mode 100644 spring-data-neo4j-examples/hello-worlds/src/main/java/org/springframework/data/neo4j/examples/hellograph/WorldCounter.java create mode 100644 spring-data-neo4j-examples/hello-worlds/src/main/java/org/springframework/data/neo4j/examples/hellograph/WorldRepository.java create mode 100644 spring-data-neo4j-examples/hello-worlds/src/main/java/org/springframework/data/neo4j/examples/hellograph/WorldRepositoryImpl.java create mode 100644 spring-data-neo4j-examples/hello-worlds/src/main/resources/log4j.properties create mode 100644 spring-data-neo4j-examples/hello-worlds/src/main/resources/spring/helloWorldContext.xml create mode 100644 spring-data-neo4j-examples/hello-worlds/src/test/java/org/springframework/data/neo4j/examples/hellograph/WorldCounterTest.java create mode 100644 spring-data-neo4j-examples/hello-worlds/src/test/java/org/springframework/data/neo4j/examples/hellograph/WorldRepositoryTest.java create mode 100644 spring-data-neo4j-examples/hello-worlds/src/test/java/org/springframework/data/neo4j/examples/hellograph/WorldTest.java create mode 100644 spring-data-neo4j-examples/imdb/.gitignore create mode 100644 spring-data-neo4j-examples/imdb/README.md create mode 100644 spring-data-neo4j-examples/imdb/doc/images/IMDB1.png create mode 100644 spring-data-neo4j-examples/imdb/pom.xml create mode 100644 spring-data-neo4j-examples/imdb/src/main/assembly/imdb-src.xml create mode 100644 spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/domain/Actor.java create mode 100644 spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/domain/ActorRepository.java create mode 100644 spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/domain/ImdbSearchEngine.java create mode 100644 spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/domain/ImdbSearchEngineImpl.java create mode 100644 spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/domain/ImdbService.java create mode 100644 spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/domain/ImdbServiceImpl.java create mode 100644 spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/domain/Lookup.java create mode 100644 spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/domain/LookupRepository.java create mode 100644 spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/domain/Movie.java create mode 100644 spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/domain/MovieRepository.java create mode 100644 spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/domain/RelTypes.java create mode 100644 spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/domain/Role.java create mode 100644 spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/parser/ActorData.java create mode 100644 spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/parser/ImdbParser.java create mode 100644 spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/parser/ImdbReader.java create mode 100644 spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/parser/ImdbReaderImpl.java create mode 100644 spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/parser/MovieData.java create mode 100644 spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/parser/RoleData.java create mode 100644 spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/web/ActorFindControllerDelegate.java create mode 100644 spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/web/ActorForm.java create mode 100644 spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/web/ActorInfo.java create mode 100644 spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/web/FindController.java create mode 100644 spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/web/FindControllerDelegate.java create mode 100644 spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/web/ImdbSetupControllerDelegate.java create mode 100644 spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/web/MovieFindControllerDelegate.java create mode 100644 spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/web/MovieForm.java create mode 100644 spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/web/MovieInfo.java create mode 100644 spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/web/SetupController.java create mode 100644 spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/web/SetupControllerDelegate.java create mode 100644 spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/web/SetupForm.java create mode 100644 spring-data-neo4j-examples/imdb/src/main/model/imdb.domain.impl.ucls create mode 100644 spring-data-neo4j-examples/imdb/src/main/model/imdb.domain.interface.simple.ucls create mode 100644 spring-data-neo4j-examples/imdb/src/main/model/imdb.domain.interface.ucls create mode 100644 spring-data-neo4j-examples/imdb/src/main/model/imdb.domain.service.search.ucls create mode 100644 spring-data-neo4j-examples/imdb/src/main/model/imdb.domain.service.ucls create mode 100644 spring-data-neo4j-examples/imdb/src/main/model/imdb.packages.ucls create mode 100644 spring-data-neo4j-examples/imdb/src/main/model/imdb.parser.data.ucls create mode 100644 spring-data-neo4j-examples/imdb/src/main/model/imdb.parser.ucls create mode 100644 spring-data-neo4j-examples/imdb/src/main/model/imdb.util.ucls create mode 100644 spring-data-neo4j-examples/imdb/src/main/model/imdb.web.find.ucls create mode 100644 spring-data-neo4j-examples/imdb/src/main/model/imdb.web.setup.ucls create mode 100644 spring-data-neo4j-examples/imdb/src/main/resources/data/actors.list.gz create mode 100644 spring-data-neo4j-examples/imdb/src/main/resources/data/actresses.list.gz create mode 100644 spring-data-neo4j-examples/imdb/src/main/resources/data/movies.list.gz create mode 100644 spring-data-neo4j-examples/imdb/src/main/webapp/META-INF/MANIFEST.MF create mode 100644 spring-data-neo4j-examples/imdb/src/main/webapp/WEB-INF/imdb-app-servlet.xml create mode 100644 spring-data-neo4j-examples/imdb/src/main/webapp/WEB-INF/tld/spring-form.tld create mode 100644 spring-data-neo4j-examples/imdb/src/main/webapp/WEB-INF/web.xml create mode 100644 spring-data-neo4j-examples/imdb/src/main/webapp/actor.png create mode 100644 spring-data-neo4j-examples/imdb/src/main/webapp/bg.png create mode 100644 spring-data-neo4j-examples/imdb/src/main/webapp/favicon.ico create mode 100644 spring-data-neo4j-examples/imdb/src/main/webapp/gradient.png create mode 100644 spring-data-neo4j-examples/imdb/src/main/webapp/index.jsp create mode 100644 spring-data-neo4j-examples/imdb/src/main/webapp/jsp/actor-list.jsp create mode 100644 spring-data-neo4j-examples/imdb/src/main/webapp/jsp/actor.jsp create mode 100644 spring-data-neo4j-examples/imdb/src/main/webapp/jsp/head.jsp create mode 100644 spring-data-neo4j-examples/imdb/src/main/webapp/jsp/include.jsp create mode 100644 spring-data-neo4j-examples/imdb/src/main/webapp/jsp/menu.jsp create mode 100644 spring-data-neo4j-examples/imdb/src/main/webapp/jsp/movie-list.jsp create mode 100644 spring-data-neo4j-examples/imdb/src/main/webapp/jsp/movie.jsp create mode 100644 spring-data-neo4j-examples/imdb/src/main/webapp/jsp/setup-message.jsp create mode 100644 spring-data-neo4j-examples/imdb/src/main/webapp/jsp/setup.jsp create mode 100644 spring-data-neo4j-examples/imdb/src/main/webapp/menu.png create mode 100644 spring-data-neo4j-examples/imdb/src/main/webapp/movie.png create mode 100644 spring-data-neo4j-examples/imdb/src/main/webapp/setup.png create mode 100644 spring-data-neo4j-examples/imdb/src/main/webapp/style.css create mode 100644 spring-data-neo4j-examples/imdb/src/site/apt/index.apt create mode 100644 spring-data-neo4j-examples/imdb/src/site/site.xml create mode 100644 spring-data-neo4j-examples/imdb/src/test/resources/icons/ACTS_IN.INCOMING.png create mode 100644 spring-data-neo4j-examples/imdb/src/test/resources/icons/ACTS_IN.OUTGOING.png create mode 100644 spring-data-neo4j-examples/imdb/src/test/resources/icons/IMDB.OUTGOING.png create mode 100644 spring-data-neo4j-examples/imdb/src/test/resources/icons/PART_OF_NAME.OUTGOING.png create mode 100644 spring-data-neo4j-examples/imdb/src/test/resources/icons/PART_OF_TITLE.OUTGOING.png create mode 100644 spring-data-neo4j-examples/myrestaurants-original/.classpath create mode 100644 spring-data-neo4j-examples/myrestaurants-original/.gitignore create mode 100644 spring-data-neo4j-examples/myrestaurants-original/.project create mode 100644 spring-data-neo4j-examples/myrestaurants-original/.settings/.jsdtscope create mode 100644 spring-data-neo4j-examples/myrestaurants-original/.settings/org.eclipse.jdt.core.prefs create mode 100644 spring-data-neo4j-examples/myrestaurants-original/.settings/org.eclipse.wst.common.component create mode 100644 spring-data-neo4j-examples/myrestaurants-original/.settings/org.eclipse.wst.common.project.facet.core.xml create mode 100644 spring-data-neo4j-examples/myrestaurants-original/.settings/org.eclipse.wst.jsdt.ui.superType.container create mode 100644 spring-data-neo4j-examples/myrestaurants-original/.settings/org.eclipse.wst.jsdt.ui.superType.name create mode 100644 spring-data-neo4j-examples/myrestaurants-original/.settings/org.eclipse.wst.validation.prefs create mode 100644 spring-data-neo4j-examples/myrestaurants-original/.settings/org.maven.ide.eclipse.prefs create mode 100644 spring-data-neo4j-examples/myrestaurants-original/pom.xml create mode 100644 spring-data-neo4j-examples/myrestaurants-original/src/main/java/com/springone/myrestaurants/dao/RestaurantDao.java create mode 100644 spring-data-neo4j-examples/myrestaurants-original/src/main/java/com/springone/myrestaurants/dao/UserAccountDao.java create mode 100644 spring-data-neo4j-examples/myrestaurants-original/src/main/java/com/springone/myrestaurants/domain/Restaurant.java create mode 100644 spring-data-neo4j-examples/myrestaurants-original/src/main/java/com/springone/myrestaurants/domain/UserAccount.java create mode 100644 spring-data-neo4j-examples/myrestaurants-original/src/main/java/com/springone/myrestaurants/web/BaseApplicationController.java create mode 100644 spring-data-neo4j-examples/myrestaurants-original/src/main/java/com/springone/myrestaurants/web/RestaurantController.java create mode 100644 spring-data-neo4j-examples/myrestaurants-original/src/main/java/com/springone/myrestaurants/web/SignUpController.java create mode 100644 spring-data-neo4j-examples/myrestaurants-original/src/main/resources/META-INF/persistence.xml create mode 100644 spring-data-neo4j-examples/myrestaurants-original/src/main/resources/META-INF/spring/applicationContext-security.xml create mode 100644 spring-data-neo4j-examples/myrestaurants-original/src/main/resources/META-INF/spring/applicationContext.xml create mode 100644 spring-data-neo4j-examples/myrestaurants-original/src/main/resources/META-INF/spring/database.properties create mode 100644 spring-data-neo4j-examples/myrestaurants-original/src/main/resources/log4j.properties create mode 100644 spring-data-neo4j-examples/myrestaurants-original/src/main/resources/restaurants-sample-data.sql create mode 100644 spring-data-neo4j-examples/myrestaurants-original/src/main/resources/schema.sql create mode 100644 spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/META-INF/MANIFEST.MF create mode 100644 spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/classes/alt.properties create mode 100644 spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/classes/standard.properties create mode 100644 spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/i18n/application.properties create mode 100644 spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/i18n/messages.properties create mode 100644 spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/layouts/default.jspx create mode 100644 spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/layouts/layouts.xml create mode 100644 spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/spring/webmvc-config.xml create mode 100644 spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/form/create.tagx create mode 100644 spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/form/dependency.tagx create mode 100644 spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/form/fields/checkbox.tagx create mode 100644 spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/form/fields/column.tagx create mode 100644 spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/form/fields/datetime.tagx create mode 100644 spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/form/fields/display.tagx create mode 100644 spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/form/fields/editor.tagx create mode 100644 spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/form/fields/input.tagx create mode 100644 spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/form/fields/reference.tagx create mode 100644 spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/form/fields/select.tagx create mode 100644 spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/form/fields/simple.tagx create mode 100644 spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/form/fields/table.tagx create mode 100644 spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/form/fields/textarea.tagx create mode 100644 spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/form/find.tagx create mode 100644 spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/form/list.tagx create mode 100644 spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/form/show.tagx create mode 100644 spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/form/update.tagx create mode 100644 spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/menu/category.tagx create mode 100644 spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/menu/item.tagx create mode 100644 spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/menu/menu.tagx create mode 100644 spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/util/language.tagx create mode 100644 spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/util/load-scripts.tagx create mode 100644 spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/util/pagination.tagx create mode 100644 spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/util/panel.tagx create mode 100644 spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/util/placeholder.tagx create mode 100644 spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/util/theme.tagx create mode 100644 spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/views/dataAccessFailure.jspx create mode 100644 spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/views/footer.jspx create mode 100644 spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/views/header.jspx create mode 100644 spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/views/index-template.jspx create mode 100644 spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/views/index.jspx create mode 100644 spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/views/login.jspx create mode 100644 spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/views/menu.jspx create mode 100644 spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/views/resourceNotFound.jspx create mode 100644 spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/views/restaurants/create.jspx create mode 100644 spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/views/restaurants/list.jspx create mode 100644 spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/views/restaurants/show.jspx create mode 100644 spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/views/restaurants/update.jspx create mode 100644 spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/views/restaurants/views.xml create mode 100644 spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/views/uncaughtException.jspx create mode 100644 spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/views/useraccounts/create.jspx create mode 100644 spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/views/useraccounts/list.jspx create mode 100644 spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/views/useraccounts/show.jspx create mode 100644 spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/views/useraccounts/update.jspx create mode 100644 spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/views/useraccounts/views.xml create mode 100644 spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/views/views.xml create mode 100644 spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/web.xml create mode 100644 spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/images/add.png create mode 100644 spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/images/banner-graphic.png create mode 100644 spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/images/create.png create mode 100644 spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/images/delete.png create mode 100644 spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/images/en.png create mode 100644 spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/images/fav-del.png create mode 100644 spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/images/fav-new.png create mode 100644 spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/images/favicon.ico create mode 100644 spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/images/list.png create mode 100644 spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/images/resultset_first.png create mode 100644 spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/images/resultset_last.png create mode 100644 spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/images/resultset_next.png create mode 100644 spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/images/resultset_previous.png create mode 100644 spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/images/show.png create mode 100644 spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/images/spring-logo.png create mode 100644 spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/images/springsource-logo.png create mode 100644 spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/images/update.png create mode 100644 spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/styles/alt.css create mode 100644 spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/styles/standard.css create mode 100644 spring-data-neo4j-examples/myrestaurants-social/.classpath create mode 100644 spring-data-neo4j-examples/myrestaurants-social/.gitignore create mode 100644 spring-data-neo4j-examples/myrestaurants-social/.project create mode 100644 spring-data-neo4j-examples/myrestaurants-social/.settings/.jsdtscope create mode 100644 spring-data-neo4j-examples/myrestaurants-social/.settings/org.eclipse.jdt.core.prefs create mode 100644 spring-data-neo4j-examples/myrestaurants-social/.settings/org.eclipse.jst.jsp.core.prefs create mode 100644 spring-data-neo4j-examples/myrestaurants-social/.settings/org.eclipse.wst.common.component create mode 100644 spring-data-neo4j-examples/myrestaurants-social/.settings/org.eclipse.wst.common.project.facet.core.xml create mode 100644 spring-data-neo4j-examples/myrestaurants-social/.settings/org.eclipse.wst.jsdt.ui.superType.container create mode 100644 spring-data-neo4j-examples/myrestaurants-social/.settings/org.eclipse.wst.jsdt.ui.superType.name create mode 100644 spring-data-neo4j-examples/myrestaurants-social/.settings/org.eclipse.wst.validation.prefs create mode 100644 spring-data-neo4j-examples/myrestaurants-social/.settings/org.eclipse.wst.ws.service.policy.prefs create mode 100644 spring-data-neo4j-examples/myrestaurants-social/.settings/org.maven.ide.eclipse.prefs create mode 100644 spring-data-neo4j-examples/myrestaurants-social/pom.xml create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/java/com/springone/myrestaurants/data/RestaurantRepository.java create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/java/com/springone/myrestaurants/data/UserAccountRepository.java create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/java/com/springone/myrestaurants/domain/RatedRestaurant.java create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/java/com/springone/myrestaurants/domain/Recommendation.java create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/java/com/springone/myrestaurants/domain/Restaurant.java create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/java/com/springone/myrestaurants/domain/TopRatedRestaurantFinder.java create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/java/com/springone/myrestaurants/domain/TopRatedRestaurantTraverser.java create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/java/com/springone/myrestaurants/domain/UserAccount.java create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/java/com/springone/myrestaurants/web/BaseApplicationController.java create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/java/com/springone/myrestaurants/web/FriendController.java create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/java/com/springone/myrestaurants/web/FriendFormBean.java create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/java/com/springone/myrestaurants/web/RatedRestaurantBean.java create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/java/com/springone/myrestaurants/web/RecommendationController.java create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/java/com/springone/myrestaurants/web/RecommendationFormBean.java create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/java/com/springone/myrestaurants/web/RestaurantController.java create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/java/com/springone/myrestaurants/web/SignUpController.java create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/java/com/springone/myrestaurants/web/TopNController.java create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/resources/META-INF/persistence.xml create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/resources/META-INF/spring/applicationContext-security.xml create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/resources/META-INF/spring/applicationContext.xml create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/resources/META-INF/spring/database.properties create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/resources/log4j.properties create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/resources/restaurants-sample-data.sql create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/resources/schema.sql create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/META-INF/MANIFEST.MF create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/classes/alt.properties create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/classes/standard.properties create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/i18n/application.properties create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/i18n/messages.properties create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/layouts/default.jspx create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/layouts/layouts.xml create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/spring/webmvc-config.xml create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/form/create.tagx create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/form/dependency.tagx create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/form/fields/checkbox.tagx create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/form/fields/column.tagx create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/form/fields/datetime.tagx create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/form/fields/display.tagx create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/form/fields/editor.tagx create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/form/fields/input.tagx create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/form/fields/reference.tagx create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/form/fields/select.tagx create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/form/fields/simple.tagx create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/form/fields/table.tagx create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/form/fields/textarea.tagx create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/form/find.tagx create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/form/list.tagx create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/form/show.tagx create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/form/update.tagx create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/menu/category.tagx create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/menu/item.tagx create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/menu/menu.tagx create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/util/language.tagx create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/util/load-scripts.tagx create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/util/pagination.tagx create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/util/panel.tagx create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/util/placeholder.tagx create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/util/theme.tagx create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/dataAccessFailure.jspx create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/footer.jspx create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/friends/create.jspx create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/friends/list.jspx create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/friends/show.jspx create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/friends/update.jspx create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/friends/views.xml create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/header.jspx create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/index-template.jspx create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/index.jspx create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/login.jspx create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/menu.jspx create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/recommendations/create.jspx create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/recommendations/list.jspx create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/recommendations/show.jspx create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/recommendations/update.jspx create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/recommendations/views.xml create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/resourceNotFound.jspx create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/restaurants/create.jspx create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/restaurants/list.jspx create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/restaurants/show.jspx create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/restaurants/update.jspx create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/restaurants/views.xml create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/topn/list.jspx create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/topn/views.xml create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/uncaughtException.jspx create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/useraccounts/create.jspx create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/useraccounts/list.jspx create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/useraccounts/show.jspx create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/useraccounts/update.jspx create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/useraccounts/views.xml create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/views.xml create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/web.xml create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/images/Thumbs.db create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/images/add.png create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/images/banner-graphic.png create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/images/create.png create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/images/delete.png create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/images/en.png create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/images/fav-del.png create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/images/fav-new.png create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/images/favicon.ico create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/images/list.png create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/images/recommend.gif create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/images/resultset_first.png create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/images/resultset_last.png create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/images/resultset_next.png create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/images/resultset_previous.png create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/images/show.png create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/images/spring-logo.png create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/images/springsource-logo.png create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/images/thumbsup.png create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/images/update.png create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/styles/alt.css create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/styles/standard.css create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/test/java/com/springdeveloper/data/neo/PrintNeo4j.java create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/test/java/com/springone/myrestaurants/data/AbstractTestWithUserAccount.java create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/test/java/com/springone/myrestaurants/data/RestaurantRepositoryTest.java create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/test/java/com/springone/myrestaurants/data/UserAccountRelationshipsTest.java create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/test/java/com/springone/myrestaurants/data/UserAccountRepositoryTest.java create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/test/java/com/springone/myrestaurants/domain/TopRatedRestaurantFinderTest.java create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/test/resources/com/springone/myrestaurants/data/DataStore-context.xml create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/test/resources/com/springone/myrestaurants/data/RestaurantRepositoryTest-context.xml create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/test/resources/com/springone/myrestaurants/data/UserAccountRelationshipsTest-context.xml create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/test/resources/com/springone/myrestaurants/data/UserAccountRepositoryTest-context.xml create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/test/resources/com/springone/myrestaurants/domain/DataStore-context.xml create mode 100644 spring-data-neo4j-examples/myrestaurants-social/src/test/resources/com/springone/myrestaurants/domain/TopRatedRestaurantFinderTest-context.xml create mode 100644 spring-data-neo4j-examples/readme.md diff --git a/spring-data-neo4j-examples/cineasts/.gitignore b/spring-data-neo4j-examples/cineasts/.gitignore new file mode 100644 index 000000000..490bd87be --- /dev/null +++ b/spring-data-neo4j-examples/cineasts/.gitignore @@ -0,0 +1,12 @@ +.DS_Store +*.ipr +*.iws +*.iml +*.zip +data +target +*.log +tmp +.classpath +.project +.settings 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/cineasts.png b/spring-data-neo4j-examples/cineasts/cineasts.png new file mode 100644 index 0000000000000000000000000000000000000000..e7778456bbc4a477b0dcfc1eef7baecb719b8a10 GIT binary patch literal 30853 zcmYIvWmFrF(>28@T3VpE6^G*PQi=w5cL~AWrC4!ycXzkq?gR@`iWPS#{?Z@)KktX+ zWKWW_v$HdI?#$c`l?Qx9eT(-N3JMBUQbJ4-3hK@3%jZEv_?LHWgitCdDClDgQBiqG zQBe|kdmB>=D-$Rv*EfO6lfd`FAD%d@OQy&WHGycguF+(Y8fE5R<~SbT83Iut#EoB~ zjaenkDH{qxwth|1u6;SmL3s8haz8a@lnT`RLcLZ-ZJ2|@a5io&(^#D;oGCo&#$RVwACj#c5gK>p+orAb7%$~5!W{t&kv)x0dB6{4d`_I zeHvt*LhK9^KC;b9;}o+(0TNvCS9Xd5=?h`;3xo(3)}{kP7#(uag>7TUWrjKFfNQkq zj*LrhK;4=^4`~lFZiS$Db42DktgThx2AwYk-kFU!zX zOlX8Ccqpl;67m>dU=5P1<%NRy@R-?Z?FGrp;PK-;Se!mtwmBM#)d+iVtnfD}Djy5JWQrin;p)*4IyMzhcx8)N<_*_d&T*h{qk9Q4YQF>7g}d%V4fKHzNK zeBaHYhGw+-Ih4{0QnEY2$T2CfcBq8L>6-RBZL|jFd2>C$s`Hg$S17V)k+i=da1M4S z`c0EOo0vGxtr$$771z2qVyHMK4-r*VT%cGmk;bk|Q8Cm7P;vwk}`?A zt2%pE{aCGddt0u!g~s1s z2lh%70|P_gO$>lq1p1SoJTy{AzI*$F(x#U-!~x<64Gdl-;S`Byd6Qx!v7sfAbx_ygborSTfO}9`uXnS^ce{lPkPk2n{U3+#%w_*|)+`5_bI z)x3o7FSa@hri6dI;uyzcD5IQgXJ;25V7Cl|YI=r?Mf3hv+~nBI6zv#LfciA=$6+pWmQ?w=Z5J`ofSkAbvcy=GB?5?I2$MFUYH6!N`CSAVx zJ~Uk~7{n%fU}3Zq&-dcGzZUSI`iZq3edE|18BnYxmGS$-GDH6dUkN@53+fHst?99Q zntx^7GW>WuN`6`u+3ovR_hqwS49%5~U=-38gh*hUiAGqK+M0lrdQeiUflWCD9D~s@ zw0M=-$#V{1qh5Up}oVP%Xut(jRIo|t}Ha)|f|`M>U08bOMic4WGhIGDT1t^c)kZGEV>D#{jBfqlS6>KuV~bPhl3;bx zdcuMG_*3V6sJTX}_M*qyR9UBa-pYyT>QEf4>AB9e56gYPy9)`;P1WQus2PAb1|*u% znDP#{%BC*r(96A*{x43E{3^eY#8?NpkQB=xH&k1-K!#X0Wl(M8`{xV8WP4F91|ofg zp1cp7&VT>;8gGuHZq2qnKlZ+^x1~_L!IveiDv)6mh2CtpR5S-(W^ zGQdEBF*-`qPZ@Q&x{Qm`m`#2Nbp4=Vzw6aBMEvX->iMTzrr@(Vvz52MSi#y-OMw|| z4s8p~sK}1TQD>C)br_I(BqXV|+}!Ho=M+gCs|-kVhA8+$G9ECAhXuOpkg+TF>G5t@ zA($Ym0V`BgYpN{e@H)i?81~lasTe@V<@GNof3T2GZAvakd~aA>e#vu-Z*UqW)yw78 z?~F3WG6a>LY_CqX2GT0yqHw(ErQ=h6Qb5|ba79S(O7a(Hu#LxIzKZ6m=8V)V5Sh38 zF#C8#Sk|FBiGNoXtHlE=2JA7=x+hmqLW`zaK^b_D$}@h=xKv3w-Qv;!fx%nFRYc^$ z2kRqNYa--PGDd4m{TW=G&{W*7q0js7_gQ{gP4bLU;n5p&eU64?U9dF6euBFr;dSnM z1|8>`eFeQ{y-*PlSg?l3Sx7N%PFrjlo!Y6}u*%i=yKaVsKCEDF?piO@g_CWqj14)w zTs4OzgbxMLDwX$rQi<8Lg;8wG!-n0>a5ED6XjxSUy_}r4xWJQnjKyptuclVpzz_EA zJ|nppax{K`l9K0Cs_f|aNKMFP%)e|Pd_g}Q*BK;Px54`5v6I;{^oTCK34v$F+Z%)v zDV>NlrUK*TY`l^R2unmdO&BW2mvXj>KsNf}x2$jJAKTx0mb&fZCz>miFIg_p_GWr` zlbW|{IM2X)@gaVkxSk(bX{p{;^o77 zS!boz%kJ{J?rz`tZV$y$1f1OELr67^zXIwHd7L02hBfm-$SN>JwDq+^XFp>tCAfsL_7c)imut1J>c z16T9`=IWcr&5Mcnw39z+sAPDTB9Tm3goQc5C`6xp?#3HfTr(o#Pw_7lB4q{hRH)+q z)#U4k zM=hftskP6Yda>i2>xu$RkJh#4BW2MN&n!mvo7Pf^HN+yB{LfxXM$bCN?{M6s=jwG> zHunnfF5cQ-Wj)C?t{58s1m!ZB1bsq`5qO1-E7GY)Nlx-iXml(B45sDWp$5+9D(ydY z4h5a6p^2-#hk$uoNc>#SrL7vDJ%{p=hK`QQm!0R1Eymh=zAa9aw1W6% z^?)N$lX_*#p49E$v^zq=S*e#UNXD1y2H+GD?mARUH&)eqYCiD<*5x zz;Q|UdDZ6(`<*lUQIHREOz8$ZSy29MfOc)T#&>)5D{*hBcI8Uqbo8geBhI0UJR3xN z77<^HI>9wZWhPYjG_2GTmP*co?w-`b+lkO;qis(5!to7%ROBg{KkqiEq}qKtZlxGf z{g6^CTh)~S|6?PX5kgH_xFlMU{vD>u;0$4ruC&O1s>vGq%Qx$iyMP$FCYVR)+#^%9Yf z*9O93VB-`kG~+b>8JX+CZ_?R?b9)9TpXgT(%JGg$s4^r?-uhX#HMCZOU@J{5@U)cX z8*~mYeB2wgJw~%o>F~4ECHKhxWwK^~P!pAo()?RkGW*qWpTx4t4sE2M21N?OdFm@- zO#+#oE+L))x{B^x}do-WGxv=3Y!K=FKc zb}W#qr*^K~?4)t_n8hm0AT@c<{MZgn4|P;JAG*bPlz2}Ym&0!;qa&JTw9ie>Fr+RW z_Ivc#$hkpS4Quf$tlhhQe-+p*c>y1m>uxQAOXcuHc-)*$8F8 zymi1?Zq)8@%^)#l9nM}tJcjiKV$3h#Po=M5pAKKLl>Zu!DFa01M{(LammzEx<{lN| z5xQ2wgLG52>0R_CVbihXpqV7xhyYKS*{kaPy55edtMel1sziS0MMkzC%jod#$EpZ~ z1~6E&19%m7bvs_vafN&|axw%|jGZhRnP9bNuly5uj<|O$7Dwr|x1@@w)zEVw-Jv$& zAe+XDm4^in`iV=M0KRwDP^?~*{{c=RqB8#;2L}Q)Dt-afx&D0?cL2g;=mPhx^ za3-xXKQ7NCYa>$du0P@tmKXj=2WQkY$DVuue)-35#;H5`!*U}Ii~{6xeEfj*s(XK# zG!9Y7B*~XL|Cm_ni@t%9pSfrQWClE19iN7D^P%1W8^c|lMzjo`tBg7+%re|F!MK@k zls1HeaP702OOx70Am<-yh3wRv)f&+S$wEu5sGlgrBmk#=K12T&= zL;WNz^?c4Ga?yMkgdw&+3tBeSR<+ZVwbwicLyOGlqxHBpiv>#*T-VZ#@FPNs4Po9av$b?g2xBRNq5#bIU-0JjXM{5SVobm)Y6%gXi((vv zJTlJ9Pjz>uxgBhP;kIif*)^@5v3nsjE=M^xpZP9!0xOnt`gEL$YWT5o?ZUh${{2t4 z-7brSL?P+v!~bi}$^ROa19?{Fb@#aelFXXvxoUR0U*g2SC&8!CqFBL`fEkx*&~Zq^ zHY=YAkw|Dc{Ph<89Zv;NX=k1i1e;24oq@e(IBQV5+6XxaJ8VkaNQ;c_4&a#j2)+ix zK6qy5aEV+mvf2&K)ULygq)R%Qt#J_?5VFQgtp9pa0=3>BxW?OOIEgC zCi;5B?Z#piBrZTc#%li;HrZw*KOJhptD5x;?3ZUUpf%<@$`rnBw{2f~|5Izr!x5iyo8gR_a;hY! zzble#(SlopIVr0zv#EDiq_^l`>+b?#ZCwYU%f0pqzmE}JqgEM~krW=T3hA~U(VbwT zOEgz=HO4u5LZlapfllulGC3(}x@#Lf4hZk|yT+PLapSb#Hx(iubdv`3mlU=>Hu9QL z*aoS=yj^Bc8YdkAMUfA0?NSXdBB7h7Mh_j8SI2G;WgWf(r_Q_Il=%na#YqR&f5KQo zZ0?4WbJ_&>K}k(h9EuyvxnT37D;n`RxC6`fuztqeAj z@Fc=!8tTdNvs&Qy7PHy<@z{0UYX`a1*E2+83}KibekuD9s}6(DdMuoBy>kE;YwKS! zQ`i8oG7=;r?;9*FwJcyNwkKf}WkRUI-QdZwls7%s^Bb!&L7CPWflKCzSjRJNk;Jcqab+x-~4a6orI zSN&ifS1v%P+48GNi$zz|96!C8S!x)qg5AoxG{)nkP08+O7J#?Rt_Ktebzz5ZT_1Dq z3^jAE1*fXLiC{I#8ETee?aW2qn^o0TUTnIW%-r(ITP8)a_azsI7wS2SMw^kMOuiGU zy`z2efgEviO4f>36o}(h9V&yXHc1BACN53!t~ZZaak?SYkXE@G509(5A4h9nmKc+o z!#JfB<*cjb!$mm44hJ3MR)QVByNkEWNDFd!hmWOkRtdGs?n`IB-Y}SV#qKlPEZ#g1 zZA54(A z1TIsG&juK{=5#1hyP9rmb&EHC5O-Z{4}=V<2Sgi8_k6L3JaPt^P3NBuyb+4~x%FB* zRtfy9g<1`$j*eW`N}{AZJlZg0iV}I8<&)VY^<4E~k=XCp92lb&LwaJ!(ygDz761r6TudC4(P`tumD|tm>BPahlz~GSUwOqlng6O2KfK@R^$o4{ z=Tz|Jo|4J_lz&T)Y1WSoNFL%$ww8C?L{^+Zm9X^C=9wG;q1i8Q8lS z96lKCpm`IVAbbR|$6G975*wuE3 z^U~~GT8al2=jHwK<+I;4lBE@@^_Yw&YussOG@>t8 z&dYoZ1&wHsr?HlrtUFK2+HWmHqDG0&V(TbbSB8H``Y(7}k)T(99h)3$Wb(PyvIJoI zzOO3LXTT8QbPE}0hk;#O{B?VydDrz1TF=qzH)fIjsK)pv&Dk1RM^ z|5!qq9Y4MvO0SUV+AP-D!t01ylF(_eoNXQ+sBapHeZ}$LG=E{7g}rrnsG;FmRk3(B zlh5NZz2kEdg*4>%tP;`g%n_S4E0)?YYOGOR+>@P0f*dD~J+}`}3^toae_}N>w;2*L zOu7h?G%uT67S`QRevP}gX2ftDx9el>us-uYKJDlOTdF(mYTP4g>t~@55f$bn;k+ik ztYKsvWgn=sVxBL9^umNtu^*>yjtvhNV=P*$snaT;yEO@jKMKvWSm6;Lv3bZEhFI+= zg=t<+`wxV%q)*YXcy#EqwkRq8SCW3K{=F1|>pyu?@XIJ!nx>ysT$n`BB4!I#_fr}w zn5FEUzkE^}!5vN=Kt8kYOk&r5Eb=Vf8eQ<)dsCRk{-e-m9QY0S49_gJ^(_*91km3U z#Ueg?ke^vKF4)YFH@V}`w6?JLH9l4`iv1&$&Gj0j-lPu&64bv}GYn*9Vr;*zmrY7l z1p*^dXX;rfFp^u8+>n2HGR5&f4jBm zetV-87J(S?lcgnvaDD(b3pLIh|H!|uz9ZVAVrSO=XLGfw6hxE*p4d-}{l__OEKx}# zUI0y*=xR{4TZ8AgQtz!%Eu&cNSi0%vcMeYN`x@Ivl-}4WQAAgg+^c=(Er4?n7$&rCcy3W)a^N;iezRk>7xD3$J9pOA6o)DvnA!6spiS-t6 z;19{*T9GslZ`y&IdGM2PHAW?X+`${iv;h|hA1a52G3F&F&Da@KQxdXMnzBCvq2T_F zVOjM|v9`Tsn+csaxeL z27@L(%>;*K3e!v9gSaruW&@$5qr(R+m;|e{{xW?eP{~A9ml4+D^>+rQHiDXSuPM$8 zJKtD7UU9G~)Z3*7+yC=2KZ4(PDxC%E$C$pSmM~KwaTTnI4DyEMu1#w4GFF~=34LkF z%RD-E;g{V0wu_mZn&g3T1N;3@f={yuw)bV>*yA72V;U{8;H{7;WBNNT)T57vwKPVD z@K;xf0(A4EJCLimaq)^z7p9+McC)mpC;6H6in50b`w)mUL2u}&G*FS@p$Ck9xaliE zVwsPQB$4|ntN`y4Nyz1;VK+pM&FhECpGyD%g`KxSF`w-N+rN~__`T9Y2$}p@K7^~I zgphr<#1Af9KGVlQ$`9r39__ILX_I9+Ws-O4LcOkvhoGxV=a^@ac#w^AG^GOO?6_(= zr}dPq!pWGMh(NNS!qG5`!xNp9rh#pZ@mXv&Q93AOzss`Xu-3+B$?YV;mf;41H0*^*O|W&Z5VT04lkg^LD)Tno zh9#l-Q8d#*+w6KKkytgV&6ecrJm!)fmNwJTjlj>GHFhX7DyG~*$#Ko`T!ZImOSU)Q zcQ|z|ib<_9Uc!3vX#MF+zX3Z9OT~8;5__!b{!6mKpd+_N7pV!bV6t%BRZ+g~lW*1G z&8VSx5h~+hQ{LWnitFYv!KHC}MgXGMWO^oH19jegwd%@6S-0j+$xS`!3&t7ozm?&q zLu5Yl$1?ahw77~bztuYvotWP`n@X=~)`3}?vDDzS2aj8=$*AEJp*v$ER8ih~_r119 z3U$UuD1*LBJ7dLVmOkZaWbpi&*T$TPVE|q(KJH(+(Lhv&+e`HqFRG&4nRZ!sXL>i5?oKvfIgxRv&4cTta11J;;y!9thVEejy)}|g> zugc!1+p5~SVcB-Do+(~=GLc4I)!|ar&U$ZmYdkzC_07+>cc*{{w@_*Ff&adb&uu>^ z>I%z)IIYkkd`}<#8rgUmg)ER@pPmt^8NR2#zQ&)0+ExXD3kETMRo}|eXi-r#x z3>iLBa(hQo(UH{LQVlu&H}m_KS;RP0R_A4h-cY?FN>)JepWs^sv+8CSrQgGMX!vaa#xa@`MzbgJ-!V){F%oEgV;FDzuUxzQjlvB5O$0wm6ZqO<=RD)P zW&ks~rWrYf8ATt3RI_=rd4w!HMg%Hq@@4F#XQ3*G#v@(rS!(bQq>gIHfweLb9lQOL zbUfR^{=Q6^u63Yp<62w)kbwQOY~6MT?(;Oef$r#y#YgC5)e2X<_&dLf09e7KQ8$PH z-Bs+7^Fh(Kwphc_=+Hy0XalX9uMfhHPvpxg7xFkeb_DuB+?tfZ?(DCF0`8jir@XRoPd?e98l1 zCt!uTd;t9Qsu=q*gYk9(N1}JfLY&_tC#$`eV^6RBAp3Ld+UQ=&Ci~?IQ(t*N7##Ah zh6go-?Jx3@zq_8t>0JYG&w$D5*!D$85Zbn;$E^>|@jVh$d=u@PCT zMtnb&$~cgh?Hwe&@Llj~AMgsIJ5SWvA(QqP&38LsQhO@sU^UPI2*o^y+*H4@f9!fD zuQPiZ9BGuMjep<@z#qaOvxx>dAJaj+8@uSca#3N}08L)t&r}ChJW}&V&)gaw2^9q{ zt3n9?_MPx5SxL29BKJcgh8*3fuX`=V9do^z8i_$X{xky7r;Gn)@5doR;27%%j8qI; z0);Quh>1z;;aObb*Q=ZQ6vc8XF;-Ib2Bn;Aw9fCLgK1C?1Sdvn%hYdJ4=UsX;14Z) z;!GbDGCl53N>6Er!3>FV*!%2p#PrO$%Bia3>`cuxt*K4VLNOia8nUW-E-gZdBXcnK z*0lI&E7C7IPzHcvZndh5!7TAZNfXoSNTdtJKh!J$#PbKb4e=an)I#&Gpy*DH-^tfzPVQ>BC{mF@O(G%?Pt6=IAweMt;!Lm{ZZ3OYVAq2;E*7(pyZnSg@%fC?-|j#=t4Tq4)uHB zFmZdEnCeMgPWVU1@N%#Zl?TY$)y*$acM>bEd=LJpQM_RpKJ6Ioihan(xQBJKUd))a zyWW*hS)I_pHYcHY(y)Z@-%vIWqgYCXTn6;rs&;Q+^_M|T!sk2l9GT?PWXm)uORL-& znq8(T#I5D}oCt$aniAZl{V$|43mnI;^E8%T7Z@X^9hlqpPLEr6&l!}ndLrcDw+(3I zz+X6wK{g2__*=K37skP;pJScwj`9r}W{@j1qM!^8b>KNDDnb*QNwv$~lbK{sRj03b zJ!jBHVU{Nheodw=vii;WfWEC@`YHg(rXqb|4fw6QLM+W1te1d}#wXV0V4xY%j<~`F z8{9V`>d@O_+kl~z>>I({Z~Y(YSV-z>0ojc~BRr)~!uA*`&wFpHc^W#*)7diE%yVD* zJ+A`&qgYM1W2_Fv^P`mWJs%c%HW0s+oP7w6VqcY**R0?(t@OTQK>QB!l{sGRUOXpn zp)9!?BV{x&W8fyy!lvsJ>smTqPYkk=ley{mLQ)D+-}oNi2KMD?&InI8)#uNT$Ju-qVyqx6s2u7Ee3yHe`)_qavDRf#$~djiyh38*^SNtmOgzxQgO* ztM@q$`0Sj3g3lq-xMu%#$>ZkH+{byx+GIi*O%&UJ1JD#XQ4b!p!f^}$zL)S*2N38G|H&m`S-sCk+(ysh?7F^TyFKei);|^ zKIuK4$D9YQqQ^dYsd2PV7i%n-%;Ko=MrND}sRkt$%+7>-tT&_3bAqTOCHmWw1%NB7HMG z`k>2{@RAn+hm~JKuE}9k21U@vltK>F)Qh&O+F$2hTM(*r+Fa?u7|#~)I>j#fol!+VX4lWrlR0c;}q91duN!~iaY5^=W+@C_}uU1vgL?$Uk*U>O_O1aEYJO$8z{o+pWt zah133x<7Hx*n++Ny?Ki#2QX)gW;rMs@W&;JF4}-)jh&IeN3lyw@G|#a6;tVLh)Gm4 znevHmU!o-6YQoW>DZ3;rj`bvKdOon`zA-CG3&J-gqLx!43y(ej0ai`2a}mTphd?ve z{%c*`v7uF#F5qH)H7rfS40>hlSVZ1lRJ!dHA5vLT;C^cT$%L0`aQswBtFfE##Ujt9oHE5G!AHx`B6B&tX+N`Hivj-F1_qaEC zMcrp38)!>en^a5t+Rma;WjPi`#^e4+L`1XqC2;K7{l}GSWjUAl$Tfz98|a#$k7#GB zX&>EE%V~{C_>xO?iG1$fT{$QOb(VcyDr>|M!?iBW^gjfCMHESMQ5AK^iUMezdl0Q9R~i|kYZu<**TQJtw(LEKPd~W zTBcfxGAsxKC1ERKDPEWYX^v($LN(*?HOJhat0$E6SFF42ZbT+y2Q&b|)u7-y7>n(= ztUOt##*O{@lPnTqpZtR{6xT~)PaFKM_+;kj$4K78^cHp&R!!x9aQ&53-YI`{7O4+k z?D^2y!!pEqz1)U&X{G>jNA8@zRMI3O8x5J)xS~W(EXeY7Zy(Ei%o#z}D#b2aJ~@PQ z*cx+?OB}6g6%)|RSL3#n9u^G~EkmlEFC#BxbuuHzG>lN578|d~+EL||j{9Pay8Q$D=Q_7lXtg)Sdq5eRG|f0>BB z{p-ev$X5s)_j%HMVe&Xqq~NjB`=>r0R@+;d%{w;yWR`Q4mgj=1!LlkHvdPXr^#o6P z2t(mbX69*JnY}zEjVeXX2P!a?pNw|%WVyhmAd;N=vM9qj4qi)$E2Z%A0Eb%arDWnO z?YRAKayZ_y>D-1Looh4LOz4^LP$FYoN{78`8sO$S*0t4><)a7S-gNC?Gb*%fl%Xht zFIleGyG#&iP6;p8NQ>jRnDHt!aYBZqy<&Au%5Rk%VFExqGg)p zgm5CGU@p8leb9!ihzIkD_Jb{!wf z(l?duih|siWnUqDMMr;RJr906zG%cZ%r{!kq;0|z$vd58$W{Pf`Bna2k}^K@s>m#8 z3a8}WLvwd5jlAthP!YSNQ44i;6nq^xJUZGu5Xs9tKIYg|Ym?)vl{;DI&3=z5lwk{v=Zk#7BCETM$i=qoC!d#(pALh#zD!tR^Pueyc!m3}|x@riB z0(^s%6c_dUwc7H_Uz^?C4^CT%m{&sBT%N3!j(m@dH*y0dr}qzSDDy|fnd-i%5;r&U zIiIjv!HZqx&j0p-A2xu`4yN3)<&2*e1gd zKAAsoi!wm8HmN3v)%lbE{qI7il-O@y4X%Zctd*f>Wy#_8irYsKT3)3*GYPgB zw0GHF1_%s->5x@#y~{E+tN+2odig;#OHF>|$CN3iE#vgKlGj!e4)xmAMo4srUK8t< zq{*u;f>!)xW0tgM+-3Wwr=KvSNi_(S`12r9!2-to-m&TNV?l#s|B2n0p;ZJs2skO7dEYD?9Bf_l z|8Zae4FD^D(=M3WbWd~Me5+`(o7jqc=c^BVkVPr{y^qj*mJ9!MuwFg>b!dEH#mqP@ z!m1u|4V~cE=6UQtk&7|x)MM##-|R43-(%(3ycFZ@ty|Z^-ef{~28M95E~OoqbA5R( zg?Q}kpR0H#tIdXl?v9>wx{<2S4|#^6AI3-y3Sf z=ByG__-|(T2^R0~zN&zxa+QN4%wqf{^9ITmFugaYHn&F+h%6A(41nyi^&V+ai`H5kG=H_K_N;sdDJeI3sgWzCy4(Y^k>_=e&7_ z`QtG5FLQHj*GnH_viFqXvneLC{cLRSsy0>TOp{nvhEL1=M!%l24GDO7348mTsdSgw zHKr`puiEOio>@-h78L$?tsCV3?JY~VTXt5Z`4zUKxG&5`at4X0XA8S>jDK0xD35%Q z7ZM7llNmhlNmEokIhAdSPpj(qioin9Z{NdUjEELC6i8w7+Cpp~W_KxfSj^d~c(5lR z>x@0)MKuT!(cKVI`#g{8uoyo^#EVIQ>tq*|2hweSbkl3~I{6GV?wcrq_4|*$3$A8= zB8Y@tLh<+7vZcpPl#XqGMW-UtDF!y3Ii|?Q)1CmP7L5ny{ReL;~kA z?-x1e<*!f=8S}+YSOdf(@k^S`0^o7AbviG#nT((89dDJc`Qc0F zrd~Y&fOT(R^?@_~`W{&sSx=}7&~C7dyNVj9JKR{1Q(bFOpo3*d!3u%?{kdxcCwSGR?TM<@p$#J1-vq{My z-$?z83w3y%{tYvL)C?WPMr6+x=#DNu1l&5OE6E0(E_Up@uuLd>?@d) zkjj5}sS>M{cxqGb6$Mf#vup0M-naJ`+nop}3nbL)SNat3%dKmQUFwtR^R=ImJTCQn z?rBj=I+~<}P2HmOcKLY}or# z5VYu&M^;a8=~Q_>fK70QJJ46K5I@nY({e>u!V5D>QD51@Yp=wi`YzJfctc4r95h|I ze`r$m{u7WjG_A)Ec+9d)2hh-&|0v*|t6cDza+E`;rt)!9g!~2PMl$)w{4xfP2)eeJ zGqa?0IyIe}E-94Kl)V&i zS~MHi9D#5HAGx7E6u>pG^{)hUahB}8gwzifQu(X=g9`8C0<*14;>=t|4p(+q;hy4d zbv(m-!_*2u44zi;-~+$55)87guJ3-8=E;jHdPbV@iR@8Tb7|-!QyPgf6zh-le|lPx z?5n@c^LZl4ta<{$6rkm~sZqFyX9ID$M9glL!6z~6;c{?khdKkg!Aa_4g0U=hZx7F9 z?@pQ1tU|zXqn~YX?c1)v#{8r}BJ+1RovyE=ec{zMeYRsGr-(0Q|EDkY0 zjYX7xF{X2p;6P@o$siWbeQgCjM7yUbZ%Vxf&t}@$Ez;JwpJ9w_79hwbUrn3(Q{u0% zZApXIJgR$F>^j5Xn0Xox@Dlj}fGuawbl*X;Uw_O?IABBbmxs5QYLFxsBJTqPG0lDe zUOKrri<0#LY1ta_HrXGUHcsDXQ<59lNF!R^7qKsm=II)3{D=oMm(OCOhyhdPDAjS@ zv-r{DFD5(H8PRZ~ztAY8wSU0gX815;7ujLOgykJa|na zZU%wzSBi+TfxRS^Eh^IW+-AtA#%bK+_PLS0%ZEX1C2DkV(8N$sI2$rez;BAR;U60d z(%pYO4^{FWR&4YsX?z^|?e9t*M3Rk+-HFCoAi<)ikX{+jn>F}o=Z-G@DuJTrgeK&4 zS+rpA>yGD&*9IyB+kd<4j{HW5x2;2!EL^eo%6S(;35H6a-*ZltiGZtX0Zv6qXfHs zw;RF4BY(~|O@76_H@Plfa+clIvgrWlYtN98o31)7ByxnidTmydaabERJ#GTXp0vNgKUQ z@h?w=0SUyUYe|&U%-xw&G`BS#Z(H@;wz0T3!&$d-f{9{pFLt$N_?E5@7UVcqY(*JO zY3{EU^cIrT#liAF6y^V!daxjOWHc){aAEW6?JpA$1&DP`U0BW;fKf<%0gq#Sft$2$BDCh3yGb$sBhGk z(*v}{mlyOv$bs6Xht_f_{pXF1R&pOXf=uVMMsym(|07U-s}wrE171Erq|M&f{qjVZ+(K6E1~7%XilMLH-QIsr{FaRgiBc69Pc33&Px zhPODxULHUu2j11w5^SDbf4Mbx5x?dLBuJ3dNv?b{?7wQcpHq@cSbu)Hk(IE^i{OZj zlM~SByvR6Vqbo`>2u;1!m;F=a^H}!quq)V9vTrD<=Y4CkqDL!= zgAgA(*n8ou%NI2ny!)6rapdW#_6OhNyt24Lf)LQ;n@u0*wM1GZb5qiZfv!u*olYlL zR-0Dsg~`q%!?xc1A5Sgmgw6AM421P*23=S^Hbwv?f)Iu_d-*(4|y zC9CMxuiUJ8sI7VL9!2wO<>@q=`^jVo$oAGBwW_X~^pk!M+lbtlJd&|!2riecc3O*UYE@@wF-4OTIj!ZgUKi!`&R&`u! z=Fkr2W61YRzq{HEyJq3%JGnWXsK0P}5h3qKuJ%9lZ;kHKBozZ zQBR&Hko6=R!V4V;6XgmOAt>_gt~ZUkY)*)4DYw{}MkM2Mv)!igy4Otu;Z7(1?GG6A zc!*6`2Z=g!3t}(V^k*R62+7IeQk}`^&u%#GcF$i){VyTB4FaX0Aaecc)2m_8(gJAB z^j|eYK#WvfXeS%vOSdek(vbP)O6oKdq^D#!8WSGH$eodq!5TF`a$l!qVvMHENZw@^ z%0$*Is>snc$x##~hyT~vTR$}Yes91k3W_w+Y0xo3Iu!+xQo51u!RQW=PN@MSl$4ep z4H5%JBRP6>Z<84L?EU>b&p+_&x7B^legAM?=Umry&h0$1z5AgPzUSp`-Na5jc31;S zv^SoXwEF+F0G*K2a6?uYzTgJz!lh1R(;$NX`WMk;cp~Ao)oYt~ZDZY1nD1M8$LE4|B$|QwK~JW-E{n#wHt;=XYnvbYqV{RR0FM?V?VV!` zQyz3X;LRk#6y-|HFU{}>e~9i2xdlE|Uly*&SJKNn!_eFok zzlwO6@Z-Y6#|kpI;HIAA&}ZT{$o9xrDnDQ-Di80rAW_y3*m@}Hi;Ndbr+>IPmE2KB zbl7pW;J7)V#FF-3=s&p{bipqS>X3stH)bBxz?iop-We$r@}3jX3B7}IMy~AqcoTNu z4?SP@6E>lt6O~2FWXlG&9CTbAp_h(>nx;jBGdfZI48#Q%3>?U>jmv(HG9!YE0v4|D zkZ`tN7p;sXfXLPtADZlYJSBBY3|IVYBMw00oNP=V25rpn-mFcqaHR_-d*N@sPI_TN zBWfsVc#MWuvzkd=*qvIpRz~aLFWE;jiKx!f*AZ*eS11MRHUfH^#>92UFdfx}i>yt? z?ukSz0SxiPcx01ldyhYcr<9Zv$?Y9Bt#l|ysuFbX&};G2U7a7h(*7$I%J*uVV+i11e~OcU8=i)AURYNTd#a>wf3o^jR|H*hgp;s~UXtf9|Zr zz+oaOy;nHJZR2Cg`!r-8yPdc4kVWG-hvn8bFHo0VElZpAiAG&TqorEO6Rfxm+|aZ% zAQi4Ukn~(Z)eGNvJIC8};w+uJ;N>4Pzg;%$?Rh8Qpu!tT3zch(?Q^ah5k=!3J$-{Q zEfd*v_rM4rhPe;BS29^CPnxl}>6fEh7(XoNf~zF^MUG%p?7m$&WJzXIY=Lya@v62! zkTYub2InM=3Qkl4p{2oGa zdjE>~m7dwTZOr$5m-e^(3kRgnj0X;wyq>eVrxK2p80iM9Cx??^5ru zz%x3<+yqYsgxQOOD~r66z;3Ku943Io(XT2}7GHUFO143W;Df?M;;>X{lwals%5z41 zthNQ&C@kM{u^tOytiH^fx+~!vY?cPXPAT#47i4agTxTr1AHK??k;~e`bvKpOy=`#2 zyE#YPi;vY1P(9qn^qzWsyNX}{at>Pv+-o^%+28n8kWia%Ss|IvKNN+)w65G#{XV#F zAGr3^EUCPzrEJ6dXBRe{g>gvC$KNiZyc* z!aG5_2k~y_x&sG~Irp2dQ3&g#w|A60_f1L1?juiqeDn~w%r98JYWl(OA{OHjs1*Fo z^O8*HM+<#M<6oK%9;XvR#|8~KjE7Mz&zsqSAD$5>&cB70?^aiYkd?DmH=aE$77)Vy zZ@qmTh0I%y!m@jtkt11O^ytBCW*oNeH<60Q*`s+nj1dsms+5h#noh=eFNZPxsF7xs zBJcGg`LOvrR*K zoliBW?jAKD!cg3dyiWfWCYyA>0!c!bUEPNMD1jb$S!oKc3oGLd(BlN>+%UShyH6@} z%>T7rG_787o}@_3d&443;j4*8f1D=@x#0U0ToY<(3g-*9IWm2xZ??o$yOH@B^zWbX_v*P!;dU)zCM@Y!=ChH`rV-;E0gCC;ucS5TpNf! zj(aXC^(U78I%~}a6=W2{gKOxhU~&iIfwnD{*v0mDD|`q2JtxS7;1K5RHC5|P;$0aN z*($bRW4-M3gh$uuBET^;{F#cbtg_S^Kpp~@bKct!Barn_`*@2Jgbw%y2PiF*<;jU1J@Yb^Fh8UK23$=)_&|1 zO*y1?JkH2*{92&%_O$wGrwVLl-%E;rYV&vexA*uVri$6HCDU9)q4f_~1%8-Yag-oP z8Yr43c(3QgI3rL#jIByPFn2|0C$i+{oy65a-P5u89vPG7!`c+!y?Szid%g##$h06d zSU#1ZjN){k<^i4o+V$}M{`}&0u`2iXpZ324L9bW1Z#{O7SzNsY4C*t>7Ecnn+5K)FzQk?zz(#)x0t1)bD;yQJ?lm&2*NZDL}O*z_`Fp8 zJT7Yb<*@^6we>}dTa*26n6@@&kWcnX&ytt#B1?&<*k*c6Vh_d|%WvH2FQvY3-85@M z?{P3!^GGcoeJ%03aGcI_Qhmr8)^a>rZ0gmyt;U=pE}KrQX>Qml649Vuocg?aYv>#b zRo%0q?hQs@p>v4{xGMr_;|+)LR>IZc{v|x6=E$+-}bEQ`m@q3)fZkZrpu6#xkQzv7WMbzP>%k_GI8c0 zB$&;r`wqu`JDwG$Vt^u`cH!6iWr- z@7n2WJzdj?ww35n_^D46*j@o3RW&x{QFv&DwDxO10@(OpVL;2p0X~AAvkC@BUJ!=9 z@u)>J-n-gwzP=Spms@P$`8+&Wq-2k{O`A?^OWX2yM11|8v8a;thDN?7ZtYQOPW+2B*e&k1?j0qWsr~7&{Kuej zPuf@k=v4CHr}Lc{ERuWpq-YBs6WEtmt^ZN-?tAZU`bX{J5DU55>%_lPKG4{Y1Z0uE zl8G*{hdBW?(iLW)SEY5TixF*%%f;eqf)dip&XXJP7$n-d_rF~Fj38cF_lLeIsRBO#5Gv>o+;u*HJ21>JTe}n~;+vHlgw&;qTRLmu}^qI{^lB-A)fHM7P4u zc@jNtRN|TPY(+v(EphqQYYr4`)5z3&7A%X_GD|EuoTenUM_Gd)i8K~&KrObdAXp^< zB}V0=yb4i`6ZqcSaE|QG^o3p2NZO`7+7sHTErUHtA3~uGYq`LuZ*3@j((U9KsfHL{ zn@@Vx|76ORNg&o*>Qi+@#NpGh@Nw(vmI}BOAg~@aL_wh+W!1QXvuCHsbj$cPdid?d z)S>XNpN%`mT6{C$A&2Iswt5TJ97`uuP5znnOAh;ZhEVxq!zzjnofwhK2DoM>l{#0e$q#c_!ao&rZ&9Osbnpe3O4&#DT0S6) zKRtmdxh5LZx0bUzdY6H|)%0usG;5ds}k=Bbey zd-Yp!6D259a1(@QD)GJuxL5>KS;~`09>yxh6q*QMZ3Hh(dsSCe37F-%^Za-a5ehL8 z{jOmY9aOK?Y9nB&v2sro6Gpn3kXa1HjrJ~d0!AsI^G$0(L{q`zjv zL|)lA$GH+cdt8|SXRW?7b#3ae7r_<12ftq5-sHChNEvBGHjNxw_y&xmFV!XSZzU;^ zd{+Uq*DJd%-yCF!McYM2iVEi3bQ7>V!#5ayR%4m7Yc^b4-^%nt$9U$aLL~KX&>Hkz zZ{jO2j)0-6UCFMHJvn+OT3Ef3#-~!z+Wch;{S4jYjUlCBC2bpHiDw-@?yi@xgdFvGy_zx6h<&W_j1%%V|PCwy!M*Ch^La(VAV-(;i( z^j7I1=f;0mvlbwDyyRv4aUPWG;HpQo+y5neWl?i(LGVaWxR8IU65h$4Tfs82CTpvrC6 zOZL=^T?{I2!~fMX*5(o2#VVUR0qS!8{g_^iv2;hqp=a~qSf&0#6$$2y71C#*Z@tf@`ok5rr-teJuZdZ=nNM zH1n}ZoU>zY5<3|ZN)am7WhWuE8i26GJ8?o*8#!6LmOuBuNvYk&S^7*R*_VFIl1f}K z5T$D=W&fn9d+1HjK3ZA)#+y&5-MGL-ebP&)Xt*_kJ&xg}-V&Lp_ct}2Pc_w^VA5}Y zga_Ysb-J$o`6{nYmP>-jg)9udezAJ-Izr%=Q*V?=#|1T$q%Ca5`}9&9QM=uBr6g#Pn^}D8l*FX<3h_oCfmX`sDhuSRJ~D)GJFC-H~i=MS<9SAO!2 z%RgvV)GxJLxcA)nzJZYu&uOdH6bj@s9sjp$56T&8-LsG|a8$0}UjgL%fQkrMpK8p^v!#bX^~T%#uBtKQ(C- zRId>6gM}?Irv&RBa+SYCH#W)C5Z$)BGpIem+v?z1L};|DM-aWb@gHHM4j9AuKU?=( z*xSMeo%^q(VaB971v1dbc)f7;ccv7RGe{Zdw1UY=*jVm}b6Y@IYrZdajd|Cg3d?ow zp14_d75yTWV7rrCk^ni54HHytPD%}b_gAIq5L8uRhveE1%z($geBxQy?+Sj)-<*t&Vtjox8ks0zLnm-wqjmM_6;m*ciN|N7a{kO^L=U3Er%`q%pIMBk-e>kuWY!q@MrLx0lg8yAw+(H! z0Ox5rUu;on#P66dB6s&`zYM*-P=mXlm07(~Q>4lo(SklVWmAizbZ}oMkey)~$;x7a z6ED(K7@`dwtA0MOiD21gQcSV^t6GygiV;bvhrN?v2Zi0(5rPDj<=c#hj%S}s zuK6jAXd4+tiB(B?!D_X?GR*I&TJkP%gM+u*a*W#tjJ^pllCCE>CdR^VyGesSvA!iO z2}?ZgIXkhgK}t5q<$(t+uQUBJRb^P*hXv1)&lAcJ@G2`r9)nQ+u9^Q*gNiv)AJw{+ z7SSi#t>eaEIX|S{qRtZ<@W92nZkqE3MZR8BGmy45qpqd&n32li6Q5r2bY@7BougW1 z+sV3n|9soQk2iOs%XXOGw}^!o+`J}>6WSSeRL@DkB3~?$QKOMd4P*evq$=WOwOq~K zeXMed7*_na7romu!~)0bK1qKrD$%g*pECAzw`Hxp4C|9`80ap>F3!K=Wj<>=#+Zp}a1`gZ{Zq+AW9Muy{R} zc9|ZVzY|^)Sz-(=)|ku|PSM*ppNd$T2K2@fwj8jN+tz@R71W5gtj8#hHq=P5d+D2QkQ4&^w#?#ktW`(r!iFs6#Rvb1xa_Pm{VGMPg*>s5DT8%`oELhurf|SDTCp zIW*xcm0&f~3We4gh9-cQe}_YTw-_+?%HZRgp*oAtSLNGGLAJyh`2Ib?+X`-`NL<;X z|1|uI1ccCk8Xol%@r~f~I6V)IB19*`%{j|p?eD!P_c`j9+FFN8AG`NAiuBC>f+9(z zX|cO2qCL;>*3Qb%Sr-JMuZl#$OFeVr>FMmw)wfZ^ULhxCQ@nSv2q7U?q*lRx@pO4e;hN7m6V(`6KnjDgJd}{xVHc^~l2PSJ56v>sIh> z5tsRKM*6Ih7zL5S6kGmqv4|W{QXuG=$EO2%)nZGsd;XHPlDRi$h_M0QqomSD@!%1O z%I>8+Yop^S=PHo^*bUZSveq z!r79)ttVK}xUhUMbhkRp$M8cRGEk_4Uh;x`uM9fTkQ18_nhcon@Lt|^uN;L;&y`X$ z;rBZiKgFUgua!bZB&~#)!a^+7>}8pDTP2zN*IgC38S7k;zDsAWPJgb6#Xvs(iynS8 z|IxlqdkBDNm(3+DM6TYXbNd3vmU*v{I20EM_H87F@TYyS z!4LahZEEya#(~P~k)22vTV*2{<67HskU!%u;ElPhV^1I2(>lYOY6jKDNqukvMo*3mzZ6HaOkm-G1 znKCYpL#NVn9>0=Ew059^{7v9_YKYK;`jRUn=iLhu01M>bk*y@9#JcFJO&8gJPiX$* zv&P0}qkW`Kzv+dnqS%U-Egtp^<2&Z?D|9S6{1cl^rx6exu(Da#|#IeuNG0qL`1oc;(Dh1z}AuLMd$nb9~yf z^>qQ|8B8UZHXv;GiKQYQ-yu#j;8^P}(Vr&W>waDO_cjK)=-?{FJeNURcY$5CnfZzt z9zGJVT%UuEU@XXn)O}`#16lQy#ZyhDi1pa<{hlP@X^`!oP&f*vJ!CC$JEVAe^LD4g zEy+Zx;e9OifR%sgeSj$Ejo2X{+oGZ9_i04d*=&bjVS0~E#gK>+v#*u%+Ir8;?Mv=V z@%OLau=evDIepjw*}cPpE2k#Lcjen~<8=#92DBUq{8Ftlv-t^XTdw)NJLD5N7{%&1 zoM_RmO&IJ)tV}yg-F;Fbyl3lBK9bg=&J5Rf{?SWxdjjHp_U!KN$N5}-7uc>$g8PD< zyPap%M5v>a9Yf)IYZemf;Ng#`!N!94&u-Q>$$2$gb!R)>edFdH(yY{(C___oJPxCX zqPk4Tg;cAVJ;$4@!ex1WQI}e{8AaIlG{Q1n0v^YrQ+w=TVNj#YQmZ2!(KMQ~aB&?) z_ZRN$a^^E6H*WT?9J^nwza=gPcivjFy$(EN`MHLtgjKBp$UxN5T3-BXEVm~F-i<9< z+*Uj9lxn;@EIdc3)k+MUgj2j_K{jBi1Pt;SNYcBtpCQi-mxc}Ps}e_#0@6jiU~U^r zWNQBP6tLY|IDcJ!yYT4j6n!V9S2i_89Af>n&)yJu7T_zD2bRj8mj`#|#Cg=mhj#gH z=YYp_X|wsLKCj(RAh75chaCk_&aregBy~_T!@|fR<-ktl*#madNCfDz%0sXBpIZ$+ zp6JW=9uir@Teri!xDeXPx1S!pwJ_AX15dMtee8Ya9?$Ik)p%ClQ%&NgRSq}RxjO%I z%OH39cVfMk<<@ty-yhYzjMcwImjEfD+ymp^KAHwf089-3sf28Wp1{tSR_SR1e8ex;gbP!M4MRp z-cf@sGg~JJpaSEoSCOIOnLrjHs}FUR9@5BnjP_{Z4(8FxClFs+*G2-RYEp)jbN|4< z-K$Zyw4IN`d=~mKidS1~gec)NxAts@8k3_&3;$t3*qpFA6WD&UP2xP;{b}H5t_qB= zB*N@_;eHq1WH1ZH1lws;l@iXvrztrl$9@G8$3pfwlWpyjez!MH@-p z{1x8(5lBk2WJYBgH2zAe%%w87%Y?W6-^#As%+;5)3cbB4J@u%IlYv;26$7DBR4tEYNIrAhf@k}*v;t)+Y$QbTIm^X=10!Eya++`RdV-(Lk?4fv&xbxLegf#-3ick^7duR z**fjE_q>Vhxj+455sfz4E(=#roO+6CxdZ9T#pC5ap9Tb!4-=`+ed}j^s=9cxsDFOi zO|h0xUcwb=a<;o^5uXscyVBXoct<>q@64_HL_P8ETsXbx(qg?ZkFIV>q-r zsm06yu=T)k8h!Mj;{(t_?Az5?tBYpPbc3<=UUd-mu}ogYHk>dzO!s)%4S^DVL#=q7 zZT64k34++nLvCReyWZ&EGFscN#jPug_9)^Vkk3iL3)+ai`IaVBv~hY(c8rsTIPy&8 zg(AoRwlslX(@_`@ptj{dCf}A>*waW#*ew&pQ`BHm7Cp^2{dGLNLJZkMsq2y2{wy7w`f+B zIm{xjFtt!s6Z2LlCIcF+;cU!5+f`9dXup*Ema0Gg7x^nGg@gnrEu*1)8K)m_;V7>h zpY`Z)^~R#wYyY*~6Bh4l&{llShB%@4_LP5zW@GTm$4xk_RgRx@T?R8OjAV81yhg)S z!qduZOTST3tm4pyr4?$_Kv@5NwaZ2`)_ZN`spbjl$YgJ@p-xNCU%iOPp^jc%k+?N zbZw;>dH4)`@saT6ErFs@OJ2^oib3)wQ{)+ic#)vVhj967dP;}h|M;fgw86FZq*hTyL+fs3&w8b$@6MD{e>SN;FPL{ z%|}~~9tvLZjP4t#+I|Hcy*O275$4{E}R*WNrjS6|C^o%&{d?h|uA2{{uimf-## zc-5(%GIrc+w<5f+vU5zX=7|^5TbJ^|O3Ui<(J)rSOjRGtMwv5-w)X zK^)@OFr^7qmnmgGrRgWr4W$Epu{1P~Ya~=L;eG_)4r%@LI~a?zkP|`1)Oci3;I`>G z37B*A(tm7AH~c)ITgfQSGIOlQ*F%nHACx-w=*n4exKTjBwMQ5(Czj}L@Ec=)LP{sp zn~c6rD#{2j)fJg18f`yx{*J)(dPy_L8~Dbx1&kqYt7>^7JRo>KWLrs+J;zl5EpJ6> z>wj{mDB3H2@rnS)>s-EXxaWx>RjXZ!aEM#3tHl7J6S!s|lKHz&Y;$+d@bUfvHEZJy z)W(e+H*rIhlhQ7$Siz>QY2lQ}Od2D_3SAvt{Yi+nRqZXh~1h_S?vgj5@Q zHOZJSkDUv!o18=oq62{bx8lU+*nojQYNoVfNb6L>SR|{`Mx#vXUzf}!K6~-yM(pUr2gvzV;veV9XTp4a zDX{2ebG>!z9G)EEFmmUgi5J&>PnWRu?+xrBTdR-T1^8{Z>&_Z zZ&R%O%4ILC}F4}B97_90I3&j4pz3*b_@5M*MBX`Gax@X=)J=byoOkt5g zZEsqew5LW-`P~K>R)^K0mUSlu1~}78^z}PbuT6DL@iq4KB5;bj_IQ49NeN>$j!Q*i zyt3t(GkoZ9vfho68`MQ0lSz5TDJ(S9=-Hk0*{*664|xiir>GlZMdtK5K7^ix4A5 zhQn-nX1tx97h^3w%~xbq3P^ftrq(-g84^h4Rok%iEvOF##eVLUD-MtbX(pwSlwxi;0kgoYRi_pR4lTmY@*l~VB01gcw`-K1H3uTvGSy?$8uV$hpYWEv|JF8r2(O@H6Z@GIycs5Dy4KY9uB zmfc~$mbD%U3&|&LUf+~SSzT-yG1w5R0xWCow+*KPRFbSe%(rL+CcRgCZoK~~IY;t_ zn6BlJzIM>dacKOr;}HAHS-m?+A?+Imm!_7>+2nT8`OgWL=$b~Y%*l{-q3dk{3Qyh5d9=3d>rUtI)CSbpzr|6L-W>rNNUXt%NBk_Z&E&{s&?}Si zWz*pHVHAAWksgHQr!hAL9&Fi7)!R=IwpJqBe9v)wjujpc?6n+Kwnk?~P!u1K1t@u@ z+1gji5yWrTj01O!LX9mXq)p=9Gadsc1-tGUxd2=~Sx|EXG3PQ%^-GeBwVL2JA#rnK zql2IJPTXd&nw-td;M9@KL-{0mnK4L9Z$Yf|vS8Hgd9>8+1yV-2+mu@3X{J=yXH=mh z>EB{onsV7vri|sejn`1OmHTdRk@G=t=O5sE#fkYF*vStyW$$~HyWsq2uB6Hc2VVj52;6lzhTK zj+b{h{Cp)r?)5C_d!$f%3JQ&^MFS<-t9})d4C81Qv~tWPMy?l{!iFdH<3{P&4Qf)~ z#VNoqWd=+g&IT<6EY@Del2=w}BuI+TZ$I?e2(P#+dQ7koN-@B}AS<<@|Wcudmh6a_9=(4v<9*3(oj zo0-pPE?aDF_Hg25qOAo})>h^(q8eIY&iV3`QD5O}W zxIyp8@mKATSrQS(+IUn8J*T<-5xAel_o~cX`kMaqTiPwnPG8$Ybc7vs3HfM!aXwqjRCKLIDv#ta zt90K5Cqxb}U;X8X1CvKNrft(?V7%;SV874zULEB`!`IFr6ZSE3PW@VubpdyU4y^{#cfqmlXUuU)(+C`MTzyr8K~rq$V>))1ybvRa{8#7ggv=2p6}RFY83@cLvHlyVuTBYr3qepGMgQS0jxy|Rm=SNZD=W$M zE3?M9)gXl|#hyfOpZ75|CViK)SdZcSa+$8k| zc-b)1xh&*=6p3!HQ%^!s!pcRJp`v_OFG_9c)Gl5a+C;_(fy&!&elcw<$SpePgpW+N z6c?4Z0dezDiuRlERNubkikB)>MmCllR*4o^@Y|FqoU-uC33*Qe&n?}{X@YTxQ94dE zw<{zA*`?a*R;(~>i(%OJbV#*XcPj0|oJr`2z)(Cv+18$uc^JStuwa1YPyhtbXwUZ%T#iIA*6(6rSyOm18j{rhlMg{b3R`k-PEv-K( z&6l?R6Y;eX7Z)H7au_zzVW;t;m8FrR@m$igoa?o&xK#1osO*)~o7h-DuS=EF!Z6TW z()w6jrrrBT+_+_BQG1Sp3ii1Qf28+1TOgNK8Sen3TiLzUO(kt!Q(P;qulUjK7YTH4 zEOCrXfhN|ltXc#mxO;j2#~CgBN&M#D)YAn~^8}`CMHACMmOalnuSnLd$%;LE6)T)! zcv_QaruX}NHf{&)PL&{36ntEO(n*^Vt}gQK?+&d~;Z*^XCW=<{8(Ph`{rj6N=hte*sxxXlWMYtt zf8yVBWY)*4=@H`(zpu{#vcA`UFMGtL=a6yiCsh2`(=) zmOTSG>v(&P#hLKuB_H_j%a&`XogePOh&ufByj|yVa&r1U+2=0C&=HV2Up$eJ`L!-2 zt?Po2{zB$5@|2kaFETQ+XK-+ka%HZl@kFWTEEJ|ZJTdXP&8)GhNh}t?e9cA0IHJG| zMgA1A2+0=zYn9 zeT2lfOZ;;Gt$y=?V5%e<`@9W2kOVKQ5>S68>Uw&VR~V-scgWcUT^a$T4;C zxQEQ;pFH~iNO6y?^@Xxm7{X=)`y-3U7*a0RyH$Fc%+@;?b?bp5kIAGoPrE~(Xb7&` zD`)Q_6E*txx~XJOU_sCH z)WMHgNLAxs(e&^Ah2ok|-C$%mElhQRI0S5F+NwvafBh4o7kokodx9VPFc5XbN6-AY z*V@Ba=VyX%Rf>?9z1k65V^qmm7Xj>k_Uf1S{(gRbq2x|AE0%XFD=Udjc|e7qeb9MH zu9miJ_(-xcqsH(jbA|hX(gC-9wmmll=Me;?oh(7v(`{C1Ko)0l=nc&y@z>Xj%pL4> zW-H=B96~Y9pT4ma1!L3nB1z>g?0k-M&I>d=PC8#aXi-SJ$gksEjqQIi97bhDPZL<5 z?eur!4t${EruexX{Wq*ETe@`NFs6D?#8$Y(OzP}4urzPzyN30K@@zuM1`Jy0KtN}B zR9EV?F-3cjGI=DqTiiT*IRz+EY09}(xv4^Qq~sgnA*TPtJ$XxYb9t-Ra~ymtdi`$) zMz+zpme_?nV5w$lzwLMI!T1w&A7rkLoRIZ(y90<^I!}S)kET9_SUVdFhe$aKH!1uw z^$kfs(_-EJR~lH_St%YhreDad;``5g-h-&YcjhA1V%y@gV%BB)Mk&*!ij(`Td#&+x zcEvM}2J5`~4R7#fOguU!dMHf~LXDNu_5gT~VzTJAEv4liUE!KdrAgzjsG)_t)tFu# zH-WWsm2R%({dkoX+WtFsvT>%j*uU>RarY2H&bT^Bvfw!>(+Sp;D+`PcCD_ywV(Y@x zuq~@HvmUU8rh3b(Gx|I>lzU@V3hwaARecx!4%u}&mtoUvbF(WHl^|+6+Q9zGnxBVi zlSaV`6!IEPCkR=ekK(UQ6XJNZp=$u%5G2?j96pTnuUiv&CH8vBlTe0*EykaO^H1BADy$7 z#1URWyoN~R17^J@4Oo`6-^HEgL(Mqw<=Ff&_ifd>n?G${D%yGcwar5H;7{41*^57l zfvFmv_IZtk;~EWyt);Xo9*AL>exXW#jfzo1q_+EK#j+Oqph^}?@U@ED< z4l4HwW^w_#0D+Fw%|P;}U`Sq!Tnqz0{+B*~(>bM;RT|y?ix{NbfP7#@0Yd3qg$8` z*M6qc$H<4cS$Q+zOkjR59^1<9!9xLi6j48pyh4X`=;{UfBpYkP9FXky3;5v#SFpy z6}O;Act|WzZ)!JQ@c)(%O(%DqaQ5|*7X3flP9&KUZ@$Las| zg$n13iCT$R|No2`D&mZ7&ZFl3Utf4|zO-hkyTtv^SbZGM7`zTyL-&7Mlh?!f;w6%^ zO#44$c62yn>9#OS;s5zkMdmtj=pflH`2Ta`tHDrLpFYYf?fiSVm-2h{cU5n{eEoj_ D(w1J7 literal 0 HcmV?d00001 diff --git a/spring-data-neo4j-examples/cineasts/pom.xml b/spring-data-neo4j-examples/cineasts/pom.xml new file mode 100644 index 000000000..ba51727e3 --- /dev/null +++ b/spring-data-neo4j-examples/cineasts/pom.xml @@ -0,0 +1,325 @@ + + 4.0.0 + + org.neo4j + movies + 1.0-SNAPSHOT + war + + Movies + + + UTF-8 + 3.0.5.RELEASE + 1.6.1 + UTF-8 + 1.3 + 1.0.0.RELEASE + 1.6.11.RELEASE + 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-public-repository + http://m2.neo4j.org/ + Publicly available Maven 2 repository for Neo4j + + + 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 + ${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} + tests + test + + + + 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.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 + + + 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..11d4dd956 --- /dev/null +++ b/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/controller/MovieController.java @@ -0,0 +1,122 @@ +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.service.CineastsUserDetailsService; +import org.neo4j.cineasts.service.DatabasePopulator; +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.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.*; + +import java.util.Collection; +import java.util.List; + +/** + * @author mh + * @since 04.03.11 + */ +@Controller +public class MovieController { + + private CineastsRepository moviesRepository; + private CineastsUserDetailsService userDetailsService; + private DatabasePopulator populator; + private static final Logger log = LoggerFactory.getLogger(MovieController.class); + + @Autowired + public MovieController(CineastsRepository moviesRepository, DatabasePopulator populator, CineastsUserDetailsService userDetailsService) { + this.moviesRepository = moviesRepository; + this.populator = populator; + this.userDetailsService = userDetailsService; + } + + // for web service (JSON) clients + + /** + * 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 moviesRepository.getMovie(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 = moviesRepository.getMovie(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 = moviesRepository.getMovie(movieId); + User user = userDetailsService.getUserFromSession(); + moviesRepository.rateMovie(movie,user, stars==null ? -1 : stars,comment!=null ? comment.trim() : null); + 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) { + List movies = moviesRepository.findMovies(query, 20); + model.addAttribute("movies", movies); + 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 = moviesRepository.getPerson(id); + model.addAttribute("actor", person); + model.addAttribute("id", id); + 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..3ce26359b --- /dev/null +++ b/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/controller/UserController.java @@ -0,0 +1,61 @@ +package org.neo4j.cineasts.controller; + + +import org.neo4j.cineasts.domain.User; +import org.neo4j.cineasts.service.CineastsRepository; +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 CineastsRepository repository; + + 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); + model.addAttribute("recommendations", repository.recommendMovies(user, 3)); + 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..b8cf7278f --- /dev/null +++ b/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/domain/Movie.java @@ -0,0 +1,225 @@ +package org.neo4j.cineasts.domain; + +import org.neo4j.helpers.collection.IteratorUtil; +import org.springframework.data.graph.annotation.NodeEntity; +import org.springframework.data.graph.annotation.RelatedTo; +import org.springframework.data.graph.annotation.RelatedToVia; +import org.springframework.data.graph.neo4j.annotation.Indexed; + +import java.util.*; + +import static org.springframework.data.graph.core.Direction.INCOMING; + +/** + * @author mh + * @since 04.03.11 + */ +@NodeEntity +public class Movie { + + @Indexed + String id; + + @Indexed(fulltext = true, indexName = "search") + String title; + + String description; + + @RelatedTo(type="DIRECTED", direction = INCOMING) + Person director; + + @RelatedTo(elementClass = Person.class, 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/Person.java b/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/domain/Person.java new file mode 100644 index 000000000..81f445a92 --- /dev/null +++ b/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/domain/Person.java @@ -0,0 +1,124 @@ +package org.neo4j.cineasts.domain; + +import org.springframework.data.graph.annotation.NodeEntity; +import org.springframework.data.graph.annotation.RelatedTo; +import org.springframework.data.graph.annotation.RelatedToVia; +import org.springframework.data.graph.neo4j.annotation.Indexed; + +import java.util.Date; +import java.util.Set; + +/** + * @author mh + * @since 12.03.11 + */ +@NodeEntity +public class Person { + @Indexed + String id; + 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..d93858386 --- /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.graph.annotation.EndNode; +import org.springframework.data.graph.annotation.RelationshipEntity; +import org.springframework.data.graph.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..51ca954b1 --- /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.graph.annotation.EndNode; +import org.springframework.data.graph.annotation.RelationshipEntity; +import org.springframework.data.graph.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..120d32ebb --- /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.helpers.collection.IteratorUtil; +import org.springframework.data.graph.annotation.NodeEntity; +import org.springframework.data.graph.annotation.RelatedTo; +import org.springframework.data.graph.annotation.RelatedToVia; +import org.springframework.data.graph.core.Direction; +import org.springframework.data.graph.neo4j.annotation.Indexed; +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..bb9ed3de6 --- /dev/null +++ b/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/movieimport/MovieDbImportService.java @@ -0,0 +1,128 @@ +package org.neo4j.cineasts.movieimport; + +import org.neo4j.cineasts.domain.*; +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 + CineastsRepository moviesRepository; + + @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 = moviesRepository.getMovie(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 = moviesRepository.getPerson(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/repository/MovieRepository.java b/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/repository/MovieRepository.java new file mode 100644 index 000000000..b619e9cc7 --- /dev/null +++ b/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/repository/MovieRepository.java @@ -0,0 +1,12 @@ +package org.neo4j.cineasts.repository; + +import org.neo4j.cineasts.domain.Movie; +import org.springframework.data.graph.neo4j.repository.GraphRepository; +import org.springframework.data.graph.neo4j.repository.NamedIndexRepository; + +/** + * @author mh + * @since 02.04.11 + */ +public interface MovieRepository extends GraphRepository, NamedIndexRepository { +} 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..98d278ec4 --- /dev/null +++ b/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/repository/PersonRepository.java @@ -0,0 +1,11 @@ +package org.neo4j.cineasts.repository; + +import org.neo4j.cineasts.domain.Person; +import org.springframework.data.graph.neo4j.repository.GraphRepository; + +/** + * @author mh + * @since 02.04.11 + */ +public interface PersonRepository extends GraphRepository { +} 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..166a1e4c6 --- /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.graph.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..4ee5fa4ec --- /dev/null +++ b/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/service/CineastsRepository.java @@ -0,0 +1,62 @@ +package org.neo4j.cineasts.service; + +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.helpers.collection.ClosableIterable; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Repository; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Map; + +/** + * @author mh + * @since 04.03.11 + */ +@Repository +@Transactional +public class CineastsRepository { + + @Autowired private PersonRepository personRepository; + @Autowired private MovieRepository movieRepository; + + + public Movie getMovie(String id) { + return movieRepository.findByPropertyValue("id", id); + } + + public List findMovies(String query, int max) { + if (query.isEmpty()) return Collections.emptyList(); + if (max < 1 || max > 1000) max = 100; + + ClosableIterable searchResult = movieRepository.findAllByQuery("search", "title", query); + List result=new ArrayList(max); + for (Movie movie : searchResult) { + result.add(movie); + if (--max == 0) break; + } + searchResult.close(); + return result; + } + + public Person getPerson(String id) { + return personRepository.findByPropertyValue("id",id); + } + + public Rating rateMovie(Movie movie, User user, int stars, String comment) { + if (user == null || movie==null) return null; + return user.rate(movie, stars,comment); + } + + public Map recommendMovies(User user, final int ratingDistance) { + final FriendsMovieRecommendations movieRecommendations = new FriendsMovieRecommendations(ratingDistance); + return movieRecommendations.getRecommendationsFor(user); + } +} 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..2867b2207 --- /dev/null +++ b/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/service/DatabasePopulator.java @@ -0,0 +1,54 @@ +package org.neo4j.cineasts.service; + +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.graph.neo4j.support.GraphDatabaseContext; +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 + GraphDatabaseContext ctx; + @Autowired + CineastsRepository repository; + + @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(repository.getMovie("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..8fe13d786 --- /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.graph.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..905bce08d --- /dev/null +++ b/spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/applicationContext.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + \ 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..fe4e70b5a --- /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..8c2c40129 --- /dev/null +++ b/spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/views/actors/show.jsp @@ -0,0 +1,35 @@ +<%@ 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"--%> + + +
+
+
+
+

${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..a14df31cf --- /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}
+ +
+

+ + value="${sessionScope['SPRING_SECURITY_LAST_USERNAME']}" /> +

+

+ + +

+

+ 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..844a034fe --- /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..81c2a4e9b --- /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..700045c24 --- /dev/null +++ b/spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/views/user/index.jsp @@ -0,0 +1,103 @@ +<%--@elvariable id="recommendations" type="java.util.Map"--%> +<%@ 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 + + + +
+
+
" />
+
+

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 zcmbVx2Ut@}yY31_dXo++Y=}w+>Ai?lrASo}kP;zuLX{SzDpCZcHvy3jB30={KoqHh z6oCW*>4{>91jt$F{`cPh|D1F0J$LfVTJQS4cfR@FS!-q`6XGZ062Pdht)~q@AP_(o z`~XBWxw@XFrk$~gk+$A7Ezkh~>MDoM66=06=;O za=e_uL;!&7q(7EGKW{$}N1R~9Z~K!I?C=|x{j!^xXo8$J5Ysz)BTo45K`ig+V($d% zBm=RC^FKHa|G*yZ{$Rhq3KMvwg?XBrg69ihPT??Ltv@j&(#ihHRnRU5=DXnpyP^eR z5fGQ%foto5SOBc^cM#g|$p58$;ZKT{I2<#FGerlaqe=K+ZF7_h0u5 z%#EZUxCyueFaQpCf=5q)7cc>IfXjd=;0+)EFW?U7frAVF8yraNH# zS1Wgrp#!XgZPtIa@d5n7)+g~TfXjwJq{v?pcqOJKwk1AF6iPgk*nGt0FYvb~5@82- z97)E2aZh?a$>t>P?;KC!pXBsAz9X2e2IzGMoI$GxSbuBs{fjU9&+P7aKH~bz!+X*P zEY1-350$Wg^dt&6fbmXLpQsN2u{(GL`_6%A{T}HPRsS4$$A9qtIo2?;b7Ysu^vLAN6aZc_H8OQFRkADKl@i&tzgn1sV+98S z!MqV*_V%C#Pv9=-{rgV;J+{E_xduKl;5^cSdBPBIN8Xe9Z;bG|19yl0a{NC0U)=v- z{-5BLrw#vAcCCa58(pHe_;U7hj9OeO&|h)a!3Fm4i22GMIajh*SB8uA9|l38k?G1UcK(=?R(QdF!*+8d}8wB)byvBSrmHt%gXB7*YyqTx9@vDaQpb5 z2Pe890O@a8e<}M9T}+@Z5;8JUGKv#j5RyQ!k}{Ez|8eQmX^ra?_CCyflJ_WCE~gaM zbyM+6nP6BQ5M$JAP-)b8?1{8r%KqPkMgD&&`%Bp0x@G}dQV4kSNSOdN;OMX@UI2Km z2lejy_I{m3w+cnFvYR#BWbk=i;ZuD%_bsb+lCfDvYE=B|v4kZt(c;PaSirVz5WR9D$ zb7)*4!nffqdULdl0d}3&?A#DgC7xhM)nv#mqik%Xr-q$!goyo{!HmlCjyb#L29@-tXK|a8XcSS{7@0!h`18$JNJHZ z#%e3~@Dcm@rMvt;?@-uI$c(1uHIS5>LOhSbY!`8*p?=d7ryJl zI=1}iHLHWVi7tny+PPqdwp-4Ox4l~qp%`3eS?A3v)p0Mb_JUo#*UajclANQG?}YpsD`eBQ6eV9g zrAmS)=r30bu_y84@#{)xqYAVaC@!d`3da%SEsy!3y*ArkTtB{3=()VPs<;vC zgx_O+CY{a~W)O2RuuzNMFbysnOde9o2rl#Z zmo#)V$4lPbAm3_lEf_dp#&#w)jF94C;LDSA&bz@r~qbs6)Q81X5;j$5!bZIxi@)@2KeJ5wRq@{_i_PHxYXI0OAq}@gm z;_pryp*zUy$X^}Q6ooD5JI68M;U|jhT}Pz*hzNK3H*Ca9kdjbBAxTkc)xkQwO0}`G z1@S-VOnY#M_29ia9>ou+`k^!5#(gGIzEZIMl%w!56lTpt6<(FbwauE9S}3O) zF4~ve*~OU>rasHSOW1=lgY5<$24W5C=o?G5;3Yk&GCAs3^;Zm8InGgeU5`-04i2{B zH_9O z2Ac(M>W_!<)ug`M*bRXyR^%z1AM(v-#jYl!J4xp^Wy77s;hb)B+6t+sA@ciVq*05X zB83Ot)m%tsJ?q3uin=lcAQOd=7DuRy+_wreKB#l{U$PCvBptXRIX0(UjZ*vz=PPT1 zhH93=i^;+-WGrIX?%b~qpQl*gHxe71^G zlgiu+TiG6n5@FT1-*3W^qSQEvWGUw&e8}?f$AuDQt`AZ4V_qU-?FrFLEBzyp)%ldB zAA;m`VTIgWjqt&1r51pJBFPdr#hz9 z@rAlh%q{jigd*ffC`SsHznx1%!R~glt)3A#l{+5&f>WN-XYvdP^fX#?s`ilCF-?>) zO`prZXTK~;O+ZCpyHtz=L*F-ct86%GE1S;pvpSd_~QZFPjT|%L3Y}&gFBEP z-I~e!iQ$)sK)0^H(r4dpyO%mW6FxFEag}btc^}s;2UE3QH8mwRVWha;%F^Hc&R|Fc zG?p<*gT^m>WZh3Pt=FxSi5NHWJ+ZBY6r8;=_zhu8)uWa8~KzOt`8sV zWnJ6-ao7CI#a3N6oEf439zMQ^F*a~S5rOSM_N`@t@}X$XvQB?Gb%u+xSKW>GgXg~m z=zPES?wqY=hxC1a2hA9a7tir*0p>aph*&rq)lUS@AYpc~Qw0qCd29!3+Sz)vLR+j? zG8pYXi*}$d$EGTK!Z@H2VdBddw`mA8;RDF#=J>;#C3u>fSe@-Zs&z!d`Bd5OdfKwR z4l4D}9r5Ok*P||WI1dMwVl3CXiGYjRT;Ou^0P>R@x*)DioWL2h*^6ZG3RUqrYFuVu zekV8MA!;6|To>CMFU5CT5^ce|yrOJ;s&+erU=j3vdGV0x3%(d7*VDPp5E(8wIvTWW z+tIEOhzcQu>9Z09)tAF<_ET7KF6eGLUk#5Pe z!f$2|3+hI;I*ag8-N6PUGmBQ(#IM(-!cdQKl{Xw86_WM59D4Ui?`Mn#$__7R1m1yI zo<>|0rT{mBXMc7mqu4Okm;E93LcEe$%6mA1O|LX*bzW^~mt|3Gn%~DJHX|CjRJ2&n z-knS<*TXO)j6>q{ma9+qAKb0p-YauTqRBd+l2xLUR{Hw(d-Zcpu9s2j5OcRBBfP*! zKQa-??G?_5k3%EV5z%8Rn{xlrUQAzFPY;iYDI5q7nT zY=NR@_GU5$ii?(*&&L@7R86hTK~4j=B>4H~o#Q)o-4rJaE$Epo4Q|$~$Bab#U2W|I zr_-4QIupLpx%X4q3D$bd>W8N(yfx@myoIIukGWJiunpm@a>ih8PRtp*y=XSmA-y!NMagOgN*yBiE_M@%uVFboMdtN3Fr z6fH_584uhCD&&=aUioo0d6e~72A#x`Z*KMc`u%ZwLq8#vnyp;!8DHq*j&Z$KZG-$g z#oTvUp(7G1aA7Z-QGX+Px7||Lrhcl3`Giu0eq3>}A569QXVi_->Tsj`y&nrr%r@Ti zUk`wPo%pWE{92XwsI%=4cx`xhpei(|h!7YnXC^=YR%>q2Q0gD^w5R)u#Nhla3NI5|fofPfFbMm7ZsZagEK6*d!F5=d>yAV+L<|7_xhv2v9)< znz^OK3VaZ5-zWMQ8(eY*Dz7F?JjD%)9b~UNU{h-i4j?mEn zK7_8&cmDCZnVK`ks9*H@3tcYhTp}>%;}Z41 z!}5kip?8MqEA>(uj3!6ey)PK~+Rm;ZvlsFSFa3ln?Q?T?8Xu?SO?y;3ziiriGyOVk zYQ>0)WRW8D#?#Y=iGBcS?T&4SGhQfR5tHj-;e~%JvE=-?m87E$W|^2WDJjt_$VnFL z@KQRN;cGUT>GQ;r8F;1AsZ0$Hn=j6s2Tn@?!(lv(7>`@;RJvE0%8I%4^(tL|KGy%N zxN${Dpu2dbAcE)HjYg@c7hLNJWA>9rjA*>ubw6Khe{x8y@`n zbrU78+&_$7Vd+o`Q+aJp*yL6*(#sw&ZjAi)0X8Qh#S62aeiYUvv*wgbdcWH{&pqGY zG%navCO;e5HLK`t_T7?aJ+SSRhBU9I0~00T{+Tc{ z1nmGspJTBST|Qo)TO2H98En%&)mmvaTk7b4QNCR)NeAtmxO?dPY}R&WJ;MqaQ!N%+ z_N;)rH1A3Nym#d&bK-nKre!a(dAduS_0SmH6S#e-f-hVOQ5rVtL(<8(5#Hqp>ppyc z5Y}5-APGtBzu0_laDZx64zqMLhgBO0)_GX%=S7dV==X(rD8S~t>fa+|EBd2y5g{ac z>vnpFs-w=B=^i?Ey;kGqls=~xW8cQl57U+>0v3DP85oL9S^Hb6top+2g#yy9RI^`L zhH=B49$)PgcA6SbwW!1B^w{Br0Cov9ST?`>+A-brahb7}qL3md!Vo`Fv9fzExIbR@$~+Y2-7hH-}Z z3!g{aTcTTUr_B#XY76hj-8@Pn0x#4M+EApN`0`&10B$@RmEo=oK5NI37v72 zo$5EVo_Rp$j-&rT2pM}u zUm6uY*$3K_a$Cf>)NX5)z?oEV#W3{S8nJ5htu~)4eh(i&`D?~bD=|+{F2uef0+ffr z80RG9(hSYwj9Yi`@$+y6_;s5F+n_t5LMzWE{l5Cgee{IJ`X%(4dt~K3dHsq}U-psq z?pNm?JL+)uAd24XrsO5N*aZm2Hl>0H44MpRV2-L2*gFO77NNS87l-r@yD+-DwjoO+ zGp0B{d?2<){C)>HUS+9(I%u3(uz9j!PW*iJ;ip*zw%h&V*R1 zOZ+G%g!oz0`U7P<5|N^Cah9ttj+vx>9Cha<%Z->lg}K1_hOg^JV{dz74wnG+{R)5@{6mG@=9$FFX58+r4(IYdcGi~O7+vwPFnQRJ zx*g`3ab@Cak@kyP`SuYOyoq?5D2h{Ap*G0ZV%&?ocNkaF2)EBYgRmhb=cPrccb%DT z9McM8XK-4axxsOJ*)*HcB5~YsAz-XiNnGXHnwYaUxRXEkYbU?&1!gs-#4Rv8J+I{E z%|)BFZRR%|v_BP;3HgSK*>gqly$rF%m(M(TTGaefPq=*{uYb;7i^T#>El?D3QW>Yk z%Y!cVSha87+E6_=UgOExtlSUO3{0j(BDpqPYOdLm(#6M}4|a8HNOi+B1oDn{rWV#F008cQ zA3CSGQy>CE>@1 z3sk$JHwECo{&=4E#`IDlnxYiDRTPE==(Gz?odTB<`{pKgtAHJOX8nc%_S z0{h~b8&vgo=nhaCNI>B{dj*tZ&JcS?>wmA~IOROt2U_5%d51NKyaiZkXZ>W`m1ann z1cD?ulAj$E`LfrdlGkv-Eo@Ck#}Rt|#FutW-&PqGWXrw4#rNbq`N}oz@(mIWLSxqO zi?zq(K1Z+c9~vAKpALue;$W~oz3HR2VO6}b4x;EG$dVT-J8aOwKBU)vtNxV=w2$YQ zG&b;e(v5g9VcbDcxttWXLsf`7XP(c8sljo zYuvC?{pSO%UdnVDWi-mjk;>zxbg+viBl}*SwI4U{A>ABZ%c@gNL=?MfR+`zjrNrlL zWp~o4%KIPP=Z7z|nPH; zL&a(NEn!8)HPST`X|$#c6~hbH^^7H4Tbu$;q1WLuDU+m+x(CGi?|Q}e_iDurUpcJR zfV2<0{_bzle)p(|e=Y!|y@ZAn001=dzYiclW;O-@00Drch@i4N;B^kTzqU%xuU%Ga zR|QG25D+9Gf`kxI0dl6gz(d3hWaRn-Bp(W@JOWAzc|H+^R8nl96uly{r8!|peDISs z(qd8#v(sHp$M4+hcE-kzb)iPy@9!^fJA2Xw_iOG4ci-dH84hwJaLwH|z45A|~=S%wkF7qF2f8ik3e~~P5VrryUeo|*(aYDmf zPxu;%Z)fPaednTrAyouZzhwVg*{>ReJ8vy-W1-`QBhgmt)Jfx!yC7w=4!qnx_9c8t z*zpjUV(N*it#umsF%mt+)u=-?#HxPUK9JN0Y{`SIn`pnd8ad&!!5 z)MSKKe-{TYzpP>61|;|;$lx*Cf3^zbpK%2g)R=HHHTK-3(atrrHh;M7z4l+fKc3NR zG!@Q$Cmg^{}B$anpcCW()h2uZWkk1;Yb;xoE!lq8h{<}+%AchcMO4+|hM-FKy=l%hgy}Q;aHx0&=7s-~Eif~Ym7sVk`fQCUxtozTA zodpC8UEt};T^b+;Y%F1WU0*id^R-_ZNy$&rs=MdVpKxvZop8u=COUL8lL=+=tzeb)tQ^tP4#R=r_%m`LFNyY2V7p#pQxK*2udyte_&eQpO%%xB5Wur~!K;0ije zvmp{;gr@}TCm;xZq8KSkwPqoLTsd>LDj>y(-q9TRyKa`0*ni(NOY@HT=By#~&`( zLG|vVW`Azh_D2xKVInS>gnErVeIxz$OH;M)3>6oNA01i~o=(u%)M7BhQHMj$JA6sh z{&Pko2xozO@N5Aw{HajazWYn;y|14T4{DWgMFpxb#PD*QECB+^j{+lW!PvCGM5Fis z|0(0(LjSNflqV@KaoLQoCVXFNBZ|KxYPw!~#DBzMwWvV5U@@H^@9OZD;{zp!mw8h^ zjDGzOU`#BnYj2Hb*aDNdIK2bqXO3hx(g{Aw)lfCtda}K5@br?=@E(Ww$Z}i`~7UBU~4gg z8w~pGFN{H_D%I=kN!Qp}`W|1HxzCniShxh*X|fQIWL~Scl@VM9j zo|L~n5UC2>kV>0Y)z8Suk1ECRKwTz^aDtD9D8=LDB#lxE-^i9JLC{voN?NNI7fb-P zulF{!=+D=2vXR`+=qugsd?I^yNH(b|@vt^@wVrdC$BP80FziP|o70`yfY7`)rh4aGuq|k4S}*hWc1_*!|qH z{|{fb0{n$&-A)G;qQB@Wwx&=DMnYaf`Fysvpx+tv^z`sid?@+`-y6m;zz80+n$aD! zSAUw*Aio30A`i>8AqHo%S`#ae!}_{D{zmyaj$}S#UtTuq{T^ZxgFT0w&*{~VJ1Uxx z!y;SIhSp8z>I_Tcq$toAL+;a$iWpl9YVMtK7%1y6K~Gt>b+bK}Y)3)iW+mS1?>ox} zHOIyXkhnv_CsO|hgpeRyg8!ZWCqp?S4H9NI=2Q-=$G$FRO?S2Vyl5 z><676AjYuhG(xqhXK$AYwDA7DlZXDE zO|Z~{gggbN2Vv> zq|5P_D<(^o|La`1ZqD0dXLIz!c_{e1^lN_`+JH0&92TSFtd<%}Z>!m0Dk02gurW+i z6<8WGx|6^t;mR>agk}6!BEyJz$mvp$a-I z)JEc>?*B6-6P!JZ8^CWn3Ht!lRgbXUsj&a)^YMBFDAeiQkq~0*|Bip8I64%rwArF| z*;!TVewcAlrCRqhOfHAVmLF$yf=iwLzDnKpeG+RDGZi`FI@hw~f(XlbVw5K|10fAM zchmE`OOCR+skNEL$9?1me*OBO+w@+yb_fpV zNQ@9V5_nI}%qhSXYA{X9Q6E|U1;VW%&~us;w@`a9ZOVunAB3_MO^UO`ki)mHfy5q{ zod!82k~v^JPyR&Y_>?;k)BA&XObN!;U~O_v=WSBQZLiV(VlYt+syd#QN?wAgLO0F( zw~=w^b-~d@#UwrI=<_GDu<7M=RP3xw?!6wDvL&@`fOhIVy@hS!q<(7%(EY zeA0~SdwyOt9JuZq%L+zznUn&lNK?o%XAhT86(8dQss&v|-}kVHukE}0m138w7}7Wd z6y)zyf5q%W_ce>^1<#ML1CkeTb4+V>^vG-@X_m@S)TJIG|*E(<6YQ=GTNS9Lw_!!JA#O95Cw($NFq8a z!&yIZAyQR>PTx9v+WVo|pAhdN-EcbWRzO;?bsAXz848${(HeR0E?~%gf6_0Agj=yM-e;j%#5mK}EiVB5ZWpPpu>FIq(Cqm#QKPAWdl+*;b8mHn&wR zH_g?=)>hIAXZ;l5OkgV_stFi7QGNt+h7rsyL_4ZEMck3RpC!jMZn1yDoz%4;e6SP6LFnK!j^`g( z7;WN`5l2Uu3HruULgH3MV2;d@;8v^GF1TNR3bXCJc{M4U*R>vv(0>!9q)~*a_9BTJ2#wn-N#5O}FLD z+C~AVwwHs$lAK666VL?u_y>H;A+&ia9Dp7P-v7^wu>M`k_)Plm2C;3Q!q6<|BlX4j zpA?ksi%uLpVm&)XYqJeZ-NX60CNvo`Zv}5xMA#zlsfRFJ$BBPX(}97ps6oh|UM-Y( z!Fkej4{E&mcfPq#*X@zDfVfUThxf2c*Fb{`Ey^9+6}xo|&TnA>51*Tk+w3Q&>2%jxBPMkRNmO)q(06)&bnjGE zPnrBB{(rIBJx(CsEL&iZ$tzaV-KXYHF2}POx^JJJ&L%80R}cry8>t*C9d~Y$RMT*p zC~)Ljgp^=p(e&WpXDr84WK`b_9I^!q;A$A6@FZwlcwur`k<}Li{9Jm=eahBtHzR&a zYIeUP5I+q{VIqf&+0o>v+AEGupXp6CJ35c0#??K;k%t&~!8R24y#HE0AanUnpEv{Ih3UU! z@lFTgDSI~|2$)jZfT~e0o9lgb@8_fc`{kj~zo)pNf#X7%5XQ%vufm%0ew!kv;pXQ# zBTx6~o7(q@_e~sA0r!tTUoZT7kE7e{ZES59?Na4kde=uLWU=^e(+c2ze~XP2Kt;5r zRoP}}wN^tQj)J2MLl@dyEA&kQ{Dx@zpb6(I6dCW8Hej$d^e59+BAOUbwThq3v^B8+ zcErjIB>w@|eI2-foD&dvRRTcleq&^Ol%kyi&dBLj zrdXH#^aNzOH#kW94m!QgW*6zDcAwXpxk7kl2%0Gn5<}`rh*x@OU&zPfWab-D5L{DY z&hB=*X}^<^wcOVt?_o>hH3N3&ZlLUF>+xRnO$?`c!j!)uXi5^(iThyJu2_m#XoT96 zbY;aG#v`x@19J94^_jA+ROBtC4m-U^FMI3FBuOo%v%c5&LEu`d__HcOW%JyTw-}dD zYUl3p+y7$>Ixzp54{^-MEFc75;}|+bQE+WdYpJ2773qXVW6$Gtz25Ncc=7$Rjoi?O z@{uc7gSdeXA8t`a(W}9jzXGgDjwAg72)?*JARM=+2cf0GA1w*aj9g0aLL}Q!;TV1g z*pPEF4S3T1yvlQ97eFYHr6;cmbqBDOoEjLY+N@CNT0Sa4qJ*SUKMi9WSTHFW@_v|_ ze1`J9y82>LwbsLBJ+Hr28&)?i4MSYcvIx`mCUh++W+M5&bf7znu)Zl90HYs78_V+%?rko6+otW@?FwS(O|F3daNx6A?L*(y$fSfFc_b#1TSa0u*>x5!yXny~w* z)(apR@{`5XTM+g!marnUd(_%r>qZisdw~;pbI5kIivGhOA+X`>>2hTZM+I|aKuEpl z9*AJ0sR&^N_3I_ewl9|kB>&I{gUk4iVBA1(@q(jpha;w>*WSW`nR-zkS02GUR>$08 zXM4Usb?rJ!(uly6VB zb-1d^Oa+4u*!a%nYBeE$I<8UFnBw3Y)twUCrK0mKE)}I8jl&hp(I#atn;$(AHUy8& zIk>fH=~UEI3sM=F1275+hdyQSLEp^r0$tC?*T$*Hfbce6=aoLqv!tnKfk=p2z)qq> zBN8nU_d_nba+X(Yt$$F20?Cwwyoi@feGj3-G36mZVAG<%%^K%RA{7ABadXkVfDlJW<_2)mx*Jn4f)sCv4c^c^QZ+G z8S;`8wp&_nSE~07aKQ})12ktf zUlKTmWh^CS&g>x4*SMd-=;Kx9ZbOZ=@@3QOdBw&u!3%jyA&MzAQ@v;_?tzhfHRV^t zJ^`OQoIcXcP1e<=c1x*oTeCG|6_k`|g98lIrcw*Eiz`9Z&HrVbZsZ`I`;4)G0_&v_ z$COQh=nHvaeP0tJrr?|rUmC(!E@T0Ro(PAcvPO|m@cv&|h1!&oLS5ER3zKfDNH-bu z%?$}U>VF|Y4p9+BY}rnXMk$+Aqg{-%rH#W zYgF3@q#w}8K@iKiU}+mUb!e9#KuuTt&q_Bp|FM~==EkBU@qr|ZExjl1(DfyrbyVkl z?@OmC0x|TnuLJ*gvUQE2RhUNpA?Lto7!(ACu490zZrt1$m$%lu_w*(2Clb0EWve2& zJ!DIDkyodTX5!|T2ST|)LSpIWl4o=ae*=mijW(Q) z1{5^_&meCtb-A#~-3oDXMiR8t`VlRQC(fifK5i<9B^hV+)bqEv20(8qLMl6+6I~PE9fof4=>ANB7*7va8@5J3rYB?JQ z#MoX7OKEIvU#pT0t>9W#JNJqarhD1#xY^y~9~_0$7CK&%fP)pXl3nM%Ln^AduGO`Y z^3AGSQRiEWv`-ETn6Mk;r6SFSZRd$CNY9kB9I5kcX-t;|pGSoRV=;h(GTRbU%Q2DL zXD9@RqVF1e_6I6saj~8B)_d`j2R*;Ty3M@Fqc;=Qh(wz^QSBTmVv`eYx+Q|Diu8;D zuFp5hBoU3}=1UA!sn|R<>I=mjU+0Q#p7q^SvsM?cjV17%%NoA&!#~?IZxsU6G>hoOCaxoK;x&J>-2_B~ zGzR!)1n?Nkc@}EkHLhIFuy^m@&Fb)+fP`mOpi@BvmKq+EJ}X(ZbbY^RISmV15!A=+ zDL!mgk%q7Vd{itIh2JTGgo`Opy&xXScU}&`uxzS1Rr&JH+>J+kE1k)cW>Y9@l;I+M z*>YyxX$bVAx(v-f)pWc{<}^Vb@^waUoUA*v=VsTFff+={L^rFBb3C7@0|D>R!A34D zS__p;M3{U*SsS-ncEWZPU3~BNFrsHizN&6dp!QA=CCkFL8%vbF1mI8+@r7TfiTg*# zc(zKD-4^DkSYRTRKSFpDV-Q*4-_iaObaUu)m`d^MC%`~s>;N>A_{ZQXp+KS+xqP)z z+jFIDJj=CyunMf>ZWKknGGAncM{W8~IHMmI77SOhugG2YPcb#=d(dWG!QX{Mfe1B?tOoSkh z#nx+#k01^ioO^6qmPbyonhF##{v_K&OQ15y2Y3q)??f-Hw|n;c18TL|j$|X(i%sv7 z7{<$?P;3>TVT~^X!%LYdLGR}B+dX7Q6v5k9hZ+Qp)|~Se*Z3%5v{2iQ?`sr~*aafi zgtE)i!{m3AkW#dWDb)J;$@Q4cLDstGVw}0QWYkl%@Z?IAuANr>?LXe!Rm(0vlGSGF zTZz8W=9a-PW9{fHz4*AoN2fH+@6D>ZdZK26vR*W^cHpG13XYsXr3mgI_jt5eSzJ4wx915m{d~ZG&LF z_Jx?&huKH5GM7kkM4g54wHIJ71ktUa%2YSHGz7Xb8^gI#*2YkfGDR#cEKtXxRimNJ(ak zw74HWj^O~%`;cQ9OqrI$qJe59WGcWxce6dGj}btV8v&x|T2rOD@0xpiT_iWNGeJXy z?Vx54s`bkM@x)BuJ33m>o8@EX^r*7-(@Wu^0R;%M#n5u2CMZKeAmEkXmjUjkV&QP$0K!^hH)dv7&uMC-Fu2e9eE42~#b)#VP5O(r}*D)s8$}Mna z|`ZCkCouDs1+^+OGvHnWwvHy(Q^VwsVXISf!PLDBwQ<#p7S zcl$fB_djqEl1~bf{6;g{w`5+HzIt zn{~}C(WeyGwgzajz3`Yr#Ue+d{!Gx3Xq&`0`itvxXS~s3x@_ypRFoJ|JXR0pa)=#) zm>F%|q1p=NwCig$yH%G~Q)qW0-CC!H<(Y&|5eTi^wNtQjJCtL)`QkpcHy2G&oMMzH zV!j`#QuSCeUUj8Hfu@jtHk&oJn+K=BZw(o#EqT;xl*@n`obDSA8A;tVcE|3!+O3A* z3_*m&kk1by;Uyvg*qZPwNzz1{1ZNTRh!98=Aco-?X>k96UB~)9^Sua6Q{{V}AB5if zZF=02RwG-j01Q9Ll0=~>3^)>Xqv*6{3diEqU9DDGH+N&{48)O&qy`wxyuB|4+nA%y zMO(qbY5Ue%KDvZ4*Iv-?=YGQ=Tl3c@lA&eIapiK8Yy}P}UW0fr4CGBMvhDYzw2$u% zJr;?GpKIWZ|1$+S?uP=-^ASW9;0+KvPu;Y3brCTBGU?WjyX0aUy~x5Q$y2;XzH!#0 zYQwUpim&{u#!!h?Ypvi?qNnK00ScJtV+Il3B94L$9snSJ2J|ZHESKNyM~H~5Fn_(P z;O7`V&wVxR4>4z9@I*7Lt-N-~Y#^#b4)@2cdDZ|n!Qz5gK)w*Pd}~ESg@8j~VAx<` zr9w(eLzj#&&?(!H3U#+;wRxPWiit8eV~{#^W$(>$xF+WBwXC?`^8TeLd1svOEBVT? zN_{$#rTKh9uM%lX+i?u?^|YI~=*}${`uJ3AUd!!p`%VRH3KNWn0vfaV%4%lcKeFLc zXnoJN^U@7F&*L=nxPb|q;Y;@`uFqH6A6{lz36h(%Ni_xauJj)n*c7nz$gVYAi(&o` zC7V@#DK#%W&L3Q_nCO(%eI4)<`}Kb^+(z$X z@){VNpLuiTvR|4RxrcZAy2u63t1fJY$YvyP0hdNCqCygr0q*pXZktCfTlLA-B`AJMn#zIG?b8zwK=svf^jtDPdGPQAd=byerrNX`xU8oL-HM35NC5-9X= z5tnQK2Kf0px9RFD9fbaK9Cp^kS|O%(AnZ8p+RN3(@gfu0_!YGNI`hnJ{I>v;Jcz2< z)8z=yD>{)KU`teEGmtb;Vn6$T9;T%rk@Msk-?B& z06irPbqLb9fVj^cXmfI(*OgznOHtg@Nb~xl!+}6;6K77qmqCRp@75^@%;m=T3{LI# zS1$8y#kDtqe%dTcurB4tZIVQGtt}LGm^rSu@phI$&TA8T&OB^QX8Dr6gR=|)6{=*g z$j@u|Y@0C1vE9;ee=JC)in~{E5wIyh=Vpm@z?G{7x&Bg9tZdM##kp^zwJ#Zwe6zLw z=C>66VQfEoVhS0OQuEUsdB9q0u7}O-xm1?#?5abTJN8hymX*T81-5PHSv);B;{XLN zRk;Elc3uTkD4L&VKIT34?#Pam>?D?+VZC}6#yZNVYfpXqt;x!+`|_0g*7N+K26Td> zc|J^aJU!A|rNS$0WaN&!tTNxN1-AP#*EDRz#b*I<25K~;L!*nlLF7mdzj6^~J0i|h zL|enf)!A3k!f|aC0PFGMt9ez(mP>C($<-Gd-UK|qlGti-_@-icrQ^#I6)aoj-g5Vx zgI43axsYlzaqsJGDX!EB#;_^}D#v*qkBwX7>VO>2deV-pA$64MBf(wz)V4+GAx4lB z^<}Ti(-yaoGkm=i*cpE8p^l!{Z}qFhX5__ZH1;A*_HmT~FbmWuUbX2o--ZxOikKgL{YW%CNhwbrcF2~{OuU7CHM*K0}e!Owqy*$p;S1`D7V}_x8pmhCD zzcipqwYbUJ>06L*hD^@`jrmm6Ivol%2tedS48yhO_vKR2=j%>dznbF+pCa(+rTl}i zuy|7yv4!s4TU4~pXZum{3Onz(kk+9qhIb`eeUcydNd+t71&}{`3yV=8aq1drW9s+U zeB2@@nwOJ0iwSZ>pauvCO4}`qdg-R-5x1Z<`PQQ!w+5^_x0(WsdT_MVAN}9`vJUxZ z0eD+R*d9JFImCx(;dpz(GA5k)%Tnf$`es*PaXd(kR#6mRY4<2tPDZW_q37-G<;IM> zmg|S9%|AwgDhC)9`kZf7zmMSjp3f~BfVLuGGicvder`h>df$J?_`iBtushPEvq9ws z4h>s0J6F-t{vow_v6);Y%yC_)^0M{Jex#x!=qlLx!g90DB?N5cn*p)?e-G&?Ls z?-st7u9KBAf|SP?qf|aLE_Aj--@26kbhVt^@tk|G*<6|yJ1=<96eEgd1ifrLhDUrp zk7*A(9#G=+-dWSC@mD&g)kOeZqX7hwz5g2s79Cis&A z5e)yr>=D))&B}&~h)T4bYcN3h8yiv-52typJO_G1sxvx5m|FqwCIKN{5pL zrW?M?yWDX578avoMq+nd!9E>}GpU&{9O6qUbVY^G`lb~i@~9{Yh&df;Td_g1cy%;zcfMBtvSPI`0Sya>cj z2nONlz5LKJo6gLl_Y&n+YF0W?ZY9<0z8%e4$IQK^=~3nz$#kC7GqG+Fw?sPCQp%@N zGcp#BdC*2+C>^!P^1W157hxC7tcTuj40eU)s{9rd9kIA3?lY$5DR)cgc&!O!`zceQ4=I=2LQ6`&z8J4$q>PPC7{xya-736)=g|2(}Wayx=9e9UhyZzl2dO zqg-AI6~QRCG8R)rj5R7pdvj4k*#MqFFw6IZ9&iyk5qqRYH1fc04l=i{z zm>yyHj>Tl8TbdZ2VZ?xGcvJHzDg%cs?4ly=Lv$M-DHgVq`skY``yAAj@W6ttV)lmR zOj(DJp!7+LX6G_rJ+P~`=++NU;ScE`4yl{j6>!-v3YXfNHy$O^v%;I0B?3f2P{*jd z7z9~hPz2r-f_w)czucYI#~@LQzxSH{HWkvY^SMO<|U!uT8! z381<6+Jr@w%!@UY34b%(S@8VrD>hhGc$Vd}6zZO%uoWkllx~1%w-;1^5l0e3?NoF? z^Rb4Fe%2;Y2vHE0U9X8 z__BD1(Q`!QE{%#KUjE`dAjZnn8hY_hg%VB+hT@bD=w#@X0Gx9`OmPghOjj@!8Rq_; zL)i0dbm*wCjsGG8e|x8J7MuBEMMa^2Y5hn~Il0_Fb!-_Ey*Y?TNS1ptBD#r4T-K(v zz|vPC@`H*>VC*Z1K%CD~d47K{9pqvGs#H(R8|eC$Xuw9FtZ8k$%`Q4+WguWQIX29X zUuaYN$Gs0DMBq6MMxC0U*sWH4&aTejaTy$sI%}RY_0qo$;@E++m#+WslFGv&|qkQ5XW^(Up(}6Y=dc1$_wfuz2hjdyV)- z@)0>M4~!9r%q3=E(qQGJz{SXco={$fjf+gQ8{iBSl6$`Jek#quG>`FIusT5s&d zk#HHh2^3}~@OeDXS7u-0Ia^bYN*4^w<*)Hgy^b&U0Yi)xf_3J|tm(JdjN>qvbL&eh z`8k?~ScRik1%e~#jpnQMlm#!KgvUA$v`F>)ik(}tp#9XwBg+!q0xtGCWnd@O3e_jiOSCehY{Q%cq@U zO6>!E1Ab`Y&IFGlN2Arw#ImPQIO7k)pWojGw?|j1RwM?g#uX4LhCt=y>G`R1Wf|+*y~NfS6iAMR zFB6Lr{4@g(2qqv^rWLi6!jTZH4C7Tplt7Q7t;e*?gYVRep)LgVl$CGe%>k zljlmC3iSNXyuX^2Y^Z0r;f9;5Ush9BOymSj7htb^yJf7jynKA{<(Ol)WzJu*81%0N zlYV1-A~{@Qj1~;BY=9nv6$eGLA*xY;C<$zUIK#^yDxwnvk(ig_)vbuPdi?S$3Mg}S z1#*-sCWXZ!F7ti#JId4T0Vw|FK~}IlFaQl)s`MEBwHGSWgqVk*%11N?84JO!?h3^l z%7mqW2@E7|JYCRqiS!j1drF%5T^}2g^Rd4a|EB~ZopcJV$=qwP7rdc_ojJ;A2cs+f zBx)Dx_X2(?)RY;a-O`;vGJ9&>-5-$q=qC+UjBJ#BUy{15Eu>VzQbm@dq z>{RwkRueK5CXLD6Vs^7gKtqgo)^IQ+=>;K|r9VS?mR@`qu|XnnI9Uoz$#omSgqi={ zPzHoTiM6H>dyrkkoVZtiL~JS_2B~t#KZM(5R=XwP5M2esSl)FY-omK1U3Vo|Cy41u z-e2BLpNTA41SPjbc-feuR2Mpqu;r;XG4Vy71fZC;Gl3FA3s|UtD}px0P!4*R!WZxWPnIf`M#<&5bq@pkmYW?&tF#k+zrbvT1ngUL# z57^4Ik%rm@IczD)2OiRWQ7F`Y!_NUA>@5an?&O~`X@6Gtd=D&W7Eh!i!0~AW0OCwb z7T#Rq^K$&s6bDb2apxrC=9)*02jeq())MkG&#Ld8b50k%bG{}&g2-?~ zPWz1utXl}6*`llQ?{*K5(4pPsz-SjacakTtft{{1Q~*Cl;F`LxRlwp^XX`#Wx1h1_L<5vGDqF zgmCj+y7tD9K=pU(#V6R}@?S~4Bi|)cC=e6Ki|Z6s*1GZ(Ti0L0Qu`s(2E#ZE!uYbP zn$(fNtBmWE20+&R{RqANRD4h%F$V}=#4+)4QI`bo`H2Y~>I|y+a#%%(`cME8)M|8P zS3Nr9*DmV;pK>PPl-!fWJ=tWCneB>@So3f}HO;CUE0o05kfu!j(tC?}xO$~x#D7wb?j>AB3WJQ3x~U}V*(-T$5YYKD=bItKC zECgW0h9tPCq8Dn9+Cs#pnmFW8c=m&)#m`91q#&FiQ4WU$nBhCdrD`5bni*gxUFr3Q zoR}&(gpEibgawWm(c6B$xu9)pJXM8;tf&gjFX+NwH5L=o7&a1^NnZ%_!M zgrX+JfsNf#A(4TNEh(K?ZbL6YVI~`V}tA!Yi39uVL<25E)>H4b{&h_#A+; zD>bFX!8x$jgq&y?7@v_vwHH#6wqPX-#K+kfTU6XGng$>rG_|uw`Fil^I-s) zprP|t=4bzr?U=ZNPm64@~%NLz`Jkm z={07}05FuV{#~(R)D=>|1gL(qo6Vx{Mv-QN`Lkrkou*FBBLE2BNC*)iiI>7G!%yvW zdau17(q+u~Vz zgGxDPqJ^OcRE^J|4%>4nj_-1hnaax3=$KBF4u7xM53^aic+aK{-J*&G-dqpDsg{&p zYYwJ13<_It(d+I~HU(2$%n=$JQPPG56N<$K7x{oQBSz%Ma~w^Zav2kz89OUjS)^f+ z6hn@LXDL#qnvj9{BpnT6C?3!sT}Tm5r^K;Bm_m%5L6b?Ij2u2AF$m?{>ns;YHU}B% z{BX{o7SdIHhp==6?C)&Pa#Nh(53f0)zqvidGbjcw)=}UYV@JvmHT)NE0i&ja^=7nq zU>v}bc%Xb#J*(nb)Fz+*RIx-;ijF2uA!=;esi76Bst6|X0c(icnb{0lGaHY zp>A+*o;zjMeMC4P|Fm)yT1Lc<01bjgTPP~Mmq~Ui;g|c?g+;6g&bUbGTVQ6zmr5#VL@Z)t8C3ZvOD^LLx{;WK8PPmzZeXX- zU!R!Vmm2yQ@Xbh$RRxj*)lvVv6RY2ftkw{zB|F0I8GNR9)73Hx5%*PVd(@qx>W=#d zNB|1FUYqeM5hZUh15xT_etki4KN3uGt2m4(iBJicSt`IRsB;>nn9eqxK3|dtQGmhN z8w?$9j`5VpZ+#NC0}l|-L(nTGAv6~=avrR+YKj5>hhkKW3`7}Dt{TX0#bUCU4j7FR zlO@_UQ&M1S{R(LYf~Il90_vo$C<)i?7}VC1BPnEaW?wU$(t_Mfg1M!tuN2C(G0q_` z@qM01Gm<@}?eIg)_aD8ogO>0QMU88P23!_RIh#Q(MNPuJGTOK4@V6tOEK2mG8eRl) zCS1;|s{ARQPH89J2|#T+xZr6<#T@eeq zhJmSuY~7sauq*q-3{G<(7>ZenlZDw^ZdacB^1vR2mhhxPP7I)kF@QBPLWI-^Pn2Z^ zV7!`?be2WRLMx``CfPs$V$4an0FF>&v;~`;RbD&tF=}gIZ#WVde6cOG=~u8sWOx3S z!~%GzDN|!O-JI5ZRL7Vvyy*<#$s$6~NOHNNNeYW2<-9|&ItJ=W{4IjW0cnV|2vTk& z2T{i(MLb*3_y9NvEWu$gF;m*{yW0Vvgvw29Owa0du0F5<zOl427dN z{Ckli0UZ-8j*O8?8b|jA&8nh%JhDZeD;cJ=W&V(ipd*GjmgE4wK#6##07yO=RJ;_kd#Cq`w- zwmh&=fcbPPB#g*@iGa{>lVO9hK8OdL`Gg#)sI&KdQj)l#Rq-%132& z_hazQxO>#`aK02a%et)?J5_3P6I49xc8`=9PmsM_fq#})1KZdd>KblXzZgL_9^#o;O z!9`rvAkB=4HOrZ&t4$iA}=-WH3czoR8jU4Ml042DACw@ua}kjZ2-o%Qpy@uA|J!OB6D2+7_+u7^_`EYt( zHsEu;2(vY)Yo1eCF`u`$th3ntWZ88;d~jQ>Qp`gqv8hq98hpL|qkV5##W7MwCCMTp zGOkay_nWG@03LcN;t$hM4nY$iVHkoZ%IT-*v1pj^VI- zzAgZa0T+iV2E>w9y`6pDrn9=OPL8e|jm7=;L*i$1+ybmkU=V8KfHIkyw`D|R3d5us zAF!j-{$2sY_cB_&RJyGS)TY;}=Uf1?;`&`LC-J=n{5*3?xK1lFI71YS0AqL!wZMQb z-p{l92p5mAQDE-&zhXnD&g8zXPStg{8c!sio|*;Zq|B>$^$MWsSgQwYqU8WMKz%nOA(5L z5>5ZfU|}51c*{zasAOn1{zs2qZnmKBd->>W!A`ByUf9*mZwfzdKQu=*E-5ImZ95Pq zm&NcqUQl|)@8QNI-41}m;#|D1xvhduhO|j`3APtR<3r8${&~=F($i=*J_wDulE{}L z_FB^cyJ7XbGb+X7_UMy5lyFa^X`}4BP*eLge96wBDzlEkWPXX#d%HZ}c@Y#7BseyR z>N`o@vhzHxD6_yT=RVmNp8JSvx?1WXtQ+UGPJKS}`h8lA#>{H7F8K;orknM;y3J~()-=a>9q<>?nIhxv!!xxg7K6zh~!lUd!|I}u}?){lnZ6^1TOF61x%W00c?{7)n9jiA^zA$Xzr(G}a zSwvZ0`s3;L>MELN?E`I!QwEO6{{2u~Hj9DbuWryfhXxoJuvkPl7W%5F12y50L{PVJ zLyfOJ-YgUuKWFbzz|8pL1j|` z+q`4t8T@gjgLlM#vb+N-p&fAdh1g#f=}MxgD=>+O<}28wsd1?R!0Bu|K6q>-j>F-^G+q2#(-+#t!lu!IrLCAEtAn!QUm=v$ zH+iadn$Kf>+wX(X7xthBQdrz6+tLgs8#W}NDS$qGyFTz7`hUgwzak8L#O7fl41;Tk zRyBO3J-*%Oxn6TztQZUnTN(5PdpS!012}*v zKs!Z6gip){V!YZ4rLBK?;O>VXeHgh9vdeocR?_Vqr-)Th0mS8un;SD~?|(n#v-|IL zfLZ5G0pTxx`}5~#JQ;c7lavpmy68KX95i++w%iI?7Fi{pSagQn8X%=B-r4-)%PyZa zZ=sXYDjrQOk98_Ejrl0^VX@HOx1r&@Z=HL>QImgr4Y|nVR@G$A(N)x{@@dTx&Og6t2YwBz~~|}6BHy|F;agBmK%Bi#zCcZpkse#Q*>x07*naRD=7&2@!f2Pu{Iu*Yca|ZhZ2&=Zhr6L%@hrEl7p7 zrXMM$9ru(aO+&t1XO{u}-hb>7-~Q5PSu?~TR4%#`1LnvIL1M|g?8G6{RPe~O2mkWG zeH%8f!|ej*(>efH2nv~WeNZTKcsQl*GkWY7K7YpO;bXwIAN}-_`HNLCsY4V4LdapizVtVal`fRpzjNV#Hm+M15VVrU z2<)eECR7`U|Ihd0_9MaO{*NwDwZd|jht=J;3gRzYD$ql&nirahV z`Zon@F8SH_m#kc3i~$N!ipoBQCguXW=wrSkeJ+>#!23=*?W11?Y13MW1?*`NI#hAa zl9?A=aZcd1xv&_TF6PS!hfXQ=}ANc&IKi}Z=Gw${b$Of{Y7^7CkvrJ{{qp8QYXt=rKhkNnG7wh59U1l09 zsj~AwE>E?Tz}-EE4<9se7mulC*aTBXBux`u-{b`;k@i7Da%#SscAAnH9UkZ$nmF<# zE?n*8g<)=^MvR(xz~q--eT^;;9kkony~d^FC?8(9Y)g$#;(68o=oZ#$d|wQ&o}<+_g5}iwXkTnqmaN> zaeM@ro>GdZ!zY40mRV2;T3U+D%U3Ra;Nkn0u3R#Fw_*Ky^=C+FDT?7;_un#O=5s}> zfDBjmhbEUBBm;QM(QpxcHq#7hih*Yjb9>$f>>5hJF>f zVJhRo6(j|Cl!hiy-neny^y$yEG`CEiaG;^uVx<~=jeiA4O~;_B!AoyU|G|&GH)sCq zWiRxjJQJQ7W1^+}z-BlQjfxR+yj@S&UJZbzSI zjpgF%5J_Yit1|&no7TcP=u<^^^ zKL2miU)a=Az*dsUHDJufqCv10O@Sp*G|_2AOdUMa23%?0LXcLkTle_mPj1=TeCWZG zRD*5Ze8=5SzVwEb?Ng$i(*MIu8YC}aa7R4AVuA(`>I4N=^QS|~w^M9t?EA&`)~2Hm zKN$W-`4F|A{NmaRe{$L4Rck_GY|x2iuMv6h2?HetLz+g4CDUvpFB}6=8@pt;23vpni;Et9`oVmur5NQQ;+ikG-W>L4 ziV9&~?nJp&!_CbbUU+Hx_$m7l_8z0AO>>7pn-$v$?6S_SKoML z$;~5P`6Y0ec#;r7d(61eyY?S+$z>NUS~;&oM^S=63^~PM<&0{yVg05<4m=D1&zk@G z1($yN*;k%uLoo*HOL@Rtrr`u-P?~H_A>7VqSX|J8A7BCUUTNcob$9>yZcaSeZ}0I& zRK+I)wnkh0^|$=#rhL%i=73BdnJ=B?P%MAsh%xQOmh&$9=KAI}B|8s(mZT)%Pey_X zm8MkC%HgQk?zb;my6}ZpXH1+lu|A9Nz}RE))+xX5Y-)V!#m7Wm7%vUGQ3{2(&Jl-A zeQV*o%YOOO4V%|MGy=Q8p<6Q9+DMN+fGzT!cIac2jutOn@bXJ99(Vi+X{Qdvq8xZA z!%JN;t)}4kLoJm@=A|0bBTk?aYdj?`!l;1E4L0hM?bdctrLVf~76L)poU1usp0xiM zl7QCC6Sx*FF!CTaKW)9lGm(184*lmn6j6l2@Jk3^+y$*wfKhn8`}ChUamxG!3tyV? zV&7f*?mc23MP^woufFmm5@|#IkX`#7Flyv+`;I%gcklfyn|($bO4!|~0K^6WU@$&F zoGZu$fEsy77R10}no=`ohDa_|PgtR)5b@)WIPP!HJ^cGW z{JJ^62{yw~3slWCW<%8s-f~X%2?BiAnlr*Apdevk-kWpgzdd)#!3U<%3Z&K`Q)?_S za4lZ(_Tw)+Cdx?9cxHBQg;MM{Y2W|4;%BY-7VMaqap*J(CQ$`x#2=<7!dG4YgQpyV zba4M8_paZ%Dva{E9BbKaWGfUVFUlM-<#5H&TH%$yzZ~pTolcn$x@;y*r1pS815ypn z#g|^#+`2^}Pm!7(_ywlAP9DXdlTsv@0y8A100MjI(j{xwu98UiMna{!Ho zMg1*Vh2PwC<)7}oJs*gX7`|(#GY%4#Fcus^iid9!9Ob33Ca2Td)MU}(g^lZ1PMJLU zfv4`9vtSnDQjsuw@k=PJyLm&?sUQ0SXd{JAaz4OI%gE|jcisQwfThNE(wQ70 zC)$SDffYnSLghTW5@SsCx=huP^YW{&Zfa`U+R_BkGy;sU$xI}1?XQ3ClVGh}Cbqm) zv)^8E_PO8N*wmuva-=&X2zeQ?SmL&#=U_Q&N|6R(DS*loe?nV@BFHt3Di$qVuyEOm zRmV*|3>2O>NMP^oFQmqF7Ke$y~CNn=s~Sh5=tSbfro@2A2I zt^ViF{LklKnd!3YJMt-z7b5{IP&m$D@IX8>7t}Z=N69Cq06AUS1cV8MX=`nN_L=Di zPCjtxpn<4rz)^3JSly_lwDp1?es|IGw@P+_)5YNtbp_!QFm2zJv@`=VD2Awb(A`4d!@uOTaYH1tJN|ex1`32us3+pQGz`p!^uT;_8Ltqu zKJwyy*WUO`KWb0aAp%NAGE)S#Ig9U>eMRarSuF`GBZuL(W#&^jy9q>ZE`0q57k{g@ zwADCH)qL;_gWflVERi>-gVFINK!<+2=4~lF8#$^7#(;ppg#fP7pdw&H2_C{!FBJ-fjOH*VU}+vNzB>Kq*ZlD9*((u=dKUujY`YOqTe2C*NMc+*jbZRG>tMndE*^ zVN`zDP*)!ZEfypDo%I`}WeeZHd5IEy$WGt&mk!CiW4*O(#W%kDy{&~Jw1ozzr23G8 z=o-WhL{;U7F&JJ5y^guB7$@M3U%{@h-b{Pp<*Tm018&Iz9k^^->PCoGtGq0i&(sAW z)Gdc&2KdA-Vz8RlAX>=nRSNdnYcKjs3E%(mWlL7C=S*aUGpgf2n= z0${S!n9(5akRTR9nU=C5;sf<12)fcC~HVs;g0gB!>x3y+6 zDViz)QD~x-uoV8-Gmor%X9=naVl2bK#%GA&EdF5100%@8+KI@K&eb6hwg;e6*jm_n z`7bYPD>N}3pdr9lHl>)B0*Fo*AbjEFXMGDELsO$%CJWlhYJv$+EH`582HypjMcm#7MA zP{YhQ^CS;s>zqs-k$I0k@wgTSB5p`L)VyH4MBG7AiRPjsT%eaYAdj(`n9b{$aFj+q zxe+Z70tu?;oNWJ0-yfg*)2lDPc9;GfV~`5Ub*a=Ik+oaN8WLH%Mpo~zR4+%XjbW3> zGZ0G#U7D*YtQ#uUrJ>@1ZEtK}{g;RC!VGIO8C_^iJ5C-*GrFBy%22&w0|>rZ%$?A& zsEnMG<+M$x2NGpl0i=cOqF6xG2%$t^Gs_W>G)?tkSZHq9aKo*?wX%UP(Ft5aN%gXB z4r@obKmdPltCaT9ESc~TvY{Y^&I^5SYTwFf6^mCcxb}u$A)eE8i3%Wyl>SspTU*FP zO3R4=qJWpkN+d4hEl!giF$f%!hr^B1b=h737Z8shKLK5VEbZ;BFeH$`EeDW;?nA^aT#=p`Oj40XMlleS2p~1* zva7Dy)Xq8DX;=aFGDZq(Q$QPV2crDQK!*U=o*`-H%y(hq=P}%3*yD0)d?1*JIEww4_Vz2aMh0 z8(;k*)9t0%3tpQ&m&PE+V*5%lE7Mu*V4`HkM9!!~3c2r7Uth-dMK9o)v>!=^DIwm6 zR-JO|dv9zj{Q03L!5aaDNY^EAB4qNbz%@u zFek@ZB07>5h@kbtIgmC``5@%d*Z>Y+Rd&coyO`9{#jpTm_<&0!z#j6_jOVwsZ1N)x zDrc0eYzF2S`o%WZLZhQ#M8Z*Y&2_)V2;b(nBRV4Z%WDOh;6z)x?U!?Io#R_|PSy)C zCA#IJUk6m!vY_0~eraq1YC2si1fX~6-Usf1STlx%PGqxL*a;WJ7q=Y4FA82Fx}h1+ z!(&jf@KZAalAVeLm@9Y#nFgW3Jwy!xS<;y-laxah*^S}0KS8X)M~PhVbf8RVpo9#S zt}iahF|N~I$TMQhWf6NHX7A#D04`7-@c`8#77WKl#gE+JZ%;jfC<)?=ts*9h{8cUy z;q6^WRz1B`D07QHd_=6p1|-I3Q?kHPF*CTWrPz61{wjq_+sV297X@J!xsg5c`l11>6)tvg5 z0}Ud&Gv~gsc=@t7-IpA~)R3J5K&?VBHZ{JyV!`mB_lWgLqTFUNj+<-B|D zy$#J8Z36(ZiVz0FyremVkQ4pEJ|ZKB4c~qD-FMlgKaE_pXwi}-i^4o=vZOim7-qoM zrj1NCtx1s~f{7b=nKaudflDxNMif&LK!j4?^Wf7f*RE{`y4kEWpGe`4bXk;5t2eE> ztUG1W0mBCm-nf3l+&AZ~+O*lr)D_4t_Qom;h$D?uQJ@%Q0u+JEKxcDXVfOrmQKsIk zLvW$g=mZkfaPgIbfqnZ8S+ntbwPUlB*arDcwY9ZjLjXIm zd*qAx*>jgn89(Z-TdrQRe8ZM4TL@`5=YmUc%*QhyP8k-pT99LN-Z%Bg55505*1zH+ z-hIfx-3RrjU689g@4ORA1g>K)WUs zwM*Y!k2&gST#PUh2>Oau%iowY^VQd9fN~U{FSMo8vbTW34!k;wmMmYiVe8uAeMhQt zNnau-;7Xy0nj&Ew#sHB)vg@6$Z*R?`-wzowWZby@d-d%zYxdklOBORpalOD@GbxxW z%nx)0--vi_e`4BWANlY{hxFeKzlf~nl?xoCHh@vN5HT56qyypsnQJhix^!K>y_m{) zei0hd7vZI?tuY{y)$A9y5UG-G;iY_RN?$w_m@0!-o#* zot3#X<|w?7I%Qf7LDeKPm2j`0I2=)Z5f*6fB{jqphtQAA0OB_dk3Od*#KVF|g%`P1NK1w5a1X z*Z<HL(p+e1>)p@?X$Z=Qn5;R5%fYybod`n}G%`DU_|WnDO_*}X z!Q)2kk5z@%VgjOR0LpVS#dcY2a=AK!K4>%383#5HV{R7%9L~^se67TmXjdGjXf9Qc zn(JD*BMzB*=z&uX7(Y4Z^lK@!&0Fy1^yi;=dFC_-Bhqf*6GEOrEn%tv?sR?T$!QOL z{WIS%WEBJ@R7X;hFk?v}?!>)6bJ8)5>s!t`_q!|BZOmq}Sa|E| z>L4!2&V}}T&U5C?oqh25QRuegMh+~E7zhU20Vf)IxokZM$xtAI18OADVFUXeJ9#XV znYPKyL=cSTKqk!RvASlYH4=OkP=2|PZ*ZeYWB0t^d*2y3beDMQ#Tkz~XzW>E{KTcd zy#B8bKfzXeyn>1$UH~FShuRBRrH%GO;QQ0hK2`ABwUFON012~D##FY@j?;^H-}2-M zlfL%lZ|>SKm>EPlpZd_LP=nj|o{U713ncM$m;UArkH4 zi~QTe;2v@U%Az1~Em3L4xbgrT<-=^Ztivbo_v_0pd*Rhr!K0H;K6&?neNYr$etqs! z)2F{VZ{hM)t1%kTHTWdh0|a&-I^=|7k3RnBsl#{ehv3DUVOikC5#qW`yQxX&B2OvZ zGHb4_&H4O){qpL9o%8DZ5KVRYuYP;Pp$82az)li!-I~T31%#%>PypkkT^N`%dU9C8 zgu*4umME+dXz`Npf>Nnhw)fXRe->$x4S25pqSJ6tR2cS44f^=|KXc0aPkHKv$6k2h zIT9Rv(4p^}dLnKNW*&vJ*^!YM6_QAsIbV~?Vat%GlmpiG{p@GI@ctuCOlz+sqwB%u zBDMm}?9z}q{o`Ld^029wUU|ueEo-zPIcAwrJ01*V_xx1+Qo zz?wqR0EyX4M@S=_leVF6Dw5<|E@$ywl$?fKzw^HR!+rJ~uYfwqo4G#O`okw4bLhmw zW-dJL%Bz3Y<~Iw{W|qrY0S`e$D>;i+EZBR*L~ShKShE(sGJnw={O4$}iiDFERYv)P z>}TA%Z=Um=DHD!NTfG5Y7WG8~A+a5C?z8{)h4&qM!cVWbc;%WUEF{F>!c@gmrS7vQ z4~|4t%%le&85EF5bZz$hrHIxTJ&^6CwwSfwk_^gN7_Cb#IQIibPN5n~LC%&SQYwG= z*h3&LXP$QfN+2ORibN7q0Wjc7Wk$t#%Fjb4Psn;6>UtO!fl|3G$ayxVn;&0v-cbjR zhqV&V*-N`Z&~;5lo{SvS>)YQv`>gZ7@1w)z>e}T6(XJ{CdRT134lWXoy^GWkVvvmb zZ4c8qBSN2$Iy7DgM}W_?TpKjT5+(S-lFxqqkek|w19rSR-0YBGw|w*=2VZ#!p}^`X z{S+WJy}>8GGrZe zUi>R=4*loT|MrQ~PCgx$hjj>=MH__)mixJX`$~OXuiO6g2OLtwG{X|m@ack_s~G59 zR((>mnl0H<1E?u4LCTO9kX?Z1VPNmld+?zL9d+n|hZ<={(|p|C6L_;~Ya`AzY(6=7 z7=j1|mb||8eJ?uik}<>gNm&Tah*97yLCxsF823y2?6&`BK6%>j|L_|eX6<1cGd7h; zqtc=QGWUi53Nmo8A!%oFmlV zZ~ow#>#lhI+V8n^h;P_ItX~xPeXY)3XcebC!eUfBYVrw_4mjkzi@vpH{ZdZt!sf>GfmbOkjmTcdo;mCFQ$KQs ziUd40HekxF72fg7)ZY2$PTWfyU|=P_8-x}I&=B$0%n>BLBPQ>E&ey(h)|WmvY+#?e z9(nRZr+xW9&b#owC#KI^@lN2?`*xilWukQNtwp;zaON#r^ULf0@ZryV{B3*5!05#^bKDxyv?bY8}4 zNLzhAc=*SE^xa=vbnayznEJ7l&KgY{GNnB;upv+kf-nS5?j~coN#lj^y&r%7vJV~c zQS<-@Co9+p3}q$OtW{i%)i7%4#LF+ex=;N8t!*XvM7A>FXali( z6Ha3$4-7!oC;AlvpBygLhD_fx&p7Ln?_4^v|0rs7t#pPSK;`Kf_$u-)x+YvFcmn5e z3^owQ0Gm1af7p8u06D9w|9^Vhmfkz*3F(1^kWL5*1PHx%kd7b(5F!QvBcP~=1*|VG zh=S6jO0S_MK*01udat`Xb!UE`@3}Lxvr9mtqWs^#PbRa^Jmr>iPrv7$%XMjB06|Pg zYYt$A&@VG6H(x)yU$;SFlr2vz?1|#ZQnV%k9iHgmUi;0s^cvRB0W0a%iZNm84=kY* zp80?Km`Eo03k3G)QxD-YrAQP%87G)e2slPGOZnd$HE_H&*vCW=sxR&177z>Ma6?Ag zS9Q7R`rA6R?h(k9q53lckL2b+OPvWllq^{P8~ny zu+jTTZiwtb4IWp-2;(xKch|E|Ixd(_M2ssqtCjn3PWhCqbTElJpwWxZI=w8HjN}r5 zbS)88p<2ITo5=pTJ{H%NRMVkJ{oEFv{1XanKYi@DrcMhJabK zR4^k!hdi~`V{+0DKyF=u+p4H-(8`gXDkX|E)^d331*GR%i_;ha4ZSuG&5wB+80+2{u zkOed|uez~khkgPiS|(zE1IEiBo8Y16ty;CBk9l><$8s~{8o0%Qol1DSuBc7vm84EiB+PTX3w zboGg6UwG?}eztPmmMj^enKbm^nunY*vcgH6>S&iCRxM2fq=!ymGj910@4AmQ zS@dQ;eSj@NYP=g)Owt&)XXCaF&%W_Y+*8YF@qnEDC@Zd13dW=Xp8&OHMwrh8Tfhm; zZ%P{CL(sY(Bt{5a&;okulBYg*=1FIFZru%)Jc4dVYY<-|9uWj{%}|m$mJ76qwz=Yx zYnbL0i#Lmr5>WYYdsZiQz4q2i%%nk-gn7sz4)f$-!p^)>Ow(eX{FOjlx+js8ZH+uNa)Q%56o=ez6I+G2B zVsKP3amG8HJN?9SyLRZ!Vl-eyv1+ge5?%)(VXx2@q9FrS;np*+o)z@MV2Sh~|{Dhd}#Q>OG;wAqW#IUD5FpmNFiC@2aW6kh4coq62! zwk?_^YgpAt8#oLD4Tyq|y96Wjcuqb1kRRSW>yS~y_wC+s^4O8Tz2~lhy*l$WjmC2# z!iMGh!?+2>WT_uZW#MY*1sY~3OWL3Bh45E>;=dTY&cGIIS^L25U1KB^?2K;-Dfm1@ zLz=BtO&@*efg`6JG^kgXQG@#2blr^GX3alcxI(f^b7e&ccfDw5iiW{umB_;gsPEaMYN4>XxlsVWq14 zLh<&OE+lzX{Sq zP*~_hhA~5kFOrZrwA?_TocAAj=B1ApEuA^z;( z#5~`)2Z4xRu#L;94P=o84pz#msx!;JP2fY67D~d!y$Rl9j zNoZensgD+YGY6^o7??5781$zU;HrN7%5Ox%s&zySvnftWIajadXh5j_f4IDo? zQ3D}-YUds&l!xvmBH+vp;KVJOqo8scz(H?W*5pqIr%gSQlF5qzTB|RRy85Dm;TNZj*fUL zP5ZXC6k1;F0$17bG?9(Bu4*^skZBJ+c7HS$B{&Z=3GpMDV*L=?wi9{}T7I&6tuI`T zuK^`iQd_c+$ZgtJo++q!JHtt-u=zFFTm-*rfhq%C0^DNa#) z?WL?g0!MTK6TkZXBdb@h#`TQfgRsRULW1BS=KWX?mQsy4L)L6qtHr%^m^BC3loBaS zX9CpFh+(7DTfxj3s|E#X0kT?z?-{w@sGtAlN18_C@nQ$88I8Xr4;mghZnJ|C_maRtL&Y1yQ6e4SB1R_41x@AheGmWj z`*-~US3#Co2JC>8z=Zow%7xEE*cJ{M2$8TM#+pe*2v<%JGF~Op;b4%ZG+(=7#?O9q z>!5C(2z8d)B4+~JABE1dyEe0K^X7fJx2MM^9(nM@gT^dcxTIgte$6Z8W8uTh4~!X6 z;o9hWtX|t;TB0c2Tv>3bbdPSmm#s9Gja6faihld z>e7=2g76Vy5YUnkC*ly4Ehs1xpL85pqP{I}iP$!QXdnkNoWRFX`yHsJ(LfC$@8Oay zuoN*=%7N*_+|>zK2dOOHc;^k)J0-FSi3lnZ<#?AYUq~~Nj_Lx@jbdjw{}sT%6$XKb zy&j!=PaS(Wb7k~L?43i+G^F5{HQD}9uVV#Pz8>LF?I3c#_mNtipxl zbMbuHCHl0(; z(v|C&vyr(hT44xO9LNw12YYni2Z71rKCLb3vCt7jJl|mL1iie>)C3_ zEnm4jo=W(`IV3m0VPXUVCY+{A+kN0!qH=06xk#h%@et!T$XQ&H3;ZVj&n{X;%4R%dTC!nqj0XR=U2ZA%B=4?9&Tt z1Lz@}OylRCs-Og%1}r^Ekhf~_@(;DP;@To&&xM#rfXddl8_0pa%P`m?- zXur^6{iS+l{Os;iFTQoh&+bkVr-6W*I|D(!WrvYlL$F`SvwLBHmk*s^h>CM>^yiQJ*mql`flJRb2R zlEgZtpL+43C;s}!7EPNSFk<9EV<&ZL(^Woq;xwh5$utrFMjIl}dm_y=A%~1QQ|5)M zs2{0pI2fBc?r^|BBSC+S6>lKkn0r-NHM%4a6`*J}oq&n=Y~QD8Wy>AAH<@NdsZw#! zrkAZ+&T=ihlk^nEiqgU+CX~RNOmEbYU9rx4-1HM@p3uS#5*R@F;%mi0qwR{IF?AnS zt>G-e5g^U8!bvcSNA;IMVm`Od*R@M`Ci2|3D$L6dyq1;H4H6n(mqj$f=(W z1}gnkeR>c4c=244N-`IxfIymIBkhKpSLw;7Et^@9%km__0MCrPs4G(l1b8(rBrJl<#` zk&491xh7;Xk2A!KY6Hno6F^6_M8jb+r1B!(PiDD6`FOmhqKtSAg;&{uH7g?ty~^sR zUs#1f65-yEL$C_XNRs*<%N20Z0F$p8 z=}$L?N;yD5R@#Njy!0Bt$VV?t4g|^1+N=BE0)TASwqsxs;TRH2P7+wLEH6^vJ+DAu zJZd$$!qowwBloWi4#l9WPCBhFgQW-t+DdXESP(XKS_?lZ1aR}kn`*fZooYn*sgezy zbUm*l>Qu+xNdor{-xR09sYKs-kp@3lxnbMvAN(KzZsH{ggyN}mG^nU&pwB}J?8OKr z3^7Wm8D^X~2SxED{8XC+$buvaP!ZExt5auPc-e#Z{8-I5UOR8mvWK62o`oFYNX3R- zHCJ78-Lnth$Mk@v)WnC>a|T!zA~=m$C^<}y*cBrkU{3IPA{h^d1BXsL;+elby>jzn z)~KjkQvK@^Ea_D6cmj@!5wNvp{iDzP>G3BYZq=gg_|XSV95=a5lTHXfvf%QVL<@#- zn1H!jDUwhoj8R6bEE@b6-DOgUwcyM%z%iWQD;hgTZCN23LQyZ!? z-c(L&9cd$O1O^vADS8n1VEO|G1(D%Q|7e#SmUo5QHtDFKTTRtnKD`7EX=34>`HSxT{R3~k^ELxc z7paNY03L)Ih?cVgPL4p7MPZ+s)?qz`ylqKQ(ETS@G*(P5p+L!r?v2XjKtDM7vDKVAn}#taph?IY#~ z#AZ4Tgnjnar=EQJaTYPqGZ?X?r9%6$sN}h)C0d5byNF-PWfor{s>lMY3ZQE;Ktt?C zIo}ZT+BI%e_pUubCj}|NnPsPVNR`M+8d^fHSGEWg_RV`LZ?uGYs(N6JzaqU(`bXtRs<2+z`@XwW^2$4@k<-* z9FL_}>d*I163}WJDr%yY9BL~qvSHC`xtnLtCjGHiyRzwMG9HESk_p8&S-yKIUfN** zFezaTI*T_9CV@(t>E;=s9pf9+WCQS6v1Zc)k3M(i;RliKkV&Q|pLv1(X#x?3pGltN z&RrTbB7C4r8X#811Q+wT5TACva7|PPjW%3^Z8C$qN^b6rP&*vo7rFF;Z_K*&>P zN6Mm_e3d(wJ<)>79FirVo={z$EY9qZ#2ea^y%G6ojWDVr>?dLexP1aOf<57$c)C2r?;U za$pOqM9k7EG%*g6L*>F$R9XPS1s3Q^@+s2Xd_iWlN~NPykR_mVAC{z{W|GB^9!cC# z0n=(M29f|Fu3erjWEF!>s#FspzBX;z!N!U$sPSljTC7B-9)TU1CVz?I3;-S+S&1$16k!TbAZ&|%h+H+I6o-Vu zodShReTJGSj0de@@Oqw6nFKC)JUcR;%Pzle-p7mNG!It7Uoc!ybcpi??nGE66J*$y z6NC1E?&wK%aTXi|D}ywifCaL}i9MQ4Br8z$*ujZ?5Vi;>`b0BmD$Qr+8DYbGuSS-} z*!WT{WiXfT`T4zn{^O%hZ?B0b60nOhITJ$xL>hfT2s1M1V1N@b#^gC60W2ONn;R3w z2<93#h=r1vcaa%H)&vDPVDNDeFD>^jJ{R-=1_vA@xGjO#*Sv$YO`gtz*aBDekcM6o zmS!U*K!1%DMbbAhU%gv@=!&ds@w@t?qN0)}$Oy*i#(OfU1sO^QbWqBc9qVTQ@aAQ! z7kEff7a9CTd_aEgzbzr1Hogcn3RZT|J~3s6-E2%$AQ54;|wFumC3XKrDubBql%o<*z|5^lGSo;Gh9o#*OI!SMt_1Z&sz27#_&B z!1@LjjGJQn>N{<%wLTkUq_J>Ub8Z~84$rT*SLeRh&$zKqxBi}V5Ho;~uP`B`=CVMG zq;NujSRANCfb8Xh>K4hpIq#J#ueQ=^YJ|2gooC=O$<*oeI6yikEJK6KDnBas1>zO(`4_3`P9mZR0}@Kh+b62kO>PTC9jG zoOjja`a-}#aZ(Cq{*$*jY!*x7f}&)0G~M;G$d+3$P<0%j5zLrM#bU(cB1>_4071~2 z4$~@)GVh3`+o8WkI21=+l@%oOVii|X-L`w&=XrOy6W)#xMhl}+_uw`e&IpjA^?eU)+(lXvPq3^~0lhdtGud!7noP!l0eTpK#yn##!$%6U zIu^=i+qY~kbx7+c7-T(9U3T`1>9g+;+TjABLmlPdYA7YZscmr843JX`uwYfvx&#cAR|Xi*hal+*BuKOhf)Ih@8ZVxVwqjt@^RB_x zBZ_msC`E^R#+_UB`O`1-N6bPE$g4uCk_(Ds@Ol2{fd_~a^(wcYj8ghcZ}|c^;(g+c za?XO{@Ef#kOah@hNX8R#`Z5gs1x*lk@D1{2kn^_gzDJ%#+kz$z8ngejF(WH5GE(to zk|rNXg(k3Soo*nl-c-If_{tlZo(OqMYj6ZER98g$;yyqqo zKvUznjF3VI7)y-_7Xg)Adxj*`WDF1}(NKvK^^DxU3btae`Ai5TVxMQS;GzDovYenK zF5<;PQ)MNlr8cOHRf-ZRh}YF$VHk&K#(vmeE@&v}q#YU?YSd`z6@H-F(|RTwl^=!~ z1uhHGk@#dAW;7U1!&_mzIw9Pb2-F+~5Aso*t2n=pJRagyI!pj^3ncE;sSEB1*2u8S zG|xa12;F1?5s0iL@)e9XLRWJPX#^2{@GtA5zQKT`MdU%!r$Ae(-kyn%WFwct3J6ZNBOol3G3Q+|W5vczco>P;V$Uqrlo5rAR6`pjr4fbzF-fphRvtGE2L|oa{3uoLZDEty099%<5A;3;=6Dl)wC0s~jdS-S7b;l++E~JG2-xtoQk69QWY= z{_>#lW00(16kudlj3z;y031V%mN34(yZ7d==#-)u3gjt9cF4PS{hAWig9SkIc!LjJ z%KzZ(lU2(=B(BpVXAmB}N8jg{kt&8F_-2e4z#GW;f_ zt;vy?Xg85pkRDo#$vLDiDKl_DkWo5FmguObX=SiopDx1>AAkHeFa6exi?0bNHH-!p zT$CvDlGq9-f0(c-7g{I53Zjak83)D+r1ie+g2f+lOZp9v6_%^ZddlVzfi+!(kqcBp zU&tiF7lsK^0JO!r#?1DhI)Jf4RCWP@f;2{?CgVNL5Wpbh5XKh7;3Za3SqY3R#4x39 zB6n#yJ){K^z6MtZ8iT$-s)+zCsbf$|4xY~++}@kRigbl>S{QW=^{NfqUw`-AjP{6t z2$f&ZNO2E^!|XrrK*S;&EZCZWQ!@NK{>)#GoOUpYE@AMuTtDNa<38D1UE8H&yB@8p zSO+9n7+kDO0q8Rig8>Aga8C^>3>YvPr70c@hhqA)qs}_SZuZ z+{D|peHXgI*c1GUCIiEThoYu|Ucp?jS+f@C4ze4OU7Drj**wTgkRX35PHCrLsT3IF zoHjniQQ{XsphpO72#{xl(PC8Y&3bV27$04A!yv>K0No)5%0apOB|3;1Fl>BqoOu}1 zlflmE0YNo19IXeJ8o7yFf%yU&{6XF`6P>T=-S_5@!L72glJyo8tCs2002%uB?x`fB z(I`NNK|r5CMg;5gz5U+16Nhw{hN;n@O)}2RM1b-jRLIP;eAOxli2zfk>5Wb58w9DyD>IhFbj!i2+AO54rGsJ_T#&ML&{v- zIH(JB7HN=5BqNb%B3@k)3Uut$Zp3~gM(($Nn^tW*w~M;=P$t!3%_E7D3bU5}!H8O8 zq|ee>)4%CupqgxVkWB~~91pQ5I-Oj#cID30&I-0XWr@5oVtM~et3pvg-a-ybS1%#g zFJ&?C8X;Eoi+R-t5gD3*M#3~|qa|WtI`Vh;BY+4H{O2wQ-Ss~9;$y2fEGLtw^7XS> z8LzQLj~rUGCWhfRbimMly$5ve(5?4A{aN%tIml)*qJOyfT@9nORZ|Y=r3F4fbhHf& zr6~F?*{CKlG>9eO#F=KQR&V*FON+j+b~z@wOvt22SsB%wuaaCci+%V|;ow@HPNCFj+3moN?zLg-bd-w}|!xv#-?oqiH{N4qN7Lyqf zNkCV~#WX@UZj+wqazV)ql z-+X`myYm;kziaolV9=7m*@9sPoP*?gwPYFd1s;3)&yx?HN*D{iVRUs<6B!*b8n_J} zl@%*df|y!EX(zIien=U24sGa)+C?pz29WMRpAZ8K)WRhTnGj*U4&#p-jrBM|R^%(A zJKkiaeHLzkz8EYx9N6T5>O8?Vt=mHV5Qv3U(8UJh{Y9Wf1H|j|I3p0}*$-#daus4o zX}U?Ve200(pYADr8#X#Lq-y|(@@P4^!J-N<#yV73L58T)_3PK~i0^0}t&n=AcnNx_ z0%;F+hE=DkIk2kXZU72T+9zvQ+9o*(B9ehQcY!{wQ5TG8IIoHY$uhkyDUS`L47dn| zF)N3}zi(vDJprC>QMc4A#G(|cfYNbk0oIpZd`*PO71{kcY)KwcQ^;G+pPc{kC;zIv z2{?avLcy$>D8l=~s?+_447&cZi@LUD?>sssYs*m`gUA#)f&6&rkpzU|1Xy&4E-Ebw zF#y495`u$o&ebHqArls|&)*>dG}&#*gG@OzC_uhXxz{`&ELpo`?b<*^GrYC(fLUA} zID>Pwd0F(9>#m+KVgPPb1RekbP`n#Y<0y|Jvq+Ta^u~2~tJ!cG{AeE@5^QDBZ@#kN7mH~2vph+L) ztYm2~Gql0|28_P+{IAD+%)4st3ph~+QJ4l=_&aoo&6c1{tP5yLtBA32m}+JPwKxq` z(OL&{S0l}0svXtcM<{TI7Jb7sO6>u0SthF10duNjt1CdeWckO)btWL0h(OI{`jN8H ze!6w+j5K2NX`9-o0HFre&~ZZ+un&CUB`#?Y+#x}uo&y#M09xp-8ytC-C%G#qxwGPH zdQT6#qFjUXH|tB!U-)8wtY+TTM?^zXxwqdft87LT2rLo~#TCb=zF2wrr|1a+(!B_G zgQ{ibd%Pcgynq_>2qj$92ip)GxzMXGRFAO4>56lnj_i82T;(+ z`~fR0LfA1`ECU9jaG$^R50qTwiTpFJ@M0mbIbsuOVUHfY$T?4%Ho60rW7eS8qYck_ z`!xhKup%hSJbsjF=myl(JU*Zt%vR7w+e&12FI~O}Zwzdky4K@T20t(Xh_!9r?5^1}yR>Zvf%0;UG$R^3aSV6@udiLVnF$i8hSypD zOxt)1c`3##rmv%Z2yGsLl3^YW@|x-p2EpJ2apFuICwTV7=Og76nz5JLk~K%z9fW4U zS<*Mpnu!=dVrY>rY=+k$wp1-q-Mq`M#fum7Fr>k3fH7n-F{v)rFNEx{!9#&eb-b1d zV|pv4M);}iw|;m3Z+Ek=xQ((9Nk%u#Bf^nczhrH0*Yhtwi{xWR7vSmeP(xPIMc3t$ zZ~5cQqLe9ZNXU!AQ4OtqjK2rgu3c@!B05yzj3PTHr0e$S+VkoQuO)K{F_+}PVB8o1 zO$5Sz6<*D{S90}A0B}H$>aqx!2_2r$5L2G8joR$cmAt|M4yB%c_6aU%mjiA%-b>3s z3*iO;Prdg3OXQctCrSAX5HsmaDJWx7owr?^cIt=W5-%C{nzu|CNXAx)Kv2FE1;9Ff z+qd4(DGf8yFmTWZ5s0qXb@xF2+q%Pf{E~S0hu6bpaI8z?xm-gbJm#CIiSL043$h$Ne)f8a{YN z*E+$aL=7nv^qB){#TqcxHK6mFIuoD7K&u!$uey=gg9bG83zk)H*ioD_wCsiR>|fZvQ3D_ zmY{%$u(pW_OkOqf%AIMp%#&#XhSC*8B;DGUST|$l#oMdb)ugJ4T%shL2O45WgM}Wc z-x^E7k{%V0!g;>qh3gsx5M|?zwIt>RIx8xP@?w1w@k&BOJeklvi?=WlSQl32uln|tH%%BjA%l~FVJ7D- z$;WvN7RG+9Qs~tzLr1}#>yQqyci_@%Z@>J((s?YasUImku*SIcZIQ^3HK>3&nW(FN z>ba+^Zz#X)tEYt|XwC45K?8?a@PL$Pt6JD;4rSm34N2Xk@lGIp4m1q642XMvNViH4 zrv#N=DLrpA47|)0Ancy8cTE!)l?&yNp!*HoFJ6-j<0A5sh8v-;zBBvswtR}a`-_}3c+IeI z^OkKmxgY?gJutk1(%hWT7b&p#j9ftC(ZW<6+G?1kk0JUC<@$^Dgdu`<_AB$ttMMd)HNB~@Q@H7 zgC-}e!u&965)CV%{pC~Nzw_2as)kY$N!CN6K9G<@5k#>_Y}CjDL1;vdR9lOKq=k;O z1T7VpA9g2Yz93lk_!!L=9P+5+P^})PKK+WpsZf3Kub#^zA7?N$07WaK-st{A_5&~& zO+>PTEDBf0Q54AD`HMR~*}M$TFC3II<)F$Vx)D8o9fB{ECnNpsTfSAD*vVUjGRCl< z0Ij1PRa$z;blM056B`dY-gPC|@nh*i+0q_xasP_m%u z_gr?vZO_knn;>d>LH23OA%`VPE~{*9U2@f0GY*d=`031@|~QFbjNAt`Z5_{7=n z%^FV>Lwv*5MR(qF^YQ0RzGUVZ7vFHk^fM>l`RiNPZ(qe$cW5n)HM$h*%VhBtf+jU^ z#?|yK86XV|W6`pQLgvB@J|;x!(W!tKzHZ&RBRlc4(Q+(1yj{}3Fa^qD&prRV!khRZ z<(sMVFrJ(gT-#H-cc*{eK z5n>cKPjzzh`In#i{xWvzCEYe*W=Pdt>$WbN^}}zz^}!qHd4Xs&mBdP9A-A$#Yf>;5 z95(d8s&Gq&LYoOnTc8#`bYJ7f@&}r0v?H7`Va?6bz6*V=wZ=ErmaYzv3T)qz!# zHGfrgeCpU+PFi0_eNj>=usUNknqy+7hSi}NRyq-cj|?9Y4SQl~vFo!S2D-~D{<{C6=|kxBfc z5U>J=7Ud5avOj6unew6+wj#z)Fe|DRt9O}ngd~DaCNUP1F^EfA>M-=0TB>}MKcMyE4Ax8w|{5Jszrzd4DdvPB&=lK z1_7M}G+R60B0&I45TJeS%rh^#;ws!qY;ur9fNQS>Mwme&kSX)p+z;lQbb6oO-SHrS z59`*g+qJtEYcv-K2ia&y&q+m#;5Ka8e&OZU zet*_=om*GJMsW`Uv90m+J-_+mLw|XuHqOkl)IZ0fqyoViS#|@Cdb7K0$akVCF;M}n z*I{CSnq95B?yX7Ie7tD!w3E(h(XN!L!@#!Q^pu2UC8OI-g_#|c0rI{#j9?u)|{`S*f|IbH@mMCzI_OLsRm?w~v$i%bHh}XtzxBy|` z%W6~A{@7_J{^60|;m0GeLk6)WB~LQXPZzZ{G9K~lvh_=urLeU$M2(}E!>rlANa>zf zUv0erEAqV&Bupk5SVeE8$OpAMtm7_^@m+G)TN$dLqG%|ZNbkl#G3A?8t6DI!Y~`Yx z@3`R`7tg2&HnRy>l)SpNJJ&q>{9pe1;*;BUZeR~3rbrlZWC@ALBrSwTa^h{=w8;#8 z)htX_%N+3a2+)-A!Kel6s*~Hlb<4Fas+zZI+5*PKKrUOgq8ibTFN!IL6uFxe&WkER z^Mcu!&l_QBs)1AU2PzlL5)+rIDrR8)6Jys2AL@3L$2WEJ3Z!bc)mUqqnulDMSwyAW z%^!J6w_5Cy17P8{{_d?LsDIa$Djem1&eN@1m#qtyK?yKHNE(LDk`udA-=6xHKl@BZ zF$*y9;IL(fLc5;P7$ z2#>~5Ag;{7q5{F}38wRt<0Zag-GXmif8o(b96SA>qYNo=ToN0ENFE^jMcD*;JF&7%-yeW#pojt!ZBz(N?hV{A-S0W?vqc%@JW@jzFNQ|}qpM!Mh+ zhei?xBwdpq5>dMD?&U`i8k96d95LFuV?@gHobz48Fn;FWqYyx$*KI2WU;;bk2k*lN zprC*^JZi|;huYo8Iv|O7vvAPY@VQ|otlzR`=IpBvJ>>9Xrkxb^SD12yspZnkCI9lu z<9~ka;mun&Gu^2^5(|Wr9Y2YfHF8q)L|yuZktrIIR*JKX7~Fk8pI#pjjh4)?voo4_ zL=i73wvi&y0&9?yq=#I*ia~>$F}Cm)=97Rtj2&J_k?5r;DXhRHI~(^=SAYh`fg?w( z_~W0HWrd;7B&CVt=)?CEip*cOX38n&bneuyqKb8MN|w7|(GoH_P%^vgXpJmx7EDYT zy1azx;6r6b3t6&!1%pZ|sTi6unCJ2I?Ai09WveyPusX&b{38-cekA|8t-CjDs|Lm2 zTJXt(&%JWlC6^IH$--iiOVc}|dT_;PyOlcMmfi7Ne)ijY9{h8wCY4z2P}{22Ye_su zUM9oA=4MHv`raH9w@# zODdyW>;m&N2_Q<3sL38^P{9)FvlKlkMuzQxgfs|*+kyY&&Om6g7#92o@;D3y*F2=m zGO+gxq?$+Iy_E#K=1AQQfPGuJ6)}=e`?RBGc^UKLurXkYn3Zmnuejuu&pzc9ZS<=I z04YV0YH4VoXZL;dhRUHQrbd5u34iAfsmF*bQ%qcL{iY3g;DI0;&Ewxm=Tcj1HvQ=@ ze|-G$#|HErdfYuD}@Hg8zE zY{5qh=5E=xF_C5mNPPlP_Bmj;0vkt1Q78?IEbiB#pRfFz~`o&RK!5(G1XGBD3Ccet!)<>i1Zwtb4Iuh z^Nd!wo-eJ1LJ=M8%FAPr0TE?nnqqx;BoKwknn4FvL&pBIPCxIa+pcGaTP0|L0)_mZ zvdT#9PE73V!%zI-@h2Z2yzlT1?K+w*?pd>8)sp4&x9{4D6Pzgqk~a_qB2|)hk-UMl zXpD!N&d#w&O0`M~mi{Om82t1{x6MA{*b{cwF@MJvypSLH1QEHQ8+1d5qKHH`QDY4! z>ZB|+un|tpTBAs$F2y#4GDXpop>B{|7ulG>>pAU&W1e{O>0P_XuEMH?Fs=!n46>PJ zD#LPmc;dp<8*}S`to{+K$;1YUde{aYM5(N(LabERWJsWf?;al)M3hO?u3EKf&H8QK z+ctxTKnWZj+O?g(csY$?@j;3RW;{wXLevklF!4&VcXkWSX5V=2_0c0ozVgPa@Q%X1 zyCK%2GEo@}N2-%GD>v@gxUE`xuhJy_J(wv|;3E~(Ys0M@nd5#8D zxByO4+R;ZI^V*!}6r@zg7T;m^$P|~P1lkqKB~poH>lR_m<8a21&qcJ!Yb+d1*1`jP zow{@)NfEX+C_qwDNP|HJdp`K!JrN-_s1>3xxRB^fs*98ma&!ZEq^!6K+qXr1iFj=! z8q)*=%3rcJ9M$Y*B3@G#DrZGYIqNy9)7?9CJ@M$1;U6$H{EAVwO_pc`sF-d9pZahj z(OJcinb5JdH9}^wQ?X!VkoX}jK+?f0AWQ<{*#r_m0ZjJzGqK7fB`U8Bn*3pJ6@E1M zySI{ny44^l&GC&0p9|EUeJ2p-(H_P|822wWHsePvt zk3JRO8&n<<4k$V z-~qLW%gjqF+>hPU;6@IUEa+a_xzGr~Do3&=Ryaetcw-&%@TQGO5i2O$Y9b1Y@^KeX zwB$N@7i!~L$$`69zGc+-X#XC=#~(2HxmTV}WNN~ZKy?a{OjgSzv?_5ZGLFxg_k#Ze z2~@xmiuiZcZY5d~1`P#-NNog5jgUQt-DLyp^bJ9386G>*knF(@841$k@TaA5O0ccP zU3Yx{qN}b<)K*t&<4<}+9y>gB3KnDH8LCGvrjlul2AglpRfa+n51O!U)B1TIyw7|r z;=@F-&D130E&`!-dH8~}PPy&J_XK^U>q%>+6=THEGeeky|KdQAP8=qAK$VVp4HZ8LRo+2MM{t#&7N0wE5M~?l^S%F=R>wazyhc<1{I= z=1vB#qMfX-d8Fmlm(G0XFMoREsXy(GZ&nT$sXZW(cKsz!IQh}oLY1hGKvuq*>4%+i z{L#nHxa9&U0`p5upB+umph>Vy@k*YGX045p#l#u40K80er065fXOkKN5tsyj#5X|? zCMdLx3jw;B7ERk8KJ}OfAN@Tzkco>N@XUgp=r$CB%z-T;P521`(n|5D6seyo&prK| z^&3{P@|mbXFo!U6USicMj5wY2&R_U`|K9!8E_j_j4G#EQuU>tYF8_ow$;`w7iy*@& zfgZq!tY}2n=B0^MZ0DK3Fia1E^|Ekp+k#Jdp-L%zG><6*C&*uO2eaX{s z{e`_d!OA}QYJcbLvwL-JpJgIA5tlE> z&p@LK*3w-RQamx>Kq66H5e>4IyhE!dSDb%Z|9v`n(q!`_E|8u12vrbm6*rj;?+ll;IrcBS_0H>lUtN#n!doKm-jkZlYLm?l6nmS_rW zO-HrKnnT7O&@|%t&h=NfsH$My0B#J}5VA2UOoB}y$W-|)*w($8Zps-yq5Eo`6^DDe#)2;6a01INRT#! z>KI!#AC}`ps-^U0$3 zs_xyoQ9PoDaRIMHM)FI+h5;VDK6uRZ;||<^bS{Zg&qsnx8PVwTJc+WC1{t*Gh>u1l z>F?38-wjvY+`U6@7!G9tRcxZceTOLl8rHHJhK`Cf2T_?O46{E0NewLCUFsWmpdXt_ zr2_T4Rr6N71^P1aUlt_fJ(8)-#X@CmT55$UPayIPr;J@%^VJ0o$4K3|3jU`KtV-An z)p`1KYtyxT8x#z7(57aj9Gox@xV@=D+#jL=3o%*AQR=Nb_Q+|(9@lq)v-}Up+7bTV zQ~>+?Y6ESa!{i#uC;7N#ZB3@9e zYLywDR2I@zC;&e*Au9e%oV3_ce_gaiMf)4CzqMTx{6ZFL3gW0P!IlG7%l1;n1n@<& zDpJNHLn772v;u(!bxN-kkNl~l4X6XELk%a_6(((Ylw|7?72+;TaRtk1k{gjA6F(VJ z3KMuPzbZU}E5$|qhq7lx`sX&4opMlx8N9PBB_48AYJEnP6CBAVoLdcF{mXys@_{Ng)#3PYx zs&?ynrycj_-~6ym)N}G-lUuPW+V4d=5FtQjv#PLf%J>6m4*1Sq!Fc+QJ$&LFv%k~1 zbqilA9#xV$1{K&&5(xKtKyZ!Mu_e?loBohU>WE}4nkqhvQP>g(tND-zca zIr--|{qmkWemCQy8%{d>++z+o^O%EAJ>`hAZ=7-4qyPKVl^0&uvT1v_$0V!0;G~QN zk_;SX4oQqP=k3!+$rFi;i1^D69yis;<~P|gHq8!TVr9z$>B!{q(*&D3>}?uPM=Zw1#bch=%g|2qVnU|e) z^4V;{lOYTl6&@vq1XF&d34#RYhFR&H4poGk9((wyv%dNLUY!To)|-+69KaC`Z}RxV zkewlwksGhMsv@kw2f@R2$a*DxFW&&y%P&%g zwUc&JwvUw+0epcOcTvC%52u$6b1^*2ovdOB!-s3lp1st z^_7FKmz{ehs|}FTpb2{Pb8kGgb=PL9p$f5U3e9GkSG7E3^z^Z#C#_wzcJunps6S-Y z7Q2-nOpXf-XXcTR{3yA!42COvKNITSsn0F5zTcsFSIC2prrppjP#2)iO#JcZ9%C8- zwL(qBACk;AiM5`7D0^h0ZZLJP2o^&kD$0XMQ01J^_)PUXAH1_}(-9nx<&YADW)m)?Atsf$=NipLL2M=p+RaO?pS`gHDz(ZfbG;F-GUzFfHuXBFL; zoHKXM#;xnf7Z05)zY1(N7Z@{Q;=n$`pj@PjUX|R?+}hZYqao>e^FEL*DYngmi3ra0 zNF)HKkW@l&h-TzwK@5UN~VA zHM`=wwnb%~p%7;J?9+Afm{F%5HT^r+T{3dmzN|M^#G=Hww|kFnZ98_}v2EM-%^L!B z$*PEd>cp`(d~*gH{2?kuZWtkg7+B*QGjiC}DN`i5a&^0QY(_ajf5xiCu;|~j>)9ur zIBUk&%SfdTo@6rRp};|7514%Llx#W~3kSDuT!VnhFq7=b_UO`~d*`-O4;nM;+8L)E zGqp>bHsCSsL9)i8{&5qgY~8YX%Z4>|iRy^2u3yh?x8F2tV9ySsc5yH1?_vVHKxnr6 z>G79`%R9C1GNAYH!F`7h={LA<@BZyuv^OQj7$1g@C;5|mzK>H1tTU{{^%TMm^rn4N z#vazDSzCq~J!#;+gTRVS>o%wH1kyoF@cy z>eR05;ZvtqR#h;h@#}ySDDeNzkOc`5_YyJNM)Zv5nb5WX+bxUXSJ8YdUOl5?_0a7&u_)Ij5gHxYsabI)ep}ttzT>99zf)GtG;&0`HWa&Ldy^a8El) zfPCU7Iv;pJ$M71QaOP!;)~v4!aYbpmh@HaE{>2N|lgz%rbmXyQ($913lu0u$J_~oF z>{!TM&Q^5@4hR1!EFlUA zeH2pw&0pGt_Ev*ovtBVw!b@T?*wD4_KK)KP_OyY$hO?5ug67~eEElT2@|N>HUO{?7 zg@hQwG9{Gi(`~@)YwsbgBWlnyFFyIlKi{`AwRLB5TO@|NK+D{52{EROG-@~l!j`|y zD_fm)%6TIOkHYK#=P|<_qO04ON`)O>F3}Z(wJVfFzGuPvX5rZ_T>(y0ni~FhU3HY_#$p-gI}HCOES2z+_*1|Ha#X z^4)Z{2H(EvAigG*?eDzxu9g8DFE~Ike64K03izboFk_XUdUxTQ-~Qfpbpbkue8mnT zD^TqA@BFlL%kIYgfhg-O(@|jyJ%ov;*KXf75BLORQ19rSD5w)*^r~ zw8t(&P0O24nKxsV_Y{B}rV z8b#AI9YkZ`A@rx9N{|i)KLh}h*aSqT;J{;eflTvs(Xd^(#>|7zk1OV}HL&SLRA#g1 z@m8?fS6A?Dvj7^X@Zot~vGO^=vCsSo<#W!8L`@9lQYhd2*QB-FS8_EPL?y?Vs^NJ_ zLFz`?W3d9QWDeAkpVdMYyu~XJ8&poo%(C!pwOgq@ zVbQG6R7cf#Z!oQ5b4%BL{LLFLsZQ=d+ruDK5>r_OF<&Zj|4$xj8f#61;EY*jzLg6A zaH=Lc%wiqMKCniOW&kLh#jFT*5`t+JpPW_91O&9W8fOseylljIodU?h!WG#~T-3sB z{y?H)C89XUj>i%?^Z-BzLr9uB1u&Q*i@@~XUi8Whw_VH5Y~&O``q3fE^b@?DjLf?B zmLa|O!%c^okExXK#32{%;wxq@lJ0~5z|-$T^m7^FwHi5R$mn66BF$LWO1)r_jR|9@ zj`ObCXHVJ}*A))|)R>awiVQ`hoFA7$JmL)}Rb!CIa&5(~{JZ6VpU$IK(p4UJ!_820 zR~jV;m+bgQZ2}dMF9~&+Uo@G1cIeXMsb`;|bk^xX{7g$hz|`-$<*KxAnpJ3m`(1oS zjkWo1a_lsz_}+~(EAY2dfF9?+{y1XOnJ^@OQNO;xAr3%Y!g&5_oPZB9KN5&_>(YJl zgeeopPi$J%T%D@(C2LY)ZjEhbmq(e|ALZ=?uX!r~!y zABtD7RnvCE2aGuS@DnaMl5l6~YUROUo85+jnfY zc;Qk45}9Ie)wIpr;RAw3u%0+^1GpFkSA=++mDRva*V)B&SLHfz=#CW!q6 za6*t!#*gs^5~^6We#I|;cXxuQ?VzV7Q4@(MWFl3|>~!Sf zb1$z7HWh0%`qQAReGHVC6bQgKL5;Zl;DFM**?JJyFE40nM@9o^EsX}!W44MlhQ>0u z1sz6YAHmb*%P?l7XgBLL9ta{(#NScaVVy`F$DQ$P!Ku*SneE2^Xsm>)#eHdsusDM( zm+d1TpRF~5&|#9AwG}57P*okME6YHuZ7^SOTR_q@hPtSTHlrx>81SdZs7|yGEsE!r z_J;I|_5jbDr!7qhn#CYUk*XPWwF8Q!Ui_zYo9%*eLBL;_NYE@8u>&9!$VE?B9{0Nk z@4n;C+0VW7^i$72@%H=gb?ecsWu*pAlVmDOXeQbP41yD}`pG{$eBZ*Q1P(D0v=Zc2 z;0+dV%c?fVPCEgW7DZltwm>iVvKj?D1}Z2+M(vczoHWg&e9BamwZV@cT!Y;xyM`*J zrF^iBP${Dr77QA)iijNmj42@6R~ysl*tCQx5jHB2mMHi+qyS{_O?cD(r=MZ_(7kgdjw8{zbUq0|KOH|?@Az1`)A=&|I zXpFQir2xUKs_Y!KMTx645^i%lA-87R%2>(c&))Te*@Js_79okTae&EsiNn51TcV5q z+yS|9z})!Dxhq_{B>Q*cN$=FL6HZKi0%gNanjiy>R^{6yy(xa>cQ5>C>0AZ^en1hD zGj*wbdkmX>^)HotOweZhRjig7d$RF(^@)`+qrWm4vfmON{2~&Q;A}e87y*N zXA`@3?`~ez+zJ9U#V*ye*=lqOoFxe+-;v>v(}-XwWcS)R(v6rLf2yw9^Mz5Nd? zp;*2&7Kgjx_72LDf1G^uJ@S=j{s&W$9(L7XMMt8V+u8^5`7_2Mkb zv>zb_7L1V7F_y)MPY!B+EbMnE|1E+}9 zbf^FdcQ?;u)U?7qJFV{pKY7JLLXYvY_(LWKl{xaKx4MH^)id@aKk@y~UHIm=W?#eP zV5+Vb%@L0Ry+ddPaTnF#By7VXyLad(NhWtQy3wEn12V8CDlO4XaKuG?|# z%qwxng|N7Cx%U^o)1ym|!=_9>aL8zsBPnheL!NB+PTiT8Gi6=5HWlgbNxlC5D?j8?DqtY8aS^u;CtkD|{+SBk}qgp^VO37aY zi=o}H$M@8ek0^;wh@A`)@&*M$I}+RO`1x%+c5Xd<(oqmTNgdq$0l0-2*qPpP)2-i* zXLc)NAbvhB)@9i4{>d<87WgX@-;%^4cb%a5EmO<*XxCQcG~!E$<5Ly z-D4tu@l=NM#5wKu6RBHcx|biYhV%-0^qU zFJr{?<ziTmu7)1h6;?2%*F%tc-@gGxO$= z!}`*2I0gm*lSqy|x=L+;tU(e6pK95^^a5kA2|tF>{0WYoiI088Au&uyVv2<}k{T>; zVTQ}SrKVa3OlNdhEH{Ouj2#k|xFs9pqiE zP%O3c&A}CSjyk_rB^Tf2EqCr-S7}Il%?Xg=CGpI2Pp;pzDq4n%JOL-?$&Z$QxbP=` zyQiXg-|qVk8920EoA&*B_CYi%_lEhD{>Tpq-ElmWKEH_YCNJY5v~n;TpNe)7z{HeC zlb>SfbWrXQS=k(hUo_oZh5RrsCeF(}$C39~xV@YIa<3R6Nf>aI=DCy7$3Fkuz0Nag zwrEmEv1)h4l~5`IKflaIcPY?au^QBIt}yP*J>uNNxxK4~T?WarM{X9TSg?jH$&kmp zBffRchp&;ki#0Wh!RJuYz!b&>8UuOW({%}AS(A0u#3aFcf_|;VAcJc(6!T{SGcLcz zOmbG|;6g@ha9!~DqfTHl0Kcf>avav= zafh+fpy`(|=-+Ydu`beRlMpZ*4QpATCDf7Uim(_KgcHUM@xuMN1nDc4pgf4cq$#8i&2J=Mm9Ww1ql38q5SbV$y*R|Nh>C#*RwV?9?Jj?a?S+17Be6D}f}O zgAn4ZnEc*s%Vw3|xb(sYe)Xe)y*fhuNCKv+BwXc0`HYtRy8uj|9EQ?(*M-k$kO$+D z4)MG#5R=T{CkrDDp{*PB3`q1LsFh6BfMumWKV6HvOJgXO!#%LKVxUp6G*UdeaB#Ok zjyiF78@=*(e>UnxX*uo|gW9TPYlJow-mKssa=8?%BeMW~Cf#>@K3KuywLoe9+X zP&xxiPb6KN#UrHY2WDW1w^cw_EkP4(L=qur@9a~**0ps{W(aYYrP<~OkRx^*NPxfF z_WwRm0s#P6{FGeATX@8@qtV|Iah6G7H*3py>@(XyEv=pRKNOB1#~s9NYgCzi7}r#-^M< zwyfSpe7PN?RzKBrO{6>*lns&|=JX@m&4%S{WW5^>&VFCbchaHvDs(AX9gC=$b+}Xj z;-M;GMY7K^*#^d!c^x0ww4HCJW#$F0cM#MX90t*G{aKtalQ%g8+3du?hIB__%UO(r z@7{^Y9P;~KOwt3o-P@Dbjl~1`q}w9Rw*6+$dF0-EW9sC5=Dtg(%d5$XIGxx9eZ_ZX z0E6`C%$;@n(oPkz*9~4lF3u>aCFWMi&( zSJe2ttdCL!5*d`QhH|6%x%I5`Y-2y9Z|d=2$ZbQVNopvv_t(nTmQ++Mm-KbOmdlA< zI#=Z-SXN(LL(*g#j^l|Gkzh6e-#1*%N?2X7RDIA8nt3U8_*x2sRUJyq*!btKZ(V3h zZXxFDZ{(l7VLcYQL2Kl$Ah@xG$hQ9;X-1!~c*c^;{)0E`#)Gm6$$tTChxLE9&YsP^ z*M)!9=yuMQmHNb!z0dH>(N0y%w3p7h3N-|;hpgd!LStRFQku5+7Bt7(kUufOTf#me za5f05{O`xJ@R6D4993x7R4E0);{xB!#)hPPx~z*u)N9Mom&DXp0EO8?#O&>@T<{k| znQj(4ob9TBY|k5j)~P5R`f1DE$^dit?^4R?V6ls#eGzO$xKd(t?{x60^Y|t7aoD6& z(rZ)eG5V!|z0!yNHhFSo|}fQt?Ij9$aWtP=YCVh zvY;PN0Zisy>|XwhRz$>UdMD^)n9E(MT53<`)LPhrLFZ?D=1l}67jq7h@3|utdv%3G z{qs9Xc30IJ3hQAi@z2!!R$uR(WFD^LGuHsR8x7iWz9W9U&3pYxY6Enyfr&p`gM5=@qN^qhzjzsrr!b`{vBPEWtVx0S>38kGkgNo2|6QV ze2L}8o2ZECFHb*n(L`?I-b#Tlzq>zSKVCfVPAi&{$KHy=Jm}mjmNF8&V>M9yGbYT7 zWE^2iU6=^Sla@B#;Mf{U29is$M?9g~moO}%5`&!KN3+)IyYo9MZ3jVdy5_QJHRD%0 zLbNJ->h$kT*7?%9Fjzntfp_La9tS^uIT}TnJra9mR7VA$yvncaI>Ux!pA0(ZR@;re_rS?o-0eFYjEt8b1|fk zCtplr>31#*uR-+spv^9sULrgKFY=dW=T2hy&VnQC<&|IUYoi1N{k4KVjTlk_hTNV+qtw5Ndw)81rjFaWn@Dg#z?z~g|BV?o7%#@^)P#e%j>J9s; z^C`n}C&3G`H^H|YD(`c6}e*~ z?Sc*SBm<34unWk0=4>FkNi>u!4)WZ^f}O>6A*pw%ZS154)x^@DxUr;Af;;15yKp=~ z)t_i4|1=mU?Q*XDlK{Ge^P4)8j8P%pLsPd19Uj*Qf@hmHaOLHf4FMhK6;^X~Q>8kY z>=$Ms85t>GXwDu6>7Uyax{`*Gl3=dF3I*IUW7 zJ?EqA6*l$vxB!`NX}gqoc&uJ1avbPn)51)&7IPC4sadPa+W5Mxdi))Y?A8JVv~RGK zxnnbTw_4(EUToPOyAd5T3U87awmtZIQ5MX-#l-hlMxJXCj918m_EhNTSxs5Sb@8Q9 zK_^3mt^<7|EFR;$I88O#$9L;-96wehnT`RgR^RYz&(4c`oAQVvsGJ(kjI8jgAE_-Q z|IW4FR5ZG1A`)jtDGn}uqsptT_tVsNeY8qjfs3>s?=Y3n!kEG;$0JS+Ewy5pZV&al zzRQq3oL{_vOaC&PclkG%tV&sNEq3=X6(6{An)RVWN75`w(x_7AFsKQrU_Y?p9p`zApEQ^U|?-|J`cASAA6TiuLLFc$sRpeoz;|I-*-p-PVu4v9qsbY@59U0jfxsM&Ed-tmzx<@&eBgiMfz$gvf)jvpk_It}y7{%$AP4_` zX}gQgR3`9{vhD@|RU^BLqS?!)hy<=9ev-t^9bd+#aZm1&D)mQ9xHhA(jqsI{?Qfp* zmPE_)aJYQ#ip<{~|ECOkBhA{}&%{=0?i5^^Hj1;jOA_evd0f33$>Oa zzk2d9kA>gM8&%NDCHMnWvSM2=x}cDwjG*AjRTzBW6V4rjZKG?UU~$J%Kd(Km3RWXDji3C%;(h}qUYOJ12A~BxlOQ#pEa1}G(A(MG6%Eh${C-vbeUtC;zrZ6c z?jvwfgwk0yCj_zl1$Ro)xi$-zv*ONN3lIAR$~rH(2OyD@G~eh=e#7D&6orDT%6osl(_W{^dKlo>xTwCDEM#Q z5Hi%4MHG>NoyeGPm;owt$pg6L!&L!j?TKuaD8{TX#!6jm2CV9|QAr9$EoFKg_R#d% zGWUPFmKX2{)wDi7b79KT%D-Ujp>L>7Gcb}dt| zRV-Zf(^vC>Bv54Pwl0VYD@~_a*{k6i3=~b#OvDAmg@YM@Vg330r`yl2A3Ce_9|<^C z>-@(6+s|$Qig&K9{!av8q&ymzFI#!))EOY7e?m8qoH}L3ojZ3qIXRg~GUe&hXFw9D z6GB2vjEo8g8U!@=-MjbAO>ICmK=$|V-vI)Mk%oy6n6Q9x2#k}{SL~^5G%#U7SU-L} zL6ZYoiJZ>RxR4YAAs;@U2v2{8$GMHjTn;uF zAo=L|B#;F!KoX+Su>j_RTMx_B)Zh~;(?t^oI z=^v;OQVK(4O?3_e-EE|~8RAw*xL_8|z~UHGB16h$FgSPJmxYBF=m#Jh=v5Y=xya!m zFPRT<^w)3KAua}jX|QSm0)QR>W>g75Da?>Y20&Rz6xnDxK}6sM0MKHHTY)(l=x$){ zg>ZrKfLVE2>YoSt6GZ_$p#bX{AbIgtMY^V9f+6jDYOgx+)-h!}?80$?-rnK#`vAeqbR5)B+HI z{IYq4CW>lSL7h~U>$S~k9 z*juI*?&i#q-}fXwFDeXC`+qjmerZmuI8btM(jxykd4|F?h+{)UY-kD9Do{T>Ppl=D zZNLVe#q_k`EUwSs4@bx8HaqAK)vj=opaH1~Rt(%f?zzDcP#MV5h8rA3(%L|7 zd}i?7KHQk|wGjs}H%f&45QG4jh~*pPR=cbyP^!PDm&Zh`p4u3=28I%`0GmKLOi!v< zMr1_Hll~b#(X(@(eU&gfwrw~%Au*_`1=l}0xXGUB_huMZD5Q#2CEa9XG-olupbXSc z)Zw>Z!;VuuX-4$$YirTwJo@nWBNdo^r{a{9X>p2_CM6+(2-VfsEWA^-1*OL4Sk&2j zO9X_at5;oBgJDD?JV>6xMN4qvhCvxf4OEtIWG_jem1VBYmyja$#&@Eb`DSc+lTC+I z5%j6zp^rT_jUFb8ER!LXvgNyx6FDtIE&U{X*xK^?ZZ-LG^-pR1O9qF--iFCBxO#3r z2FXM9FhBfHqvMo2j?>lM38nk;5r@Qs7UKepv%h~3kME!*2nAo=X z+<*G|d&7|qwd3&Ij_-Oj{)5J1ER4hLoF_|?B!bXp$YLb5JgIfvY7OBn?cqrK8wjQv z*(aN6Yis3IQ*$FNjAGB+{_$T0VApIystlqq3~6fSt*aquSz<+`8&_pin*ys%tDsP5 z)3${KMVpXIM1e}ts)#HKQYwg`MUY_F&mw;oW@JP^_H)z7O6`Ja3O)74xzl_%yNH5? zgM56_dk`CNF<`^HQuR@D>9J|g(>B}D#S^G>C;yS^K&Z`+9I;wXuHx$kPI)$nitaI zVOF7tkbCyl$=KJSlBK1tDzq|xby{jVFVB0Q@QF3vzINxb+#-T49FiItam~8jFE*bt zn}qAqqBU3(P3`S(7>qs0NH1_H0WtQ?`_r%ce#HE&%o3}oecIey*ElUl$3D;()`1Zz zt0SY)%#0OMReRpm!bZZOb)NeAB6`HFrzKtD8Gu{Z&OfKa{sW7h!YAG%x&`tbsEko(}QA~l4D;YLq6(t-h z18CE53=8YX`|&;J^RgGaTpB`dXo^sRqd4}&j>0}+LD1WxvMSO}WfrVW8U+zXPS&-m zu*OgWR;KNdU(M0eS`y|YmRALrP$=_TF3KiDsr?)_i+6kAN_Rn{vEj$k%RKI^q>4Wb zl5$EB)7Q?I?QUb7z?68shdpiHsdAY(BNxi-31*AaOPJM7Q1BATH(nSjbKPukg;IB{ z-+jOPcEZF7tO3s3*Noe?Ns#G-xVh1dC7Wxm{emFqo#Z+u2eBLr3+bu*rWGyKnue;fz%M4^4eww8@oY{L-ZrAoQS-S#59IoYiZc`9#6ZuM=~bm?ej%@IY`E-QTk1yBz1?&#!vErbp2dA2mZeqr_Z&TTSY~x2os*L-DT5~#XtV#oJ}Nz7$z3*DYMhj<+sgIw zT>y5@FEoxS3gbh&m@Y|;-GCBSEND<#vLIqxkZM2(g@RJ`K@9%GzKD^Es1XEx@IgT< zqO=+WMMNutR`Eev6-rV?NCY2RS`d6t*cyd45gMa!{^ow0lao8Mn@!WjY{_96CU<7; z%>C}U=bm%!ce7?X{#Vn%Brb;mFUN8nYjV*hLm%3js}Q-3Efp<+na^`+YBVi0ln*_1 z)KFHUM9j2S%Lm8O5a#>f5nq}b?V}aTk=lBaga`-K_L;C&2w~*Kjc!(vMx)C+&k!V}Cc=)MqJ+qsOP(H>J6=_2muR>xE%PjB{QT=kRKM;~Wbd`hadz$$b9-lT>*n5l=jTrS_WPTRPNgPt)2b@eQ5vTEWlpJ(KY^QaWl*V{ zS1_4{to;a`A%?{4->0|rkFARUvKAH!IpOR~U|wYX5LGg~dxUlhrm5+w?*>4$j0Xzn zUn-PApBUQfyYG0L8}*>gCE%-Sy}nPL9N2p8C_r>?+(ENxE$6@i5Mr72Trs%0_X)~7 zF1xxh(b;FIxL+t^KRKuKIH81B&}Sh2Z$Oqp-V3tV^zIX@Lw-a76e5ii7F~-|tCHD} zBc;2HVB=-iO?#9$w(PTn4iMw}#=YCH6$ih1C3;{<>rAVnqWljQ==LPPg%y5W8{EYUN9OH#@$ekD7Dc_NqZUEpK_R%Oow}GAVp(D zdxHMF(SIO&Zpw>RHj@l`aDJ7*^3L7`^j(WK(L&VF8%oeux-y$b{>9}cbER_qM>T6Z z^+q$S9}{ednfUyG1(gAaT=G(`ppxb)h|ISnGYE66lgD;HyR7Lu*Sti{L%Glr>?4Yn zooN;U-L<0`ye##+etlh?FiMsEIy%Z`7z)8}J(hiJ=(Sx8TZV~|+Wb(;-Y>cs_%g<2 zg&VJATgNOnx7pWwLo>IbdeS~rTU1D+b$R*o?BOeW?vA#%)Dz6n*_m(a>7V#xb=|wH zfzBGBNU~#4;A%L_qwwPCrYonOMiXPM6XJ#W3W#aQPp9w5UNxR&WT|tZN9`II^v1c0 zb=r62&FGR6p^pQL-IRd_akbg&sd$q5sXuTqR)V$Yl<0?58@XlPN5+82{gC6~tu}W` z>#;Nb5|8H^9ELJ&=P4gdFkJZ2oeX{7JzA?=cs2>k$%=iOkt`8;=a$>C8(Nt*U(M?^ zed)EY!O9j@(QQ25x#99;@shEh`cR9jHkCyoww!^HkeLkqHYm)67QcIb`A0+jl% z^9#7x>UgeFcNVwU76z%E{19<7eXn>wq!xn95B2N_8Y9K=@1w?CV^U9AL_1>ibQL$g zGyJK>4b!7gjyiZ%Nx^(9j)#BvQ1+TH7Rr8E_QIA8TOrsVpJ?>XPkZE}8ROCseX%9& z#9qHJlv|PTWQg#o-fvM*+BW%U%lcyh`E)E=Pxs)mT=X?r2GDELLL1$VQmvjbTKGyt z`|h;;T#K#R5bRH$f8n`<2j1qWt>k{MdSBml93R>H5Z_ZOl|DZ73Ab@irP5FNZ38=} z&rRPqbZ^_x4gAWtH?(VG4Y@`rfe+MGov4Bs|Lp-ZDDdeV_2>RqUl*+Cl;{I=1Gw`i z(16Iq#H6;Si=-i%KoW=_V`IlpoH(ifnqd6_)<=(gqkW^c?>!nW0|U46Qhp#P;zO~x zf%@$qD1=UWxR&raFv@Ro;>UciW7P^MfRuKyB!PxuC_MellQdO3P&fj2wVI}@7_&fD zDs3{IO#(jzycpDzDNMDidQja!ZS}qZ^#nUHKv3uH+iwPR3i-1VcB~|U1fnCIL7iOX zU2Ow2IKK4qi)b`IlreF{B2ynhNjW!{%jGnTp8JP;Y8!Q&R!YaC@-!D(=@<0aS<`5B zr)>&Cz*kTT@$o=nLIeCz2nKzW^6~k7QOJJ+w0Hioc~(^%f3h{MWksuKxArCSqqy18 zjT9+S+-M+?5)xq!qhT&Mw!}C}Fe+*wV}BT;5iv&N1|iwpU@Os3ATu#5)0)AoZo|y6 zxlXf!8oRogE;SThW+3tNJm0=&xA*z+zAbIDEze2QJbilaea^l2d(S=h-gC}ap&04p+@9FNo?G_P9=YO^Z_Uhlh^k(tsjM>=CwA>mxM#bmX z6w0pf5)+=-aTD!&FX?EQZ182wZ!l0Eu>acS&*WoFr^9Il$_#2zo zB%W+}J?c5OxU}SBU89lAo^Io@=_W?C&K3~Qopd6H3TGIq`oC@{#fax=5 z1{W{b5kGg%DW_?oDo+%p(Y(6GacjYH9stO1Bs73NaHO3jW45`2r?YPQ^`n1Ia;!z+ zS@Ee==2mD{#;8C~c0P;vbbaAmLg{BTy7JXd7=x16+_v7w-MpHP+yY6nwE1T9jkZBf zf^DJCzaMhd&RacF;HJ0*5Vg4ThE;sj{RCe$V*!N(Of-R@g;|<=C%G(d{yFqhdMeTO zm&6}!xZjmEq@;X1#?GLB4E=3XyFLrvgw6f$Q{Aq+7Xlw29I>o73%*NKi5S<1o|)sW}^gml(KtjoMw zhK)9v0HzIHU&}B60wRA)T1h|c zI`(F_Gqqq~@Z&B~_LkfpG$qchStR4&c;5pf*9?f2I`8TGMOQu%--Dt@DDc2=XpUhv z4Kjm?$CIsu_?E_l3pkAydoS}^Z@Si~1C;!b1#WGdfodi)FWd7VvcsXivu9sS%Gsqh zsge=C35m4e&N8Hz4$U`UtCE^aPE#ck!vy?gB&K{rv%8Vv0_fz(U`OlnxGpO+yXc8y zNTz`CG)5GA?`_|)2%i;_SD*}%?N7eGbkWUGY`1YyN!-!pv6Sv~P4%^X0L zB^lK`^S?p9=$b*!G9xgi$m~$%k^C4-+}ixB3Kx8qYb>zh6NOcc#z@jgm3x{D1Bw#YeWT#TKa>-*xCF62$K#h0K0 zAByaf#t))bXa=uoXm-0s(w#afaReXp-Yb=`znuPDp}6JC~Mr(8kNa7_tcmw zLriUTZQ1XsS3s58f>Ba7n#-sI;&7f6c|F%G(s|Cb;{iWI*4Wq^%l}%f)eA zK}S!W+zv)!uJ}vui?_7ikyfBI>9~Is5|pL}BH+~`gVGC3)9%66$mkz!3awDwjH!jA z`zkTT&yq(mTTEHE)nBrr@CIEn}hS;hQD}#LKQ75R^f7UF|1>@t(b9C8ESl)1~W`w-P!v z{9Gl;3iYccrz`Xe3QF;Y{`BT?HnQg*odbn{Jebv_jOmv48gLxJznWoFX!WaqPA+4y;5M!POl^O`H# z=GPUD|NB^9e{UL;wf4vm2Xp3(HOSnHnl){rmJE;lX32sb8A}~IOkg~ya82SF%Xj`; zc20Jc5UELwwCp2fl4-|Ke$8<8heNF}pHXFPk6iMB&v@G)RnkqbYFG#$Xi&xBuS9~n z`+}NWGNzug%K{)M=b%LGIb&BrggDn`ur|vo&p2bmSYn=WLwTy2LGXCIVQmXideq1p z`%GvdmFdOWi<)UwfE8*Tr?zU7OYqg!uQto%uM~Qu*Phj?hyT0VHm4PVz`jmK)}1Wh z74EXJezkm1NlY%@^FV3!?_1$T_|K5I{AlE8x0vkkZ+jXiPmitY_}pcYb2hj~v>zQ< zC)YToXP}aRYNB3S7FrVNn89*$aPDn9%#>pUVp`SK$u-~ z#dRImE_Wwx*P+my=ok`+I-Ag8a>?awi8$WYyNORw;N4EVg!taD3|jcQ9s5_35jLLd z+s?y^8&;WuPB{wgz{B37y|4cLfbrSX@bQk;+bPXOe0&gwzzR2u`c3hrn*nP^3)A;t z(N&beC|Ri0kOyG@BRAP_N+KGiL4uVWHWo)9Gh`kWl^05wAOnPSlb_nE>LI}@*S6S zB&R^p3(xPYuBpB?$}S=oWs-gW{#OQ$zb2<|D}m?3hmRcC|ED!;zYGKN0A2pM+vR*q zdL@P*ep3PobkAE3=&2_q*TkZ-t`00gvMf1UT9myLx+ z7bug)F5ev-JOKy{WC|Rh=Z7~uB<2-Cz{}3Rip96x=>7^Zpl2}3zW~_--}<`v2ZD+< zPn(E&z`AAgHYzR;Z>uKHe3A0WyKC2ra*C#KHIbOny~LKdrluNLGosqA|AZWpt8xfV zt(<%8hd;h+^R*0trj>HOgh4;rQ)dT;}RM{fOe5A(Q0HC@;iflOivs3~AVOR=b_ zoQ`KACYd@OGzfeu76?)%cj0J)xdho38}|HeEEQ!G50fw}N8uEr z84)NXNp>nai_Ob)RWTyB&jcFuQ4j!v-QN9Rh_H1L{$8}`FD;Q+k{IKG**_z&5g*kh zG(qV$nwC-wk+k%Jh@sg-j63IK5Mu+jb+NFGoHc7#GbZ@~&6ES%{AP^l+F=sY0vhLu rjL|Z>bC~oL!n3X+$`^$>UC8u*6(M#V!IIs800000NkvXXu0mjfZ+0=O 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..4b590ec05 --- /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.service.CineastsRepository; +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 + CineastsRepository cineastsRepository; + + @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 = cineastsRepository.getMovie("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..71157b1e0 --- /dev/null +++ b/spring-data-neo4j-examples/cineasts/src/test/java/org/neo4j/cineasts/service/MoviesRepositoryTest.java @@ -0,0 +1,56 @@ +package org.neo4j.cineasts.service; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.neo4j.cineasts.domain.Movie; +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.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 + CineastsRepository repository; + + @Test + public void testGetMovie() throws Exception { + Movie movie = new Movie("1", "Test-Movie").persist(); + Movie found = repository.getMovie("1"); + assertEquals("movie found by id", movie, found); + + } + + @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 = repository.findMovies("Test*", 2); + 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 = repository.findMovies("Test*", 1); + 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..67707dd1e --- /dev/null +++ b/spring-data-neo4j-examples/cineasts/src/test/resources/movies-test-context.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring-data-neo4j-examples/hello-worlds/.gitignore b/spring-data-neo4j-examples/hello-worlds/.gitignore new file mode 100644 index 000000000..524484fd3 --- /dev/null +++ b/spring-data-neo4j-examples/hello-worlds/.gitignore @@ -0,0 +1,10 @@ +lib +.ivy +.gradle +target +*.ipr +*.iml +*.iws +.classpath +.project + diff --git a/spring-data-neo4j-examples/hello-worlds/.idea/.name b/spring-data-neo4j-examples/hello-worlds/.idea/.name new file mode 100644 index 000000000..cf4b8f6db --- /dev/null +++ b/spring-data-neo4j-examples/hello-worlds/.idea/.name @@ -0,0 +1 @@ +spring-data-neo4j-hello-worlds \ No newline at end of file diff --git a/spring-data-neo4j-examples/hello-worlds/.idea/ant.xml b/spring-data-neo4j-examples/hello-worlds/.idea/ant.xml new file mode 100644 index 000000000..2581ca3fe --- /dev/null +++ b/spring-data-neo4j-examples/hello-worlds/.idea/ant.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/spring-data-neo4j-examples/hello-worlds/.idea/compiler.xml b/spring-data-neo4j-examples/hello-worlds/.idea/compiler.xml new file mode 100644 index 000000000..b978c89c7 --- /dev/null +++ b/spring-data-neo4j-examples/hello-worlds/.idea/compiler.xml @@ -0,0 +1,28 @@ + + + + + + + + + + diff --git a/spring-data-neo4j-examples/hello-worlds/.idea/encodings.xml b/spring-data-neo4j-examples/hello-worlds/.idea/encodings.xml new file mode 100644 index 000000000..e206d70d8 --- /dev/null +++ b/spring-data-neo4j-examples/hello-worlds/.idea/encodings.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__aopalliance_aopalliance_1_0.xml b/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__aopalliance_aopalliance_1_0.xml new file mode 100644 index 000000000..30ff5cb79 --- /dev/null +++ b/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__aopalliance_aopalliance_1_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__asm_asm_3_1.xml b/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__asm_asm_3_1.xml new file mode 100644 index 000000000..3386f109a --- /dev/null +++ b/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__asm_asm_3_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__cglib_cglib_2_2.xml b/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__cglib_cglib_2_2.xml new file mode 100644 index 000000000..01d9b10a4 --- /dev/null +++ b/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__cglib_cglib_2_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__cglib_cglib_nodep_2_2.xml b/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__cglib_cglib_nodep_2_2.xml new file mode 100644 index 000000000..a8b52958a --- /dev/null +++ b/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__cglib_cglib_nodep_2_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__commons_logging_commons_logging_1_1_1.xml b/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__commons_logging_commons_logging_1_1_1.xml new file mode 100644 index 000000000..b770f56aa --- /dev/null +++ b/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__commons_logging_commons_logging_1_1_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__javax_validation_validation_api_1_0_0_GA.xml b/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__javax_validation_validation_api_1_0_0_GA.xml new file mode 100644 index 000000000..4b644e911 --- /dev/null +++ b/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__javax_validation_validation_api_1_0_0_GA.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__junit_junit_4_8_1.xml b/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__junit_junit_4_8_1.xml new file mode 100644 index 000000000..bb76199a8 --- /dev/null +++ b/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__junit_junit_4_8_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__log4j_log4j_1_2_15.xml b/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__log4j_log4j_1_2_15.xml new file mode 100644 index 000000000..c6024af8c --- /dev/null +++ b/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__log4j_log4j_1_2_15.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_apache_geronimo_specs_geronimo_jta_1_1_spec_1_1_1.xml b/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_apache_geronimo_specs_geronimo_jta_1_1_spec_1_1_1.xml new file mode 100644 index 000000000..a6f25dbed --- /dev/null +++ b/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_apache_geronimo_specs_geronimo_jta_1_1_spec_1_1_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_apache_lucene_lucene_core_3_1_0.xml b/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_apache_lucene_lucene_core_3_1_0.xml new file mode 100644 index 000000000..4e829c195 --- /dev/null +++ b/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_apache_lucene_lucene_core_3_1_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_aspectj_aspectjrt_1_6_12_M1.xml b/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_aspectj_aspectjrt_1_6_12_M1.xml new file mode 100644 index 000000000..2d9334521 --- /dev/null +++ b/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_aspectj_aspectjrt_1_6_12_M1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_hibernate_javax_persistence_hibernate_jpa_2_0_api_1_0_0_Final.xml b/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_hibernate_javax_persistence_hibernate_jpa_2_0_api_1_0_0_Final.xml new file mode 100644 index 000000000..6b42b8a5d --- /dev/null +++ b/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_hibernate_javax_persistence_hibernate_jpa_2_0_api_1_0_0_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_neo4j_neo4j_1_4_1.xml b/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_neo4j_neo4j_1_4_1.xml new file mode 100644 index 000000000..90c242e10 --- /dev/null +++ b/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_neo4j_neo4j_1_4_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_neo4j_neo4j_graph_algo_1_4_1.xml b/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_neo4j_neo4j_graph_algo_1_4_1.xml new file mode 100644 index 000000000..461ca858c --- /dev/null +++ b/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_neo4j_neo4j_graph_algo_1_4_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_neo4j_neo4j_graph_matching_1_4_1.xml b/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_neo4j_neo4j_graph_matching_1_4_1.xml new file mode 100644 index 000000000..93779392a --- /dev/null +++ b/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_neo4j_neo4j_graph_matching_1_4_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_neo4j_neo4j_jmx_1_4_1.xml b/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_neo4j_neo4j_jmx_1_4_1.xml new file mode 100644 index 000000000..0b939d857 --- /dev/null +++ b/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_neo4j_neo4j_jmx_1_4_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_neo4j_neo4j_kernel_1_4_1.xml b/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_neo4j_neo4j_kernel_1_4_1.xml new file mode 100644 index 000000000..e513a6129 --- /dev/null +++ b/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_neo4j_neo4j_kernel_1_4_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_neo4j_neo4j_kernel_test_jar_tests_1_4_1.xml b/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_neo4j_neo4j_kernel_test_jar_tests_1_4_1.xml new file mode 100644 index 000000000..ad6ee5185 --- /dev/null +++ b/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_neo4j_neo4j_kernel_test_jar_tests_1_4_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_neo4j_neo4j_lucene_index_1_4_1.xml b/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_neo4j_neo4j_lucene_index_1_4_1.xml new file mode 100644 index 000000000..423b04b85 --- /dev/null +++ b/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_neo4j_neo4j_lucene_index_1_4_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_neo4j_neo4j_udc_1_4_1.xml b/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_neo4j_neo4j_udc_1_4_1.xml new file mode 100644 index 000000000..b321a14e2 --- /dev/null +++ b/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_neo4j_neo4j_udc_1_4_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_slf4j_jcl_over_slf4j_1_6_1.xml b/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_slf4j_jcl_over_slf4j_1_6_1.xml new file mode 100644 index 000000000..55545f247 --- /dev/null +++ b/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_slf4j_jcl_over_slf4j_1_6_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_slf4j_slf4j_api_1_6_1.xml b/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_slf4j_slf4j_api_1_6_1.xml new file mode 100644 index 000000000..38036e9fd --- /dev/null +++ b/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_slf4j_slf4j_api_1_6_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_slf4j_slf4j_log4j12_1_6_1.xml b/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_slf4j_slf4j_log4j12_1_6_1.xml new file mode 100644 index 000000000..2fbfdab3b --- /dev/null +++ b/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_slf4j_slf4j_log4j12_1_6_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_springframework_data_spring_data_commons_core_1_2_0_BUILD_SNAPSHOT.xml b/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_springframework_data_spring_data_commons_core_1_2_0_BUILD_SNAPSHOT.xml new file mode 100644 index 000000000..b232f6136 --- /dev/null +++ b/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_springframework_data_spring_data_commons_core_1_2_0_BUILD_SNAPSHOT.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_springframework_data_spring_data_neo4j_2_0_0_BUILD_SNAPSHOT.xml b/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_springframework_data_spring_data_neo4j_2_0_0_BUILD_SNAPSHOT.xml new file mode 100644 index 000000000..8e37bc85f --- /dev/null +++ b/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_springframework_data_spring_data_neo4j_2_0_0_BUILD_SNAPSHOT.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_springframework_spring_aop_3_0_5_RELEASE.xml b/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_springframework_spring_aop_3_0_5_RELEASE.xml new file mode 100644 index 000000000..bbcf452ef --- /dev/null +++ b/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_springframework_spring_aop_3_0_5_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_springframework_spring_asm_3_0_5_RELEASE.xml b/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_springframework_spring_asm_3_0_5_RELEASE.xml new file mode 100644 index 000000000..8aa82f511 --- /dev/null +++ b/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_springframework_spring_asm_3_0_5_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_springframework_spring_aspects_3_0_5_RELEASE.xml b/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_springframework_spring_aspects_3_0_5_RELEASE.xml new file mode 100644 index 000000000..592e96d6b --- /dev/null +++ b/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_springframework_spring_aspects_3_0_5_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_springframework_spring_beans_3_0_5_RELEASE.xml b/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_springframework_spring_beans_3_0_5_RELEASE.xml new file mode 100644 index 000000000..92c357190 --- /dev/null +++ b/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_springframework_spring_beans_3_0_5_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_springframework_spring_context_3_0_5_RELEASE.xml b/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_springframework_spring_context_3_0_5_RELEASE.xml new file mode 100644 index 000000000..6e46b78e9 --- /dev/null +++ b/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_springframework_spring_context_3_0_5_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_springframework_spring_context_support_3_0_5_RELEASE.xml b/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_springframework_spring_context_support_3_0_5_RELEASE.xml new file mode 100644 index 000000000..5abf9a967 --- /dev/null +++ b/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_springframework_spring_context_support_3_0_5_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_springframework_spring_core_3_0_5_RELEASE.xml b/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_springframework_spring_core_3_0_5_RELEASE.xml new file mode 100644 index 000000000..ff34813c8 --- /dev/null +++ b/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_springframework_spring_core_3_0_5_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_springframework_spring_expression_3_0_5_RELEASE.xml b/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_springframework_spring_expression_3_0_5_RELEASE.xml new file mode 100644 index 000000000..2efab15e6 --- /dev/null +++ b/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_springframework_spring_expression_3_0_5_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_springframework_spring_jdbc_3_0_5_RELEASE.xml b/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_springframework_spring_jdbc_3_0_5_RELEASE.xml new file mode 100644 index 000000000..71b1fa696 --- /dev/null +++ b/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_springframework_spring_jdbc_3_0_5_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_springframework_spring_orm_3_0_5_RELEASE.xml b/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_springframework_spring_orm_3_0_5_RELEASE.xml new file mode 100644 index 000000000..168e438b6 --- /dev/null +++ b/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_springframework_spring_orm_3_0_5_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_springframework_spring_test_3_0_5_RELEASE.xml b/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_springframework_spring_test_3_0_5_RELEASE.xml new file mode 100644 index 000000000..f3fb1fc73 --- /dev/null +++ b/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_springframework_spring_test_3_0_5_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_springframework_spring_tx_3_0_5_RELEASE.xml b/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_springframework_spring_tx_3_0_5_RELEASE.xml new file mode 100644 index 000000000..792cf3baa --- /dev/null +++ b/spring-data-neo4j-examples/hello-worlds/.idea/libraries/Maven__org_springframework_spring_tx_3_0_5_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring-data-neo4j-examples/hello-worlds/.idea/misc.xml b/spring-data-neo4j-examples/hello-worlds/.idea/misc.xml new file mode 100644 index 000000000..a11e495ba --- /dev/null +++ b/spring-data-neo4j-examples/hello-worlds/.idea/misc.xml @@ -0,0 +1,222 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + http://www.w3.org/1999/xhtml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/spring-data-neo4j-examples/hello-worlds/.idea/modules.xml b/spring-data-neo4j-examples/hello-worlds/.idea/modules.xml new file mode 100644 index 000000000..80e996e43 --- /dev/null +++ b/spring-data-neo4j-examples/hello-worlds/.idea/modules.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/spring-data-neo4j-examples/hello-worlds/.idea/scopes/scope_settings.xml b/spring-data-neo4j-examples/hello-worlds/.idea/scopes/scope_settings.xml new file mode 100644 index 000000000..922003b84 --- /dev/null +++ b/spring-data-neo4j-examples/hello-worlds/.idea/scopes/scope_settings.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/spring-data-neo4j-examples/hello-worlds/.idea/vcs.xml b/spring-data-neo4j-examples/hello-worlds/.idea/vcs.xml new file mode 100644 index 000000000..def6a6a18 --- /dev/null +++ b/spring-data-neo4j-examples/hello-worlds/.idea/vcs.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/spring-data-neo4j-examples/hello-worlds/.idea/workspace.xml b/spring-data-neo4j-examples/hello-worlds/.idea/workspace.xml new file mode 100644 index 000000000..66b9c7cf3 --- /dev/null +++ b/spring-data-neo4j-examples/hello-worlds/.idea/workspace.xml @@ -0,0 +1,618 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + localhost + 5050 + + + + + + + + 1317159960107 + 1317159960107 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/spring-data-neo4j-examples/hello-worlds/.settings/org.eclipse.jdt.core.prefs b/spring-data-neo4j-examples/hello-worlds/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 000000000..9c2f16ee4 --- /dev/null +++ b/spring-data-neo4j-examples/hello-worlds/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,6 @@ +#Wed Jan 05 13:47:14 EST 2011 +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6 +org.eclipse.jdt.core.compiler.compliance=1.6 +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.source=1.6 diff --git a/spring-data-neo4j-examples/hello-worlds/.settings/org.maven.ide.eclipse.prefs b/spring-data-neo4j-examples/hello-worlds/.settings/org.maven.ide.eclipse.prefs new file mode 100644 index 000000000..4fc343d50 --- /dev/null +++ b/spring-data-neo4j-examples/hello-worlds/.settings/org.maven.ide.eclipse.prefs @@ -0,0 +1,9 @@ +#Wed Jan 05 13:47:13 EST 2011 +activeProfiles= +eclipse.preferences.version=1 +fullBuildGoals=process-test-resources +includeModules=false +resolveWorkspaceProjects=true +resourceFilterGoals=process-resources resources\:testResources +skipCompilerPlugin=true +version=1 diff --git a/spring-data-neo4j-examples/hello-worlds/README.md b/spring-data-neo4j-examples/hello-worlds/README.md new file mode 100644 index 000000000..1e6cc0223 --- /dev/null +++ b/spring-data-neo4j-examples/hello-worlds/README.md @@ -0,0 +1,10 @@ +Hello Worlds +============ + +A simple Spring Data Neo4j example with just enough code to +do something that works. + +Build and Run +------------- + +`mvn clean package exec:java` diff --git a/spring-data-neo4j-examples/hello-worlds/build.gradle b/spring-data-neo4j-examples/hello-worlds/build.gradle new file mode 100644 index 000000000..c4b693f2d --- /dev/null +++ b/spring-data-neo4j-examples/hello-worlds/build.gradle @@ -0,0 +1,27 @@ +sourceCompatibility = 1.6 +targetCompatibility = 1.6 + +apply plugin: 'idea' +apply plugin: 'eclipse' + + +springVersion = "3.0.5.RELEASE" +springDataNeo4jVersion = "1.1.0.RELEASE" +aspectjVersion = "1.6.11.RELEASE" + +apply from:'https://github.com/SpringSource/spring-data-neo4j/raw/master/build/gradle/springdataneo4j.gradle' + +configurations { + runtime + testCompile +} +repositories { + mavenCentral() + mavenLocal() + mavenRepo urls: "http://maven.springframework.org/release" +} + + +dependencies{ + testCompile group:"junit", name: "junit", version: "4.8" +} diff --git a/spring-data-neo4j-examples/hello-worlds/build.xml b/spring-data-neo4j-examples/hello-worlds/build.xml new file mode 100644 index 000000000..60a0d7f3d --- /dev/null +++ b/spring-data-neo4j-examples/hello-worlds/build.xml @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring-data-neo4j-examples/hello-worlds/pom.xml b/spring-data-neo4j-examples/hello-worlds/pom.xml new file mode 100644 index 000000000..8e2b61b71 --- /dev/null +++ b/spring-data-neo4j-examples/hello-worlds/pom.xml @@ -0,0 +1,177 @@ + + 4.0.0 + + org.springframework.data.examples + spring-data-neo4j-hello-worlds + 2.0.0-SNAPSHOT + jar + + Spring Data Neo4j hello-worlds + + + UTF-8 + 3.0.5.RELEASE + 1.6.12.M1 + 1.6.1 + UTF-8 + 2.0.0.BUILD-SNAPSHOT + + + + + 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-public-repository + http://m2.neo4j.org/ + Publicly available Maven 2 repository for Neo4j + + + + + + spring-maven-release + Spring Maven Release Repository + http://maven.springframework.org/release + + + spring-maven-milestone + Spring Maven Milestone Repository + http://maven.springframework.org/milestone + + + + + + junit + junit + 4.8.1 + test + + + org.springframework + spring-test + ${spring.version} + test + + + commons-logging + commons-logging + + + + + org.springframework.data + spring-data-neo4j + ${spring-data-neo4j.version} + + + cglib + cglib-nodep + 2.2 + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 2.1 + + 1.6 + 1.6 + + + + + + org.codehaus.mojo + aspectj-maven-plugin + 1.0 + + true + + + org.springframework + spring-aspects + + + org.springframework.data + spring-data-neo4j + + + 1.6 + 1.6 + + + + + compile + test-compile + + + + + + org.aspectj + aspectjrt + ${aspectj.version} + + + org.aspectj + aspectjtools + ${aspectj.version} + + + + + + + org.apache.maven.plugins + maven-idea-plugin + 2.2 + + true + true + + + + + + + org.codehaus.mojo + exec-maven-plugin + 1.2 + + + + exec + + + + + org.springframework.data.neo4j.examples.hellograph.App + + + + + + diff --git a/spring-data-neo4j-examples/hello-worlds/settings/install-ivy.xml b/spring-data-neo4j-examples/hello-worlds/settings/install-ivy.xml new file mode 100644 index 000000000..314d20d9a --- /dev/null +++ b/spring-data-neo4j-examples/hello-worlds/settings/install-ivy.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/spring-data-neo4j-examples/hello-worlds/settings/ivy.xml b/spring-data-neo4j-examples/hello-worlds/settings/ivy.xml new file mode 100644 index 000000000..2564c1bf5 --- /dev/null +++ b/spring-data-neo4j-examples/hello-worlds/settings/ivy.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/spring-data-neo4j-examples/hello-worlds/settings/ivysettings.xml b/spring-data-neo4j-examples/hello-worlds/settings/ivysettings.xml new file mode 100644 index 000000000..b534a933c --- /dev/null +++ b/spring-data-neo4j-examples/hello-worlds/settings/ivysettings.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/spring-data-neo4j-examples/hello-worlds/settings/path.xml b/spring-data-neo4j-examples/hello-worlds/settings/path.xml new file mode 100644 index 000000000..3d49c706b --- /dev/null +++ b/spring-data-neo4j-examples/hello-worlds/settings/path.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/spring-data-neo4j-examples/hello-worlds/src/main/java/org/springframework/data/neo4j/examples/hellograph/App.java b/spring-data-neo4j-examples/hello-worlds/src/main/java/org/springframework/data/neo4j/examples/hellograph/App.java new file mode 100644 index 000000000..16f3f3449 --- /dev/null +++ b/spring-data-neo4j-examples/hello-worlds/src/main/java/org/springframework/data/neo4j/examples/hellograph/App.java @@ -0,0 +1,39 @@ +package org.springframework.data.neo4j.examples.hellograph; + +import org.springframework.context.ConfigurableApplicationContext; +import org.springframework.context.support.ClassPathXmlApplicationContext; + +/** + * Hello world(s)! + *

+ * An example application for exploring Spring Data Neo4j. + */ +public class App +{ + + public static void main( String[] args ) + { + + ConfigurableApplicationContext applicationContext = + new ClassPathXmlApplicationContext( "/spring/helloWorldContext.xml"); + + WorldRepositoryImpl galaxy = applicationContext.getBean(WorldRepositoryImpl.class); + + Iterable worlds = galaxy.makeSomeWorlds(); + + World homeWorld = worlds.iterator().next(); + System.out.println("At home on: " + homeWorld); + + World foundHomeWorld = galaxy.findWorldNamed( homeWorld.getName() ); + System.out.println( "found home world: " + foundHomeWorld ); + + Iterable worldsBeyond = galaxy.exploreWorldsBeyond( homeWorld ); + for (World world : worldsBeyond) { + System.out.println( "found worlds beyond: " + world ); + } + + applicationContext.close(); + + } + +} diff --git a/spring-data-neo4j-examples/hello-worlds/src/main/java/org/springframework/data/neo4j/examples/hellograph/MyWorldRepository.java b/spring-data-neo4j-examples/hello-worlds/src/main/java/org/springframework/data/neo4j/examples/hellograph/MyWorldRepository.java new file mode 100644 index 000000000..ead3954a6 --- /dev/null +++ b/spring-data-neo4j-examples/hello-worlds/src/main/java/org/springframework/data/neo4j/examples/hellograph/MyWorldRepository.java @@ -0,0 +1,23 @@ +package org.springframework.data.neo4j.examples.hellograph; + +import org.springframework.transaction.annotation.Transactional; + +import java.util.Collection; + +/** + * @author mh + * @since 01.04.11 + */ +public interface MyWorldRepository { + @Transactional + Collection makeSomeWorlds(); + + @Transactional + World world(String name, int moons); + + World findWorldNamed(String name); + + Iterable findWorldsWithMoons(int moonCount); + + Iterable exploreWorldsBeyond(World homeWorld); +} diff --git a/spring-data-neo4j-examples/hello-worlds/src/main/java/org/springframework/data/neo4j/examples/hellograph/RelationshipTypes.java b/spring-data-neo4j-examples/hello-worlds/src/main/java/org/springframework/data/neo4j/examples/hellograph/RelationshipTypes.java new file mode 100644 index 000000000..6f66f5f37 --- /dev/null +++ b/spring-data-neo4j-examples/hello-worlds/src/main/java/org/springframework/data/neo4j/examples/hellograph/RelationshipTypes.java @@ -0,0 +1,6 @@ +package org.springframework.data.neo4j.examples.hellograph; + +public abstract class RelationshipTypes +{ + public static final String REACHABLE_BY_ROCKET = "REACHABLE_BY_ROCKET"; +} diff --git a/spring-data-neo4j-examples/hello-worlds/src/main/java/org/springframework/data/neo4j/examples/hellograph/World.java b/spring-data-neo4j-examples/hello-worlds/src/main/java/org/springframework/data/neo4j/examples/hellograph/World.java new file mode 100644 index 000000000..7f34379e5 --- /dev/null +++ b/spring-data-neo4j-examples/hello-worlds/src/main/java/org/springframework/data/neo4j/examples/hellograph/World.java @@ -0,0 +1,63 @@ +package org.springframework.data.neo4j.examples.hellograph; + + +import org.neo4j.graphdb.Direction; +import org.springframework.data.neo4j.annotation.Indexed; +import org.springframework.data.neo4j.annotation.NodeEntity; +import org.springframework.data.neo4j.annotation.RelatedTo; + +import java.util.Set; + +/** + * A Spring Data Neo4j enhanced World entity. + *

+ * This is the initial POJO in the Universe. + */ +@NodeEntity +public class World +{ + @Indexed + private String name; + + @Indexed(indexName = "moon-index") + private int moons; + + @RelatedTo(type = "REACHABLE_BY_ROCKET", elementClass = World.class, direction = Direction.BOTH) + private Set reachableByRocket; + + public World( String name, int moons ) + { + this.name = name; + this.moons = moons; + } + + public World() + { + } + + public String getName() + { + return name; + } + + public int getMoons() + { + return moons; + } + + @Override + public String toString() + { + return String.format("World{name='%s, moons=%d}", name, moons); + } + + public void addRocketRouteTo( World otherWorld ) + { + relateTo( otherWorld, RelationshipTypes.REACHABLE_BY_ROCKET ); + } + + public boolean canBeReachedFrom( World otherWorld ) + { + return reachableByRocket.contains( otherWorld ); + } +} diff --git a/spring-data-neo4j-examples/hello-worlds/src/main/java/org/springframework/data/neo4j/examples/hellograph/WorldCounter.java b/spring-data-neo4j-examples/hello-worlds/src/main/java/org/springframework/data/neo4j/examples/hellograph/WorldCounter.java new file mode 100644 index 000000000..7ff6e2e91 --- /dev/null +++ b/spring-data-neo4j-examples/hello-worlds/src/main/java/org/springframework/data/neo4j/examples/hellograph/WorldCounter.java @@ -0,0 +1,20 @@ +package org.springframework.data.neo4j.examples.hellograph; + +import java.util.HashMap; +import java.util.Map; + +/** + * @author mh + * @since 17.02.11 + */ +public class WorldCounter { + + public Map countMoons(Iterable worlds) { + Map moons = new HashMap(); + for (World world : worlds) { + moons.put(world.getName(), world.getMoons()); + } + return moons; + } + +} diff --git a/spring-data-neo4j-examples/hello-worlds/src/main/java/org/springframework/data/neo4j/examples/hellograph/WorldRepository.java b/spring-data-neo4j-examples/hello-worlds/src/main/java/org/springframework/data/neo4j/examples/hellograph/WorldRepository.java new file mode 100644 index 000000000..f529c4d67 --- /dev/null +++ b/spring-data-neo4j-examples/hello-worlds/src/main/java/org/springframework/data/neo4j/examples/hellograph/WorldRepository.java @@ -0,0 +1,11 @@ +package org.springframework.data.neo4j.examples.hellograph; + +import org.springframework.data.neo4j.repository.GraphRepository; +import org.springframework.data.neo4j.repository.NamedIndexRepository; + +/** + * @author mh + * @since 01.04.11 + */ +public interface WorldRepository extends MyWorldRepository, GraphRepository, NamedIndexRepository { +} diff --git a/spring-data-neo4j-examples/hello-worlds/src/main/java/org/springframework/data/neo4j/examples/hellograph/WorldRepositoryImpl.java b/spring-data-neo4j-examples/hello-worlds/src/main/java/org/springframework/data/neo4j/examples/hellograph/WorldRepositoryImpl.java new file mode 100644 index 000000000..8ccb106f7 --- /dev/null +++ b/spring-data-neo4j-examples/hello-worlds/src/main/java/org/springframework/data/neo4j/examples/hellograph/WorldRepositoryImpl.java @@ -0,0 +1,73 @@ +package org.springframework.data.neo4j.examples.hellograph; + +import org.neo4j.graphdb.Direction; +import org.neo4j.graphdb.traversal.TraversalDescription; +import org.neo4j.kernel.Traversal; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.Collection; + +import static org.neo4j.graphdb.DynamicRelationshipType.withName; +import static org.springframework.data.neo4j.examples.hellograph.RelationshipTypes.REACHABLE_BY_ROCKET; + +/** + * Spring Data Neo4j backed application context for Worlds. + */ +public class WorldRepositoryImpl implements MyWorldRepository { + + @Autowired private WorldRepository worldRepository; + + @Override + @Transactional + public Collection makeSomeWorlds() { + ArrayList newWorlds = new ArrayList(); + + // solar worlds + newWorlds.add(world("Mercury", 0)); + newWorlds.add(world("Venus", 0)); + World earth = world("Earth", 1); + newWorlds.add(earth); + World mars = world("Mars", 2); + mars.addRocketRouteTo(earth); + newWorlds.add(mars); + newWorlds.add(world("Jupiter", 63)); + newWorlds.add(world("Saturn", 62)); + newWorlds.add(world("Uranus", 27)); + newWorlds.add(world("Neptune", 13)); + + // Norse worlds + newWorlds.add(world("Alfheimr", 0)); + newWorlds.add(world("Midgard", 1)); + newWorlds.add(world("Muspellheim", 2)); + newWorlds.add(world("Asgard", 63)); + newWorlds.add(world("Hel", 62)); + + return newWorlds; + } + + + @Override + @Transactional + public World world(String name, int moons) { + return new World(name, moons).persist(); + } + + @Override + public World findWorldNamed(String name) { + return worldRepository.findByPropertyValue("name", name); + } + + @Override + public Iterable findWorldsWithMoons(int moonCount) { + return worldRepository.findAllByPropertyValue("moon-index", "moons", moonCount); + } + + @Override + public Iterable exploreWorldsBeyond(World homeWorld) { + TraversalDescription traversal = Traversal.description().relationships(withName(REACHABLE_BY_ROCKET), Direction.OUTGOING); + return worldRepository.findAllByTraversal(homeWorld, traversal); + } + +} diff --git a/spring-data-neo4j-examples/hello-worlds/src/main/resources/log4j.properties b/spring-data-neo4j-examples/hello-worlds/src/main/resources/log4j.properties new file mode 100644 index 000000000..beb86feab --- /dev/null +++ b/spring-data-neo4j-examples/hello-worlds/src/main/resources/log4j.properties @@ -0,0 +1,7 @@ +log4j.appender.stdout=org.apache.log4j.ConsoleAppender +log4j.appender.stdout.layout=org.apache.log4j.PatternLayout + +# Print the date in ISO 8601 format +log4j.appender.stdout.layout.ConversionPattern=%d [%t] %-5p %c - %m%n + +log4j.rootLogger=ERROR, stdout diff --git a/spring-data-neo4j-examples/hello-worlds/src/main/resources/spring/helloWorldContext.xml b/spring-data-neo4j-examples/hello-worlds/src/main/resources/spring/helloWorldContext.xml new file mode 100644 index 000000000..74b29e2b5 --- /dev/null +++ b/spring-data-neo4j-examples/hello-worlds/src/main/resources/spring/helloWorldContext.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + diff --git a/spring-data-neo4j-examples/hello-worlds/src/test/java/org/springframework/data/neo4j/examples/hellograph/WorldCounterTest.java b/spring-data-neo4j-examples/hello-worlds/src/test/java/org/springframework/data/neo4j/examples/hellograph/WorldCounterTest.java new file mode 100644 index 000000000..5902abc92 --- /dev/null +++ b/spring-data-neo4j-examples/hello-worlds/src/test/java/org/springframework/data/neo4j/examples/hellograph/WorldCounterTest.java @@ -0,0 +1,45 @@ +package org.springframework.data.neo4j.examples.hellograph; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.neo4j.support.GraphDatabaseContext; +import org.springframework.data.neo4j.support.node.Neo4jHelper; +import org.springframework.test.annotation.Rollback; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.transaction.BeforeTransaction; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Map; + +import static java.util.Arrays.asList; +import static org.junit.Assert.assertEquals; + +/** + * @author mh + * @since 17.02.11 + * Added to check for some aspectj-snapshot build errors. + */ +@ContextConfiguration(locations = "classpath:spring/helloWorldContext.xml") +@RunWith(SpringJUnit4ClassRunner.class) +@Transactional +public class WorldCounterTest { + + @Autowired + private GraphDatabaseContext graphDatabaseContext; + + @Rollback(false) + @BeforeTransaction + public void clearDatabase() + { + Neo4jHelper.cleanDb(graphDatabaseContext); + } + + @Test + public void testCountMoons() throws Exception { + WorldCounter counter = new WorldCounter(); + Map result = counter.countMoons(asList(new World("earth", 1))); + assertEquals("earth has one moon",(Integer)1,result.get("earth")); + } +} diff --git a/spring-data-neo4j-examples/hello-worlds/src/test/java/org/springframework/data/neo4j/examples/hellograph/WorldRepositoryTest.java b/spring-data-neo4j-examples/hello-worlds/src/test/java/org/springframework/data/neo4j/examples/hellograph/WorldRepositoryTest.java new file mode 100644 index 000000000..a12bba0dd --- /dev/null +++ b/spring-data-neo4j-examples/hello-worlds/src/test/java/org/springframework/data/neo4j/examples/hellograph/WorldRepositoryTest.java @@ -0,0 +1,129 @@ +package org.springframework.data.neo4j.examples.hellograph; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.neo4j.core.NodeBacked; +import org.springframework.data.neo4j.support.GraphDatabaseContext; +import org.springframework.data.neo4j.support.node.Neo4jHelper; +import org.springframework.test.annotation.Rollback; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.transaction.BeforeTransaction; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Collection; + +import static junit.framework.Assert.assertEquals; +import static org.hamcrest.CoreMatchers.anyOf; +import static org.hamcrest.core.Is.is; +import static org.junit.Assert.*; +import static org.junit.internal.matchers.StringContains.containsString; + +/** + * Exploratory testing of Spring Data Neo4j using + * the WorldRepositoryImpl. + */ +@ContextConfiguration(locations = "classpath:spring/helloWorldContext.xml") +@RunWith(SpringJUnit4ClassRunner.class) +@Transactional +public class WorldRepositoryTest +{ + + @Autowired + private WorldRepository galaxy; + + @Autowired + private GraphDatabaseContext graphDatabaseContext; + + @Rollback(false) + @BeforeTransaction + public void clearDatabase() + { + Neo4jHelper.cleanDb(graphDatabaseContext); + } + + @Test + public void shouldAllowDirectWorldCreation() + { + assertEquals(0, (long) galaxy.count()); + World myWorld = new World( "mine", 0 ).persist(); + assertEquals(1, (long) galaxy.count()); + Iterable foundWorlds = galaxy.findAll(); + World mine = foundWorlds.iterator().next(); + assertEquals(myWorld.getName(), mine.getName()); + } + + @Test + public void shouldPopulateGalaxyWithWorlds() + { + Iterable worlds = galaxy.makeSomeWorlds(); + assertNotNull( worlds ); + } + + + @Test + public void shouldHaveCorrectNumberOfWorlds() + { + galaxy.makeSomeWorlds(); + assertEquals(13, (long) galaxy.count()); + } + + @Test + public void shouldFindWorldsById() + { + for ( World w : galaxy.makeSomeWorlds() ) + { + assertNotNull(galaxy.findOne(((NodeBacked) w).getNodeId())); + } + } + + @Test + public void shouldFindAllWorlds() + { + Collection madeWorlds = galaxy.makeSomeWorlds(); + Iterable foundWorlds = galaxy.findAll(); + + int countOfFoundWorlds = 0; + for ( World foundWorld : foundWorlds ) + { + assertTrue( madeWorlds.contains( foundWorld ) ); + countOfFoundWorlds++; + } + + assertEquals( madeWorlds.size(), countOfFoundWorlds ); + } + + @Test + public void shouldFindWorldsByName() + { + for ( World w : galaxy.makeSomeWorlds() ) + { + assertNotNull( galaxy.findWorldNamed( w.getName() ) ); + } + } + + @SuppressWarnings("unchecked") + @Test + public void shouldFindWorldsWith1Moon() + { + galaxy.makeSomeWorlds(); + for ( World worldWithOneMoon : galaxy.findWorldsWithMoons( 1 ) ) + { + assertThat( worldWithOneMoon.getName(), is( anyOf( containsString( "Earth" ), containsString( "Midgard" ) ) ) ); + } + } + + @Test + public void shouldReachMarsFromEarth() + { + galaxy.makeSomeWorlds(); + + World earth = galaxy.findWorldNamed( "Earth" ); + World mars = galaxy.findWorldNamed( "Mars" ); + + assertTrue( mars.canBeReachedFrom( earth ) ); + assertTrue( earth.canBeReachedFrom( mars ) ); + } + +} diff --git a/spring-data-neo4j-examples/hello-worlds/src/test/java/org/springframework/data/neo4j/examples/hellograph/WorldTest.java b/spring-data-neo4j-examples/hello-worlds/src/test/java/org/springframework/data/neo4j/examples/hellograph/WorldTest.java new file mode 100644 index 000000000..1de8664cd --- /dev/null +++ b/spring-data-neo4j-examples/hello-worlds/src/test/java/org/springframework/data/neo4j/examples/hellograph/WorldTest.java @@ -0,0 +1,52 @@ +package org.springframework.data.neo4j.examples.hellograph; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.neo4j.examples.hellograph.World; +import org.springframework.data.neo4j.support.GraphDatabaseContext; +import org.springframework.data.neo4j.support.node.Neo4jHelper; +import org.springframework.test.annotation.Rollback; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.transaction.BeforeTransaction; +import org.springframework.transaction.annotation.Transactional; + +import static org.junit.Assert.assertNull; + +/** + * Exploratory unit-tests for the Spring Data Neo4j annotated World entity. + * + * Since the World is a @NodeEntity, the SpringDataGraph must + * be setup before you can even create instances of the POJO. + */ +@ContextConfiguration(locations = "classpath:spring/helloWorldContext.xml") +@RunWith(SpringJUnit4ClassRunner.class) +@Transactional +public class WorldTest +{ + + @Autowired + private GraphDatabaseContext graphDatabaseContext; + + @Rollback(false) + @BeforeTransaction + public void clearDatabase() + { + Neo4jHelper.cleanDb(graphDatabaseContext); + } + + @Test + public void shouldBeSimpleToCreateNewEntities() + { + @SuppressWarnings("unused") + World w = new World(); + } + + @Test + public void shouldHaveNullNameUsingDefaultConstructor() + { + World w = new World(); + assertNull(w.getName()); + } +} diff --git a/spring-data-neo4j-examples/imdb/.gitignore b/spring-data-neo4j-examples/imdb/.gitignore new file mode 100644 index 000000000..7519330a1 --- /dev/null +++ b/spring-data-neo4j-examples/imdb/.gitignore @@ -0,0 +1,5 @@ +/target/ +*.ipr +*.iws +*.iml + diff --git a/spring-data-neo4j-examples/imdb/README.md b/spring-data-neo4j-examples/imdb/README.md new file mode 100644 index 000000000..7bebf8c3a --- /dev/null +++ b/spring-data-neo4j-examples/imdb/README.md @@ -0,0 +1,63 @@ +The IMDB Example Application for Neo4j written with Spring Datastore Graph +========================================================================== + +![Web UI](http://github.com/neo4j-examples/spring-datastore-graph-imdb/raw/master/doc/images/IMDB1.png) + + +This application serves as a boilerplate to illustrate the use of annotations to persist objects in Spring to Neo4j, along the lines of + + + @NodeEntity + public class Actor { + @GraphProperty(index = true) + private String name; + + @RelatedTo(type="ACTS_IN",elementClass = Movie.class) + + private Set movies; + static final String NAME_INDEX = "name"; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Iterable getMovies() { + return movies; + } + + public Role getRole(final Movie inMovie) { + return (Role)getRelationshipTo((Movie)inMovie, Role.class, RelTypes.ACTS_IN.name()); + } + + @Override + public String toString() { + return "Actor '" + this.getName() + "'"; + } + } + +Which produces a graph similar to + +![Graph](http://wiki.neo4j.org/images/5/53/Imdb.screenshot.actor.png) + + + +The documentation of the IMDB Example domain is found at [http://wiki.neo4j.org/content/IMDB_Example] + + +Run build and run the example: + git clone git://github.com/neo4j-examples/spring-datastore-graph-imdb.git + cd spring-datastore-graph-imdb + mvn clean install jetty:run + +browse to [http://localhost:8080/imdb/setup.html](http://localhost:8080/imdb/setup.html), insert the data and wait until it is completed (that may take some seconds). After that, you should be able to surf the data and look for actors and movies. + +Stop the application with + mvn jetty:stop + +If you inspect the graph using Neoclipse, +node-icons are found in +src/test/resources/icons diff --git a/spring-data-neo4j-examples/imdb/doc/images/IMDB1.png b/spring-data-neo4j-examples/imdb/doc/images/IMDB1.png new file mode 100644 index 0000000000000000000000000000000000000000..5ea3ec6473a352b0373ddeea1ade4804b31e5a6f GIT binary patch literal 47742 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 + + 4.0.0 + org.neo4j.examples + imdb + war + 2.0.0-BUILD-SNAPSHOT + imdb + + 3.0.5.RELEASE + 1.6.12.M1 + 1.6.1 + UTF-8 + 2.0.0.BUILD-SNAPSHOT + + + + + 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-public-repository + http://m2.neo4j.org/ + Publicly available Maven 2 repository for Neo4j + + + + + spring-maven-release + Spring Maven Release Repository + http://maven.springframework.org/release + + + spring-maven-milestone + Spring Maven Milestone Repository + http://maven.springframework.org/milestone + + + + + + junit + junit + 4.8.1 + test + + + log4j + log4j + 1.2.16 + + + org.slf4j + slf4j-api + ${slf4j.version} + + + org.slf4j + jcl-over-slf4j + ${slf4j.version} + + + org.slf4j + slf4j-log4j12 + ${slf4j.version} + + + org.aspectj + aspectjrt + ${aspectj.version} + + + org.aspectj + aspectjweaver + ${aspectj.version} + + + javax.servlet + servlet-api + 2.5 + provided + + + net.sf.flexjson + flexjson + 2.0 + + + + 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.data + spring-data-neo4j + ${data-graph.version} + + + javax.validation + validation-api + 1.0.0.GA + + + org.hibernate + hibernate-validator + 4.0.2.GA + + + javax.xml.bind + jaxb-api + + + com.sun.xml.bind + jaxb-impl + + + + + org.apache.tiles + tiles-core + 2.2.1 + + + commons-logging + commons-logging + + + + + org.apache.tiles + tiles-jsp + 2.2.1 + + + org.springframework + spring-web + ${spring.version} + + + commons-logging + commons-logging + + + + + org.springframework + spring-webmvc + ${spring.version} + + + commons-logging + commons-logging + + + + + org.springframework.webflow + spring-js + 2.1.1.RELEASE + + + org.springframework + spring-beans + + + org.springframework + spring-context + + + org.springframework + spring-core + + + org.springframework + spring-context-support + + + commons-logging + commons-logging + + + + + commons-digester + commons-digester + 2.0 + + + commons-logging + commons-logging + + + + + commons-fileupload + commons-fileupload + 1.2.1 + + + commons-logging + commons-logging + + + + + javax.servlet + jstl + 1.2 + + + javax.el + el-api + 1.0 + provided + + + joda-time + joda-time + 1.6 + + + + + + org.apache.maven.plugins + maven-war-plugin + 2.1-beta-1 + + + + org.apache.maven.plugins + maven-compiler-plugin + 2.1 + + 1.6 + 1.6 + + + + org.apache.maven.plugins + maven-resources-plugin + 2.4.2 + + UTF-8 + + + + org.apache.maven.plugins + maven-surefire-plugin + 2.5 + + + **/*_Roo_* + + + + + org.apache.maven.plugins + maven-assembly-plugin + 2.2-beta-5 + + + jar-with-dependencies + + + + + org.apache.maven.plugins + maven-deploy-plugin + 2.5 + + + + org.apache.maven.plugins + maven-eclipse-plugin + 2.7 + + + true + false + 2.0 + + + org.eclipse.ajdt.core.ajbuilder + + org.springframework.aspects + + + + org.springframework.ide.eclipse.core.springbuilder + + + + org.eclipse.ajdt.ui.ajnature + com.springsource.sts.roo.core.nature + org.springframework.ide.eclipse.core.springnature + + + + + org.apache.maven.plugins + maven-idea-plugin + 2.2 + + true + true + + + + org.codehaus.mojo + tomcat-maven-plugin + 1.0 + + + org.mortbay.jetty + jetty-maven-plugin + 7.1.2.v20100523 + + + /${project.name} + + + + + org.apache.maven.plugins + maven-dependency-plugin + + + copy-dependencies + package + + copy-dependencies + + + ${project.build.directory}/deps + false + false + true + + + + + + org.codehaus.mojo + aspectj-maven-plugin + 1.0 + + true + + + org.springframework + spring-aspects + + + org.springframework.data + spring-data-neo4j + + + 1.6 + 1.6 + + + + + compile + test-compile + + + + + + org.aspectj + aspectjrt + ${aspectj.version} + + + org.aspectj + aspectjtools + ${aspectj.version} + + + + + + diff --git a/spring-data-neo4j-examples/imdb/src/main/assembly/imdb-src.xml b/spring-data-neo4j-examples/imdb/src/main/assembly/imdb-src.xml new file mode 100644 index 000000000..07a2e0379 --- /dev/null +++ b/spring-data-neo4j-examples/imdb/src/main/assembly/imdb-src.xml @@ -0,0 +1,26 @@ + + src + + tar.gz + zip + + + + + README* + LICENSE* + NOTICE* + pom.xml + + true + + + src + true + + **/main/model/** + **/main/assembly/** + + + + \ No newline at end of file diff --git a/spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/domain/Actor.java b/spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/domain/Actor.java new file mode 100644 index 000000000..f9b3569ac --- /dev/null +++ b/spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/domain/Actor.java @@ -0,0 +1,47 @@ +package org.neo4j.examples.imdb.domain; + +import org.springframework.data.neo4j.annotation.Indexed; +import org.springframework.data.neo4j.annotation.NodeEntity; +import org.springframework.data.neo4j.annotation.RelatedTo; + +import java.util.Set; + +// START SNIPPET: ActorClass +@NodeEntity +public class Actor { + @Indexed + private String name; + + @RelatedTo(type = "ACTS_IN", elementClass = Movie.class) + private Set movies; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Set getMovies() { + return movies; + } + + public Role getRole(final Movie inMovie) { + return getRelationshipTo(inMovie, Role.class, RelTypes.ACTS_IN.name()); + } + + @Override + public String toString() { + return "Actor '" + this.getName() + "'"; + } + + public void actsIn(Movie movie, final String role) { + relateTo(movie, Role.class, RelTypes.ACTS_IN.name()).play(role); + } + + public int getMovieCount() { + return getMovies().size(); + } +} +// END SNIPPET: ActorClass diff --git a/spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/domain/ActorRepository.java b/spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/domain/ActorRepository.java new file mode 100644 index 000000000..fc9317c49 --- /dev/null +++ b/spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/domain/ActorRepository.java @@ -0,0 +1,11 @@ +package org.neo4j.examples.imdb.domain; + + +import org.springframework.data.neo4j.repository.GraphRepository; + +/** + * @author mh + * @since 01.04.11 + */ +public interface ActorRepository extends GraphRepository { +} diff --git a/spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/domain/ImdbSearchEngine.java b/spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/domain/ImdbSearchEngine.java new file mode 100644 index 000000000..60c3e48c7 --- /dev/null +++ b/spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/domain/ImdbSearchEngine.java @@ -0,0 +1,11 @@ +package org.neo4j.examples.imdb.domain; + +public interface ImdbSearchEngine { + void indexActor(Actor actor); + + void indexMovie(Movie movie); + + Actor searchActor(String name); + + Movie searchMovie(String title); +} diff --git a/spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/domain/ImdbSearchEngineImpl.java b/spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/domain/ImdbSearchEngineImpl.java new file mode 100644 index 000000000..7fce7e5c3 --- /dev/null +++ b/spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/domain/ImdbSearchEngineImpl.java @@ -0,0 +1,98 @@ +package org.neo4j.examples.imdb.domain; + +import org.springframework.beans.factory.annotation.Autowired; + +import java.util.*; + +/** + * example-implementation of an in-graph index using splitted names and titles and Lookup - Entities + * representing them to navigate to the "indexed" entities via their relationships. + * Lookup[word] - name.part -*> Actor | Lookup[word] - title.part -*> Movie + */ +public class ImdbSearchEngineImpl implements ImdbSearchEngine { + + @Autowired + private LookupRepository lookupRepository; + + public void indexActor(Actor actor) { + for (Lookup lookup : obtainLookups(actor.getName())) { + lookup.addActor(actor); + } + } + + public void indexMovie(Movie movie) { + String name = movie.getTitle(); + for (Lookup lookup : obtainLookups(name)) { + lookup.addMovie(movie); + } + } + + public Actor searchActor(String name) { + Set result = null; + for (Lookup lookup : findLookups(name)) { + result = merge(result, lookup.getActors()); + } + return firstOrMax(result, new Comparator() { + public int compare(Actor actor1, Actor actor2) { + return actor1.getMovieCount() - actor2.getMovieCount(); + } + }); + } + + + public Movie searchMovie(String title) { + Set result = null; + for (Lookup lookup : findLookups(title)) { + result = merge(result, lookup.getMovies()); + } + return firstOrMax(result, new Comparator(){ + public int compare(Movie movie1, Movie movie2) { + return movie1.getActorsCount() - movie2.getActorsCount(); + } + }); + } + + private List obtainLookups(String name) { + List result = new ArrayList(); + for (String part : splitSearchString(name)) { + Lookup lookup = findLookup(part); + if (lookup == null) { + result.add((Lookup) new Lookup(part).persist()); + } else { + result.add(lookup); + } + } + return result; + } + + private T firstOrMax(Set result, Comparator comparator) { + if (result == null || result.isEmpty()) return null; + return Collections.max(result, comparator); + } + + private Set merge(Set result, Collection values) { + if (result == null) { + return new HashSet(values); + } + + result.retainAll(values); + return result; + } + + private List findLookups(String name) { + List result = new ArrayList(); + for (String part : splitSearchString(name)) { + Lookup lookup = findLookup(part); + if (lookup != null) result.add(lookup); + } + return result; + } + + private Lookup findLookup(String part) { + return lookupRepository.findByPropertyValue("word", part); + } + + private String[] splitSearchString(final String value) { + return value.toLowerCase(Locale.ENGLISH).split("[^\\w]+"); + } +} diff --git a/spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/domain/ImdbService.java b/spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/domain/ImdbService.java new file mode 100644 index 000000000..59f084b11 --- /dev/null +++ b/spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/domain/ImdbService.java @@ -0,0 +1,58 @@ +package org.neo4j.examples.imdb.domain; + +import java.util.List; + +public interface ImdbService { + /** + * Store a new actor in the graph and add the name to the index. + * + * @param name + * @return the new actor + */ + Actor createActor(String name); + + /** + * Store a new movie and add the title to the index. + * + * @param title title of the movie + * @param year year of release + * @return the new movie + */ + Movie createMovie(String title, int year); + + /** + * Returns the actor with the given name or null + * if not found. + * + * @param name name of actor + * @return actor or null if not found + */ + Actor getActor(String name); + + /** + * Return the movie with given title or null if + * not found. + * + * @param title movie title + * @return movie or null if not found + */ + Movie getMovie(String title); + + Movie getExactMovie(String title); + + /** + * Returns a list with first element {@link Actor} followed by {@link Movie} + * ending with an {@link Actor}. The list is one of the shortest paths + * between the actor and actor Kevin Bacon. + * + * @param actor name of actor to find shortest path to Kevin Bacon + * @return one of the shortest paths to Kevin Bacon + */ + List getBaconPath(Actor actor); + + /** + * Add a relationship from some node to the reference node. + * Will make it easy and fast to retrieve this node. + */ + void setupReferenceRelationship(); +} diff --git a/spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/domain/ImdbServiceImpl.java b/spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/domain/ImdbServiceImpl.java new file mode 100644 index 000000000..3a6283864 --- /dev/null +++ b/spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/domain/ImdbServiceImpl.java @@ -0,0 +1,91 @@ +package org.neo4j.examples.imdb.domain; + +import org.neo4j.graphalgo.GraphAlgoFactory; +import org.neo4j.graphdb.Node; +import org.neo4j.graphdb.Path; +import org.neo4j.kernel.StandardExpander; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.neo4j.support.GraphDatabaseContext; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Collections; +import java.util.LinkedList; +import java.util.List; +import java.util.NoSuchElementException; + +class ImdbServiceImpl implements ImdbService { + @Autowired + private GraphDatabaseContext graphDatabaseContext; + @Autowired + private ImdbSearchEngine searchEngine; + @Autowired + private MovieRepository movieRepository; + @Autowired + private ActorRepository actorRepository; + + public Actor createActor(final String name) { + final Actor actor = new Actor().persist(); + actor.setName(name); + searchEngine.indexActor(actor); + return actor; + } + + public Movie createMovie(final String title, final int year) { + final Movie movie = new Movie().persist(); + movie.setTitle(title); + movie.setYear(year); + searchEngine.indexMovie(movie); + return movie; + } + + public Actor getActor(final String name) { + Actor actor = actorRepository.findByPropertyValue("name", name); + if (actor != null) return actor; + return searchEngine.searchActor(name); + } + + public Movie getMovie(final String title) { + Movie movie = getExactMovie(title); + if (movie != null) return movie; + + return searchEngine.searchMovie(title); + } + + public Movie getExactMovie(final String title) { + return movieRepository.findByPropertyValue("title", title); + } + + + @Transactional + public void setupReferenceRelationship() { + Node referenceNode = graphDatabaseContext.getReferenceNode(); + Actor bacon = actorRepository.findByPropertyValue("name", "Bacon, Kevin"); + + if (bacon == null) throw new NoSuchElementException("Unable to find Kevin Bacon actor"); + + referenceNode.createRelationshipTo(bacon.getPersistentState(), RelTypes.IMDB); + } + + public List getBaconPath(final Actor actor) { + if (actor == null) throw new IllegalArgumentException("Null actor"); + + Actor bacon = actorRepository.findByPropertyValue("name", "Bacon, Kevin"); + + Path path = GraphAlgoFactory.shortestPath(StandardExpander.DEFAULT.add(RelTypes.ACTS_IN), 10).findSinglePath(bacon.getPersistentState(), actor.getPersistentState()); + if (path==null) return Collections.emptyList(); + return convertNodesToActorsAndMovies(path); + } + + private List convertNodesToActorsAndMovies(final Path list) { + final List actorAndMovieList = new LinkedList(); + int mod = 0; + for (Node node : list.nodes()) { + if (mod++ % 2 == 0) { + actorAndMovieList.add(graphDatabaseContext.createEntityFromState(node, Actor.class)); + } else { + actorAndMovieList.add(graphDatabaseContext.createEntityFromState(node, Movie.class)); + } + } + return actorAndMovieList; + } +} \ No newline at end of file diff --git a/spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/domain/Lookup.java b/spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/domain/Lookup.java new file mode 100644 index 000000000..1472ea679 --- /dev/null +++ b/spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/domain/Lookup.java @@ -0,0 +1,67 @@ +package org.neo4j.examples.imdb.domain; + +import org.springframework.data.neo4j.annotation.Indexed; +import org.springframework.data.neo4j.annotation.NodeEntity; +import org.springframework.data.neo4j.annotation.RelatedTo; + +import java.util.Set; + +/** + * @author mh + * @since 16.03.11 + */ +@NodeEntity +public class Lookup { + private + @Indexed + String word; + private int count; + + @RelatedTo(elementClass = Movie.class, type = "title.part") + private Set movies; + @RelatedTo(elementClass = Actor.class, type = "name.part") + private Set actors; + + public Lookup(String word) { + this.word = word; + } + + public Lookup() { + } + + public void addActor(Actor actor) { + relateTo(actor, "name.part"); + count++; + } + + public void addMovie(Movie movie) { + this.movies.add(movie); + count++; + } + + public String getWord() { + return word; + } + + public int getCount() { + return count; + } + + public Set getMovies() { + return movies; + } + + public Set getActors() { + return actors; + } + + public Movie getMovie() { + Set allMovies = getMovies(); + return allMovies != null && !allMovies.isEmpty() ? allMovies.iterator().next() : null; + } + + public Actor getActor() { + Set allActors = getActors(); + return allActors != null && !allActors.isEmpty() ? allActors.iterator().next() : null; + } +} diff --git a/spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/domain/LookupRepository.java b/spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/domain/LookupRepository.java new file mode 100644 index 000000000..beebc5a3f --- /dev/null +++ b/spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/domain/LookupRepository.java @@ -0,0 +1,11 @@ +package org.neo4j.examples.imdb.domain; + + +import org.springframework.data.neo4j.repository.GraphRepository; + +/** + * @author mh + * @since 01.04.11 + */ +public interface LookupRepository extends GraphRepository { +} diff --git a/spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/domain/Movie.java b/spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/domain/Movie.java new file mode 100644 index 000000000..bbf554cd6 --- /dev/null +++ b/spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/domain/Movie.java @@ -0,0 +1,49 @@ +package org.neo4j.examples.imdb.domain; + +import org.neo4j.graphdb.Direction; +import org.springframework.data.neo4j.annotation.Indexed; +import org.springframework.data.neo4j.annotation.NodeEntity; +import org.springframework.data.neo4j.annotation.RelatedTo; + +import java.util.Set; + +// START SNIPPET: MovieClass +@NodeEntity +public class Movie { + @Indexed + String title; + int year; + + @RelatedTo(type = "ACTS_IN", elementClass = Actor.class, direction = Direction.INCOMING) + Set actors; + + public Set getActors() { + return actors; + } + + @Override + public String toString() { + return String.format("%s (%d)", getTitle(), getYear()); + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public int getYear() { + return year; + } + + public void setYear(int year) { + this.year = year; + } + + int getActorsCount() { + return getActors().size(); + } +} +// END SNIPPET: MovieClass diff --git a/spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/domain/MovieRepository.java b/spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/domain/MovieRepository.java new file mode 100644 index 000000000..4668650b6 --- /dev/null +++ b/spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/domain/MovieRepository.java @@ -0,0 +1,10 @@ +package org.neo4j.examples.imdb.domain; + +import org.springframework.data.neo4j.repository.GraphRepository; + +/** + * @author mh + * @since 01.04.11 + */ +public interface MovieRepository extends GraphRepository { +} diff --git a/spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/domain/RelTypes.java b/spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/domain/RelTypes.java new file mode 100644 index 000000000..fa1acb060 --- /dev/null +++ b/spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/domain/RelTypes.java @@ -0,0 +1,7 @@ +package org.neo4j.examples.imdb.domain; + +import org.neo4j.graphdb.RelationshipType; + +public enum RelTypes implements RelationshipType { + ACTS_IN, IMDB +} diff --git a/spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/domain/Role.java b/spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/domain/Role.java new file mode 100644 index 000000000..cc820588d --- /dev/null +++ b/spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/domain/Role.java @@ -0,0 +1,36 @@ +package org.neo4j.examples.imdb.domain; + +import org.springframework.data.neo4j.annotation.EndNode; +import org.springframework.data.neo4j.annotation.RelationshipEntity; +import org.springframework.data.neo4j.annotation.StartNode; + +@RelationshipEntity +public class Role { + String role; + @StartNode + Actor actor; + @EndNode + Movie movie; + + @Override + public String toString() { + return String.format("%s-[%s]->%s", this.getActor(), role, this.getMovie()); + } + + public Actor getActor() { + return actor; + } + + public Movie getMovie() { + return movie; + } + + public String getName() { + return role; + } + + public Role play(String name) { + this.role = name; + return this; + } +} diff --git a/spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/parser/ActorData.java b/spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/parser/ActorData.java new file mode 100644 index 000000000..50be67085 --- /dev/null +++ b/spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/parser/ActorData.java @@ -0,0 +1,25 @@ +package org.neo4j.examples.imdb.parser; + +public class ActorData { + private final String name; + private final RoleData[] movieRoles; + + /** + * Create container for actor data. + * + * @param name name of actor + * @param movieRoles movie roles of actor + */ + ActorData(final String name, final RoleData[] movieRoles) { + this.movieRoles = movieRoles; + this.name = name; + } + + public String getName() { + return name; + } + + public RoleData[] getMovieRoles() { + return movieRoles; + } +} diff --git a/spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/parser/ImdbParser.java b/spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/parser/ImdbParser.java new file mode 100644 index 000000000..76c06e5d9 --- /dev/null +++ b/spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/parser/ImdbParser.java @@ -0,0 +1,223 @@ +package org.neo4j.examples.imdb.parser; + +import org.springframework.core.io.ClassPathResource; + +import java.io.*; +import java.util.ArrayList; +import java.util.LinkedList; +import java.util.List; +import java.util.zip.GZIPInputStream; +import java.util.zip.ZipInputStream; + +/** + * A ImdbParser can parse the movie and actor/actress lists from + * the imdb text data (http://www.imdb.com/interfaces). It uses an + * {@link ImdbReader} forwarding the parsed information. + */ +public class ImdbParser { + private static final String MOVIES_MARKER = "MOVIES LIST"; + private static final int MOVIES_SKIPS = 2; + private static final String ACTRESSES_MARKER = "THE ACTRESSES LIST"; + private static final int ACTRESS_SKIPS = 4; + private static final String ACTOR_MARKER = "THE ACTORS LIST"; + private static final int ACTOR_SKIPS = 4; + private static final int BUFFER_SIZE = 200; + private final ImdbReader reader; + + /** + * Create a new Imdb parser. + * + * @param reader reader this parser will use to forward events to + */ + public ImdbParser(final ImdbReader reader) { + if (reader == null) { + throw new IllegalArgumentException("Null ImdbReader"); + } + this.reader = reader; + } + + /** + * Parsers a tab-separated movie list file, each line containing a movie + * title and the year the movie was released. The file can be .gz or .zip + * compressed, and must then have the corresponding file extension. + * + * @param file name of movie list file + * @throws IOException if unable to open the movie list file + */ + public String parseMovies(final String file) throws IOException { + final List buffer = new LinkedList(); + if (file == null) { + throw new IllegalArgumentException("Null movie file"); + } + BufferedReader fileReader = getFileReader(file, MOVIES_MARKER, + MOVIES_SKIPS); + String line = fileReader.readLine(); + int movieCount = 0; + while (line != null) { + // get rid of blank lines and TV shows + if ("".equals(line) || line.indexOf("(TV)") != -1) { + line = fileReader.readLine(); + continue; + } + final int yearSep = line.indexOf('\t'); + if (yearSep > 0) { + final String title = line.substring(0, yearSep).trim(); + String yearString = line.substring(yearSep).trim(); + if (yearString.length() > 4) { + yearString = yearString.substring(0, 4); + } + if (yearString.length() == 0 || yearString.charAt(0) == '?' + || title.contains("{") || title.startsWith("\"")) { + line = fileReader.readLine(); + continue; + } + final int year = Integer.parseInt(yearString); + buffer.add(new MovieData(title, year)); + movieCount++; + if (movieCount % BUFFER_SIZE == 0) { + reader.newMovies(buffer); + buffer.clear(); + } + } + line = fileReader.readLine(); + } + reader.newMovies(buffer); + return (movieCount + " movies parsed and injected."); + } + + /** + * Parsers a tab-separated actors list file. A line begins with actor name + * then followed by a tab and a movie title the actor acted in. Additional + * movies the current actor acted in are found on the following line that + * starts with a tab followed by the movie title. + * + * @param actorFile name of actor list file + * @param actressFile TODO + * @throws IOException if unable to open actor list file + */ + public String parseActors(final String actorFile, final String actressFile) + throws IOException { + if (actorFile == null) { + throw new IllegalArgumentException("Null actor file"); + } + if (actressFile == null) { + throw new IllegalArgumentException("Null actress file"); + } + String result = ""; + BufferedReader fileReader = getFileReader(actorFile, ACTOR_MARKER, + ACTOR_SKIPS); + result += "Actors: " + parseActorItems(fileReader) + "\n"; + fileReader.close(); + fileReader = getFileReader(actressFile, ACTRESSES_MARKER, + ACTRESS_SKIPS); + result += "Actresses: " + parseActorItems(fileReader); + return result; + } + + private String parseActorItems(BufferedReader fileReader) + throws IOException { + String line = fileReader.readLine(); + String currentActor = null; + final List buffer = new LinkedList(); + final List movies = new ArrayList(); + int movieCount = 0; + int actorCount = 0; + while (line != null) { + // get rid of blank lines + if ("".equals(line)) { + line = fileReader.readLine(); + continue; + } + int actorSep = line.indexOf('\t'); + if (actorSep >= 0) { + String actor = line.substring(0, actorSep).trim(); + if (!"".equals(actor)) { + if (movies.size() > 0) { + buffer.add(new ActorData(currentActor, movies + .toArray(new RoleData[movies.size()]))); + actorCount++; + movies.clear(); + } + currentActor = actor; + } + String title = line.substring(actorSep).trim(); + if (title.length() == 0 || title.contains("{") + || title.startsWith("\"") || title.contains("????")) { + line = fileReader.readLine(); + continue; + } + int characterStart = title.indexOf('['); + int characterEnd = title.indexOf(']'); + String character = null; + if (characterStart > 0 && characterEnd > characterStart) { + character = title.substring(characterStart + 1, + characterEnd); + } + int creditStart = title.indexOf('<'); + // int creditEnd = title.indexOf( '>' ); + // String credit = null; + // if ( creditStart > 0 && creditEnd > creditStart ) + // { + // credit = title.substring( creditStart + 1, creditEnd ); + // } + if (characterStart > 0) { + title = title.substring(0, characterStart).trim(); + } else if (creditStart > 0) { + title = title.substring(0, creditStart).trim(); + } + int spaces = title.indexOf(" "); + if (spaces > 0) { + if (title.charAt(spaces - 1) == ')' + && title.charAt(spaces + 2) == '(') { + title = title.substring(0, spaces).trim(); + } + } + movies.add(new RoleData(title, character)); + movieCount++; + if (movieCount % BUFFER_SIZE == 0) { + reader.newActors(buffer); + buffer.clear(); + } + } + line = fileReader.readLine(); + } + reader.newActors(buffer); + return (actorCount + " added including " + movieCount + " characters parsed and injected."); + } + + /** + * Get file reader that corresponds to file extension. + * + * @param file the file name + * @param pattern TODO + * @param skipLines TODO + * @return a file reader that uncompresses data if needed + * @throws IOException + * @throws FileNotFoundException + */ + private BufferedReader getFileReader(final String file, String pattern, + int skipLines) throws IOException, FileNotFoundException { + BufferedReader fileReader; + // support compressed files + if (file.endsWith(".gz")) { + fileReader = new BufferedReader(new InputStreamReader( + new GZIPInputStream(new ClassPathResource(file).getInputStream()))); + } else if (file.endsWith(".zip")) { + fileReader = new BufferedReader(new InputStreamReader( + new ZipInputStream(new ClassPathResource(file).getInputStream()))); + } else { + fileReader = new BufferedReader(new FileReader(file)); + } + + String line = ""; + while (!pattern.equals(line)) { + line = fileReader.readLine(); + } + for (int i = 0; i < skipLines; i++) { + line = fileReader.readLine(); + } + + return fileReader; + } + +} diff --git a/spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/parser/ImdbReader.java b/spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/parser/ImdbReader.java new file mode 100644 index 000000000..04ec5f3ac --- /dev/null +++ b/spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/parser/ImdbReader.java @@ -0,0 +1,26 @@ +package org.neo4j.examples.imdb.parser; + +import java.util.List; + +/** + * Reads events from the {@link ImdbParser}. + */ +public interface ImdbReader { + /** + * Creates new movies with specified title and + * year from a {@link MovieData} list. + * Every movie will be indexed. + * + * @param movieList movies to create and index + */ + void newMovies(List movieList); + + /** + * Creates new actors specifying what movies the actors acted in + * from a {@link ActorData} list. + * Every actor will be indexed. + * + * @param actorList actors to create and index + */ + void newActors(List actorList); +} diff --git a/spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/parser/ImdbReaderImpl.java b/spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/parser/ImdbReaderImpl.java new file mode 100644 index 000000000..41b926751 --- /dev/null +++ b/spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/parser/ImdbReaderImpl.java @@ -0,0 +1,41 @@ +package org.neo4j.examples.imdb.parser; + +import org.neo4j.examples.imdb.domain.*; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +class ImdbReaderImpl implements ImdbReader { + @Autowired + private ImdbService imdbService; + + @Transactional + public void newActors(final List actorList) { + for (ActorData actorData : actorList) { + newActor(actorData.getName(), actorData.getMovieRoles()); + } + } + + @Transactional + public void newMovies(final List movieList) { + for (MovieData movieData : movieList) { + newMovie(movieData.getTitle(), movieData.getYear()); + } + } + + private void newMovie(final String title, final int year) { + imdbService.createMovie(title, year); + } + + private void newActor(final String name, final RoleData[] movieRoles) { + final Actor actor = imdbService.createActor(name); + for (RoleData movieRole : movieRoles) { + final Movie movie = imdbService.getExactMovie(movieRole.getTitle()); + if (movie != null) { + actor.actsIn(movie, movieRole.getRole()); + } + } + } + +} diff --git a/spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/parser/MovieData.java b/spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/parser/MovieData.java new file mode 100644 index 000000000..d388ffe47 --- /dev/null +++ b/spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/parser/MovieData.java @@ -0,0 +1,25 @@ +package org.neo4j.examples.imdb.parser; + +public class MovieData { + private final String title; + private final int year; + + /** + * Create container for movie data. + * + * @param title title of movie + * @param year release year of movie + */ + MovieData(final String title, final int year) { + this.title = title; + this.year = year; + } + + public String getTitle() { + return title; + } + + public int getYear() { + return year; + } +} diff --git a/spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/parser/RoleData.java b/spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/parser/RoleData.java new file mode 100644 index 000000000..51317da96 --- /dev/null +++ b/spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/parser/RoleData.java @@ -0,0 +1,33 @@ +package org.neo4j.examples.imdb.parser; + +/** + * Holds information about what role an actor has in a movie + */ +public class RoleData { + private final String title; + private final String role; + + RoleData(final String title, final String role) { + this.title = title; + this.role = role; + } + + /** + * Returns the title of the movie, never null. + * + * @return title of the movie + */ + public String getTitle() { + return this.title; + } + + /** + * Returns the role the actor had in the movie, may be null + * if no information is available. + * + * @return actor role or null if information not avilable + */ + public String getRole() { + return this.role; + } +} diff --git a/spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/web/ActorFindControllerDelegate.java b/spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/web/ActorFindControllerDelegate.java new file mode 100644 index 000000000..2edb297f7 --- /dev/null +++ b/spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/web/ActorFindControllerDelegate.java @@ -0,0 +1,89 @@ +package org.neo4j.examples.imdb.web; + +import org.neo4j.examples.imdb.domain.Actor; +import org.neo4j.examples.imdb.domain.ImdbService; +import org.neo4j.examples.imdb.domain.Movie; +import org.neo4j.examples.imdb.domain.Role; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.transaction.annotation.Transactional; + +import javax.servlet.ServletException; +import java.util.*; + +public class ActorFindControllerDelegate implements FindControllerDelegate { + @Autowired + private ImdbService imdbService; + + public String getFieldName() { + return "name"; + } + + @Transactional + public void getModel(final Object command, final Map model) + throws ServletException { + final String name = ((ActorForm) command).getName(); + final Actor actor = imdbService.getActor(name); + populateModel(model, actor); + } + + private void populateModel(final Map model, + final Actor actor) { + if (actor == null) { + model.put("actorName", "No actor found"); + model.put("kevinBaconNumber", ""); + model.put("movieTitles", Collections.emptyList()); + } else { + model.put("actorName", actor.getName()); + final List baconPathList = imdbService.getBaconPath(actor); + model.put("kevinBaconNumber", baconPathList.size() / 2); + final Collection movieInfo = new TreeSet(); + for (Movie movie : actor.getMovies()) { + movieInfo.add(new MovieInfo(movie, actor.getRole(movie))); + } + model.put("movieInfo", movieInfo); + final List baconPath = new LinkedList(); + for (Object actorOrMovie : baconPathList) { + if (actorOrMovie instanceof Actor) { + baconPath.add(((Actor) actorOrMovie).getName()); + } else if (actorOrMovie instanceof Movie) { + baconPath.add(((Movie) actorOrMovie).getTitle()); + } + } + model.put("baconPath", baconPath); + } + } + + public static final class MovieInfo implements Comparable { + private String title; + private String role; + + MovieInfo(final Movie movie, final Role role) { + setTitle(movie.getTitle()); + if (role == null || role.getName() == null) { + setRole("(unknown)"); + } else { + setRole(role.getName()); + } + } + + public final void setTitle(final String title) { + this.title = title; + } + + public String getTitle() { + return title; + } + + public final void setRole(final String role) { + this.role = role; + } + + public String getRole() { + return role; + } + + public int compareTo(final MovieInfo otherMovieInfo) { + return getTitle().compareTo(otherMovieInfo.getTitle()); + } + } +} diff --git a/spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/web/ActorForm.java b/spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/web/ActorForm.java new file mode 100644 index 000000000..b4fcc989d --- /dev/null +++ b/spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/web/ActorForm.java @@ -0,0 +1,13 @@ +package org.neo4j.examples.imdb.web; + +public class ActorForm { + private String name; + + public void setName(final String name) { + this.name = name; + } + + public String getName() { + return this.name; + } +} diff --git a/spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/web/ActorInfo.java b/spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/web/ActorInfo.java new file mode 100644 index 000000000..69cdd1b53 --- /dev/null +++ b/spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/web/ActorInfo.java @@ -0,0 +1,42 @@ +package org.neo4j.examples.imdb.web; + +import org.neo4j.examples.imdb.domain.Actor; +import org.neo4j.examples.imdb.domain.Role; + +/** +* @author mh +* @since 01.04.11 +*/ +public final class ActorInfo implements Comparable { + private String name; + private String role; + + public ActorInfo(final Actor actor, final Role role) { + setName(actor.getName()); + if (role == null || role.getName() == null) { + setRole("(unknown)"); + } else { + setRole(role.getName()); + } + } + + public void setName(final String name) { + this.name = name; + } + + public String getName() { + return name; + } + + public void setRole(final String role) { + this.role = role; + } + + public String getRole() { + return role; + } + + public int compareTo(ActorInfo otherActorInfo) { + return getName().compareTo(otherActorInfo.getName()); + } +} diff --git a/spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/web/FindController.java b/spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/web/FindController.java new file mode 100644 index 000000000..2cdcc235c --- /dev/null +++ b/spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/web/FindController.java @@ -0,0 +1,31 @@ +package org.neo4j.examples.imdb.web; + +import org.springframework.web.servlet.ModelAndView; +import org.springframework.web.servlet.mvc.SimpleFormController; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import java.util.HashMap; +import java.util.Map; + +public class FindController extends SimpleFormController { + private final FindControllerDelegate delegate; + + public FindController(final FindControllerDelegate delegate) { + super(); + this.delegate = delegate; + } + + @Override + protected ModelAndView onSubmit(final Object command) throws ServletException { + final Map model = new HashMap(); + delegate.getModel(command, model); + return new ModelAndView(getSuccessView(), "model", model); + } + + @Override + protected boolean isFormSubmission(final HttpServletRequest request) { + final String field = request.getParameter(delegate.getFieldName()); + return field != null && field.trim().length() > 0; + } +} diff --git a/spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/web/FindControllerDelegate.java b/spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/web/FindControllerDelegate.java new file mode 100644 index 000000000..ca126b39c --- /dev/null +++ b/spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/web/FindControllerDelegate.java @@ -0,0 +1,10 @@ +package org.neo4j.examples.imdb.web; + +import javax.servlet.ServletException; +import java.util.Map; + +public interface FindControllerDelegate { + void getModel(Object command, Map model) throws ServletException; + + String getFieldName(); +} \ No newline at end of file diff --git a/spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/web/ImdbSetupControllerDelegate.java b/spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/web/ImdbSetupControllerDelegate.java new file mode 100644 index 000000000..ee4fa5bdc --- /dev/null +++ b/spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/web/ImdbSetupControllerDelegate.java @@ -0,0 +1,33 @@ +package org.neo4j.examples.imdb.web; + +import org.neo4j.examples.imdb.domain.ImdbService; +import org.neo4j.examples.imdb.parser.ImdbParser; +import org.neo4j.examples.imdb.parser.ImdbReader; +import org.springframework.beans.factory.annotation.Autowired; + +import javax.servlet.ServletException; +import java.io.IOException; +import java.util.Map; + +public class ImdbSetupControllerDelegate implements SetupControllerDelegate { + private static final String IMDB_DATADIR = "data/"; + @Autowired + private ImdbReader imdbReader; + @Autowired + private ImdbService imdbService; + + public void getModel(final Object command, final Map model) + throws ServletException { + + final ImdbParser parser = new ImdbParser(imdbReader); + StringBuffer message = new StringBuffer(200); + try { + message.append(parser.parseMovies(IMDB_DATADIR + "movies.list.gz")).append('\n'); + message.append(parser.parseActors(IMDB_DATADIR + "actors.list.gz", IMDB_DATADIR + "actresses.list.gz")).append('\n'); + imdbService.setupReferenceRelationship(); + } catch (IOException e) { + message.append("Something went wrong during the setup process:\n").append(e.getMessage()); + } + model.put("setupMessage", message.toString()); + } +} diff --git a/spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/web/MovieFindControllerDelegate.java b/spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/web/MovieFindControllerDelegate.java new file mode 100644 index 000000000..e1dfc4fa7 --- /dev/null +++ b/spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/web/MovieFindControllerDelegate.java @@ -0,0 +1,80 @@ +package org.neo4j.examples.imdb.web; + +import org.neo4j.examples.imdb.domain.Actor; +import org.neo4j.examples.imdb.domain.ImdbService; +import org.neo4j.examples.imdb.domain.Movie; +import org.neo4j.examples.imdb.domain.Role; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.transaction.annotation.Transactional; + +import javax.servlet.ServletException; +import java.util.Collection; +import java.util.Collections; +import java.util.Map; +import java.util.TreeSet; + +public class MovieFindControllerDelegate implements FindControllerDelegate { + @Autowired + private ImdbService imdbService; + + public String getFieldName() { + return "title"; + } + + @Transactional + public void getModel(final Object command, final Map model) + throws ServletException { + final String title = ((MovieForm) command).getTitle(); + final Movie movie = imdbService.getMovie(title); + populateModel(model, movie); + } + + private void populateModel(final Map model, + final Movie movie) { + if (movie == null) { + model.put("movieTitle", "No movie found"); + model.put("actorNames", Collections.emptyList()); + } else { + model.put("movieTitle", movie.getTitle()); + final Collection actorInfo = new TreeSet(); + for (Actor actor : movie.getActors()) { + actorInfo.add(new ActorInfo(actor, actor.getRole(movie))); + } + model.put("actorInfo", actorInfo); + } + } + + public static final class ActorInfo implements Comparable { + private String name; + private String role; + + public ActorInfo(final Actor actor, final Role role) { + setName(actor.getName()); + if (role == null || role.getName() == null) { + setRole("(unknown)"); + } else { + setRole(role.getName()); + } + } + + public void setName(final String name) { + this.name = name; + } + + public String getName() { + return name; + } + + public void setRole(final String role) { + this.role = role; + } + + public String getRole() { + return role; + } + + public int compareTo(ActorInfo otherActorInfo) { + return getName().compareTo(otherActorInfo.getName()); + } + } +} diff --git a/spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/web/MovieForm.java b/spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/web/MovieForm.java new file mode 100644 index 000000000..d1af7adcc --- /dev/null +++ b/spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/web/MovieForm.java @@ -0,0 +1,13 @@ +package org.neo4j.examples.imdb.web; + +public class MovieForm { + private String title; + + public void setTitle(final String title) { + this.title = title; + } + + public String getTitle() { + return this.title; + } +} diff --git a/spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/web/MovieInfo.java b/spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/web/MovieInfo.java new file mode 100644 index 000000000..287c1a33e --- /dev/null +++ b/spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/web/MovieInfo.java @@ -0,0 +1,42 @@ +package org.neo4j.examples.imdb.web; + +import org.neo4j.examples.imdb.domain.Movie; +import org.neo4j.examples.imdb.domain.Role; + +/** +* @author mh +* @since 01.04.11 +*/ +public final class MovieInfo implements Comparable { + private String title; + private String role; + + MovieInfo(final Movie movie, final Role role) { + setTitle(movie.getTitle()); + if (role == null || role.getName() == null) { + setRole("(unknown)"); + } else { + setRole(role.getName()); + } + } + + public final void setTitle(final String title) { + this.title = title; + } + + public String getTitle() { + return title; + } + + public final void setRole(final String role) { + this.role = role; + } + + public String getRole() { + return role; + } + + public int compareTo(final MovieInfo otherMovieInfo) { + return getTitle().compareTo(otherMovieInfo.getTitle()); + } +} diff --git a/spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/web/SetupController.java b/spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/web/SetupController.java new file mode 100644 index 000000000..5b294b63b --- /dev/null +++ b/spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/web/SetupController.java @@ -0,0 +1,24 @@ +package org.neo4j.examples.imdb.web; + +import org.springframework.web.servlet.ModelAndView; +import org.springframework.web.servlet.mvc.SimpleFormController; + +import javax.servlet.ServletException; +import java.util.HashMap; +import java.util.Map; + +public class SetupController extends SimpleFormController { + private final SetupControllerDelegate delegate; + + public SetupController(final SetupControllerDelegate delegate) { + super(); + this.delegate = delegate; + } + + @Override + protected ModelAndView onSubmit(final Object command) throws ServletException { + final Map model = new HashMap(); + delegate.getModel(command, model); + return new ModelAndView(getSuccessView(), "model", model); + } +} diff --git a/spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/web/SetupControllerDelegate.java b/spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/web/SetupControllerDelegate.java new file mode 100644 index 000000000..0c51d3dd8 --- /dev/null +++ b/spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/web/SetupControllerDelegate.java @@ -0,0 +1,10 @@ +package org.neo4j.examples.imdb.web; + +import javax.servlet.ServletException; +import java.util.Map; + +public interface SetupControllerDelegate { + void getModel(Object command, Map model) + throws ServletException; + +} diff --git a/spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/web/SetupForm.java b/spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/web/SetupForm.java new file mode 100644 index 000000000..ae04568c9 --- /dev/null +++ b/spring-data-neo4j-examples/imdb/src/main/java/org/neo4j/examples/imdb/web/SetupForm.java @@ -0,0 +1,4 @@ +package org.neo4j.examples.imdb.web; + +public class SetupForm { +} diff --git a/spring-data-neo4j-examples/imdb/src/main/model/imdb.domain.impl.ucls b/spring-data-neo4j-examples/imdb/src/main/model/imdb.domain.impl.ucls new file mode 100644 index 000000000..21487deab --- /dev/null +++ b/spring-data-neo4j-examples/imdb/src/main/model/imdb.domain.impl.ucls @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring-data-neo4j-examples/imdb/src/main/model/imdb.domain.interface.simple.ucls b/spring-data-neo4j-examples/imdb/src/main/model/imdb.domain.interface.simple.ucls new file mode 100644 index 000000000..dfb9108d9 --- /dev/null +++ b/spring-data-neo4j-examples/imdb/src/main/model/imdb.domain.interface.simple.ucls @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring-data-neo4j-examples/imdb/src/main/model/imdb.domain.interface.ucls b/spring-data-neo4j-examples/imdb/src/main/model/imdb.domain.interface.ucls new file mode 100644 index 000000000..e58a89a33 --- /dev/null +++ b/spring-data-neo4j-examples/imdb/src/main/model/imdb.domain.interface.ucls @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring-data-neo4j-examples/imdb/src/main/model/imdb.domain.service.search.ucls b/spring-data-neo4j-examples/imdb/src/main/model/imdb.domain.service.search.ucls new file mode 100644 index 000000000..22ed008db --- /dev/null +++ b/spring-data-neo4j-examples/imdb/src/main/model/imdb.domain.service.search.ucls @@ -0,0 +1,107 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring-data-neo4j-examples/imdb/src/main/model/imdb.domain.service.ucls b/spring-data-neo4j-examples/imdb/src/main/model/imdb.domain.service.ucls new file mode 100644 index 000000000..8dc2132fe --- /dev/null +++ b/spring-data-neo4j-examples/imdb/src/main/model/imdb.domain.service.ucls @@ -0,0 +1,171 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring-data-neo4j-examples/imdb/src/main/model/imdb.packages.ucls b/spring-data-neo4j-examples/imdb/src/main/model/imdb.packages.ucls new file mode 100644 index 000000000..b4f04ee4f --- /dev/null +++ b/spring-data-neo4j-examples/imdb/src/main/model/imdb.packages.ucls @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring-data-neo4j-examples/imdb/src/main/model/imdb.parser.data.ucls b/spring-data-neo4j-examples/imdb/src/main/model/imdb.parser.data.ucls new file mode 100644 index 000000000..469eaf124 --- /dev/null +++ b/spring-data-neo4j-examples/imdb/src/main/model/imdb.parser.data.ucls @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring-data-neo4j-examples/imdb/src/main/model/imdb.parser.ucls b/spring-data-neo4j-examples/imdb/src/main/model/imdb.parser.ucls new file mode 100644 index 000000000..bf5f2ec7d --- /dev/null +++ b/spring-data-neo4j-examples/imdb/src/main/model/imdb.parser.ucls @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring-data-neo4j-examples/imdb/src/main/model/imdb.util.ucls b/spring-data-neo4j-examples/imdb/src/main/model/imdb.util.ucls new file mode 100644 index 000000000..d0908a9ca --- /dev/null +++ b/spring-data-neo4j-examples/imdb/src/main/model/imdb.util.ucls @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring-data-neo4j-examples/imdb/src/main/model/imdb.web.find.ucls b/spring-data-neo4j-examples/imdb/src/main/model/imdb.web.find.ucls new file mode 100644 index 000000000..7d284a190 --- /dev/null +++ b/spring-data-neo4j-examples/imdb/src/main/model/imdb.web.find.ucls @@ -0,0 +1,140 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring-data-neo4j-examples/imdb/src/main/model/imdb.web.setup.ucls b/spring-data-neo4j-examples/imdb/src/main/model/imdb.web.setup.ucls new file mode 100644 index 000000000..e077ad162 --- /dev/null +++ b/spring-data-neo4j-examples/imdb/src/main/model/imdb.web.setup.ucls @@ -0,0 +1,105 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring-data-neo4j-examples/imdb/src/main/resources/data/actors.list.gz b/spring-data-neo4j-examples/imdb/src/main/resources/data/actors.list.gz new file mode 100644 index 0000000000000000000000000000000000000000..4b5a4316fdfeef0428ae67b4fc92734756468f7d GIT binary patch literal 408049 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΂Ec-5wRmi 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%0AN6$zs{W+A{LQVuy7qJ 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 `H#^Zto?YsD539qx7*5xi8dVSie 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�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 vEV%i@Prp3l`=?ye{^5&T7 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring-data-neo4j-examples/imdb/src/main/webapp/WEB-INF/tld/spring-form.tld b/spring-data-neo4j-examples/imdb/src/main/webapp/WEB-INF/tld/spring-form.tld new file mode 100644 index 000000000..4f6fd9fd4 --- /dev/null +++ b/spring-data-neo4j-examples/imdb/src/main/webapp/WEB-INF/tld/spring-form.tld @@ -0,0 +1,2252 @@ + + + + + + 2.5 + 1.2 + form + http://www.springframework.org/tags/form + Spring Framework JSP Form Tag Library + + + + form + org.springframework.web.servlet.tags.form.FormTag + JSP + Renders an HTML 'form' tag and exposes a binding path to inner tags for binding. + + id + false + true + HTML Standard Attribute + + + name + false + true + HTML Standard Attribute - added for backwards compatibility cases + + + htmlEscape + false + true + Enable/disable HTML escaping of rendered values. + + + cssClass + false + true + Equivalent to "class" - HTML Optional Attribute + + + cssStyle + false + true + Equivalent to "style" - HTML Optional Attribute + + + lang + false + true + HTML Standard Attribute + + + title + false + true + HTML Standard Attribute + + + dir + false + true + HTML Standard Attribute + + + onclick + false + true + HTML Event Attribute + + + ondblclick + false + true + HTML Event Attribute + + + onmousedown + false + true + HTML Event Attribute + + + onmouseup + false + true + HTML Event Attribute + + + onmouseover + false + true + HTML Event Attribute + + + onmousemove + false + true + HTML Event Attribute + + + onmouseout + false + true + HTML Event Attribute + + + onkeypress + false + true + HTML Event Attribute + + + onkeyup + false + true + HTML Event Attribute + + + onkeydown + false + true + HTML Event Attribute + + + + modelAttribute + false + true + Name of the model attribute under which the form object is exposed. + Defaults to 'command'. + + + commandName + false + true + Name of the model attribute under which the form object is exposed. + Defaults to 'command'. + + + action + false + true + HTML Required Attribute + + + method + false + true + HTML Optional Attribute + + + enctype + false + true + HTML Optional Attribute + + + onsubmit + false + true + HTML Event Attribute + + + onreset + false + true + HTML Event Attribute + + + acceptCharset + false + true + Specifies the list of character encodings for input data that is accepted by the server processing this form. The value is a space- and/or comma-delimited list of charset values. The client must interpret this list as an exclusive-or list, i.e., the server is able to accept any single character encoding per entity received. + + + + + + input + org.springframework.web.servlet.tags.form.InputTag + empty + Renders an HTML 'input' tag with type 'text' using the bound value. + + path + true + true + Path to property for data binding + + + id + false + true + HTML Standard Attribute + + + htmlEscape + false + true + Enable/disable HTML escaping of rendered values. + + + cssClass + false + true + Equivalent to "class" - HTML Optional Attribute + + + cssErrorClass + false + true + Equivalent to "class" - HTML Optional Attribute. Used when the bound field has errors. + + + cssStyle + false + true + Equivalent to "style" - HTML Optional Attribute + + + lang + false + true + HTML Standard Attribute + + + title + false + true + HTML Standard Attribute + + + dir + false + true + HTML Standard Attribute + + + tabindex + false + true + HTML Standard Attribute + + + disabled + false + true + HTML Optional Attribute. Setting the value of this attribute to 'true' (without the quotes) will disable the HTML element. + + + onclick + false + true + HTML Event Attribute + + + ondblclick + false + true + HTML Event Attribute + + + onmousedown + false + true + HTML Event Attribute + + + onmouseup + false + true + HTML Event Attribute + + + onmouseover + false + true + HTML Event Attribute + + + onmousemove + false + true + HTML Event Attribute + + + onmouseout + false + true + HTML Event Attribute + + + onkeypress + false + true + HTML Event Attribute + + + onkeyup + false + true + HTML Event Attribute + + + onkeydown + false + true + HTML Event Attribute + + + onfocus + false + true + HTML Event Attribute + + + onblur + false + true + HTML Event Attribute + + + onchange + false + true + HTML Event Attribute + + + accesskey + false + true + HTML Standard Attribute + + + + size + false + true + HTML Optional Attribute + + + maxlength + false + true + HTML Optional Attribute + + + alt + false + true + HTML Optional Attribute + + + onselect + false + true + HTML Event Attribute + + + readonly + false + true + HTML Optional Attribute. Setting the value of this attribute to 'true' (without the quotes) will make the HTML element readonly. + + + autocomplete + false + true + Common Optional Attribute + + + + + + password + org.springframework.web.servlet.tags.form.PasswordInputTag + empty + Renders an HTML 'input' tag with type 'password' using the bound value. + + path + true + true + Path to property for data binding + + + id + false + true + HTML Standard Attribute + + + htmlEscape + false + true + Enable/disable HTML escaping of rendered values. + + + cssClass + false + true + Equivalent to "class" - HTML Optional Attribute + + + cssErrorClass + false + true + Equivalent to "class" - HTML Optional Attribute. Used when the bound field has errors. + + + cssStyle + false + true + Equivalent to "style" - HTML Optional Attribute + + + lang + false + true + HTML Standard Attribute + + + title + false + true + HTML Standard Attribute + + + dir + false + true + HTML Standard Attribute + + + tabindex + false + true + HTML Standard Attribute + + + disabled + false + true + HTML Optional Attribute. Setting the value of this attribute to 'true' (without the quotes) will disable the HTML element. + + + onclick + false + true + HTML Event Attribute + + + ondblclick + false + true + HTML Event Attribute + + + onmousedown + false + true + HTML Event Attribute + + + onmouseup + false + true + HTML Event Attribute + + + onmouseover + false + true + HTML Event Attribute + + + onmousemove + false + true + HTML Event Attribute + + + onmouseout + false + true + HTML Event Attribute + + + onkeypress + false + true + HTML Event Attribute + + + onkeyup + false + true + HTML Event Attribute + + + onkeydown + false + true + HTML Event Attribute + + + onfocus + false + true + HTML Event Attribute + + + onblur + false + true + HTML Event Attribute + + + onchange + false + true + HTML Event Attribute + + + accesskey + false + true + HTML Standard Attribute + + + + size + false + true + HTML Optional Attribute + + + maxlength + false + true + HTML Optional Attribute + + + alt + false + true + HTML Optional Attribute + + + onselect + false + true + HTML Event Attribute + + + readonly + false + true + HTML Optional Attribute. Setting the value of this attribute to 'true' (without the quotes) will make the HTML element readonly. + + + autocomplete + false + true + Common Optional Attribute + + + + showPassword + false + true + Is the password value to be shown? Defaults to false. + + + + + + hidden + org.springframework.web.servlet.tags.form.HiddenInputTag + empty + Renders an HTML 'input' tag with type 'hidden' using the bound value. + + path + true + true + Path to property for data binding + + + id + false + true + HTML Standard Attribute + + + htmlEscape + false + true + Enable/disable HTML escaping of rendered values. + + + + + + select + org.springframework.web.servlet.tags.form.SelectTag + JSP + Renders an HTML 'select' element. Supports databinding to the selected option. + + path + true + true + Path to property for data binding + + + id + false + true + HTML Standard Attribute + + + htmlEscape + false + true + Enable/disable HTML escaping of rendered values. + + + cssClass + false + true + Equivalent to "class" - HTML Optional Attribute + + + cssErrorClass + false + true + Equivalent to "class" - HTML Optional Attribute. Used when the bound field has errors. + + + cssStyle + false + true + Equivalent to "style" - HTML Optional Attribute + + + lang + false + true + HTML Standard Attribute + + + title + false + true + HTML Standard Attribute + + + dir + false + true + HTML Standard Attribute + + + tabindex + false + true + HTML Standard Attribute + + + disabled + false + true + HTML Optional Attribute. Setting the value of this attribute to 'true' (without the quotes) will disable the HTML element. + + + onclick + false + true + HTML Event Attribute + + + ondblclick + false + true + HTML Event Attribute + + + onmousedown + false + true + HTML Event Attribute + + + onmouseup + false + true + HTML Event Attribute + + + onmouseover + false + true + HTML Event Attribute + + + onmousemove + false + true + HTML Event Attribute + + + onmouseout + false + true + HTML Event Attribute + + + onkeypress + false + true + HTML Event Attribute + + + onkeyup + false + true + HTML Event Attribute + + + onkeydown + false + true + HTML Event Attribute + + + onfocus + false + true + HTML Event Attribute + + + onblur + false + true + HTML Event Attribute + + + onchange + false + true + HTML Event Attribute + + + accesskey + false + true + HTML Standard Attribute + + + + items + false + true + The Collection, Map or array of objects used to generate the inner 'option' tags + + + itemValue + false + true + Name of the property mapped to 'value' attribute of the 'option' tag + + + itemLabel + false + true + Name of the property mapped to the inner text of the 'option' tag + + + size + false + true + HTML Optional Attribute + + + multiple + false + true + HTML Optional Attribute + + + + + + option + org.springframework.web.servlet.tags.form.OptionTag + JSP + Renders a single HTML 'option'. Sets 'selected' as appropriate based on bound value. + + value + java.lang.Object + The actual value bound to the 'value' attribute + + + displayValue + java.lang.String + The String representation of thr value bound to the 'value' attribute, taking into consideration + any PropertyEditor associated with the enclosing 'select' tag. + + + value + true + true + HTML Optional Attribute + + + label + false + true + HTML Optional Attribute + + + htmlEscape + false + true + Enable/disable HTML escaping of rendered values. + + + cssClass + false + true + Equivalent to "class" - HTML Optional Attribute + + + cssErrorClass + false + true + Equivalent to "class" - HTML Optional Attribute. Used when the bound field has errors. + + + cssStyle + false + true + Equivalent to "style" - HTML Optional Attribute + + + lang + false + true + HTML Standard Attribute + + + title + false + true + HTML Standard Attribute + + + dir + false + true + HTML Standard Attribute + + + tabindex + false + true + HTML Standard Attribute + + + disabled + false + true + HTML Optional Attribute. Setting the value of this attribute to 'true' (without the quotes) will disable the HTML element. + + + onclick + false + true + HTML Event Attribute + + + ondblclick + false + true + HTML Event Attribute + + + onmousedown + false + true + HTML Event Attribute + + + onmouseup + false + true + HTML Event Attribute + + + onmouseover + false + true + HTML Event Attribute + + + onmousemove + false + true + HTML Event Attribute + + + onmouseout + false + true + HTML Event Attribute + + + onkeypress + false + true + HTML Event Attribute + + + onkeyup + false + true + HTML Event Attribute + + + onkeydown + false + true + HTML Event Attribute + + + + + + options + org.springframework.web.servlet.tags.form.OptionsTag + empty + Renders a list of HTML 'option' tags. Sets 'selected' as appropriate based on bound + value. + + items + true + true + The Collection, Map or array of objects used to generate the inner 'option' tags + + + itemValue + false + true + Name of the property mapped to 'value' attribute of the 'option' tag + + + itemLabel + false + true + Name of the property mapped to the inner text of the 'option' tag + + + htmlEscape + false + true + Enable/disable HTML escaping of rendered values. + + + cssClass + false + true + Equivalent to "class" - HTML Optional Attribute + + + cssErrorClass + false + true + Equivalent to "class" - HTML Optional Attribute. Used when the bound field has errors. + + + cssStyle + false + true + Equivalent to "style" - HTML Optional Attribute + + + lang + false + true + HTML Standard Attribute + + + title + false + true + HTML Standard Attribute + + + dir + false + true + HTML Standard Attribute + + + tabindex + false + true + HTML Standard Attribute + + + disabled + false + true + HTML Optional Attribute. Setting the value of this attribute to 'true' (without the quotes) will disable the HTML element. + + + onclick + false + true + HTML Event Attribute + + + ondblclick + false + true + HTML Event Attribute + + + onmousedown + false + true + HTML Event Attribute + + + onmouseup + false + true + HTML Event Attribute + + + onmouseover + false + true + HTML Event Attribute + + + onmousemove + false + true + HTML Event Attribute + + + onmouseout + false + true + HTML Event Attribute + + + onkeypress + false + true + HTML Event Attribute + + + onkeyup + false + true + HTML Event Attribute + + + onkeydown + false + true + HTML Event Attribute + + + + + + radiobutton + org.springframework.web.servlet.tags.form.RadioButtonTag + empty + Renders an HTML 'input' tag with type 'radio'. + + path + true + true + Path to property for data binding + + + id + false + true + HTML Standard Attribute + + + htmlEscape + false + true + Enable/disable HTML escaping of rendered values. + + + cssClass + false + true + Equivalent to "class" - HTML Optional Attribute + + + cssErrorClass + false + true + Equivalent to "class" - HTML Optional Attribute. Used when the bound field has errors. + + + cssStyle + false + true + Equivalent to "style" - HTML Optional Attribute + + + lang + false + true + HTML Standard Attribute + + + title + false + true + HTML Standard Attribute + + + dir + false + true + HTML Standard Attribute + + + tabindex + false + true + HTML Standard Attribute + + + disabled + false + true + HTML Optional Attribute. Setting the value of this attribute to 'true' (without the quotes) will disable the HTML element. + + + onclick + false + true + HTML Event Attribute + + + ondblclick + false + true + HTML Event Attribute + + + onmousedown + false + true + HTML Event Attribute + + + onmouseup + false + true + HTML Event Attribute + + + onmouseover + false + true + HTML Event Attribute + + + onmousemove + false + true + HTML Event Attribute + + + onmouseout + false + true + HTML Event Attribute + + + onkeypress + false + true + HTML Event Attribute + + + onkeyup + false + true + HTML Event Attribute + + + onkeydown + false + true + HTML Event Attribute + + + onfocus + false + true + HTML Event Attribute + + + onblur + false + true + HTML Event Attribute + + + onchange + false + true + HTML Event Attribute + + + accesskey + false + true + HTML Standard Attribute + + + + value + false + true + HTML Optional Attribute + + + label + false + true + Value to be displayed as part of the tag + + + + + + radiobuttons + org.springframework.web.servlet.tags.form.RadioButtonsTag + empty + Renders multiple HTML 'input' tags with type 'radio'. + + path + true + true + Path to property for data binding + + + id + false + true + HTML Standard Attribute + + + htmlEscape + false + true + Enable/disable HTML escaping of rendered values. + + + cssClass + false + true + Equivalent to "class" - HTML Optional Attribute + + + cssErrorClass + false + true + Equivalent to "class" - HTML Optional Attribute. Used when the bound field has errors. + + + cssStyle + false + true + Equivalent to "style" - HTML Optional Attribute + + + lang + false + true + HTML Standard Attribute + + + title + false + true + HTML Standard Attribute + + + dir + false + true + HTML Standard Attribute + + + tabindex + false + true + HTML Standard Attribute + + + disabled + false + true + HTML Optional Attribute. Setting the value of this attribute to 'true' (without the quotes) will disable the HTML element. + + + onclick + false + true + HTML Event Attribute + + + ondblclick + false + true + HTML Event Attribute + + + onmousedown + false + true + HTML Event Attribute + + + onmouseup + false + true + HTML Event Attribute + + + onmouseover + false + true + HTML Event Attribute + + + onmousemove + false + true + HTML Event Attribute + + + onmouseout + false + true + HTML Event Attribute + + + onkeypress + false + true + HTML Event Attribute + + + onkeyup + false + true + HTML Event Attribute + + + onkeydown + false + true + HTML Event Attribute + + + onfocus + false + true + HTML Event Attribute + + + onblur + false + true + HTML Event Attribute + + + onchange + false + true + HTML Event Attribute + + + accesskey + false + true + HTML Standard Attribute + + + + items + true + true + The Collection, Map or array of objects used to generate the 'input' tags with type 'radio' + + + itemValue + false + true + Name of the property mapped to 'value' attribute of the 'input' tags with type 'radio' + + + itemLabel + false + true + Value to be displayed as part of the 'input' tags with type 'radio' + + + delimiter + false + true + Delimiter to use between each 'input' tag with type 'radio'. There is no delimiter by default. + + + element + false + true + Specifies the HTML element that is used to enclose each 'input' tag with type 'radio'. Defaults to 'span'. + + + + + + checkbox + org.springframework.web.servlet.tags.form.CheckboxTag + empty + Renders an HTML 'input' tag with type 'checkbox'. + + path + true + true + Path to property for data binding + + + id + false + true + HTML Standard Attribute + + + htmlEscape + false + true + Enable/disable HTML escaping of rendered values. + + + cssClass + false + true + Equivalent to "class" - HTML Optional Attribute + + + cssErrorClass + false + true + Equivalent to "class" - HTML Optional Attribute. Used when the bound field has errors. + + + cssStyle + false + true + Equivalent to "style" - HTML Optional Attribute + + + lang + false + true + HTML Standard Attribute + + + title + false + true + HTML Standard Attribute + + + dir + false + true + HTML Standard Attribute + + + tabindex + false + true + HTML Standard Attribute + + + disabled + false + true + HTML Optional Attribute. Setting the value of this attribute to 'true' (without the quotes) will disable the HTML element. + + + onclick + false + true + HTML Event Attribute + + + ondblclick + false + true + HTML Event Attribute + + + onmousedown + false + true + HTML Event Attribute + + + onmouseup + false + true + HTML Event Attribute + + + onmouseover + false + true + HTML Event Attribute + + + onmousemove + false + true + HTML Event Attribute + + + onmouseout + false + true + HTML Event Attribute + + + onkeypress + false + true + HTML Event Attribute + + + onkeyup + false + true + HTML Event Attribute + + + onkeydown + false + true + HTML Event Attribute + + + onfocus + false + true + HTML Event Attribute + + + onblur + false + true + HTML Event Attribute + + + onchange + false + true + HTML Event Attribute + + + accesskey + false + true + HTML Standard Attribute + + + + value + false + true + HTML Optional Attribute + + + label + false + true + Value to be displayed as part of the tag + + + + + + checkboxes + org.springframework.web.servlet.tags.form.CheckboxesTag + empty + Renders multiple HTML 'input' tags with type 'checkbox'. + + path + true + true + Path to property for data binding + + + id + false + true + HTML Standard Attribute + + + htmlEscape + false + true + Enable/disable HTML escaping of rendered values. + + + cssClass + false + true + Equivalent to "class" - HTML Optional Attribute + + + cssErrorClass + false + true + Equivalent to "class" - HTML Optional Attribute. Used when the bound field has errors. + + + cssStyle + false + true + Equivalent to "style" - HTML Optional Attribute + + + lang + false + true + HTML Standard Attribute + + + title + false + true + HTML Standard Attribute + + + dir + false + true + HTML Standard Attribute + + + tabindex + false + true + HTML Standard Attribute + + + disabled + false + true + HTML Optional Attribute. Setting the value of this attribute to 'true' (without the quotes) will disable the HTML element. + + + onclick + false + true + HTML Event Attribute + + + ondblclick + false + true + HTML Event Attribute + + + onmousedown + false + true + HTML Event Attribute + + + onmouseup + false + true + HTML Event Attribute + + + onmouseover + false + true + HTML Event Attribute + + + onmousemove + false + true + HTML Event Attribute + + + onmouseout + false + true + HTML Event Attribute + + + onkeypress + false + true + HTML Event Attribute + + + onkeyup + false + true + HTML Event Attribute + + + onkeydown + false + true + HTML Event Attribute + + + onfocus + false + true + HTML Event Attribute + + + onblur + false + true + HTML Event Attribute + + + onchange + false + true + HTML Event Attribute + + + accesskey + false + true + HTML Standard Attribute + + + + items + true + true + The Collection, Map or array of objects used to generate the 'input' tags with type 'checkbox' + + + itemValue + false + true + Name of the property mapped to 'value' attribute of the 'input' tags with type 'checkbox' + + + itemLabel + false + true + Value to be displayed as part of the 'input' tags with type 'checkbox' + + + delimiter + false + true + Delimiter to use between each 'input' tag with type 'checkbox'. There is no delimiter by default. + + + element + false + true + Specifies the HTML element that is used to enclose each 'input' tag with type 'checkbox'. Defaults to 'span'. + + + + + + textarea + org.springframework.web.servlet.tags.form.TextareaTag + empty + Renders an HTML 'textarea'. + + path + true + true + Path to property for data binding + + + id + false + true + HTML Standard Attribute + + + htmlEscape + false + true + Enable/disable HTML escaping of rendered values. + + + cssClass + false + true + Equivalent to "class" - HTML Optional Attribute + + + cssErrorClass + false + true + Equivalent to "class" - HTML Optional Attribute. Used when the bound field has errors. + + + cssStyle + false + true + Equivalent to "style" - HTML Optional Attribute + + + lang + false + true + HTML Standard Attribute + + + title + false + true + HTML Standard Attribute + + + dir + false + true + HTML Standard Attribute + + + tabindex + false + true + HTML Standard Attribute + + + disabled + false + true + HTML Optional Attribute. Setting the value of this attribute to 'true' (without the quotes) will disable the HTML element. + + + onclick + false + true + HTML Event Attribute + + + ondblclick + false + true + HTML Event Attribute + + + onmousedown + false + true + HTML Event Attribute + + + onmouseup + false + true + HTML Event Attribute + + + onmouseover + false + true + HTML Event Attribute + + + onmousemove + false + true + HTML Event Attribute + + + onmouseout + false + true + HTML Event Attribute + + + onkeypress + false + true + HTML Event Attribute + + + onkeyup + false + true + HTML Event Attribute + + + onkeydown + false + true + HTML Event Attribute + + + onfocus + false + true + HTML Event Attribute + + + onblur + false + true + HTML Event Attribute + + + onchange + false + true + HTML Event Attribute + + + accesskey + false + true + HTML Standard Attribute + + + + rows + false + true + HTML Required Attribute + + + cols + false + true + HTML Required Attribute + + + onselect + false + true + HTML Event Attribute + + + readonly + false + true + HTML Optional Attribute. Setting the value of this attribute to 'true' (without the quotes) will make the HTML element readonly. + + + + + + errors + org.springframework.web.servlet.tags.form.ErrorsTag + JSP + Renders field errors in an HTML 'span' tag. + + messages + java.util.List + + + path + false + true + Path to errors object for data binding + + + id + false + true + HTML Standard Attribute + + + htmlEscape + false + true + Enable/disable HTML escaping of rendered values. + + + delimiter + false + true + Delimiter for displaying multiple error messages. Defaults to the br tag. + + + cssClass + false + true + Equivalent to "class" - HTML Optional Attribute + + + cssStyle + false + true + Equivalent to "style" - HTML Optional Attribute + + + lang + false + true + HTML Standard Attribute + + + title + false + true + HTML Standard Attribute + + + dir + false + true + HTML Standard Attribute + + + tabindex + false + true + HTML Standard Attribute + + + onclick + false + true + HTML Event Attribute + + + ondblclick + false + true + HTML Event Attribute + + + onmousedown + false + true + HTML Event Attribute + + + onmouseup + false + true + HTML Event Attribute + + + onmouseover + false + true + HTML Event Attribute + + + onmousemove + false + true + HTML Event Attribute + + + onmouseout + false + true + HTML Event Attribute + + + onkeypress + false + true + HTML Event Attribute + + + onkeyup + false + true + HTML Event Attribute + + + onkeydown + false + true + HTML Event Attribute + + + element + false + true + Specifies the HTML element that is used to render the enclosing errors. + + + + + + label + org.springframework.web.servlet.tags.form.LabelTag + JSP + Renders a form field label in an HTML 'label' tag. + + path + true + true + Path to errors object for data binding + + + id + false + true + HTML Standard Attribute + + + htmlEscape + false + true + Enable/disable HTML escaping of rendered values. + + + for + false + true + HTML Standard Attribute + + + cssClass + false + true + Equivalent to "class" - HTML Optional Attribute. + + + cssErrorClass + false + true + Equivalent to "class" - HTML Optional Attribute. Used only when errors are present. + + + cssStyle + false + true + Equivalent to "style" - HTML Optional Attribute + + + lang + false + true + HTML Standard Attribute + + + title + false + true + HTML Standard Attribute + + + dir + false + true + HTML Standard Attribute + + + tabindex + false + true + HTML Standard Attribute + + + onclick + false + true + HTML Event Attribute + + + ondblclick + false + true + HTML Event Attribute + + + onmousedown + false + true + HTML Event Attribute + + + onmouseup + false + true + HTML Event Attribute + + + onmouseover + false + true + HTML Event Attribute + + + onmousemove + false + true + HTML Event Attribute + + + onmouseout + false + true + HTML Event Attribute + + + onkeypress + false + true + HTML Event Attribute + + + onkeyup + false + true + HTML Event Attribute + + + onkeydown + false + true + HTML Event Attribute + + + + diff --git a/spring-data-neo4j-examples/imdb/src/main/webapp/WEB-INF/web.xml b/spring-data-neo4j-examples/imdb/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 000000000..a6ce357d9 --- /dev/null +++ b/spring-data-neo4j-examples/imdb/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,31 @@ + + + + + + imdb-app + org.springframework.web.servlet.DispatcherServlet + 1 + + + + imdb-app + *.html + + + + index.jsp + + + + + /spring + /WEB-INF/tld/spring-form.tld + + + + diff --git a/spring-data-neo4j-examples/imdb/src/main/webapp/actor.png b/spring-data-neo4j-examples/imdb/src/main/webapp/actor.png new file mode 100644 index 0000000000000000000000000000000000000000..9d2d500813c206d6735ea53e47ff2c56428ea0a6 GIT binary patch literal 911 zcmV;A191F_P)Mh53JODVWnpw>WFU8GbZ8({Xk{Qr zNlj3Y*^6%g00P@dL_t(I%YBneXk2v^#(($TnR}B-G7U*PrUTYAO-$_~)`SY0g;DBQ zQSd=%U5p#0rCSRvf-7|?=t|wWF(@ulNPHHB5F!+#1Fo1C&nVpwJw|91JDi>Ji-p;#bS}#``x~kI z0s;lstrNJr$VQoFb(`U*UZQL8VVrsiYbTG9I;!@JK0XF~w9jh^tV?~3ribfmSd|S@ zO_SvPLkQO<-ZKQ6fxU4Py?-DMJbITvW^y8%sEzc`E!r50LR{};2bE@{iYVQ}EG*$w zmXWBqZes(pJ{Y;Tw|dLX z?scdEpq)6?|Lf^thfpc=!0`u(^(oXto%ZEX3jb6XN~;9PV|d0fYE`NHIA7G)c8{jh zhcnTwt=xRe1Cf?h+U7~?Gb*x+d~*;%Qp-Pm4X#hWojr5O zP%@Jf(dl6a(_IC?UU->DuDr$<3!A7~oHw6MGxPD6oI5{G*xtbhKWq{Pf{_z_1lOnU zxKMYy5W)f7;sqQGbN<|;A_P_@?OsKBdB%N^wYXy?z{hX9B|AAm%qhztbZF0Qk@v5O2m zI%*||rg7igS9h|o2VVr@J>%<{ ls{n0#&7ONiSw`}me*w>=TB^eO7GMAX002ovPDHLkV1j#Olc4|r literal 0 HcmV?d00001 diff --git a/spring-data-neo4j-examples/imdb/src/main/webapp/bg.png b/spring-data-neo4j-examples/imdb/src/main/webapp/bg.png new file mode 100644 index 0000000000000000000000000000000000000000..29d1107726e83112f0b4ef3b0a07e4b9b91eb9f1 GIT binary patch literal 519 zcmeAS@N?(olHy`uVBq!ia0vp^-+}l92NRIoeds|AkdiEMjVKAuPb(=;EJ|f?Ovz75 zRq)JBOiv9;O-!jQJeg|4z`(fD)5S5Q;?|q%7daUec$^)T@7C|)c_LOfWw+oH!K_Wn*r3Y}5)9$fVlM|ufFuJfSIFD}DsX)I zAPJ<%@#%u155HNWfl9==K}z++HUNbJEO!9SSX@*9GGl7;Tyt(uZIIbxd6h5d|?pihv4WOptn#wB8YhS^+bG62r)F e$9-EyHiq?4ERXNHzW57_Sq4v6KbLh*2~7YrTF`3% literal 0 HcmV?d00001 diff --git a/spring-data-neo4j-examples/imdb/src/main/webapp/favicon.ico b/spring-data-neo4j-examples/imdb/src/main/webapp/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..58a83c6d8b2346462e5cf8715ab51b839707c52e GIT binary patch literal 9158 zcmeHMd3Y1$*8eq`Ofo5@E0je_L1d>Jdxf$T*^w3tl&us{S<2D^mmMi|WiS&fT$l4V~#oUe^R6$rzg-bmg2BGR{pV1H6?6zuH-qpmMZx;`jO z>ko5UKbSKHz>+l(=A1z=J%_p)guT!CW*72MR+`W_$?;Oe0ZVGzO*v z<6tbEfbxRzXFvPR>E>=14=$v3+vhC zu#(Jr;cu}1oyHe8;Be^{967KJN6UBM&B{c)b1)UPhthE3a3)S1$-=2)*+}|y57IwQ zK*q;Ak#Q{z*`Mi9P#2HV%Ue+S$xc-KBMDV?n^ART8!A3aLB+LHlwVIr*_T<^`OjRG z-N-@N%{&~qk&DEe1xWn13`ut?vHNZfboY)R_lFu7emsc1KOKjz{!NtJE=0-KW)y#0 zg5o>nFp}Q#Lp3afG2ed^rvG^xg+JHAM92A)MYwpziVx2p#^n!=Bjdp-WIa5MykE|s z@WDwG(7E98IehxjX?$_@B5rSJ^ur|#MLouVcb^VEFcy6H4)Afg;C0pDt>?hkeF>iD#lM9=d=W;R zSd1tBT;i`Gelqb*#IGU#JH$Ur{5s-aBmQmT*US8#@W(i^u#hYykOebYc$X~PAPe>G zJbnt~@pCwjhjBa}>3BT0^7vOBFZ0_HzZda`5PuT!>1o0$;_oEB-kpafkjKGr9;f1X zT+;ElX65mHorA9-eskitAbwlocOZUe;`bzeh&zwSKpt`7JodzqEgg?qE053WY<$M) zPc_B~iY85|QYo8=BaPlw9jK=o8Qyp-NC834gl8k0W{~h*+ zG=y6$!T-TN_gZ889Qy_Tk$vY4jq!`M(htatM*eGGZ;X%8+FX^U~|~5bCKaJ>m0n*{_n}0-O?^^WPfFCwV#YvyG_b= z+>FgWwr8~w-v2?f^H1|ZB+rmH($Y5%^%T8h`|NH^h>`Cvp@rr?*Y?0{@}?`` zSm)4`hJ+o$Y})LLFFmz(jHHfsri)?K?m>GbiN&(bx8d_CFk0@DwEFgR1tenXi>ES3@4Zc|$M z)zq$FSLiYe~8Mst}cZ=#K08l~l0Pjvh-WvtK<@ETz@G_3QW?M7l`jCB)kUL%xaAlkQwa_w`0 z(`SbHI*WJD0cq3|@H7j;1yBH~dJKjbC%6Km15ErXGlGzfXR{>V;!5xKg7$WISJK}HDiLP<9fIXT0T zlQ#kd`r$CAhf|#yiA>W3ridp#S*VrKv;D}kzH;8F=te;VLFatD7k5d0V6 z;BUo&zoP?RZw3Fb&cXL0en;Zd!bnO8@h1?UY}GF${#tkNiGkqr!ogR@fj_Aun^y3* z>l}O~@fqUNno9~td@b>t5ues$cwZ0jA%Wm$hJ#-h2R>5={;(DNl{yDstkS%xO6x#X z+Os#CPGkC3nBwg z@Rf@0Hf>Byl(R$IfIm^v$8@ptMVMq?C7F+j3H)9D%T4%pki=I!FX^LQ0_Hd@$a-#! z9ne=XcZG+11+re@I{Gz2%nxRiDv#jg@sH=;3BV>M?r9Bl26|s~qA)=!*X_^|?Z@)Z17^)Q9Ba<*aBujI}%9x5%Wa7!ezEZkBJFuz@N9ortjiV$IR3?_$>J*v~CUb3tSxf z*u|n+*|C9swzESYI!w4;rNZk~2Oxrx^-4{v&Thg5Gou{(t~9p$-<+;`VTgthEg~gA z7}4!|CQKCe7H(_X$u_`5t>BT3?=oMMO(%xO5Kq6cQ>To7L10UIFB@f+W=Q{`D|;!F z8kM7rc(hiL?e@>aC=u!-ewY5t#kY24tJveeO$^wRU<(Aatu z`=8qWgZio5|B6z`Q)tOuTvLBqo)W*P4Yn<9_q*%ox{bXkcL@;J&UKWt?2Gpk^On@D zfk@vTgv^A#$lTeNVaP9bJUN%4nDl&xeWn75ighc_$X;+LbV$Tn+Q-wJ^W89+vZ)C@0xLImmwG zT}eXb)qTkLJQIZ%Hp4pW`Eh8+qEwp}YLeV$0cKl5-%-@yU@{jLIQS^h=mVeOt@%fX5beP5bBado^gWm zjE^YKxYZ!f=>+<^hF6J%P3gJEh38AE3Se<$*NS8V2bzwf;cLwzaX~b6|73hPO!)StDM_D=S=p5IkGqD zG5O2SLL76W!E57y-_8EmOZ9d-#jLcg10mGa zX}bm>ea~R3y~j{IdKvptLy@VYSViZo^ijyp98GmM)zP^VVMq?6x_SyqvS%aLG!+>K zW}`TJ9!hiPi}5M1;#C-|ufuSB1;wEyC^$lUq~_JMr@9^mwX2~&xfVI6HqsvG7Q9`Z z2>n^AgD>xe@%;o8e3%5&CuuN$kq5&~BMcN*^6y%aPkWE%nP-%u*}#=@PSfk28M;d}z( z_&n(NYFPR6RL45@6%`am7>Xk-#Ssm~5p5OVOmV1rJ6ejOLnp-4jrO6 zbfrNY@*;l6Fv>Y%pT)6f_4Z%8FHAePv{viM*>{KGM0HJzL7}0Y80sjMPBdl$LqkJ{ zY2~r9KaE4Z7$rdjy|OC}2ej!f;g!zag8Z8^oqcS2M)`a@f@-{5sBHLVg9+IpI5f0h zbCK`rrc|;t3=Its$E{i`m7c;dbeP7;Ny)s>o>97p<3TDKE4}KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z0000cNkl +<%@ include file="/jsp/head.jsp"%> + +IMDB powered by Neo + + +

IMDB powered by Neo4j

+ +
+ + + diff --git a/spring-data-neo4j-examples/imdb/src/main/webapp/jsp/actor-list.jsp b/spring-data-neo4j-examples/imdb/src/main/webapp/jsp/actor-list.jsp new file mode 100644 index 000000000..71f825c98 --- /dev/null +++ b/spring-data-neo4j-examples/imdb/src/main/webapp/jsp/actor-list.jsp @@ -0,0 +1,21 @@ +<%@ include file="/jsp/include.jsp"%> +<%@ include file="/jsp/head.jsp"%> + +<c:out value="${model.movieTitle}" /> : IMDB powered by Neo4j + + +

+

Actors

+
    + + + + +
  • as
  • +
    +
+<%@ include file="/jsp/menu.jsp"%> + + diff --git a/spring-data-neo4j-examples/imdb/src/main/webapp/jsp/actor.jsp b/spring-data-neo4j-examples/imdb/src/main/webapp/jsp/actor.jsp new file mode 100644 index 000000000..ab3287f14 --- /dev/null +++ b/spring-data-neo4j-examples/imdb/src/main/webapp/jsp/actor.jsp @@ -0,0 +1,16 @@ +<%@ include file="/jsp/include.jsp"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> +<%@ include file="/jsp/head.jsp"%> + +IMDB powered by Neo4j + + +

IMDB powered by Neo4j

+ +
Find actor
+
+
+<%@ include file="/jsp/menu.jsp"%> + + diff --git a/spring-data-neo4j-examples/imdb/src/main/webapp/jsp/head.jsp b/spring-data-neo4j-examples/imdb/src/main/webapp/jsp/head.jsp new file mode 100644 index 000000000..35200828e --- /dev/null +++ b/spring-data-neo4j-examples/imdb/src/main/webapp/jsp/head.jsp @@ -0,0 +1,9 @@ +<%@ page language="java" contentType="text/html; charset=ISO-8859-1" + pageEncoding="ISO-8859-1"%> + + + + + + + diff --git a/spring-data-neo4j-examples/imdb/src/main/webapp/jsp/include.jsp b/spring-data-neo4j-examples/imdb/src/main/webapp/jsp/include.jsp new file mode 100644 index 000000000..8f1115e11 --- /dev/null +++ b/spring-data-neo4j-examples/imdb/src/main/webapp/jsp/include.jsp @@ -0,0 +1,3 @@ +<%@ page session="false"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> \ No newline at end of file diff --git a/spring-data-neo4j-examples/imdb/src/main/webapp/jsp/menu.jsp b/spring-data-neo4j-examples/imdb/src/main/webapp/jsp/menu.jsp new file mode 100644 index 000000000..dc452990d --- /dev/null +++ b/spring-data-neo4j-examples/imdb/src/main/webapp/jsp/menu.jsp @@ -0,0 +1 @@ + diff --git a/spring-data-neo4j-examples/imdb/src/main/webapp/jsp/movie-list.jsp b/spring-data-neo4j-examples/imdb/src/main/webapp/jsp/movie-list.jsp new file mode 100644 index 000000000..106613ae9 --- /dev/null +++ b/spring-data-neo4j-examples/imdb/src/main/webapp/jsp/movie-list.jsp @@ -0,0 +1,47 @@ +<%@ include file="/jsp/include.jsp"%> +<%@ include file="/jsp/head.jsp"%> + +<c:out value="${model.actorName}" /> : IMDB powered by Neo4j + + +

+ +

Kevin Bacon number:

+

Bacon path

+ +

Movies

+
    + + + + +
  • in
  • +
    +
+
+<%@ include file="/jsp/menu.jsp"%> + + diff --git a/spring-data-neo4j-examples/imdb/src/main/webapp/jsp/movie.jsp b/spring-data-neo4j-examples/imdb/src/main/webapp/jsp/movie.jsp new file mode 100644 index 000000000..13c4539ff --- /dev/null +++ b/spring-data-neo4j-examples/imdb/src/main/webapp/jsp/movie.jsp @@ -0,0 +1,16 @@ +<%@ include file="/jsp/include.jsp"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> +<%@ include file="/jsp/head.jsp"%> + +IMDB powered by Neo4j + + +

IMDB powered by Neo4j

+ +
Find movie
+
+
+<%@ include file="/jsp/menu.jsp"%> + + diff --git a/spring-data-neo4j-examples/imdb/src/main/webapp/jsp/setup-message.jsp b/spring-data-neo4j-examples/imdb/src/main/webapp/jsp/setup-message.jsp new file mode 100644 index 000000000..e1be252c9 --- /dev/null +++ b/spring-data-neo4j-examples/imdb/src/main/webapp/jsp/setup-message.jsp @@ -0,0 +1,13 @@ +<%@ include file="/jsp/include.jsp"%> +<%@ include file="/jsp/head.jsp"%> + +Setup : IMDB powered by Neo4j + + +

IMDB Setup

+

Result

+
+

+<%@ include file="/jsp/menu.jsp"%> + + diff --git a/spring-data-neo4j-examples/imdb/src/main/webapp/jsp/setup.jsp b/spring-data-neo4j-examples/imdb/src/main/webapp/jsp/setup.jsp new file mode 100644 index 000000000..372668ddc --- /dev/null +++ b/spring-data-neo4j-examples/imdb/src/main/webapp/jsp/setup.jsp @@ -0,0 +1,15 @@ +<%@ include file="/jsp/include.jsp"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> +<%@ include file="/jsp/head.jsp"%> + +IMDB powered by Neo4j + + +

IMDB powered by Neo4j

+ +
Inject data into the graph +
+
+<%@ include file="/jsp/menu.jsp"%> + + diff --git a/spring-data-neo4j-examples/imdb/src/main/webapp/menu.png b/spring-data-neo4j-examples/imdb/src/main/webapp/menu.png new file mode 100644 index 0000000000000000000000000000000000000000..800b9e8486da21e1da6824603bf4d4461cda7280 GIT binary patch literal 459 zcmV;+0W|)JP)K5)zeW@d+Ud!1a=y1hC+UsosxV-w!=TBdV3?gC{Koa-; zJKF1QWX7M1a{wM62S{QtcmTlNQA{y0MG0%GA2D~_osF-Xlce$E0$`X`)O9@%U~c6! z!`#{4+G*h4akI$??*LM9Gu#a~=k)AXlX#Gc(P;G75=}^@y5yXk{%lsCM9St_5TdXq z%wTW#8}5#o$Vlo4>X({2YRF*BUIDuuwVZt+KiU8Q002ovPDHLkV1lR( B!X5ws literal 0 HcmV?d00001 diff --git a/spring-data-neo4j-examples/imdb/src/main/webapp/movie.png b/spring-data-neo4j-examples/imdb/src/main/webapp/movie.png new file mode 100644 index 0000000000000000000000000000000000000000..64e7a307587829cd9a43d4ba33893a54018dc381 GIT binary patch literal 823 zcmV-71IYY|P)@3d05x<) zSad^gZEa<4bO0!0DIhX1Ff<@aVQY0_AX9W@X>Mh53JODVWnpw>WFU8GbZ8({Xk{Qr zNlj3Y*^6%g00M(aL_t(I%bk6~ZAHpH6^&0@M^T54(;DntqWpa|CV z+N&<=S_G*(LHq|o2#oG*2BP>Y%|N{nl9JG!v#1O8!f7$3o#S@qrd_y6+D-M`yzdLo z^Wk~F-{%oH6}^2u9Y6r616)89SOS7wo!tYc^M&6EF9Q8F)wNd@MM2J&kCTi&165V| zwES@qc+}O|{rLnSQ#>8;w-wn7?C3@eGnpWLkVXE*V9o`UHiDWq?oVYzOcW) zPbj1k*1~wpyi86^5smKPayg0VG2Cts0)nTqs$zX+dUja^0*a!b8!-ShEzJDf0)}oJ z{a-hjpIboF!T{(-3`J4M2#p1(lk;V^e*DDYbP$inQ4}BdAKU{tKI8E?4yOY%nZR+z zNya5C8LLPiq_J2m+_`)EgiThfl|cK$<9GTXoxQrUB1QouQ6iN}F+MgyaBv9I%!p{3 z1P6y0ADbYRN+F3-77)z>mW(|EYi=I9JGOEPRl{bpvAeU2H8&4q z&mc2gh(J(PRqS#B06t$i%`HvH_M<_P?J~_RP56A}0NCXMR8<8C0!TB{v&)rL6}PJdee(sQLmHY2RBZP3_wjbtLpyZ1ATU7g)e03?8$tv5b|)K!0l z?}F@hdnha{1mN)SkQ_@6W!`e?>l#QVlDvF15RF8(o}Dc%v4&RF&41d3skf6~x3|Af znWlLim;+u2|FeyOcK>DIIWYPM;BO<)?tcng`UNhA2~kNh@*w~K002ovPDHLkV1h3I BUq=7{ literal 0 HcmV?d00001 diff --git a/spring-data-neo4j-examples/imdb/src/main/webapp/setup.png b/spring-data-neo4j-examples/imdb/src/main/webapp/setup.png new file mode 100644 index 0000000000000000000000000000000000000000..22ff49571020a2b520d34f622673bea031cbbf2d GIT binary patch literal 911 zcmV;A191F_P)UFWod3@ax5SUXmoUNIxjD3X>Dy`V=irVb7^B}VQg$JV|oe-V{&C- zbY)~9cWHEJAarPDAV*0}P%H{)baZe!FE4j@cP?jXZE!Aca%X3X$43AF0)$CKK~y-) zosvyRRACf`pSj)f=Fj9z;I%Q$k+M;2QBgD|6u8J1MHDVVC@g}Csliq)D#}F>R1gMI zv?vN9uqY^MThJnjM2er z*tjzZQ~_IohM*?d(88ZT78%aXyXViH;2#P!cXaKIt*nn#mz#sDYsxyRBZX^i&nNvY z!|UGX>ciJj;*mGYx;yU-{}qrteZJeB8awQX#;6}=+9+dz9;B^hBg-ombNT)Y{GmQ# z1>=94?<9FFC0|AcL_}oZb6R@S1CqM-L=p!tNYAS;()IMMw4S;y?*@nEcUhJtsg9)R zhVHYpJjTSt1mTi$w7?{V;sDV1aTK#e=lghu_XD3;vZxRO075}Q0RXz^f+)dPitQ(E z%-gYda01u!x!CiPi#;y^czkvr$ZTH&P@+)2qU%s20PVYX(wJDs%#2Mmq|uaE&)(MU z0PJaAf$|k1G6xV5B9Sl^Wic)tSjWw~4~WOA&hFy#?;glwrvv%h2{W;VNh9FnHS!gh7CNsvH<|wws9PX>FMctA?pDB z{r$MEo7eC>4_()D?>`lZMDjE6Jdbob&B(|InM?)|K}0YNgQ1}zLZMKuT9$=nS@~B` zN>N-~L@*f4eG&lIbrCfS6E%B2<@@;-!r?HbrKLopQ2?^pEI=;pcwHQ&6!E$`lu|5- lMst<}sgC3s;57fI&R>%|GfdSYVr>8b002ovPDHLkV1jlggmVA@ literal 0 HcmV?d00001 diff --git a/spring-data-neo4j-examples/imdb/src/main/webapp/style.css b/spring-data-neo4j-examples/imdb/src/main/webapp/style.css new file mode 100644 index 000000000..3e3320a72 --- /dev/null +++ b/spring-data-neo4j-examples/imdb/src/main/webapp/style.css @@ -0,0 +1,118 @@ +html { + font-size: 100% +} + +body { + color: #353535; + text-align: left; + font: 0.75em/1.5 sans-serif; + background: #fffdfb url(/imdb/bg.png) repeat-x; + margin-top: 4em; + margin-left: 8em; +} + +.inputField { + padding: 5px; + border: 0; + border-bottom: 1px solid #cccccc; + background: #FFFFFF url(/imdb/gradient.png) repeat-x; + font: normal 14px "trebuchet ms", helvetica, sans-serif; + color: #454743; +} + +.inputField:hover { + border-bottom: 1px solid #333; +} + +label { + font: 13px "trebuchet ms", helvetica, sans-serif; + color: #0c9b92; + margin-right: 0.5em; +} + +p { + color: #5f5f5f; +} + +a:link { + color: #0c9b92; +} + +a:visited { + color: #00a18a; +} + +a:hover { + +} + +h1 { + color: #006380; + padding-top: 0.5em; + line-height: 1.2; +} + +#menu { + clear: left; + padding-top: 1.5em; +} + +ul { + padding-left: 0; +} + +li { + color: #656565; + list-style-type: none; + background: url(/imdb/menu.png) no-repeat; + padding-left: 20px; + line-height: 20px; +} + +.actor { + background-image: url(/imdb/actor.png); +} + +.actors li,.movies li { + float: left; + width: 15em; + height: 7em; + background-color: #F8F8F8; + border: 1px solid #D6D6D6; + background-position: 6px 6px; + margin: 10px; + padding: 0.5em 0.5em 0.5em 30px; + overflow: hidden; +} + +li.actor em { + display: block; +} + +.movies a { + display: block; +} + +.movie { + background-image: url(/imdb/movie.png); +} + +.setup { + background-image: url(/imdb/setup.png); +} + +fieldset { + border: 1px solid #afafaf; + padding: 1em; +} + +legend { + font-weight: bold; + background-repeat: no-repeat; + background-position: 4px 0; + padding: 0 6px 0 24px; +} + +pre { + font-size: 1.5em; +} \ No newline at end of file diff --git a/spring-data-neo4j-examples/imdb/src/site/apt/index.apt b/spring-data-neo4j-examples/imdb/src/site/apt/index.apt new file mode 100644 index 000000000..ee2573fa7 --- /dev/null +++ b/spring-data-neo4j-examples/imdb/src/site/apt/index.apt @@ -0,0 +1,28 @@ +The Neo4j - Datastore Graph IMDB Example + + Imagine a number of actors, acting in Movies and thus forming a graph of relationships between Actors and Movies. The + Spring Datastore Graph project provides an annotation-based approach to map objects onto Neo4j. The current annotations + supported (still subject to change) are: + + * @NodeEntity - class annotation for POJOs backed by a graph node. + + * @RelationshipEntity - class annotation for POJOs containing relationship properties. + + * @GraphProperty - field annotation used to specify indexing. + + * @RelatedTo - for fields denoting relationships (either one-to-one or one-to-many). + + * @StartNode - the start node for a @GraphRelationship.. + + * @EndNode - the end node for a @GraphRelationship. + + In order to persist objects in Spring into Neo4j, simply do something like this (the full code is available over at the + {{{http://github.com/neo4j-examples/spring-datastore-graph-imdb} Spring Datastore Graph IMDB example}}: + +%{source-code|snippet=MovieClass|file=src/main/java/org/neo4j/examples/imdb/domain/Movie.java} + + and the Actor class, + +%{source-code|snippet=ActorClass|file=src/main/java/org/neo4j/examples/imdb/domain/Actor.java} + + This will produce something like {{{http://wiki.neo4j.org/images/5/53/Imdb.screenshot.actor.png} this graph}} \ No newline at end of file diff --git a/spring-data-neo4j-examples/imdb/src/site/site.xml b/spring-data-neo4j-examples/imdb/src/site/site.xml new file mode 100644 index 000000000..0c01dac59 --- /dev/null +++ b/spring-data-neo4j-examples/imdb/src/site/site.xml @@ -0,0 +1,33 @@ + + + + + ${project.name} + images/logos/logo-dark.png + http://neo4j.org/ + + + + + + + + + + + + + + + + + + + + ${skinGroupId} + ${skinArtifactId} + ${skinVersion} + + \ No newline at end of file diff --git a/spring-data-neo4j-examples/imdb/src/test/resources/icons/ACTS_IN.INCOMING.png b/spring-data-neo4j-examples/imdb/src/test/resources/icons/ACTS_IN.INCOMING.png new file mode 100644 index 0000000000000000000000000000000000000000..64e7a307587829cd9a43d4ba33893a54018dc381 GIT binary patch literal 823 zcmV-71IYY|P)@3d05x<) zSad^gZEa<4bO0!0DIhX1Ff<@aVQY0_AX9W@X>Mh53JODVWnpw>WFU8GbZ8({Xk{Qr zNlj3Y*^6%g00M(aL_t(I%bk6~ZAHpH6^&0@M^T54(;DntqWpa|CV z+N&<=S_G*(LHq|o2#oG*2BP>Y%|N{nl9JG!v#1O8!f7$3o#S@qrd_y6+D-M`yzdLo z^Wk~F-{%oH6}^2u9Y6r616)89SOS7wo!tYc^M&6EF9Q8F)wNd@MM2J&kCTi&165V| zwES@qc+}O|{rLnSQ#>8;w-wn7?C3@eGnpWLkVXE*V9o`UHiDWq?oVYzOcW) zPbj1k*1~wpyi86^5smKPayg0VG2Cts0)nTqs$zX+dUja^0*a!b8!-ShEzJDf0)}oJ z{a-hjpIboF!T{(-3`J4M2#p1(lk;V^e*DDYbP$inQ4}BdAKU{tKI8E?4yOY%nZR+z zNya5C8LLPiq_J2m+_`)EgiThfl|cK$<9GTXoxQrUB1QouQ6iN}F+MgyaBv9I%!p{3 z1P6y0ADbYRN+F3-77)z>mW(|EYi=I9JGOEPRl{bpvAeU2H8&4q z&mc2gh(J(PRqS#B06t$i%`HvH_M<_P?J~_RP56A}0NCXMR8<8C0!TB{v&)rL6}PJdee(sQLmHY2RBZP3_wjbtLpyZ1ATU7g)e03?8$tv5b|)K!0l z?}F@hdnha{1mN)SkQ_@6W!`e?>l#QVlDvF15RF8(o}Dc%v4&RF&41d3skf6~x3|Af znWlLim;+u2|FeyOcK>DIIWYPM;BO<)?tcng`UNhA2~kNh@*w~K002ovPDHLkV1h3I BUq=7{ literal 0 HcmV?d00001 diff --git a/spring-data-neo4j-examples/imdb/src/test/resources/icons/ACTS_IN.OUTGOING.png b/spring-data-neo4j-examples/imdb/src/test/resources/icons/ACTS_IN.OUTGOING.png new file mode 100644 index 0000000000000000000000000000000000000000..9d2d500813c206d6735ea53e47ff2c56428ea0a6 GIT binary patch literal 911 zcmV;A191F_P)Mh53JODVWnpw>WFU8GbZ8({Xk{Qr zNlj3Y*^6%g00P@dL_t(I%YBneXk2v^#(($TnR}B-G7U*PrUTYAO-$_~)`SY0g;DBQ zQSd=%U5p#0rCSRvf-7|?=t|wWF(@ulNPHHB5F!+#1Fo1C&nVpwJw|91JDi>Ji-p;#bS}#``x~kI z0s;lstrNJr$VQoFb(`U*UZQL8VVrsiYbTG9I;!@JK0XF~w9jh^tV?~3ribfmSd|S@ zO_SvPLkQO<-ZKQ6fxU4Py?-DMJbITvW^y8%sEzc`E!r50LR{};2bE@{iYVQ}EG*$w zmXWBqZes(pJ{Y;Tw|dLX z?scdEpq)6?|Lf^thfpc=!0`u(^(oXto%ZEX3jb6XN~;9PV|d0fYE`NHIA7G)c8{jh zhcnTwt=xRe1Cf?h+U7~?Gb*x+d~*;%Qp-Pm4X#hWojr5O zP%@Jf(dl6a(_IC?UU->DuDr$<3!A7~oHw6MGxPD6oI5{G*xtbhKWq{Pf{_z_1lOnU zxKMYy5W)f7;sqQGbN<|;A_P_@?OsKBdB%N^wYXy?z{hX9B|AAm%qhztbZF0Qk@v5O2m zI%*||rg7igS9h|o2VVr@J>%<{ ls{n0#&7ONiSw`}me*w>=TB^eO7GMAX002ovPDHLkV1j#Olc4|r literal 0 HcmV?d00001 diff --git a/spring-data-neo4j-examples/imdb/src/test/resources/icons/IMDB.OUTGOING.png b/spring-data-neo4j-examples/imdb/src/test/resources/icons/IMDB.OUTGOING.png new file mode 100644 index 0000000000000000000000000000000000000000..a46fb2220648f4640d48fc34273682db5fc53415 GIT binary patch literal 606 zcmV-k0-^nhP)zpi=LK3kbe)ph6$1us|E@0bs(3;j70N?ldxwS=dZZ43B3h07Tynj^2Yc@GQ zog*HPBZLSEeBTewh7gSA^VD1y1GodMPMto({n9-)s&51E$;vZU9zR8k5p<`8FhN|A1evk_=AdpfbrNok-0q9`y@lykUZ{9CDA`)68V_>uX4$tQ( z0GBRKb2S=6>TxbhlkH7H6&U>${F{F7rSIMjqS-ib^#eg962Z1@5{U!?i4YKr#c&*F s0J1DA{1>jzIOV literal 0 HcmV?d00001 diff --git a/spring-data-neo4j-examples/imdb/src/test/resources/icons/PART_OF_NAME.OUTGOING.png b/spring-data-neo4j-examples/imdb/src/test/resources/icons/PART_OF_NAME.OUTGOING.png new file mode 100644 index 0000000000000000000000000000000000000000..d072d3cbe2dadb1494f77e950952123813613677 GIT binary patch literal 617 zcmV-v0+#)WP)4+SOttuFuo0rp8m zK~y-)osvy!6Hyq2pF7DUO`2wgN>U06wOwc$MHIn>xD*Oicj6|$z;CJaABeUjK|~aE zS$9RDeGK5zq#vnP18H_P9en3BbiKg914X(U4?fX zv=3%78D?M10+5(X0MN8+cL(3TuaZiqIeKc0ZN-aeE4XBZ)ck8EZr_Z=qW7OQ{wVDZ zG+iT=PIKtw7@rGX1_uI+90*bpKD5zs{F**C6zm9u?EJ zQ5_2JmL<2Flg761XDbP7v)0}Ku5Shi%_G^x}q%2kVgpPOH0wIvBfN{N(qOE7M? z3xuFtwW!u4n_D&9s)POg9;6U0U2p=nX__rgY-58pql(|7qW8J5Es5XbtmWcc6+03YVxryf3dbXat2*wyQorvicCWHaaM z^${Ko^E;cZ_ht1ff`3FT9+eG|{}KR{SUhS0lnsNw28{O8e>3MU00000NkvXXu0mjf D_c;L2 literal 0 HcmV?d00001 diff --git a/spring-data-neo4j-examples/imdb/src/test/resources/icons/PART_OF_TITLE.OUTGOING.png b/spring-data-neo4j-examples/imdb/src/test/resources/icons/PART_OF_TITLE.OUTGOING.png new file mode 100644 index 0000000000000000000000000000000000000000..d072d3cbe2dadb1494f77e950952123813613677 GIT binary patch literal 617 zcmV-v0+#)WP)4+SOttuFuo0rp8m zK~y-)osvy!6Hyq2pF7DUO`2wgN>U06wOwc$MHIn>xD*Oicj6|$z;CJaABeUjK|~aE zS$9RDeGK5zq#vnP18H_P9en3BbiKg914X(U4?fX zv=3%78D?M10+5(X0MN8+cL(3TuaZiqIeKc0ZN-aeE4XBZ)ck8EZr_Z=qW7OQ{wVDZ zG+iT=PIKtw7@rGX1_uI+90*bpKD5zs{F**C6zm9u?EJ zQ5_2JmL<2Flg761XDbP7v)0}Ku5Shi%_G^x}q%2kVgpPOH0wIvBfN{N(qOE7M? z3xuFtwW!u4n_D&9s)POg9;6U0U2p=nX__rgY-58pql(|7qW8J5Es5XbtmWcc6+03YVxryf3dbXat2*wyQorvicCWHaaM z^${Ko^E;cZ_ht1ff`3FT9+eG|{}KR{SUhS0lnsNw28{O8e>3MU00000NkvXXu0mjf D_c;L2 literal 0 HcmV?d00001 diff --git a/spring-data-neo4j-examples/myrestaurants-original/.classpath b/spring-data-neo4j-examples/myrestaurants-original/.classpath new file mode 100644 index 000000000..18876e3e8 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-original/.classpath @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/spring-data-neo4j-examples/myrestaurants-original/.gitignore b/spring-data-neo4j-examples/myrestaurants-original/.gitignore new file mode 100644 index 000000000..b83d22266 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-original/.gitignore @@ -0,0 +1 @@ +/target/ diff --git a/spring-data-neo4j-examples/myrestaurants-original/.project b/spring-data-neo4j-examples/myrestaurants-original/.project new file mode 100644 index 000000000..b384d034e --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-original/.project @@ -0,0 +1,44 @@ + + myrestaurants-original + + + + + org.eclipse.wst.jsdt.core.javascriptValidator + + + org.eclipse.ajdt.core.ajbuilder + + + org.eclipse.wst.common.project.facet.core.builder + + + org.eclipse.wst.validation.validationbuilder + + + org.springframework.ide.eclipse.core.springbuilder + + + org.eclipse.ajdt.core.ajbuilder + + + aspectPath + org.springframework.aspects + + + + + org.maven.ide.eclipse.maven2Builder + + + + org.eclipse.ajdt.ui.ajnature + org.springframework.ide.eclipse.core.springnature + org.maven.ide.eclipse.maven2Nature + org.eclipse.wst.common.project.facet.core.nature + org.eclipse.jdt.core.javanature + org.eclipse.wst.common.modulecore.ModuleCoreNature + org.eclipse.jem.workbench.JavaEMFNature + org.eclipse.wst.jsdt.core.jsNature + + \ No newline at end of file diff --git a/spring-data-neo4j-examples/myrestaurants-original/.settings/.jsdtscope b/spring-data-neo4j-examples/myrestaurants-original/.settings/.jsdtscope new file mode 100644 index 000000000..b13d30357 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-original/.settings/.jsdtscope @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/spring-data-neo4j-examples/myrestaurants-original/.settings/org.eclipse.jdt.core.prefs b/spring-data-neo4j-examples/myrestaurants-original/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 000000000..e045805a8 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-original/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,6 @@ +#Tue Sep 28 12:45:37 EDT 2010 +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6 +org.eclipse.jdt.core.compiler.compliance=1.6 +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.source=1.6 diff --git a/spring-data-neo4j-examples/myrestaurants-original/.settings/org.eclipse.wst.common.component b/spring-data-neo4j-examples/myrestaurants-original/.settings/org.eclipse.wst.common.component new file mode 100644 index 000000000..e5c6743f7 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-original/.settings/org.eclipse.wst.common.component @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/spring-data-neo4j-examples/myrestaurants-original/.settings/org.eclipse.wst.common.project.facet.core.xml b/spring-data-neo4j-examples/myrestaurants-original/.settings/org.eclipse.wst.common.project.facet.core.xml new file mode 100644 index 000000000..708f4a79d --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-original/.settings/org.eclipse.wst.common.project.facet.core.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/spring-data-neo4j-examples/myrestaurants-original/.settings/org.eclipse.wst.jsdt.ui.superType.container b/spring-data-neo4j-examples/myrestaurants-original/.settings/org.eclipse.wst.jsdt.ui.superType.container new file mode 100644 index 000000000..3bd5d0a48 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-original/.settings/org.eclipse.wst.jsdt.ui.superType.container @@ -0,0 +1 @@ +org.eclipse.wst.jsdt.launching.baseBrowserLibrary \ No newline at end of file diff --git a/spring-data-neo4j-examples/myrestaurants-original/.settings/org.eclipse.wst.jsdt.ui.superType.name b/spring-data-neo4j-examples/myrestaurants-original/.settings/org.eclipse.wst.jsdt.ui.superType.name new file mode 100644 index 000000000..05bd71b6e --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-original/.settings/org.eclipse.wst.jsdt.ui.superType.name @@ -0,0 +1 @@ +Window \ No newline at end of file diff --git a/spring-data-neo4j-examples/myrestaurants-original/.settings/org.eclipse.wst.validation.prefs b/spring-data-neo4j-examples/myrestaurants-original/.settings/org.eclipse.wst.validation.prefs new file mode 100644 index 000000000..55e002061 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-original/.settings/org.eclipse.wst.validation.prefs @@ -0,0 +1,10 @@ +#Tue Oct 05 19:38:41 EDT 2010 +DELEGATES_PREFERENCE=delegateValidatorList +USER_BUILD_PREFERENCE=enabledBuildValidatorListorg.eclipse.jst.j2ee.internal.classpathdep.ClasspathDependencyValidator;org.eclipse.jst.j2ee.internal.web.validation.UIWarValidator; +USER_MANUAL_PREFERENCE=enabledManualValidatorListorg.eclipse.jst.j2ee.internal.classpathdep.ClasspathDependencyValidator;org.eclipse.jst.j2ee.internal.web.validation.UIWarValidator; +USER_PREFERENCE=overrideGlobalPreferencestruedisableAllValidationfalseversion1.2.200.v201005271900 +eclipse.preferences.version=1 +override=true +suspend=false +vals/org.eclipse.jst.jsp.core.JSPContentValidator/global=FF01 +vf.version=3 diff --git a/spring-data-neo4j-examples/myrestaurants-original/.settings/org.maven.ide.eclipse.prefs b/spring-data-neo4j-examples/myrestaurants-original/.settings/org.maven.ide.eclipse.prefs new file mode 100644 index 000000000..76b3ad97f --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-original/.settings/org.maven.ide.eclipse.prefs @@ -0,0 +1,9 @@ +#Tue Sep 28 12:45:37 EDT 2010 +activeProfiles= +eclipse.preferences.version=1 +fullBuildGoals=process-test-resources +includeModules=false +resolveWorkspaceProjects=true +resourceFilterGoals=process-resources resources\:testResources +skipCompilerPlugin=true +version=1 diff --git a/spring-data-neo4j-examples/myrestaurants-original/pom.xml b/spring-data-neo4j-examples/myrestaurants-original/pom.xml new file mode 100644 index 000000000..78a39f77e --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-original/pom.xml @@ -0,0 +1,513 @@ + + + 4.0.0 + com.springone.myrestaurants + myrestaurants-original + war + 0.1.0.BUILD-SNAPSHOT + myrestaurants-original + + 3.0.4.RELEASE + 1.6.10.M1 + 1.6.1 + UTF-8 + 3.0.2.RELEASE + + + + spring-maven-release + Spring Maven Release Repository + http://maven.springframework.org/release + + + spring-maven-milestone + Spring Maven Milestone Repository + http://maven.springframework.org/milestone + + + JBoss Repo + https://repository.jboss.org/nexus/content/repositories/releases + JBoss 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 + + + + + + junit + junit + 4.8.1 + test + + + log4j + log4j + 1.2.16 + + + org.slf4j + slf4j-api + ${slf4j.version} + + + org.slf4j + jcl-over-slf4j + ${slf4j.version} + + + org.slf4j + slf4j-log4j12 + ${slf4j.version} + + + org.aspectj + aspectjrt + ${aspectj.version} + + + javax.servlet + servlet-api + 2.5 + provided + + + net.sf.flexjson + flexjson + 2.0 + + + + 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.hibernate + hibernate-core + 3.5.5-Final + + + org.hibernate + hibernate-entitymanager + 3.5.5-Final + + + cglib + cglib + + + dom4j + dom4j + + + + + org.hibernate.javax.persistence + hibernate-jpa-2.0-api + 1.0.0.Final + + + org.hibernate + hibernate-validator + 4.1.0.Final + + + javax.xml.bind + jaxb-api + + + com.sun.xml.bind + jaxb-impl + + + + + javax.validation + validation-api + 1.0.0.GA + + + cglib + cglib-nodep + 2.2 + + + javax.transaction + jta + 1.1 + + + org.springframework + spring-jdbc + ${spring.version} + + + org.springframework + spring-orm + ${spring.version} + + + commons-pool + commons-pool + 1.5.4 + + + commons-logging + commons-logging + + + + + commons-dbcp + commons-dbcp + 1.3 + + + commons-logging + commons-logging + + + commons-pool + commons-pool + + + xerces + xerces + + + xerces + xercesImpl + + + xml-apis + xml-apis + + + + + org.apache.tiles + tiles-core + 2.2.1 + + + commons-logging + commons-logging + + + + + org.apache.tiles + tiles-jsp + 2.2.1 + + + org.springframework + spring-web + ${spring.version} + + + commons-logging + commons-logging + + + + + org.springframework + spring-webmvc + ${spring.version} + + + commons-logging + commons-logging + + + + + org.springframework.webflow + spring-js + 2.1.1.RELEASE + + + org.springframework + spring-beans + + + org.springframework + spring-context + + + org.springframework + spring-core + + + org.springframework + spring-context-support + + + commons-logging + commons-logging + + + + + commons-digester + commons-digester + 2.0 + + + commons-logging + commons-logging + + + + + commons-fileupload + commons-fileupload + 1.2.1 + + + commons-logging + commons-logging + + + + + javax.servlet + jstl + 1.2 + + + javax.el + el-api + 1.0 + provided + + + joda-time + joda-time + 1.6 + + + org.springframework.security + spring-security-core + ${spring-security.version} + + + commons-logging + commons-logging + + + + + org.springframework.security + spring-security-config + ${spring-security.version} + + + commons-logging + commons-logging + + + + + org.springframework.security + spring-security-web + ${spring-security.version} + + + org.springframework.security + spring-security-taglibs + ${spring-security.version} + + + org.hsqldb + hsqldb + 2.0.0 + + + + + + org.apache.maven.plugins + maven-war-plugin + 2.1-beta-1 + + + + org.apache.maven.plugins + maven-compiler-plugin + 2.1 + + 1.6 + 1.6 + + + + org.codehaus.mojo + aspectj-maven-plugin + 1.0 + + + + org.aspectj + aspectjrt + ${aspectj.version} + + + org.aspectj + aspectjtools + ${aspectj.version} + + + + + + compile + test-compile + + + + + true + + + org.springframework + spring-aspects + + + 1.6 + 1.6 + + + + org.apache.maven.plugins + maven-resources-plugin + 2.4.2 + + UTF-8 + + + + org.apache.maven.plugins + maven-surefire-plugin + 2.5 + + + org.apache.maven.plugins + maven-assembly-plugin + 2.2-beta-5 + + + jar-with-dependencies + + + + + org.apache.maven.plugins + maven-deploy-plugin + 2.5 + + + + org.apache.maven.plugins + maven-eclipse-plugin + 2.7 + + true + false + 2.0 + + + org.eclipse.ajdt.core.ajbuilder + + org.springframework.aspects + + + + org.springframework.ide.eclipse.core.springbuilder + + + + org.eclipse.ajdt.ui.ajnature + org.springframework.ide.eclipse.core.springnature + + + + + org.apache.maven.plugins + maven-idea-plugin + 2.2 + + true + true + + + + org.codehaus.mojo + tomcat-maven-plugin + 1.0 + + + org.mortbay.jetty + jetty-maven-plugin + 7.1.2.v20100523 + + + /${project.name} + + + + + + diff --git a/spring-data-neo4j-examples/myrestaurants-original/src/main/java/com/springone/myrestaurants/dao/RestaurantDao.java b/spring-data-neo4j-examples/myrestaurants-original/src/main/java/com/springone/myrestaurants/dao/RestaurantDao.java new file mode 100644 index 000000000..7bb6463e4 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-original/src/main/java/com/springone/myrestaurants/dao/RestaurantDao.java @@ -0,0 +1,37 @@ +package com.springone.myrestaurants.dao; + +import java.util.List; + +import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; + +import org.springframework.stereotype.Repository; + +import com.springone.myrestaurants.domain.Restaurant; + +@Repository +public class RestaurantDao { + + @PersistenceContext + private EntityManager entityManager; + + public Restaurant findRestaurant(Long id) { + if (id == null) return null; + return entityManager.find(Restaurant.class, id); + } + + @SuppressWarnings("unchecked") + public List findAllRestaurants() { + return entityManager.createQuery("select o from Restaurant o").getResultList(); + } + + @SuppressWarnings("unchecked") + public List findRestaurantEntries(int firstResult, int maxResults) { + return entityManager.createQuery("select o from Restaurant o").setFirstResult(firstResult).setMaxResults(maxResults).getResultList(); + } + + public long countRestaurants() { + return ((Number) entityManager.createQuery("select count(o) from Restaurant o").getSingleResult()).longValue(); + } + +} diff --git a/spring-data-neo4j-examples/myrestaurants-original/src/main/java/com/springone/myrestaurants/dao/UserAccountDao.java b/spring-data-neo4j-examples/myrestaurants-original/src/main/java/com/springone/myrestaurants/dao/UserAccountDao.java new file mode 100644 index 000000000..edba9b4f5 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-original/src/main/java/com/springone/myrestaurants/dao/UserAccountDao.java @@ -0,0 +1,47 @@ +package com.springone.myrestaurants.dao; + +import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; +import javax.persistence.Query; + +import org.springframework.stereotype.Repository; +import org.springframework.transaction.annotation.Transactional; + +import com.springone.myrestaurants.domain.UserAccount; + +@Repository +public class UserAccountDao { + + @PersistenceContext + private EntityManager entityManager; + + public UserAccount findUserAccount(Long id) { + if (id == null) return null; + return entityManager.find(UserAccount.class, id); + } + + public UserAccount findByName(String name) { + if (name == null) return null; + Query q = entityManager.createQuery("SELECT u FROM UserAccount u WHERE u.userName = :username"); + q.setParameter("username", name); + + java.util.List resultList = q.getResultList(); + if (resultList.size() > 0) + { + return (UserAccount) resultList.get(0); + } + return null; + } + + @Transactional + public void persist(UserAccount userAccount) { + this.entityManager.persist(userAccount); + } + + @Transactional + public UserAccount merge(UserAccount userAccount) { + UserAccount merged = this.entityManager.merge(userAccount); + this.entityManager.flush(); + return merged; + } +} diff --git a/spring-data-neo4j-examples/myrestaurants-original/src/main/java/com/springone/myrestaurants/domain/Restaurant.java b/spring-data-neo4j-examples/myrestaurants-original/src/main/java/com/springone/myrestaurants/domain/Restaurant.java new file mode 100644 index 000000000..cbe69a11f --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-original/src/main/java/com/springone/myrestaurants/domain/Restaurant.java @@ -0,0 +1,88 @@ +package com.springone.myrestaurants.domain; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.Version; + +@Entity +public class Restaurant { + + private String name; + + private String city; + + private String state; + + private String zipCode; + + public String getName() { + return this.name; + } + + public void setName(String name) { + this.name = name; + } + + public String getCity() { + return this.city; + } + + public void setCity(String city) { + this.city = city; + } + + public String getState() { + return this.state; + } + + public void setState(String state) { + this.state = state; + } + + public String getZipCode() { + return this.zipCode; + } + + public void setZipCode(String zipCode) { + this.zipCode = zipCode; + } + + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + @Column(name = "id") + private Long id; + + @Version + @Column(name = "version") + private Integer version; + + public Long getId() { + return this.id; + } + + public void setId(Long id) { + this.id = id; + } + + public Integer getVersion() { + return this.version; + } + + public void setVersion(Integer version) { + this.version = version; + } + + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("Id: ").append(getId()).append(", "); + sb.append("Version: ").append(getVersion()).append(", "); + sb.append("Name: ").append(getName()).append(", "); + sb.append("City: ").append(getCity()).append(", "); + sb.append("State: ").append(getState()).append(", "); + sb.append("ZipCode: ").append(getZipCode()); + return sb.toString(); + } +} diff --git a/spring-data-neo4j-examples/myrestaurants-original/src/main/java/com/springone/myrestaurants/domain/UserAccount.java b/spring-data-neo4j-examples/myrestaurants-original/src/main/java/com/springone/myrestaurants/domain/UserAccount.java new file mode 100644 index 000000000..c2e6d6237 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-original/src/main/java/com/springone/myrestaurants/domain/UserAccount.java @@ -0,0 +1,113 @@ +package com.springone.myrestaurants.domain; + +import java.util.Date; +import java.util.Set; + +import javax.persistence.CascadeType; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.ManyToMany; +import javax.persistence.Table; +import javax.persistence.Temporal; +import javax.persistence.TemporalType; +import javax.persistence.Version; + +import org.springframework.format.annotation.DateTimeFormat; + +@Entity +@Table(name = "user_account") +public class UserAccount { + + private String userName; + + private String firstName; + + private String lastName; + + @Temporal(TemporalType.TIMESTAMP) + @DateTimeFormat(style = "S-") + private Date birthDate; + + @ManyToMany(cascade = CascadeType.ALL) + private Set favorites = new java.util.HashSet(); + + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + @Column(name = "id") + private Long id; + + @Version + @Column(name = "version") + private Integer version; + + public Long getId() { + return this.id; + } + + public void setId(Long id) { + this.id = id; + } + + public Integer getVersion() { + return this.version; + } + + public void setVersion(Integer version) { + this.version = version; + } + + public String getUserName() { + return this.userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getFirstName() { + return this.firstName; + } + + public void setFirstName(String firstName) { + this.firstName = firstName; + } + + public String getLastName() { + return this.lastName; + } + + public void setLastName(String lastName) { + this.lastName = lastName; + } + + public Date getBirthDate() { + return this.birthDate; + } + + public void setBirthDate(Date birthDate) { + this.birthDate = birthDate; + } + + public Set getFavorites() { + return this.favorites; + } + + public void setFavorites(Set favorites) { + this.favorites = favorites; + } + + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("Id: ").append(getId()).append(", "); + sb.append("Version: ").append(getVersion()).append(", "); + sb.append("UserName: ").append(getUserName()).append(", "); + sb.append("FirstName: ").append(getFirstName()).append(", "); + sb.append("LastName: ").append(getLastName()).append(", "); + sb.append("BirthDate: ").append(getBirthDate()).append(", "); + sb.append("Favorites: ").append(getFavorites() == null ? "null" : getFavorites().size()); + return sb.toString(); + } +} diff --git a/spring-data-neo4j-examples/myrestaurants-original/src/main/java/com/springone/myrestaurants/web/BaseApplicationController.java b/spring-data-neo4j-examples/myrestaurants-original/src/main/java/com/springone/myrestaurants/web/BaseApplicationController.java new file mode 100644 index 000000000..3bb10f357 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-original/src/main/java/com/springone/myrestaurants/web/BaseApplicationController.java @@ -0,0 +1,53 @@ +package com.springone.myrestaurants.web; + +import org.joda.time.format.DateTimeFormat; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.i18n.LocaleContextHolder; +import org.springframework.core.convert.converter.Converter; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.ModelAttribute; + +import com.springone.myrestaurants.dao.RestaurantDao; +import com.springone.myrestaurants.dao.UserAccountDao; +import com.springone.myrestaurants.domain.Restaurant; +import com.springone.myrestaurants.domain.UserAccount; + +public class BaseApplicationController { + + @Autowired + RestaurantDao restaurantDao; + + @Autowired + UserAccountDao userAccountDao; + + @ModelAttribute("currentUserAccountId") + public String populateCurrentUserName() { + String currentUser = SecurityContextHolder.getContext() + .getAuthentication().getName(); + UserAccount userAccount = userAccountDao.findByName(currentUser); + if (userAccount != null) { + return userAccount.getId().toString(); + } else { + return "USER-ID-NOT-AVAILABLE"; + } + } + + void addDateTimeFormatPatterns(Model model) { + model.addAttribute( + "userAccount_birthdate_date_format", + DateTimeFormat.patternForStyle("S-", + LocaleContextHolder.getLocale())); + } + + protected Converter getRestaurantConverter() { + return new Converter() { + public String convert(Restaurant restaurant) { + return new StringBuilder().append(restaurant.getName()) + .append(" ").append(restaurant.getCity()).append(" ") + .append(restaurant.getState()).toString(); + } + }; + } + +} diff --git a/spring-data-neo4j-examples/myrestaurants-original/src/main/java/com/springone/myrestaurants/web/RestaurantController.java b/spring-data-neo4j-examples/myrestaurants-original/src/main/java/com/springone/myrestaurants/web/RestaurantController.java new file mode 100644 index 000000000..b536facc4 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-original/src/main/java/com/springone/myrestaurants/web/RestaurantController.java @@ -0,0 +1,68 @@ +package com.springone.myrestaurants.web; + +import org.springframework.core.convert.support.GenericConversionService; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.WebDataBinder; +import org.springframework.web.bind.annotation.InitBinder; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; + +import com.springone.myrestaurants.domain.Restaurant; +import com.springone.myrestaurants.domain.UserAccount; + +@RequestMapping("/restaurants") +@Controller +public class RestaurantController extends BaseApplicationController { + + + @RequestMapping(value = "/{id}", method = RequestMethod.GET) + public String show(@PathVariable("id") Long id, Model model) { + model.addAttribute("restaurant", restaurantDao.findRestaurant(id)); + model.addAttribute("itemId", id); + return "restaurants/show"; + } + + @RequestMapping(method = RequestMethod.GET) + public String list(@RequestParam(value = "page", required = false) Integer page, + @RequestParam(value = "size", required = false) Integer size, + Model model) { + if (page != null || size != null) { + int sizeNo = size == null ? 10 : size.intValue(); + model.addAttribute("restaurants", restaurantDao.findRestaurantEntries(page == null ? 0 : (page.intValue() - 1) * sizeNo, sizeNo)); + float nrOfPages = (float) restaurantDao.countRestaurants() / sizeNo; + model.addAttribute("maxPages", (int) ((nrOfPages > (int) nrOfPages || nrOfPages == 0.0) ? nrOfPages + 1 : nrOfPages)); + } else { + model.addAttribute("restaurants", restaurantDao.findAllRestaurants()); + } + return "restaurants/list"; + } + + @RequestMapping(value = "/{id}/{userId}", params = "favorite", method = RequestMethod.PUT) + public String addFavoriteRestaurant(@PathVariable("id") Long id, + @PathVariable("userId") Long userId, + Model model) { + Restaurant restaurant = this.restaurantDao.findRestaurant(id); + UserAccount account = this.userAccountDao.findUserAccount(userId); + account.getFavorites().add(restaurant); + this.userAccountDao.persist(account); + addDateTimeFormatPatterns(model); + model.addAttribute("useraccount", account); + model.addAttribute("itemId", id); + return "redirect:/useraccounts/" + account.getId(); + } + + + + + @InitBinder + void registerConverters(WebDataBinder binder) { + if (binder.getConversionService() instanceof GenericConversionService) { + GenericConversionService conversionService = (GenericConversionService) binder.getConversionService(); + conversionService.addConverter(getRestaurantConverter()); + } + } + +} diff --git a/spring-data-neo4j-examples/myrestaurants-original/src/main/java/com/springone/myrestaurants/web/SignUpController.java b/spring-data-neo4j-examples/myrestaurants-original/src/main/java/com/springone/myrestaurants/web/SignUpController.java new file mode 100644 index 000000000..9875e3200 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-original/src/main/java/com/springone/myrestaurants/web/SignUpController.java @@ -0,0 +1,114 @@ +package com.springone.myrestaurants.web; + +import java.util.Collection; + +import javax.validation.Valid; + +import org.springframework.core.convert.converter.Converter; +import org.springframework.core.convert.support.GenericConversionService; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.WebDataBinder; +import org.springframework.web.bind.annotation.InitBinder; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; + +import com.springone.myrestaurants.domain.Restaurant; +import com.springone.myrestaurants.domain.UserAccount; + +@RequestMapping("/useraccounts") +@Controller +public class SignUpController extends BaseApplicationController { + + + @RequestMapping(method = RequestMethod.POST) + public String create(@Valid UserAccount userAccount, BindingResult result, Model model) { + if (result.hasErrors()) { + model.addAttribute("userAccount", userAccount); + addDateTimeFormatPatterns(model); + return "useraccounts/create"; + } + userAccountDao.persist(userAccount); + return "redirect:/useraccounts/" + userAccount.getId(); + } + + @RequestMapping(params = "form", method = RequestMethod.GET) + public String createForm(Model model) { + model.addAttribute("userAccount", new UserAccount()); + addDateTimeFormatPatterns(model); + return "useraccounts/create"; + } + + + @RequestMapping(value = "/{id}", method = RequestMethod.GET) + public String show(@PathVariable("id") Long id, Model model) { + addDateTimeFormatPatterns(model); + model.addAttribute("useraccount", userAccountDao.findUserAccount(id)); + model.addAttribute("itemId", id); + return "useraccounts/show"; + } + + @RequestMapping(method = RequestMethod.PUT) + public String update(@Valid UserAccount userAccount, BindingResult result, Model model) { + if (result.hasErrors()) { + model.addAttribute("userAccount", userAccount); + addDateTimeFormatPatterns(model); + return "useraccounts/update"; + } + userAccountDao.merge(userAccount); + return "redirect:/useraccounts/" + userAccount.getId(); + } + + @RequestMapping(value = "/{id}", params = "form", method = RequestMethod.GET) + public String updateForm(@PathVariable("id") Long id, Model model) { + model.addAttribute("userAccount", userAccountDao.findUserAccount(id)); + addDateTimeFormatPatterns(model); + return "useraccounts/update"; + } + + @RequestMapping(value = "/{username}", params = "form2", method = RequestMethod.GET) + public String updateForm(@PathVariable("username") String userName, Model model) { + UserAccount userAccount = userAccountDao.findByName(userName); + model.addAttribute("userAccount", userAccount); + addDateTimeFormatPatterns(model); + return "useraccounts/update"; + } + + + + @ModelAttribute("restaurants") + public Collection populateRestaurants() { + return restaurantDao.findAllRestaurants(); + } + + + Converter getRestaurantConverterFromString() { + return new Converter() { + public Restaurant convert(String id) { + return restaurantDao.findRestaurant(Long.valueOf(id)); + } + }; + } + + Converter getUserAccountConverter() { + return new Converter() { + public String convert(UserAccount userAccount) { + return new StringBuilder().append(userAccount.getUserName()).append(" ").append(userAccount.getFirstName()).append(" ").append(userAccount.getLastName()).toString(); + } + }; + } + + @InitBinder + void registerConverters(WebDataBinder binder) { + if (binder.getConversionService() instanceof GenericConversionService) { + GenericConversionService conversionService = (GenericConversionService) binder.getConversionService(); + conversionService.addConverter(getRestaurantConverter()); + conversionService.addConverter(getUserAccountConverter()); + conversionService.addConverter(getRestaurantConverterFromString()); + } + } + +} diff --git a/spring-data-neo4j-examples/myrestaurants-original/src/main/resources/META-INF/persistence.xml b/spring-data-neo4j-examples/myrestaurants-original/src/main/resources/META-INF/persistence.xml new file mode 100644 index 000000000..cc5b976d9 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-original/src/main/resources/META-INF/persistence.xml @@ -0,0 +1,12 @@ + + + + org.hibernate.ejb.HibernatePersistence + + + + + + + + diff --git a/spring-data-neo4j-examples/myrestaurants-original/src/main/resources/META-INF/spring/applicationContext-security.xml b/spring-data-neo4j-examples/myrestaurants-original/src/main/resources/META-INF/spring/applicationContext-security.xml new file mode 100644 index 000000000..54e54fd11 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-original/src/main/resources/META-INF/spring/applicationContext-security.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring-data-neo4j-examples/myrestaurants-original/src/main/resources/META-INF/spring/applicationContext.xml b/spring-data-neo4j-examples/myrestaurants-original/src/main/resources/META-INF/spring/applicationContext.xml new file mode 100644 index 000000000..7ae1d3d68 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-original/src/main/resources/META-INF/spring/applicationContext.xml @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/spring-data-neo4j-examples/myrestaurants-original/src/main/resources/META-INF/spring/database.properties b/spring-data-neo4j-examples/myrestaurants-original/src/main/resources/META-INF/spring/database.properties new file mode 100644 index 000000000..b9a17c86b --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-original/src/main/resources/META-INF/spring/database.properties @@ -0,0 +1,4 @@ +database.driverClassName=org.hsqldb.jdbcDriver +database.url=jdbc:hsqldb:hsql://localhost:9001 +database.username=sa +database.password= diff --git a/spring-data-neo4j-examples/myrestaurants-original/src/main/resources/log4j.properties b/spring-data-neo4j-examples/myrestaurants-original/src/main/resources/log4j.properties new file mode 100644 index 000000000..369a4c7c6 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-original/src/main/resources/log4j.properties @@ -0,0 +1,20 @@ +log4j.rootLogger=error, stdout + +log4j.appender.stdout=org.apache.log4j.ConsoleAppender +log4j.appender.stdout.layout=org.apache.log4j.PatternLayout + +# Print the date in ISO 8601 format +log4j.appender.stdout.layout.ConversionPattern=%d [%t] %-5p %c - %m%n + +log4j.appender.R=org.apache.log4j.RollingFileAppender +log4j.appender.R.File=application.log + +log4j.appender.R.MaxFileSize=100KB +# Keep one backup file +log4j.appender.R.MaxBackupIndex=1 + +log4j.appender.R.layout=org.apache.log4j.PatternLayout +log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n + +log4j.category.org.springframework.jdbc=INFO + diff --git a/spring-data-neo4j-examples/myrestaurants-original/src/main/resources/restaurants-sample-data.sql b/spring-data-neo4j-examples/myrestaurants-original/src/main/resources/restaurants-sample-data.sql new file mode 100644 index 000000000..a30dbb9de --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-original/src/main/resources/restaurants-sample-data.sql @@ -0,0 +1,50 @@ +insert into restaurant (name, city, state, zip_code, version) values('Subway', 'Plymouth', 'WI', '53073', 1); +insert into restaurant (name, city, state, zip_code, version) values('Boston Market', 'Gaithersburg', 'MD', '20877', 1); +insert into restaurant (name, city, state, zip_code, version) values('Subway Subs', 'Santa Teresa', 'NM', '88008', 1); +insert into restaurant (name, city, state, zip_code, version) values('Arby''s Roast Beef Restaurant', 'Klamath Falls', 'OR', '97603', 1); +insert into restaurant (name, city, state, zip_code, version) values('Bellefleur Winery & Restaurant', 'Carlsbad', 'CA', '92008', 1); +insert into restaurant (name, city, state, zip_code, version) values('Huddle House', 'Calhoun', 'GA', '30701', 1); +insert into restaurant (name, city, state, zip_code, version) values('John Browne''s Pub & Eatery', 'Indianapolis', 'IN', '46235', 1); +insert into restaurant (name, city, state, zip_code, version) values('Ling''s Express', 'Milwaukee', 'WI', '53217', 1); +insert into restaurant (name, city, state, zip_code, version) values('Chubys''s', 'Odell', 'OR', '97044', 1); +insert into restaurant (name, city, state, zip_code, version) values('Bojangles', 'Columbia', 'SC', '29203', 1); +insert into restaurant (name, city, state, zip_code, version) values('NPC International', 'Memphis', 'TN', '38134', 1); +insert into restaurant (name, city, state, zip_code, version) values('Pancake Cafe', 'Naperville', 'IL', '60540', 1); +insert into restaurant (name, city, state, zip_code, version) values('Hong & Kong Restaurant', 'Chelmsford', 'MA', '01824', 1); +insert into restaurant (name, city, state, zip_code, version) values('The Chicken Cooperative', 'Ketchum', 'OK', '74349', 1); +insert into restaurant (name, city, state, zip_code, version) values('Subway', 'Lonoke', 'AR', '72086', 1); +insert into restaurant (name, city, state, zip_code, version) values('Domino''s Pizza', 'Loveland', 'CO', '80537', 1); +insert into restaurant (name, city, state, zip_code, version) values('Carl''s Jr', 'Peoria', 'IL', '61615', 1); +insert into restaurant (name, city, state, zip_code, version) values('El Toro Bar & Grill', 'Shawnee', 'KS', '66216', 1); +insert into restaurant (name, city, state, zip_code, version) values('Subway Sandwiches & Salads', 'New Orleans', 'LA', '70123', 1); +insert into restaurant (name, city, state, zip_code, version) values('Subway', 'Decatur', 'GA', '30030', 1); +insert into restaurant (name, city, state, zip_code, version) values('Arby''s', 'Indianapolis', 'IN', '46268', 1); +insert into restaurant (name, city, state, zip_code, version) values('China King', 'Cedar Rapids', 'IA', '52404', 1); +insert into restaurant (name, city, state, zip_code, version) values('Subway Sandwiches & Salads', 'Knoxville', 'TN', '37924', 1); +insert into restaurant (name, city, state, zip_code, version) values('Luciano Italian Restaurant', 'Oakton', 'VA', '22124', 1); +insert into restaurant (name, city, state, zip_code, version) values('Fruition', 'Portland', 'OR', '97210', 1); +insert into restaurant (name, city, state, zip_code, version) values('Blough''s Delicatessen', 'Davidsville', 'PA', '15928', 1); +insert into restaurant (name, city, state, zip_code, version) values('Hardee''s of Murfreesboro No 4', 'Murfreesboro', 'TN', '37128', 1); +insert into restaurant (name, city, state, zip_code, version) values('Dairy Queen restaurant ', 'Carter Lake', 'IA', '51510', 1); +insert into restaurant (name, city, state, zip_code, version) values('Imperial Wok Chinese Restaurant', 'Shreveport', 'LA', '71118', 1); +insert into restaurant (name, city, state, zip_code, version) values('Hardee''s', 'Waldorf', 'MD', '20601', 1); +insert into restaurant (name, city, state, zip_code, version) values('Cinnabon', 'Gainesville', 'FL', '32605', 1); +insert into restaurant (name, city, state, zip_code, version) values('Angle Inn Restaurant', 'Rockford', 'IL', '61103', 1); +insert into restaurant (name, city, state, zip_code, version) values('Casey''s Carry Out Pizza', 'Thomson', 'IL', '61285', 1); +insert into restaurant (name, city, state, zip_code, version) values('Sonic Drive In', 'Salt Lake City', 'UT', '84118', 1); +insert into restaurant (name, city, state, zip_code, version) values('Mcdonald''s restaurant ', 'Racine', 'WI', '53406', 1); +insert into restaurant (name, city, state, zip_code, version) values('Huhot Mongolian Grill', 'Omaha', 'NE', '68154', 1); +insert into restaurant (name, city, state, zip_code, version) values('Giovanni''s Pizzeria', 'Las Vegas', 'NV', '89123', 1); +insert into restaurant (name, city, state, zip_code, version) values('Bangkok Royal', 'Waco', 'TX', '76706', 1); +insert into restaurant (name, city, state, zip_code, version) values('Golden Coin Bake Shop & Restaurant', 'Waipahu', 'HI', '96797', 1); +insert into restaurant (name, city, state, zip_code, version) values('Cristaudo''s Grand Avenue', 'Carbondale', 'IL', '62901', 1); +insert into restaurant (name, city, state, zip_code, version) values('O''Charley''s Restaurant', 'Independence', 'MO', '64057', 1); +insert into restaurant (name, city, state, zip_code, version) values('A1 Ocean Cafe', 'San Francisco', 'CA', '94104', 1); +insert into restaurant (name, city, state, zip_code, version) values('Alberto''s Mexican Food', 'Corona', 'CA', '92880', 1); +insert into restaurant (name, city, state, zip_code, version) values('Beach Dog Computer Center', 'Hilo', 'HI', '96720', 1); +insert into restaurant (name, city, state, zip_code, version) values('Burger King', 'Houston', 'TX', '77070', 1); +insert into restaurant (name, city, state, zip_code, version) values('Fox River Brew Pub', 'Oshkosh', 'WI', '54901', 1); +insert into restaurant (name, city, state, zip_code, version) values('Buffas Delicatessen', 'New York', 'NY', '10012', 1); +insert into restaurant (name, city, state, zip_code, version) values('Maria''s Mexican Bistro Inc', 'Brooklyn', 'NY', '11215', 1); +insert into restaurant (name, city, state, zip_code, version) values('Sue''s Restaurant', 'Providence', 'RI', '02903', 1); +insert into restaurant (name, city, state, zip_code, version) values('Dairy Queen Brazier', 'Cameron', 'MO', '64429', 1); \ No newline at end of file diff --git a/spring-data-neo4j-examples/myrestaurants-original/src/main/resources/schema.sql b/spring-data-neo4j-examples/myrestaurants-original/src/main/resources/schema.sql new file mode 100644 index 000000000..a788dd2c9 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-original/src/main/resources/schema.sql @@ -0,0 +1,8 @@ +CREATE TABLE restaurant ( + id BIGINT IDENTITY PRIMARY KEY, + name VARCHAR(255), + version BIGINT, + zip_code VARCHAR(255), + city VARCHAR(255), + state VARCHAR(255) + ); \ No newline at end of file diff --git a/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/META-INF/MANIFEST.MF b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/META-INF/MANIFEST.MF new file mode 100644 index 000000000..5e9495128 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/META-INF/MANIFEST.MF @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +Class-Path: + diff --git a/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/classes/alt.properties b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/classes/alt.properties new file mode 100644 index 000000000..48df87ff7 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/classes/alt.properties @@ -0,0 +1 @@ +styleSheet=resources/styles/alt.css diff --git a/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/classes/standard.properties b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/classes/standard.properties new file mode 100644 index 000000000..d8dc0164d --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/classes/standard.properties @@ -0,0 +1 @@ +styleSheet=resources/styles/standard.css diff --git a/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/i18n/application.properties b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/i18n/application.properties new file mode 100644 index 000000000..81ead0928 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/i18n/application.properties @@ -0,0 +1,29 @@ +#Updated at Wed Sep 22 21:53:31 EDT 2010 +#Wed Sep 22 21:53:31 EDT 2010 +label_com_springone_myrestaurants_domain_useraccount_username=User Name +label_com_springone_myrestaurants_domain_useraccount_birthdate=Birth Date +label_com_springone_myrestaurants_domain_useraccount_favorites=Favorites +label_com_springone_myrestaurants_domain_restaurant_city=City +menu_item_restaurant_new_label=Restaurant +menu_item_restaurant_fav_label=Restaurants +label_com_springone_myrestaurants_domain_useraccount_lastname=Last Name +menu_item_useraccount_new_label=User Account +label_com_springone_myrestaurants_domain_restaurant_plural=Restaurants +label_com_springone_myrestaurants_domain_restaurant_id=Id +label_com_springone_myrestaurants_domain_useraccount=User Account +label_com_springone_myrestaurants_domain_restaurant_name=Name +label_com_springone_myrestaurants_domain_restaurant=Restaurant +menu_item_restaurant_list_label=Restaurants +menu_category_restaurant_label=Restaurant +label_com_springone_myrestaurants_domain_useraccount_plural=User Accounts +label_com_springone_myrestaurants_domain_useraccount_version=Version +label_com_springone_myrestaurants_domain_useraccount_firstname=First Name +menu_category_useraccount_label=User Account +label_com_springone_myrestaurants_domain_restaurant_state=State +menu_item_useraccount_list_label=User Accounts +label_com_springone_myrestaurants_domain_restaurant_zipcode=Zip Code +menu_item_useraccount_login_label=User Account +menu_item_useraccount_logout_label=User Account +label_com_springone_myrestaurants_domain_restaurant_version=Version +label_com_springone_myrestaurants_domain_useraccount_id=Id +application_name=MyRestaurants diff --git a/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/i18n/messages.properties b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/i18n/messages.properties new file mode 100644 index 000000000..154d5aa0a --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/i18n/messages.properties @@ -0,0 +1,94 @@ +#menu +global_menu_login=Log in +global_menu_logout=Log out +global_menu_new=Create a new {0} +global_menu_list=List all {0} +global_menu_find=Find by {0} +global_language_switch=Switch language to {0} +global_language=Language +global_sponsored=Sponsored by SpringSource +global_theme=Theme +global_theme_alt=alt +global_theme_standard=standard +global_generic={0} +user_menu_new=Sign up for a {0} +restaurant_menu_fav=Manage favorite {0} + +#welcome page +welcome_titlepane=Welcome to {0} +welcome_h3=Welcome to {0} +welcome_text=This is a sample application created for SpringOne 2010 to showcase the new and tasty Spring and Neo4J integration features. Enjoy! + +#entity labels +entity_list_all=List all {0} +entity_show=Show {0} +entity_create=Create new {0} +entity_update=Update {0} +entity_favorite=Favorite {0} +entity_delete=Delete {0} +entity_find=Find by {0} +entity_not_found=No {0} found. +entity_not_found_single=No {0} found with this id. +entity_dependency_required=The following dependencies need to be created first: +entity_reference_not_managed=This relationship is managed from the {0} side. + +#button labels +button_home=Home +button_save=Save +button_update=Update +button_find=Find +button_cancel=Cancel +button_proceed=Proceed +button_submit=Submit +button_reset=Reset +button_end=End +button_showmessage=Show Message +button_showstacktrace=Show Stack Trace +button_showcookie=Show Cookie + +#field labels +field_simple_validation=Enter {0} {1} +field_invalid_email=Please enter a valid email +field_invalid_number=Number with \\'-\\' or \\'.\\' allowed +field_invalid_integer=Integer numbers only +field_invalid=Please enter valid {0} +field_required=required + +#list labels +list_first=First Page +list_next=Next Page +list_previous=Previous Page +list_last=Last Page +list_page=Page {0} of {1} +list_size=List results per page: + +#selenium +selenium_menu_test_suite=Test Suite + +#exception +exception_message=Exception Message +exception_stacktrace=Exception Stack Trace +exception_cookie=Cookies +exception_details=Details + +#dataAccessFailure_jspx +error_dataaccessfailure_title=Data access failure +error_dataaccessfailure_problemdescription=Sorry, a problem occurred while accessing the database. + +#resourceNotFound_jspx +error_resourcenotfound_title=Requested Resource Not Found +error_resourcenotfound_problemdescription=Sorry, we did not find the resource you were looking for. + +#uncaughtException_jspx +error_uncaughtexception_title=Internal Error +error_uncaughtexception_problemdescription=Sorry, we encountered an internal error. + +#security +security_login_title=Spring Security Login +security_login_message=Please sign in with your user name and password. +security_login_form_name=Name +security_login_form_name_message=Enter your user name +security_login_form_password=Password +security_login_form_password_message=Enter your password +security_login_unsuccessful=Your login attempt was not successful, try again. Reason: +security_logout=Logout \ No newline at end of file diff --git a/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/layouts/default.jspx b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/layouts/default.jspx new file mode 100644 index 000000000..d68496e5f --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/layouts/default.jspx @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + <spring:message code="welcome_h3" arguments="${app_name}" /> + + + +
+ + +
+ + +
+
+ + diff --git a/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/layouts/layouts.xml b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/layouts/layouts.xml new file mode 100644 index 000000000..3c9d6d4bb --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/layouts/layouts.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + diff --git a/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/spring/webmvc-config.xml b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/spring/webmvc-config.xml new file mode 100644 index 000000000..b03864904 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/spring/webmvc-config.xml @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + dataAccessFailure + resourceNotFound + resourceNotFound + resourceNotFound + + + + + + + + + + + + + /WEB-INF/layouts/layouts.xml + + /WEB-INF/views/**/views.xml + + + + diff --git a/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/form/create.tagx b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/form/create.tagx new file mode 100644 index 000000000..37e006781 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/form/create.tagx @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+
+
+
\ No newline at end of file diff --git a/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/form/dependency.tagx b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/form/dependency.tagx new file mode 100644 index 000000000..86011b91a --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/form/dependency.tagx @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + +

+ +

+
+
+
+
\ No newline at end of file diff --git a/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/form/fields/checkbox.tagx b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/form/fields/checkbox.tagx new file mode 100644 index 000000000..3e7c0604e --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/form/fields/checkbox.tagx @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + ${field} + + +
+ + + + + + + + + + +
+
+
+
\ No newline at end of file diff --git a/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/form/fields/column.tagx b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/form/fields/column.tagx new file mode 100644 index 000000000..11e9c56c4 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/form/fields/column.tagx @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/form/fields/datetime.tagx b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/form/fields/datetime.tagx new file mode 100644 index 000000000..ec4adbf68 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/form/fields/datetime.tagx @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + ${field} + + + + + + + +
+ + + + + + + +
+ +
+
+ + + + + + + + + + + +
+
+
+
\ No newline at end of file diff --git a/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/form/fields/display.tagx b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/form/fields/display.tagx new file mode 100644 index 000000000..4e4f86e43 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/form/fields/display.tagx @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + + + + + + + +
+
+
+
+
\ No newline at end of file diff --git a/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/form/fields/editor.tagx b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/form/fields/editor.tagx new file mode 100644 index 000000000..959a5fb41 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/form/fields/editor.tagx @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ${field} + + + +
+ + +
+ + +
+
+
+
\ No newline at end of file diff --git a/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/form/fields/input.tagx b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/form/fields/input.tagx new file mode 100644 index 000000000..de26cefde --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/form/fields/input.tagx @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ${field} + + +
+ + + + + + + +
+ +
+
+ + + + + + + + + + + +
+
+
+
\ No newline at end of file diff --git a/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/form/fields/reference.tagx b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/form/fields/reference.tagx new file mode 100644 index 000000000..89695122a --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/form/fields/reference.tagx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + +
+ + + + + + + + ${fn:escapeXml(add_message)} + + + + + ( + + ) + +
+
+ +
+
\ No newline at end of file diff --git a/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/form/fields/select.tagx b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/form/fields/select.tagx new file mode 100644 index 000000000..09122bb0d --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/form/fields/select.tagx @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ${field} + + +
+ + + + + + + + + + + +
+ +
+
+
+ + + + + + + +
+ +
+
+
+
+ + + + + + +
+ + + +
+
+
+ +
+
\ No newline at end of file diff --git a/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/form/fields/simple.tagx b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/form/fields/simple.tagx new file mode 100644 index 000000000..390afa45f --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/form/fields/simple.tagx @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+
+
+
\ No newline at end of file diff --git a/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/form/fields/table.tagx b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/form/fields/table.tagx new file mode 100644 index 000000000..99c0989a8 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/form/fields/table.tagx @@ -0,0 +1,159 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + + + + + + + ${fn:escapeXml(show_label)} + + + + + + + + + ${fn:escapeXml(update_label)} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
\ No newline at end of file diff --git a/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/form/fields/textarea.tagx b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/form/fields/textarea.tagx new file mode 100644 index 000000000..f8f05b67d --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/form/fields/textarea.tagx @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ${field} + + + +
+ + +
+ + +
+
+ +
+
\ No newline at end of file diff --git a/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/form/find.tagx b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/form/find.tagx new file mode 100644 index 000000000..8644d776c --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/form/find.tagx @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+
+
+
\ No newline at end of file diff --git a/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/form/list.tagx b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/form/list.tagx new file mode 100644 index 000000000..3202f2bc9 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/form/list.tagx @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/form/show.tagx b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/form/show.tagx new file mode 100644 index 000000000..5dfa3784e --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/form/show.tagx @@ -0,0 +1,113 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/form/update.tagx b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/form/update.tagx new file mode 100644 index 000000000..1dfdf45eb --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/form/update.tagx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + +
+
+
+
\ No newline at end of file diff --git a/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/menu/category.tagx b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/menu/category.tagx new file mode 100644 index 000000000..f6383f513 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/menu/category.tagx @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + +
  • +

    + +

    +
      + +
    +
  • + +
    +
    \ No newline at end of file diff --git a/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/menu/item.tagx b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/menu/item.tagx new file mode 100644 index 000000000..b0c466e65 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/menu/item.tagx @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + +
  • + + + + +
  • + +
    +
    \ No newline at end of file diff --git a/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/menu/menu.tagx b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/menu/menu.tagx new file mode 100644 index 000000000..9c3f2e7c8 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/menu/menu.tagx @@ -0,0 +1,13 @@ + + + + + + + + +
      + +
    +
    +
    \ No newline at end of file diff --git a/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/util/language.tagx b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/util/language.tagx new file mode 100644 index 000000000..aa1cd5adb --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/util/language.tagx @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + ${fn:escapeXml(lang_label)} + + + + diff --git a/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/util/load-scripts.tagx b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/util/load-scripts.tagx new file mode 100644 index 000000000..a89a63292 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/util/load-scripts.tagx @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/util/pagination.tagx b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/util/pagination.tagx new file mode 100644 index 000000000..b4d394ce0 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/util/pagination.tagx @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ${i} + + + + + + + + + + + + + + + ${first_label} + + + + + + + + + + + ${previous_label} + + + + + + + + + + + + + + ${next_label} + + + + + + + + + + + ${last_label} + + + + \ No newline at end of file diff --git a/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/util/panel.tagx b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/util/panel.tagx new file mode 100644 index 000000000..e8a43fc69 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/util/panel.tagx @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + ${id} + + + + ${openPane} + + + + ${title} + + + +
    + + +
    +
    +
    diff --git a/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/util/placeholder.tagx b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/util/placeholder.tagx new file mode 100644 index 000000000..65ee2e4b7 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/util/placeholder.tagx @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/util/theme.tagx b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/util/theme.tagx new file mode 100644 index 000000000..fe0c628aa --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/tags/util/theme.tagx @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + ${theme_standard} + + + + + + + + + + + + ${theme_alt} + + + \ No newline at end of file diff --git a/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/views/dataAccessFailure.jspx b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/views/dataAccessFailure.jspx new file mode 100644 index 000000000..e815684ea --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/views/dataAccessFailure.jspx @@ -0,0 +1,29 @@ +
    + + + +

    ${fn:escapeXml(title)}

    +

    + +

    + +

    +

    + +

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

    +
    +
    +
    + diff --git a/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/views/footer.jspx b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/views/footer.jspx new file mode 100644 index 000000000..89af49c71 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/views/footer.jspx @@ -0,0 +1,36 @@ + + diff --git a/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/views/header.jspx b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/views/header.jspx new file mode 100644 index 000000000..fea815207 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/views/header.jspx @@ -0,0 +1,10 @@ + \ No newline at end of file diff --git a/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/views/index-template.jspx b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/views/index-template.jspx new file mode 100644 index 000000000..871bc55ca --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/views/index-template.jspx @@ -0,0 +1,10 @@ +
    + + + + +

    + +

    +
    +
    \ No newline at end of file diff --git a/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/views/index.jspx b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/views/index.jspx new file mode 100644 index 000000000..75ce000a4 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/views/index.jspx @@ -0,0 +1,13 @@ +
    + + + + +

    + +

    +

    + +

    +
    +
    \ No newline at end of file diff --git a/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/views/login.jspx b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/views/login.jspx new file mode 100644 index 000000000..df4b9bc4b --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/views/login.jspx @@ -0,0 +1,59 @@ +
    + + + + +
    +

    + + + . +

    +
    +
    + +

    + +

    +
    + +
    +
    + + + + +
    +
    +
    + + + + +
    +
    +
    + + + + + +
    +
    +
    +
    + diff --git a/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/views/menu.jspx b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/views/menu.jspx new file mode 100644 index 000000000..eadb91b36 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/views/menu.jspx @@ -0,0 +1,36 @@ + + diff --git a/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/views/resourceNotFound.jspx b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/views/resourceNotFound.jspx new file mode 100644 index 000000000..fce7f5b03 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/views/resourceNotFound.jspx @@ -0,0 +1,28 @@ +
    + + + +

    ${fn:escapeXml(title)}

    +

    + +

    + +

    +

    + +

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

    +
    +
    +
    \ No newline at end of file diff --git a/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/views/restaurants/create.jspx b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/views/restaurants/create.jspx new file mode 100644 index 000000000..3a5a1da07 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/views/restaurants/create.jspx @@ -0,0 +1,11 @@ + +
    + + + + + + + + +
    diff --git a/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/views/restaurants/list.jspx b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/views/restaurants/list.jspx new file mode 100644 index 000000000..d927c3334 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/views/restaurants/list.jspx @@ -0,0 +1,12 @@ + +
    + + + + + + + + + +
    diff --git a/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/views/restaurants/show.jspx b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/views/restaurants/show.jspx new file mode 100644 index 000000000..8dc605306 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/views/restaurants/show.jspx @@ -0,0 +1,10 @@ + +
    + + + + + + + +
    diff --git a/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/views/restaurants/update.jspx b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/views/restaurants/update.jspx new file mode 100644 index 000000000..2f785b808 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/views/restaurants/update.jspx @@ -0,0 +1,10 @@ + +
    + + + + + + + +
    diff --git a/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/views/restaurants/views.xml b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/views/restaurants/views.xml new file mode 100644 index 000000000..7467779c7 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/views/restaurants/views.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/views/uncaughtException.jspx b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/views/uncaughtException.jspx new file mode 100644 index 000000000..2196d3886 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/views/uncaughtException.jspx @@ -0,0 +1,28 @@ +
    + + + +

    ${fn:escapeXml(title)}

    +

    + +

    + +

    +

    + +

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

    +
    +
    +
    \ No newline at end of file diff --git a/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/views/useraccounts/create.jspx b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/views/useraccounts/create.jspx new file mode 100644 index 000000000..638992ac2 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/views/useraccounts/create.jspx @@ -0,0 +1,11 @@ + +
    + + + + + + + + +
    diff --git a/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/views/useraccounts/list.jspx b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/views/useraccounts/list.jspx new file mode 100644 index 000000000..209518bc3 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/views/useraccounts/list.jspx @@ -0,0 +1,13 @@ + +
    + + + + + + + + + + +
    diff --git a/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/views/useraccounts/show.jspx b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/views/useraccounts/show.jspx new file mode 100644 index 000000000..fe2b3fbf1 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/views/useraccounts/show.jspx @@ -0,0 +1,11 @@ + +
    + + + + + + + + +
    diff --git a/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/views/useraccounts/update.jspx b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/views/useraccounts/update.jspx new file mode 100644 index 000000000..78a36af99 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/views/useraccounts/update.jspx @@ -0,0 +1,11 @@ + +
    + + + + + + + + +
    diff --git a/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/views/useraccounts/views.xml b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/views/useraccounts/views.xml new file mode 100644 index 000000000..6e5f648c8 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/views/useraccounts/views.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/views/views.xml b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/views/views.xml new file mode 100644 index 000000000..e92932a94 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/views/views.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/web.xml b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 000000000..5fe5a1054 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,110 @@ + + + + + myrestaurants-original + + Roo generated myrestaurants application + + + + + defaultHtmlEscape + true + + + + contextConfigLocation + classpath*:META-INF/spring/applicationContext*.xml + + + + Spring OpenEntityManagerInViewFilter + org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter + + + + + + + + springSecurityFilterChain + org.springframework.web.filter.DelegatingFilterProxy + + + CharacterEncodingFilter + org.springframework.web.filter.CharacterEncodingFilter + + encoding + UTF-8 + + + forceEncoding + true + + + + + HttpMethodFilter + org.springframework.web.filter.HiddenHttpMethodFilter + + + Spring OpenEntityManagerInViewFilter + /* + + + + + + springSecurityFilterChain + /* + + + CharacterEncodingFilter + /* + + + + HttpMethodFilter + /* + + + + + org.springframework.web.context.ContextLoaderListener + + + + + myrestaurants + org.springframework.web.servlet.DispatcherServlet + + contextConfigLocation + /WEB-INF/spring/webmvc-config.xml + + 1 + + + + myrestaurants + / + + + + 10 + + + + / + + + + java.lang.Exception + /uncaughtException + + + + 404 + /resourceNotFound + + diff --git a/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/images/add.png b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/images/add.png new file mode 100644 index 0000000000000000000000000000000000000000..d5bfa0719bc3a2ce4fc529403f0acd6b6057c956 GIT binary patch literal 739 zcmV<90v!E`P)BG67=JY6c|L1R-#TR>fC$3^Y%QEnYO1xHsf)+GU`3F<{J0kR(;pbF3)zyg$H+idfnl-wl5Wkh!vUH z4Z32YP=l_}1rZd1W_D&^$A($A+&a0e&P?xx0!ctY2}*<#p+qPVN*B(YzvAWXa*%bzq z7Fz41LKILT(GWohi9|LgIzSZBhb*Zf6R6O}WYQ4GOi&71s9lmll0x6;8&ILOl$j(c z0Z1T(6Tg09{?wd{moFHNN6PS?$|e>1MxSJ(0Z7o2)J-Zv|>acY@f`(Y@g7GwsEj5NLQo+q|HsxQ5}XSX_d@*^A9ZT9=A{W~j+$GyI1 zc4oqTHx@1FlRjw4XWyPN5i2~l_F3@aBk!0yu^aoRDvXy}8@HCjUVQUsuSH4$T5|r< zzZOn^?Wfa6y|Q($Hx4{ws+)wX6-HP4zo!S?4KJ@7PG@G3G{CjXs(p*kIrj6rHs7_y z+=<-=Q62s9FuWa^X~WKgJIAAZJR&XBB002ovPDHLkV1jCMPILeO literal 0 HcmV?d00001 diff --git a/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/images/banner-graphic.png b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/images/banner-graphic.png new file mode 100644 index 0000000000000000000000000000000000000000..0019d000aa482b6a98e2416b2c47d12caea985fb GIT binary patch literal 17661 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 kDgT)pk literal 0 HcmV?d00001 diff --git a/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/images/create.png b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/images/create.png new file mode 100644 index 0000000000000000000000000000000000000000..d5bfa0719bc3a2ce4fc529403f0acd6b6057c956 GIT binary patch literal 739 zcmV<90v!E`P)BG67=JY6c|L1R-#TR>fC$3^Y%QEnYO1xHsf)+GU`3F<{J0kR(;pbF3)zyg$H+idfnl-wl5Wkh!vUH z4Z32YP=l_}1rZd1W_D&^$A($A+&a0e&P?xx0!ctY2}*<#p+qPVN*B(YzvAWXa*%bzq z7Fz41LKILT(GWohi9|LgIzSZBhb*Zf6R6O}WYQ4GOi&71s9lmll0x6;8&ILOl$j(c z0Z1T(6Tg09{?wd{moFHNN6PS?$|e>1MxSJ(0Z7o2)J-Zv|>acY@f`(Y@g7GwsEj5NLQo+q|HsxQ5}XSX_d@*^A9ZT9=A{W~j+$GyI1 zc4oqTHx@1FlRjw4XWyPN5i2~l_F3@aBk!0yu^aoRDvXy}8@HCjUVQUsuSH4$T5|r< zzZOn^?Wfa6y|Q($Hx4{ws+)wX6-HP4zo!S?4KJ@7PG@G3G{CjXs(p*kIrj6rHs7_y z+=<-=Q62s9FuWa^X~WKgJIAAZJR&XBB002ovPDHLkV1jCMPILeO literal 0 HcmV?d00001 diff --git a/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/images/delete.png b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/images/delete.png new file mode 100644 index 0000000000000000000000000000000000000000..1514d51a3cf1b67e1c5b9ada36f1fd474e2d214a GIT binary patch literal 655 zcmV;A0&x9_P)uEoyT++I zn$b9r%cFfhHe2K68PkBu*@^<$y+7xQ$wJ~;c5aBx$R=xq*41Wo zhwQus_VOgm0hughj}MhOvs#{>Vg09Y8WxjWUJY5YW zJ?&8eG!59Cz=|E%Ns@013KLWOLV)CObIIj_5{>{#k%TEAMs_GbdDV`x-iYsGH z#=Z{USAQA>NY(}X7=3{K8#U(k2*|8J(R-+sudaynhucHbwAMTnor{mwqO^w7JHzaBsT z{O^B8RYf5+LvDs&KmRKVd78=o{`1#HTiEo_OolaGleS)G+IQ#sUI`b*pv<`1zCJ=H0jd{{2S>p`ri%{LsXJ%FbMS z$#S`6f|?OG!^Jxczkf6Q`UNF{l0Sd`ad7zm>({^EzyAS6{{CgrkluOb3l1A>ZU2~A zK+FZ=zkmP!`TOVhpFbzBzFaPmD2$N3;+$pK?>zdet`f0002ovPDHLkV1gy;I?Vt8 literal 0 HcmV?d00001 diff --git a/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/images/fav-del.png b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/images/fav-del.png new file mode 100644 index 0000000000000000000000000000000000000000..faca5ba94f44f7f0d971da2061bcd9bf67957871 GIT binary patch literal 840 zcmV-O1GoH%P)1S| zO-$2Z0EYX0-MU}4jILuFW3Y`*P=g{&K=2nO{>5lQNW>EfnwXH7XuKIOB;LGwB197p z#u$%y&vks%LtxeeF^$jlH%>kXstXAp5liv=wePvnUb_-~4?}ZNU;mG3j{@lmkt3hvf zH^i*fN4iwU0t${rr>5qH?pi{#`=reh2uy#QgW2tE!fN9;(nic^4>7N=50&Vc)+|^p zqYh^3VWgt*JZPLsLnk zRt+6aXYmi~z1D}-xctKd=30B?{p7^?JE8ke&;*^+N|%Q3h@?l?*I6hO{kR<+9UWba ztR89)R3uPu-orh1Yxoh)Q!@R#G!t?W*66EuWPhLLT;S{MQd3I{5CrMV{CAZG?Qu6Q zJ{_BR`J7<3D!=yCicK~sfk0dTK-I0jFH~H}DJM_&0KO!^;(qx1EZv~FUf)8;SGczy z64RgUC6(dI>6(*g_07$p)#W{Iud}sNW5E8!2S6s1iAJN@Y}Q<5a=YEtIF3R{GYm~r zI~+$4gwN-zECRrPpdwck#Z)Sl+)Abxrb2QYN0KCt<8}3Jhr@wkSfy(PLH+`*rguv- SAPBMm00003Me zyLa!26DJsOgTTPRRo^DP{C-`I$I$GZFAGq0RaF%(^;C6W_%z)9czxxq8awIOXFqTLV)*i(;UCZxd>Z;M zXS%DTv$3%J`2RtL&-m*56aMl&I5lj4yzaxV6I#M1um0RsQ)Ca+(=o{7WjYsoQ#9ginvA2jH@ z2o0_&*BXqaLj*X5elUKN;a0u$`lzEsfx3V$&_w1h4kw~@nw11}4J6zSJZrxG{)GUW z__BMM;Tkm`{y&%GPrCkh zt3cJ3zf8Y4S-F`R*$zBfT%bLji-jBFV5VS=l5G!bB)F7Wm|5Qcejcb=6slRHB&7a> z@v}Ia;<*=x+$D2mxfS8wWBRd`N0BFT>w_L~4n-CwmS?|iXo~26{r^FPP5R}xXYaqh z_mPW&s|GSap;T`?U5UqQ$D=u-9CG}uV$XlyVqs!tVqo5Te@Tj3J+f-31|U^w&@azv zz3h4s50kJco17r4#F=M@oF$T_x#h8I0E!mrwiyYfZn)jg!od0P!<`Rb-h0V}qp1dR w8PSrrcC_r?=d<})WumxhfzgDf!NS4<0EPeCd`9I|6951J07*qoM6N<$f{E=l3jhEB literal 0 HcmV?d00001 diff --git a/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/images/favicon.ico b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/images/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..c2f2b6ccdaa425cbd4acdff6e32860723ca35c87 GIT binary patch literal 1406 zcmeHEOHWfl7(JKUOABpjsqzp-K}A3W!TO@KmWzM|MMMWIRxhX_VL@Dpp)pEOo<^|Y zSrmNKLIHz@L}UC3CbBY`7=sIvn0BuQXJh36f^?aOyKw{h@uGe%%Wq^169do=n}I~R6hvCr3tVvMAWnoLz7vK zrO%(BZka@ARX?KW6vnlT=-3oo?Q#Qc?_g^kLRfksRJJxW3`{_oQw7nxfY1vgkd2Fw z-=9Zq-xwk)+o9;5hE^7g^BtqWokg_tKg7ij7s?v%0gh?-7QTRMeg$=f1ESxHYtBc| zrRIV2c%iJOJcN3{C*{qT&5#C4p)SwY*g9S zP))p0W+Z#gB%LK0aREiVb(f9k_2g7YG=Ef*NDD?%Y&>{Kk{5t=Z$iR$>u)A??2e>b JCH$-BKLHYvzV844 literal 0 HcmV?d00001 diff --git a/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/images/list.png b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/images/list.png new file mode 100644 index 0000000000000000000000000000000000000000..acc30b853b3740bad231e4daa8e9f5a81f3f757b GIT binary patch literal 473 zcmV;~0Ve*5P)x=~R!WME*cb6K0H8ItD70ARH|h P00000NkvXXu0mjfzPQHT literal 0 HcmV?d00001 diff --git a/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/images/resultset_first.png b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/images/resultset_first.png new file mode 100644 index 0000000000000000000000000000000000000000..b03eaf8b5416fa6878165d95116e73003f8445f5 GIT binary patch literal 522 zcmV+l0`>igP)ufs8f5Kzx*fI63}@)AAFXgQp7K#X5)&2^7g z_9O9^7^ARqyc%qAP{1M7?|}io8xW>dotf=a%%ZSXBBI&Rf<-t`#(~H!2g~*8&15{# zVXjXMwHZYVJ6lk!gb6?r$g;SuO>QI;yeQ51#0H@Z6sk_ajqECPZEqLq!PMf5MQ5gS1i(Owi(ut_CY*w|Psf-Iy6=08Y` zHnsuDs6h)+OwcBqopImX_v1c`5LkrSCWWWFUvW71z%eN$cB714YVYtd`}$X<%JbQ) zM;;CHJDu;#-swg0iul07{S&4s!M>4O+`c|6_tW_i^y+I%|aPsIlEx5K=^ki~8LwqDy-)t}thx1D9 zB6|#ECQ%2a60OQQ<{6-)5|okv)6E>1Xpv+@iIv@MJ8v15 zR{N~1_2z$e&R$WgNhIQelIl1rK}5XruIN#GDZA_4bJqcqID*^mXXFcgt1K5iK7HPL zwLW*@#tu()#Cyd@CHc^75Ul6pYT4PCpSeBE)hh4bY>IO8de(|Ml<%@O-40!dwX61{2C5s-llVw2V@@N0oo_PPieZ!0Y2~+R( zk!(QTf=B;X9DnzJ@u9c>OP4(U@7{849!UlyO@H`*;lVfmCvAW6f9CF&{}ZR*{jXDW zb_vl21ozzrYJBy-Vb$aRjjJF3@7nm}zjw#A|58cE9uZ}LbIY~=6ShA8U$XeY|MDdd zfQCH!?_7WRzhvaG%|sbsT7Kz&`}!yUix%Do#>T_{_Ei`DO9UTSBkH=Hg(w4*^UnUS zTk-IJ<+2C=ZObqG7Z2FGlB7VCN;>(!bn*TFHYMl(i+Sx`L~=ArL>~EXU3lidsO!!J pWF;gqzXSh89JkLNxXeT<1_12n>%V}Y6R`jQ002ovPDHLkV1iLCz99er literal 0 HcmV?d00001 diff --git a/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/images/resultset_previous.png b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/images/resultset_previous.png new file mode 100644 index 0000000000000000000000000000000000000000..18f9cc10948f025fde708328fa704b520161e5f6 GIT binary patch literal 389 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 literal 0 HcmV?d00001 diff --git a/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/styles/alt.css b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/styles/alt.css new file mode 100644 index 000000000..c562d00ac --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/styles/alt.css @@ -0,0 +1,362 @@ +/* main elements */ + +body,div,td { + font-family: Arial, Helvetica, sans-serif; + font-size: 12px; + color: #666; +} + +body { + background-color: #fff; + text-align: center; +} + +#header { + margin-bottom: 1em; +} + +#wrapper { + width:800px; + min-width: 800px; + max-width: 800px; + margin-right: auto; + margin-left: auto; + + /* fix max-width incompatibility in IE6 */ + width:expression(document.body.clientWidth > 800? "800px": "auto" ); + + overflow:hidden; + display:block; +} + +/* header and footer elements */ + +#main { + overflow:hidden; + display:box; +} + +#menu { + background: #eee; + position:relative; + float:right; + left:0px; + width:220px; + margin-left:15px; +} + +#menu ul{ + list-style: none; + margin: 0; + padding: 0; +} + +#menu ul li{ + padding: 0px; +} + + +#menu a, #menu h2 { + display: block; + margin: 0; + padding: 2px 6px; + color:#FFFFFF; +} + +#menu h2 { + color: #fff; + background: #F71220; + text-transform: uppercase; + font-weight:bold; + font-size: 12px; +} + +#menu a { + color: #666666; + background: #efefef; + text-decoration: none; + padding: 2px 12px; +} + +#menu a:hover { + color: #F71220; + background: #fff; +} + +#footer { + background:#fff; + border:none; + margin-top:15px; + border-top:1px solid #999999; +} + +#footer .new { + float:left; +} + +#footer a:link {color: #7db223;} + +.quicklinks { + clear:both; + padding-bottom: 15px +} +.quicklinks span { + float: right; +} + +label { + width:100px; + float:left; + margin-left: 5px; + margin-top: 0px; +} + +input { + height:20px; +} + +input, textarea, select { + border:1px solid #B3B3B3; +} + +input.image { + border: none; + height: auto; +} + +submit { + height:25px; +} + +div { + text-align: left; +} + +div .box { + display:block; + margin-left:105px; +} + +/* menu elements*/ + +a.menu, a.menu:link, a.menu:visited {display:block; width:150px; height:25px;} + +/* text styles */ + +h1,h2,h3 { + font-family: Helvetica, sans-serif; + color: #7db223; +} + +h1 { + font-size: 20px; + line-height: 26px; +} + +h2 { + font-size: 18px; + line-height: 20px; +} + +h3 { + font-size: 15px; + line-height: 21px; + color:#555; +} + +h4 { + font-size: 14px; + line-height: 20px; +} + +.errors { + color: red; + font-weight: bold; + display: block; + margin-left: 105px; +} + +a { + text-decoration: underline; + font-size: 12px; +} + +a img { + border: 0 none; + vertical-align: middle; +} + +tr:nth-child(odd) { + background-color: #FFFFFF; +} + +tr:nth-child(even) { + background-color: #EFEFEF; +} + +a:link { + color: #7db223; +} + +a:hover { + color: #456314; +} + +a:active { + color: #7db223; +} + +a:visited { + color: #7db223; +} + +li { + padding-top: 5px; + text-align: left; +} + +ul li { + margin:0 0 0.25em 0; + padding:0; +} +/* table elements */ + +table { + background: #EEEEEE; + margin: 2px 0 0 0; + border: 1px solid #BBBBBB; + border-collapse: collapse; + width: 100% +} + +table table { + margin: -5px 0; + border: 0px solid #e0e7d3; + width: 100%; +} + +table td,table th { + padding: 2px; + border: 1px solid #CCCCCC; +} + +table td form { + text-align:center; + vertical-align: middle; + margin: 0px; +} + +table th { + font-size: 0.9em; + text-align: left; + font-weight: bold; + color: #FFF; + background: #999; +} + +table thead { + font-weight: bold; + font-style: italic; + background-color: #BBBBBB; +} + +table a:link {color: #303030;} + +caption { + caption-side: top; + width: auto; + text-align: left; + font-size: 12px; + color: #848f73; + padding-bottom: 4px; +} + +fieldset { + background: #e0e7d3; + padding: 8px; + padding-bottom: 22px; + border: none; + width: 560px; +} + +fieldset label { + width: 70px; + float: left; + margin-top: 1.7em; + margin-left: 20px; +} + +fieldset textfield { + margin: 3px; + height: 20px; + background: #e0e7d3; +} + +fieldset textarea { + margin: 3px; + height: 165px; + background: #e0e7d3; +} + +fieldset input { + margin: 3px; + height: 20px; + background: #e0e7d3; +} + +fieldset table { + width: 100%; +} + +fieldset th { + padding-left: 25px; +} + +.table-buttons { + background-color:#fff; + border:none; +} + +.table-buttons td { + border:none; +} + +.submit input { + border: 1px solid #BBBBBB; + color:#777777; + padding:2px 7px; + font-size:11px; + text-transform:uppercase; + font-weight:bold; + height:24px; +} + +.updated { + background:#ecf1e5; + font-size:11px; + margin-left:2px; + border:4px solid #ecf1e5; +} + +.updated td { + padding:2px 8px; + font-size:11px; + color:#888888; +} + +.dijitTextArea{ + min-height:5.5em !important; + max-height:22em !important; + overflow-y: auto !important; + max-width: 175px; +} + +.RichTextEditable{ + min-height:18em !important; + max-height:18em !important; +} + +.flag { + height: 11px; + width: 16px; +} \ No newline at end of file diff --git a/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/styles/standard.css b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/styles/standard.css new file mode 100644 index 000000000..d1a65be31 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-original/src/main/webapp/styles/standard.css @@ -0,0 +1,366 @@ +/* main elements */ + +body,div,td { + font-family: Arial, Helvetica, sans-serif; + font-size: 12px; + color: #666; +} + +body { + background-color: #fff; + text-align: center; +} + +#header { + margin-bottom: 1em; +} + +#wrapper { + width:800px; + min-width: 800px; + max-width: 800px; + margin-right: auto; + margin-left: auto; + + /* fix max-width incompatibility in IE6 */ + width:expression(document.body.clientWidth > 800? "800px": "auto" ); + + overflow:hidden; + display:block; +} + +/* header and footer elements */ + +#main { + overflow:hidden; + display:box; +} + +#menu { + background: #eee; + position:relative; + float:left; + left:0px; + width:220px; + margin-right:15px; +} + +#menu ul{ + list-style: none; + margin: 0; + padding: 0; +} + +#menu ul li{ + padding: 0px; +} + + +#menu a, #menu h2 { + display: block; + margin: 0; + padding: 2px 6px; + color:#FFFFFF; +} + +#menu h2 { + color: #fff; + background: #492FFC; + text-transform: uppercase; + font-weight:bold; + font-size: 12px; +} + +#menu a { + color: #666666; + background: #efefef; + text-decoration: none; + padding: 2px 12px; +} + +#menu a:hover { + color: #492FFC; + background: #fff; +} + +#footer { + background:#fff; + border:none; + margin-top:15px; + border-top:1px solid #999999; +} + +#footer .new { + float:left; +} + +#footer a:link {color: #7db223;} + +.quicklinks { + clear:both; + padding-bottom: 15px +} +.quicklinks span { + float: right; +} + +table.navigation { + border: 0px; +} + +label { + width:100px; + float:left; + margin-left: 5px; + margin-top: 0px; +} + +input { + height:20px; +} + +input, textarea, select { + border:1px solid #B3B3B3; +} + +input.image { + border: none; + height: auto; +} + +submit { + height:25px; +} + +div { + text-align: left; +} + +div .box { + display:block; + margin-left:105px; +} + +/* menu elements*/ + +a.menu, a.menu:link, a.menu:visited {display:block; width:150px; height:25px;} + +/* text styles */ + +h1,h2,h3 { + font-family: Helvetica, sans-serif; + color: #7db223; +} + +h1 { + font-size: 20px; + line-height: 26px; +} + +h2 { + font-size: 18px; + line-height: 20px; +} + +h3 { + font-size: 15px; + line-height: 21px; + color:#555; +} + +h4 { + font-size: 14px; + line-height: 20px; +} + +.errors { + color: red; + font-weight: bold; + display: block; + margin-left: 105px; +} + +a { + text-decoration: underline; + font-size: 12px; +} + +a img { + border: 0 none; + vertical-align: middle; +} + +tr:nth-child(odd) { + background-color: #FFFFFF; +} + +tr:nth-child(even) { + background-color: #EFEFEF; +} + +a:link { + color: #7db223; +} + +a:hover { + color: #456314; +} + +a:active { + color: #7db223; +} + +a:visited { + color: #7db223; +} + +li { + padding-top: 5px; + text-align: left; +} + +ul li { + margin:0 0 0.25em 0; + padding:0; +} +/* table elements */ + +table { + background: #EEEEEE; + margin: 2px 0 0 0; + border: 1px solid #BBBBBB; + border-collapse: collapse; + width: 100% +} + +table table { + margin: -5px 0; + border: 0px solid #e0e7d3; + width: 100%; +} + +table td,table th { + padding: 2px; + border: 1px solid #CCCCCC; +} + +table td form { + text-align:center; + vertical-align: middle; + margin: 0px; +} + +table th { + font-size: 0.9em; + text-align: left; + font-weight: bold; + color: #FFF; + background: #999; +} + +table thead { + font-weight: bold; + font-style: italic; + background-color: #BBBBBB; +} + +table a:link {color: #303030;} + +caption { + caption-side: top; + width: auto; + text-align: left; + font-size: 12px; + color: #848f73; + padding-bottom: 4px; +} + +fieldset { + background: #e0e7d3; + padding: 8px; + padding-bottom: 22px; + border: none; + width: 560px; +} + +fieldset label { + width: 70px; + float: left; + margin-top: 1.7em; + margin-left: 20px; +} + +fieldset textfield { + margin: 3px; + height: 20px; + background: #e0e7d3; +} + +fieldset textarea { + margin: 3px; + height: 165px; + background: #e0e7d3; +} + +fieldset input { + margin: 3px; + height: 20px; + background: #e0e7d3; +} + +fieldset table { + width: 100%; +} + +fieldset th { + padding-left: 25px; +} + +.table-buttons { + background-color:#fff; + border:none; +} + +.table-buttons td { + border:none; +} + +.submit input { + border: 1px solid #BBBBBB; + color:#777777; + padding:2px 7px; + font-size:11px; + text-transform:uppercase; + font-weight:bold; + height:24px; +} + +.updated { + background:#ecf1e5; + font-size:11px; + margin-left:2px; + border:4px solid #ecf1e5; +} + +.updated td { + padding:2px 8px; + font-size:11px; + color:#888888; +} + +.dijitTextArea{ + min-height:5.5em !important; + max-height:22em !important; + overflow-y: auto !important; + max-width: 175px; +} + +.RichTextEditable{ + min-height:18em !important; + max-height:18em !important; +} + +.flag { + height: 11px; + width: 16px; +} \ No newline at end of file diff --git a/spring-data-neo4j-examples/myrestaurants-social/.classpath b/spring-data-neo4j-examples/myrestaurants-social/.classpath new file mode 100644 index 000000000..8ca155bb0 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/.classpath @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/spring-data-neo4j-examples/myrestaurants-social/.gitignore b/spring-data-neo4j-examples/myrestaurants-social/.gitignore new file mode 100644 index 000000000..b83d22266 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/.gitignore @@ -0,0 +1 @@ +/target/ diff --git a/spring-data-neo4j-examples/myrestaurants-social/.project b/spring-data-neo4j-examples/myrestaurants-social/.project new file mode 100644 index 000000000..376234672 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/.project @@ -0,0 +1,58 @@ + + + myrestaurants-social + + + + + + org.eclipse.wst.jsdt.core.javascriptValidator + + + + + org.eclipse.ajdt.core.ajbuilder + + + + + org.eclipse.wst.common.project.facet.core.builder + + + + + org.eclipse.wst.validation.validationbuilder + + + + + org.eclipse.ajdt.core.ajbuilder + + + aspectPath + org.springframework.aspects + + + + + org.springframework.ide.eclipse.core.springbuilder + + + + + org.maven.ide.eclipse.maven2Builder + + + + + + org.maven.ide.eclipse.maven2Nature + org.eclipse.wst.common.project.facet.core.nature + org.eclipse.ajdt.ui.ajnature + org.eclipse.jdt.core.javanature + org.eclipse.wst.common.modulecore.ModuleCoreNature + org.eclipse.jem.workbench.JavaEMFNature + org.springframework.ide.eclipse.core.springnature + org.eclipse.wst.jsdt.core.jsNature + + diff --git a/spring-data-neo4j-examples/myrestaurants-social/.settings/.jsdtscope b/spring-data-neo4j-examples/myrestaurants-social/.settings/.jsdtscope new file mode 100644 index 000000000..b13d30357 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/.settings/.jsdtscope @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/spring-data-neo4j-examples/myrestaurants-social/.settings/org.eclipse.jdt.core.prefs b/spring-data-neo4j-examples/myrestaurants-social/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 000000000..e045805a8 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,6 @@ +#Tue Sep 28 12:45:37 EDT 2010 +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6 +org.eclipse.jdt.core.compiler.compliance=1.6 +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.source=1.6 diff --git a/spring-data-neo4j-examples/myrestaurants-social/.settings/org.eclipse.jst.jsp.core.prefs b/spring-data-neo4j-examples/myrestaurants-social/.settings/org.eclipse.jst.jsp.core.prefs new file mode 100644 index 000000000..91726735a --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/.settings/org.eclipse.jst.jsp.core.prefs @@ -0,0 +1,30 @@ +#Mon Oct 04 16:27:22 EDT 2010 +eclipse.preferences.version=1 +validateFragments=false +validation.actions-missing-required-attribute=1 +validation.actions-non-empty-inline-tag=2 +validation.actions-unexpected-rtexprvalue=2 +validation.actions-unknown-attribute=2 +validation.directive-include-fragment-file-not-found=-1 +validation.directive-include-fragment-file-not-specified=-1 +validation.directive-taglib-duplicate-prefixes-different-uris=-1 +validation.directive-taglib-duplicate-prefixes-same-uris=-1 +validation.directive-taglib-missing-prefix=-1 +validation.directive-taglib-missing-uri-or-tagdir=-1 +validation.directive-taglib-unresolvable-uri-or-tagdir=-1 +validation.el-general-syntax=1 +validation.el-lexical-failure=-1 +validation.java-=-1 +validation.java-local-variable-is-never-used=-1 +validation.java-null-local-variable-reference=-1 +validation.java-potential-null-local-variable-reference=-1 +validation.java-unused-import=-1 +validation.translation-tag-class-not-found=2 +validation.translation-tei-class-not-found=2 +validation.translation-tei-class-not-instantiated=2 +validation.translation-tei-class-runtime-exception=2 +validation.translation-tei-message=1 +validation.translation-usebean-ambiguous-type-info=2 +validation.translation-usebean-invalid-id=1 +validation.translation-usebean-missing-type-info=1 +validation.use-project-settings=true diff --git a/spring-data-neo4j-examples/myrestaurants-social/.settings/org.eclipse.wst.common.component b/spring-data-neo4j-examples/myrestaurants-social/.settings/org.eclipse.wst.common.component new file mode 100644 index 000000000..daa748eb5 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/.settings/org.eclipse.wst.common.component @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/spring-data-neo4j-examples/myrestaurants-social/.settings/org.eclipse.wst.common.project.facet.core.xml b/spring-data-neo4j-examples/myrestaurants-social/.settings/org.eclipse.wst.common.project.facet.core.xml new file mode 100644 index 000000000..708f4a79d --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/.settings/org.eclipse.wst.common.project.facet.core.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/spring-data-neo4j-examples/myrestaurants-social/.settings/org.eclipse.wst.jsdt.ui.superType.container b/spring-data-neo4j-examples/myrestaurants-social/.settings/org.eclipse.wst.jsdt.ui.superType.container new file mode 100644 index 000000000..3bd5d0a48 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/.settings/org.eclipse.wst.jsdt.ui.superType.container @@ -0,0 +1 @@ +org.eclipse.wst.jsdt.launching.baseBrowserLibrary \ No newline at end of file diff --git a/spring-data-neo4j-examples/myrestaurants-social/.settings/org.eclipse.wst.jsdt.ui.superType.name b/spring-data-neo4j-examples/myrestaurants-social/.settings/org.eclipse.wst.jsdt.ui.superType.name new file mode 100644 index 000000000..05bd71b6e --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/.settings/org.eclipse.wst.jsdt.ui.superType.name @@ -0,0 +1 @@ +Window \ No newline at end of file diff --git a/spring-data-neo4j-examples/myrestaurants-social/.settings/org.eclipse.wst.validation.prefs b/spring-data-neo4j-examples/myrestaurants-social/.settings/org.eclipse.wst.validation.prefs new file mode 100644 index 000000000..e13c1a099 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/.settings/org.eclipse.wst.validation.prefs @@ -0,0 +1,10 @@ +#Mon Oct 04 16:34:14 EDT 2010 +DELEGATES_PREFERENCE=delegateValidatorList +USER_BUILD_PREFERENCE=enabledBuildValidatorListorg.eclipse.jst.j2ee.internal.web.validation.UIWarValidator;org.eclipse.jst.j2ee.internal.classpathdep.ClasspathDependencyValidator; +USER_MANUAL_PREFERENCE=enabledManualValidatorListorg.eclipse.jst.j2ee.internal.web.validation.UIWarValidator;org.eclipse.jst.j2ee.internal.classpathdep.ClasspathDependencyValidator; +USER_PREFERENCE=overrideGlobalPreferencestruedisableAllValidationfalseversion1.2.200.v201005271900 +eclipse.preferences.version=1 +override=true +suspend=false +vals/org.eclipse.jst.jsp.core.JSPContentValidator/global=FF01 +vf.version=3 diff --git a/spring-data-neo4j-examples/myrestaurants-social/.settings/org.eclipse.wst.ws.service.policy.prefs b/spring-data-neo4j-examples/myrestaurants-social/.settings/org.eclipse.wst.ws.service.policy.prefs new file mode 100644 index 000000000..4332f1638 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/.settings/org.eclipse.wst.ws.service.policy.prefs @@ -0,0 +1,3 @@ +#Wed Sep 29 14:35:52 EDT 2010 +eclipse.preferences.version=1 +org.eclipse.wst.ws.service.policy.projectEnabled=false diff --git a/spring-data-neo4j-examples/myrestaurants-social/.settings/org.maven.ide.eclipse.prefs b/spring-data-neo4j-examples/myrestaurants-social/.settings/org.maven.ide.eclipse.prefs new file mode 100644 index 000000000..7ec30560c --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/.settings/org.maven.ide.eclipse.prefs @@ -0,0 +1,9 @@ +#Tue Oct 05 19:39:51 EDT 2010 +activeProfiles= +eclipse.preferences.version=1 +fullBuildGoals=process-test-resources +includeModules=false +resolveWorkspaceProjects=true +resourceFilterGoals=process-resources resources\:testResources +skipCompilerPlugin=true +version=1 diff --git a/spring-data-neo4j-examples/myrestaurants-social/pom.xml b/spring-data-neo4j-examples/myrestaurants-social/pom.xml new file mode 100644 index 000000000..3d2eb3bac --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/pom.xml @@ -0,0 +1,534 @@ + + + 4.0.0 + com.springone.myrestaurants + myrestaurants-social + war + 2.0.0.BUILD-SNAPSHOT + myrestaurants-social + + 3.0.5.RELEASE + 2.0.0.BUILD-SNAPSHOT + 1.6.12.M1 + 1.6.1 + UTF-8 + 3.0.2.RELEASE + + + + spring-maven-release + Spring Maven Release Repository + http://maven.springframework.org/release + + + spring-maven-milestone + Spring Maven Milestone Repository + http://maven.springframework.org/milestone + + + spring-maven-snapshot + + true + + Springframework Maven SNAPSHOT Repository + http://maven.springframework.org/snapshot + + + JBoss Repo + https://repository.jboss.org/nexus/content/repositories/releases + JBoss 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 + + + + + + junit + junit + 4.8.1 + test + + + log4j + log4j + 1.2.16 + + + org.slf4j + slf4j-api + ${slf4j.version} + + + org.slf4j + jcl-over-slf4j + ${slf4j.version} + + + org.slf4j + slf4j-log4j12 + ${slf4j.version} + + + org.aspectj + aspectjrt + ${aspectj.version} + + + javax.servlet + servlet-api + 2.5 + provided + + + net.sf.flexjson + flexjson + 2.0 + + + + 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.hibernate + hibernate-core + 3.5.5-Final + + + org.hibernate + hibernate-entitymanager + 3.5.5-Final + + + cglib + cglib + + + dom4j + dom4j + + + + + org.hibernate.javax.persistence + hibernate-jpa-2.0-api + 1.0.0.Final + + + org.hibernate + hibernate-validator + 4.1.0.Final + + + javax.xml.bind + jaxb-api + + + com.sun.xml.bind + jaxb-impl + + + + + javax.validation + validation-api + 1.0.0.GA + + + cglib + cglib-nodep + 2.2 + + + javax.transaction + jta + 1.1 + + + org.springframework + spring-jdbc + ${spring.version} + + + org.springframework + spring-orm + ${spring.version} + + + commons-pool + commons-pool + 1.5.4 + + + commons-logging + commons-logging + + + + + commons-dbcp + commons-dbcp + 1.3 + + + commons-logging + commons-logging + + + commons-pool + commons-pool + + + xerces + xerces + + + xerces + xercesImpl + + + xml-apis + xml-apis + + + + + org.apache.tiles + tiles-core + 2.2.1 + + + commons-logging + commons-logging + + + + + org.apache.tiles + tiles-jsp + 2.2.1 + + + org.springframework + spring-web + ${spring.version} + + + commons-logging + commons-logging + + + + + org.springframework + spring-webmvc + ${spring.version} + + + commons-logging + commons-logging + + + + + org.springframework.webflow + spring-js + 2.1.1.RELEASE + + + org.springframework + spring-beans + + + org.springframework + spring-context + + + org.springframework + spring-core + + + org.springframework + spring-context-support + + + commons-logging + commons-logging + + + + + commons-digester + commons-digester + 2.0 + + + commons-logging + commons-logging + + + + + commons-fileupload + commons-fileupload + 1.2.1 + + + commons-logging + commons-logging + + + + + javax.servlet + jstl + 1.2 + + + javax.el + el-api + 1.0 + provided + + + joda-time + joda-time + 1.6 + + + org.springframework.security + spring-security-core + ${spring-security.version} + + + commons-logging + commons-logging + + + + + org.springframework.security + spring-security-config + ${spring-security.version} + + + commons-logging + commons-logging + + + + + org.springframework.security + spring-security-web + ${spring-security.version} + + + org.springframework.security + spring-security-taglibs + ${spring-security.version} + + + org.hsqldb + hsqldb + 2.0.0 + + + org.springframework.data + spring-data-neo4j + ${spring-data-graph.version} + + + + + + org.apache.maven.plugins + maven-war-plugin + 2.1-beta-1 + + + + org.apache.maven.plugins + maven-compiler-plugin + 2.1 + + 1.6 + 1.6 + + + + org.codehaus.mojo + aspectj-maven-plugin + 1.0 + + + + org.aspectj + aspectjrt + ${aspectj.version} + + + org.aspectj + aspectjtools + ${aspectj.version} + + + + + + compile + test-compile + + + + + true + + + org.springframework + spring-aspects + + + org.springframework.data + spring-data-neo4j + + + 1.6 + 1.6 + + + + org.apache.maven.plugins + maven-resources-plugin + 2.4.2 + + UTF-8 + + + + org.apache.maven.plugins + maven-surefire-plugin + 2.5 + + always + + + + org.apache.maven.plugins + maven-assembly-plugin + 2.2-beta-5 + + + jar-with-dependencies + + + + + org.apache.maven.plugins + maven-deploy-plugin + 2.5 + + + + org.apache.maven.plugins + maven-eclipse-plugin + 2.7 + + true + false + 2.0 + + + org.eclipse.ajdt.core.ajbuilder + + org.springframework.aspects + + + + org.springframework.ide.eclipse.core.springbuilder + + + + org.eclipse.ajdt.ui.ajnature + org.springframework.ide.eclipse.core.springnature + + + + + org.apache.maven.plugins + maven-idea-plugin + 2.2 + + true + true + + + + org.codehaus.mojo + tomcat-maven-plugin + 1.0 + + + org.mortbay.jetty + jetty-maven-plugin + 7.1.2.v20100523 + + + /${project.name} + + + + + + diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/java/com/springone/myrestaurants/data/RestaurantRepository.java b/spring-data-neo4j-examples/myrestaurants-social/src/main/java/com/springone/myrestaurants/data/RestaurantRepository.java new file mode 100644 index 000000000..b7be3c10a --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/main/java/com/springone/myrestaurants/data/RestaurantRepository.java @@ -0,0 +1,46 @@ +package com.springone.myrestaurants.data; + +import java.util.List; + +import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; + +import org.springframework.stereotype.Repository; +import org.springframework.transaction.annotation.Transactional; + +import com.springone.myrestaurants.domain.Restaurant; + +@Repository +public class RestaurantRepository { + + @PersistenceContext + private EntityManager entityManager; + + @Transactional + public Restaurant findRestaurant(Long id) { + if (id == null) return null; + final Restaurant rest = entityManager.find(Restaurant.class, id); + if (rest != null) { + rest.persist(); + } + return rest; + } + + @SuppressWarnings("unchecked") + @Transactional(readOnly=true) + public List findAllRestaurants() { + return entityManager.createQuery("select o from Restaurant o").getResultList(); + } + + @SuppressWarnings("unchecked") + @Transactional(readOnly=true) + public List findRestaurantEntries(int firstResult, int maxResults) { + return entityManager.createQuery("select o from Restaurant o").setFirstResult(firstResult).setMaxResults(maxResults).getResultList(); + } + + @Transactional + public long countRestaurants() { + return ((Number) entityManager.createQuery("select count(o) from Restaurant o").getSingleResult()).longValue(); + } + +} diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/java/com/springone/myrestaurants/data/UserAccountRepository.java b/spring-data-neo4j-examples/myrestaurants-social/src/main/java/com/springone/myrestaurants/data/UserAccountRepository.java new file mode 100644 index 000000000..c3f097e1a --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/main/java/com/springone/myrestaurants/data/UserAccountRepository.java @@ -0,0 +1,79 @@ +package com.springone.myrestaurants.data; + +import java.util.List; + +import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; +import javax.persistence.Query; + +import org.springframework.stereotype.Repository; +import org.springframework.transaction.annotation.Transactional; + +import com.springone.myrestaurants.domain.UserAccount; + +@Repository +public class UserAccountRepository { + + @PersistenceContext + private EntityManager entityManager; + + @Transactional + public UserAccount findUserAccount(Long id) { + if (id == null) return null; + final UserAccount userAccount = entityManager.find(UserAccount.class, id); + if (userAccount != null) { + userAccount.persist(); + } + return userAccount; + } + @Transactional + public UserAccount findByName(String name) { + if (name == null) return null; + Query q = entityManager.createQuery("SELECT u FROM UserAccount u WHERE u.userName = :username"); + q.setParameter("username", name); + + java.util.List resultList = q.getResultList(); + if (resultList.size() > 0) + { + final UserAccount userAccount = (UserAccount) resultList.get(0); + if (userAccount != null) { + userAccount.persist(); + } + return userAccount; + } + return null; + } + + @SuppressWarnings("unchecked") + @Transactional(readOnly=true) + public List findAllUserAccounts() { + return entityManager.createQuery("select o from UserAccount o").getResultList(); + } + + @SuppressWarnings("unchecked") + @Transactional(readOnly=true) + public List findUserAccountEntries(int firstResult, int maxResults) { + return entityManager.createQuery("select o from UserAccount o").setFirstResult(firstResult).setMaxResults(maxResults).getResultList(); + } + + + @Transactional + public long countUserAccounts() { + return ((Number) entityManager.createQuery("select count(o) from UserAccount o").getSingleResult()).longValue(); + } + + @Transactional + public void persist(UserAccount userAccount) { + this.entityManager.persist(userAccount); + this.entityManager.flush(); + userAccount.persist(); + } + + @Transactional + public UserAccount merge(UserAccount userAccount) { + userAccount.persist(); + UserAccount merged = this.entityManager.merge(userAccount); + this.entityManager.flush(); + return merged; + } +} diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/java/com/springone/myrestaurants/domain/RatedRestaurant.java b/spring-data-neo4j-examples/myrestaurants-social/src/main/java/com/springone/myrestaurants/domain/RatedRestaurant.java new file mode 100644 index 000000000..1efd8c14b --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/main/java/com/springone/myrestaurants/domain/RatedRestaurant.java @@ -0,0 +1,30 @@ +package com.springone.myrestaurants.domain; + +import java.util.ArrayList; +import java.util.Collection; + +/** + * @author Michael Hunger + * @since 02.10.2010 + */ +public class RatedRestaurant { + private final Restaurant restaurant; + private final Collection recommendations = new ArrayList(); + + public RatedRestaurant(final Restaurant restaurant) { + this.restaurant = restaurant; + } + + public void add(final Recommendation recommendation) { + recommendations.add(recommendation); + } + + public Collection getRecommendations() { + return recommendations; + } + + public Restaurant getRestaurant() { + return restaurant; + } +} + \ No newline at end of file diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/java/com/springone/myrestaurants/domain/Recommendation.java b/spring-data-neo4j-examples/myrestaurants-social/src/main/java/com/springone/myrestaurants/domain/Recommendation.java new file mode 100644 index 000000000..cf8f5f2c2 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/main/java/com/springone/myrestaurants/domain/Recommendation.java @@ -0,0 +1,46 @@ +package com.springone.myrestaurants.domain; + +import org.springframework.data.neo4j.annotation.EndNode; +import org.springframework.data.neo4j.annotation.RelationshipEntity; +import org.springframework.data.neo4j.annotation.StartNode; + +@RelationshipEntity +public class Recommendation { + @StartNode + private UserAccount user; + @EndNode + private Restaurant restaurant; + + private int stars; + private String comment; + + + public Recommendation() { + } + + public void rate(int stars, String comment) { + this.stars = stars; + this.comment = comment; + } + + public int getStars() { + return stars; + } + + public String getComment() { + return comment; + } + + public UserAccount getUser() { + return user; + } + + public Restaurant getRestaurant() { + return restaurant; + } + + + + + +} diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/java/com/springone/myrestaurants/domain/Restaurant.java b/spring-data-neo4j-examples/myrestaurants-social/src/main/java/com/springone/myrestaurants/domain/Restaurant.java new file mode 100644 index 000000000..9a2001d91 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/main/java/com/springone/myrestaurants/domain/Restaurant.java @@ -0,0 +1,91 @@ +package com.springone.myrestaurants.domain; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.Version; + +import org.springframework.data.neo4j.annotation.NodeEntity; + +@Entity +@NodeEntity(partial = true) +public class Restaurant { + + private String name; + + private String city; + + private String state; + + private String zipCode; + + public String getName() { + return this.name; + } + + public void setName(String name) { + this.name = name; + } + + public String getCity() { + return this.city; + } + + public void setCity(String city) { + this.city = city; + } + + public String getState() { + return this.state; + } + + public void setState(String state) { + this.state = state; + } + + public String getZipCode() { + return this.zipCode; + } + + public void setZipCode(String zipCode) { + this.zipCode = zipCode; + } + + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + @Column(name = "id") + private Long id; + + @Version + @Column(name = "version") + private Integer version; + + public Long getId() { + return this.id; + } + + public void setId(Long id) { + this.id = id; + } + + public Integer getVersion() { + return this.version; + } + + public void setVersion(Integer version) { + this.version = version; + } + + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("Id: ").append(getId()).append(", "); + sb.append("Version: ").append(getVersion()).append(", "); + sb.append("Name: ").append(getName()).append(", "); + sb.append("City: ").append(getCity()).append(", "); + sb.append("State: ").append(getState()).append(", "); + sb.append("ZipCode: ").append(getZipCode()); + return sb.toString(); + } +} diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/java/com/springone/myrestaurants/domain/TopRatedRestaurantFinder.java b/spring-data-neo4j-examples/myrestaurants-social/src/main/java/com/springone/myrestaurants/domain/TopRatedRestaurantFinder.java new file mode 100644 index 000000000..8215cd003 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/main/java/com/springone/myrestaurants/domain/TopRatedRestaurantFinder.java @@ -0,0 +1,107 @@ +package com.springone.myrestaurants.domain; + +import org.neo4j.graphdb.*; +import org.neo4j.graphdb.traversal.TraversalDescription; +import org.neo4j.graphdb.traversal.Traverser; +import org.neo4j.helpers.Predicate; +import org.neo4j.kernel.Traversal; +import org.neo4j.kernel.impl.traversal.TraversalDescriptionImpl; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Configurable; +import org.springframework.data.neo4j.support.GraphDatabaseContext; + +import java.util.*; + +/** + * @author Michael Hunger + * @since 02.10.2010 + */ +@Configurable +public class TopRatedRestaurantFinder { + + @Autowired + GraphDatabaseContext graphDatabaseContext; + + private static final int MAXIMUM_DEPTH = 5; + public Collection getTopNRatedRestaurants(final UserAccount user, final int n) { + final CalculateRatingPredicate calculateRatingPredicate = new CalculateRatingPredicate(); + final Node userNode=user.getPersistentState(); + final TraversalDescription traversalDescription = new TraversalDescriptionImpl() + .order(Traversal.postorderBreadthFirst()) + .prune(Traversal.pruneAfterDepth(MAXIMUM_DEPTH)) + .filter(calculateRatingPredicate) + .relationships(DynamicRelationshipType.withName("friends")); + final Traverser traverser = traversalDescription.traverse(userNode); + final Iterator it = traverser.nodes().iterator(); + while (it.hasNext()) { + it.next(); + } + return calculateRatingPredicate.getRecommendedRestaurants(n); + } + + private class CalculateRatingPredicate implements Predicate { + class AggregatedRecommendation implements Comparable { + private Node restaurant; + private Collection recommendations=new HashSet(); + double stars; + double sum; + + public AggregatedRecommendation(final Node restaurant) { + this.restaurant = restaurant; + } + + @Override + public int compareTo(final AggregatedRecommendation o) { + return stars < o.stars ? 1 : stars == o.stars ? 0 : -1; + } + + public void add(final Relationship recommendation, final int distance) { + if (recommendations.add(recommendation)) { + final Integer userStars = (Integer)recommendation.getProperty("stars", 0); + sum += userStars * Math.pow(0.5D,distance); + stars = sum / recommendations.size(); + } + } + + private RatedRestaurant toRatedRestaurant(final CalculateRatingPredicate calculateRatingPredicate) { + final RatedRestaurant ratedRestaurant = new RatedRestaurant(graphDatabaseContext.createEntityFromState(restaurant, Restaurant.class)); + for (final Relationship recommendation : recommendations) { + ratedRestaurant.add(graphDatabaseContext.createEntityFromState(recommendation, Recommendation.class)); + } + return ratedRestaurant; + } + } + + private final Map recommendedRestaurants=new HashMap(); + + public CalculateRatingPredicate() { + } + + public boolean accept(final Path path) { + final int distance = path.length(); + final Node friend = path.endNode(); + for (final Relationship recommendation : friend.getRelationships(DynamicRelationshipType.withName("recommends"))) { + final Node restaurant = recommendation.getEndNode(); + if (!recommendedRestaurants.containsKey(restaurant)) { + recommendedRestaurants.put(restaurant,new AggregatedRecommendation(restaurant)); + } + recommendedRestaurants.get(restaurant).add(recommendation,distance); + } + return true; + } + + public Collection getRecommendedRestaurants(final int n) { + final List sorted = new ArrayList(recommendedRestaurants.values()); + Collections.sort(sorted); + int index=0; + final Collection result=new ArrayList(n); + for (final AggregatedRecommendation aggregatedRecommendation : sorted) { + if (index == n) return result; + result.add(aggregatedRecommendation.toRatedRestaurant(this)); + index++; + } + return result; + } + + } +} diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/java/com/springone/myrestaurants/domain/TopRatedRestaurantTraverser.java b/spring-data-neo4j-examples/myrestaurants-social/src/main/java/com/springone/myrestaurants/domain/TopRatedRestaurantTraverser.java new file mode 100644 index 000000000..528b089d9 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/main/java/com/springone/myrestaurants/domain/TopRatedRestaurantTraverser.java @@ -0,0 +1,45 @@ +package com.springone.myrestaurants.domain; + +import org.neo4j.graphdb.DynamicRelationshipType; +import org.neo4j.graphdb.traversal.BranchOrderingPolicy; +import org.neo4j.graphdb.traversal.BranchSelector; +import org.neo4j.graphdb.traversal.TraversalBranch; +import org.neo4j.graphdb.traversal.TraversalDescription; +import org.neo4j.kernel.impl.traversal.TraversalDescriptionImpl; +import org.springframework.data.neo4j.core.FieldTraversalDescriptionBuilder; +import org.springframework.data.neo4j.core.NodeBacked; +import org.springframework.data.neo4j.mapping.Neo4JPersistentProperty; + +import java.lang.reflect.Field; + +/** + * @author Michael Hunger + * @since 02.10.2010 + * TODO: calculate a rating assigned to each restaurant that is the sum of its stars + * the stars are multiplied by pow(1/2,distance to startNode==path.depth) + */ +class TopRatedRestaurantTraverser implements FieldTraversalDescriptionBuilder { + @Override + public TraversalDescription build(NodeBacked start, Neo4JPersistentProperty field, String... params) { + return new TraversalDescriptionImpl() + .breadthFirst() + .relationships(DynamicRelationshipType.withName("friends")) + .order(new BranchOrderingPolicy() { + @Override + public BranchSelector create(final TraversalBranch startBranch) { + return new BranchSelector(){ + @Override + public TraversalBranch next() { + TraversalBranch branch=startBranch; + while (branch!=null) { + if (branch.depth() friends; + + @RelatedToVia(type = "recommends", elementClass = Recommendation.class) + Iterable recommendations; + + @GraphTraversal(traversalBuilder = TopRatedRestaurantTraverser.class, elementClass = Restaurant.class) + Iterable topRatedRestaurants; + + public Collection getTopNRatedRestaurants(int n) { + return new TopRatedRestaurantFinder().getTopNRatedRestaurants(this,n); + } + + public Collection getTop5RatedRestaurants() { + return getTopNRatedRestaurants(5); + } + + @Temporal(TemporalType.TIMESTAMP) + @DateTimeFormat(style = "S-") + private Date birthDate; + + public Set getFriends() { + return friends; + } + + public void setFriends(Set friends) { + this.friends = friends; + } + + @ManyToMany(cascade = CascadeType.ALL) + private Set favorites; + + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + @Column(name = "id") + private Long id; + + @Version + @Column(name = "version") + private Integer version; + + public Long getId() { + return this.id; + } + + public void setId(Long id) { + this.id = id; + } + + public Integer getVersion() { + return this.version; + } + + public void setVersion(Integer version) { + this.version = version; + } + + public String getUserName() { + return this.userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getFirstName() { + return this.firstName; + } + + public void setFirstName(String firstName) { + this.firstName = firstName; + } + + public String getLastName() { + return this.lastName; + } + + public void setLastName(String lastName) { + this.lastName = lastName; + } + + public String getNickname() { + return nickname; + } + + public void setNickname(String nickname) { + this.nickname = nickname; + } + + public Date getBirthDate() { + return this.birthDate; + } + + public void setBirthDate(Date birthDate) { + this.birthDate = birthDate; + } + + public Set getFavorites() { + return this.favorites; + } + + public void setFavorites(Set favorites) { + this.favorites = favorites; + } + + @Transactional + public void knows(UserAccount friend) { + relateTo(friend, "friends"); + /* + if (friends==null) { + friends=new HashSet(); + } + else friends.add(friend); + */ + } + + @Transactional + public Recommendation rate(Restaurant restaurant, int stars, String comment) { + Recommendation recommendation = (Recommendation) relateTo(restaurant, Recommendation.class, "recommends"); + recommendation.rate(stars, comment); + return recommendation; + } + public Iterable getRecommendations() { + return recommendations; + } + + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("Id: ").append(getId()).append(", "); + sb.append("Version: ").append(getVersion()).append(", "); + sb.append("UserName: ").append(getUserName()).append(", "); + sb.append("FirstName: ").append(getFirstName()).append(", "); + sb.append("LastName: ").append(getLastName()).append(", "); + sb.append("BirthDate: ").append(getBirthDate()).append(", "); + sb.append("Favorites: ").append(getFavorites() == null ? "null" : getFavorites().size()); + return sb.toString(); + } +} diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/java/com/springone/myrestaurants/web/BaseApplicationController.java b/spring-data-neo4j-examples/myrestaurants-social/src/main/java/com/springone/myrestaurants/web/BaseApplicationController.java new file mode 100644 index 000000000..ba29d67f6 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/main/java/com/springone/myrestaurants/web/BaseApplicationController.java @@ -0,0 +1,63 @@ +package com.springone.myrestaurants.web; + +import org.joda.time.format.DateTimeFormat; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.i18n.LocaleContextHolder; +import org.springframework.core.convert.converter.Converter; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.ModelAttribute; + +import com.springone.myrestaurants.data.RestaurantRepository; +import com.springone.myrestaurants.data.UserAccountRepository; +import com.springone.myrestaurants.domain.Restaurant; +import com.springone.myrestaurants.domain.UserAccount; + +@Transactional +public class BaseApplicationController { + + @Autowired + RestaurantRepository restaurantRepository; + + @Autowired + UserAccountRepository userAccountRepository; + + @ModelAttribute("currentUserAccountId") + public Long populateModelWithCurrentUserAccountIdAsLong() { + UserAccount userAccount = getCurrentUserAccount(); + if (userAccount != null) { + return userAccount.getId(); + } else { + return -1L; + } + } + + private UserAccount getCurrentUserAccount() { + String currentUser = SecurityContextHolder.getContext() + .getAuthentication().getName(); + UserAccount userAccount = userAccountRepository.findByName(currentUser); + if (userAccount != null) { + userAccount.persist(); + } + return userAccount; + } + + void addDateTimeFormatPatterns(Model model) { + model.addAttribute( + "userAccount_birthdate_date_format", + DateTimeFormat.patternForStyle("S-", + LocaleContextHolder.getLocale())); + } + + protected Converter getRestaurantConverter() { + return new Converter() { + public String convert(Restaurant restaurant) { + return new StringBuilder().append(restaurant.getName()) + .append(" ").append(restaurant.getCity()).append(" ") + .append(restaurant.getState()).toString(); + } + }; + } + +} diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/java/com/springone/myrestaurants/web/FriendController.java b/spring-data-neo4j-examples/myrestaurants-social/src/main/java/com/springone/myrestaurants/web/FriendController.java new file mode 100644 index 000000000..d1d6cdba7 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/main/java/com/springone/myrestaurants/web/FriendController.java @@ -0,0 +1,102 @@ +package com.springone.myrestaurants.web; + +import java.util.Set; + +import org.springframework.core.convert.converter.Converter; +import org.springframework.core.convert.support.GenericConversionService; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.WebDataBinder; +import org.springframework.web.bind.annotation.InitBinder; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; + +import com.springone.myrestaurants.domain.UserAccount; + +@RequestMapping("/friends") +@Controller +public class FriendController extends BaseApplicationController { + + + @RequestMapping(method = RequestMethod.POST) + public String create(FriendFormBean friend, + @ModelAttribute("currentUserAccountId") Long userId, + BindingResult result, Model model) { + if (result.hasErrors()) { + model.addAttribute("friend", friend); + return "friends/create"; + } + //TODO additional error checking + UserAccount account = this.userAccountRepository.findUserAccount(userId); + UserAccount friendAccount = this.userAccountRepository.findByName(friend.getUserName()); + if (friendAccount != null) { + account.getFriends().add(friendAccount); + } + return "redirect:/friends/" + friendAccount.getId(); + } + + @RequestMapping(params = "form", method = RequestMethod.GET) + public String createForm(Model model) { + model.addAttribute("friend", new FriendFormBean()); + return "friends/create"; + } + + @RequestMapping(value = "/{id}", method = RequestMethod.GET) + public String show(@PathVariable("id") Long id, Model model) { + UserAccount friendAccount = this.userAccountRepository.findUserAccount(id); + model.addAttribute("friend", friendAccount); + model.addAttribute("itemId", id); + return "friends/show"; + } + + @RequestMapping(method = RequestMethod.GET) + public String list(@RequestParam(value = "page", required = false) Integer page, + @RequestParam(value = "size", required = false) Integer size, + @ModelAttribute("currentUserAccountId") Long userId, + Model model) { + + UserAccount currentUser = this.userAccountRepository.findUserAccount(userId); + Set friends = currentUser.getFriends(); + model.addAttribute("friends", friends); + + return "friends/list"; + } + + @RequestMapping(value = "/{id}", method = RequestMethod.DELETE) + public String delete(@PathVariable("id") Long id, + @ModelAttribute("currentUserAccountId") Long userId, + @RequestParam(value = "page", required = false) Integer page, + @RequestParam(value = "size", required = false) Integer size, Model model) { + UserAccount account = this.userAccountRepository.findUserAccount(userId); + UserAccount friendAccount = this.userAccountRepository.findUserAccount(id); + if (account.getFriends().contains(friendAccount)) { + account.getFriends().remove(friendAccount); + } + model.addAttribute("page", (page == null) ? "1" : page.toString()); + model.addAttribute("size", (size == null) ? "10" : size.toString()); + return "redirect:/friends?page=" + ((page == null) ? "1" : page.toString()) + "&size=" + ((size == null) ? "10" : size.toString()); + } + + + Converter getUserAccountConverter() { + return new Converter() { + public String convert(UserAccount friend) { + return new StringBuilder().append(friend.getUserName()).toString(); + } + }; + } + + @InitBinder + void registerConverters(WebDataBinder binder) { + if (binder.getConversionService() instanceof GenericConversionService) { + GenericConversionService conversionService = (GenericConversionService) binder.getConversionService(); + conversionService.addConverter(getUserAccountConverter()); + } + } + + +} diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/java/com/springone/myrestaurants/web/FriendFormBean.java b/spring-data-neo4j-examples/myrestaurants-social/src/main/java/com/springone/myrestaurants/web/FriendFormBean.java new file mode 100644 index 000000000..05c89c314 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/main/java/com/springone/myrestaurants/web/FriendFormBean.java @@ -0,0 +1,26 @@ +package com.springone.myrestaurants.web; + +public class FriendFormBean { + + private long id; + + private String userName; + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } + + +} diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/java/com/springone/myrestaurants/web/RatedRestaurantBean.java b/spring-data-neo4j-examples/myrestaurants-social/src/main/java/com/springone/myrestaurants/web/RatedRestaurantBean.java new file mode 100644 index 000000000..6d813e65b --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/main/java/com/springone/myrestaurants/web/RatedRestaurantBean.java @@ -0,0 +1,52 @@ +package com.springone.myrestaurants.web; + +public class RatedRestaurantBean { + + private long id; + + // Restaurant name + private String name; + + private long recommendations; + + private double rating; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public long getId() { + return id; + } + + public void setId(long restaurantId) { + this.id = restaurantId; + } + + public long getRecommendations() { + return recommendations; + } + + public void setRecommendations(long recommendations) { + this.recommendations = recommendations; + } + + public double getRating() { + return rating; + } + + public void setRating(double rating) { + this.rating = rating; + } + + @Override + public String toString() { + return "RatedRestaurantBean [restaurantId=" + id + ", name=" + + name + ", rating=" + rating + "]"; + } + +} diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/java/com/springone/myrestaurants/web/RecommendationController.java b/spring-data-neo4j-examples/myrestaurants-social/src/main/java/com/springone/myrestaurants/web/RecommendationController.java new file mode 100644 index 000000000..c232b280d --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/main/java/com/springone/myrestaurants/web/RecommendationController.java @@ -0,0 +1,170 @@ +package com.springone.myrestaurants.web; + +import java.util.ArrayList; +import java.util.List; + +import com.springone.myrestaurants.domain.Recommendation; +import com.springone.myrestaurants.domain.Restaurant; +import com.springone.myrestaurants.domain.UserAccount; + +import org.springframework.ui.Model; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.stereotype.Controller; + +@RequestMapping("/recommendations") +@Controller +public class RecommendationController extends BaseApplicationController { + + @RequestMapping(value = "/{id}", method = RequestMethod.GET) + public String show(@PathVariable("id") Long recommendationId, + @ModelAttribute("currentUserAccountId") Long userId, + Model model) { + + Recommendation foundRec = findRecommendation(userId, recommendationId); + RecommendationFormBean bean = new RecommendationFormBean(); + if (foundRec != null) { + bean.setComments(foundRec.getComment()); + bean.setRating(foundRec.getStars()); + bean.setId(foundRec.getRelationshipId()); + Restaurant r = foundRec.getRestaurant(); + bean.setName(r.getName()); + bean.setRestaurantId(r.getId()); + } + model.addAttribute("recommendation", bean); + return "recommendations/show"; + } + + + private Recommendation findRecommendation(Long userId, + Long recommendationId) { + UserAccount account = this.userAccountRepository.findUserAccount(userId); + Iterable recs = account.getRecommendations(); + Recommendation foundRec = null; + for (Recommendation recommendation : recs) { + if (recommendation.getRelationshipId().equals(recommendationId)) { + foundRec = recommendation; + } + } + return foundRec; + } + + + @RequestMapping(method = RequestMethod.GET) + public String list(@RequestParam(value = "page", required = false) Integer page, + @RequestParam(value = "size", required = false) Integer size, + @ModelAttribute("currentUserAccountId") Long userId, + Model model) { + + UserAccount account = this.userAccountRepository.findUserAccount(userId); + Iterable recs = account.getRecommendations(); + //View expects a list with indexer access and properties that match those of the form bean. + List listRecs = new ArrayList(); + for (Recommendation recommendation : recs) { + RecommendationFormBean rfb = new RecommendationFormBean(); + final Restaurant restaurant = recommendation.getRestaurant(); + rfb.setComments(recommendation.getComment()); + rfb.setName(restaurant.getName()); + rfb.setRating(recommendation.getStars()); + rfb.setId(recommendation.getRelationshipId()); + rfb.setRestaurantId(restaurant.getId()); + listRecs.add(rfb); + } + model.addAttribute("recommendations", listRecs); + return "recommendations/list"; + } + + + @RequestMapping(method = RequestMethod.POST) + public String create(RecommendationFormBean recommendationFormBean, + @ModelAttribute("currentUserAccountId") Long userId, + BindingResult result, + Model model) { + + if (result.hasErrors()) { + model.addAttribute("recommendation", recommendationFormBean); + return "recommendations/create"; + } + long restaurantId = recommendationFormBean.getRestaurantId(); + Restaurant restaurant = this.restaurantRepository.findRestaurant(restaurantId); + UserAccount account = this.userAccountRepository.findUserAccount(userId); + Recommendation recommendation = account.rate(restaurant, + recommendationFormBean.getRating(), + recommendationFormBean.getComments()); + model.addAttribute("recommendationId", recommendation.getRelationshipId()); + return "redirect:/recommendations/" + recommendation.getRelationshipId(); + } + + @RequestMapping(value = "/{restaurantId}/{userId}", params = "form", method = RequestMethod.GET) + public String createForm(@PathVariable("restaurantId") Long restaurantId, + @PathVariable("userId") Long userId, + Model model) { + RecommendationFormBean recBean = new RecommendationFormBean(); + Restaurant restaurant = this.restaurantRepository.findRestaurant(restaurantId); + recBean.setRestaurantId(restaurantId); + recBean.setName(restaurant.getName()); + model.addAttribute("recommendation", recBean); + //currentUserId is part of the implicit model due to spring security + + //model.addAttribute("userId", userId.toString()); + return "recommendations/create"; ///" + restaurantId + "/" + userId; + } + + @RequestMapping(method = RequestMethod.PUT) + public String update(RecommendationFormBean recommendationFormBean, + @ModelAttribute("currentUserAccountId") Long userId, + BindingResult result, + Model model) { + if (result.hasErrors()) { + model.addAttribute("recommendation", recommendationFormBean); + return "recommendations/update"; + } + Recommendation foundRec = findRecommendation(userId, recommendationFormBean.getId()); + foundRec.rate(recommendationFormBean.getRating(), recommendationFormBean.getComments()); + model.addAttribute("itemId", recommendationFormBean.getId()); + return "redirect:/recommendations/" + recommendationFormBean.getId(); + } + + @RequestMapping(value = "/{id}", params = "form", method = RequestMethod.GET) + public String updateForm(@PathVariable("id") Long id, + @ModelAttribute("currentUserAccountId") Long userId, + Model model) { + Recommendation foundRec = findRecommendation(userId, id); + RecommendationFormBean recBean = new RecommendationFormBean(); + if (foundRec != null) { + recBean.setComments(foundRec.getComment()); + recBean.setId(foundRec.getRelationshipId()); + recBean.setRating(foundRec.getStars()); + recBean.setName(foundRec.getRestaurant().getName()); + recBean.setRestaurantId(foundRec.getRestaurant().getId()); + } + model.addAttribute("recommendation", recBean); + model.addAttribute("itemId", recBean.getId()); + return "recommendations/update"; + } + + @RequestMapping(value = "/{id}", method = RequestMethod.DELETE) + public String delete(@PathVariable("id") Long id, + @RequestParam(value = "page", required = false) Integer page, + @RequestParam(value = "size", required = false) Integer size, + @ModelAttribute("currentUserAccountId") Long userId, + Model model) { + Recommendation foundRec = findRecommendation(userId, id); + if (foundRec != null) { + if (foundRec.hasPersistentState()) { + foundRec.getPersistentState().delete(); + } + } + model.addAttribute("page", (page == null) ? "1" : page.toString()); + model.addAttribute("size", (size == null) ? "10" : size.toString()); + return "redirect:/recommendations?page=" + ((page == null) ? "1" : page.toString()) + "&size=" + ((size == null) ? "10" : size.toString()); + } + + + + +} diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/java/com/springone/myrestaurants/web/RecommendationFormBean.java b/spring-data-neo4j-examples/myrestaurants-social/src/main/java/com/springone/myrestaurants/web/RecommendationFormBean.java new file mode 100644 index 000000000..828ae94bc --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/main/java/com/springone/myrestaurants/web/RecommendationFormBean.java @@ -0,0 +1,61 @@ +package com.springone.myrestaurants.web; + +public class RecommendationFormBean { + + private long id; + + private long restaurantId; + + // Restaurant name + private String name; + + private int rating; + + private String comments; + + //ID is here as we need to mirror for the moment all the (graph) domain Recommendation properties in a simple javabean. + + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } + + + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public long getRestaurantId() { + return restaurantId; + } + + public void setRestaurantId(long restaurantId) { + this.restaurantId = restaurantId; + } + + public int getRating() { + return rating; + } + + + + public void setRating(int rating) { + this.rating = rating; + } + + public String getComments() { + return comments; + } + + public void setComments(String comments) { + this.comments = comments; + } +} diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/java/com/springone/myrestaurants/web/RestaurantController.java b/spring-data-neo4j-examples/myrestaurants-social/src/main/java/com/springone/myrestaurants/web/RestaurantController.java new file mode 100644 index 000000000..6bfb5c232 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/main/java/com/springone/myrestaurants/web/RestaurantController.java @@ -0,0 +1,72 @@ +package com.springone.myrestaurants.web; + +import java.util.List; + +import org.springframework.core.convert.support.GenericConversionService; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.WebDataBinder; +import org.springframework.web.bind.annotation.InitBinder; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; + +import com.springone.myrestaurants.domain.Restaurant; +import com.springone.myrestaurants.domain.UserAccount; + +@RequestMapping("/restaurants") +@Controller +public class RestaurantController extends BaseApplicationController { + + + @RequestMapping(value = "/{id}", method = RequestMethod.GET) + public String show(@PathVariable("id") Long id, Model model) { + model.addAttribute("restaurant", restaurantRepository.findRestaurant(id)); + model.addAttribute("itemId", id); + return "restaurants/show"; + } + + @RequestMapping(method = RequestMethod.GET) + public String list(@RequestParam(value = "page", required = false) Integer page, + @RequestParam(value = "size", required = false) Integer size, + Model model) { + if (page != null || size != null) { + int sizeNo = size == null ? 10 : size.intValue(); + List rests = restaurantRepository.findRestaurantEntries(page == null ? 0 : (page.intValue() - 1) * sizeNo, sizeNo); + model.addAttribute("restaurants", rests); + float nrOfPages = (float) restaurantRepository.countRestaurants() / sizeNo; + model.addAttribute("maxPages", (int) ((nrOfPages > (int) nrOfPages || nrOfPages == 0.0) ? nrOfPages + 1 : nrOfPages)); + } else { + List rests = restaurantRepository.findAllRestaurants(); + model.addAttribute("restaurants", rests); + } + return "restaurants/list"; + } + + @RequestMapping(value = "/{id}/{userId}", params = "favorite", method = RequestMethod.PUT) + public String addFavoriteRestaurant(@PathVariable("id") Long id, + @PathVariable("userId") Long userId, + Model model) { + Restaurant restaurant = this.restaurantRepository.findRestaurant(id); + UserAccount account = this.userAccountRepository.findUserAccount(userId); + account.getFavorites().add(restaurant); + this.userAccountRepository.persist(account); + addDateTimeFormatPatterns(model); + model.addAttribute("useraccount", account); + model.addAttribute("itemId", id); + return "redirect:/useraccounts/" + account.getId(); + } + + + + + @InitBinder + void registerConverters(WebDataBinder binder) { + if (binder.getConversionService() instanceof GenericConversionService) { + GenericConversionService conversionService = (GenericConversionService) binder.getConversionService(); + conversionService.addConverter(getRestaurantConverter()); + } + } + +} diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/java/com/springone/myrestaurants/web/SignUpController.java b/spring-data-neo4j-examples/myrestaurants-social/src/main/java/com/springone/myrestaurants/web/SignUpController.java new file mode 100644 index 000000000..f4d10081e --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/main/java/com/springone/myrestaurants/web/SignUpController.java @@ -0,0 +1,115 @@ +package com.springone.myrestaurants.web; + +import java.util.Collection; + +import javax.validation.Valid; + +import org.springframework.core.convert.converter.Converter; +import org.springframework.core.convert.support.GenericConversionService; +import org.springframework.stereotype.Controller; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.ui.Model; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.WebDataBinder; +import org.springframework.web.bind.annotation.InitBinder; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; + +import com.springone.myrestaurants.domain.Restaurant; +import com.springone.myrestaurants.domain.UserAccount; + +@RequestMapping("/useraccounts") +@Controller +public class SignUpController extends BaseApplicationController { + + + @RequestMapping(method = RequestMethod.POST) + public String create(@Valid UserAccount userAccount, BindingResult result, Model model) { + if (result.hasErrors()) { + model.addAttribute("userAccount", userAccount); + addDateTimeFormatPatterns(model); + return "useraccounts/create"; + } + userAccountRepository.persist(userAccount); + return "redirect:/useraccounts/" + userAccount.getId(); + } + + @RequestMapping(params = "form", method = RequestMethod.GET) + public String createForm(Model model) { + model.addAttribute("userAccount", new UserAccount()); + addDateTimeFormatPatterns(model); + return "useraccounts/create"; + } + + + @RequestMapping(value = "/{id}", method = RequestMethod.GET) + public String show(@PathVariable("id") Long id, Model model) { + addDateTimeFormatPatterns(model); + model.addAttribute("useraccount", userAccountRepository.findUserAccount(id)); + model.addAttribute("itemId", id); + return "useraccounts/show"; + } + + @RequestMapping(method = RequestMethod.PUT) + public String update(@Valid UserAccount userAccount, BindingResult result, Model model) { + if (result.hasErrors()) { + model.addAttribute("userAccount", userAccount); + addDateTimeFormatPatterns(model); + return "useraccounts/update"; + } + final UserAccount mergedAccount = userAccountRepository.merge(userAccount); + return "redirect:/useraccounts/" + mergedAccount.getId(); + } + + @RequestMapping(value = "/{id}", params = "form", method = RequestMethod.GET) + public String updateForm(@PathVariable("id") Long id, Model model) { + model.addAttribute("userAccount", userAccountRepository.findUserAccount(id)); + addDateTimeFormatPatterns(model); + return "useraccounts/update"; + } + + @RequestMapping(value = "/{username}", params = "form2", method = RequestMethod.GET) + public String updateForm(@PathVariable("username") String userName, Model model) { + UserAccount userAccount = userAccountRepository.findByName(userName); + model.addAttribute("userAccount", userAccount); + addDateTimeFormatPatterns(model); + return "useraccounts/update"; + } + + + + @ModelAttribute("restaurants") + public Collection populateRestaurants() { + return restaurantRepository.findAllRestaurants(); + } + + + Converter getRestaurantConverterFromString() { + return new Converter() { + public Restaurant convert(String id) { + return restaurantRepository.findRestaurant(Long.valueOf(id)); + } + }; + } + + Converter getUserAccountConverter() { + return new Converter() { + public String convert(UserAccount userAccount) { + return new StringBuilder().append(userAccount.getUserName()).append(" ").append(userAccount.getFirstName()).append(" ").append(userAccount.getLastName()).toString(); + } + }; + } + + @InitBinder + void registerConverters(WebDataBinder binder) { + if (binder.getConversionService() instanceof GenericConversionService) { + GenericConversionService conversionService = (GenericConversionService) binder.getConversionService(); + conversionService.addConverter(getRestaurantConverter()); + conversionService.addConverter(getUserAccountConverter()); + conversionService.addConverter(getRestaurantConverterFromString()); + } + } + +} diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/java/com/springone/myrestaurants/web/TopNController.java b/spring-data-neo4j-examples/myrestaurants-social/src/main/java/com/springone/myrestaurants/web/TopNController.java new file mode 100644 index 000000000..384a7a47d --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/main/java/com/springone/myrestaurants/web/TopNController.java @@ -0,0 +1,68 @@ +package com.springone.myrestaurants.web; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +import org.springframework.core.convert.converter.Converter; +import org.springframework.core.convert.support.GenericConversionService; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.WebDataBinder; +import org.springframework.web.bind.annotation.InitBinder; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; + +import com.springone.myrestaurants.domain.RatedRestaurant; +import com.springone.myrestaurants.domain.Recommendation; +import com.springone.myrestaurants.domain.UserAccount; + +@RequestMapping("/topn") +@Controller +public class TopNController extends BaseApplicationController { + + + @RequestMapping(method = RequestMethod.GET) + public String list(@ModelAttribute("currentUserAccountId") Long userId, + Model model) { + UserAccount currentUser = this.userAccountRepository.findUserAccount(userId); + Collection top5 = currentUser.getTop5RatedRestaurants(); + List topn = new ArrayList(); + for (RatedRestaurant rr : top5) { + RatedRestaurantBean rrb = new RatedRestaurantBean(); + rrb.setId(rr.getRestaurant().getId()); + rrb.setName(rr.getRestaurant().getName()); + float totPoints = 0; + long count = 0; + for (Recommendation r : rr.getRecommendations()) { + totPoints += r.getStars(); + count++; + } + rrb.setRating(totPoints / count); + rrb.setRecommendations(count); + topn.add(rrb); + } + model.addAttribute("topn", topn); + + return "topn/list"; + } + + Converter getUserAccountConverter() { + return new Converter() { + public String convert(UserAccount friend) { + return new StringBuilder().append(friend.getUserName()).toString(); + } + }; + } + + @InitBinder + void registerConverters(WebDataBinder binder) { + if (binder.getConversionService() instanceof GenericConversionService) { + GenericConversionService conversionService = (GenericConversionService) binder.getConversionService(); + conversionService.addConverter(getUserAccountConverter()); + } + } + + +} diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/resources/META-INF/persistence.xml b/spring-data-neo4j-examples/myrestaurants-social/src/main/resources/META-INF/persistence.xml new file mode 100644 index 000000000..b9f07c365 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/main/resources/META-INF/persistence.xml @@ -0,0 +1,14 @@ + + + + org.hibernate.ejb.HibernatePersistence + com.springone.myrestaurants.domain.UserAccount + com.springone.myrestaurants.domain.Restaurant + + + + + + + + diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/resources/META-INF/spring/applicationContext-security.xml b/spring-data-neo4j-examples/myrestaurants-social/src/main/resources/META-INF/spring/applicationContext-security.xml new file mode 100644 index 000000000..54e54fd11 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/main/resources/META-INF/spring/applicationContext-security.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/resources/META-INF/spring/applicationContext.xml b/spring-data-neo4j-examples/myrestaurants-social/src/main/resources/META-INF/spring/applicationContext.xml new file mode 100644 index 000000000..a880f22bb --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/main/resources/META-INF/spring/applicationContext.xml @@ -0,0 +1,88 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/resources/META-INF/spring/database.properties b/spring-data-neo4j-examples/myrestaurants-social/src/main/resources/META-INF/spring/database.properties new file mode 100644 index 000000000..b9a17c86b --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/main/resources/META-INF/spring/database.properties @@ -0,0 +1,4 @@ +database.driverClassName=org.hsqldb.jdbcDriver +database.url=jdbc:hsqldb:hsql://localhost:9001 +database.username=sa +database.password= diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/resources/log4j.properties b/spring-data-neo4j-examples/myrestaurants-social/src/main/resources/log4j.properties new file mode 100644 index 000000000..1cc8580b6 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/main/resources/log4j.properties @@ -0,0 +1,22 @@ +log4j.rootLogger=error, stdout + +log4j.appender.stdout=org.apache.log4j.ConsoleAppender +log4j.appender.stdout.layout=org.apache.log4j.PatternLayout + +# Print the date in ISO 8601 format +log4j.appender.stdout.layout.ConversionPattern=%d [%t] %-5p %c - %m%n + +log4j.appender.R=org.apache.log4j.RollingFileAppender +log4j.appender.R.File=application.log + +log4j.appender.R.MaxFileSize=100KB +# Keep one backup file +log4j.appender.R.MaxBackupIndex=1 + +log4j.appender.R.layout=org.apache.log4j.PatternLayout +log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n + +log4j.category.org.springframework=WARN +log4j.category.org.springframework.datastore=ERROR +#log4j.category.org.neo4j=INFO + diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/resources/restaurants-sample-data.sql b/spring-data-neo4j-examples/myrestaurants-social/src/main/resources/restaurants-sample-data.sql new file mode 100644 index 000000000..a30dbb9de --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/main/resources/restaurants-sample-data.sql @@ -0,0 +1,50 @@ +insert into restaurant (name, city, state, zip_code, version) values('Subway', 'Plymouth', 'WI', '53073', 1); +insert into restaurant (name, city, state, zip_code, version) values('Boston Market', 'Gaithersburg', 'MD', '20877', 1); +insert into restaurant (name, city, state, zip_code, version) values('Subway Subs', 'Santa Teresa', 'NM', '88008', 1); +insert into restaurant (name, city, state, zip_code, version) values('Arby''s Roast Beef Restaurant', 'Klamath Falls', 'OR', '97603', 1); +insert into restaurant (name, city, state, zip_code, version) values('Bellefleur Winery & Restaurant', 'Carlsbad', 'CA', '92008', 1); +insert into restaurant (name, city, state, zip_code, version) values('Huddle House', 'Calhoun', 'GA', '30701', 1); +insert into restaurant (name, city, state, zip_code, version) values('John Browne''s Pub & Eatery', 'Indianapolis', 'IN', '46235', 1); +insert into restaurant (name, city, state, zip_code, version) values('Ling''s Express', 'Milwaukee', 'WI', '53217', 1); +insert into restaurant (name, city, state, zip_code, version) values('Chubys''s', 'Odell', 'OR', '97044', 1); +insert into restaurant (name, city, state, zip_code, version) values('Bojangles', 'Columbia', 'SC', '29203', 1); +insert into restaurant (name, city, state, zip_code, version) values('NPC International', 'Memphis', 'TN', '38134', 1); +insert into restaurant (name, city, state, zip_code, version) values('Pancake Cafe', 'Naperville', 'IL', '60540', 1); +insert into restaurant (name, city, state, zip_code, version) values('Hong & Kong Restaurant', 'Chelmsford', 'MA', '01824', 1); +insert into restaurant (name, city, state, zip_code, version) values('The Chicken Cooperative', 'Ketchum', 'OK', '74349', 1); +insert into restaurant (name, city, state, zip_code, version) values('Subway', 'Lonoke', 'AR', '72086', 1); +insert into restaurant (name, city, state, zip_code, version) values('Domino''s Pizza', 'Loveland', 'CO', '80537', 1); +insert into restaurant (name, city, state, zip_code, version) values('Carl''s Jr', 'Peoria', 'IL', '61615', 1); +insert into restaurant (name, city, state, zip_code, version) values('El Toro Bar & Grill', 'Shawnee', 'KS', '66216', 1); +insert into restaurant (name, city, state, zip_code, version) values('Subway Sandwiches & Salads', 'New Orleans', 'LA', '70123', 1); +insert into restaurant (name, city, state, zip_code, version) values('Subway', 'Decatur', 'GA', '30030', 1); +insert into restaurant (name, city, state, zip_code, version) values('Arby''s', 'Indianapolis', 'IN', '46268', 1); +insert into restaurant (name, city, state, zip_code, version) values('China King', 'Cedar Rapids', 'IA', '52404', 1); +insert into restaurant (name, city, state, zip_code, version) values('Subway Sandwiches & Salads', 'Knoxville', 'TN', '37924', 1); +insert into restaurant (name, city, state, zip_code, version) values('Luciano Italian Restaurant', 'Oakton', 'VA', '22124', 1); +insert into restaurant (name, city, state, zip_code, version) values('Fruition', 'Portland', 'OR', '97210', 1); +insert into restaurant (name, city, state, zip_code, version) values('Blough''s Delicatessen', 'Davidsville', 'PA', '15928', 1); +insert into restaurant (name, city, state, zip_code, version) values('Hardee''s of Murfreesboro No 4', 'Murfreesboro', 'TN', '37128', 1); +insert into restaurant (name, city, state, zip_code, version) values('Dairy Queen restaurant ', 'Carter Lake', 'IA', '51510', 1); +insert into restaurant (name, city, state, zip_code, version) values('Imperial Wok Chinese Restaurant', 'Shreveport', 'LA', '71118', 1); +insert into restaurant (name, city, state, zip_code, version) values('Hardee''s', 'Waldorf', 'MD', '20601', 1); +insert into restaurant (name, city, state, zip_code, version) values('Cinnabon', 'Gainesville', 'FL', '32605', 1); +insert into restaurant (name, city, state, zip_code, version) values('Angle Inn Restaurant', 'Rockford', 'IL', '61103', 1); +insert into restaurant (name, city, state, zip_code, version) values('Casey''s Carry Out Pizza', 'Thomson', 'IL', '61285', 1); +insert into restaurant (name, city, state, zip_code, version) values('Sonic Drive In', 'Salt Lake City', 'UT', '84118', 1); +insert into restaurant (name, city, state, zip_code, version) values('Mcdonald''s restaurant ', 'Racine', 'WI', '53406', 1); +insert into restaurant (name, city, state, zip_code, version) values('Huhot Mongolian Grill', 'Omaha', 'NE', '68154', 1); +insert into restaurant (name, city, state, zip_code, version) values('Giovanni''s Pizzeria', 'Las Vegas', 'NV', '89123', 1); +insert into restaurant (name, city, state, zip_code, version) values('Bangkok Royal', 'Waco', 'TX', '76706', 1); +insert into restaurant (name, city, state, zip_code, version) values('Golden Coin Bake Shop & Restaurant', 'Waipahu', 'HI', '96797', 1); +insert into restaurant (name, city, state, zip_code, version) values('Cristaudo''s Grand Avenue', 'Carbondale', 'IL', '62901', 1); +insert into restaurant (name, city, state, zip_code, version) values('O''Charley''s Restaurant', 'Independence', 'MO', '64057', 1); +insert into restaurant (name, city, state, zip_code, version) values('A1 Ocean Cafe', 'San Francisco', 'CA', '94104', 1); +insert into restaurant (name, city, state, zip_code, version) values('Alberto''s Mexican Food', 'Corona', 'CA', '92880', 1); +insert into restaurant (name, city, state, zip_code, version) values('Beach Dog Computer Center', 'Hilo', 'HI', '96720', 1); +insert into restaurant (name, city, state, zip_code, version) values('Burger King', 'Houston', 'TX', '77070', 1); +insert into restaurant (name, city, state, zip_code, version) values('Fox River Brew Pub', 'Oshkosh', 'WI', '54901', 1); +insert into restaurant (name, city, state, zip_code, version) values('Buffas Delicatessen', 'New York', 'NY', '10012', 1); +insert into restaurant (name, city, state, zip_code, version) values('Maria''s Mexican Bistro Inc', 'Brooklyn', 'NY', '11215', 1); +insert into restaurant (name, city, state, zip_code, version) values('Sue''s Restaurant', 'Providence', 'RI', '02903', 1); +insert into restaurant (name, city, state, zip_code, version) values('Dairy Queen Brazier', 'Cameron', 'MO', '64429', 1); \ No newline at end of file diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/resources/schema.sql b/spring-data-neo4j-examples/myrestaurants-social/src/main/resources/schema.sql new file mode 100644 index 000000000..a788dd2c9 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/main/resources/schema.sql @@ -0,0 +1,8 @@ +CREATE TABLE restaurant ( + id BIGINT IDENTITY PRIMARY KEY, + name VARCHAR(255), + version BIGINT, + zip_code VARCHAR(255), + city VARCHAR(255), + state VARCHAR(255) + ); \ No newline at end of file diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/META-INF/MANIFEST.MF b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/META-INF/MANIFEST.MF new file mode 100644 index 000000000..5e9495128 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/META-INF/MANIFEST.MF @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +Class-Path: + diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/classes/alt.properties b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/classes/alt.properties new file mode 100644 index 000000000..48df87ff7 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/classes/alt.properties @@ -0,0 +1 @@ +styleSheet=resources/styles/alt.css diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/classes/standard.properties b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/classes/standard.properties new file mode 100644 index 000000000..d8dc0164d --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/classes/standard.properties @@ -0,0 +1 @@ +styleSheet=resources/styles/standard.css diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/i18n/application.properties b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/i18n/application.properties new file mode 100644 index 000000000..6728984f4 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/i18n/application.properties @@ -0,0 +1,60 @@ +#Updated at Wed Sep 22 21:53:31 EDT 2010 +#Wed Sep 22 21:53:31 EDT 2010 +label_com_springone_myrestaurants_domain_useraccount_username=User Name +label_com_springone_myrestaurants_domain_useraccount_birthdate=Birth Date +label_com_springone_myrestaurants_domain_useraccount_favorites=Favorites +label_com_springone_myrestaurants_domain_restaurant_city=City +menu_item_restaurant_new_label=Restaurant +menu_item_restaurant_fav_label=Restaurants +label_com_springone_myrestaurants_domain_useraccount_lastname=Last Name +menu_item_useraccount_new_label=User Account +label_com_springone_myrestaurants_domain_restaurant_plural=Restaurants +label_com_springone_myrestaurants_domain_restaurant_id=Id +label_com_springone_myrestaurants_domain_useraccount=User Account +label_com_springone_myrestaurants_domain_restaurant_name=Name +label_com_springone_myrestaurants_domain_restaurant=Restaurant +menu_item_restaurant_list_label=Restaurants +menu_category_restaurant_label=Restaurant +label_com_springone_myrestaurants_domain_useraccount_plural=User Accounts +label_com_springone_myrestaurants_domain_useraccount_version=Version +label_com_springone_myrestaurants_domain_useraccount_firstname=First Name +label_com_springone_myrestaurants_domain_useraccount_nickname=Nickname +menu_category_useraccount_label=User Account +label_com_springone_myrestaurants_domain_restaurant_state=State +menu_item_useraccount_list_label=User Accounts +label_com_springone_myrestaurants_domain_restaurant_zipcode=Zip Code +menu_item_useraccount_login_label=User Account +menu_item_useraccount_logout_label=User Account +label_com_springone_myrestaurants_domain_restaurant_version=Version +label_com_springone_myrestaurants_domain_useraccount_id=Id +application_name=MyRestaurants + +label_com_springone_myrestaurants_domain_recommendation_name=Name +menu_category_recommendation_label=Recommendation +menu_item_recommendation_list_label=Recommendations +label_com_springone_myrestaurants_domain_recommendation_comments=Comments +label_com_springone_myrestaurants_domain_recommendation=Recommendation +label_com_springone_myrestaurants_domain_recommendation_rating=Rating +label_com_springone_myrestaurants_domain_recommendation_restaurantid=Restaurant Id +label_com_springone_myrestaurants_domain_recommendation_id=Id + +menu_item_recommendation_new_label=Recommendation +label_com_springone_myrestaurants_domain_recommendation_plural=Recommendations + +label_com_springone_myrestaurants_domain_friend_username=User Name +menu_category_friend_label=Friend +menu_item_friend_list_label=Friends +label_com_springone_myrestaurants_domain_friend_version=Version +menu_item_friend_new_label=Friend +label_com_springone_myrestaurants_domain_friend_id=Id +label_com_springone_myrestaurants_domain_friend_plural=Friends +label_com_springone_myrestaurants_domain_friend=Friend + +menu_item_topn_label=Top Rated Restaurants +label_com_springone_myrestaurants_domain_topn=RatedRestaurant +label_com_springone_myrestaurants_domain_topn_plural=Top Rated Restaurants +label_com_springone_myrestaurants_domain_topn_name=Name +label_com_springone_myrestaurants_domain_topn_comments=Comments +label_com_springone_myrestaurants_domain_topn_recommendations=Recommendations +label_com_springone_myrestaurants_domain_topn_rating=Avg. Rating +label_com_springone_myrestaurants_domain_topn_restaurantid=Restaurant Id diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/i18n/messages.properties b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/i18n/messages.properties new file mode 100644 index 000000000..70b234e2b --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/i18n/messages.properties @@ -0,0 +1,98 @@ +#menu +global_menu_login=Log in +global_menu_logout=Log out +global_menu_new=Create a new {0} +global_menu_list=List all {0} +global_menu_list_my=List my {0} +global_menu_list=List all {0} +global_menu_topn=List {0} +global_menu_find=Find by {0} +global_language_switch=Switch language to {0} +global_language=Language +global_sponsored=Sponsored by SpringSource +global_theme=Theme +global_theme_alt=alt +global_theme_standard=standard +global_generic={0} +user_menu_new=Sign up for a {0} +restaurant_menu_fav=Manage favorite {0} + +#welcome page +welcome_titlepane=Welcome to {0} +welcome_h3=Welcome to {0} +welcome_text=This is a sample application created for SpringOne 2010 to showcase the new and tasty Spring and Neo4J integration features. Enjoy! + +#entity labels +entity_list_all=List all {0} +entity_show=Show {0} +entity_create=Create new {0} +entity_update=Update {0} +entity_favorite=Favorite {0} +entity_recommend=Recommend {0} +entity_delete=Delete {0} +entity_find=Find by {0} +entity_not_found=No {0} found. +entity_not_found_single=No {0} found with this id. +entity_dependency_required=The following dependencies need to be created first: +entity_reference_not_managed=This relationship is managed from the {0} side. + +#button labels +button_home=Home +button_save=Save +button_update=Update +button_find=Find +button_cancel=Cancel +button_proceed=Proceed +button_submit=Submit +button_reset=Reset +button_end=End +button_showmessage=Show Message +button_showstacktrace=Show Stack Trace +button_showcookie=Show Cookie + +#field labels +field_simple_validation=Enter {0} {1} +field_invalid_email=Please enter a valid email +field_invalid_number=Number with \\'-\\' or \\'.\\' allowed +field_invalid_integer=Integer numbers only +field_invalid=Please enter valid {0} +field_required=required + +#list labels +list_first=First Page +list_next=Next Page +list_previous=Previous Page +list_last=Last Page +list_page=Page {0} of {1} +list_size=List results per page: + +#selenium +selenium_menu_test_suite=Test Suite + +#exception +exception_message=Exception Message +exception_stacktrace=Exception Stack Trace +exception_cookie=Cookies +exception_details=Details + +#dataAccessFailure_jspx +error_dataaccessfailure_title=Data access failure +error_dataaccessfailure_problemdescription=Sorry, a problem occurred while accessing the database. + +#resourceNotFound_jspx +error_resourcenotfound_title=Requested Resource Not Found +error_resourcenotfound_problemdescription=Sorry, we did not find the resource you were looking for. + +#uncaughtException_jspx +error_uncaughtexception_title=Internal Error +error_uncaughtexception_problemdescription=Sorry, we encountered an internal error. + +#security +security_login_title=Spring Security Login +security_login_message=Please sign in with your user name and password. +security_login_form_name=Name +security_login_form_name_message=Enter your user name +security_login_form_password=Password +security_login_form_password_message=Enter your password +security_login_unsuccessful=Your login attempt was not successful, try again. Reason: +security_logout=Logout \ No newline at end of file diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/layouts/default.jspx b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/layouts/default.jspx new file mode 100644 index 000000000..d68496e5f --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/layouts/default.jspx @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + <spring:message code="welcome_h3" arguments="${app_name}" /> + + + +
    + + +
    + + +
    +
    + + diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/layouts/layouts.xml b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/layouts/layouts.xml new file mode 100644 index 000000000..3c9d6d4bb --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/layouts/layouts.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/spring/webmvc-config.xml b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/spring/webmvc-config.xml new file mode 100644 index 000000000..b03864904 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/spring/webmvc-config.xml @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + dataAccessFailure + resourceNotFound + resourceNotFound + resourceNotFound + + + + + + + + + + + + + /WEB-INF/layouts/layouts.xml + + /WEB-INF/views/**/views.xml + + + + diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/form/create.tagx b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/form/create.tagx new file mode 100644 index 000000000..37e006781 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/form/create.tagx @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +
    +
    \ No newline at end of file diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/form/dependency.tagx b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/form/dependency.tagx new file mode 100644 index 000000000..86011b91a --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/form/dependency.tagx @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + +

    + +

    +
    +
    +
    +
    \ No newline at end of file diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/form/fields/checkbox.tagx b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/form/fields/checkbox.tagx new file mode 100644 index 000000000..3e7c0604e --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/form/fields/checkbox.tagx @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + ${field} + + +
    + + + + + + + + + + +
    +
    +
    +
    \ No newline at end of file diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/form/fields/column.tagx b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/form/fields/column.tagx new file mode 100644 index 000000000..11e9c56c4 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/form/fields/column.tagx @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/form/fields/datetime.tagx b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/form/fields/datetime.tagx new file mode 100644 index 000000000..ec4adbf68 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/form/fields/datetime.tagx @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + ${field} + + + + + + + +
    + + + + + + + +
    + +
    +
    + + + + + + + + + + + +
    +
    +
    +
    \ No newline at end of file diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/form/fields/display.tagx b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/form/fields/display.tagx new file mode 100644 index 000000000..4e4f86e43 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/form/fields/display.tagx @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + + + + + + + + +
    +
    +
    +
    +
    \ No newline at end of file diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/form/fields/editor.tagx b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/form/fields/editor.tagx new file mode 100644 index 000000000..959a5fb41 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/form/fields/editor.tagx @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ${field} + + + +
    + + +
    + + +
    +
    +
    +
    \ No newline at end of file diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/form/fields/input.tagx b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/form/fields/input.tagx new file mode 100644 index 000000000..de26cefde --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/form/fields/input.tagx @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ${field} + + +
    + + + + + + + +
    + +
    +
    + + + + + + + + + + + +
    +
    +
    +
    \ No newline at end of file diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/form/fields/reference.tagx b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/form/fields/reference.tagx new file mode 100644 index 000000000..89695122a --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/form/fields/reference.tagx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + +
    + + + + + + + + ${fn:escapeXml(add_message)} + + + + + ( + + ) + +
    +
    + +
    +
    \ No newline at end of file diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/form/fields/select.tagx b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/form/fields/select.tagx new file mode 100644 index 000000000..09122bb0d --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/form/fields/select.tagx @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ${field} + + +
    + + + + + + + + + + + +
    + +
    +
    +
    + + + + + + + +
    + +
    +
    +
    +
    + + + + + + +
    + + + +
    +
    +
    + +
    +
    \ No newline at end of file diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/form/fields/simple.tagx b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/form/fields/simple.tagx new file mode 100644 index 000000000..390afa45f --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/form/fields/simple.tagx @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + +
    +
    +
    +
    \ No newline at end of file diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/form/fields/table.tagx b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/form/fields/table.tagx new file mode 100644 index 000000000..303d4f584 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/form/fields/table.tagx @@ -0,0 +1,179 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + + + + + + + + ${fn:escapeXml(show_label)} + + + + + + + + + ${fn:escapeXml(update_label)} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ${fn:escapeXml(recommend_label)} + +
    + +
    + +
    \ No newline at end of file diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/form/fields/textarea.tagx b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/form/fields/textarea.tagx new file mode 100644 index 000000000..f8f05b67d --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/form/fields/textarea.tagx @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ${field} + + + +
    + + +
    + + +
    +
    + +
    +
    \ No newline at end of file diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/form/find.tagx b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/form/find.tagx new file mode 100644 index 000000000..8644d776c --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/form/find.tagx @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +
    +
    \ No newline at end of file diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/form/list.tagx b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/form/list.tagx new file mode 100644 index 000000000..3202f2bc9 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/form/list.tagx @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/form/show.tagx b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/form/show.tagx new file mode 100644 index 000000000..5dfa3784e --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/form/show.tagx @@ -0,0 +1,113 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/form/update.tagx b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/form/update.tagx new file mode 100644 index 000000000..1dfdf45eb --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/form/update.tagx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + +
    +
    +
    +
    \ No newline at end of file diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/menu/category.tagx b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/menu/category.tagx new file mode 100644 index 000000000..f6383f513 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/menu/category.tagx @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + +
  • +

    + +

    +
      + +
    +
  • + +
    +
    \ No newline at end of file diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/menu/item.tagx b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/menu/item.tagx new file mode 100644 index 000000000..b0c466e65 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/menu/item.tagx @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + +
  • + + + + +
  • + +
    +
    \ No newline at end of file diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/menu/menu.tagx b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/menu/menu.tagx new file mode 100644 index 000000000..9c3f2e7c8 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/menu/menu.tagx @@ -0,0 +1,13 @@ + + + + + + + + +
      + +
    +
    +
    \ No newline at end of file diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/util/language.tagx b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/util/language.tagx new file mode 100644 index 000000000..aa1cd5adb --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/util/language.tagx @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + ${fn:escapeXml(lang_label)} + + + + diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/util/load-scripts.tagx b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/util/load-scripts.tagx new file mode 100644 index 000000000..a89a63292 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/util/load-scripts.tagx @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/util/pagination.tagx b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/util/pagination.tagx new file mode 100644 index 000000000..b4d394ce0 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/util/pagination.tagx @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ${i} + + + + + + + + + + + + + + + ${first_label} + + + + + + + + + + + ${previous_label} + + + + + + + + + + + + + + ${next_label} + + + + + + + + + + + ${last_label} + + + + \ No newline at end of file diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/util/panel.tagx b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/util/panel.tagx new file mode 100644 index 000000000..e8a43fc69 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/util/panel.tagx @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + ${id} + + + + ${openPane} + + + + ${title} + + + +
    + + +
    +
    +
    diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/util/placeholder.tagx b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/util/placeholder.tagx new file mode 100644 index 000000000..65ee2e4b7 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/util/placeholder.tagx @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/util/theme.tagx b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/util/theme.tagx new file mode 100644 index 000000000..fe0c628aa --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/tags/util/theme.tagx @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + ${theme_standard} + + + + + + + + + + + + ${theme_alt} + + + \ No newline at end of file diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/dataAccessFailure.jspx b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/dataAccessFailure.jspx new file mode 100644 index 000000000..e815684ea --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/dataAccessFailure.jspx @@ -0,0 +1,29 @@ +
    + + + +

    ${fn:escapeXml(title)}

    +

    + +

    + +

    +

    + +

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

    +
    +
    +
    + diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/footer.jspx b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/footer.jspx new file mode 100644 index 000000000..89af49c71 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/footer.jspx @@ -0,0 +1,36 @@ + + diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/friends/create.jspx b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/friends/create.jspx new file mode 100644 index 000000000..a7396cbd5 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/friends/create.jspx @@ -0,0 +1,8 @@ + +
    + + + + + +
    diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/friends/list.jspx b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/friends/list.jspx new file mode 100644 index 000000000..478e0d9f5 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/friends/list.jspx @@ -0,0 +1,9 @@ + +
    + + + + + + +
    diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/friends/show.jspx b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/friends/show.jspx new file mode 100644 index 000000000..f5ba8594b --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/friends/show.jspx @@ -0,0 +1,7 @@ + +
    + + + + +
    diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/friends/update.jspx b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/friends/update.jspx new file mode 100644 index 000000000..22872f030 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/friends/update.jspx @@ -0,0 +1,7 @@ + +
    + + + + +
    diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/friends/views.xml b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/friends/views.xml new file mode 100644 index 000000000..1b2c30fab --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/friends/views.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/header.jspx b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/header.jspx new file mode 100644 index 000000000..fea815207 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/header.jspx @@ -0,0 +1,10 @@ + \ No newline at end of file diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/index-template.jspx b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/index-template.jspx new file mode 100644 index 000000000..871bc55ca --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/index-template.jspx @@ -0,0 +1,10 @@ +
    + + + + +

    + +

    +
    +
    \ No newline at end of file diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/index.jspx b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/index.jspx new file mode 100644 index 000000000..75ce000a4 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/index.jspx @@ -0,0 +1,13 @@ +
    + + + + +

    + +

    +

    + +

    +
    +
    \ No newline at end of file diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/login.jspx b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/login.jspx new file mode 100644 index 000000000..df4b9bc4b --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/login.jspx @@ -0,0 +1,59 @@ +
    + + + + +
    +

    + + + . +

    +
    +
    + +

    + +

    +
    + +
    +
    + + + + +
    +
    +
    + + + + +
    +
    +
    + + + + + +
    +
    +
    +
    + diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/menu.jspx b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/menu.jspx new file mode 100644 index 000000000..57d4c76ce --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/menu.jspx @@ -0,0 +1,44 @@ + + diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/recommendations/create.jspx b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/recommendations/create.jspx new file mode 100644 index 000000000..7325295cf --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/recommendations/create.jspx @@ -0,0 +1,14 @@ + +
    + + + + + +
    + + +
    +
    + +
    diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/recommendations/list.jspx b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/recommendations/list.jspx new file mode 100644 index 000000000..c92fcf06b --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/recommendations/list.jspx @@ -0,0 +1,11 @@ + +
    + + + + + + + + +
    diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/recommendations/show.jspx b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/recommendations/show.jspx new file mode 100644 index 000000000..28e810b04 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/recommendations/show.jspx @@ -0,0 +1,9 @@ + +
    + + + + + + +
    diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/recommendations/update.jspx b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/recommendations/update.jspx new file mode 100644 index 000000000..28e391ef4 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/recommendations/update.jspx @@ -0,0 +1,10 @@ + +
    + + + + + + + +
    diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/recommendations/views.xml b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/recommendations/views.xml new file mode 100644 index 000000000..54ede30ee --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/recommendations/views.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/resourceNotFound.jspx b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/resourceNotFound.jspx new file mode 100644 index 000000000..fce7f5b03 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/resourceNotFound.jspx @@ -0,0 +1,28 @@ +
    + + + +

    ${fn:escapeXml(title)}

    +

    + +

    + +

    +

    + +

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

    +
    +
    +
    \ No newline at end of file diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/restaurants/create.jspx b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/restaurants/create.jspx new file mode 100644 index 000000000..3a5a1da07 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/restaurants/create.jspx @@ -0,0 +1,11 @@ + +
    + + + + + + + + +
    diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/restaurants/list.jspx b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/restaurants/list.jspx new file mode 100644 index 000000000..872cfca28 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/restaurants/list.jspx @@ -0,0 +1,12 @@ + +
    + + + + + + + + + +
    diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/restaurants/show.jspx b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/restaurants/show.jspx new file mode 100644 index 000000000..8dc605306 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/restaurants/show.jspx @@ -0,0 +1,10 @@ + +
    + + + + + + + +
    diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/restaurants/update.jspx b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/restaurants/update.jspx new file mode 100644 index 000000000..2f785b808 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/restaurants/update.jspx @@ -0,0 +1,10 @@ + +
    + + + + + + + +
    diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/restaurants/views.xml b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/restaurants/views.xml new file mode 100644 index 000000000..7467779c7 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/restaurants/views.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/topn/list.jspx b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/topn/list.jspx new file mode 100644 index 000000000..a8bea5ffd --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/topn/list.jspx @@ -0,0 +1,11 @@ + +
    + + + + + + + + +
    diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/topn/views.xml b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/topn/views.xml new file mode 100644 index 000000000..e5ca02a53 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/topn/views.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/uncaughtException.jspx b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/uncaughtException.jspx new file mode 100644 index 000000000..2196d3886 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/uncaughtException.jspx @@ -0,0 +1,28 @@ +
    + + + +

    ${fn:escapeXml(title)}

    +

    + +

    + +

    +

    + +

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

    +
    +
    +
    \ No newline at end of file diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/useraccounts/create.jspx b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/useraccounts/create.jspx new file mode 100644 index 000000000..5da8545f9 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/useraccounts/create.jspx @@ -0,0 +1,12 @@ + +
    + + + + + + + + + +
    diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/useraccounts/list.jspx b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/useraccounts/list.jspx new file mode 100644 index 000000000..209518bc3 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/useraccounts/list.jspx @@ -0,0 +1,13 @@ + +
    + + + + + + + + + + +
    diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/useraccounts/show.jspx b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/useraccounts/show.jspx new file mode 100644 index 000000000..4c8349828 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/useraccounts/show.jspx @@ -0,0 +1,12 @@ + +
    + + + + + + + + + +
    diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/useraccounts/update.jspx b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/useraccounts/update.jspx new file mode 100644 index 000000000..ef6fe851c --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/useraccounts/update.jspx @@ -0,0 +1,12 @@ + +
    + + + + + + + + + +
    diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/useraccounts/views.xml b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/useraccounts/views.xml new file mode 100644 index 000000000..6e5f648c8 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/useraccounts/views.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/views.xml b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/views.xml new file mode 100644 index 000000000..e92932a94 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/views/views.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/web.xml b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 000000000..a03ba840a --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,110 @@ + + + + + myrestaurants-social + + Roo generated myrestaurants application + + + + + defaultHtmlEscape + true + + + + contextConfigLocation + classpath*:META-INF/spring/applicationContext*.xml + + + + Spring OpenEntityManagerInViewFilter + org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter + + + + + + + + springSecurityFilterChain + org.springframework.web.filter.DelegatingFilterProxy + + + CharacterEncodingFilter + org.springframework.web.filter.CharacterEncodingFilter + + encoding + UTF-8 + + + forceEncoding + true + + + + + HttpMethodFilter + org.springframework.web.filter.HiddenHttpMethodFilter + + + Spring OpenEntityManagerInViewFilter + /* + + + + + + springSecurityFilterChain + /* + + + CharacterEncodingFilter + /* + + + + HttpMethodFilter + /* + + + + + org.springframework.web.context.ContextLoaderListener + + + + + myrestaurants + org.springframework.web.servlet.DispatcherServlet + + contextConfigLocation + /WEB-INF/spring/webmvc-config.xml + + 1 + + + + myrestaurants + / + + + + 10 + + + + / + + + + java.lang.Exception + /uncaughtException + + + + 404 + /resourceNotFound + + diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/images/Thumbs.db b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/images/Thumbs.db new file mode 100644 index 0000000000000000000000000000000000000000..8d73b12653a603262b9698bb7d0b2659b7c64d9a GIT binary patch literal 8192 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 literal 0 HcmV?d00001 diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/images/add.png b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/images/add.png new file mode 100644 index 0000000000000000000000000000000000000000..d5bfa0719bc3a2ce4fc529403f0acd6b6057c956 GIT binary patch literal 739 zcmV<90v!E`P)BG67=JY6c|L1R-#TR>fC$3^Y%QEnYO1xHsf)+GU`3F<{J0kR(;pbF3)zyg$H+idfnl-wl5Wkh!vUH z4Z32YP=l_}1rZd1W_D&^$A($A+&a0e&P?xx0!ctY2}*<#p+qPVN*B(YzvAWXa*%bzq z7Fz41LKILT(GWohi9|LgIzSZBhb*Zf6R6O}WYQ4GOi&71s9lmll0x6;8&ILOl$j(c z0Z1T(6Tg09{?wd{moFHNN6PS?$|e>1MxSJ(0Z7o2)J-Zv|>acY@f`(Y@g7GwsEj5NLQo+q|HsxQ5}XSX_d@*^A9ZT9=A{W~j+$GyI1 zc4oqTHx@1FlRjw4XWyPN5i2~l_F3@aBk!0yu^aoRDvXy}8@HCjUVQUsuSH4$T5|r< zzZOn^?Wfa6y|Q($Hx4{ws+)wX6-HP4zo!S?4KJ@7PG@G3G{CjXs(p*kIrj6rHs7_y z+=<-=Q62s9FuWa^X~WKgJIAAZJR&XBB002ovPDHLkV1jCMPILeO literal 0 HcmV?d00001 diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/images/banner-graphic.png b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/images/banner-graphic.png new file mode 100644 index 0000000000000000000000000000000000000000..df92021230aca376fcb92a94d189c9a0f76bbd79 GIT binary patch literal 25416 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 CV6V&o literal 0 HcmV?d00001 diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/images/create.png b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/images/create.png new file mode 100644 index 0000000000000000000000000000000000000000..d5bfa0719bc3a2ce4fc529403f0acd6b6057c956 GIT binary patch literal 739 zcmV<90v!E`P)BG67=JY6c|L1R-#TR>fC$3^Y%QEnYO1xHsf)+GU`3F<{J0kR(;pbF3)zyg$H+idfnl-wl5Wkh!vUH z4Z32YP=l_}1rZd1W_D&^$A($A+&a0e&P?xx0!ctY2}*<#p+qPVN*B(YzvAWXa*%bzq z7Fz41LKILT(GWohi9|LgIzSZBhb*Zf6R6O}WYQ4GOi&71s9lmll0x6;8&ILOl$j(c z0Z1T(6Tg09{?wd{moFHNN6PS?$|e>1MxSJ(0Z7o2)J-Zv|>acY@f`(Y@g7GwsEj5NLQo+q|HsxQ5}XSX_d@*^A9ZT9=A{W~j+$GyI1 zc4oqTHx@1FlRjw4XWyPN5i2~l_F3@aBk!0yu^aoRDvXy}8@HCjUVQUsuSH4$T5|r< zzZOn^?Wfa6y|Q($Hx4{ws+)wX6-HP4zo!S?4KJ@7PG@G3G{CjXs(p*kIrj6rHs7_y z+=<-=Q62s9FuWa^X~WKgJIAAZJR&XBB002ovPDHLkV1jCMPILeO literal 0 HcmV?d00001 diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/images/delete.png b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/images/delete.png new file mode 100644 index 0000000000000000000000000000000000000000..1514d51a3cf1b67e1c5b9ada36f1fd474e2d214a GIT binary patch literal 655 zcmV;A0&x9_P)uEoyT++I zn$b9r%cFfhHe2K68PkBu*@^<$y+7xQ$wJ~;c5aBx$R=xq*41Wo zhwQus_VOgm0hughj}MhOvs#{>Vg09Y8WxjWUJY5YW zJ?&8eG!59Cz=|E%Ns@013KLWOLV)CObIIj_5{>{#k%TEAMs_GbdDV`x-iYsGH z#=Z{USAQA>NY(}X7=3{K8#U(k2*|8J(R-+sudaynhucHbwAMTnor{mwqO^w7JHzaBsT z{O^B8RYf5+LvDs&KmRKVd78=o{`1#HTiEo_OolaGleS)G+IQ#sUI`b*pv<`1zCJ=H0jd{{2S>p`ri%{LsXJ%FbMS z$#S`6f|?OG!^Jxczkf6Q`UNF{l0Sd`ad7zm>({^EzyAS6{{CgrkluOb3l1A>ZU2~A zK+FZ=zkmP!`TOVhpFbzBzFaPmD2$N3;+$pK?>zdet`f0002ovPDHLkV1gy;I?Vt8 literal 0 HcmV?d00001 diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/images/fav-del.png b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/images/fav-del.png new file mode 100644 index 0000000000000000000000000000000000000000..faca5ba94f44f7f0d971da2061bcd9bf67957871 GIT binary patch literal 840 zcmV-O1GoH%P)1S| zO-$2Z0EYX0-MU}4jILuFW3Y`*P=g{&K=2nO{>5lQNW>EfnwXH7XuKIOB;LGwB197p z#u$%y&vks%LtxeeF^$jlH%>kXstXAp5liv=wePvnUb_-~4?}ZNU;mG3j{@lmkt3hvf zH^i*fN4iwU0t${rr>5qH?pi{#`=reh2uy#QgW2tE!fN9;(nic^4>7N=50&Vc)+|^p zqYh^3VWgt*JZPLsLnk zRt+6aXYmi~z1D}-xctKd=30B?{p7^?JE8ke&;*^+N|%Q3h@?l?*I6hO{kR<+9UWba ztR89)R3uPu-orh1Yxoh)Q!@R#G!t?W*66EuWPhLLT;S{MQd3I{5CrMV{CAZG?Qu6Q zJ{_BR`J7<3D!=yCicK~sfk0dTK-I0jFH~H}DJM_&0KO!^;(qx1EZv~FUf)8;SGczy z64RgUC6(dI>6(*g_07$p)#W{Iud}sNW5E8!2S6s1iAJN@Y}Q<5a=YEtIF3R{GYm~r zI~+$4gwN-zECRrPpdwck#Z)Sl+)Abxrb2QYN0KCt<8}3Jhr@wkSfy(PLH+`*rguv- SAPBMm00003Me zyLa!26DJsOgTTPRRo^DP{C-`I$I$GZFAGq0RaF%(^;C6W_%z)9czxxq8awIOXFqTLV)*i(;UCZxd>Z;M zXS%DTv$3%J`2RtL&-m*56aMl&I5lj4yzaxV6I#M1um0RsQ)Ca+(=o{7WjYsoQ#9ginvA2jH@ z2o0_&*BXqaLj*X5elUKN;a0u$`lzEsfx3V$&_w1h4kw~@nw11}4J6zSJZrxG{)GUW z__BMM;Tkm`{y&%GPrCkh zt3cJ3zf8Y4S-F`R*$zBfT%bLji-jBFV5VS=l5G!bB)F7Wm|5Qcejcb=6slRHB&7a> z@v}Ia;<*=x+$D2mxfS8wWBRd`N0BFT>w_L~4n-CwmS?|iXo~26{r^FPP5R}xXYaqh z_mPW&s|GSap;T`?U5UqQ$D=u-9CG}uV$XlyVqs!tVqo5Te@Tj3J+f-31|U^w&@azv zz3h4s50kJco17r4#F=M@oF$T_x#h8I0E!mrwiyYfZn)jg!od0P!<`Rb-h0V}qp1dR w8PSrrcC_r?=d<})WumxhfzgDf!NS4<0EPeCd`9I|6951J07*qoM6N<$f{E=l3jhEB literal 0 HcmV?d00001 diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/images/favicon.ico b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/images/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..c2f2b6ccdaa425cbd4acdff6e32860723ca35c87 GIT binary patch literal 1406 zcmeHEOHWfl7(JKUOABpjsqzp-K}A3W!TO@KmWzM|MMMWIRxhX_VL@Dpp)pEOo<^|Y zSrmNKLIHz@L}UC3CbBY`7=sIvn0BuQXJh36f^?aOyKw{h@uGe%%Wq^169do=n}I~R6hvCr3tVvMAWnoLz7vK zrO%(BZka@ARX?KW6vnlT=-3oo?Q#Qc?_g^kLRfksRJJxW3`{_oQw7nxfY1vgkd2Fw z-=9Zq-xwk)+o9;5hE^7g^BtqWokg_tKg7ij7s?v%0gh?-7QTRMeg$=f1ESxHYtBc| zrRIV2c%iJOJcN3{C*{qT&5#C4p)SwY*g9S zP))p0W+Z#gB%LK0aREiVb(f9k_2g7YG=Ef*NDD?%Y&>{Kk{5t=Z$iR$>u)A??2e>b JCH$-BKLHYvzV844 literal 0 HcmV?d00001 diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/images/list.png b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/images/list.png new file mode 100644 index 0000000000000000000000000000000000000000..acc30b853b3740bad231e4daa8e9f5a81f3f757b GIT binary patch literal 473 zcmV;~0Ve*5P)x=~R!WME*cb6K0H8ItD70ARH|h P00000NkvXXu0mjfzPQHT literal 0 HcmV?d00001 diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/images/recommend.gif b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/images/recommend.gif new file mode 100644 index 0000000000000000000000000000000000000000..2434c24833b63a385055146cec8de8517604f788 GIT binary patch literal 574 zcmZ?wbhEHb6krfwcoxa9yeFeD+;r=T>Bm;J9pATc(WKh#v&;KylD@pSF|)m3-=ey2 zUq63*bbdx{)Q^wP?;Klo^Vr&NZyvN2hF;n}Y1M?h3tJ|3SB<+&1~dy53t?PJelR z{lTeq@9!S}^!Vc4!;5YlT)cjA!P{5QHZGp{@!^^0S9U)*z47D2v-b|oJG7#G|Kj@l zM;6{Wy6o|}Eg$ZmI-g}pciN+{Qv)d z2D$^qpDc_F43P{vAe%vP!oWVeA+o7Cl7&;PrL&oZmrL5QtCOACmVs$vb11-cB*JPzUEnoeEDj9%h=Heq2V8Zylh5kdwWfvYqBa}wGXrlFp~VwO+bMGgJb^&W9BN*5kw bV_;@x>)`mn63ofS$|sZ1$Tj7t1A{dHns)1X literal 0 HcmV?d00001 diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/images/resultset_first.png b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/images/resultset_first.png new file mode 100644 index 0000000000000000000000000000000000000000..b03eaf8b5416fa6878165d95116e73003f8445f5 GIT binary patch literal 522 zcmV+l0`>igP)ufs8f5Kzx*fI63}@)AAFXgQp7K#X5)&2^7g z_9O9^7^ARqyc%qAP{1M7?|}io8xW>dotf=a%%ZSXBBI&Rf<-t`#(~H!2g~*8&15{# zVXjXMwHZYVJ6lk!gb6?r$g;SuO>QI;yeQ51#0H@Z6sk_ajqECPZEqLq!PMf5MQ5gS1i(Owi(ut_CY*w|Psf-Iy6=08Y` zHnsuDs6h)+OwcBqopImX_v1c`5LkrSCWWWFUvW71z%eN$cB714YVYtd`}$X<%JbQ) zM;;CHJDu;#-swg0iul07{S&4s!M>4O+`c|6_tW_i^y+I%|aPsIlEx5K=^ki~8LwqDy-)t}thx1D9 zB6|#ECQ%2a60OQQ<{6-)5|okv)6E>1Xpv+@iIv@MJ8v15 zR{N~1_2z$e&R$WgNhIQelIl1rK}5XruIN#GDZA_4bJqcqID*^mXXFcgt1K5iK7HPL zwLW*@#tu()#Cyd@CHc^75Ul6pYT4PCpSeBE)hh4bY>IO8de(|Ml<%@O-40!dwX61{2C5s-llVw2V@@N0oo_PPieZ!0Y2~+R( zk!(QTf=B;X9DnzJ@u9c>OP4(U@7{849!UlyO@H`*;lVfmCvAW6f9CF&{}ZR*{jXDW zb_vl21ozzrYJBy-Vb$aRjjJF3@7nm}zjw#A|58cE9uZ}LbIY~=6ShA8U$XeY|MDdd zfQCH!?_7WRzhvaG%|sbsT7Kz&`}!yUix%Do#>T_{_Ei`DO9UTSBkH=Hg(w4*^UnUS zTk-IJ<+2C=ZObqG7Z2FGlB7VCN;>(!bn*TFHYMl(i+Sx`L~=ArL>~EXU3lidsO!!J pWF;gqzXSh89JkLNxXeT<1_12n>%V}Y6R`jQ002ovPDHLkV1iLCz99er literal 0 HcmV?d00001 diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/images/resultset_previous.png b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/images/resultset_previous.png new file mode 100644 index 0000000000000000000000000000000000000000..18f9cc10948f025fde708328fa704b520161e5f6 GIT binary patch literal 389 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 T^3%c^XgY(ZtDnm{r-UW|MD%K~ literal 0 HcmV?d00001 diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/images/update.png b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/images/update.png new file mode 100644 index 0000000000000000000000000000000000000000..046811ed7a6ef16be1a54bb860e1f22c6dacdacf GIT binary patch literal 807 zcmV+?1K9kDP)iHtsh1EzPArg^Q zIZrOk#rNsfjaSbMAL;<4h;Z=jvu8dzyz8N&Nb7=z03ZUw?9z%8KQEa6yM5=kUnka& z3?FJk2}L7q>na=T#;<7U*P91xfF`;`6%pVgWgRy0?1ZryL@%z52=-!fGXWGEn4M351L4<+7eDgwo|moqXT+s1&Kmn>-uQQ8mL7XY)w5Zk*(g+<3Y3tmkR!bL zOUKaUtj_pX26sH+=Iorwu}MGd`_%O-_sS}8VpG#fJA)Fcs#ezwtZf?q?Ac70mDv`rVs{$od?VPKeqf<-kUjNtS6ecB*mq<&M97K^6IVsDO zt2$Ru!b+>2S<}_H>$RcInusU_8PMNdf(W{sNlJ3FkrwMJPeBPO#d}Y^a{9TH(#{Y) l0D?dWAV4eUJX#h`!2gmISk&ZKd4B)^002ovPDHLkV1g&sd|Lnj literal 0 HcmV?d00001 diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/styles/alt.css b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/styles/alt.css new file mode 100644 index 000000000..c562d00ac --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/styles/alt.css @@ -0,0 +1,362 @@ +/* main elements */ + +body,div,td { + font-family: Arial, Helvetica, sans-serif; + font-size: 12px; + color: #666; +} + +body { + background-color: #fff; + text-align: center; +} + +#header { + margin-bottom: 1em; +} + +#wrapper { + width:800px; + min-width: 800px; + max-width: 800px; + margin-right: auto; + margin-left: auto; + + /* fix max-width incompatibility in IE6 */ + width:expression(document.body.clientWidth > 800? "800px": "auto" ); + + overflow:hidden; + display:block; +} + +/* header and footer elements */ + +#main { + overflow:hidden; + display:box; +} + +#menu { + background: #eee; + position:relative; + float:right; + left:0px; + width:220px; + margin-left:15px; +} + +#menu ul{ + list-style: none; + margin: 0; + padding: 0; +} + +#menu ul li{ + padding: 0px; +} + + +#menu a, #menu h2 { + display: block; + margin: 0; + padding: 2px 6px; + color:#FFFFFF; +} + +#menu h2 { + color: #fff; + background: #F71220; + text-transform: uppercase; + font-weight:bold; + font-size: 12px; +} + +#menu a { + color: #666666; + background: #efefef; + text-decoration: none; + padding: 2px 12px; +} + +#menu a:hover { + color: #F71220; + background: #fff; +} + +#footer { + background:#fff; + border:none; + margin-top:15px; + border-top:1px solid #999999; +} + +#footer .new { + float:left; +} + +#footer a:link {color: #7db223;} + +.quicklinks { + clear:both; + padding-bottom: 15px +} +.quicklinks span { + float: right; +} + +label { + width:100px; + float:left; + margin-left: 5px; + margin-top: 0px; +} + +input { + height:20px; +} + +input, textarea, select { + border:1px solid #B3B3B3; +} + +input.image { + border: none; + height: auto; +} + +submit { + height:25px; +} + +div { + text-align: left; +} + +div .box { + display:block; + margin-left:105px; +} + +/* menu elements*/ + +a.menu, a.menu:link, a.menu:visited {display:block; width:150px; height:25px;} + +/* text styles */ + +h1,h2,h3 { + font-family: Helvetica, sans-serif; + color: #7db223; +} + +h1 { + font-size: 20px; + line-height: 26px; +} + +h2 { + font-size: 18px; + line-height: 20px; +} + +h3 { + font-size: 15px; + line-height: 21px; + color:#555; +} + +h4 { + font-size: 14px; + line-height: 20px; +} + +.errors { + color: red; + font-weight: bold; + display: block; + margin-left: 105px; +} + +a { + text-decoration: underline; + font-size: 12px; +} + +a img { + border: 0 none; + vertical-align: middle; +} + +tr:nth-child(odd) { + background-color: #FFFFFF; +} + +tr:nth-child(even) { + background-color: #EFEFEF; +} + +a:link { + color: #7db223; +} + +a:hover { + color: #456314; +} + +a:active { + color: #7db223; +} + +a:visited { + color: #7db223; +} + +li { + padding-top: 5px; + text-align: left; +} + +ul li { + margin:0 0 0.25em 0; + padding:0; +} +/* table elements */ + +table { + background: #EEEEEE; + margin: 2px 0 0 0; + border: 1px solid #BBBBBB; + border-collapse: collapse; + width: 100% +} + +table table { + margin: -5px 0; + border: 0px solid #e0e7d3; + width: 100%; +} + +table td,table th { + padding: 2px; + border: 1px solid #CCCCCC; +} + +table td form { + text-align:center; + vertical-align: middle; + margin: 0px; +} + +table th { + font-size: 0.9em; + text-align: left; + font-weight: bold; + color: #FFF; + background: #999; +} + +table thead { + font-weight: bold; + font-style: italic; + background-color: #BBBBBB; +} + +table a:link {color: #303030;} + +caption { + caption-side: top; + width: auto; + text-align: left; + font-size: 12px; + color: #848f73; + padding-bottom: 4px; +} + +fieldset { + background: #e0e7d3; + padding: 8px; + padding-bottom: 22px; + border: none; + width: 560px; +} + +fieldset label { + width: 70px; + float: left; + margin-top: 1.7em; + margin-left: 20px; +} + +fieldset textfield { + margin: 3px; + height: 20px; + background: #e0e7d3; +} + +fieldset textarea { + margin: 3px; + height: 165px; + background: #e0e7d3; +} + +fieldset input { + margin: 3px; + height: 20px; + background: #e0e7d3; +} + +fieldset table { + width: 100%; +} + +fieldset th { + padding-left: 25px; +} + +.table-buttons { + background-color:#fff; + border:none; +} + +.table-buttons td { + border:none; +} + +.submit input { + border: 1px solid #BBBBBB; + color:#777777; + padding:2px 7px; + font-size:11px; + text-transform:uppercase; + font-weight:bold; + height:24px; +} + +.updated { + background:#ecf1e5; + font-size:11px; + margin-left:2px; + border:4px solid #ecf1e5; +} + +.updated td { + padding:2px 8px; + font-size:11px; + color:#888888; +} + +.dijitTextArea{ + min-height:5.5em !important; + max-height:22em !important; + overflow-y: auto !important; + max-width: 175px; +} + +.RichTextEditable{ + min-height:18em !important; + max-height:18em !important; +} + +.flag { + height: 11px; + width: 16px; +} \ No newline at end of file diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/styles/standard.css b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/styles/standard.css new file mode 100644 index 000000000..d1a65be31 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/main/webapp/styles/standard.css @@ -0,0 +1,366 @@ +/* main elements */ + +body,div,td { + font-family: Arial, Helvetica, sans-serif; + font-size: 12px; + color: #666; +} + +body { + background-color: #fff; + text-align: center; +} + +#header { + margin-bottom: 1em; +} + +#wrapper { + width:800px; + min-width: 800px; + max-width: 800px; + margin-right: auto; + margin-left: auto; + + /* fix max-width incompatibility in IE6 */ + width:expression(document.body.clientWidth > 800? "800px": "auto" ); + + overflow:hidden; + display:block; +} + +/* header and footer elements */ + +#main { + overflow:hidden; + display:box; +} + +#menu { + background: #eee; + position:relative; + float:left; + left:0px; + width:220px; + margin-right:15px; +} + +#menu ul{ + list-style: none; + margin: 0; + padding: 0; +} + +#menu ul li{ + padding: 0px; +} + + +#menu a, #menu h2 { + display: block; + margin: 0; + padding: 2px 6px; + color:#FFFFFF; +} + +#menu h2 { + color: #fff; + background: #492FFC; + text-transform: uppercase; + font-weight:bold; + font-size: 12px; +} + +#menu a { + color: #666666; + background: #efefef; + text-decoration: none; + padding: 2px 12px; +} + +#menu a:hover { + color: #492FFC; + background: #fff; +} + +#footer { + background:#fff; + border:none; + margin-top:15px; + border-top:1px solid #999999; +} + +#footer .new { + float:left; +} + +#footer a:link {color: #7db223;} + +.quicklinks { + clear:both; + padding-bottom: 15px +} +.quicklinks span { + float: right; +} + +table.navigation { + border: 0px; +} + +label { + width:100px; + float:left; + margin-left: 5px; + margin-top: 0px; +} + +input { + height:20px; +} + +input, textarea, select { + border:1px solid #B3B3B3; +} + +input.image { + border: none; + height: auto; +} + +submit { + height:25px; +} + +div { + text-align: left; +} + +div .box { + display:block; + margin-left:105px; +} + +/* menu elements*/ + +a.menu, a.menu:link, a.menu:visited {display:block; width:150px; height:25px;} + +/* text styles */ + +h1,h2,h3 { + font-family: Helvetica, sans-serif; + color: #7db223; +} + +h1 { + font-size: 20px; + line-height: 26px; +} + +h2 { + font-size: 18px; + line-height: 20px; +} + +h3 { + font-size: 15px; + line-height: 21px; + color:#555; +} + +h4 { + font-size: 14px; + line-height: 20px; +} + +.errors { + color: red; + font-weight: bold; + display: block; + margin-left: 105px; +} + +a { + text-decoration: underline; + font-size: 12px; +} + +a img { + border: 0 none; + vertical-align: middle; +} + +tr:nth-child(odd) { + background-color: #FFFFFF; +} + +tr:nth-child(even) { + background-color: #EFEFEF; +} + +a:link { + color: #7db223; +} + +a:hover { + color: #456314; +} + +a:active { + color: #7db223; +} + +a:visited { + color: #7db223; +} + +li { + padding-top: 5px; + text-align: left; +} + +ul li { + margin:0 0 0.25em 0; + padding:0; +} +/* table elements */ + +table { + background: #EEEEEE; + margin: 2px 0 0 0; + border: 1px solid #BBBBBB; + border-collapse: collapse; + width: 100% +} + +table table { + margin: -5px 0; + border: 0px solid #e0e7d3; + width: 100%; +} + +table td,table th { + padding: 2px; + border: 1px solid #CCCCCC; +} + +table td form { + text-align:center; + vertical-align: middle; + margin: 0px; +} + +table th { + font-size: 0.9em; + text-align: left; + font-weight: bold; + color: #FFF; + background: #999; +} + +table thead { + font-weight: bold; + font-style: italic; + background-color: #BBBBBB; +} + +table a:link {color: #303030;} + +caption { + caption-side: top; + width: auto; + text-align: left; + font-size: 12px; + color: #848f73; + padding-bottom: 4px; +} + +fieldset { + background: #e0e7d3; + padding: 8px; + padding-bottom: 22px; + border: none; + width: 560px; +} + +fieldset label { + width: 70px; + float: left; + margin-top: 1.7em; + margin-left: 20px; +} + +fieldset textfield { + margin: 3px; + height: 20px; + background: #e0e7d3; +} + +fieldset textarea { + margin: 3px; + height: 165px; + background: #e0e7d3; +} + +fieldset input { + margin: 3px; + height: 20px; + background: #e0e7d3; +} + +fieldset table { + width: 100%; +} + +fieldset th { + padding-left: 25px; +} + +.table-buttons { + background-color:#fff; + border:none; +} + +.table-buttons td { + border:none; +} + +.submit input { + border: 1px solid #BBBBBB; + color:#777777; + padding:2px 7px; + font-size:11px; + text-transform:uppercase; + font-weight:bold; + height:24px; +} + +.updated { + background:#ecf1e5; + font-size:11px; + margin-left:2px; + border:4px solid #ecf1e5; +} + +.updated td { + padding:2px 8px; + font-size:11px; + color:#888888; +} + +.dijitTextArea{ + min-height:5.5em !important; + max-height:22em !important; + overflow-y: auto !important; + max-width: 175px; +} + +.RichTextEditable{ + min-height:18em !important; + max-height:18em !important; +} + +.flag { + height: 11px; + width: 16px; +} \ No newline at end of file diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/test/java/com/springdeveloper/data/neo/PrintNeo4j.java b/spring-data-neo4j-examples/myrestaurants-social/src/test/java/com/springdeveloper/data/neo/PrintNeo4j.java new file mode 100644 index 000000000..e5901bf45 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/test/java/com/springdeveloper/data/neo/PrintNeo4j.java @@ -0,0 +1,61 @@ +package com.springdeveloper.data.neo; + +import org.neo4j.graphdb.GraphDatabaseService; +import org.neo4j.graphdb.Node; +import org.neo4j.graphdb.Relationship; +import org.neo4j.graphdb.RelationshipType; +import org.neo4j.graphdb.Transaction; +import org.neo4j.kernel.EmbeddedGraphDatabase; + + +public class PrintNeo4j { + + public static void main(String[] args) { + System.out.println("Hello Neo4j!"); +// GraphDatabaseService graphDb = new EmbeddedGraphDatabase( "target/data/test" ); + GraphDatabaseService graphDb = new EmbeddedGraphDatabase( "/Users/trisberg/neo4j/imdb" ); + Transaction tx = graphDb.beginTx(); + + tx = graphDb.beginTx(); + try { + for (Node n : graphDb.getAllNodes()) { + System.out.print("=> " + n.getId() + " :: "); + for (String s : n.getPropertyKeys()) { + System.out.print(" : " + s + " = " + n.getProperty(s)); + } + for (Relationship r : n.getRelationships()) { + long start = r.getStartNode().getId(); + long end = r.getEndNode().getId(); + if (n.getId() == start) { + System.out.print(" ** " + r.getType().name() + "--> " + end); + + } + if (n.getId() == end) { + System.out.print(" ** " + start + " <--" + r.getType().name()); + + } + for (String s : r.getPropertyKeys()) { + System.out.print(" :: " + s + " = " + r.getProperty(s)); + } + } + System.out.println("!"); + } + tx.success(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + finally { + tx.finish(); + } + try { + Thread.sleep(5000); + } catch (InterruptedException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + graphDb.shutdown(); + System.out.println("Done!"); + } + +} diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/test/java/com/springone/myrestaurants/data/AbstractTestWithUserAccount.java b/spring-data-neo4j-examples/myrestaurants-social/src/test/java/com/springone/myrestaurants/data/AbstractTestWithUserAccount.java new file mode 100644 index 000000000..d0d5afb88 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/test/java/com/springone/myrestaurants/data/AbstractTestWithUserAccount.java @@ -0,0 +1,77 @@ +package com.springone.myrestaurants.data; + +import java.util.Date; + +import javax.persistence.EntityManager; +import javax.persistence.EntityManagerFactory; +import javax.persistence.EntityTransaction; +import javax.persistence.PersistenceContext; +import javax.persistence.PersistenceUnit; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.junit.Before; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.neo4j.support.GraphDatabaseContext; +import org.springframework.data.neo4j.support.node.Neo4jHelper; +import org.springframework.test.annotation.Rollback; +import org.springframework.test.context.transaction.AfterTransaction; +import org.springframework.test.context.transaction.BeforeTransaction; +import org.springframework.transaction.annotation.Transactional; + +import com.springone.myrestaurants.domain.UserAccount; + +public class AbstractTestWithUserAccount { + + protected final Log log = LogFactory.getLog(getClass()); + protected Long userId; + + @Autowired + private GraphDatabaseContext graphDatabaseContext; + + @PersistenceContext + protected EntityManager em; + + @PersistenceUnit + protected EntityManagerFactory emf; + + @BeforeTransaction + public void setUpBeforeTransaction() { + EntityManager setUpEm = emf.createEntityManager(); + EntityTransaction setUpTx = setUpEm.getTransaction(); + setUpTx.begin(); + UserAccount u = new UserAccount(); + u.setFirstName("Bubba"); + u.setLastName("Jones"); + u.setBirthDate(new Date()); + u.setUserName("user"); + setUpEm.persist(u); + setUpEm.flush(); + u.persist(); + this.userId = u.getId(); + setUpTx.commit(); + } + + @Before + public void setUp() throws Exception { + // em = emf.createEntityManager(); + } + + @Transactional + @BeforeTransaction + public void cleanDb() { + Neo4jHelper.cleanDb(graphDatabaseContext); + } + + @AfterTransaction + public void tearDown() { + EntityManager tearDownEm = emf.createEntityManager(); + EntityTransaction tearDownTx = tearDownEm.getTransaction(); + tearDownTx.begin(); + UserAccount u = tearDownEm.find(UserAccount.class, this.userId); + tearDownEm.remove(u); + tearDownEm.flush(); + tearDownTx.commit(); + } + +} \ No newline at end of file diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/test/java/com/springone/myrestaurants/data/RestaurantRepositoryTest.java b/spring-data-neo4j-examples/myrestaurants-social/src/test/java/com/springone/myrestaurants/data/RestaurantRepositoryTest.java new file mode 100644 index 000000000..919600266 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/test/java/com/springone/myrestaurants/data/RestaurantRepositoryTest.java @@ -0,0 +1,81 @@ +package com.springone.myrestaurants.data; + +import java.util.List; + +import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; + +import junit.framework.Assert; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.neo4j.support.GraphDatabaseContext; +import org.springframework.data.neo4j.support.node.Neo4jHelper; +import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.annotation.Rollback; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.transaction.BeforeTransaction; +import org.springframework.transaction.PlatformTransactionManager; +import org.springframework.transaction.annotation.Transactional; + +import com.springone.myrestaurants.domain.Restaurant; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration +@DirtiesContext +public class RestaurantRepositoryTest { + + protected final Log log = LogFactory.getLog(getClass()); + + @Autowired + PlatformTransactionManager transactionManager; + + @Autowired + private GraphDatabaseContext graphDatabaseContext; + + @PersistenceContext + EntityManager em; + + @Autowired + RestaurantRepository repo; + + @Transactional + @BeforeTransaction + public void cleanDb() { + Neo4jHelper.cleanDb(graphDatabaseContext); + } + + @Transactional + @Test + public void testFindRestaurant() { + Restaurant r = repo.findRestaurant(1L); + Assert.assertNotNull("should have found something" ,r); + Assert.assertEquals("should have found the right one", "Boston Market", r.getName()); + } + + @Transactional + @Test + public void testFindAllRestaurants() { + List l = repo.findAllRestaurants(); + Assert.assertEquals("should have found them all", 50, l.size()); + } + + @Transactional + @Test + public void testFindRestaurantEntries() { + List l = repo.findRestaurantEntries(20, 10); + Assert.assertEquals("should have found correct number of entries", 10, l.size()); + } + + @Transactional + @Test + public void testCountRestaurants() { + long l = repo.countRestaurants(); + Assert.assertEquals("should be the correctnumber", 50, l); + } +} diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/test/java/com/springone/myrestaurants/data/UserAccountRelationshipsTest.java b/spring-data-neo4j-examples/myrestaurants-social/src/test/java/com/springone/myrestaurants/data/UserAccountRelationshipsTest.java new file mode 100644 index 000000000..ae702f9e8 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/test/java/com/springone/myrestaurants/data/UserAccountRelationshipsTest.java @@ -0,0 +1,92 @@ +package com.springone.myrestaurants.data; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Set; + +import junit.framework.Assert; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.transaction.annotation.Transactional; + +import com.springone.myrestaurants.domain.Recommendation; +import com.springone.myrestaurants.domain.Restaurant; +import com.springone.myrestaurants.domain.UserAccount; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration +@DirtiesContext +public class UserAccountRelationshipsTest extends AbstractTestWithUserAccount { + + @Autowired + UserAccountRepository userAccountRepo; + + @Autowired + RestaurantRepository restaurantRepository; + + @Transactional + @Test + public void listFriends() { + UserAccount user = userAccountRepo.findUserAccount(userId); + UserAccount newUser = new UserAccount(); + newUser.setFirstName("John"); + newUser.setLastName("Doe"); + newUser.setBirthDate(new Date()); + newUser.setNickname("Bubba"); + newUser.setUserName("jdoe"); + em.persist(newUser); + newUser.persist(); + Assert.assertEquals("Should have zero friends", 0, newUser.getFriends().size()); + newUser.getFriends().add(user); + Assert.assertEquals("Should have a list of friends", 1, newUser.getFriends().size()); + } + + @Transactional + @Test + public void testAddAndRemoveFriends() { + UserAccount user = userAccountRepo.findUserAccount(userId); + UserAccount newUser = new UserAccount(); + newUser.setFirstName("John"); + newUser.setLastName("Doe"); + newUser.setBirthDate(new Date()); + newUser.setNickname("Bubba"); + newUser.setUserName("jdoe"); + userAccountRepo.persist(newUser); + em.flush(); + newUser.persist(); + user.getFriends().add(newUser); + UserAccount updatedUser = userAccountRepo.findUserAccount(userId); + Assert.assertNotNull("should have found something" ,updatedUser); + Assert.assertEquals("user should now have correct number of friends", 1, updatedUser.getFriends().size()); + user.getFriends().remove(newUser); + Assert.assertEquals("user should now have correct number of friends", 0, updatedUser.getFriends().size()); + } + + @Transactional + @Test + public void testAddRecommendation() { + UserAccount user = userAccountRepo.findUserAccount(userId); + Restaurant rest = restaurantRepository.findRestaurant(22L); + user.rate(rest, 3, "Pretty Good"); + em.flush(); + UserAccount updatedUser = userAccountRepo.findUserAccount(userId); + Assert.assertNotNull("should have found something" ,updatedUser); + List recommendations = new ArrayList(); + for (Recommendation r : updatedUser.getRecommendations()) { + recommendations.add(r); + } + Assert.assertEquals("user should now have correct number of recommendations", 1, recommendations.size()); + Recommendation r = recommendations.get(0); + Assert.assertEquals("recommendation should have correct rating", 3, r.getStars()); + Assert.assertEquals("recommendation should have correct comment", "Pretty Good", r.getComment()); + Assert.assertEquals("recommendation should have correct restaurant id", new Long(22), r.getRestaurant().getId()); + Assert.assertEquals("recommendation should have correct restaurant name", "Subway Sandwiches & Salads", r.getRestaurant().getName()); + } + +} diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/test/java/com/springone/myrestaurants/data/UserAccountRepositoryTest.java b/spring-data-neo4j-examples/myrestaurants-social/src/test/java/com/springone/myrestaurants/data/UserAccountRepositoryTest.java new file mode 100644 index 000000000..e7992e792 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/test/java/com/springone/myrestaurants/data/UserAccountRepositoryTest.java @@ -0,0 +1,101 @@ +package com.springone.myrestaurants.data; + +import java.util.Date; +import java.util.List; + +import javax.persistence.EntityManager; +import javax.persistence.EntityManagerFactory; +import javax.persistence.EntityTransaction; +import javax.persistence.PersistenceContext; +import javax.persistence.PersistenceUnit; + +import junit.framework.Assert; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.annotation.Rollback; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.transaction.AfterTransaction; +import org.springframework.test.context.transaction.BeforeTransaction; +import org.springframework.transaction.PlatformTransactionManager; +import org.springframework.transaction.annotation.Transactional; + +import com.springone.myrestaurants.domain.UserAccount; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration +@DirtiesContext +public class UserAccountRepositoryTest extends AbstractTestWithUserAccount { + + @Autowired + UserAccountRepository repo; + + @Transactional + @Test + public void testFindUser() { + UserAccount o = repo.findUserAccount(userId); + Assert.assertNotNull("should have found something" ,o); + Assert.assertEquals("should have found the right one", "user", o.getUserName()); + } + + @Transactional + @Test + public void testFindByName() { + UserAccount o = repo.findByName("user"); + Assert.assertNotNull("should have found something" ,o); + Assert.assertEquals("should have found the right one", "user", o.getUserName()); + } + + @Transactional + @Test + public void testPersist() { + UserAccount newUser = new UserAccount(); + newUser.setFirstName("John"); + newUser.setLastName("Doe"); + newUser.setBirthDate(new Date()); + newUser.setNickname("Bubba"); + newUser.setUserName("jdoe"); + repo.persist(newUser); + em.flush(); + List results = em.createNativeQuery("select id, user_name, first_name from user_account where user_name = ?") + .setParameter(1, newUser.getUserName()).getResultList(); + Assert.assertEquals("should have found the entry", 1, results.size()); + Assert.assertEquals("should have found the correct entry", "John", ((Object[])results.get(0))[2]); + UserAccount persistedUser = repo.findByName(newUser.getUserName()); + Assert.assertEquals("should have the correct value", newUser.getFirstName(), persistedUser.getFirstName()); + Assert.assertEquals("should have the correct value", newUser.getLastName(), persistedUser.getLastName()); + Assert.assertEquals("should have the correct value", newUser.getNickname(), persistedUser.getNickname()); + Assert.assertEquals("should have the correct value", newUser.getUserName(), persistedUser.getUserName()); + Assert.assertEquals("should have the correct value", newUser.getBirthDate(), persistedUser.getBirthDate()); + } + + @Transactional + @Test + public void testMerge() { + EntityManager separateTxEm = emf.createEntityManager(); + EntityTransaction separateTx = separateTxEm.getTransaction(); + separateTx.begin(); + UserAccount user = separateTxEm.find(UserAccount.class, userId); + separateTxEm.flush(); + Assert.assertTrue("entity is part of separate em", separateTxEm.contains(user)); + separateTx.commit(); + separateTxEm.detach(user); + Assert.assertFalse("entity is no longer part of separate em", separateTxEm.contains(user)); + Assert.assertFalse("entity is not part of main em", em.contains(user)); + user.setLastName("Hendrix"); + UserAccount mergedUser = repo.merge(user); + em.flush(); + Assert.assertTrue("entity is now part of main em", em.contains(mergedUser)); + List results = em.createNativeQuery("select id, user_name, last_name from user_account where id = ?") + .setParameter(1, userId).getResultList(); + Assert.assertEquals("should have found the entry", 1, results.size()); + Assert.assertEquals("should have found the updated entry", "Hendrix", ((Object[])results.get(0))[2]); + } + +} diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/test/java/com/springone/myrestaurants/domain/TopRatedRestaurantFinderTest.java b/spring-data-neo4j-examples/myrestaurants-social/src/test/java/com/springone/myrestaurants/domain/TopRatedRestaurantFinderTest.java new file mode 100644 index 000000000..3552839a9 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/test/java/com/springone/myrestaurants/domain/TopRatedRestaurantFinderTest.java @@ -0,0 +1,111 @@ +package com.springone.myrestaurants.domain; + +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.neo4j.graphdb.Node; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.neo4j.support.GraphDatabaseContext; +import org.springframework.data.neo4j.support.node.Neo4jHelper; +import org.springframework.jdbc.core.simple.SimpleJdbcTemplate; +import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.transaction.BeforeTransaction; +import org.springframework.transaction.PlatformTransactionManager; +import org.springframework.transaction.annotation.Transactional; + +import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; +import javax.sql.DataSource; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.Map; + +import static java.util.Arrays.asList; + +/** + * @author Michael Hunger + * @since 02.10.2010 + */ +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration +@DirtiesContext +@Transactional +public class TopRatedRestaurantFinderTest { + @Autowired + private GraphDatabaseContext graphDatabaseContext; + + @PersistenceContext + EntityManager em; + + @Autowired + DataSource dataSource; + + @Autowired + PlatformTransactionManager transactionManager; + + @Before + @BeforeTransaction + public void cleanDb() { + Neo4jHelper.cleanDb(graphDatabaseContext); + } + + @Test + public void returnsFriendsInOrder() { + final Restaurant a = restaurant("a"); + final Restaurant b = restaurant("b"); + final Restaurant c = restaurant("c"); + final UserAccount A = user("A"); + final UserAccount B1 = user("B1"); + final UserAccount B2 = user("B2"); + final UserAccount C1 = user("C1"); + Assert.assertNotNull("user has node", node(A)); + A.knows(B1); + A.knows(B2); + B1.knows(C1); + C1.rate(a, 1, ""); + C1.rate(b, 5, ""); + C1.rate(c, 3, ""); + final Node node = node(A); + final Collection topNRatedRestaurants = new TopRatedRestaurantFinder().getTopNRatedRestaurants(A, 5); + Collection result = new ArrayList(); + for (RatedRestaurant ratedRestaurant : topNRatedRestaurants) { + result.add(ratedRestaurant.getRestaurant()); + } + final Restaurant b2 = em.find(Restaurant.class, 2L); + Assert.assertNotNull(b2); + Assert.assertEquals(asList(b,c, a), result); + } + + private Node node(UserAccount a) { + return a.getPersistentState(); + } + + private UserAccount user(String name) { + UserAccount userAccount = new UserAccount(); + //userAccount.setId((long) name.hashCode()); + em.persist(userAccount); + em.flush(); + userAccount.persist(); + userAccount.setNickname(name); + return userAccount; + } + + private Restaurant restaurant(String name) { + Restaurant restaurant = new Restaurant(); + restaurant.setName(name); + //restaurant.setId((long) name.hashCode()); + em.persist(restaurant); + em.flush(); + restaurant.persist(); + return restaurant; + } + + private void dumpResults(String sql) { + final List> result = new SimpleJdbcTemplate(dataSource).queryForList(sql); + System.out.println("result = " + result); + } +} diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/test/resources/com/springone/myrestaurants/data/DataStore-context.xml b/spring-data-neo4j-examples/myrestaurants-social/src/test/resources/com/springone/myrestaurants/data/DataStore-context.xml new file mode 100644 index 000000000..28e4db540 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/test/resources/com/springone/myrestaurants/data/DataStore-context.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/test/resources/com/springone/myrestaurants/data/RestaurantRepositoryTest-context.xml b/spring-data-neo4j-examples/myrestaurants-social/src/test/resources/com/springone/myrestaurants/data/RestaurantRepositoryTest-context.xml new file mode 100644 index 000000000..363e18db7 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/test/resources/com/springone/myrestaurants/data/RestaurantRepositoryTest-context.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/test/resources/com/springone/myrestaurants/data/UserAccountRelationshipsTest-context.xml b/spring-data-neo4j-examples/myrestaurants-social/src/test/resources/com/springone/myrestaurants/data/UserAccountRelationshipsTest-context.xml new file mode 100644 index 000000000..363e18db7 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/test/resources/com/springone/myrestaurants/data/UserAccountRelationshipsTest-context.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/test/resources/com/springone/myrestaurants/data/UserAccountRepositoryTest-context.xml b/spring-data-neo4j-examples/myrestaurants-social/src/test/resources/com/springone/myrestaurants/data/UserAccountRepositoryTest-context.xml new file mode 100644 index 000000000..363e18db7 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/test/resources/com/springone/myrestaurants/data/UserAccountRepositoryTest-context.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/test/resources/com/springone/myrestaurants/domain/DataStore-context.xml b/spring-data-neo4j-examples/myrestaurants-social/src/test/resources/com/springone/myrestaurants/domain/DataStore-context.xml new file mode 100644 index 000000000..458cf7c15 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/test/resources/com/springone/myrestaurants/domain/DataStore-context.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + diff --git a/spring-data-neo4j-examples/myrestaurants-social/src/test/resources/com/springone/myrestaurants/domain/TopRatedRestaurantFinderTest-context.xml b/spring-data-neo4j-examples/myrestaurants-social/src/test/resources/com/springone/myrestaurants/domain/TopRatedRestaurantFinderTest-context.xml new file mode 100644 index 000000000..bdc13f954 --- /dev/null +++ b/spring-data-neo4j-examples/myrestaurants-social/src/test/resources/com/springone/myrestaurants/domain/TopRatedRestaurantFinderTest-context.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + diff --git a/spring-data-neo4j-examples/readme.md b/spring-data-neo4j-examples/readme.md new file mode 100644 index 000000000..a1a895e01 --- /dev/null +++ b/spring-data-neo4j-examples/readme.md @@ -0,0 +1,6 @@ +This repository contains examples for using the Spring Data Neo4j Library, +currently the examples all use the 1.0.0.M4 release. + +* HelloWorlds is a simple application showing the basic setup, annotations and usage +* Imdb is a graph based webapp for a movie - actor database using an older spring-web stack and an example for in graph indexes +* Myrestaurants-Social is a spring-roo generated and then modified restaurant - rating webapp that was extended using a social graph with ratings and recommendations