@ -24,12 +24,12 @@ import java.util.List;
@@ -24,12 +24,12 @@ import java.util.List;
import java.util.Set ;
import org.springframework.beans.BeanMetadataElement ;
import org.springframework.beans.factory.BeanDefinitionStoreException ;
import org.springframework.beans.factory.NoSuchBeanDefinitionException ;
import org.springframework.beans.factory.config.BeanDefinition ;
import org.springframework.beans.factory.config.BeanDefinitionHolder ;
import org.springframework.beans.factory.config.RuntimeBeanReference ;
import org.springframework.beans.factory.parsing.BeanComponentDefinition ;
import org.springframework.beans.factory.parsing.CompositeComponentDefinition ;
import org.springframework.beans.factory.support.AbstractBeanDefinition ;
import org.springframework.beans.factory.support.BeanDefinitionBuilder ;
import org.springframework.beans.factory.support.BeanDefinitionRegistry ;
@ -38,6 +38,7 @@ import org.springframework.beans.factory.support.ManagedList;
@@ -38,6 +38,7 @@ import org.springframework.beans.factory.support.ManagedList;
import org.springframework.beans.factory.support.ManagedSet ;
import org.springframework.beans.factory.support.RootBeanDefinition ;
import org.springframework.beans.factory.xml.AbstractBeanDefinitionParser ;
import org.springframework.beans.factory.xml.BeanDefinitionParser ;
import org.springframework.beans.factory.xml.ParserContext ;
import org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider ;
import org.springframework.core.convert.converter.Converter ;
@ -49,7 +50,6 @@ import org.springframework.core.type.filter.AssignableTypeFilter;
@@ -49,7 +50,6 @@ import org.springframework.core.type.filter.AssignableTypeFilter;
import org.springframework.core.type.filter.TypeFilter ;
import org.springframework.data.annotation.Persistent ;
import org.springframework.data.config.BeanComponentDefinitionBuilder ;
import org.springframework.data.config.ParsingUtils ;
import org.springframework.data.mapping.model.MappingContextIsNewStrategyFactory ;
import org.springframework.data.mongodb.core.convert.CustomConversions ;
import org.springframework.data.mongodb.core.convert.MappingMongoConverter ;
@ -70,25 +70,26 @@ import org.w3c.dom.Element;
@@ -70,25 +70,26 @@ import org.w3c.dom.Element;
* @author Oliver Gierke
* @author Maciej Walkowiak
* /
public class MappingMongoConverterParser extends Abstract BeanDefinitionParser {
public class MappingMongoConverterParser implements BeanDefinitionParser {
private static final String BASE_PACKAGE = "base-package" ;
private static final boolean jsr303Present = ClassUtils . isPresent ( "javax.validation.Validator" ,
MappingMongoConverterParser . class . getClassLoader ( ) ) ;
@Override
protected String resolveId ( Element element , AbstractBeanDefinition definition , ParserContext parserContext )
throws BeanDefinitionStoreException {
String id = super . resolveId ( element , definition , parserContext ) ;
return StringUtils . hasText ( id ) ? id : "mappingConverter" ;
}
/ * ( non - Javadoc )
* @see org . springframework . beans . factory . xml . BeanDefinitionParser # parse ( org . w3c . dom . Element , org . springframework . beans . factory . xml . ParserContext )
* /
public BeanDefinition parse ( Element element , ParserContext parserContext ) {
@Override
protected AbstractBeanDefinition parseInternal ( Element element , ParserContext parserContext ) {
BeanDefinitionRegistry registry = parserContext . getRegistry ( ) ;
String id = element . getAttribute ( AbstractBeanDefinitionParser . ID_ATTRIBUTE ) ;
id = StringUtils . hasText ( id ) ? id : "mappingConverter" ;
parserContext . pushContainingComponent ( new CompositeComponentDefinition ( "Mapping Mongo Converter" , element ) ) ;
BeanDefinition conversionsDefinition = getCustomConversions ( element , parserContext ) ;
String ctxRef = potentiallyCreateMappingContext ( element , parserContext , conversionsDefinition ) ;
String ctxRef = potentiallyCreateMappingContext ( element , parserContext , conversionsDefinition , id ) ;
createIsNewStrategyFactoryBeanDefinition ( ctxRef , parserContext , element ) ;
@ -115,18 +116,23 @@ public class MappingMongoConverterParser extends AbstractBeanDefinitionParser {
@@ -115,18 +116,23 @@ public class MappingMongoConverterParser extends AbstractBeanDefinitionParser {
}
BeanDefinitionBuilder indexHelperBuilder = BeanDefinitionBuilder
. genericBeanDefinition ( MongoPersistentEntityIndexCreator . class ) ;
indexHelperBuilder . addConstructorArgValue ( new RuntimeBeanReference ( ctxRef ) ) ;
indexHelperBuilder . addConstructorArgValue ( new RuntimeBeanReference ( dbFactoryRef ) ) ;
registry . registerBeanDefinition ( INDEX_HELPER , indexHelperBuilder . getBeanDefinition ( ) ) ;
indexHelperBuilder . addConstructorArgReference ( ctxRef ) ;
indexHelperBuilder . addConstructorArgReference ( dbFactoryRef ) ;
parserContext . registerBeanComponent ( new BeanComponentDefinition ( indexHelperBuilder . getBeanDefinition ( ) ,
INDEX_HELPER ) ) ;
}
BeanDefinition validatingMongoEventListener = potentiallyCreateValidatingMongoEventListener ( element , parserContext ) ;
if ( validatingMongoEventListener ! = null ) {
registry . registerBeanDefinition ( VALIDATING_EVENT_LISTENER , validatingMongoEventListener ) ;
parserContext . registerBeanComponent ( new BeanComponentDefinition ( validatingMongoEventListener ,
VALIDATING_EVENT_LISTENER ) ) ;
}
return converterBuilder . getBeanDefinition ( ) ;
parserContext . registerBeanComponent ( new BeanComponentDefinition ( converterBuilder . getBeanDefinition ( ) , id ) ) ;
parserContext . popAndRegisterContainingComponent ( ) ;
return null ;
}
private BeanDefinition potentiallyCreateValidatingMongoEventListener ( Element element , ParserContext parserContext ) {
@ -140,7 +146,6 @@ public class MappingMongoConverterParser extends AbstractBeanDefinitionParser {
@@ -140,7 +146,6 @@ public class MappingMongoConverterParser extends AbstractBeanDefinitionParser {
RuntimeBeanReference validator = getValidator ( builder , parserContext ) ;
if ( validator ! = null ) {
builder . getRawBeanDefinition ( ) . setBeanClass ( ValidatingMongoEventListener . class ) ;
builder . addConstructorArgValue ( validator ) ;
@ -162,13 +167,13 @@ public class MappingMongoConverterParser extends AbstractBeanDefinitionParser {
@@ -162,13 +167,13 @@ public class MappingMongoConverterParser extends AbstractBeanDefinitionParser {
validatorDef . setSource ( source ) ;
validatorDef . setRole ( BeanDefinition . ROLE_INFRASTRUCTURE ) ;
String validatorName = parserContext . getReaderContext ( ) . registerWithGeneratedName ( validatorDef ) ;
parserContext . registerComponent ( new BeanComponentDefinition ( validatorDef , validatorName ) ) ;
parserContext . registerBean Component ( new BeanComponentDefinition ( validatorDef , validatorName ) ) ;
return new RuntimeBeanReference ( validatorName ) ;
}
static String potentiallyCreateMappingContext ( Element element , ParserContext parserContext ,
BeanDefinition conversionsDefinition ) {
BeanDefinition conversionsDefinition , String converterId ) {
String ctxRef = element . getAttribute ( "mapping-context-ref" ) ;
@ -195,11 +200,9 @@ public class MappingMongoConverterParser extends AbstractBeanDefinitionParser {
@@ -195,11 +200,9 @@ public class MappingMongoConverterParser extends AbstractBeanDefinitionParser {
mappingContextBuilder . addPropertyValue ( "simpleTypeHolder" , simpleTypesDefinition ) ;
}
parserContext . getRegistry ( ) . registerBeanDefinition ( MAPPING_CONTEXT , mappingContextBuilder . getBeanDefinition ( ) ) ;
ctxRef = MAPPING_CONTEXT ;
ctxRef = converterId + "." + MAPPING_CONTEXT ;
parserContext . registerBeanComponent ( componentDefinitionBuilder . getComponent ( mappingContextBuilder , ctxRef ) ) ;
return ctxRef ;
}
@ -237,7 +240,7 @@ public class MappingMongoConverterParser extends AbstractBeanDefinitionParser {
@@ -237,7 +240,7 @@ public class MappingMongoConverterParser extends AbstractBeanDefinitionParser {
AbstractBeanDefinition conversionsBean = conversionsBuilder . getBeanDefinition ( ) ;
conversionsBean . setSource ( parserContext . extractSource ( element ) ) ;
parserContext . getRegistry ( ) . registerBeanDefinition ( "customConversions" , conversionsBean ) ;
parserContext . registerBeanComponent ( new BeanComponentDefinition ( conversionsBean , "customConversions" ) ) ;
return conversionsBean ;
}
@ -291,8 +294,8 @@ public class MappingMongoConverterParser extends AbstractBeanDefinitionParser {
@@ -291,8 +294,8 @@ public class MappingMongoConverterParser extends AbstractBeanDefinitionParser {
. rootBeanDefinition ( MappingContextIsNewStrategyFactory . class ) ;
mappingContextStrategyFactoryBuilder . addConstructorArgReference ( mappingContextRef ) ;
context . getRegistry ( ) . registerBeanDefinition ( IS_NEW_STRATEGY_FACTORY ,
ParsingUtils . getSourceBeanDefinition ( mappingContextStrategyFactoryBuilder , context , element ) ) ;
BeanComponentDefinitionBuilder builder = new BeanComponentDefinitionBuilder ( element , context ) ;
context . registerBeanComponent ( builder . getComponent ( mappingContextStrategyFactoryBuilder , IS_NEW_STRATEGY_FACTORY ) ) ;
return IS_NEW_STRATEGY_FACTORY ;
}