From 06463a0b5892d7f729d711f1645d1ac10d7c495e Mon Sep 17 00:00:00 2001 From: Oliver Gierke Date: Tue, 22 Mar 2011 21:03:40 +0100 Subject: [PATCH] Tweaks to BasicMappingContext. Re-added a initialEntitySet property to BasicMappingContext and let trigger adding those to the context in afterPropertiesSet(). Moved createPersistentEntity and createPersistentProperty methods from MappingConfigurationBuilder into BasicMappingContext (could probably be done for all of those methods still in MCB). Opened up getPersistentEntites() in MappingContext interface to return Collection to allow easy overriding in subclasses with more specific types. --- .../data/mapping/BasicMappingContext.java | 27 ++++++++++++++++--- .../model/MappingConfigurationBuilder.java | 8 ------ .../data/mapping/model/MappingContext.java | 2 +- 3 files changed, 25 insertions(+), 12 deletions(-) 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);