Browse Source

DATAJPA-19 - Adapted generics and metadata changes made in core.

pull/1/head
Oliver Gierke 15 years ago
parent
commit
4daab96bc4
  1. 141
      spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/repository/MongoQueryMethod.java
  2. 375
      spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/repository/SimpleMongoRepository.java

141
spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/repository/MongoQueryMethod.java

@ -15,86 +15,85 @@
*/ */
package org.springframework.data.document.mongodb.repository; package org.springframework.data.document.mongodb.repository;
import java.lang.reflect.Method;
import org.springframework.core.annotation.AnnotationUtils; import org.springframework.core.annotation.AnnotationUtils;
import org.springframework.data.repository.query.QueryMethod; import org.springframework.data.repository.query.QueryMethod;
import org.springframework.data.repository.util.ClassUtils; import org.springframework.data.repository.util.ClassUtils;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import java.lang.reflect.Method;
/** /**
*
* TODO - Extract methods for {@link #getAnnotatedQuery()} into superclass as it is currently copied from Spring Data * TODO - Extract methods for {@link #getAnnotatedQuery()} into superclass as it is currently copied from Spring Data
* JPA * JPA
*
* @author Oliver Gierke * @author Oliver Gierke
*/ */
class MongoQueryMethod extends QueryMethod { class MongoQueryMethod extends QueryMethod {
private final Method method; private final Method method;
private final MongoEntityInformation<?, ?> entityInformation; private final MongoEntityInformation<?, ?> entityInformation;
/** /**
* Creates a new {@link MongoQueryMethod} from the given {@link Method}. * Creates a new {@link MongoQueryMethod} from the given {@link Method}.
* *
* @param method * @param method
*/ */
@SuppressWarnings({"unchecked"}) public MongoQueryMethod(Method method, Class<?> domainClass) {
public MongoQueryMethod(Method method, Class<?> domainClass) { super(method);
super(method); this.method = method;
this.method = method; this.entityInformation = new MongoEntityInformation(ClassUtils.getReturnedDomainClass(method));
this.entityInformation = new MongoEntityInformation(ClassUtils.getReturnedDomainClass(method)); }
}
/**
/** * Returns whether the method has an annotated query.
* Returns whether the method has an annotated query. *
* * @return
* @return */
*/ boolean hasAnnotatedQuery() {
boolean hasAnnotatedQuery() { return getAnnotatedQuery() != null;
return getAnnotatedQuery() != null; }
}
/**
/** * Returns the query string declared in a {@link Query} annotation or {@literal null} if neither the annotation
* Returns the query string declared in a {@link Query} annotation or {@literal null} if neither the annotation * found nor the attribute was specified.
* found nor the attribute was specified. *
* * @return
* @return */
*/ String getAnnotatedQuery() {
String getAnnotatedQuery() {
String query = (String) AnnotationUtils.getValue(getQueryAnnotation());
String query = (String) AnnotationUtils.getValue(getQueryAnnotation()); return StringUtils.hasText(query) ? query : null;
return StringUtils.hasText(query) ? query : null; }
}
/**
/** * Returns the field specification to be used for the query.
* Returns the field specification to be used for the query. *
* * @return
* @return */
*/ String getFieldSpecification() {
String getFieldSpecification() {
String value = (String) AnnotationUtils.getValue(getQueryAnnotation(), "fields");
String value = (String) AnnotationUtils.getValue(getQueryAnnotation(), "fields"); return StringUtils.hasText(value) ? value : null;
return StringUtils.hasText(value) ? value : null; }
}
/* (non-Javadoc)
/* (non-Javadoc) * @see org.springframework.data.repository.query.QueryMethod#getEntityMetadata()
* @see org.springframework.data.repository.query.QueryMethod#getEntityMetadata() */
*/ @Override
@Override public MongoEntityInformation<?, ?> getEntityInformation() {
public MongoEntityInformation<?, ?> getEntityInformation() {
return entityInformation;
return entityInformation; }
}
/**
/** * Returns the {@link Query} annotation that is applied to the method or {@code null} if none available.
* Returns the {@link Query} annotation that is applied to the method or {@code null} if none available. *
* * @return
* @return */
*/ private Query getQueryAnnotation() {
private Query getQueryAnnotation() {
return method.getAnnotation(Query.class);
return method.getAnnotation(Query.class); }
}
} }

375
spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/repository/SimpleMongoRepository.java

@ -15,6 +15,13 @@
*/ */
package org.springframework.data.document.mongodb.repository; package org.springframework.data.document.mongodb.repository;
import static org.springframework.data.document.mongodb.query.Criteria.*;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.bson.types.ObjectId; import org.bson.types.ObjectId;
import org.springframework.data.document.mongodb.MongoTemplate; import org.springframework.data.document.mongodb.MongoTemplate;
import org.springframework.data.document.mongodb.query.Criteria; import org.springframework.data.document.mongodb.query.Criteria;
@ -26,199 +33,189 @@ import org.springframework.data.domain.Sort;
import org.springframework.data.repository.PagingAndSortingRepository; import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.util.Assert; import org.springframework.util.Assert;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import static org.springframework.data.document.mongodb.query.Criteria.where;
/** /**
* Repository base implementation for Mongo. * Repository base implementation for Mongo.
* *
* @author Oliver Gierke * @author Oliver Gierke
*/ */
public class SimpleMongoRepository<T, ID extends Serializable> implements PagingAndSortingRepository<T, ID> { public class SimpleMongoRepository<T, ID extends Serializable> implements PagingAndSortingRepository<T, ID> {
private final MongoTemplate template; private final MongoTemplate template;
private final MongoEntityInformation<T, ID> entityInformation; private final MongoEntityInformation<T, ID> entityInformation;
/** /**
* Creates a ew {@link SimpleMongoRepository} for the given {@link MongoInformation} and {@link MongoTemplate}. * Creates a ew {@link SimpleMongoRepository} for the given {@link MongoInformation} and {@link MongoTemplate}.
* *
* @param metadata * @param metadata
* @param template * @param template
*/ */
public SimpleMongoRepository(MongoEntityInformation<T, ID> metadata, MongoTemplate template) { public SimpleMongoRepository(MongoEntityInformation<T, ID> metadata, MongoTemplate template) {
Assert.notNull(template); Assert.notNull(template);
Assert.notNull(metadata); Assert.notNull(metadata);
this.entityInformation = metadata; this.entityInformation = metadata;
this.template = template; this.template = template;
} }
/* /*
* (non-Javadoc) * (non-Javadoc)
* *
* @see org.springframework.data.repository.Repository#save(java.lang.Object) * @see org.springframework.data.repository.Repository#save(java.lang.Object)
*/ */
public T save(T entity) { public T save(T entity) {
template.save(entityInformation.getCollectionName(), entity); template.save(entityInformation.getCollectionName(), entity);
return entity; return entity;
} }
/* /*
* (non-Javadoc) * (non-Javadoc)
* *
* @see org.springframework.data.repository.Repository#save(java.lang.Iterable) * @see org.springframework.data.repository.Repository#save(java.lang.Iterable)
*/ */
public List<T> save(Iterable<? extends T> entities) { public List<T> save(Iterable<? extends T> entities) {
List<T> result = new ArrayList<T>(); List<T> result = new ArrayList<T>();
for (T entity : entities) { for (T entity : entities) {
save(entity); save(entity);
result.add(entity); result.add(entity);
} }
return result; return result;
} }
/* /*
* (non-Javadoc) * (non-Javadoc)
* *
* @see org.springframework.data.repository.Repository#findById(java.io.Serializable ) * @see org.springframework.data.repository.Repository#findById(java.io.Serializable )
*/ */
public T findById(ID id) { public T findById(ID id) {
return template.findOne(entityInformation.getCollectionName(), getIdQuery(id), entityInformation.getJavaType()); return template.findOne(entityInformation.getCollectionName(), getIdQuery(id), entityInformation.getJavaType());
} }
private Query getIdQuery(Object id) { private Query getIdQuery(Object id) {
return new Query(getIdCriteria(id)); return new Query(getIdCriteria(id));
} }
private Criteria getIdCriteria(Object id) { private Criteria getIdCriteria(Object id) {
ObjectId objectId = template.getConverter().convertObjectId(id); ObjectId objectId = template.getConverter().convertObjectId(id);
return where(entityInformation.getIdAttribute()).is(objectId); return where(entityInformation.getIdAttribute()).is(objectId);
} }
public T findOne(ID id) {
return null; /*
} * (non-Javadoc)
*
/* * @see org.springframework.data.repository.Repository#exists(java.io.Serializable )
* (non-Javadoc) */
* public boolean exists(ID id) {
* @see org.springframework.data.repository.Repository#exists(java.io.Serializable )
*/ return findById(id) != null;
public boolean exists(ID id) { }
return findById(id) != null; /*
} * (non-Javadoc)
*
/* * @see org.springframework.data.repository.Repository#count()
* (non-Javadoc) */
* public Long count() {
* @see org.springframework.data.repository.Repository#count()
*/ return template.getCollection(entityInformation.getCollectionName()).count();
public Long count() { }
return template.getCollection(entityInformation.getCollectionName()).count(); /*
} * (non-Javadoc)
*
/* * @see org.springframework.data.repository.Repository#delete(java.lang.Object)
* (non-Javadoc) */
* public void delete(T entity) {
* @see org.springframework.data.repository.Repository#delete(java.lang.Object)
*/ template.remove(entityInformation.getCollectionName(), getIdQuery(entityInformation.getId(entity)));
public void delete(T entity) { }
template.remove(entityInformation.getCollectionName(), getIdQuery(entityInformation.getId(entity))); /*
} * (non-Javadoc)
*
/* * @see org.springframework.data.repository.Repository#delete(java.lang.Iterable)
* (non-Javadoc) */
* public void delete(Iterable<? extends T> entities) {
* @see org.springframework.data.repository.Repository#delete(java.lang.Iterable)
*/ for (T entity : entities) {
public void delete(Iterable<? extends T> entities) { delete(entity);
}
for (T entity : entities) { }
delete(entity);
} /*
} * (non-Javadoc)
*
/* * @see org.springframework.data.repository.Repository#deleteAll()
* (non-Javadoc) */
* public void deleteAll() {
* @see org.springframework.data.repository.Repository#deleteAll()
*/ template.dropCollection(entityInformation.getCollectionName());
public void deleteAll() { }
template.dropCollection(entityInformation.getCollectionName()); /* (non-Javadoc)
} * @see org.springframework.data.repository.Repository#findAll()
*/
/* (non-Javadoc) public List<T> findAll() {
* @see org.springframework.data.repository.Repository#findAll() return findAll(new Query());
*/ }
public List<T> findAll() {
return findAll(new Query()); /*
} * (non-Javadoc)
*
/* * @see org.springframework.data.repository.PagingAndSortingRepository#findAll
* (non-Javadoc) * (org.springframework.data.domain.Pageable)
* */
* @see org.springframework.data.repository.PagingAndSortingRepository#findAll public Page<T> findAll(final Pageable pageable) {
* (org.springframework.data.domain.Pageable)
*/ Long count = count();
public Page<T> findAll(final Pageable pageable) { List<T> list = findAll(QueryUtils.applyPagination(new Query(), pageable));
Long count = count(); return new PageImpl<T>(list, pageable, count);
List<T> list = findAll(QueryUtils.applyPagination(new Query(), pageable)); }
return new PageImpl<T>(list, pageable, count); /*
} * (non-Javadoc)
*
/* * @see org.springframework.data.repository.PagingAndSortingRepository#findAll
* (non-Javadoc) * (org.springframework.data.domain.Sort)
* */
* @see org.springframework.data.repository.PagingAndSortingRepository#findAll public List<T> findAll(final Sort sort) {
* (org.springframework.data.domain.Sort)
*/ return findAll(QueryUtils.applySorting(new Query(), sort));
public List<T> findAll(final Sort sort) { }
return findAll(QueryUtils.applySorting(new Query(), sort)); /*
} * (non-Javadoc)
*
/* * @see org.springframework.data.repository.Repository#findAll(java.lang.Iterable)
* (non-Javadoc) */
* public List<T> findAll(Iterable<ID> ids) {
* @see org.springframework.data.repository.Repository#findAll(java.lang.Iterable)
*/ Query query = null;
public List<T> findAll(Iterable<ID> ids) {
for (ID id : ids) {
Query query = null; if (query == null) {
query = getIdQuery(id);
for (ID id : ids) { } else {
if (query == null) { query = new Query().or(getIdQuery(id));
query = getIdQuery(id); }
} else { }
query = new Query().or(getIdQuery(id));
} return findAll(query);
} }
return findAll(query); private List<T> findAll(Query query) {
}
if (query == null) {
private List<T> findAll(Query query) { return Collections.emptyList();
}
if (query == null) {
return Collections.emptyList(); return template.find(entityInformation.getCollectionName(), query, entityInformation.getJavaType());
} }
return template.find(entityInformation.getCollectionName(), query, entityInformation.getJavaType());
}
} }

Loading…
Cancel
Save