Skip to content

Commit cd25a4f

Browse files
Rename referenceContext to ReferenceCollection
1 parent 5bd83c6 commit cd25a4f

File tree

7 files changed

+57
-85
lines changed

7 files changed

+57
-85
lines changed

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

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@
2828
import java.util.List;
2929
import java.util.stream.Collectors;
3030
import java.util.stream.Stream;
31-
import java.util.stream.StreamSupport;
3231

3332
import org.aopalliance.intercept.MethodInterceptor;
3433
import org.aopalliance.intercept.MethodInvocation;
@@ -49,7 +48,6 @@
4948
import org.springframework.data.mongodb.MongoDatabaseUtils;
5049
import org.springframework.data.mongodb.core.convert.ReferenceLoader.DocumentReferenceQuery;
5150
import org.springframework.data.mongodb.core.mapping.MongoPersistentProperty;
52-
import org.springframework.data.util.Streamable;
5351
import org.springframework.lang.Nullable;
5452
import org.springframework.objenesis.ObjenesisStd;
5553
import org.springframework.util.Assert;
@@ -120,7 +118,7 @@ public Object resolveDbRef(MongoPersistentProperty property, @Nullable DBRef dbr
120118
@Override
121119
public Document fetch(DBRef dbRef) {
122120
return getReferenceLoader().fetch(DocumentReferenceQuery.singleReferenceFilter(Filters.eq("_id", dbRef.getId())),
123-
ReferenceContext.fromDBRef(dbRef));
121+
ReferenceCollection.fromDBRef(dbRef));
124122
}
125123

126124
/*
@@ -501,9 +499,9 @@ protected MongoCollection<Document> getCollection(DBRef dbref) {
501499
.getCollection(dbref.getCollectionName(), Document.class);
502500
}
503501

504-
protected MongoCollection<Document> getCollection(ReferenceContext context) {
502+
protected MongoCollection<Document> getCollection(ReferenceCollection context) {
505503

506-
return MongoDatabaseUtils.getDatabase(context.database, mongoDbFactory).getCollection(context.collection,
504+
return MongoDatabaseUtils.getDatabase(context.getDatabase(), mongoDbFactory).getCollection(context.getCollection(),
507505
Document.class);
508506
}
509507
}

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

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

18-
import java.util.stream.Stream;
19-
2018
import org.bson.Document;
2119
import org.slf4j.Logger;
2220
import org.slf4j.LoggerFactory;
2321
import org.springframework.data.mongodb.MongoDatabaseFactory;
2422
import org.springframework.data.mongodb.MongoDatabaseUtils;
25-
import org.springframework.data.mongodb.core.convert.ReferenceResolver.ReferenceContext;
23+
import org.springframework.data.mongodb.core.convert.ReferenceResolver.ReferenceCollection;
2624
import org.springframework.util.Assert;
2725
import org.springframework.util.StringUtils;
2826

@@ -45,7 +43,7 @@ public DefaultReferenceLoader(MongoDatabaseFactory mongoDbFactory) {
4543
}
4644

4745
@Override
48-
public Iterable<Document> bulkFetch(DocumentReferenceQuery filter, ReferenceContext context) {
46+
public Iterable<Document> bulkFetch(DocumentReferenceQuery filter, ReferenceCollection context) {
4947

5048
MongoCollection<Document> collection = getCollection(context);
5149

@@ -59,9 +57,9 @@ public Iterable<Document> bulkFetch(DocumentReferenceQuery filter, ReferenceCont
5957
return filter.apply(collection);
6058
}
6159

62-
protected MongoCollection<Document> getCollection(ReferenceContext context) {
60+
protected MongoCollection<Document> getCollection(ReferenceCollection context) {
6361

64-
return MongoDatabaseUtils.getDatabase(context.database, mongoDbFactory).getCollection(context.collection,
62+
return MongoDatabaseUtils.getDatabase(context.getDatabase(), mongoDbFactory).getCollection(context.getCollection(),
6563
Document.class);
6664
}
6765
}

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

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,8 @@
1515
*/
1616
package org.springframework.data.mongodb.core.convert;
1717

18-
import java.util.function.BiFunction;
19-
import java.util.stream.Stream;
20-
21-
import org.bson.Document;
22-
import org.springframework.data.mongodb.core.convert.ReferenceLoader.DocumentReferenceQuery;
2318
import org.springframework.data.mongodb.core.mapping.DocumentReference;
2419
import org.springframework.data.mongodb.core.mapping.MongoPersistentProperty;
25-
import org.springframework.data.util.TypeInformation;
2620
import org.springframework.lang.Nullable;
2721

2822
/**
@@ -55,9 +49,9 @@ public Object resolveReference(MongoPersistentProperty property, Object source,
5549

5650
private Object createLazyLoadingProxy(MongoPersistentProperty property, Object source,
5751
ReferenceReader referenceReader, LookupFunction lookupFunction,
58-
ResultConversionFunction resultConversionFunction
59-
) {
60-
return new LazyLoadingProxyGenerator(referenceReader).createLazyLoadingProxy(property, source, lookupFunction, resultConversionFunction);
52+
ResultConversionFunction resultConversionFunction) {
53+
return new LazyLoadingProxyGenerator(referenceReader).createLazyLoadingProxy(property, source, lookupFunction,
54+
resultConversionFunction);
6155
}
6256

6357
protected boolean isLazyReference(MongoPersistentProperty property) {

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

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,26 +19,20 @@
1919

2020
import java.io.Serializable;
2121
import java.lang.reflect.Method;
22-
import java.util.function.BiFunction;
23-
import java.util.stream.Stream;
2422

2523
import javax.annotation.Nonnull;
2624
import javax.annotation.Nullable;
2725

2826
import org.aopalliance.intercept.MethodInterceptor;
2927
import org.aopalliance.intercept.MethodInvocation;
30-
import org.bson.Document;
3128
import org.springframework.aop.framework.ProxyFactory;
3229
import org.springframework.cglib.proxy.Callback;
3330
import org.springframework.cglib.proxy.Enhancer;
3431
import org.springframework.cglib.proxy.Factory;
3532
import org.springframework.cglib.proxy.MethodProxy;
36-
import org.springframework.data.mongodb.core.convert.ReferenceLoader.DocumentReferenceQuery;
3733
import org.springframework.data.mongodb.core.convert.ReferenceResolver.LookupFunction;
38-
import org.springframework.data.mongodb.core.convert.ReferenceResolver.ReferenceContext;
3934
import org.springframework.data.mongodb.core.convert.ReferenceResolver.ResultConversionFunction;
4035
import org.springframework.data.mongodb.core.mapping.MongoPersistentProperty;
41-
import org.springframework.data.util.TypeInformation;
4236
import org.springframework.objenesis.ObjenesisStd;
4337
import org.springframework.util.ReflectionUtils;
4438

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

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,11 @@
1616
package org.springframework.data.mongodb.core.convert;
1717

1818
import java.util.Collections;
19-
import java.util.stream.Stream;
20-
import java.util.stream.StreamSupport;
19+
import java.util.Iterator;
2120

2221
import org.bson.Document;
2322
import org.bson.conversions.Bson;
24-
import org.springframework.data.mongodb.core.convert.ReferenceResolver.ReferenceContext;
25-
import org.springframework.data.util.Streamable;
23+
import org.springframework.data.mongodb.core.convert.ReferenceResolver.ReferenceCollection;
2624
import org.springframework.lang.Nullable;
2725

2826
import com.mongodb.client.MongoCollection;
@@ -33,14 +31,14 @@
3331
public interface ReferenceLoader {
3432

3533
@Nullable
36-
default Document fetch(DocumentReferenceQuery filter, ReferenceContext context) {
37-
return Streamable.of(bulkFetch(filter, context)).stream().findFirst().orElse(null);
34+
default Document fetch(DocumentReferenceQuery filter, ReferenceCollection context) {
35+
36+
Iterator<Document> it = bulkFetch(filter, context).iterator();
37+
return it.hasNext() ? it.next() : null;
3838
}
3939

40-
// meh, Stream!
41-
Iterable<Document> bulkFetch(DocumentReferenceQuery filter, ReferenceContext context);
40+
Iterable<Document> bulkFetch(DocumentReferenceQuery filter, ReferenceCollection context);
4241

43-
// Reference query
4442
interface DocumentReferenceQuery {
4543

4644
Bson getFilter();
@@ -54,9 +52,9 @@ default Bson getSort() {
5452
default Iterable<Document> apply(MongoCollection<Document> collection) {
5553
return restoreOrder(collection.find(getFilter()).sort(getSort()));
5654
}
57-
58-
default Iterable<Document> restoreOrder(Iterable<Document> stream) {
59-
return stream;
55+
56+
default Iterable<Document> restoreOrder(Iterable<Document> documents) {
57+
return documents;
6058
}
6159

6260
static DocumentReferenceQuery referenceFilter(Bson bson) {

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

Lines changed: 29 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
import java.util.Map.Entry;
2525
import java.util.Optional;
2626
import java.util.Set;
27-
import java.util.function.BiFunction;
2827
import java.util.function.Supplier;
2928
import java.util.stream.Collectors;
3029

@@ -34,7 +33,7 @@
3433
import org.springframework.data.mapping.model.SpELContext;
3534
import org.springframework.data.mongodb.core.convert.ReferenceLoader.DocumentReferenceQuery;
3635
import org.springframework.data.mongodb.core.convert.ReferenceResolver.LookupFunction;
37-
import org.springframework.data.mongodb.core.convert.ReferenceResolver.ReferenceContext;
36+
import org.springframework.data.mongodb.core.convert.ReferenceResolver.ReferenceCollection;
3837
import org.springframework.data.mongodb.core.convert.ReferenceResolver.ResultConversionFunction;
3938
import org.springframework.data.mongodb.core.mapping.DocumentReference;
4039
import org.springframework.data.mongodb.core.mapping.MongoPersistentEntity;
@@ -43,10 +42,8 @@
4342
import org.springframework.data.mongodb.util.json.ParameterBindingContext;
4443
import org.springframework.data.mongodb.util.json.ParameterBindingDocumentCodec;
4544
import org.springframework.data.mongodb.util.json.ValueProvider;
46-
import org.springframework.data.util.ClassTypeInformation;
4745
import org.springframework.data.util.Lazy;
4846
import org.springframework.data.util.Streamable;
49-
import org.springframework.data.util.TypeInformation;
5047
import org.springframework.expression.EvaluationContext;
5148
import org.springframework.lang.Nullable;
5249
import org.springframework.util.StringUtils;
@@ -59,10 +56,9 @@
5956
*/
6057
public class ReferenceReader {
6158

62-
private final ParameterBindingDocumentCodec codec;
63-
6459
private final Lazy<MappingContext<? extends MongoPersistentEntity<?>, MongoPersistentProperty>> mappingContext;
6560
private final Supplier<SpELContext> spelContextSupplier;
61+
private final ParameterBindingDocumentCodec codec;
6662

6763
public ReferenceReader(MappingContext<? extends MongoPersistentEntity<?>, MongoPersistentProperty> mappingContext,
6864
Supplier<SpELContext> spelContextSupplier) {
@@ -79,18 +75,17 @@ public ReferenceReader(
7975
this.codec = new ParameterBindingDocumentCodec();
8076
}
8177

82-
Object readReference(MongoPersistentProperty property, Object value,
83-
LookupFunction lookupFunction,
78+
Object readReference(MongoPersistentProperty property, Object value, LookupFunction lookupFunction,
8479
ResultConversionFunction resultConversionFunction) {
8580

8681
SpELContext spELContext = spelContextSupplier.get();
8782

8883
DocumentReferenceQuery filter = computeFilter(property, value, spELContext);
89-
ReferenceContext referenceContext = computeReferenceContext(property, value, spELContext);
84+
ReferenceCollection referenceCollection = computeReferenceContext(property, value, spELContext);
9085

91-
Iterable<Document> result = lookupFunction.apply(filter, referenceContext);
86+
Iterable<Document> result = lookupFunction.apply(filter, referenceCollection);
9287

93-
if(!result.iterator().hasNext()) {
88+
if (!result.iterator().hasNext()) {
9489
return null;
9590
}
9691

@@ -99,18 +94,17 @@ Object readReference(MongoPersistentProperty property, Object value,
9994
}
10095

10196
return resultConversionFunction.apply(result.iterator().next(), property);
102-
10397
}
10498

105-
private ReferenceContext computeReferenceContext(MongoPersistentProperty property, Object value,
99+
private ReferenceCollection computeReferenceContext(MongoPersistentProperty property, Object value,
106100
SpELContext spELContext) {
107101

108102
if (value instanceof Iterable) {
109103
value = ((Iterable<?>) value).iterator().next();
110104
}
111105

112106
if (value instanceof DBRef) {
113-
return ReferenceContext.fromDBRef((DBRef) value);
107+
return ReferenceCollection.fromDBRef((DBRef) value);
114108
}
115109

116110
if (value instanceof Document) {
@@ -127,10 +121,10 @@ private ReferenceContext computeReferenceContext(MongoPersistentProperty propert
127121
String targetCollection = parseValueOrGet(documentReference.collection(), bindingContext,
128122
() -> ref.get("collection",
129123
mappingContext.get().getPersistentEntity(property.getAssociationTargetType()).getCollection()));
130-
return new ReferenceContext(targetDatabase, targetCollection);
124+
return new ReferenceCollection(targetDatabase, targetCollection);
131125
}
132126

133-
return new ReferenceContext(ref.getString("db"), ref.get("collection",
127+
return new ReferenceCollection(ref.getString("db"), ref.get("collection",
134128
mappingContext.get().getPersistentEntity(property.getAssociationTargetType()).getCollection()));
135129
}
136130

@@ -143,10 +137,10 @@ private ReferenceContext computeReferenceContext(MongoPersistentProperty propert
143137
String targetCollection = parseValueOrGet(documentReference.collection(), bindingContext,
144138
() -> mappingContext.get().getPersistentEntity(property.getAssociationTargetType()).getCollection());
145139

146-
return new ReferenceContext(targetDatabase, targetCollection);
140+
return new ReferenceCollection(targetDatabase, targetCollection);
147141
}
148142

149-
return new ReferenceContext(null,
143+
return new ReferenceCollection(null,
150144
mappingContext.get().getPersistentEntity(property.getAssociationTargetType()).getCollection());
151145
}
152146

@@ -252,15 +246,15 @@ public Iterable<Document> apply(MongoCollection<Document> collection) {
252246

253247
static class MapDocumentReferenceQuery implements DocumentReferenceQuery {
254248

255-
Document filter;
256-
Document sort;
257-
Map<Object, Document> filterOrderMap;
249+
private final Document filter;
250+
private final Document sort;
251+
private final Map<Object, Document> filterOrderMap;
258252

259253
public MapDocumentReferenceQuery(Document filter, Document sort, Map<Object, Document> filterOrderMap) {
260254

261255
this.filter = filter;
262-
this.filterOrderMap = filterOrderMap;
263256
this.sort = sort;
257+
this.filterOrderMap = filterOrderMap;
264258
}
265259

266260
@Override
@@ -274,47 +268,46 @@ public Bson getSort() {
274268
}
275269

276270
@Override
277-
public Iterable<Document> restoreOrder(Iterable<Document> stream) {
271+
public Iterable<Document> restoreOrder(Iterable<Document> documents) {
278272

279273
Map<String, Object> targetMap = new LinkedHashMap<>();
280-
List<Document> collected = stream instanceof List ? (List<Document>) stream : Streamable.of(stream).toList();
274+
List<Document> collected = documents instanceof List ? (List<Document>) documents
275+
: Streamable.of(documents).toList();
281276

282277
for (Entry<Object, Document> filterMapping : filterOrderMap.entrySet()) {
283278

284-
String key = filterMapping.getKey().toString();
285-
Optional<Document> first = collected.stream().filter(it -> {
286-
287-
boolean found = it.entrySet().containsAll(filterMapping.getValue().entrySet());
288-
return found;
289-
}).findFirst();
279+
Optional<Document> first = collected.stream()
280+
.filter(it -> it.entrySet().containsAll(filterMapping.getValue().entrySet())).findFirst();
290281

291-
targetMap.put(key, first.orElse(null));
282+
targetMap.put(filterMapping.getKey().toString(), first.orElse(null));
292283
}
293284
return Collections.singleton(new Document(targetMap));
294285
}
295286
}
296287

297288
static class ListDocumentReferenceQuery implements DocumentReferenceQuery {
298289

299-
Document filter;
300-
Document sort;
290+
private final Document filter;
291+
private final Document sort;
301292

302293
public ListDocumentReferenceQuery(Document filter, Document sort) {
294+
303295
this.filter = filter;
304296
this.sort = sort;
305297
}
306298

307299
@Override
308-
public Iterable<Document> restoreOrder(Iterable<Document> stream) {
300+
public Iterable<Document> restoreOrder(Iterable<Document> documents) {
309301

310302
if (filter.containsKey("$or")) {
311303
List<Document> ors = filter.get("$or", List.class);
312-
List<Document> target = stream instanceof List ? (List<Document>) stream : Streamable.of(stream).toList();
304+
List<Document> target = documents instanceof List ? (List<Document>) documents
305+
: Streamable.of(documents).toList();
313306
return target.stream().sorted((o1, o2) -> compareAgainstReferenceIndex(ors, o1, o2))
314307
.collect(Collectors.toList());
315308
}
316309

317-
return stream;
310+
return documents;
318311
}
319312

320313
public Document getFilter() {
@@ -340,7 +333,5 @@ int compareAgainstReferenceIndex(List<Document> referenceList, Document document
340333
}
341334
return referenceList.size();
342335
}
343-
344336
}
345-
346337
}

0 commit comments

Comments
 (0)