Adapt latest changes in Spring Data Commons.

Moved functionality from MongoMappingConfigurationBuilder into MongoMappingContext. Adapted namespace parser to the removal of the MappingConfigurationBuilder component.
This commit is contained in:
Oliver Gierke
2011-03-23 07:41:04 +01:00
parent efa6d0d8b8
commit 18b0f45985
7 changed files with 62 additions and 140 deletions

View File

@@ -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<String> 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());
}

View File

@@ -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 <jbrisbin@vmware.com>
*/
public class MongoMappingConfigurationBuilder extends BasicMappingConfigurationBuilder {
public MongoMappingConfigurationBuilder() {
augmentSimpleTypes();
}
protected void augmentSimpleTypes() {
// Augment simpleTypes with MongoDB-specific classes
Set<Class<?>> 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 <T> PersistentEntity<T> createPersistentEntity(TypeInformation typeInformation,
MappingContext mappingContext) throws MappingConfigurationException {
return new MongoPersistentEntity<T>(mappingContext, typeInformation);
}
@Override
public boolean isAssociation(Field field, PropertyDescriptor descriptor) throws MappingConfigurationException {
if (field.isAnnotationPresent(DBRef.class)) {
return true;
}
return super.isAssociation(field, descriptor);
}
}

View File

@@ -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 <jbrisbin@vmware.com>
*/
public class MongoMappingContext extends BasicMappingContext {
protected Set<String> initialEntitySet = new HashSet<String>();
public MongoMappingContext() {
builder = new MongoMappingConfigurationBuilder();
augmentSimpleTypes();
}
public Set<String> getInitialEntitySet() {
return initialEntitySet;
protected void augmentSimpleTypes() {
// Augment simpleTypes with MongoDB-specific classes
Set<Class<?>> simpleTypes = MappingBeanHelper.getSimpleTypes();
simpleTypes.add(com.mongodb.DBRef.class);
simpleTypes.add(ObjectId.class);
simpleTypes.add(CodeWScope.class);
}
public void setInitialEntitySet(Set<String> 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<MongoPersistentEntity<?>> getPersistentEntities() {
return (Collection<MongoPersistentEntity<?>>) super.getPersistentEntities();
}
@Override
public BasicPersistentProperty createPersistentProperty(Field field, PropertyDescriptor descriptor,
TypeInformation information) throws MappingConfigurationException {
return new MongoPersistentProperty(field, descriptor, information);
}
@Override
public <T> BasicPersistentEntity<T> createPersistentEntity(TypeInformation typeInformation, MappingContext mappingContext)
throws MappingConfigurationException {
return new MongoPersistentEntity<T>(mappingContext, typeInformation);
}
}

View File

@@ -127,13 +127,6 @@ This controls whether or not to run entities through the BeanFactory's autowirin
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="mapping-config-builder-ref" type="mappingConfigBuilderRef" use="optional">
<xsd:annotation>
<xsd:documentation source="org.springframework.data.mapping.model.MappingConfigurationBuilder">
The reference to a MappingConfigurationBuilder. Will default to 'mappingConfigBuilder'.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="mapping-context-ref" type="mappingContextRef" use="optional">
<xsd:annotation>
<xsd:documentation source="org.springframework.data.mapping.model.MappingContext">
@@ -167,17 +160,6 @@ The name of the Mongo object that determines what server to monitor. (by default
</xsd:complexType>
</xsd:element>
<xsd:simpleType name="mappingConfigBuilderRef">
<xsd:annotation>
<xsd:appinfo>
<tool:annotation kind="ref">
<tool:assignable-to type="org.springframework.data.mapping.model.MappingConfigurationBuilder"/>
</tool:annotation>
</xsd:appinfo>
</xsd:annotation>
<xsd:union memberTypes="xsd:string"/>
</xsd:simpleType>
<xsd:simpleType name="mappingContextRef">
<xsd:annotation>
<xsd:appinfo>

View File

@@ -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);
}

View File

@@ -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);
}

View File

@@ -11,11 +11,7 @@
<property name="repositoryInterface" value="org.springframework.data.document.mongodb.repository.PersonRepository"/>
</bean>
<bean id="mappingContext" class="org.springframework.data.mapping.BasicMappingContext">
<property name="mappingConfigurationBuilder">
<bean class="org.springframework.data.document.mongodb.mapping.MongoMappingConfigurationBuilder" />
</property>
</bean>
<bean id="mappingContext" class="org.springframework.data.document.mongodb.mapping.MongoMappingContext" />
<bean id="mongoConverter" class="org.springframework.data.document.mongodb.convert.MappingMongoConverter">
<constructor-arg ref="mappingContext" />