Skip to content

Commit 51d64c3

Browse files
committed
Polishing.
Fix generics. Update since tags. Add GH ticket references. Use literal null instead of code null in javadoc. Original Pull Request: #4949
1 parent ec49c14 commit 51d64c3

22 files changed

+77
-132
lines changed

spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/ExecutableAggregationOperation.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ interface TerminatingAggregation<T> {
8989
* @param converter the converter, must not be {@literal null}.
9090
* @return new instance of {@link TerminatingAggregation}.
9191
* @throws IllegalArgumentException if {@link QueryResultConverter converter} is {@literal null}.
92-
* @since x.y
92+
* @since 5.0
9393
*/
9494
@Contract("_ -> new")
9595
<R> TerminatingAggregation<R> map(QueryResultConverter<? super T, ? extends R> converter);

spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/ExecutableFindOperation.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ interface TerminatingFind<T> extends TerminatingResults<T>, TerminatingProjectio
8484
*
8585
* @author Christoph Strobl
8686
* @author Mark Paluch
87-
* @since x.y
87+
* @since 5.0
8888
*/
8989
interface TerminatingResults<T> {
9090

@@ -95,7 +95,7 @@ interface TerminatingResults<T> {
9595
* @param converter the converter, must not be {@literal null}.
9696
* @return new instance of {@link TerminatingResults}.
9797
* @throws IllegalArgumentException if {@link QueryResultConverter converter} is {@literal null}.
98-
* @since x.y
98+
* @since 5.0
9999
*/
100100
@Contract("_ -> new")
101101
<R> TerminatingResults<R> map(QueryResultConverter<? super T, ? extends R> converter);
@@ -157,7 +157,7 @@ default Optional<T> first() {
157157
* <p>
158158
* When using {@link KeysetScrollPosition}, make sure to use non-nullable
159159
* {@link org.springframework.data.domain.Sort sort properties} as MongoDB does not support criteria to reconstruct
160-
* a query result from absent document fields or {@code null} values through {@code $gt/$lt} operators.
160+
* a query result from absent document fields or {@literal null} values through {@code $gt/$lt} operators.
161161
*
162162
* @param scrollPosition the scroll position.
163163
* @return a window of the resulting elements.
@@ -173,7 +173,7 @@ default Optional<T> first() {
173173
* Trigger find execution by calling one of the terminating methods.
174174
*
175175
* @author Christoph Strobl
176-
* @since x.y
176+
* @since 5.0
177177
*/
178178
interface TerminatingProjection {
179179

@@ -214,7 +214,7 @@ interface TerminatingFindNear<T> {
214214
* @param converter the converter, must not be {@literal null}.
215215
* @return new instance of {@link TerminatingFindNear}.
216216
* @throws IllegalArgumentException if {@link QueryResultConverter converter} is {@literal null}.
217-
* @since x.y
217+
* @since 5.0
218218
*/
219219
@Contract("_ -> new")
220220
<R> TerminatingFindNear<R> map(QueryResultConverter<? super T, ? extends R> converter);

spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/ExecutableRemoveOperation.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ interface TerminatingResults<T> {
6464
* @param converter the converter, must not be {@literal null}.
6565
* @return new instance of {@link ExecutableFindOperation.TerminatingResults}.
6666
* @throws IllegalArgumentException if {@link QueryResultConverter converter} is {@literal null}.
67-
* @since x.y
67+
* @since 5.0
6868
*/
6969
@Contract("_ -> new")
7070
<R> TerminatingResults<R> map(QueryResultConverter<? super T, ? extends R> converter);

spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/ExecutableUpdateOperation.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,15 @@
1818
import java.util.Optional;
1919

2020
import org.jspecify.annotations.Nullable;
21-
import org.springframework.data.mongodb.core.ExecutableFindOperation.TerminatingResults;
21+
2222
import org.springframework.data.mongodb.core.aggregation.AggregationUpdate;
2323
import org.springframework.data.mongodb.core.query.CriteriaDefinition;
2424
import org.springframework.data.mongodb.core.query.Query;
2525
import org.springframework.data.mongodb.core.query.Update;
2626
import org.springframework.data.mongodb.core.query.UpdateDefinition;
27+
import org.springframework.lang.Contract;
2728

2829
import com.mongodb.client.result.UpdateResult;
29-
import org.springframework.lang.Contract;
3030

3131
/**
3232
* {@link ExecutableUpdateOperation} allows creation and execution of MongoDB update / findAndModify / findAndReplace
@@ -71,15 +71,14 @@ public interface ExecutableUpdateOperation {
7171
*/
7272
interface TerminatingFindAndModify<T> {
7373

74-
7574
/**
7675
* Map the query result to a different type using {@link QueryResultConverter}.
7776
*
7877
* @param <R> {@link Class type} of the result.
7978
* @param converter the converter, must not be {@literal null}.
8079
* @return new instance of {@link TerminatingFindAndModify}.
8180
* @throws IllegalArgumentException if {@link QueryResultConverter converter} is {@literal null}.
82-
* @since x.y
81+
* @since 5.0
8382
*/
8483
@Contract("_ -> new")
8584
<R> TerminatingFindAndModify<R> map(QueryResultConverter<? super T, ? extends R> converter);
@@ -153,10 +152,11 @@ default Optional<T> findAndReplace() {
153152
* @param converter the converter, must not be {@literal null}.
154153
* @return new instance of {@link TerminatingFindAndModify}.
155154
* @throws IllegalArgumentException if {@link QueryResultConverter converter} is {@literal null}.
156-
* @since x.y
155+
* @since 5.0
157156
*/
158157
@Contract("_ -> new")
159-
<R> TerminatingFindAndReplace<R> mapResult(QueryResultConverter<? super T, ? extends R> converter);
158+
<R> TerminatingFindAndReplace<R> map(QueryResultConverter<? super T, ? extends R> converter);
159+
160160
}
161161

162162
/**

spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/ExecutableUpdateOperationSupport.java

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -185,16 +185,9 @@ public UpdateResult upsert() {
185185
}
186186

187187
@Override
188-
public <R> TerminatingFindAndModify<R> map(QueryResultConverter<? super T, ? extends R> converter) {
189-
190-
return new ExecutableUpdateSupport<>(template, domainType, query, update, collection, findAndModifyOptions,
191-
findAndReplaceOptions, replacement, targetType, this.resultConverter.andThen(converter));
192-
}
193-
194-
@Override
195-
public <R> TerminatingFindAndReplace<R> mapResult(QueryResultConverter<? super T, ? extends R> converter) {
188+
public <R> ExecutableUpdateSupport<S, R> map(QueryResultConverter<? super T, ? extends R> converter) {
196189
return new ExecutableUpdateSupport<>(template, domainType, query, update, collection, findAndModifyOptions,
197-
findAndReplaceOptions, replacement, targetType, this.resultConverter.andThen(converter));
190+
findAndReplaceOptions, replacement, targetType, this.resultConverter.andThen(converter));
198191
}
199192

200193
@Override

spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/MongoOperations.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -822,7 +822,7 @@ <T> MapReduceResults<T> mapReduce(Query query, String inputCollectionName, Strin
822822
* <p>
823823
* When using {@link KeysetScrollPosition}, make sure to use non-nullable {@link org.springframework.data.domain.Sort
824824
* sort properties} as MongoDB does not support criteria to reconstruct a query result from absent document fields or
825-
* {@code null} values through {@code $gt/$lt} operators.
825+
* {@literal null} values through {@code $gt/$lt} operators.
826826
*
827827
* @param query the query class that specifies the criteria used to find a document and also an optional fields
828828
* specification. Must not be {@literal null}.
@@ -847,7 +847,7 @@ <T> MapReduceResults<T> mapReduce(Query query, String inputCollectionName, Strin
847847
* <p>
848848
* When using {@link KeysetScrollPosition}, make sure to use non-nullable {@link org.springframework.data.domain.Sort
849849
* sort properties} as MongoDB does not support criteria to reconstruct a query result from absent document fields or
850-
* {@code null} values through {@code $gt/$lt} operators.
850+
* {@literal null} values through {@code $gt/$lt} operators.
851851
*
852852
* @param query the query class that specifies the criteria used to find a document and also an optional fields
853853
* specification. Must not be {@literal null}.

spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/MongoTemplate.java

Lines changed: 20 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -15,22 +15,12 @@
1515
*/
1616
package org.springframework.data.mongodb.core;
1717

18-
import static org.springframework.data.mongodb.core.query.SerializationUtils.serializeToJsonSafely;
18+
import static org.springframework.data.mongodb.core.query.SerializationUtils.*;
1919

2020
import java.io.IOException;
2121
import java.math.BigDecimal;
2222
import java.math.RoundingMode;
23-
import java.util.ArrayList;
24-
import java.util.Collection;
25-
import java.util.Collections;
26-
import java.util.HashMap;
27-
import java.util.Iterator;
28-
import java.util.LinkedHashSet;
29-
import java.util.List;
30-
import java.util.Map;
31-
import java.util.Optional;
32-
import java.util.Scanner;
33-
import java.util.Set;
23+
import java.util.*;
3424
import java.util.concurrent.TimeUnit;
3525
import java.util.function.BiPredicate;
3626
import java.util.stream.Collectors;
@@ -40,8 +30,8 @@
4030
import org.apache.commons.logging.LogFactory;
4131
import org.bson.Document;
4232
import org.bson.conversions.Bson;
43-
4433
import org.jspecify.annotations.Nullable;
34+
4535
import org.springframework.beans.BeansException;
4636
import org.springframework.context.ApplicationContext;
4737
import org.springframework.context.ApplicationContextAware;
@@ -106,18 +96,7 @@
10696
import org.springframework.data.mongodb.core.mapping.MongoMappingContext;
10797
import org.springframework.data.mongodb.core.mapping.MongoPersistentEntity;
10898
import org.springframework.data.mongodb.core.mapping.MongoPersistentProperty;
109-
import org.springframework.data.mongodb.core.mapping.event.AfterConvertCallback;
110-
import org.springframework.data.mongodb.core.mapping.event.AfterConvertEvent;
111-
import org.springframework.data.mongodb.core.mapping.event.AfterDeleteEvent;
112-
import org.springframework.data.mongodb.core.mapping.event.AfterLoadEvent;
113-
import org.springframework.data.mongodb.core.mapping.event.AfterSaveCallback;
114-
import org.springframework.data.mongodb.core.mapping.event.AfterSaveEvent;
115-
import org.springframework.data.mongodb.core.mapping.event.BeforeConvertCallback;
116-
import org.springframework.data.mongodb.core.mapping.event.BeforeConvertEvent;
117-
import org.springframework.data.mongodb.core.mapping.event.BeforeDeleteEvent;
118-
import org.springframework.data.mongodb.core.mapping.event.BeforeSaveCallback;
119-
import org.springframework.data.mongodb.core.mapping.event.BeforeSaveEvent;
120-
import org.springframework.data.mongodb.core.mapping.event.MongoMappingEvent;
99+
import org.springframework.data.mongodb.core.mapping.event.*;
121100
import org.springframework.data.mongodb.core.mapreduce.MapReduceOptions;
122101
import org.springframework.data.mongodb.core.mapreduce.MapReduceResults;
123102
import org.springframework.data.mongodb.core.query.BasicQuery;
@@ -157,21 +136,7 @@
157136
import com.mongodb.client.MongoCursor;
158137
import com.mongodb.client.MongoDatabase;
159138
import com.mongodb.client.MongoIterable;
160-
import com.mongodb.client.model.CountOptions;
161-
import com.mongodb.client.model.CreateCollectionOptions;
162-
import com.mongodb.client.model.CreateViewOptions;
163-
import com.mongodb.client.model.DeleteOptions;
164-
import com.mongodb.client.model.EstimatedDocumentCountOptions;
165-
import com.mongodb.client.model.FindOneAndDeleteOptions;
166-
import com.mongodb.client.model.FindOneAndReplaceOptions;
167-
import com.mongodb.client.model.FindOneAndUpdateOptions;
168-
import com.mongodb.client.model.ReturnDocument;
169-
import com.mongodb.client.model.TimeSeriesGranularity;
170-
import com.mongodb.client.model.TimeSeriesOptions;
171-
import com.mongodb.client.model.UpdateOptions;
172-
import com.mongodb.client.model.ValidationAction;
173-
import com.mongodb.client.model.ValidationLevel;
174-
import com.mongodb.client.model.ValidationOptions;
139+
import com.mongodb.client.model.*;
175140
import com.mongodb.client.result.DeleteResult;
176141
import com.mongodb.client.result.UpdateResult;
177142

@@ -1148,7 +1113,6 @@ public <T> T findAndModify(Query query, UpdateDefinition update, FindAndModifyOp
11481113
return findAndModify(query, update, options, entityClass, collectionName, QueryResultConverter.entity());
11491114
}
11501115

1151-
11521116
<S, T> T findAndModify(Query query, UpdateDefinition update, FindAndModifyOptions options,
11531117
Class<S> entityClass, String collectionName, QueryResultConverter<? super S, ? extends T> resultConverter) {
11541118

@@ -1179,7 +1143,7 @@ <S, T> T findAndModify(Query query, UpdateDefinition update, FindAndModifyOption
11791143
return findAndReplace(query, replacement, options, entityType, collectionName, resultType, QueryResultConverter.entity());
11801144
}
11811145

1182-
public <S, T, R> @Nullable R findAndReplace(Query query, S replacement, FindAndReplaceOptions options,
1146+
<S, T, R> @Nullable R findAndReplace(Query query, S replacement, FindAndReplaceOptions options,
11831147
Class<S> entityType, String collectionName, Class<T> resultType, QueryResultConverter<? super T, ? extends R> resultConverter) {
11841148

11851149
Assert.notNull(query, "Query must not be null");
@@ -1207,7 +1171,6 @@ <S, T> T findAndModify(Query query, UpdateDefinition update, FindAndModifyOption
12071171
maybeEmitEvent(new BeforeSaveEvent<>(replacement, mappedReplacement, collectionName));
12081172
maybeCallBeforeSave(replacement, mappedReplacement, collectionName);
12091173

1210-
12111174
R saved = doFindAndReplace(collectionPreparer, collectionName, mappedQuery, mappedFields, mappedSort,
12121175
queryContext.getCollation(entityType).orElse(null), entityType, mappedReplacement, options, projection, resultConverter);
12131176

@@ -2203,25 +2166,15 @@ protected <T> List<T> doFindAndDelete(String collectionName, Query query, Class<
22032166
return doFindAndDelete(collectionName, query, entityClass, QueryResultConverter.entity());
22042167
}
22052168

2206-
protected <S,T> List<T> doFindAndDelete(String collectionName, Query query, Class<S> entityClass, QueryResultConverter<? super S, ? extends T> resultConverter) {
2169+
<S, T> List<T> doFindAndDelete(String collectionName, Query query, Class<S> entityClass,
2170+
QueryResultConverter<? super S, ? extends T> resultConverter) {
22072171

22082172
List<Object> ids = new ArrayList<>();
22092173

2210-
2211-
2212-
// QueryResultConverter<S,T> tmpConverter = new QueryResultConverter<S, S>() {
2213-
// @Override
2214-
// public S mapDocument(Document document, ConversionResultSupplier<S> reader) {
2215-
// ids.add(document.get("_id"));
2216-
// return reader.get();
2217-
// }
2218-
// }.andThen(resultConverter);
2219-
2220-
// DocumentCallback<T> callback = getResultReader(EntityProjection.nonProjecting(entityClass), collectionName, tmpConverter);
2221-
2222-
QueryResultConverterCallback callback = new QueryResultConverterCallback(resultConverter, new ProjectingReadCallback<S,S>(getConverter(), EntityProjection.nonProjecting(entityClass), collectionName)) {
2174+
QueryResultConverterCallback<S, T> callback = new QueryResultConverterCallback<>(resultConverter,
2175+
new ProjectingReadCallback<>(getConverter(), EntityProjection.nonProjecting(entityClass), collectionName)) {
22232176
@Override
2224-
public Object doWith(Document object) {
2177+
public T doWith(Document object) {
22252178
ids.add(object.get("_id"));
22262179
return super.doWith(object);
22272180
}
@@ -2366,7 +2319,7 @@ protected <O> Stream<O> aggregateStream(Aggregation aggregation, String collecti
23662319
}
23672320

23682321
@SuppressWarnings({ "ConstantConditions", "NullAway" })
2369-
protected <T, O> Stream<O> doAggregateStream(Aggregation aggregation, String collectionName, Class<T> outputType,
2322+
<T, O> Stream<O> doAggregateStream(Aggregation aggregation, String collectionName, Class<T> outputType,
23702323
QueryResultConverter<? super T, ? extends O> resultConverter,
23712324
@Nullable AggregationOperationContext context) {
23722325

@@ -2412,7 +2365,8 @@ protected <T, O> Stream<O> doAggregateStream(Aggregation aggregation, String col
24122365
cursor = cursor.maxTime(options.getMaxTime().toMillis(), TimeUnit.MILLISECONDS);
24132366
}
24142367

2415-
Class<?> domainType = aggregation instanceof TypedAggregation typedAggregation ? typedAggregation.getInputType()
2368+
Class<?> domainType = aggregation instanceof TypedAggregation<?> typedAggregation
2369+
? typedAggregation.getInputType()
24162370
: null;
24172371

24182372
Optionals.firstNonEmpty(options::getCollation, //
@@ -2863,7 +2817,8 @@ Document getMappedValidator(Validator validator, Class<?> domainType) {
28632817
}
28642818

28652819
@SuppressWarnings("ConstantConditions")
2866-
protected <S, T> @Nullable T doFindAndModify(CollectionPreparer collectionPreparer, String collectionName,
2820+
<S, T> @Nullable T doFindAndModify(CollectionPreparer<MongoCollection<Document>> collectionPreparer,
2821+
String collectionName,
28672822
Document query, @Nullable Document fields, @Nullable Document sort, Class<S> entityClass, UpdateDefinition update,
28682823
@Nullable FindAndModifyOptions options, QueryResultConverter<? super S, ? extends T> resultConverter) {
28692824

@@ -2911,7 +2866,8 @@ Document getMappedValidator(Validator validator, Class<?> domainType) {
29112866
* {@literal false} and {@link FindAndReplaceOptions#isUpsert() upsert} is {@literal false}.
29122867
*/
29132868
@Nullable
2914-
protected <S, T> T doFindAndReplace(CollectionPreparer collectionPreparer, String collectionName,
2869+
protected <S, T> T doFindAndReplace(CollectionPreparer<MongoCollection<Document>> collectionPreparer,
2870+
String collectionName,
29152871
Document mappedQuery, Document mappedFields, Document mappedSort,
29162872
com.mongodb.client.model.@Nullable Collation collation, Class<S> entityType, Document replacement,
29172873
FindAndReplaceOptions options, Class<T> resultType) {
@@ -2954,7 +2910,8 @@ CollectionPreparer<MongoCollection<Document>> createCollectionPreparer(Query que
29542910
* @since 3.4
29552911
*/
29562912
@Nullable
2957-
private <S, T, R> R doFindAndReplace(CollectionPreparer collectionPreparer, String collectionName,
2913+
private <S, T, R> R doFindAndReplace(CollectionPreparer<MongoCollection<Document>> collectionPreparer,
2914+
String collectionName,
29582915
Document mappedQuery, Document mappedFields, Document mappedSort,
29592916
com.mongodb.client.model.@Nullable Collation collation, Class<T> entityType, Document replacement,
29602917
FindAndReplaceOptions options, EntityProjection<S, T> projection, QueryResultConverter<? super S, ? extends R> resultConverter) {

spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/QueryResultConverter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
* @param <T> object type accepted by this converter.
2929
* @param <R> the returned result type.
3030
* @author Mark Paluch
31-
* @since x.x
31+
* @since 5.0
3232
*/
3333
@FunctionalInterface
3434
public interface QueryResultConverter<T, R> {

spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/ReactiveAggregationOperation.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ interface TerminatingAggregationOperation<T> {
8181
* @param converter the converter, must not be {@literal null}.
8282
* @return new instance of {@link ExecutableFindOperation.TerminatingFindNear}.
8383
* @throws IllegalArgumentException if {@link QueryResultConverter converter} is {@literal null}.
84-
* @since x.y
84+
* @since 5.0
8585
*/
8686
@Contract("_ -> new")
8787
<R> TerminatingAggregationOperation<R> map(QueryResultConverter<? super T, ? extends R> converter);

spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/ReactiveFindOperation.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ interface TerminatingFind<T> extends TerminatingResults<T>, TerminatingProjectio
7474
/**
7575
* Compose find execution by calling one of the terminating methods.
7676
*
77-
* @since x.y
77+
* @since 5.0
7878
*/
7979
interface TerminatingResults<T> {
8080

@@ -85,7 +85,7 @@ interface TerminatingResults<T> {
8585
* @param converter the converter, must not be {@literal null}.
8686
* @return new instance of {@link TerminatingResults}.
8787
* @throws IllegalArgumentException if {@link QueryResultConverter converter} is {@literal null}.
88-
* @since x.y
88+
* @since 5.0
8989
*/
9090
@Contract("_ -> new")
9191
<R> TerminatingResults<R> map(QueryResultConverter<? super T, ? extends R> converter);
@@ -117,7 +117,7 @@ interface TerminatingResults<T> {
117117
* <p>
118118
* When using {@link KeysetScrollPosition}, make sure to use non-nullable
119119
* {@link org.springframework.data.domain.Sort sort properties} as MongoDB does not support criteria to reconstruct
120-
* a query result from absent document fields or {@code null} values through {@code $gt/$lt} operators.
120+
* a query result from absent document fields or {@literal null} values through {@code $gt/$lt} operators.
121121
*
122122
* @param scrollPosition the scroll position.
123123
* @return a scroll of the resulting elements.
@@ -147,7 +147,7 @@ interface TerminatingResults<T> {
147147
/**
148148
* Compose find execution by calling one of the terminating methods.
149149
*
150-
* @since x.y
150+
* @since 5.0
151151
*/
152152
interface TerminatingProjection {
153153

@@ -183,7 +183,7 @@ interface TerminatingFindNear<T> {
183183
* @param converter the converter, must not be {@literal null}.
184184
* @return new instance of {@link ExecutableFindOperation.TerminatingFindNear}.
185185
* @throws IllegalArgumentException if {@link QueryResultConverter converter} is {@literal null}.
186-
* @since x.y
186+
* @since 5.0
187187
*/
188188
@Contract("_ -> new")
189189
<R> TerminatingFindNear<R> map(QueryResultConverter<? super T, ? extends R> converter);

0 commit comments

Comments
 (0)