From 68635687d1766ec5bc5782ac98ff5b7bc3b2fab2 Mon Sep 17 00:00:00 2001 From: Oliver Gierke Date: Fri, 11 Mar 2011 16:32:21 +0100 Subject: [PATCH] DATAJPA-19 - Adapted generics and metadata changes made in core. --- .../repository/AbstractMongoQuery.java | 4 +- .../repository/MongoEntityInformation.java | 32 ++++++++++++++-- .../mongodb/repository/MongoQueryMethod.java | 4 +- .../MongoRepositoryFactoryBean.java | 38 ++++++++++++++----- .../repository/PartTreeMongoQuery.java | 2 +- .../repository/SimpleMongoRepository.java | 4 +- .../MongoEntityMetadataUnitTests.java | 6 +-- spring-data-mongodb/template.mf | 1 + 8 files changed, 68 insertions(+), 23 deletions(-) diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/repository/AbstractMongoQuery.java b/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/repository/AbstractMongoQuery.java index 617f538ba..51ff7bb73 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/repository/AbstractMongoQuery.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/repository/AbstractMongoQuery.java @@ -100,7 +100,7 @@ public abstract class AbstractMongoQuery implements RepositoryQuery { protected List readCollection(Query query) { - MongoEntityInformation metadata = method.getEntityMetadata(); + MongoEntityInformation metadata = method.getEntityInformation(); String collectionName = metadata.getCollectionName(); return template.find(collectionName, query, metadata.getJavaType()); @@ -155,7 +155,7 @@ public abstract class AbstractMongoQuery implements RepositoryQuery { @SuppressWarnings({ "rawtypes", "unchecked" }) Object execute(Query query) { - MongoEntityInformation metadata = method.getEntityMetadata(); + MongoEntityInformation metadata = method.getEntityInformation(); int count = getCollectionCursor(metadata.getCollectionName(), query.getQueryObject()).count(); List result = template.find(metadata.getCollectionName(), applyPagination(query, pageable), diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/repository/MongoEntityInformation.java b/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/repository/MongoEntityInformation.java index 1ace73e3e..f84c5b3eb 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/repository/MongoEntityInformation.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/repository/MongoEntityInformation.java @@ -15,6 +15,7 @@ */ package org.springframework.data.document.mongodb.repository; +import java.io.Serializable; import java.lang.reflect.Field; import java.util.Arrays; import java.util.List; @@ -30,7 +31,7 @@ import org.springframework.util.StringUtils; * * @author Oliver Gierke */ -class MongoEntityInformation extends AbstractEntityInformation { +class MongoEntityInformation extends AbstractEntityInformation { private static final List FIELD_NAMES = Arrays.asList("ID", "id", "_id"); private Field field; @@ -64,11 +65,22 @@ class MongoEntityInformation extends AbstractEntityInformation } + /** + * Returns the name of the collection the entity shall be persisted to. + * + * @return + */ public String getCollectionName() { return StringUtils.uncapitalize(getJavaType().getSimpleName()); } + + /** + * Returns the attribute that the id will be persisted to. + * + * @return + */ public String getIdAttribute() { return "_id"; @@ -82,8 +94,22 @@ class MongoEntityInformation extends AbstractEntityInformation * org.springframework.data.repository.support.IdAware#getId(java.lang.Object * ) */ - public Object getId(Object entity) { + @SuppressWarnings("unchecked") + public ID getId(Object entity) { - return ReflectionUtils.getField(field, entity); + return (ID) ReflectionUtils.getField(field, entity); + } + + + /* + * (non-Javadoc) + * + * @see + * org.springframework.data.repository.support.EntityInformation#getIdType() + */ + @SuppressWarnings("unchecked") + public Class getIdType() { + + return (Class) field.getType(); } } \ No newline at end of file diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/repository/MongoQueryMethod.java b/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/repository/MongoQueryMethod.java index 9d6da84b6..54d6f0606 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/repository/MongoQueryMethod.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/repository/MongoQueryMethod.java @@ -31,7 +31,7 @@ import org.springframework.util.StringUtils; class MongoQueryMethod extends QueryMethod { private final Method method; - private final MongoEntityInformation entityInformation; + private final MongoEntityInformation entityInformation; /** * Creates a new {@link MongoQueryMethod} from the given {@link Method}. @@ -82,7 +82,7 @@ class MongoQueryMethod extends QueryMethod { * @see org.springframework.data.repository.query.QueryMethod#getEntityMetadata() */ @Override - public MongoEntityInformation getEntityMetadata() { + public MongoEntityInformation getEntityInformation() { return entityInformation; } diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/repository/MongoRepositoryFactoryBean.java b/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/repository/MongoRepositoryFactoryBean.java index ca4be6d09..00cb3d88a 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/repository/MongoRepositoryFactoryBean.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/repository/MongoRepositoryFactoryBean.java @@ -43,7 +43,7 @@ import org.springframework.util.StringUtils; * * @author Oliver Gierke */ -public class MongoRepositoryFactoryBean extends RepositoryFactoryBeanSupport> { +public class MongoRepositoryFactoryBean, S, ID extends Serializable> extends RepositoryFactoryBeanSupport { private MongoTemplate template; @@ -101,14 +101,7 @@ public class MongoRepositoryFactoryBean extends RepositoryFactoryBeanSupport info = new MongoEntityInformation( - (Class) metadata.getDomainClass()); - return new SimpleMongoRepository(info, template); - } + /* * (non-Javadoc) @@ -162,6 +155,31 @@ public class MongoRepositoryFactoryBean extends RepositoryFactoryBeanSupport MongoEntityInformation getEntityInformation( + Class domainClass) { + + return new MongoEntityInformation(domainClass); + } + + + /* + * (non-Javadoc) + * @see org.springframework.data.repository.support.RepositoryFactorySupport#getTargetRepository(org.springframework.data.repository.support.RepositoryMetadata) + */ + @Override + @SuppressWarnings({ "unchecked", "rawtypes" }) + protected Object getTargetRepository(RepositoryMetadata metadata) { + + MongoEntityInformation info = getEntityInformation( + metadata.getDomainClass()); + return new SimpleMongoRepository(info, template); + } } /** @@ -199,7 +217,7 @@ public class MongoRepositoryFactoryBean extends RepositoryFactoryBeanSupport metadata = query.getQueryMethod().getEntityMetadata(); + MongoEntityInformation metadata = query.getQueryMethod().getEntityInformation(); operations.ensureIndex(metadata.getCollectionName(), index); LOG.debug(String.format("Created index %s!", index.toString())); } diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/repository/PartTreeMongoQuery.java b/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/repository/PartTreeMongoQuery.java index 1ea20789e..0ccf0f11f 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/repository/PartTreeMongoQuery.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/repository/PartTreeMongoQuery.java @@ -39,7 +39,7 @@ public class PartTreeMongoQuery extends AbstractMongoQuery { public PartTreeMongoQuery(MongoQueryMethod method, MongoTemplate template) { super(method, template); - this.tree = new PartTree(method.getName(), method.getEntityMetadata().getJavaType()); + this.tree = new PartTree(method.getName(), method.getEntityInformation().getJavaType()); } /** diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/repository/SimpleMongoRepository.java b/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/repository/SimpleMongoRepository.java index 1d7b07544..813529021 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/repository/SimpleMongoRepository.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/repository/SimpleMongoRepository.java @@ -41,7 +41,7 @@ import org.springframework.util.Assert; public class SimpleMongoRepository implements PagingAndSortingRepository { private final MongoTemplate template; - private final MongoEntityInformation entityInformation; + private final MongoEntityInformation entityInformation; /** * Creates a ew {@link SimpleMongoRepository} for the given {@link MongoInformation} and {@link MongoTemplate}. @@ -49,7 +49,7 @@ public class SimpleMongoRepository implements Paging * @param metadata * @param template */ - public SimpleMongoRepository(MongoEntityInformation metadata, MongoTemplate template) { + public SimpleMongoRepository(MongoEntityInformation metadata, MongoTemplate template) { Assert.notNull(template); Assert.notNull(metadata); diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/repository/MongoEntityMetadataUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/repository/MongoEntityMetadataUnitTests.java index 7446377ab..9dc06d195 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/repository/MongoEntityMetadataUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/repository/MongoEntityMetadataUnitTests.java @@ -31,8 +31,8 @@ public class MongoEntityMetadataUnitTests { @Test public void findsIdField() throws Exception { - MongoEntityInformation isNewAware = - new MongoEntityInformation(Person.class); + MongoEntityInformation isNewAware = + new MongoEntityInformation(Person.class); Person person = new Person(); assertThat(isNewAware.isNew(person), is(true)); @@ -44,7 +44,7 @@ public class MongoEntityMetadataUnitTests { @Test(expected = IllegalArgumentException.class) public void rejectsClassIfNoIdField() throws Exception { - new MongoEntityInformation(InvalidPerson.class); + new MongoEntityInformation(InvalidPerson.class); } class Person { diff --git a/spring-data-mongodb/template.mf b/spring-data-mongodb/template.mf index 7cc16ff69..c56995113 100644 --- a/spring-data-mongodb/template.mf +++ b/spring-data-mongodb/template.mf @@ -7,6 +7,7 @@ Import-Package: Import-Template: org.springframework.beans.*;version="[3.0.0, 4.0.0)", org.springframework.core.*;version="[3.0.0, 4.0.0)", + org.springframework.context.*;version="[3.0.0, 4.0.0)", org.springframework.dao.*;version="[3.0.0, 4.0.0)", org.springframework.util.*;version="[3.0.0, 4.0.0)", org.springframework.jmx.export.*;version="[3.0.0, 4.0.0)",