From c5501db5772dc21238152bd5dd8b7c8cbc918e18 Mon Sep 17 00:00:00 2001 From: Mark Paluch Date: Tue, 7 Apr 2020 14:09:43 +0200 Subject: [PATCH] DATAMONGO-2502 - Polishing. Extend tests. Fix generics. Consistently use compiled patterns for positional placeholder removal. Original pull request: #847. --- .../mongodb/core/convert/QueryMapper.java | 23 +++++++++---------- .../core/DefaultBulkOperationsUnitTests.java | 3 ++- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/QueryMapper.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/QueryMapper.java index 91cfc6892..ec18d0767 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/QueryMapper.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/QueryMapper.java @@ -419,7 +419,7 @@ public class QueryMapper { return false; } - Class type = value.getClass(); + Class type = value.getClass(); MongoPersistentProperty property = documentField.getProperty(); if (property.getActualType().isAssignableFrom(type)) { @@ -443,7 +443,7 @@ public class QueryMapper { protected Object convertSimpleOrDocument(Object source, @Nullable MongoPersistentEntity entity) { if (source instanceof Example) { - return exampleMapper.getMappedExample((Example) source, entity); + return exampleMapper.getMappedExample((Example) source, entity); } if (source instanceof List) { @@ -923,6 +923,7 @@ public class QueryMapper { protected static class MetadataBackedField extends Field { private static final Pattern POSITIONAL_PARAMETER_PATTERN = Pattern.compile("\\.\\$(\\[.*?\\])?|\\.\\d+"); + private static final Pattern DOT_POSITIONAL_PATTERN = Pattern.compile("\\.\\d+"); private static final String INVALID_ASSOCIATION_REFERENCE = "Invalid path reference %s! Associations can only be pointed to directly or via their id property!"; private final MongoPersistentEntity entity; @@ -964,15 +965,11 @@ public class QueryMapper { this.entity = entity; this.mappingContext = context; - this.path = getPath(removePositionalPlaceholders(name)); + this.path = getPath(removePlaceholders(POSITIONAL_PARAMETER_PATTERN, name)); this.property = path == null ? property : path.getLeafProperty(); this.association = findAssociation(); } - private static String removePositionalPlaceholders(String raw) { - return POSITIONAL_PARAMETER_PATTERN.matcher(raw).replaceAll(""); - } - /* * (non-Javadoc) * @see org.springframework.data.mongodb.core.convert.QueryMapper.Field#with(java.lang.String) @@ -1076,7 +1073,7 @@ public class QueryMapper { } /** - * Returns the {@link PersistentPropertyPath} for the given pathExpression. + * Returns the {@link PersistentPropertyPath} for the given {@code pathExpression}. * * @param pathExpression * @return @@ -1084,8 +1081,8 @@ public class QueryMapper { @Nullable private PersistentPropertyPath getPath(String pathExpression) { - String rawPath = pathExpression.replaceAll("\\.\\d+", "") // - .replaceAll(POSITIONAL_OPERATOR.pattern(), ""); + String rawPath = removePlaceholders(POSITIONAL_OPERATOR, + removePlaceholders(DOT_POSITIONAL_PATTERN, pathExpression)); PropertyPath path = forName(rawPath); if (path == null || isPathToJavaLangClassProperty(path)) { @@ -1180,6 +1177,10 @@ public class QueryMapper { return mappingContext; } + private static String removePlaceholders(Pattern pattern, String raw) { + return pattern.matcher(raw).replaceAll(""); + } + /** * @author Christoph Strobl * @since 1.8 @@ -1231,14 +1232,12 @@ public class QueryMapper { static class KeyMapper { private final Iterator iterator; - private final MappingContext, MongoPersistentProperty> mappingContext; public KeyMapper(String key, MappingContext, MongoPersistentProperty> mappingContext) { this.iterator = Arrays.asList(key.split("\\.")).iterator(); this.iterator.next(); - this.mappingContext = mappingContext; } /** diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/DefaultBulkOperationsUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/DefaultBulkOperationsUnitTests.java index e3f897be1..4b9cd57fc 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/DefaultBulkOperationsUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/DefaultBulkOperationsUnitTests.java @@ -364,7 +364,7 @@ class DefaultBulkOperationsUnitTests { UpdateOneModel updateModel = (UpdateOneModel) captor.getValue().get(0); assertThat(updateModel.getUpdate()) - .isEqualTo(new Document("$set", new Document("items.$.documents.0.fileId", "file-id"))); + .isEqualTo(new Document("$set", new Document("items.$.documents.0.the_file_id", "file-id"))); } static class OrderTest { @@ -381,6 +381,7 @@ class DefaultBulkOperationsUnitTests { static class OrderTestDocument { + @Field("the_file_id") private String fileId; }