Skip to content

Commit 83958ba

Browse files
committed
Adapt to ScrollPosition API changes in Spring Data Commons.
Fixes #4377. Related ticket: #2824.
1 parent 3a99d4c commit 83958ba

File tree

5 files changed

+32
-34
lines changed

5 files changed

+32
-34
lines changed

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

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@
2424
import org.bson.BsonNull;
2525
import org.bson.Document;
2626
import org.springframework.data.domain.KeysetScrollPosition;
27-
import org.springframework.data.domain.KeysetScrollPosition.Direction;
2827
import org.springframework.data.domain.ScrollPosition;
28+
import org.springframework.data.domain.ScrollPosition.Direction;
2929
import org.springframework.data.domain.Window;
3030
import org.springframework.data.mongodb.core.EntityOperations.Entity;
3131
import org.springframework.data.mongodb.core.query.Query;
@@ -65,13 +65,13 @@ static <T> Window<T> createWindow(Query query, List<T> result, Class<?> sourceTy
6565

6666
List<T> resultsToUse = director.postPostProcessResults(result, query.getLimit());
6767

68-
IntFunction<KeysetScrollPosition> positionFunction = value -> {
68+
IntFunction<ScrollPosition> positionFunction = value -> {
6969

7070
T last = resultsToUse.get(value);
7171
Entity<T> entity = operations.forEntity(last);
7272

7373
Map<String, Object> keys = entity.extractKeys(sortObject, sourceType);
74-
return KeysetScrollPosition.of(keys);
74+
return ScrollPosition.forward(keys);
7575
};
7676

7777
return Window.from(resultsToUse, positionFunction, hasMoreElements(result, query.getLimit()));
@@ -103,17 +103,17 @@ record KeysetScrollQuery(Document query, Document fields, Document sort) {
103103
*/
104104
static class KeysetScrollDirector {
105105

106-
private static final KeysetScrollDirector forward = new KeysetScrollDirector();
107-
private static final KeysetScrollDirector reverse = new ReverseKeysetScrollDirector();
106+
private static final KeysetScrollDirector FORWARD = new KeysetScrollDirector();
107+
private static final KeysetScrollDirector REVERSE = new ReverseKeysetScrollDirector();
108108

109109
/**
110110
* Factory method to obtain the right {@link KeysetScrollDirector}.
111111
*
112112
* @param direction
113113
* @return
114114
*/
115-
public static KeysetScrollDirector of(KeysetScrollPosition.Direction direction) {
116-
return direction == Direction.Forward ? forward : reverse;
115+
public static KeysetScrollDirector of(ScrollPosition.Direction direction) {
116+
return direction == Direction.FORWARD ? FORWARD : REVERSE;
117117
}
118118

119119
public Document getSortObject(String idPropertyName, Query query) {
@@ -259,7 +259,7 @@ static <T> List<T> getFirst(int count, List<T> list) {
259259
static <T> List<T> getLast(int count, List<T> list) {
260260

261261
if (count > 0 && list.size() > count) {
262-
return list.subList(list.size() - (count), list.size());
262+
return list.subList(list.size() - count, list.size());
263263
}
264264

265265
return list;

spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/MongoTemplateScrollTests.java

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,6 @@
4040
import org.springframework.data.annotation.PersistenceCreator;
4141
import org.springframework.data.auditing.IsNewAwareAuditingHandler;
4242
import org.springframework.data.domain.KeysetScrollPosition;
43-
import org.springframework.data.domain.KeysetScrollPosition.Direction;
44-
import org.springframework.data.domain.OffsetScrollPosition;
4543
import org.springframework.data.domain.ScrollPosition;
4644
import org.springframework.data.domain.Sort;
4745
import org.springframework.data.domain.Window;
@@ -128,7 +126,7 @@ void shouldUseKeysetScrollingWithNestedSort() {
128126

129127
Query q = new Query(where("name").regex("J.*")).with(Sort.by("nested.name", "nested.age", "document.name"))
130128
.limit(2);
131-
q.with(KeysetScrollPosition.initial());
129+
q.with(ScrollPosition.keyset());
132130

133131
Window<WithNestedDocument> window = template.scroll(q, WithNestedDocument.class);
134132

@@ -176,7 +174,7 @@ void shouldAllowReverseSort() {
176174

177175
template.insertAll(Arrays.asList(john20, john40_1, john40_2, jane_20, jane_40, jane_42));
178176
Query q = new Query(where("firstName").regex("J.*")).with(Sort.by("firstName", "age"));
179-
q.with(KeysetScrollPosition.initial()).limit(6);
177+
q.with(ScrollPosition.keyset()).limit(6);
180178

181179
Window<Person> window = template.scroll(q, Person.class);
182180

@@ -185,9 +183,7 @@ void shouldAllowReverseSort() {
185183
assertThat(window).hasSize(6);
186184

187185
KeysetScrollPosition scrollPosition = (KeysetScrollPosition) window.positionAt(window.size() - 2);
188-
KeysetScrollPosition reversePosition = KeysetScrollPosition.of(scrollPosition.getKeys(), Direction.Backward);
189-
190-
window = template.scroll(q.with(reversePosition).limit(2), Person.class);
186+
window = template.scroll(q.with(scrollPosition.backward()).limit(2), Person.class);
191187

192188
assertThat(window).hasSize(2);
193189
assertThat(window).containsOnly(jane_42, john20);
@@ -256,10 +252,10 @@ <T> void scrollThroughResultsWithRenamedField(Class<T> resultType, Function<With
256252
template.insertAll(Arrays.asList(one, two, three));
257253

258254
Query q = new Query(where("value").regex("v.*")).with(Sort.by(Sort.Direction.DESC, "value")).limit(2);
259-
q.with(KeysetScrollPosition.initial());
255+
q.with(ScrollPosition.keyset());
260256

261257
Window<T> window = template.query(WithRenamedField.class).as(resultType).matching(q)
262-
.scroll(KeysetScrollPosition.initial());
258+
.scroll(ScrollPosition.keyset());
263259

264260
assertThat(window.hasNext()).isTrue();
265261
assertThat(window.isLast()).isFalse();
@@ -277,12 +273,12 @@ <T> void scrollThroughResultsWithRenamedField(Class<T> resultType, Function<With
277273

278274
static Stream<Arguments> positions() {
279275

280-
return Stream.of(args(KeysetScrollPosition.initial(), Person.class, Function.identity()), //
281-
args(KeysetScrollPosition.initial(), Document.class, MongoTemplateScrollTests::toDocument), //
282-
args(OffsetScrollPosition.initial(), Person.class, Function.identity()), //
283-
args(OffsetScrollPosition.initial(), PersonDtoProjection.class,
276+
return Stream.of(args(ScrollPosition.keyset(), Person.class, Function.identity()), //
277+
args(ScrollPosition.keyset(), Document.class, MongoTemplateScrollTests::toDocument), //
278+
args(ScrollPosition.offset(), Person.class, Function.identity()), //
279+
args(ScrollPosition.offset(), PersonDtoProjection.class,
284280
MongoTemplateScrollTests::toPersonDtoProjection), //
285-
args(OffsetScrollPosition.initial(), PersonInterfaceProjection.class,
281+
args(ScrollPosition.offset(), PersonInterfaceProjection.class,
286282
MongoTemplateScrollTests::toPersonInterfaceProjection, MongoTemplateScrollTests::compareProxies));
287283
}
288284

spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/ReactiveMongoTemplateScrollTests.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -146,10 +146,10 @@ <T> void scrollThroughResultsWithRenamedField(Class<T> resultType, Function<With
146146
template.insertAll(Arrays.asList(one, two, three)).as(StepVerifier::create).expectNextCount(3).verifyComplete();
147147

148148
Query q = new Query(where("value").regex("v.*")).with(Sort.by(Sort.Direction.DESC, "value")).limit(2);
149-
q.with(KeysetScrollPosition.initial());
149+
q.with(ScrollPosition.keyset());
150150

151151
Window<T> window = template.query(WithRenamedField.class).as(resultType).matching(q)
152-
.scroll(KeysetScrollPosition.initial()).block(Duration.ofSeconds(10));
152+
.scroll(ScrollPosition.keyset()).block(Duration.ofSeconds(10));
153153

154154
assertThat(window.hasNext()).isTrue();
155155
assertThat(window.isLast()).isFalse();
@@ -167,9 +167,9 @@ <T> void scrollThroughResultsWithRenamedField(Class<T> resultType, Function<With
167167

168168
static Stream<Arguments> positions() {
169169

170-
return Stream.of(args(KeysetScrollPosition.initial(), Person.class, Function.identity()), //
171-
args(KeysetScrollPosition.initial(), Document.class, MongoTemplateScrollTests::toDocument), //
172-
args(OffsetScrollPosition.initial(), Person.class, Function.identity()));
170+
return Stream.of(args(ScrollPosition.keyset(), Person.class, Function.identity()), //
171+
args(ScrollPosition.keyset(), Document.class, MongoTemplateScrollTests::toDocument), //
172+
args(ScrollPosition.offset(), Person.class, Function.identity()));
173173
}
174174

175175
static Stream<Arguments> renamedFieldProjectTargets() {

spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/AbstractPersonRepositoryIntegrationTests.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,7 @@ void findsPagedPersons() {
206206
void appliesScrollPositionCorrectly() {
207207

208208
Window<Person> page = repository.findTop2ByLastnameLikeOrderByLastnameAscFirstnameAsc("*a*",
209-
KeysetScrollPosition.initial());
209+
ScrollPosition.keyset());
210210

211211
assertThat(page.isLast()).isFalse();
212212
assertThat(page.size()).isEqualTo(2);
@@ -957,7 +957,7 @@ void shouldFindPersonsWhenUsingQueryDslPerdicatedOnIdProperty() {
957957
void shouldScrollPersonsWhenUsingQueryDslPerdicatedOnIdProperty() {
958958

959959
Window<Person> scroll = repository.findBy(person.id.in(asList(dave.id, carter.id, boyd.id)), //
960-
q -> q.limit(2).sortBy(Sort.by("firstname")).scroll(KeysetScrollPosition.initial()));
960+
q -> q.limit(2).sortBy(Sort.by("firstname")).scroll(ScrollPosition.keyset()));
961961

962962
assertThat(scroll).containsExactly(boyd, carter);
963963

@@ -1187,7 +1187,7 @@ void scrollByExampleShouldReturnCorrectResult() {
11871187

11881188
Window<Person> result = repository.findBy(
11891189
Example.of(sample, ExampleMatcher.matching().withMatcher("lastname", GenericPropertyMatcher::startsWith)),
1190-
q -> q.limit(2).sortBy(Sort.by("firstname")).scroll(KeysetScrollPosition.initial()));
1190+
q -> q.limit(2).sortBy(Sort.by("firstname")).scroll(ScrollPosition.keyset()));
11911191

11921192
assertThat(result).containsOnly(dave, leroi);
11931193
assertThat(result.hasNext()).isTrue();

spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/ReactiveMongoRepositoryTests.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,12 @@
1616
package org.springframework.data.mongodb.repository;
1717

1818
import static org.assertj.core.api.Assertions.*;
19+
import static org.assertj.core.api.Assertions.assertThat;
20+
import static org.junit.Assert.assertThat;
1921
import static org.springframework.data.domain.Sort.Direction.*;
2022
import static org.springframework.data.mongodb.core.query.Criteria.*;
2123
import static org.springframework.data.mongodb.core.query.Query.*;
2224
import static org.springframework.data.mongodb.test.util.Assertions.assertThat;
23-
import static org.springframework.data.mongodb.test.util.DirtiesStateExtension.*;
2425

2526
import lombok.Data;
2627
import lombok.NoArgsConstructor;
@@ -47,7 +48,6 @@
4748
import org.springframework.context.annotation.Bean;
4849
import org.springframework.context.annotation.Configuration;
4950
import org.springframework.dao.IncorrectResultSizeDataAccessException;
50-
import org.springframework.data.domain.KeysetScrollPosition;
5151
import org.springframework.data.domain.PageRequest;
5252
import org.springframework.data.domain.Pageable;
5353
import org.springframework.data.domain.ScrollPosition;
@@ -69,6 +69,8 @@
6969
import org.springframework.data.mongodb.repository.support.ReactiveMongoRepositoryFactory;
7070
import org.springframework.data.mongodb.repository.support.SimpleReactiveMongoRepository;
7171
import org.springframework.data.mongodb.test.util.DirtiesStateExtension;
72+
import org.springframework.data.mongodb.test.util.DirtiesStateExtension.DirtiesState;
73+
import org.springframework.data.mongodb.test.util.DirtiesStateExtension.ProvidesState;
7274
import org.springframework.data.mongodb.test.util.EnableIfMongoServerVersion;
7375
import org.springframework.data.mongodb.test.util.ReactiveMongoClientClosingTestConfiguration;
7476
import org.springframework.data.querydsl.ReactiveQuerydslPredicateExecutor;
@@ -294,7 +296,7 @@ void shouldUseTailableCursorWithDtoProjection() {
294296
void appliesScrollingCorrectly() {
295297

296298
Window<Person> scroll = repository
297-
.findTop2ByLastnameLikeOrderByFirstnameAscLastnameAsc("*", KeysetScrollPosition.initial()).block();
299+
.findTop2ByLastnameLikeOrderByFirstnameAscLastnameAsc("*", ScrollPosition.keyset()).block();
298300

299301
assertThat(scroll).hasSize(2);
300302
assertThat(scroll).containsSequence(alicia, boyd);
@@ -476,7 +478,7 @@ void shouldScrollWithId() {
476478

477479
List<Window<Person>> capture = new ArrayList<>();
478480
repository.findBy(person.id.in(Arrays.asList(dave.id, carter.id, boyd.id)), //
479-
q -> q.limit(2).sortBy(Sort.by("firstname")).scroll(KeysetScrollPosition.initial())) //
481+
q -> q.limit(2).sortBy(Sort.by("firstname")).scroll(ScrollPosition.keyset())) //
480482
.as(StepVerifier::create) //
481483
.recordWith(() -> capture).assertNext(actual -> {
482484
assertThat(actual).hasSize(2).containsExactly(boyd, carter);

0 commit comments

Comments
 (0)