From 18b0f459852755af7fb95c96b5873175109f6c2a Mon Sep 17 00:00:00 2001 From: Oliver Gierke Date: Wed, 23 Mar 2011 07:41:04 +0100 Subject: [PATCH] Adapt latest changes in Spring Data Commons. Moved functionality from MongoMappingConfigurationBuilder into MongoMappingContext. Adapted namespace parser to the removal of the MappingConfigurationBuilder component. --- .../config/MongoMappingConverterParser.java | 38 ++++------ .../MongoMappingConfigurationBuilder.java | 71 ------------------- .../mongodb/mapping/MongoMappingContext.java | 55 +++++++++++--- .../mongodb/config/spring-mongo-1.0.xsd | 18 ----- .../mongodb/mapping/GenericMappingTests.java | 8 +-- .../MappingMongoConverterUnitTests.java | 6 -- ...rsonRepositoryIntegrationTests-context.xml | 6 +- 7 files changed, 62 insertions(+), 140 deletions(-) delete mode 100644 spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/mapping/MongoMappingConfigurationBuilder.java diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/config/MongoMappingConverterParser.java b/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/config/MongoMappingConverterParser.java index 93d3c7a2b..105d75a58 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/config/MongoMappingConverterParser.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/config/MongoMappingConverterParser.java @@ -25,8 +25,8 @@ import org.springframework.beans.factory.support.BeanDefinitionRegistry; import org.springframework.beans.factory.xml.AbstractBeanDefinitionParser; import org.springframework.beans.factory.xml.ParserContext; import org.springframework.data.document.mongodb.convert.MappingMongoConverter; -import org.springframework.data.document.mongodb.mapping.MappingConfigurationHelper; -import org.springframework.data.document.mongodb.mapping.MongoMappingConfigurationBuilder; +import org.springframework.data.document.mongodb.mapping.Document; +import org.springframework.data.document.mongodb.mapping.MongoPersistentEntityIndexCreator; import org.springframework.data.document.mongodb.mapping.MongoMappingContext; import org.w3c.dom.Element; @@ -39,10 +39,8 @@ import org.w3c.dom.Element; */ public class MongoMappingConverterParser extends AbstractBeanDefinitionParser { - private static final String CONFIGURATION_BUILDER = "mappingConfigurationBuilder"; private static final String MAPPING_CONTEXT = "mappingContext"; private static final String MAPPING_CONFIGURATION_HELPER = "mappingConfigurationHelper"; - private static final String CONFIGURATION_LISTENER = "mappingConfigurationListener"; private static final String TEMPLATE = "mongoTemplate"; private static final String BASE_PACKAGE = "base-package"; @@ -55,17 +53,15 @@ public class MongoMappingConverterParser extends AbstractBeanDefinitionParser { protected AbstractBeanDefinition parseInternal(Element element, ParserContext parserContext) { BeanDefinitionRegistry registry = parserContext.getRegistry(); - String builderRef = element.getAttribute("mapping-config-builder-ref"); - if (null == builderRef || "".equals(builderRef)) { - BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(MongoMappingConfigurationBuilder.class); - registry.registerBeanDefinition(CONFIGURATION_BUILDER, builder.getBeanDefinition()); - builderRef = CONFIGURATION_BUILDER; - } - String ctxRef = element.getAttribute("mapping-context-ref"); - if (null == ctxRef || "".equals(ctxRef)) { + if (!StringUtils.hasText(ctxRef)) { BeanDefinitionBuilder mappingContextBuilder = BeanDefinitionBuilder.genericBeanDefinition(MongoMappingContext.class); - mappingContextBuilder.addPropertyReference("mappingConfigurationBuilder", builderRef); + + Set classesToAdd = getInititalEntityClasses(element, mappingContextBuilder); + if (classesToAdd != null) { + mappingContextBuilder.addPropertyValue("initialEntitySet", classesToAdd); + } + registry.registerBeanDefinition(MAPPING_CONTEXT, mappingContextBuilder.getBeanDefinition()); ctxRef = MAPPING_CONTEXT; } @@ -74,27 +70,21 @@ public class MongoMappingConverterParser extends AbstractBeanDefinitionParser { converterBuilder.addPropertyReference("mappingContext", ctxRef); String autowire = element.getAttribute("autowire"); - if (null != autowire || !"".equals(autowire)) { + if (StringUtils.hasText(autowire)) { converterBuilder.addPropertyValue("autowirePersistentBeans", Boolean.parseBoolean(autowire)); } - // Need a reference to a MongoTemplate + // Need a reference to a Mongo instance String mongoRef = element.getAttribute("mongo-ref"); - if (null == mongoRef || "".equals(mongoRef)) { - mongoRef = "mongo"; - } - converterBuilder.addPropertyReference("mongo", mongoRef); + converterBuilder.addPropertyReference("mongo", StringUtils.hasText(mongoRef) ? mongoRef : "mongo"); try { registry.getBeanDefinition(MAPPING_CONFIGURATION_HELPER); } catch (NoSuchBeanDefinitionException ignored) { String templateRef = element.getAttribute("mongo-template-ref"); - if (null == templateRef || "".equals(templateRef)) { - templateRef = TEMPLATE; - } - BeanDefinitionBuilder mappingConfigHelperBuilder = BeanDefinitionBuilder.genericBeanDefinition(MappingConfigurationHelper.class); + BeanDefinitionBuilder mappingConfigHelperBuilder = BeanDefinitionBuilder.genericBeanDefinition(MongoPersistentEntityIndexCreator.class); mappingConfigHelperBuilder.addConstructorArgValue(new RuntimeBeanReference(ctxRef)); - mappingConfigHelperBuilder.addConstructorArgValue(new RuntimeBeanReference(templateRef)); + mappingConfigHelperBuilder.addConstructorArgValue(new RuntimeBeanReference(StringUtils.hasText(templateRef) ? templateRef : TEMPLATE)); registry.registerBeanDefinition(MAPPING_CONFIGURATION_HELPER, mappingConfigHelperBuilder.getBeanDefinition()); } diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/mapping/MongoMappingConfigurationBuilder.java b/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/mapping/MongoMappingConfigurationBuilder.java deleted file mode 100644 index c75f4794c..000000000 --- a/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/mapping/MongoMappingConfigurationBuilder.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright (c) 2011 by the original author(s). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.data.document.mongodb.mapping; - -import java.beans.PropertyDescriptor; -import java.lang.reflect.Field; -import java.util.Set; - -import org.bson.types.CodeWScope; -import org.bson.types.ObjectId; -import org.springframework.data.mapping.BasicMappingConfigurationBuilder; -import org.springframework.data.mapping.MappingBeanHelper; -import org.springframework.data.mapping.model.MappingConfigurationException; -import org.springframework.data.mapping.model.MappingContext; -import org.springframework.data.mapping.model.PersistentEntity; -import org.springframework.data.mapping.model.PersistentProperty; -import org.springframework.data.util.TypeInformation; - -/** - * @author Jon Brisbin - */ -public class MongoMappingConfigurationBuilder extends BasicMappingConfigurationBuilder { - - public MongoMappingConfigurationBuilder() { - augmentSimpleTypes(); - } - - protected void augmentSimpleTypes() { - // Augment simpleTypes with MongoDB-specific classes - Set> simpleTypes = MappingBeanHelper.getSimpleTypes(); - simpleTypes.add(com.mongodb.DBRef.class); - simpleTypes.add(ObjectId.class); - simpleTypes.add(CodeWScope.class); - } - - @Override - public PersistentProperty createPersistentProperty(Field field, - PropertyDescriptor descriptor, - TypeInformation information) throws MappingConfigurationException { - return new MongoPersistentProperty(field, descriptor, information); - } - - @Override - public PersistentEntity createPersistentEntity(TypeInformation typeInformation, - MappingContext mappingContext) throws MappingConfigurationException { - return new MongoPersistentEntity(mappingContext, typeInformation); - } - - @Override - public boolean isAssociation(Field field, PropertyDescriptor descriptor) throws MappingConfigurationException { - if (field.isAnnotationPresent(DBRef.class)) { - return true; - } - return super.isAssociation(field, descriptor); - } - -} diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/mapping/MongoMappingContext.java b/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/mapping/MongoMappingContext.java index dabeca864..2766b3a03 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/mapping/MongoMappingContext.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/mapping/MongoMappingContext.java @@ -16,28 +16,65 @@ package org.springframework.data.document.mongodb.mapping; -import java.util.HashSet; +import java.beans.PropertyDescriptor; +import java.lang.reflect.Field; +import java.util.Collection; import java.util.Set; +import org.bson.types.CodeWScope; +import org.bson.types.ObjectId; import org.springframework.data.mapping.BasicMappingContext; +import org.springframework.data.mapping.BasicPersistentEntity; +import org.springframework.data.mapping.BasicPersistentProperty; +import org.springframework.data.mapping.MappingBeanHelper; +import org.springframework.data.mapping.model.MappingConfigurationException; +import org.springframework.data.mapping.model.MappingContext; +import org.springframework.data.util.TypeInformation; /** * @author Jon Brisbin */ public class MongoMappingContext extends BasicMappingContext { - - protected Set initialEntitySet = new HashSet(); - + public MongoMappingContext() { - builder = new MongoMappingConfigurationBuilder(); + augmentSimpleTypes(); } - public Set getInitialEntitySet() { - return initialEntitySet; + protected void augmentSimpleTypes() { + // Augment simpleTypes with MongoDB-specific classes + Set> simpleTypes = MappingBeanHelper.getSimpleTypes(); + simpleTypes.add(com.mongodb.DBRef.class); + simpleTypes.add(ObjectId.class); + simpleTypes.add(CodeWScope.class); } - public void setInitialEntitySet(Set initialEntitySet) { - this.initialEntitySet = initialEntitySet; + @Override + public boolean isAssociation(Field field, PropertyDescriptor descriptor) throws MappingConfigurationException { + if (field.isAnnotationPresent(DBRef.class)) { + return true; + } + return super.isAssociation(field, descriptor); + } + + /* (non-Javadoc) + * @see org.springframework.data.mapping.BasicMappingContext#getPersistentEntities() + */ + @Override + @SuppressWarnings("unchecked") + public Collection> getPersistentEntities() { + return (Collection>) super.getPersistentEntities(); + } + + @Override + public BasicPersistentProperty createPersistentProperty(Field field, PropertyDescriptor descriptor, + TypeInformation information) throws MappingConfigurationException { + return new MongoPersistentProperty(field, descriptor, information); + } + + @Override + public BasicPersistentEntity createPersistentEntity(TypeInformation typeInformation, MappingContext mappingContext) + throws MappingConfigurationException { + return new MongoPersistentEntity(mappingContext, typeInformation); } } diff --git a/spring-data-mongodb/src/main/resources/org/springframework/data/document/mongodb/config/spring-mongo-1.0.xsd b/spring-data-mongodb/src/main/resources/org/springframework/data/document/mongodb/config/spring-mongo-1.0.xsd index 8ca4483de..bf8dc72c0 100644 --- a/spring-data-mongodb/src/main/resources/org/springframework/data/document/mongodb/config/spring-mongo-1.0.xsd +++ b/spring-data-mongodb/src/main/resources/org/springframework/data/document/mongodb/config/spring-mongo-1.0.xsd @@ -127,13 +127,6 @@ This controls whether or not to run entities through the BeanFactory's autowirin - - - - The reference to a MappingConfigurationBuilder. Will default to 'mappingConfigBuilder'. - - - @@ -167,17 +160,6 @@ The name of the Mongo object that determines what server to monitor. (by default - - - - - - - - - - - diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/mapping/GenericMappingTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/mapping/GenericMappingTests.java index 2a6a20939..23f331425 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/mapping/GenericMappingTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/mapping/GenericMappingTests.java @@ -24,9 +24,7 @@ import com.mongodb.DBObject; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; -import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; -import org.springframework.context.ApplicationContext; import org.springframework.data.document.mongodb.convert.MappingMongoConverter; import org.springframework.data.document.mongodb.convert.MongoConverter; import org.springframework.data.mapping.BasicMappingContext; @@ -42,13 +40,9 @@ public class GenericMappingTests { BasicMappingContext context; MongoConverter converter; - @Mock - ApplicationContext applicationContext; - @Before public void setUp() { - context = new BasicMappingContext(new MongoMappingConfigurationBuilder()); - context.setApplicationContext(applicationContext); + context = new BasicMappingContext(); context.addPersistentEntity(StringWrapper.class); converter = new MappingMongoConverter(context); } diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/mapping/MappingMongoConverterUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/mapping/MappingMongoConverterUnitTests.java index 29f534393..8b049e3a2 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/mapping/MappingMongoConverterUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/mapping/MappingMongoConverterUnitTests.java @@ -26,9 +26,7 @@ import org.joda.time.LocalDate; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; -import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; -import org.springframework.context.ApplicationContext; import org.springframework.core.convert.converter.Converter; import org.springframework.data.document.mongodb.convert.MappingMongoConverter; import org.springframework.data.mapping.BasicMappingContext; @@ -46,13 +44,9 @@ public class MappingMongoConverterUnitTests { MappingMongoConverter converter; BasicMappingContext mappingContext; - @Mock - ApplicationContext applicationContext; - @Before public void setUp() { mappingContext = new BasicMappingContext(); - mappingContext.setApplicationContext(applicationContext); converter = new MappingMongoConverter(mappingContext); } diff --git a/spring-data-mongodb/src/test/resources/org/springframework/data/document/mongodb/repository/PersonRepositoryIntegrationTests-context.xml b/spring-data-mongodb/src/test/resources/org/springframework/data/document/mongodb/repository/PersonRepositoryIntegrationTests-context.xml index ddc714bfb..824b82942 100644 --- a/spring-data-mongodb/src/test/resources/org/springframework/data/document/mongodb/repository/PersonRepositoryIntegrationTests-context.xml +++ b/spring-data-mongodb/src/test/resources/org/springframework/data/document/mongodb/repository/PersonRepositoryIntegrationTests-context.xml @@ -11,11 +11,7 @@ - - - - - +