From 65c58fd404de0b4a4d851f9167dee4708ebba3a0 Mon Sep 17 00:00:00 2001 From: Christoph Strobl Date: Tue, 19 Mar 2024 08:35:08 +0100 Subject: [PATCH] Polishing. Move auto index create lookup flag to dedicated method and add issue reference to tests. Original Pull Request: #4275 --- .../config/MappingMongoConverterParser.java | 32 ++++++++++++++++--- ...gMongoConverterParserIntegrationTests.java | 19 +++++------ 2 files changed, 38 insertions(+), 13 deletions(-) diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/config/MappingMongoConverterParser.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/config/MappingMongoConverterParser.java index 48009bcf4..42c50c80d 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/config/MappingMongoConverterParser.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/config/MappingMongoConverterParser.java @@ -59,6 +59,7 @@ import org.springframework.data.mongodb.core.mapping.event.ValidatingMongoEventL import org.springframework.lang.Nullable; import org.springframework.util.Assert; import org.springframework.util.ClassUtils; +import org.springframework.util.ObjectUtils; import org.springframework.util.StringUtils; import org.springframework.util.xml.DomUtils; import org.w3c.dom.Element; @@ -94,8 +95,7 @@ public class MappingMongoConverterParser implements BeanDefinitionParser { String id = element.getAttribute(AbstractBeanDefinitionParser.ID_ATTRIBUTE); id = StringUtils.hasText(id) ? id : DEFAULT_CONVERTER_BEAN_NAME; - String autoIndexCreation = element.getAttribute("auto-index-creation"); - boolean autoIndexCreationEnabled = StringUtils.hasText(autoIndexCreation) && Boolean.parseBoolean(autoIndexCreation); + boolean autoIndexCreationEnabled = isAutoIndexCreationEnabled(element); parserContext.pushContainingComponent(new CompositeComponentDefinition("Mapping Mongo Converter", element)); @@ -196,11 +196,33 @@ public class MappingMongoConverterParser implements BeanDefinitionParser { return new RuntimeBeanReference(validatorName); } + private static boolean isAutoIndexCreationEnabled(Element element) { + + String autoIndexCreation = element.getAttribute("auto-index-creation"); + return StringUtils.hasText(autoIndexCreation) && Boolean.parseBoolean(autoIndexCreation); + } + + /** + * Create and register the {@link BeanDefinition} for a {@link MongoMappingContext} if not explicitly referenced by a + * given {@literal mapping-context-ref} {@link Element#getAttribute(String) attribuite}. + * + * @return the mapping context bean name. + * @deprecated since 4.3. Use + * {@link #potentiallyCreateMappingContext(Element, ParserContext, BeanDefinition, String, boolean)} + * instead. + */ + @Deprecated(since = "4.3", forRemoval = true) public static String potentiallyCreateMappingContext(Element element, ParserContext parserContext, @Nullable BeanDefinition conversionsDefinition, @Nullable String converterId) { return potentiallyCreateMappingContext(element, parserContext, conversionsDefinition, converterId, false); } + /** + * Create and register the {@link BeanDefinition} for a {@link MongoMappingContext} if not explicitly referenced by a + * given {@literal mapping-context-ref} {@link Element#getAttribute(String) attribuite}. + * + * @return the mapping context bean name. + */ public static String potentiallyCreateMappingContext(Element element, ParserContext parserContext, @Nullable BeanDefinition conversionsDefinition, @Nullable String converterId, boolean autoIndexCreation) { @@ -280,8 +302,10 @@ public class MappingMongoConverterParser implements BeanDefinitionParser { ManagedList converterBeans = new ManagedList<>(); List converterElements = DomUtils.getChildElementsByTagName(customerConvertersElement, "converter"); - for (Element listenerElement : converterElements) { - converterBeans.add(parseConverter(listenerElement, parserContext)); + if (!ObjectUtils.isEmpty(converterElements)) { + for (Element listenerElement : converterElements) { + converterBeans.add(parseConverter(listenerElement, parserContext)); + } } // Scan for Converter and GenericConverter beans in the given base-package diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/config/MappingMongoConverterParserIntegrationTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/config/MappingMongoConverterParserIntegrationTests.java index 4afb30ee3..014e83fc1 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/config/MappingMongoConverterParserIntegrationTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/config/MappingMongoConverterParserIntegrationTests.java @@ -22,7 +22,6 @@ import java.util.Set; import org.bson.Document; import org.junit.jupiter.api.Test; - import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.beans.factory.config.BeanReference; import org.springframework.beans.factory.parsing.BeanDefinitionParsingException; @@ -63,20 +62,22 @@ public class MappingMongoConverterParserIntegrationTests { factory.getBean("converter"); } - @Test - void allowsToOverrideAutoIndexCreation() { + @Test // GH-4275 + void defaultsToFalseForAutoIndexCreation() { loadValidConfiguration(); - MongoMappingContext mongoMappingContext = factory.getBean("autoIndexCreationConverter.mongoMappingContext", MongoMappingContext.class); - assertThat(mongoMappingContext.isAutoIndexCreation()).isTrue(); + MongoMappingContext mongoMappingContext = factory.getBean("converter.mongoMappingContext", + MongoMappingContext.class); + assertThat(mongoMappingContext.isAutoIndexCreation()).isFalse(); } - @Test - void testDefaultValueForAutoIndexCreation() { + @Test // GH-4275 + void allowsToOverrideAutoIndexCreation() { loadValidConfiguration(); - MongoMappingContext mongoMappingContext = factory.getBean("converter.mongoMappingContext", MongoMappingContext.class); - assertThat(mongoMappingContext.isAutoIndexCreation()).isFalse(); + MongoMappingContext mongoMappingContext = factory.getBean("autoIndexCreationConverter.mongoMappingContext", + MongoMappingContext.class); + assertThat(mongoMappingContext.isAutoIndexCreation()).isTrue(); } @Test // DATAMONGO-725