From 7914e8a63012f71c8f05cc7c73b0c536fbe02d00 Mon Sep 17 00:00:00 2001 From: Oliver Gierke Date: Mon, 19 Dec 2016 19:42:23 +0100 Subject: [PATCH] DATAMONGO-1467 - Polishing. Original pull request: #431. --- .../mongodb/core/DefaultIndexOperations.java | 5 ++++- .../data/mongodb/core/index/IndexFilter.java | 3 +-- .../data/mongodb/core/index/IndexInfo.java | 6 ++++- .../core/index/PartialIndexFilter.java | 22 ++++++++++--------- ...efaultIndexOperationsIntegrationTests.java | 8 +++---- 5 files changed, 26 insertions(+), 18 deletions(-) diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/DefaultIndexOperations.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/DefaultIndexOperations.java index a019ed036..f82371c74 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/DefaultIndexOperations.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/DefaultIndexOperations.java @@ -40,7 +40,8 @@ import com.mongodb.MongoException; */ public class DefaultIndexOperations implements IndexOperations { - public static final String PARTIAL_FILTER_EXPRESSION_KEY = "partialFilterExpression"; + private static final String PARTIAL_FILTER_EXPRESSION_KEY = "partialFilterExpression"; + private final MongoOperations mongoOperations; private final String collectionName; private final QueryMapper mapper; @@ -166,7 +167,9 @@ public class DefaultIndexOperations implements IndexOperations { public List getIndexInfo() { return mongoOperations.execute(collectionName, new CollectionCallback>() { + public List doInCollection(DBCollection collection) throws MongoException, DataAccessException { + List dbObjectList = collection.getIndexInfo(); return getIndexData(dbObjectList); } diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/index/IndexFilter.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/index/IndexFilter.java index b2e73627e..1ddf07451 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/index/IndexFilter.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/index/IndexFilter.java @@ -1,5 +1,5 @@ /* - * Copyright 2016. the original author or authors. + * Copyright 2016 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -32,5 +32,4 @@ public interface IndexFilter { * @return */ DBObject getFilterObject(); - } diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/index/IndexInfo.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/index/IndexInfo.java index 2fc1e840d..f4d4d6700 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/index/IndexInfo.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/index/IndexInfo.java @@ -23,10 +23,11 @@ import java.util.Collection; import java.util.Collections; import java.util.List; -import com.mongodb.DBObject; import org.springframework.util.Assert; import org.springframework.util.ObjectUtils; +import com.mongodb.DBObject; + /** * @author Mark Pollack * @author Oliver Gierke @@ -90,10 +91,13 @@ public class IndexInfo { Object value = keyDbObject.get(key); if (TWO_D_IDENTIFIERS.contains(value)) { + indexFields.add(IndexField.geo(key)); + } else if ("text".equals(value)) { DBObject weights = (DBObject) sourceDocument.get("weights"); + for (String fieldName : weights.keySet()) { indexFields.add(IndexField.text(fieldName, Float.valueOf(weights.get(fieldName).toString()))); } diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/index/PartialIndexFilter.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/index/PartialIndexFilter.java index d4a1ed267..a7245766e 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/index/PartialIndexFilter.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/index/PartialIndexFilter.java @@ -15,8 +15,11 @@ */ package org.springframework.data.mongodb.core.index; +import lombok.AccessLevel; +import lombok.NonNull; +import lombok.RequiredArgsConstructor; + import org.springframework.data.mongodb.core.query.CriteriaDefinition; -import org.springframework.util.Assert; import com.mongodb.DBObject; @@ -27,15 +30,10 @@ import com.mongodb.DBObject; * @author Christoph Strobl * @since 1.10 */ +@RequiredArgsConstructor(access = AccessLevel.PRIVATE) public class PartialIndexFilter implements IndexFilter { - private final Object filterExpression; - - private PartialIndexFilter(Object filterExpression) { - - Assert.notNull(filterExpression, "FilterExpression must not be null!"); - this.filterExpression = filterExpression; - } + private final @NonNull Object filterExpression; /** * Create new {@link PartialIndexFilter} for given {@link DBObject filter expression}. @@ -43,7 +41,7 @@ public class PartialIndexFilter implements IndexFilter { * @param where must not be {@literal null}. * @return */ - public static PartialIndexFilter filter(DBObject where) { + public static PartialIndexFilter of(DBObject where) { return new PartialIndexFilter(where); } @@ -53,10 +51,14 @@ public class PartialIndexFilter implements IndexFilter { * @param where must not be {@literal null}. * @return */ - public static PartialIndexFilter filter(CriteriaDefinition where) { + public static PartialIndexFilter of(CriteriaDefinition where) { return new PartialIndexFilter(where); } + /* + * (non-Javadoc) + * @see org.springframework.data.mongodb.core.index.IndexFilter#getFilterObject() + */ public DBObject getFilterObject() { if (filterExpression instanceof DBObject) { diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/DefaultIndexOperationsIntegrationTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/DefaultIndexOperationsIntegrationTests.java index 03e10d092..b8ded92d6 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/DefaultIndexOperationsIntegrationTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/DefaultIndexOperationsIntegrationTests.java @@ -102,7 +102,7 @@ public class DefaultIndexOperationsIntegrationTests { assumeThat(mongoVersion.isGreaterThanOrEqualTo(THREE_DOT_TWO), is(true)); IndexDefinition id = new Index().named("partial-with-criteria").on("k3y", Direction.ASC) - .partial(filter(where("q-t-y").gte(10))); + .partial(of(where("q-t-y").gte(10))); indexOps.ensureIndex(id); @@ -119,7 +119,7 @@ public class DefaultIndexOperationsIntegrationTests { assumeThat(mongoVersion.isGreaterThanOrEqualTo(THREE_DOT_TWO), is(true)); IndexDefinition id = new Index().named("partial-with-mapped-criteria").on("k3y", Direction.ASC) - .partial(filter(where("quantity").gte(10))); + .partial(of(where("quantity").gte(10))); indexOps.ensureIndex(id); @@ -136,7 +136,7 @@ public class DefaultIndexOperationsIntegrationTests { assumeThat(mongoVersion.isGreaterThanOrEqualTo(THREE_DOT_TWO), is(true)); IndexDefinition id = new Index().named("partial-with-dbo").on("k3y", Direction.ASC) - .partial(filter(new BasicDBObject("qty", new BasicDBObject("$gte", 10)))); + .partial(of(new BasicDBObject("qty", new BasicDBObject("$gte", 10)))); indexOps.ensureIndex(id); @@ -153,7 +153,7 @@ public class DefaultIndexOperationsIntegrationTests { assumeThat(mongoVersion.isGreaterThanOrEqualTo(THREE_DOT_TWO), is(true)); IndexDefinition id = new Index().named("partial-with-inheritance").on("k3y", Direction.ASC) - .partial(filter(where("age").gte(10))); + .partial(of(where("age").gte(10))); indexOps = new DefaultIndexOperations(template, this.template.getCollectionName(DefaultIndexOperationsIntegrationTestsSample.class),