diff --git a/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/repository/GraphRepository.java b/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/repository/GraphRepository.java index 268c09ece..ec3f2a000 100644 --- a/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/repository/GraphRepository.java +++ b/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/repository/GraphRepository.java @@ -13,11 +13,10 @@ package org.springframework.data.neo4j.repository; + import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; -import org.springframework.data.repository.NoRepositoryBean; -import org.springframework.data.repository.PagingAndSortingRepository; /** * Neo4j OGM specific extension of {@link org.springframework.data.repository.Repository}. @@ -25,8 +24,7 @@ import org.springframework.data.repository.PagingAndSortingRepository; * @author Vince Bickers * @author Mark ANgrish */ -@NoRepositoryBean -public interface GraphRepository extends PagingAndSortingRepository { +public interface GraphRepository extends Neo4jRepository { S save(S s, int depth); diff --git a/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/repository/Neo4jRepository.java b/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/repository/Neo4jRepository.java new file mode 100644 index 000000000..bdc87fc4f --- /dev/null +++ b/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/repository/Neo4jRepository.java @@ -0,0 +1,73 @@ +/* + * Copyright (c) [2011-2016] "Pivotal Software, Inc." / "Neo Technology" / "Graph Aware Ltd." + * + * This product is licensed to you under the Apache License, Version 2.0 (the "License"). + * You may not use this product except in compliance with the License. + * + * This product may include a number of subcomponents with + * separate copyright notices and license terms. Your use of the source + * code for these subcomponents is subject to the terms and + * conditions of the subcomponent's license, as noted in the LICENSE file. + * + */ + +package org.springframework.data.neo4j.repository; + +import java.io.Serializable; + +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Sort; +import org.springframework.data.repository.NoRepositoryBean; +import org.springframework.data.repository.PagingAndSortingRepository; + +/** + * Neo4j OGM specific extension of {@link org.springframework.data.repository.Repository}. + * + * @author Vince Bickers + * @author Mark ANgrish + */ +@NoRepositoryBean +public interface Neo4jRepository extends PagingAndSortingRepository { + + S save(S s, int depth); + + Iterable save(Iterable entities, int depth); + + T findOne(ID id, int depth); + + Iterable findAll(); + + Iterable findAll(int depth); + + Iterable findAll(Sort sort); + + Iterable findAll(Sort sort, int depth); + + Iterable findAll(Iterable ids); + + Iterable findAll(Iterable ids, int depth); + + Iterable findAll(Iterable ids, Sort sort); + + Iterable findAll(Iterable ids, Sort sort, int depth); + + /** + * Returns a {@link Page} of entities meeting the paging restriction provided in the {@code Pageable} object. + * {@link Page#getTotalPages()} returns an estimation of the total number of pages and should not be relied upon for accuracy. + * + * @param pageable + * @return a page of entities + */ + Page findAll(Pageable pageable); + + /** + * Returns a {@link Page} of entities meeting the paging restriction provided in the {@code Pageable} object. + * {@link Page#getTotalPages()} returns an estimation of the total number of pages and should not be relied upon for accuracy. + * + * @param pageable + * @param depth + * @return a page of entities + */ + Page findAll(Pageable pageable, int depth); +} diff --git a/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/repository/config/Neo4jRepositoryConfigurationExtension.java b/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/repository/config/Neo4jRepositoryConfigurationExtension.java index ea86dfcbd..15596b676 100644 --- a/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/repository/config/Neo4jRepositoryConfigurationExtension.java +++ b/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/repository/config/Neo4jRepositoryConfigurationExtension.java @@ -25,7 +25,7 @@ import org.springframework.beans.factory.support.RootBeanDefinition; import org.springframework.core.annotation.AnnotationAttributes; import org.springframework.dao.DataAccessException; import org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor; -import org.springframework.data.neo4j.repository.GraphRepository; +import org.springframework.data.neo4j.repository.Neo4jRepository; import org.springframework.data.neo4j.repository.support.Neo4jRepositoryFactoryBean; import org.springframework.data.neo4j.repository.support.SessionBeanDefinitionRegistrarPostProcessor; import org.springframework.data.repository.config.AnnotationRepositoryConfigurationSource; @@ -94,7 +94,7 @@ public class Neo4jRepositoryConfigurationExtension extends RepositoryConfigurati */ @Override protected Collection> getIdentifyingTypes() { - return Collections.>singleton(GraphRepository.class); + return Collections.>singleton(Neo4jRepository.class); } /* diff --git a/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/repository/support/GraphEntityInformation.java b/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/repository/support/GraphEntityInformation.java index 44d35b327..ef4aa4b2e 100644 --- a/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/repository/support/GraphEntityInformation.java +++ b/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/repository/support/GraphEntityInformation.java @@ -13,6 +13,10 @@ package org.springframework.data.neo4j.repository.support; +import org.neo4j.ogm.MetaData; +import org.neo4j.ogm.entity.io.EntityAccessManager; +import org.neo4j.ogm.metadata.ClassInfo; +import org.neo4j.ogm.metadata.FieldInfo; import org.springframework.data.repository.core.support.AbstractEntityInformation; import java.io.Serializable; @@ -20,20 +24,36 @@ import java.io.Serializable; /** * @author Mark Angrish */ -public class GraphEntityInformation extends AbstractEntityInformation { +public class GraphEntityInformation extends AbstractEntityInformation { - public GraphEntityInformation(Class type) { + private final MetaData metaData; + + public GraphEntityInformation(MetaData metaData, Class type) { super(type); + this.metaData = metaData; } @Override - public Long getId(T entity) { - throw new UnsupportedOperationException("Not implemented yet."); + public ID getId(T entity) { + final ClassInfo classInfo = metaData.classInfo(getJavaType().getName()); + final FieldInfo primaryIndex = classInfo.primaryIndexField(); + + if (primaryIndex != null) { + return (ID) EntityAccessManager.getPropertyReader(classInfo, primaryIndex.getName()).readProperty(entity); + } + else { + return (ID) EntityAccessManager.getPropertyReader(classInfo, classInfo.identityField().getName()).readProperty(entity); + } } @Override - public Class getIdType() { - return Long.class; + public Class getIdType() { + final FieldInfo primaryIndex = metaData.classInfo(getJavaType().getName()).primaryIndexField(); + + if (primaryIndex != null) { + return (Class) primaryIndex.convertedType(); + } + return (Class) Long.class; } } diff --git a/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/repository/support/Neo4jRepositoryFactory.java b/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/repository/support/Neo4jRepositoryFactory.java index fd084ee8f..f41d3c0ee 100644 --- a/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/repository/support/Neo4jRepositoryFactory.java +++ b/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/repository/support/Neo4jRepositoryFactory.java @@ -15,6 +15,7 @@ package org.springframework.data.neo4j.repository.support; import java.io.Serializable; +import org.neo4j.ogm.session.Neo4jSession; import org.neo4j.ogm.session.Session; import org.springframework.data.neo4j.repository.query.GraphQueryLookupStrategy; import org.springframework.data.repository.core.EntityInformation; @@ -52,7 +53,9 @@ public class Neo4jRepositoryFactory extends RepositoryFactorySupport { @Override public EntityInformation getEntityInformation(Class type) { - return new GraphEntityInformation(type); + Assert.notNull(type); + Assert.notNull(session); + return new GraphEntityInformation(((Neo4jSession)session).metaData(), type); } @Override @@ -62,7 +65,7 @@ public class Neo4jRepositoryFactory extends RepositoryFactorySupport { @Override protected Class getRepositoryBaseClass(RepositoryMetadata repositoryMetadata) { - return SimpleGraphRepository.class; + return SimpleNeo4jRepository.class; } @Override diff --git a/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/repository/support/Neo4jRepositoryFactoryBean.java b/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/repository/support/Neo4jRepositoryFactoryBean.java index 14b7704d2..00775a6d2 100644 --- a/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/repository/support/Neo4jRepositoryFactoryBean.java +++ b/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/repository/support/Neo4jRepositoryFactoryBean.java @@ -13,6 +13,8 @@ package org.springframework.data.neo4j.repository.support; +import java.io.Serializable; + import org.neo4j.ogm.session.Session; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.mapping.context.MappingContext; @@ -31,7 +33,7 @@ import org.springframework.util.Assert; * @author Luanne Misquitta * @author Mark Angrish */ -public class Neo4jRepositoryFactoryBean, S> extends TransactionalRepositoryFactoryBeanSupport { +public class Neo4jRepositoryFactoryBean, S, ID extends Serializable> extends TransactionalRepositoryFactoryBeanSupport { private Session session; diff --git a/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/repository/support/SimpleGraphRepository.java b/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/repository/support/SimpleNeo4jRepository.java similarity index 84% rename from spring-data-neo4j/src/main/java/org/springframework/data/neo4j/repository/support/SimpleGraphRepository.java rename to spring-data-neo4j/src/main/java/org/springframework/data/neo4j/repository/support/SimpleNeo4jRepository.java index 337dacbd1..98bc27a3e 100644 --- a/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/repository/support/SimpleGraphRepository.java +++ b/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/repository/support/SimpleNeo4jRepository.java @@ -13,18 +13,21 @@ package org.springframework.data.neo4j.repository.support; +import java.io.Serializable; import java.util.ArrayList; import java.util.Collection; import java.util.List; +import org.neo4j.ogm.MetaData; import org.neo4j.ogm.cypher.query.Pagination; import org.neo4j.ogm.cypher.query.SortOrder; +import org.neo4j.ogm.session.Neo4jSession; import org.neo4j.ogm.session.Session; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; -import org.springframework.data.neo4j.repository.GraphRepository; +import org.springframework.data.neo4j.repository.Neo4jRepository; import org.springframework.stereotype.Repository; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.Assert; @@ -41,7 +44,7 @@ import org.springframework.util.Assert; */ @Repository @Transactional(readOnly = true) -public class SimpleGraphRepository implements GraphRepository { +public class SimpleNeo4jRepository implements Neo4jRepository { private static final int DEFAULT_QUERY_DEPTH = 1; private static final String ID_MUST_NOT_BE_NULL = "The given id must not be null!"; @@ -50,12 +53,15 @@ public class SimpleGraphRepository implements GraphRepository { private Session session; /** - * Creates a new {@link SimpleGraphRepository} to manage objects of the given domain type. + * Creates a new {@link SimpleNeo4jRepository} to manage objects of the given domain type. * * @param domainClass must not be {@literal null}. * @param session must not be {@literal null}. */ - public SimpleGraphRepository(Class domainClass, Session session) { + public SimpleNeo4jRepository(Class domainClass, Session session) { + Assert.notNull(domainClass); + Assert.notNull(session); + this.clazz = domainClass; this.session = session; } @@ -81,13 +87,13 @@ public class SimpleGraphRepository implements GraphRepository { } @Override - public T findOne(Long id) { + public T findOne(ID id) { Assert.notNull(id, ID_MUST_NOT_BE_NULL); return session.load(clazz, id); } @Override - public boolean exists(Long id) { + public boolean exists(ID id) { return findOne(id) != null; } @@ -98,7 +104,7 @@ public class SimpleGraphRepository implements GraphRepository { @Transactional @Override - public void delete(Long id) { + public void delete(ID id) { Object o = findOne(id); if (o != null) { session.delete(o); @@ -140,7 +146,7 @@ public class SimpleGraphRepository implements GraphRepository { } @Override - public T findOne(Long id, int depth) { + public T findOne(ID id, int depth) { return session.load(clazz, id, depth); } @@ -156,13 +162,13 @@ public class SimpleGraphRepository implements GraphRepository { } @Override - public Iterable findAll(Iterable longs) { + public Iterable findAll(Iterable longs) { return findAll(longs, DEFAULT_QUERY_DEPTH); } @Override - public Iterable findAll(Iterable ids, int depth) { - return session.loadAll(clazz, (Collection) ids, depth); + public Iterable findAll(Iterable ids, int depth) { + return session.loadAll(clazz, (Collection) ids, depth); } @Override @@ -176,13 +182,13 @@ public class SimpleGraphRepository implements GraphRepository { } @Override - public Iterable findAll(Iterable ids, Sort sort) { + public Iterable findAll(Iterable ids, Sort sort) { return findAll(ids, sort, DEFAULT_QUERY_DEPTH); } @Override - public Iterable findAll(Iterable ids, Sort sort, int depth) { - return session.loadAll(clazz, (Collection) ids, convert(sort), depth); + public Iterable findAll(Iterable ids, Sort sort, int depth) { + return session.loadAll(clazz, (Collection) ids, convert(sort), depth); } @Override diff --git a/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/examples/friends/repo/FriendshipRepository.java b/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/examples/friends/repo/FriendshipRepository.java index bf4d3d3fd..247d4e710 100644 --- a/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/examples/friends/repo/FriendshipRepository.java +++ b/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/examples/friends/repo/FriendshipRepository.java @@ -16,12 +16,12 @@ package org.springframework.data.neo4j.examples.friends.repo; import org.springframework.data.neo4j.annotation.Query; import org.springframework.data.neo4j.examples.friends.domain.Friendship; import org.springframework.data.neo4j.examples.friends.domain.Person; -import org.springframework.data.neo4j.repository.GraphRepository; +import org.springframework.data.neo4j.repository.Neo4jRepository; /** * @author Luanne Misquitta */ -public interface FriendshipRepository extends GraphRepository { +public interface FriendshipRepository extends Neo4jRepository { @Query("MATCH (person1)-[rel:IS_FRIEND]->(person2) WHERE ID(person1)={0} AND ID(person2)={1} return rel") Friendship getFriendship(Person person1, Person person2); diff --git a/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/examples/galaxy/repo/WorldRepository.java b/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/examples/galaxy/repo/WorldRepository.java index fe87ab5c6..2d78be173 100644 --- a/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/examples/galaxy/repo/WorldRepository.java +++ b/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/examples/galaxy/repo/WorldRepository.java @@ -17,6 +17,7 @@ import org.neo4j.ogm.model.Result; import org.springframework.data.neo4j.annotation.Query; import org.springframework.data.neo4j.examples.galaxy.domain.World; import org.springframework.data.neo4j.repository.GraphRepository; +import org.springframework.data.neo4j.repository.Neo4jRepository; import org.springframework.stereotype.Repository; /** diff --git a/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/examples/jsr303/repo/AdultRepository.java b/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/examples/jsr303/repo/AdultRepository.java index 0278dfe05..3b1bcbbe4 100644 --- a/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/examples/jsr303/repo/AdultRepository.java +++ b/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/examples/jsr303/repo/AdultRepository.java @@ -14,12 +14,12 @@ package org.springframework.data.neo4j.examples.jsr303.repo; import org.springframework.data.neo4j.examples.jsr303.domain.Adult; -import org.springframework.data.neo4j.repository.GraphRepository; +import org.springframework.data.neo4j.repository.Neo4jRepository; import org.springframework.stereotype.Repository; /** * @author Vince Bickers */ @Repository -public interface AdultRepository extends GraphRepository { +public interface AdultRepository extends Neo4jRepository { } diff --git a/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/examples/movies/repo/AbstractAnnotatedEntityRepository.java b/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/examples/movies/repo/AbstractAnnotatedEntityRepository.java index 5e2062655..ff3da1967 100644 --- a/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/examples/movies/repo/AbstractAnnotatedEntityRepository.java +++ b/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/examples/movies/repo/AbstractAnnotatedEntityRepository.java @@ -14,12 +14,12 @@ package org.springframework.data.neo4j.examples.movies.repo; import org.springframework.data.neo4j.examples.movies.domain.AbstractAnnotatedEntity; -import org.springframework.data.neo4j.repository.GraphRepository; +import org.springframework.data.neo4j.repository.Neo4jRepository; import org.springframework.stereotype.Repository; /** * @author Michal Bachman */ @Repository -public interface AbstractAnnotatedEntityRepository extends GraphRepository { +public interface AbstractAnnotatedEntityRepository extends Neo4jRepository { } diff --git a/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/examples/movies/repo/AbstractEntityRepository.java b/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/examples/movies/repo/AbstractEntityRepository.java index f402ca8fd..ca4534a27 100644 --- a/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/examples/movies/repo/AbstractEntityRepository.java +++ b/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/examples/movies/repo/AbstractEntityRepository.java @@ -14,12 +14,12 @@ package org.springframework.data.neo4j.examples.movies.repo; import org.springframework.data.neo4j.examples.movies.domain.AbstractEntity; -import org.springframework.data.neo4j.repository.GraphRepository; +import org.springframework.data.neo4j.repository.Neo4jRepository; import org.springframework.stereotype.Repository; /** * @author Michal Bachman */ @Repository -public interface AbstractEntityRepository extends GraphRepository { +public interface AbstractEntityRepository extends Neo4jRepository { } diff --git a/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/examples/movies/repo/ActorRepository.java b/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/examples/movies/repo/ActorRepository.java index ee8d5efa2..a095b317f 100644 --- a/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/examples/movies/repo/ActorRepository.java +++ b/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/examples/movies/repo/ActorRepository.java @@ -14,12 +14,12 @@ package org.springframework.data.neo4j.examples.movies.repo; import org.springframework.data.neo4j.examples.movies.domain.Actor; -import org.springframework.data.neo4j.repository.GraphRepository; +import org.springframework.data.neo4j.repository.Neo4jRepository; /** * @author Michal Bachman */ -public interface ActorRepository extends GraphRepository { +public interface ActorRepository extends Neo4jRepository { } diff --git a/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/examples/movies/repo/CinemaRepository.java b/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/examples/movies/repo/CinemaRepository.java index 354218412..ec6ba0622 100644 --- a/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/examples/movies/repo/CinemaRepository.java +++ b/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/examples/movies/repo/CinemaRepository.java @@ -21,7 +21,7 @@ import org.springframework.data.neo4j.annotation.Depth; import org.springframework.data.neo4j.annotation.Query; import org.springframework.data.neo4j.examples.movies.domain.Cinema; import org.springframework.data.neo4j.examples.movies.domain.queryresult.CinemaQueryResultInterface; -import org.springframework.data.neo4j.repository.GraphRepository; +import org.springframework.data.neo4j.repository.Neo4jRepository; import org.springframework.data.neo4j.examples.movies.domain.queryresult.CinemaQueryResult; import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; @@ -35,7 +35,7 @@ import java.util.List; * @author Jasper Blues */ @Repository -public interface CinemaRepository extends GraphRepository { +public interface CinemaRepository extends Neo4jRepository { Collection findByName(String name); diff --git a/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/examples/movies/repo/DirectorRepository.java b/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/examples/movies/repo/DirectorRepository.java index 9d84b1a19..9659c0f5b 100644 --- a/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/examples/movies/repo/DirectorRepository.java +++ b/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/examples/movies/repo/DirectorRepository.java @@ -18,6 +18,6 @@ import org.springframework.data.neo4j.examples.movies.domain.Director; /** * @author Luanne Misquitta */ -public interface DirectorRepository extends PersonRepository { +public interface DirectorRepository extends PersonRepository { } diff --git a/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/examples/movies/repo/GenreRepository.java b/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/examples/movies/repo/GenreRepository.java index 012befe56..941064998 100644 --- a/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/examples/movies/repo/GenreRepository.java +++ b/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/examples/movies/repo/GenreRepository.java @@ -14,12 +14,12 @@ package org.springframework.data.neo4j.examples.movies.repo; import org.springframework.data.neo4j.examples.movies.domain.Genre; -import org.springframework.data.neo4j.repository.GraphRepository; +import org.springframework.data.neo4j.repository.Neo4jRepository; import org.springframework.stereotype.Repository; /** * @author Michal Bachman */ @Repository -public interface GenreRepository extends GraphRepository { +public interface GenreRepository extends Neo4jRepository { } diff --git a/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/examples/movies/repo/PersonRepository.java b/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/examples/movies/repo/PersonRepository.java index 07b3dd30b..cc4d3e42b 100644 --- a/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/examples/movies/repo/PersonRepository.java +++ b/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/examples/movies/repo/PersonRepository.java @@ -13,15 +13,16 @@ package org.springframework.data.neo4j.examples.movies.repo; +import java.io.Serializable; import java.util.Collection; import org.springframework.data.neo4j.examples.movies.domain.Person; -import org.springframework.data.neo4j.repository.GraphRepository; +import org.springframework.data.neo4j.repository.Neo4jRepository; /** * @author Luanne Misquitta */ -public interface PersonRepository extends GraphRepository { +public interface PersonRepository extends Neo4jRepository { Collection findByName(String name); } diff --git a/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/examples/movies/repo/RatingRepository.java b/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/examples/movies/repo/RatingRepository.java index 19b0b4e63..460d3e86f 100644 --- a/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/examples/movies/repo/RatingRepository.java +++ b/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/examples/movies/repo/RatingRepository.java @@ -16,13 +16,13 @@ package org.springframework.data.neo4j.examples.movies.repo; import java.util.List; import org.springframework.data.neo4j.examples.movies.domain.Rating; -import org.springframework.data.neo4j.repository.GraphRepository; +import org.springframework.data.neo4j.repository.Neo4jRepository; /** * @author Luanne Misquitta * @author Vince Bickers */ -public interface RatingRepository extends GraphRepository { +public interface RatingRepository extends Neo4jRepository { List findByStars(int stars); diff --git a/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/examples/movies/repo/TempMovieRepository.java b/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/examples/movies/repo/TempMovieRepository.java index d1247a066..b798bbe14 100644 --- a/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/examples/movies/repo/TempMovieRepository.java +++ b/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/examples/movies/repo/TempMovieRepository.java @@ -14,10 +14,10 @@ package org.springframework.data.neo4j.examples.movies.repo; import org.springframework.data.neo4j.examples.movies.domain.TempMovie; -import org.springframework.data.neo4j.repository.GraphRepository; +import org.springframework.data.neo4j.repository.Neo4jRepository; /** * @author Michal Bachman */ -public interface TempMovieRepository extends GraphRepository { +public interface TempMovieRepository extends Neo4jRepository { } diff --git a/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/examples/movies/repo/UserRepository.java b/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/examples/movies/repo/UserRepository.java index ade4218fb..500ec8f13 100644 --- a/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/examples/movies/repo/UserRepository.java +++ b/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/examples/movies/repo/UserRepository.java @@ -32,7 +32,7 @@ import java.util.Map; * @author Luanne Misquitta */ @Repository -public interface UserRepository extends PersonRepository { +public interface UserRepository extends PersonRepository { Collection findByMiddleName(String middleName); diff --git a/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/examples/restaurants/repo/RestaurantRepository.java b/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/examples/restaurants/repo/RestaurantRepository.java index 78aa737b4..5d6ae0e99 100644 --- a/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/examples/restaurants/repo/RestaurantRepository.java +++ b/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/examples/restaurants/repo/RestaurantRepository.java @@ -13,19 +13,18 @@ package org.springframework.data.neo4j.examples.restaurants.repo; -import java.util.Collection; import java.util.Date; import java.util.List; import org.springframework.data.geo.Distance; import org.springframework.data.geo.Point; import org.springframework.data.neo4j.examples.restaurants.domain.Restaurant; -import org.springframework.data.neo4j.repository.GraphRepository; +import org.springframework.data.neo4j.repository.Neo4jRepository; /** * @author Jasper Blues */ -public interface RestaurantRepository extends GraphRepository { +public interface RestaurantRepository extends Neo4jRepository { List findByNameAndLocationNear(String name, Distance distance, Point point); diff --git a/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/extensions/CustomGraphRepositoryImpl.java b/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/extensions/CustomGraphRepositoryImpl.java index b7a72653c..8d0ee932d 100644 --- a/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/extensions/CustomGraphRepositoryImpl.java +++ b/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/extensions/CustomGraphRepositoryImpl.java @@ -12,8 +12,10 @@ */ package org.springframework.data.neo4j.extensions; +import java.io.Serializable; + import org.neo4j.ogm.session.Session; -import org.springframework.data.neo4j.repository.support.SimpleGraphRepository; +import org.springframework.data.neo4j.repository.support.SimpleNeo4jRepository; import org.springframework.stereotype.Repository; /** @@ -24,7 +26,7 @@ import org.springframework.stereotype.Repository; * @author Mark Angrish */ @Repository -public class CustomGraphRepositoryImpl extends SimpleGraphRepository implements CustomGraphRepository { +public class CustomGraphRepositoryImpl extends SimpleNeo4jRepository implements CustomNeo4jRepository { public CustomGraphRepositoryImpl(Class clazz, Session session) { super(clazz, session); diff --git a/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/extensions/CustomGraphRepository.java b/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/extensions/CustomNeo4jRepository.java similarity index 81% rename from spring-data-neo4j/src/test/java/org/springframework/data/neo4j/extensions/CustomGraphRepository.java rename to spring-data-neo4j/src/test/java/org/springframework/data/neo4j/extensions/CustomNeo4jRepository.java index 65718df3e..c9461b017 100644 --- a/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/extensions/CustomGraphRepository.java +++ b/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/extensions/CustomNeo4jRepository.java @@ -12,7 +12,9 @@ */ package org.springframework.data.neo4j.extensions; -import org.springframework.data.neo4j.repository.GraphRepository; +import java.io.Serializable; + +import org.springframework.data.neo4j.repository.Neo4jRepository; import org.springframework.data.repository.NoRepositoryBean; /** @@ -22,7 +24,7 @@ import org.springframework.data.repository.NoRepositoryBean; * @author: Vince Bickers */ @NoRepositoryBean -public interface CustomGraphRepository extends GraphRepository { +public interface CustomNeo4jRepository extends Neo4jRepository { boolean sharedCustomMethod(); diff --git a/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/extensions/UserRepository.java b/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/extensions/UserRepository.java index 3b74913b2..8c34fc9b3 100644 --- a/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/extensions/UserRepository.java +++ b/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/extensions/UserRepository.java @@ -19,5 +19,5 @@ import org.springframework.stereotype.Repository; * @author: Vince Bickers */ @Repository -public interface UserRepository extends CustomGraphRepository { +public interface UserRepository extends CustomNeo4jRepository { } diff --git a/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/integration/conversion/JavaElementRepository.java b/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/integration/conversion/JavaElementRepository.java index ef20050bc..a8f19e759 100644 --- a/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/integration/conversion/JavaElementRepository.java +++ b/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/integration/conversion/JavaElementRepository.java @@ -14,14 +14,14 @@ package org.springframework.data.neo4j.integration.conversion; import org.springframework.data.neo4j.integration.conversion.domain.JavaElement; -import org.springframework.data.neo4j.repository.GraphRepository; +import org.springframework.data.neo4j.repository.Neo4jRepository; import org.springframework.stereotype.Repository; /** * @author Adam George */ @Repository -public interface JavaElementRepository extends GraphRepository { +public interface JavaElementRepository extends Neo4jRepository { // no additional repository methods diff --git a/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/integration/conversion/PensionRepository.java b/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/integration/conversion/PensionRepository.java index 9e9afa1e9..9c6f3f7ac 100644 --- a/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/integration/conversion/PensionRepository.java +++ b/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/integration/conversion/PensionRepository.java @@ -14,14 +14,14 @@ package org.springframework.data.neo4j.integration.conversion; import org.springframework.data.neo4j.integration.conversion.domain.PensionPlan; -import org.springframework.data.neo4j.repository.GraphRepository; +import org.springframework.data.neo4j.repository.Neo4jRepository; import org.springframework.stereotype.Repository; /** * @author Adam George */ @Repository -public interface PensionRepository extends GraphRepository { +public interface PensionRepository extends Neo4jRepository { // no additional repository methods diff --git a/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/integration/conversion/SiteMemberRepository.java b/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/integration/conversion/SiteMemberRepository.java index 2a9f507c6..af0e7fb7c 100644 --- a/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/integration/conversion/SiteMemberRepository.java +++ b/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/integration/conversion/SiteMemberRepository.java @@ -14,14 +14,14 @@ package org.springframework.data.neo4j.integration.conversion; import org.springframework.data.neo4j.integration.conversion.domain.SiteMember; -import org.springframework.data.neo4j.repository.GraphRepository; +import org.springframework.data.neo4j.repository.Neo4jRepository; import org.springframework.stereotype.Repository; /** * @author Adam George */ @Repository -public interface SiteMemberRepository extends GraphRepository { +public interface SiteMemberRepository extends Neo4jRepository { // no additional repository methods diff --git a/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/repositories/repo/UserRepository.java b/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/repositories/repo/UserRepository.java index 17bf1deb4..22e7840fc 100644 --- a/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/repositories/repo/UserRepository.java +++ b/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/repositories/repo/UserRepository.java @@ -17,6 +17,7 @@ import java.util.List; import org.springframework.data.neo4j.repositories.domain.User; import org.springframework.data.neo4j.repository.GraphRepository; +import org.springframework.data.neo4j.repository.Neo4jRepository; import org.springframework.stereotype.Repository; /** diff --git a/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/repositories/support/GraphRepositoryFactoryIT.java b/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/repositories/support/GraphRepositoryFactoryIT.java index b67d109b2..ff166d95e 100644 --- a/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/repositories/support/GraphRepositoryFactoryIT.java +++ b/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/repositories/support/GraphRepositoryFactoryIT.java @@ -15,6 +15,8 @@ package org.springframework.data.neo4j.repositories.support; import static org.junit.Assert.*; +import java.io.Serializable; + import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -23,9 +25,9 @@ import org.mockito.runners.MockitoJUnitRunner; import org.neo4j.ogm.session.Session; import org.neo4j.ogm.testutil.MultiDriverTestClass; import org.springframework.aop.framework.Advised; -import org.springframework.data.neo4j.repository.GraphRepository; +import org.springframework.data.neo4j.repository.Neo4jRepository; import org.springframework.data.neo4j.repository.support.Neo4jRepositoryFactory; -import org.springframework.data.neo4j.repository.support.SimpleGraphRepository; +import org.springframework.data.neo4j.repository.support.SimpleNeo4jRepository; import org.springframework.transaction.annotation.Transactional; /** @@ -72,21 +74,21 @@ public class GraphRepositoryFactoryIT extends MultiDriverTestClass { @Test public void usesConfiguredRepositoryBaseClass() { - factory.setRepositoryBaseClass(CustomGraphRepository.class); + factory.setRepositoryBaseClass(CustomNeo4jRepository.class); ObjectRepository repository = factory.getRepository(ObjectRepository.class); - assertEquals(CustomGraphRepository.class, ((Advised) repository).getTargetClass()); + assertEquals(CustomNeo4jRepository.class, ((Advised) repository).getTargetClass()); } - private interface ObjectRepository extends GraphRepository { + private interface ObjectRepository extends Neo4jRepository { @Override @Transactional Object findOne(Long id); } - static class CustomGraphRepository extends SimpleGraphRepository { + static class CustomNeo4jRepository extends SimpleNeo4jRepository { - public CustomGraphRepository(Class clazz, Session session) { + public CustomNeo4jRepository(Class clazz, Session session) { super(clazz, session); } } diff --git a/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/repository/Neo4jRepositoryIT.java b/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/repository/Neo4jRepositoryIT.java index d3403defc..d7f724fd1 100644 --- a/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/repository/Neo4jRepositoryIT.java +++ b/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/repository/Neo4jRepositoryIT.java @@ -46,7 +46,7 @@ public class Neo4jRepositoryIT extends MultiDriverTestClass { @Autowired Session session; - GraphRepository repository; + Neo4jRepository repository; @Before public void setUp() { @@ -68,7 +68,7 @@ public class Neo4jRepositoryIT extends MultiDriverTestClass { } - private interface SampleEntityRepository extends GraphRepository { + private interface SampleEntityRepository extends Neo4jRepository { } diff --git a/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/repository/sample/UserRepository.java b/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/repository/sample/UserRepository.java index 9c34c8c67..ae6391000 100644 --- a/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/repository/sample/UserRepository.java +++ b/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/repository/sample/UserRepository.java @@ -17,6 +17,7 @@ import java.util.List; import org.springframework.data.neo4j.annotation.Query; import org.springframework.data.neo4j.domain.sample.User; import org.springframework.data.neo4j.repository.GraphRepository; +import org.springframework.data.neo4j.repository.Neo4jRepository; import org.springframework.data.repository.CrudRepository; import org.springframework.transaction.annotation.Transactional; diff --git a/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/repository/support/Neo4jRepositoryFactoryBeanTests.java b/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/repository/support/Neo4jRepositoryFactoryBeanTests.java index 0b34f20f7..725d75846 100644 --- a/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/repository/support/Neo4jRepositoryFactoryBeanTests.java +++ b/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/repository/support/Neo4jRepositoryFactoryBeanTests.java @@ -18,6 +18,7 @@ import static org.mockito.Matchers.anyBoolean; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.*; +import java.io.Serializable; import java.util.HashMap; import java.util.Map; @@ -32,7 +33,7 @@ import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.ListableBeanFactory; import org.springframework.dao.support.PersistenceExceptionTranslator; import org.springframework.data.domain.Persistable; -import org.springframework.data.neo4j.repository.GraphRepository; +import org.springframework.data.neo4j.repository.Neo4jRepository; import org.springframework.data.repository.Repository; import org.springframework.data.repository.core.support.RepositoryFactorySupport; @@ -42,7 +43,7 @@ import org.springframework.data.repository.core.support.RepositoryFactorySupport @RunWith(MockitoJUnitRunner.class) public class Neo4jRepositoryFactoryBeanTests { - Neo4jRepositoryFactoryBean factoryBean; + Neo4jRepositoryFactoryBean factoryBean; @Mock Session session; @@ -114,8 +115,8 @@ public class Neo4jRepositoryFactoryBeanTests { factoryBean.afterPropertiesSet(); } - private class DummyNeo4jRepositoryFactoryBean, S> extends - Neo4jRepositoryFactoryBean { + private class DummyNeo4jRepositoryFactoryBean, S, ID extends Serializable> extends + Neo4jRepositoryFactoryBean { /* * (non-Javadoc) @@ -131,7 +132,7 @@ public class Neo4jRepositoryFactoryBeanTests { } } - private interface SimpleSampleRepository extends GraphRepository { + private interface SimpleSampleRepository extends Neo4jRepository { } diff --git a/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/web/WebIntegrationIT.java b/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/web/WebIntegrationIT.java index 65db6b65f..b79157c59 100644 --- a/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/web/WebIntegrationIT.java +++ b/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/web/WebIntegrationIT.java @@ -20,6 +20,7 @@ import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; +import org.junit.After; import org.junit.Assert; import org.junit.Before; import org.junit.Test; @@ -62,15 +63,23 @@ public class WebIntegrationIT extends MultiDriverTestClass { private MockMvc mockMvc; + private User adam; + + private User daniela; + + private User michal; + + private User vince; + @Before public void setUp() { this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).build(); - User adam = new User("Adam"); - User daniela = new User("Daniela"); - User michal = new User("Michal"); - User vince = new User("Vince"); + adam = new User("Adam"); + daniela = new User("Daniela"); + michal = new User("Michal"); + vince = new User("Vince"); adam.befriend(daniela); daniela.befriend(michal); @@ -88,39 +97,37 @@ public class WebIntegrationIT extends MultiDriverTestClass { userRepository.save(adam); } + @Test public void shouldNotShareSessionBetweenRequestsWithDifferentSession() throws Exception { - mockMvc.perform(get("/user/{name}/friends", "Adam")) + mockMvc.perform(get("/user/{uuid}/friends", adam.getUuid())) .andExpect(status().isOk()) .andExpect(MockMvcResultMatchers.content().string("Daniela")); - mockMvc.perform(get("/user/{name}/friends", "Vince")) + mockMvc.perform(get("/user/{uuid}/friends", vince.getUuid())) .andExpect(status().isOk()) .andExpect(MockMvcResultMatchers.content().string("Michal")); - - Assert.assertFalse(((DelegatingTransactionManager) transactionManager).getTransactionDefinition().isReadOnly()); } @Test public void shouldShareSessionBetweenRequestsDuringSameSession() throws Exception { MockHttpSession session = new MockHttpSession(); - mockMvc.perform(get("/user/{name}/immediateFriends", "Adam").session(session)) + mockMvc.perform(get("/user/{uuid}/immediateFriends", adam.getUuid()).session(session)) .andExpect(status().isOk()) .andExpect(MockMvcResultMatchers.content().string("Daniela")); - mockMvc.perform(get("/user/{name}/immediateFriends", "Daniela").session(session)) + mockMvc.perform(get("/user/{uuid}/immediateFriends", daniela.getUuid()).session(session)) .andExpect(status().isOk()) .andExpect(MockMvcResultMatchers.content().string("Adam Michal")); - mockMvc.perform(get("/user/{name}/immediateFriends", "Michal").session(session)) + mockMvc.perform(get("/user/{uuid}/immediateFriends", michal.getUuid()).session(session)) .andExpect(status().isOk()) .andExpect(MockMvcResultMatchers.content().string("Daniela Vince")); - mockMvc.perform(get("/user/{name}/immediateFriends", "Vince").session(session)) + mockMvc.perform(get("/user/{uuid}/immediateFriends", vince.getUuid()).session(session)) .andExpect(status().isOk()) .andExpect(MockMvcResultMatchers.content().string("Michal")); - } @@ -134,7 +141,7 @@ public class WebIntegrationIT extends MultiDriverTestClass { public void run() { if (j % 2 == 0) { try { - mockMvc.perform(get("/user/{name}/friends", "Adam")) + mockMvc.perform(get("/user/{uuid}/friends", adam.getUuid())) .andExpect(status().isOk()) .andExpect(MockMvcResultMatchers.content().string("Daniela")); } catch (Exception e) { @@ -143,7 +150,7 @@ public class WebIntegrationIT extends MultiDriverTestClass { } else { try { - mockMvc.perform(get("/user/{name}/friends", "Vince")) + mockMvc.perform(get("/user/{uuid}/friends", vince.getUuid())) .andExpect(status().isOk()) .andExpect(MockMvcResultMatchers.content().string("Michal")); } catch (Exception e) { diff --git a/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/web/controller/UserController.java b/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/web/controller/UserController.java index 4c030ec76..74e8d97ee 100644 --- a/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/web/controller/UserController.java +++ b/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/web/controller/UserController.java @@ -26,6 +26,7 @@ import javax.servlet.http.HttpSession; import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.UUID; /** * @author Michal Bachman @@ -37,11 +38,11 @@ public class UserController { @Autowired private UserService userService; - @RequestMapping(value = "/user/{name}/friends") + @RequestMapping(value = "/user/{uuid}/friends") @ResponseBody @Transactional - public String listFriends(@PathVariable String name, HttpSession session) { - User user = userService.getUserByName(name); + public String listFriends(@PathVariable UUID uuid, HttpSession session) { + User user = userService.getUserByUuid(uuid); if (user == null) { return "No such user!"; @@ -55,11 +56,11 @@ public class UserController { return result.toString().trim(); } - @RequestMapping(value = "/user/{name}/immediateFriends") + @RequestMapping(value = "/user/{uuid}/immediateFriends") @ResponseBody @Transactional - public String listImmediateFriends(@PathVariable String name, HttpSession session) { - User user = userService.getUserByName(name); + public String listImmediateFriends(@PathVariable UUID uuid, HttpSession session) { + User user = userService.getUserByUuid(uuid); if (user == null) { return "No such user!"; diff --git a/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/web/domain/Cinema.java b/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/web/domain/Cinema.java index 56b0f1d24..2f68995f9 100644 --- a/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/web/domain/Cinema.java +++ b/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/web/domain/Cinema.java @@ -13,28 +13,42 @@ package org.springframework.data.neo4j.web.domain; +import org.neo4j.ogm.annotation.GraphId; +import org.neo4j.ogm.annotation.Index; import org.neo4j.ogm.annotation.NodeEntity; import org.neo4j.ogm.annotation.Relationship; +import org.neo4j.ogm.annotation.typeconversion.Convert; +import org.neo4j.ogm.typeconversion.UuidStringConverter; import java.util.HashSet; import java.util.Set; +import java.util.UUID; /** * @author Michal Bachman + * @author Mark Angrish */ @NodeEntity public class Cinema { + @GraphId private Long id; + + @Convert(UuidStringConverter.class) + @Index(unique = true, primary = true) + private UUID uuid; + private String name; @Relationship(direction = Relationship.INCOMING) - private Set visited = new HashSet<>(); + private Set visited; public Cinema() { } public Cinema(String name) { + this.visited = new HashSet<>(); + this.uuid = UUID.randomUUID(); this.name = name; } diff --git a/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/web/domain/Genre.java b/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/web/domain/Genre.java index bae5db971..21a4397f5 100644 --- a/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/web/domain/Genre.java +++ b/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/web/domain/Genre.java @@ -13,18 +13,35 @@ package org.springframework.data.neo4j.web.domain; +import java.util.UUID; + +import org.neo4j.ogm.annotation.GraphId; +import org.neo4j.ogm.annotation.Index; +import org.neo4j.ogm.annotation.NodeEntity; +import org.neo4j.ogm.annotation.typeconversion.Convert; +import org.neo4j.ogm.typeconversion.UuidStringConverter; + /** * @author Michal Bachman + * @author Mark Angrish */ +@NodeEntity public class Genre { + @GraphId private Long id; + + @Convert(UuidStringConverter.class) + @Index(unique = true, primary = true) + private UUID uuid; + private String name; public Genre() { } public Genre(String name) { + this.uuid = UUID.randomUUID(); this.name = name; } diff --git a/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/web/domain/User.java b/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/web/domain/User.java index 0f206490a..b644b22f0 100644 --- a/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/web/domain/User.java +++ b/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/web/domain/User.java @@ -13,28 +13,46 @@ package org.springframework.data.neo4j.web.domain; +import org.neo4j.ogm.annotation.GraphId; +import org.neo4j.ogm.annotation.Index; +import org.neo4j.ogm.annotation.NodeEntity; import org.neo4j.ogm.annotation.Relationship; +import org.neo4j.ogm.annotation.typeconversion.Convert; +import org.neo4j.ogm.typeconversion.UuidStringConverter; import java.util.Collection; import java.util.HashSet; import java.util.Set; +import java.util.UUID; /** * @author Michal Bachman + * @author Mark Angrish */ +@NodeEntity public class User { + @GraphId private Long id; + + @Convert(UuidStringConverter.class) + @Index(unique = true, primary = true) + private UUID uuid; + private String name; - private Collection interested = new HashSet<>(); + + private Collection interested; @Relationship(type = "FRIEND_OF", direction = Relationship.UNDIRECTED) - private Set friends = new HashSet<>(); + private Set friends; public User() { } public User(String name) { + this.interested = new HashSet<>(); + this.friends = new HashSet<>(); + this.uuid = UUID.randomUUID(); this.name = name; } @@ -66,4 +84,8 @@ public class User { public Collection getFriends() { return friends; } + + public UUID getUuid() { + return uuid; + } } diff --git a/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/web/repo/GenreRepository.java b/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/web/repo/GenreRepository.java index 958b2cd09..74a52db30 100644 --- a/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/web/repo/GenreRepository.java +++ b/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/web/repo/GenreRepository.java @@ -13,7 +13,9 @@ package org.springframework.data.neo4j.web.repo; -import org.springframework.data.neo4j.repository.GraphRepository; +import java.util.UUID; + +import org.springframework.data.neo4j.repository.Neo4jRepository; import org.springframework.data.neo4j.web.domain.Genre; import org.springframework.stereotype.Repository; @@ -22,6 +24,6 @@ import org.springframework.stereotype.Repository; * @author Mark Angrish */ @Repository -public interface GenreRepository extends GraphRepository { +public interface GenreRepository extends Neo4jRepository { } diff --git a/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/web/repo/UserRepository.java b/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/web/repo/UserRepository.java index da277c490..6b6a3807e 100644 --- a/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/web/repo/UserRepository.java +++ b/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/web/repo/UserRepository.java @@ -13,7 +13,10 @@ package org.springframework.data.neo4j.web.repo; +import java.util.UUID; + import org.springframework.data.neo4j.repository.GraphRepository; +import org.springframework.data.neo4j.repository.Neo4jRepository; import org.springframework.data.neo4j.web.domain.User; import org.springframework.stereotype.Repository; @@ -22,6 +25,6 @@ import org.springframework.stereotype.Repository; * @author Mark Angrish */ @Repository -public interface UserRepository extends GraphRepository { +public interface UserRepository extends Neo4jRepository { } diff --git a/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/web/service/UserService.java b/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/web/service/UserService.java index 38bca417d..99340d519 100644 --- a/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/web/service/UserService.java +++ b/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/web/service/UserService.java @@ -16,13 +16,14 @@ package org.springframework.data.neo4j.web.service; import org.springframework.data.neo4j.web.domain.User; import java.util.Collection; +import java.util.UUID; /** * @author Michal Bachman */ public interface UserService { - User getUserByName(String name); + User getUserByUuid(UUID uuid); Collection getNetwork(User user); } diff --git a/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/web/service/UserServiceImpl.java b/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/web/service/UserServiceImpl.java index bf0e2fd54..75f0a7a9d 100644 --- a/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/web/service/UserServiceImpl.java +++ b/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/web/service/UserServiceImpl.java @@ -13,15 +13,11 @@ package org.springframework.data.neo4j.web.service; -import java.util.Collection; -import java.util.Comparator; -import java.util.Set; -import java.util.TreeSet; +import java.util.*; -import org.neo4j.ogm.cypher.Filter; -import org.neo4j.ogm.session.Session; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.neo4j.web.domain.User; +import org.springframework.data.neo4j.web.repo.UserRepository; import org.springframework.stereotype.Service; /** @@ -32,15 +28,11 @@ import org.springframework.stereotype.Service; public class UserServiceImpl implements UserService { @Autowired - private Session session; + private UserRepository userRepository; @Override - public User getUserByName(String name) { - Iterable users = findByProperty("name", name); - if (!users.iterator().hasNext()) { - return null; - } - return users.iterator().next(); + public User getUserByUuid(UUID uuid) { + return userRepository.findOne(uuid); } @Override @@ -64,8 +56,4 @@ public class UserServiceImpl implements UserService { } } } - - protected Iterable findByProperty(String propertyName, Object propertyValue) { - return session.loadAll(User.class, new Filter(propertyName, propertyValue)); - } }