From 91a4f0b2326cb95a52f5e8b17598a93ee5cf0861 Mon Sep 17 00:00:00 2001 From: Oliver Gierke Date: Mon, 14 Dec 2015 20:35:56 +0100 Subject: [PATCH] DATACASS-245 - Adapted to API changes in Spring Data Commons. Related ticket: DATACMNS-89. --- .../query/CassandraQueryMethod.java | 5 +++-- .../support/CassandraRepositoryFactory.java | 10 ++++++++-- ...ngBasedCassandraQueryIntegrationTests.java | 19 ++++++++++++------- 3 files changed, 23 insertions(+), 11 deletions(-) diff --git a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/repository/query/CassandraQueryMethod.java b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/repository/query/CassandraQueryMethod.java index bed5e2f33..94547c666 100644 --- a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/repository/query/CassandraQueryMethod.java +++ b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/repository/query/CassandraQueryMethod.java @@ -17,6 +17,7 @@ import org.springframework.core.annotation.AnnotationUtils; import org.springframework.dao.InvalidDataAccessApiUsageException; import org.springframework.data.cassandra.mapping.CassandraMappingContext; import org.springframework.data.cassandra.repository.Query; +import org.springframework.data.projection.ProjectionFactory; import org.springframework.data.repository.core.RepositoryMetadata; import org.springframework.data.repository.query.QueryMethod; import org.springframework.data.util.ClassTypeInformation; @@ -61,9 +62,9 @@ public class CassandraQueryMethod extends QueryMethod { protected Set stringLikeParameterIndexes = new HashSet(); protected Set dateParameterIndexes = new HashSet(); - public CassandraQueryMethod(Method method, RepositoryMetadata metadata, CassandraMappingContext mappingContext) { + public CassandraQueryMethod(Method method, RepositoryMetadata metadata, ProjectionFactory factory, CassandraMappingContext mappingContext) { - super(method, metadata); + super(method, metadata, factory); verify(method, metadata); diff --git a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/repository/support/CassandraRepositoryFactory.java b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/repository/support/CassandraRepositoryFactory.java index 24048932d..15959297c 100644 --- a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/repository/support/CassandraRepositoryFactory.java +++ b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/repository/support/CassandraRepositoryFactory.java @@ -27,6 +27,7 @@ import org.springframework.data.cassandra.repository.query.CassandraEntityInform import org.springframework.data.cassandra.repository.query.CassandraQueryMethod; import org.springframework.data.cassandra.repository.query.StringBasedCassandraQuery; import org.springframework.data.mapping.model.MappingException; +import org.springframework.data.projection.ProjectionFactory; import org.springframework.data.repository.core.NamedQueries; import org.springframework.data.repository.core.RepositoryInformation; import org.springframework.data.repository.core.RepositoryMetadata; @@ -99,10 +100,15 @@ public class CassandraRepositoryFactory extends RepositoryFactorySupport { private class CassandraQueryLookupStrategy implements QueryLookupStrategy { + /* + * (non-Javadoc) + * @see org.springframework.data.repository.query.QueryLookupStrategy#resolveQuery(java.lang.reflect.Method, org.springframework.data.repository.core.RepositoryMetadata, org.springframework.data.projection.ProjectionFactory, org.springframework.data.repository.core.NamedQueries) + */ @Override - public RepositoryQuery resolveQuery(Method method, RepositoryMetadata metadata, NamedQueries namedQueries) { + public RepositoryQuery resolveQuery(Method method, RepositoryMetadata metadata, ProjectionFactory factory, + NamedQueries namedQueries) { - CassandraQueryMethod queryMethod = new CassandraQueryMethod(method, metadata, mappingContext); + CassandraQueryMethod queryMethod = new CassandraQueryMethod(method, metadata, factory, mappingContext); String namedQueryName = queryMethod.getNamedQueryName(); if (namedQueries.hasQuery(namedQueryName)) { diff --git a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/querymethods/declared/StringBasedCassandraQueryIntegrationTests.java b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/querymethods/declared/StringBasedCassandraQueryIntegrationTests.java index 1edbc2007..699d24900 100644 --- a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/querymethods/declared/StringBasedCassandraQueryIntegrationTests.java +++ b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/querymethods/declared/StringBasedCassandraQueryIntegrationTests.java @@ -30,7 +30,11 @@ import org.springframework.data.cassandra.repository.Query; import org.springframework.data.cassandra.repository.query.CassandraParametersParameterAccessor; import org.springframework.data.cassandra.repository.query.CassandraQueryMethod; import org.springframework.data.cassandra.repository.query.StringBasedCassandraQuery; +import org.springframework.data.projection.ProjectionFactory; +import org.springframework.data.projection.SpelAwareProxyProjectionFactory; +import org.springframework.data.repository.Repository; import org.springframework.data.repository.core.RepositoryMetadata; +import org.springframework.data.repository.core.support.AbstractRepositoryMetadata; import com.datastax.driver.core.SimpleStatement; import com.datastax.driver.core.querybuilder.QueryBuilder; @@ -39,8 +43,7 @@ import com.datastax.driver.core.querybuilder.Select; import static org.hamcrest.Matchers.is; import static org.junit.Assert.assertThat; - -import static org.mockito.Mockito.when; +import static org.mockito.Mockito.*; /** * Unit tests for {@link StringBasedCassandraQuery}. @@ -50,24 +53,26 @@ public class StringBasedCassandraQueryIntegrationTests { @Mock CassandraOperations operations; - @Mock + RepositoryMetadata metadata; - CassandraConverter converter; + ProjectionFactory factory; @Before public void setUp() { when(operations.getConverter()).thenReturn(converter); + this.metadata = AbstractRepositoryMetadata.getMetadata(SampleRepository.class); this.converter = new MappingCassandraConverter(new BasicCassandraMappingContext()); + this.factory = new SpelAwareProxyProjectionFactory(); } @Test public void bindsSimplePropertyCorrectly() throws Exception { Method method = SampleRepository.class.getMethod("findByLastname", String.class); - CassandraQueryMethod queryMethod = new CassandraQueryMethod(method, metadata, converter.getMappingContext()); + CassandraQueryMethod queryMethod = new CassandraQueryMethod(method, metadata, factory, converter.getMappingContext()); StringBasedCassandraQuery cassandraQuery = new StringBasedCassandraQuery(queryMethod, operations); CassandraParametersParameterAccessor accesor = new CassandraParametersParameterAccessor(queryMethod, "Matthews"); @@ -86,7 +91,7 @@ public class StringBasedCassandraQueryIntegrationTests { public void bindsMultipleParametersCorrectly() throws Exception { Method method = SampleRepository.class.getMethod("findByLastnameAndFirstname", String.class, String.class); - CassandraQueryMethod queryMethod = new CassandraQueryMethod(method, metadata, converter.getMappingContext()); + CassandraQueryMethod queryMethod = new CassandraQueryMethod(method, metadata, factory, converter.getMappingContext()); StringBasedCassandraQuery cassandraQuery = new StringBasedCassandraQuery(queryMethod, operations); CassandraParametersParameterAccessor accesor = new CassandraParametersParameterAccessor(queryMethod, "Matthews", "John"); @@ -102,7 +107,7 @@ public class StringBasedCassandraQueryIntegrationTests { assertThat(actual.getQueryString(), is(expected.getQueryString())); } - private interface SampleRepository { + private interface SampleRepository extends Repository { @Query("SELECT * FROM person WHERE lastname=?0;") Person findByLastname(String lastname);