diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/index/IndexResolver.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/index/IndexResolver.java index f2765c246..5bdc8028d 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/index/IndexResolver.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/index/IndexResolver.java @@ -16,16 +16,33 @@ package org.springframework.data.mongodb.core.index; import org.springframework.data.mongodb.core.index.MongoPersistentEntityIndexResolver.IndexDefinitionHolder; +import org.springframework.data.mongodb.core.mapping.MongoMappingContext; +import org.springframework.data.util.ClassTypeInformation; import org.springframework.data.util.TypeInformation; +import org.springframework.util.Assert; /** * {@link IndexResolver} finds those {@link IndexDefinition}s to be created for a given class. * * @author Christoph Strobl * @author Thomas Darimont + * @author Mark Paluch * @since 1.5 */ -interface IndexResolver { +public interface IndexResolver { + + /** + * Creates a new {@link IndexResolver} given {@link MongoMappingContext}. + * + * @param mappingContext must not be {@literal null}. + * @return the new {@link IndexResolver}. + */ + static IndexResolver create(MongoMappingContext mappingContext) { + + Assert.notNull(mappingContext, "MongoMappingContext must not be null!"); + + return new MongoPersistentEntityIndexResolver(mappingContext); + } /** * Find and create {@link IndexDefinition}s for properties of given {@link TypeInformation}. {@link IndexDefinition}s @@ -36,4 +53,16 @@ interface IndexResolver { */ Iterable resolveIndexFor(TypeInformation typeInformation); + /** + * Find and create {@link IndexDefinition}s for properties of given {@link TypeInformation}. {@link IndexDefinition}s + * are created for properties and types with {@link Indexed}, {@link CompoundIndexes} or {@link GeoSpatialIndexed}. + * + * @param entityType + * @return Empty {@link Iterable} in case no {@link IndexDefinition} could be resolved for type. + * @see 2.2 + */ + default Iterable resolveIndexFor(Class entityType) { + return resolveIndexFor(ClassTypeInformation.from(entityType)); + } + } diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/index/MongoPersistentEntityIndexCreator.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/index/MongoPersistentEntityIndexCreator.java index 80d5966da..eeef8af4b 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/index/MongoPersistentEntityIndexCreator.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/index/MongoPersistentEntityIndexCreator.java @@ -69,7 +69,7 @@ public class MongoPersistentEntityIndexCreator implements ApplicationListener definitions = indexResolver.resolveIndexFor(IndexOnLevelOne.class); + + assertThat(definitions.iterator().hasNext(), is(true)); + } + + @Test // DATAMONGO-899 + public void deeplyNestedIndexPathIsResolvedCorrectly() { List indexDefinitions = prepareMappingContextAndResolveIndexForType(IndexOnLevelTwo.class);