diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/convert/MappingMongoConverter.java b/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/convert/MappingMongoConverter.java index c2c9a0a0c..37c5c349e 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/convert/MappingMongoConverter.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/convert/MappingMongoConverter.java @@ -23,7 +23,6 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Collections; -import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Map.Entry; @@ -81,48 +80,74 @@ public class MappingMongoConverter extends AbstractMongoConverter implements App protected final MappingContext, MongoPersistentProperty> mappingContext; protected final SpelExpressionParser spelExpressionParser = new SpelExpressionParser(); + protected final MongoDbFactory mongoDbFactory; protected ApplicationContext applicationContext; protected boolean useFieldAccessOnly = true; - protected MongoDbFactory mongoDbFactory; /** * Creates a new {@link MappingMongoConverter} given the new {@link MongoDbFactory} and {@link MappingContext}. * - * @param mongoDbFactory - * @param mappingContext + * @param mongoDbFactory must not be {@literal null}. + * @param mappingContext must not be {@literal null}. */ public MappingMongoConverter(MongoDbFactory mongoDbFactory, MappingContext, MongoPersistentProperty> mappingContext) { + super(ConversionServiceFactory.createDefaultConversionService()); - Assert.notNull(mappingContext); + Assert.notNull(mongoDbFactory); + Assert.notNull(mappingContext); + this.mongoDbFactory = mongoDbFactory; this.mappingContext = mappingContext; } + /* + * (non-Javadoc) + * @see org.springframework.data.document.mongodb.convert.MongoConverter#getMappingContext() + */ public MappingContext, MongoPersistentProperty> getMappingContext() { return mappingContext; } - public void setMongoDbFactory(MongoDbFactory mongoDbFactory) { - this.mongoDbFactory = mongoDbFactory; - } - - public boolean isUseFieldAccessOnly() { - return useFieldAccessOnly; - } - + /** + * Configures whether to use field access only for entity mapping. Setting this to true will force the + * {@link MongoConverter} to not go through getters or setters even if they are present for getting and setting + * property values. + * + * @param useFieldAccessOnly + */ public void setUseFieldAccessOnly(boolean useFieldAccessOnly) { this.useFieldAccessOnly = useFieldAccessOnly; } + + /* + * (non-Javadoc) + * @see org.springframework.context.ApplicationContextAware#setApplicationContext(org.springframework.context.ApplicationContext) + */ + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + this.applicationContext = applicationContext; + } + /* + * (non-Javadoc) + * @see org.springframework.data.document.mongodb.convert.MongoConverter#convertObjectId(org.bson.types.ObjectId, java.lang.Class) + */ public T convertObjectId(ObjectId id, Class targetType) { return conversionService.convert(id, targetType); } + /* + * (non-Javadoc) + * @see org.springframework.data.document.mongodb.convert.MongoConverter#convertObjectId(java.lang.Object) + */ public ObjectId convertObjectId(Object id) { return conversionService.convert(id, ObjectId.class); } + /* + * (non-Javadoc) + * @see org.springframework.data.document.mongodb.MongoReader#read(java.lang.Class, com.mongodb.DBObject) + */ public S read(Class clazz, final DBObject dbo) { return read(ClassTypeInformation.from(clazz), dbo); } @@ -399,10 +424,6 @@ public class MappingMongoConverter extends AbstractMongoConverter implements App }); } - public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { - this.applicationContext = applicationContext; - } - @SuppressWarnings({"unchecked"}) protected void writePropertyInternal(MongoPersistentProperty prop, Object obj, DBObject dbo) { @@ -672,7 +693,7 @@ public class MappingMongoConverter extends AbstractMongoConverter implements App return Array.newInstance(prop.getComponentType(), 0); } else if (prop.isCollection() && sourceValue instanceof BasicDBList) { BasicDBList dbObjList = (BasicDBList) sourceValue; - List items = new LinkedList(); + List items = new ArrayList(); for (int i = 0; i < dbObjList.size(); i++) { Object dbObjItem = dbObjList.get(i); if (dbObjItem instanceof DBRef) { @@ -683,7 +704,7 @@ public class MappingMongoConverter extends AbstractMongoConverter implements App items.add(dbObjItem); } } - List itemsToReturn = new LinkedList(); + List itemsToReturn = new ArrayList(); for (Object obj : items) { itemsToReturn.add(obj); } @@ -792,7 +813,7 @@ public class MappingMongoConverter extends AbstractMongoConverter implements App } protected List unwrapList(BasicDBList dbList, TypeInformation targetType) { - List rootList = new LinkedList(); + List rootList = new ArrayList(); for (int i = 0; i < dbList.size(); i++) { Object obj = dbList.get(i); if (obj instanceof BasicDBList) { diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/query/GeospatialIndex.java b/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/query/GeospatialIndex.java index 0ee9b9ecf..10c77643d 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/query/GeospatialIndex.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/query/GeospatialIndex.java @@ -16,24 +16,33 @@ package org.springframework.data.document.mongodb.query; import org.springframework.data.document.mongodb.index.IndexDefinition; +import org.springframework.util.Assert; import com.mongodb.BasicDBObject; import com.mongodb.DBObject; +/** + * Value object to capture data to create a geo index. + * + * @author Jon Brisbin + * @author Oliver Gierke + */ public class GeospatialIndex implements IndexDefinition { - private String keyField; - + private final String field; private String name; - private Integer min = null; - private Integer max = null; - private Integer bits = null; - public GeospatialIndex(String key) { - keyField = key; + /** + * Creates a new {@link GeospatialIndex} for the given field. + * + * @param field must not be empty or {@literal null}. + */ + public GeospatialIndex(String field) { + Assert.hasText(field); + this.field = field; } public GeospatialIndex named(String name) { @@ -58,7 +67,7 @@ public class GeospatialIndex implements IndexDefinition { public DBObject getIndexKeys() { DBObject dbo = new BasicDBObject(); - dbo.put(keyField, "2d"); + dbo.put(field, "2d"); return dbo; } @@ -82,7 +91,8 @@ public class GeospatialIndex implements IndexDefinition { return dbo; } - /* (non-Javadoc) + /* + * (non-Javadoc) * @see java.lang.Object#toString() */ @Override diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/mapping/GeoIndexedAppConfig.java b/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/mapping/GeoIndexedAppConfig.java index 5eb6abeb6..2da4349f2 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/mapping/GeoIndexedAppConfig.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/mapping/GeoIndexedAppConfig.java @@ -2,7 +2,6 @@ package org.springframework.data.document.mongodb.mapping; import com.mongodb.Mongo; import org.springframework.context.annotation.Bean; -import org.springframework.data.document.mongodb.MongoTemplate; import org.springframework.data.document.mongodb.config.AbstractMongoConfiguration; import org.springframework.data.document.mongodb.mapping.event.LoggingEventListener; import org.springframework.data.document.mongodb.mapping.event.MongoMappingEvent; @@ -17,18 +16,19 @@ public class GeoIndexedAppConfig extends AbstractMongoConfiguration { return GEO_DB; } + @Override @Bean public Mongo mongo() throws Exception { return new Mongo("localhost"); } + @Override public String getMappingBasePackage() { return "org.springframework.data.document.mongodb.mapping"; } @Bean - public LoggingEventListener mappingEventsListener() { - return new LoggingEventListener(); + public LoggingEventListener> mappingEventsListener() { + return new LoggingEventListener>(); } - } diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/mapping/GeoIndexedTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/mapping/GeoIndexedTests.java index af87738f4..e1a956b17 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/mapping/GeoIndexedTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/mapping/GeoIndexedTests.java @@ -21,26 +21,20 @@ import static org.junit.Assert.*; import java.net.UnknownHostException; import java.util.List; -import com.mongodb.DB; -import com.mongodb.DBCollection; -import com.mongodb.DBObject; -import com.mongodb.Mongo; -import com.mongodb.MongoException; - import org.junit.After; import org.junit.Before; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.dao.DataAccessException; import org.springframework.data.document.mongodb.CollectionCallback; import org.springframework.data.document.mongodb.MongoTemplate; -import org.springframework.data.document.mongodb.config.AbstractMongoConfiguration; -import org.springframework.data.document.mongodb.mapping.event.LoggingEventListener; -import org.springframework.data.document.mongodb.mapping.event.MongoMappingEvent; + +import com.mongodb.DB; +import com.mongodb.DBCollection; +import com.mongodb.DBObject; +import com.mongodb.Mongo; +import com.mongodb.MongoException; /** * @author Jon Brisbin @@ -83,7 +77,7 @@ public class GeoIndexedTests { public Boolean doInCollection(DBCollection collection) throws MongoException, DataAccessException { List indexes = collection.getIndexInfo(); for (DBObject dbo : indexes) { - if ("location_2d".equals(dbo.get("name"))) { + if ("location".equals(dbo.get("name"))) { return true; } }