Skip to content

Commit 94f3207

Browse files
mp911dechristophstrobl
authored andcommitted
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 0297d95 commit 94f3207

22 files changed

+77
-132
lines changed

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

+1-1
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

+5-5
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

+1-1
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

+6-6
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

+2-9
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

+2-2
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

+20-63
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

+1-1
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

+1-1
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

+5-5
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)