diff --git a/spring-cassandra/src/main/java/org/springframework/cassandra/core/util/CollectionUtils.java b/spring-cassandra/src/main/java/org/springframework/cassandra/core/util/CollectionUtils.java new file mode 100644 index 000000000..8004ca8e9 --- /dev/null +++ b/spring-cassandra/src/main/java/org/springframework/cassandra/core/util/CollectionUtils.java @@ -0,0 +1,22 @@ +package org.springframework.cassandra.core.util; + +import java.util.ArrayList; +import java.util.List; + +public class CollectionUtils { + + public static List toList(Iterable i) { + + List list = null; + if (i instanceof List) { + list = (List) i; + } else { + list = new ArrayList(); + for (T t : i) { + list.add(t); + } + } + + return list; + } +} diff --git a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/CassandraOperations.java b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/CassandraOperations.java index cdb608d30..fcbe05844 100644 --- a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/CassandraOperations.java +++ b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/CassandraOperations.java @@ -461,4 +461,6 @@ public interface CassandraOperations extends CqlOperations { void deleteById(Class clazz, Object id); List selectByIds(Class clazz, Iterable ids); + + List selectAll(Class clazz); } diff --git a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/CassandraTemplate.java b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/CassandraTemplate.java index 577e6fafd..2bfc6e9bb 100644 --- a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/CassandraTemplate.java +++ b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/CassandraTemplate.java @@ -142,8 +142,12 @@ public class CassandraTemplate extends CqlTemplate implements CassandraOperation @Override public void delete(List entities) { + + Assert.notEmpty(entities); + String tableName = getTableName(entities.get(0).getClass()); Assert.notNull(tableName); + delete(entities, tableName); } @@ -394,13 +398,32 @@ public class CassandraTemplate extends CqlTemplate implements CassandraOperation return insert(tableName, entity, options, true); } + @Override + public List selectAll(Class selectClass) { + + Assert.notNull(selectClass); + + CassandraPersistentEntity entity = mappingContext.getPersistentEntity(selectClass); + if (entity == null) { + throw new IllegalArgumentException(String.format("unknown persistent class [%s]", selectClass.getName())); + } + return select(QueryBuilder.select().all().from(entity.getTableName()), selectClass); + } + @Override public List select(Select cql, Class selectClass) { + + Assert.notNull(cql); + return select(cql.getQueryString(), selectClass); } @Override public List select(String cql, Class selectClass) { + + Assert.hasText(cql); + Assert.notNull(selectClass); + return select(cql, new ReadRowCallback(cassandraConverter, selectClass)); } diff --git a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/repository/support/MappingCassandraEntityInformation.java b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/repository/support/MappingCassandraEntityInformation.java index 5e53f5fa9..2d0727ea8 100644 --- a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/repository/support/MappingCassandraEntityInformation.java +++ b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/repository/support/MappingCassandraEntityInformation.java @@ -22,6 +22,7 @@ import org.springframework.data.cassandra.mapping.CassandraPersistentProperty; import org.springframework.data.cassandra.repository.query.CassandraEntityInformation; import org.springframework.data.mapping.model.BeanWrapper; import org.springframework.data.repository.core.support.AbstractEntityInformation; +import org.springframework.util.Assert; /** * {@link CassandraEntityInformation} implementation using a {@link CassandraPersistentEntity} instance to lookup the @@ -63,17 +64,14 @@ public class MappingCassandraEntityInformation exten @Override public ID getId(T entity) { - CassandraPersistentProperty idProperty = entityMetadata.getIdProperty(); + Assert.notNull(entity); + CassandraPersistentProperty idProperty = entityMetadata.getIdProperty(); if (idProperty == null) { return null; } - try { - return (ID) BeanWrapper.create(entity, null).getProperty(idProperty); - } catch (Exception e) { - throw new RuntimeException(e); - } + return (ID) BeanWrapper.create(entity, null).getProperty(idProperty); } @SuppressWarnings("unchecked") diff --git a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/repository/support/SimpleCassandraRepository.java b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/repository/support/SimpleCassandraRepository.java index da529aa6e..3e5179475 100644 --- a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/repository/support/SimpleCassandraRepository.java +++ b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/repository/support/SimpleCassandraRepository.java @@ -16,34 +16,26 @@ package org.springframework.data.cassandra.repository.support; import java.io.Serializable; -import java.util.ArrayList; -import java.util.Collections; import java.util.List; -import org.springframework.cassandra.core.CqlOperations; -import org.springframework.data.cassandra.core.CassandraOperations; +import org.springframework.cassandra.core.util.CollectionUtils; import org.springframework.data.cassandra.core.CassandraTemplate; import org.springframework.data.cassandra.repository.CassandraRepository; import org.springframework.data.cassandra.repository.query.CassandraEntityInformation; import org.springframework.util.Assert; -import com.datastax.driver.core.querybuilder.Clause; -import com.datastax.driver.core.querybuilder.Delete; -import com.datastax.driver.core.querybuilder.QueryBuilder; import com.datastax.driver.core.querybuilder.Select; -import com.datastax.driver.core.querybuilder.Select.Where; /** * Repository base implementation for Cassandra. * * @author Alex Shvid - * + * @author Matthew T. Adams */ - public class SimpleCassandraRepository implements CassandraRepository { - protected final CassandraTemplate cassandraTemplate; - protected final CassandraEntityInformation entityInformation; + protected CassandraTemplate template; + protected CassandraEntityInformation entityInformation; /** * Creates a new {@link SimpleCassandraRepository} for the given {@link CassandraEntityInformation} and @@ -52,147 +44,71 @@ public class SimpleCassandraRepository implements Ca * @param metadata must not be {@literal null}. * @param template must not be {@literal null}. */ - public SimpleCassandraRepository(CassandraEntityInformation metadata, CassandraTemplate cassandraTemplate) { + public SimpleCassandraRepository(CassandraEntityInformation metadata, CassandraTemplate template) { - Assert.notNull(cassandraTemplate); + Assert.notNull(template); Assert.notNull(metadata); this.entityInformation = metadata; - this.cassandraTemplate = cassandraTemplate; + this.template = template; } - /* - * (non-Javadoc) - * @see org.springframework.data.repository.CrudRepository#save(java.lang.Object) - */ @Override public S save(S entity) { - - Assert.notNull(entity, "Entity must not be null!"); - cassandraTemplate.insert(entity, entityInformation.getTableName()); - return entity; + return template.insert(entity, entityInformation.getTableName()); } - /* - * (non-Javadoc) - * @see org.springframework.data.repository.CrudRepository#save(java.lang.Iterable) - */ @Override public List save(Iterable entities) { - - Assert.notNull(entities, "The given Iterable of entities not be null!"); - - List result = new ArrayList(); - - for (S entity : entities) { - save(entity); - result.add(entity); - } - - return result; + return template.insert(CollectionUtils.toList(entities)); } @Override public T findOne(ID id) { - return cassandraTemplate.selectOneById(entityInformation.getJavaType(), id); + return template.selectOneById(entityInformation.getJavaType(), id); } @Override public boolean exists(ID id) { - return cassandraTemplate.countById(entityInformation.getJavaType(), id) >= 1; // TODO: == instead of >= ? + return template.countById(entityInformation.getJavaType(), id) >= 1; // TODO: == instead of >= ? } @Override public long count() { - return cassandraTemplate.count(entityInformation.getTableName()); + return template.count(entityInformation.getTableName()); } @Override public void delete(ID id) { - cassandraTemplate.deleteById(entityInformation.getJavaType(), id); + template.deleteById(entityInformation.getJavaType(), id); } - /* - * (non-Javadoc) - * @see org.springframework.data.repository.CrudRepository#delete(java.lang.Object) - */ @Override public void delete(T entity) { - Assert.notNull(entity, "The given entity must not be null!"); delete(entityInformation.getId(entity)); } - /* - * (non-Javadoc) - * @see org.springframework.data.repository.CrudRepository#delete(java.lang.Iterable) - */ @Override public void delete(Iterable entities) { - - Assert.notNull(entities, "The given Iterable of entities not be null!"); - - for (T entity : entities) { - delete(entity); - } + template.delete(CollectionUtils.toList(entities)); } - /* - * (non-Javadoc) - * @see org.springframework.data.repository.CrudRepository#deleteAll() - */ @Override public void deleteAll() { - cassandraTemplate.truncate(entityInformation.getTableName()); + template.truncate(entityInformation.getTableName()); } - /* - * (non-Javadoc) - * @see org.springframework.data.repository.CrudRepository#findAll() - */ @Override public List findAll() { - Select select = QueryBuilder.select().all().from(entityInformation.getTableName()); - return findAll(select); + return template.selectAll(entityInformation.getJavaType()); } @Override public Iterable findAll(Iterable ids) { - - return cassandraTemplate.selectByIds(entityInformation.getJavaType(), ids); + return template.selectByIds(entityInformation.getJavaType(), ids); } protected List findAll(Select query) { - - if (query == null) { - return Collections.emptyList(); - } - - return cassandraTemplate.select(query, entityInformation.getJavaType()); + return template.select(query, entityInformation.getJavaType()); } - - /** - * Returns the underlying {@link CqlOperations} instance. - * - * @return - */ - protected CqlOperations getCassandraOperations() { - return this.cassandraTemplate; - } - - /** - * Returns the underlying {@link CassandraOperations} instance. - * - * @return - */ - protected CassandraOperations getCassandraDataOperations() { - return this.cassandraTemplate; - } - - /** - * @return the entityInformation - */ - protected CassandraEntityInformation getEntityInformation() { - return entityInformation; - } - }