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:
@@ -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());
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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" />
|
||||
|
||||
Reference in New Issue
Block a user