Skip to content

Commit 9203b73

Browse files
committed
Add reactive CollectionPreparer variant.
1 parent 6363cd2 commit 9203b73

File tree

4 files changed

+193
-106
lines changed

4 files changed

+193
-106
lines changed

Diff for: spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/CollectionPreparerSupport.java

+36-2
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
*/
1616
package org.springframework.data.mongodb.core;
1717

18+
import java.util.Arrays;
1819
import java.util.List;
1920
import java.util.function.BiFunction;
2021
import java.util.function.Function;
@@ -34,7 +35,7 @@
3435
*/
3536
class CollectionPreparerSupport implements ReadConcernAware, ReadPreferenceAware {
3637

37-
final List<Object> sources;
38+
private final List<Object> sources;
3839

3940
private CollectionPreparerSupport(List<Object> sources) {
4041
this.sources = sources;
@@ -134,7 +135,8 @@ public static CollectionPreparerDelegate of(Object... mixedAwares) {
134135
if (mixedAwares.length == 1 && mixedAwares[0] instanceof CollectionPreparerDelegate) {
135136
return (CollectionPreparerDelegate) mixedAwares[0];
136137
}
137-
return new CollectionPreparerDelegate(List.of(mixedAwares));
138+
139+
return new CollectionPreparerDelegate(Arrays.asList(mixedAwares));
138140
}
139141

140142
@Override
@@ -145,4 +147,36 @@ public MongoCollection<Document> prepare(MongoCollection<Document> collection) {
145147

146148
}
147149

150+
static class ReactiveCollectionPreparerDelegate extends CollectionPreparerSupport
151+
implements CollectionPreparer<com.mongodb.reactivestreams.client.MongoCollection<Document>> {
152+
153+
private ReactiveCollectionPreparerDelegate(List<Object> sources) {
154+
super(sources);
155+
}
156+
157+
public static ReactiveCollectionPreparerDelegate of(ReadPreferenceAware... awares) {
158+
return of((Object[]) awares);
159+
}
160+
161+
public static ReactiveCollectionPreparerDelegate of(Object... mixedAwares) {
162+
163+
if (mixedAwares.length == 1 && mixedAwares[0] instanceof CollectionPreparerDelegate) {
164+
return (ReactiveCollectionPreparerDelegate) mixedAwares[0];
165+
}
166+
167+
return new ReactiveCollectionPreparerDelegate(Arrays.asList(mixedAwares));
168+
}
169+
170+
@Override
171+
public com.mongodb.reactivestreams.client.MongoCollection<Document> prepare(
172+
com.mongodb.reactivestreams.client.MongoCollection<Document> collection) {
173+
return doPrepare(collection, //
174+
com.mongodb.reactivestreams.client.MongoCollection::getReadConcern,
175+
com.mongodb.reactivestreams.client.MongoCollection::withReadConcern,
176+
com.mongodb.reactivestreams.client.MongoCollection::getReadPreference,
177+
com.mongodb.reactivestreams.client.MongoCollection::withReadPreference);
178+
}
179+
180+
}
181+
148182
}

Diff for: spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/ReactiveFindOperationSupport.java

+5-4
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020

2121
import org.bson.Document;
2222
import org.springframework.dao.IncorrectResultSizeDataAccessException;
23+
import org.springframework.data.mongodb.core.CollectionPreparerSupport.ReactiveCollectionPreparerDelegate;
2324
import org.springframework.data.mongodb.core.query.NearQuery;
2425
import org.springframework.data.mongodb.core.query.Query;
2526
import org.springframework.data.mongodb.core.query.SerializationUtils;
@@ -67,8 +68,8 @@ static class ReactiveFindSupport<T>
6768
private final String collection;
6869
private final Query query;
6970

70-
ReactiveFindSupport(ReactiveMongoTemplate template, Class<?> domainType, Class<T> returnType,
71-
String collection, Query query) {
71+
ReactiveFindSupport(ReactiveMongoTemplate template, Class<?> domainType, Class<T> returnType, String collection,
72+
Query query) {
7273

7374
this.template = template;
7475
this.domainType = domainType;
@@ -169,8 +170,8 @@ private Flux<T> doFind(@Nullable FindPublisherPreparer preparer) {
169170
Document queryObject = query.getQueryObject();
170171
Document fieldsObject = query.getFieldsObject();
171172

172-
return template.doFind(getCollectionName(), queryObject, fieldsObject, domainType, returnType,
173-
preparer != null ? preparer : getCursorPreparer(query));
173+
return template.doFind(ReactiveCollectionPreparerDelegate.of(query), getCollectionName(), queryObject,
174+
fieldsObject, domainType, returnType, preparer != null ? preparer : getCursorPreparer(query));
174175
}
175176

176177
@SuppressWarnings("unchecked")

0 commit comments

Comments
 (0)