diff --git a/spring-data-commons-core/src/main/java/org/springframework/data/mapping/BasicMappingContext.java b/spring-data-commons-core/src/main/java/org/springframework/data/mapping/BasicMappingContext.java index f2186327e..72641a5e2 100644 --- a/spring-data-commons-core/src/main/java/org/springframework/data/mapping/BasicMappingContext.java +++ b/spring-data-commons-core/src/main/java/org/springframework/data/mapping/BasicMappingContext.java @@ -25,8 +25,10 @@ import java.lang.reflect.Modifier; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; @@ -69,6 +71,8 @@ public class BasicMappingContext implements MappingContext, InitializingBean, Ap protected GenericConversionService conversionService = ConversionServiceFactory.createDefaultConversionService(); private List> customSimpleTypes = new ArrayList>(); + private Set> initialEntitySet = new HashSet>(); + public BasicMappingContext() { builder = new BasicMappingConfigurationBuilder(); } @@ -93,7 +97,11 @@ public class BasicMappingContext implements MappingContext, InitializingBean, Ap this.applicationContext = applicationContext; } - public Collection> getPersistentEntities() { + public void setInitialEntitySet(Set> initialEntitySet) { + this.initialEntitySet = initialEntitySet; + } + + public Collection> getPersistentEntities() { return persistentEntities.values(); } @@ -121,7 +129,7 @@ public class BasicMappingContext implements MappingContext, InitializingBean, Ap Class type = (Class) typeInformation.getType(); try { - final PersistentEntity entity = builder.createPersistentEntity(typeInformation, this); + final PersistentEntity entity = createPersistentEntity(typeInformation, this); BeanInfo info = Introspector.getBeanInfo(type); final Map descriptors = new HashMap(); @@ -136,7 +144,7 @@ public class BasicMappingContext implements MappingContext, InitializingBean, Ap PropertyDescriptor descriptor = descriptors.get(field.getName()); if (builder.isPersistentProperty(field, descriptor)) { ReflectionUtils.makeAccessible(field); - PersistentProperty property = builder.createPersistentProperty(field, descriptor, entity.getPropertyInformation()); + PersistentProperty property = createPersistentProperty(field, descriptor, entity.getPropertyInformation()); property.setOwner(entity); entity.addPersistentProperty(property); if (builder.isAssociation(field, descriptor)) { @@ -269,7 +277,20 @@ public class BasicMappingContext implements MappingContext, InitializingBean, Ap return false; } + protected PersistentEntity createPersistentEntity(TypeInformation typeInformation, MappingContext mappingContext) + throws MappingConfigurationException { + return new BasicPersistentEntity(mappingContext, typeInformation); + } + + protected PersistentProperty createPersistentProperty(Field field, PropertyDescriptor descriptor, + TypeInformation information) throws MappingConfigurationException { + return new BasicPersistentProperty(field, descriptor, information); + } + public void afterPropertiesSet() throws Exception { Assert.notNull(builder, "No mapping configuration provider configured."); + for (Class initialEntity : initialEntitySet) { + addPersistentEntity(initialEntity); + } } } diff --git a/spring-data-commons-core/src/main/java/org/springframework/data/mapping/model/MappingConfigurationBuilder.java b/spring-data-commons-core/src/main/java/org/springframework/data/mapping/model/MappingConfigurationBuilder.java index 76c1ba7d2..b9468e10b 100644 --- a/spring-data-commons-core/src/main/java/org/springframework/data/mapping/model/MappingConfigurationBuilder.java +++ b/spring-data-commons-core/src/main/java/org/springframework/data/mapping/model/MappingConfigurationBuilder.java @@ -19,9 +19,6 @@ package org.springframework.data.mapping.model; import java.beans.PropertyDescriptor; import java.lang.reflect.Field; -import org.springframework.data.mapping.BasicPersistentEntity; -import org.springframework.data.util.TypeInformation; - /** * @author Jon Brisbin */ @@ -29,16 +26,11 @@ public interface MappingConfigurationBuilder { boolean isPersistentEntity(Class clazz); - PersistentEntity createPersistentEntity(TypeInformation typeInformation, MappingContext mappingContext) throws MappingConfigurationException; - boolean isPersistentProperty(Field field, PropertyDescriptor descriptor) throws MappingConfigurationException; - PersistentProperty createPersistentProperty(Field field, PropertyDescriptor descriptor, TypeInformation owningTypeInformation) throws MappingConfigurationException; - PreferredConstructor getPreferredConstructor(Class clazz) throws MappingConfigurationException; boolean isAssociation(Field field, PropertyDescriptor descriptor) throws MappingConfigurationException; Association createAssociation(PersistentProperty property); - } diff --git a/spring-data-commons-core/src/main/java/org/springframework/data/mapping/model/MappingContext.java b/spring-data-commons-core/src/main/java/org/springframework/data/mapping/model/MappingContext.java index 562642aeb..753e1db43 100644 --- a/spring-data-commons-core/src/main/java/org/springframework/data/mapping/model/MappingContext.java +++ b/spring-data-commons-core/src/main/java/org/springframework/data/mapping/model/MappingContext.java @@ -46,7 +46,7 @@ public interface MappingContext extends InitializingBean { * * @return A list of PersistentEntity instances */ - Collection> getPersistentEntities(); + Collection> getPersistentEntities(); PersistentEntity getPersistentEntity(Class type);