diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/ScrollUtils.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/ScrollUtils.java index db910e7fb..d568d6e5d 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/ScrollUtils.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/ScrollUtils.java @@ -24,8 +24,8 @@ import java.util.function.IntFunction; import org.bson.BsonNull; import org.bson.Document; import org.springframework.data.domain.KeysetScrollPosition; -import org.springframework.data.domain.KeysetScrollPosition.Direction; import org.springframework.data.domain.ScrollPosition; +import org.springframework.data.domain.ScrollPosition.Direction; import org.springframework.data.domain.Window; import org.springframework.data.mongodb.core.EntityOperations.Entity; import org.springframework.data.mongodb.core.query.Query; @@ -65,13 +65,13 @@ class ScrollUtils { List resultsToUse = director.postPostProcessResults(result, query.getLimit()); - IntFunction positionFunction = value -> { + IntFunction positionFunction = value -> { T last = resultsToUse.get(value); Entity entity = operations.forEntity(last); Map keys = entity.extractKeys(sortObject, sourceType); - return KeysetScrollPosition.of(keys); + return ScrollPosition.forward(keys); }; return Window.from(resultsToUse, positionFunction, hasMoreElements(result, query.getLimit())); @@ -103,8 +103,8 @@ class ScrollUtils { */ static class KeysetScrollDirector { - private static final KeysetScrollDirector forward = new KeysetScrollDirector(); - private static final KeysetScrollDirector reverse = new ReverseKeysetScrollDirector(); + private static final KeysetScrollDirector FORWARD = new KeysetScrollDirector(); + private static final KeysetScrollDirector REVERSE = new ReverseKeysetScrollDirector(); /** * Factory method to obtain the right {@link KeysetScrollDirector}. @@ -112,8 +112,8 @@ class ScrollUtils { * @param direction * @return */ - public static KeysetScrollDirector of(KeysetScrollPosition.Direction direction) { - return direction == Direction.Forward ? forward : reverse; + public static KeysetScrollDirector of(ScrollPosition.Direction direction) { + return direction == Direction.FORWARD ? FORWARD : REVERSE; } public Document getSortObject(String idPropertyName, Query query) { @@ -259,7 +259,7 @@ class ScrollUtils { static List getLast(int count, List list) { if (count > 0 && list.size() > count) { - return list.subList(list.size() - (count), list.size()); + return list.subList(list.size() - count, list.size()); } return list; diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/MongoTemplateScrollTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/MongoTemplateScrollTests.java index 8374f6ab4..fadefc359 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/MongoTemplateScrollTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/MongoTemplateScrollTests.java @@ -40,8 +40,6 @@ import org.springframework.context.support.GenericApplicationContext; import org.springframework.data.annotation.PersistenceCreator; import org.springframework.data.auditing.IsNewAwareAuditingHandler; import org.springframework.data.domain.KeysetScrollPosition; -import org.springframework.data.domain.KeysetScrollPosition.Direction; -import org.springframework.data.domain.OffsetScrollPosition; import org.springframework.data.domain.ScrollPosition; import org.springframework.data.domain.Sort; import org.springframework.data.domain.Window; @@ -128,7 +126,7 @@ class MongoTemplateScrollTests { Query q = new Query(where("name").regex("J.*")).with(Sort.by("nested.name", "nested.age", "document.name")) .limit(2); - q.with(KeysetScrollPosition.initial()); + q.with(ScrollPosition.keyset()); Window window = template.scroll(q, WithNestedDocument.class); @@ -176,7 +174,7 @@ class MongoTemplateScrollTests { template.insertAll(Arrays.asList(john20, john40_1, john40_2, jane_20, jane_40, jane_42)); Query q = new Query(where("firstName").regex("J.*")).with(Sort.by("firstName", "age")); - q.with(KeysetScrollPosition.initial()).limit(6); + q.with(ScrollPosition.keyset()).limit(6); Window window = template.scroll(q, Person.class); @@ -185,9 +183,7 @@ class MongoTemplateScrollTests { assertThat(window).hasSize(6); KeysetScrollPosition scrollPosition = (KeysetScrollPosition) window.positionAt(window.size() - 2); - KeysetScrollPosition reversePosition = KeysetScrollPosition.of(scrollPosition.getKeys(), Direction.Backward); - - window = template.scroll(q.with(reversePosition).limit(2), Person.class); + window = template.scroll(q.with(scrollPosition.backward()).limit(2), Person.class); assertThat(window).hasSize(2); assertThat(window).containsOnly(jane_42, john20); @@ -256,10 +252,10 @@ class MongoTemplateScrollTests { template.insertAll(Arrays.asList(one, two, three)); Query q = new Query(where("value").regex("v.*")).with(Sort.by(Sort.Direction.DESC, "value")).limit(2); - q.with(KeysetScrollPosition.initial()); + q.with(ScrollPosition.keyset()); Window window = template.query(WithRenamedField.class).as(resultType).matching(q) - .scroll(KeysetScrollPosition.initial()); + .scroll(ScrollPosition.keyset()); assertThat(window.hasNext()).isTrue(); assertThat(window.isLast()).isFalse(); @@ -277,12 +273,12 @@ class MongoTemplateScrollTests { static Stream positions() { - return Stream.of(args(KeysetScrollPosition.initial(), Person.class, Function.identity()), // - args(KeysetScrollPosition.initial(), Document.class, MongoTemplateScrollTests::toDocument), // - args(OffsetScrollPosition.initial(), Person.class, Function.identity()), // - args(OffsetScrollPosition.initial(), PersonDtoProjection.class, + return Stream.of(args(ScrollPosition.keyset(), Person.class, Function.identity()), // + args(ScrollPosition.keyset(), Document.class, MongoTemplateScrollTests::toDocument), // + args(ScrollPosition.offset(), Person.class, Function.identity()), // + args(ScrollPosition.offset(), PersonDtoProjection.class, MongoTemplateScrollTests::toPersonDtoProjection), // - args(OffsetScrollPosition.initial(), PersonInterfaceProjection.class, + args(ScrollPosition.offset(), PersonInterfaceProjection.class, MongoTemplateScrollTests::toPersonInterfaceProjection, MongoTemplateScrollTests::compareProxies)); } diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/ReactiveMongoTemplateScrollTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/ReactiveMongoTemplateScrollTests.java index 35f67782f..70fe65c8e 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/ReactiveMongoTemplateScrollTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/ReactiveMongoTemplateScrollTests.java @@ -146,10 +146,10 @@ class ReactiveMongoTemplateScrollTests { template.insertAll(Arrays.asList(one, two, three)).as(StepVerifier::create).expectNextCount(3).verifyComplete(); Query q = new Query(where("value").regex("v.*")).with(Sort.by(Sort.Direction.DESC, "value")).limit(2); - q.with(KeysetScrollPosition.initial()); + q.with(ScrollPosition.keyset()); Window window = template.query(WithRenamedField.class).as(resultType).matching(q) - .scroll(KeysetScrollPosition.initial()).block(Duration.ofSeconds(10)); + .scroll(ScrollPosition.keyset()).block(Duration.ofSeconds(10)); assertThat(window.hasNext()).isTrue(); assertThat(window.isLast()).isFalse(); @@ -167,9 +167,9 @@ class ReactiveMongoTemplateScrollTests { static Stream positions() { - return Stream.of(args(KeysetScrollPosition.initial(), Person.class, Function.identity()), // - args(KeysetScrollPosition.initial(), Document.class, MongoTemplateScrollTests::toDocument), // - args(OffsetScrollPosition.initial(), Person.class, Function.identity())); + return Stream.of(args(ScrollPosition.keyset(), Person.class, Function.identity()), // + args(ScrollPosition.keyset(), Document.class, MongoTemplateScrollTests::toDocument), // + args(ScrollPosition.offset(), Person.class, Function.identity())); } static Stream renamedFieldProjectTargets() { diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/AbstractPersonRepositoryIntegrationTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/AbstractPersonRepositoryIntegrationTests.java index 6a1e35d0b..646a268e0 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/AbstractPersonRepositoryIntegrationTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/AbstractPersonRepositoryIntegrationTests.java @@ -206,7 +206,7 @@ public abstract class AbstractPersonRepositoryIntegrationTests implements Dirtie void appliesScrollPositionCorrectly() { Window page = repository.findTop2ByLastnameLikeOrderByLastnameAscFirstnameAsc("*a*", - KeysetScrollPosition.initial()); + ScrollPosition.keyset()); assertThat(page.isLast()).isFalse(); assertThat(page.size()).isEqualTo(2); @@ -957,7 +957,7 @@ public abstract class AbstractPersonRepositoryIntegrationTests implements Dirtie void shouldScrollPersonsWhenUsingQueryDslPerdicatedOnIdProperty() { Window scroll = repository.findBy(person.id.in(asList(dave.id, carter.id, boyd.id)), // - q -> q.limit(2).sortBy(Sort.by("firstname")).scroll(KeysetScrollPosition.initial())); + q -> q.limit(2).sortBy(Sort.by("firstname")).scroll(ScrollPosition.keyset())); assertThat(scroll).containsExactly(boyd, carter); @@ -1187,7 +1187,7 @@ public abstract class AbstractPersonRepositoryIntegrationTests implements Dirtie Window result = repository.findBy( Example.of(sample, ExampleMatcher.matching().withMatcher("lastname", GenericPropertyMatcher::startsWith)), - q -> q.limit(2).sortBy(Sort.by("firstname")).scroll(KeysetScrollPosition.initial())); + q -> q.limit(2).sortBy(Sort.by("firstname")).scroll(ScrollPosition.keyset())); assertThat(result).containsOnly(dave, leroi); assertThat(result.hasNext()).isTrue(); diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/ReactiveMongoRepositoryTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/ReactiveMongoRepositoryTests.java index 5d54eda62..769e26efe 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/ReactiveMongoRepositoryTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/ReactiveMongoRepositoryTests.java @@ -16,11 +16,12 @@ package org.springframework.data.mongodb.repository; import static org.assertj.core.api.Assertions.*; +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.Assert.assertThat; import static org.springframework.data.domain.Sort.Direction.*; import static org.springframework.data.mongodb.core.query.Criteria.*; import static org.springframework.data.mongodb.core.query.Query.*; import static org.springframework.data.mongodb.test.util.Assertions.assertThat; -import static org.springframework.data.mongodb.test.util.DirtiesStateExtension.*; import lombok.Data; import lombok.NoArgsConstructor; @@ -47,7 +48,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.dao.IncorrectResultSizeDataAccessException; -import org.springframework.data.domain.KeysetScrollPosition; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.ScrollPosition; @@ -69,6 +69,8 @@ import org.springframework.data.mongodb.repository.Person.Sex; import org.springframework.data.mongodb.repository.support.ReactiveMongoRepositoryFactory; import org.springframework.data.mongodb.repository.support.SimpleReactiveMongoRepository; import org.springframework.data.mongodb.test.util.DirtiesStateExtension; +import org.springframework.data.mongodb.test.util.DirtiesStateExtension.DirtiesState; +import org.springframework.data.mongodb.test.util.DirtiesStateExtension.ProvidesState; import org.springframework.data.mongodb.test.util.EnableIfMongoServerVersion; import org.springframework.data.mongodb.test.util.ReactiveMongoClientClosingTestConfiguration; import org.springframework.data.querydsl.ReactiveQuerydslPredicateExecutor; @@ -294,7 +296,7 @@ class ReactiveMongoRepositoryTests implements DirtiesStateExtension.StateFunctio void appliesScrollingCorrectly() { Window scroll = repository - .findTop2ByLastnameLikeOrderByFirstnameAscLastnameAsc("*", KeysetScrollPosition.initial()).block(); + .findTop2ByLastnameLikeOrderByFirstnameAscLastnameAsc("*", ScrollPosition.keyset()).block(); assertThat(scroll).hasSize(2); assertThat(scroll).containsSequence(alicia, boyd); @@ -476,7 +478,7 @@ class ReactiveMongoRepositoryTests implements DirtiesStateExtension.StateFunctio List> capture = new ArrayList<>(); repository.findBy(person.id.in(Arrays.asList(dave.id, carter.id, boyd.id)), // - q -> q.limit(2).sortBy(Sort.by("firstname")).scroll(KeysetScrollPosition.initial())) // + q -> q.limit(2).sortBy(Sort.by("firstname")).scroll(ScrollPosition.keyset())) // .as(StepVerifier::create) // .recordWith(() -> capture).assertNext(actual -> { assertThat(actual).hasSize(2).containsExactly(boyd, carter);