diff --git a/api/src/main/java/jakarta/data/Limit.java b/api/src/main/java/jakarta/data/Limit.java index 39e9fafbf..030e836d5 100644 --- a/api/src/main/java/jakarta/data/Limit.java +++ b/api/src/main/java/jakarta/data/Limit.java @@ -104,15 +104,35 @@ public int maxResults() { // Override to provide method documentation: /** - *

Offset at which to start when returning query results. - * The first query result is position {@code 1}.

+ *

The position at which to start when returning query results.

+ *

The first query result is at position one. If the start position + * is greater than one, some results at the beginning of the result set + * are skipped.

* - * @return offset of the first result. + * @return position of the first result. + * + * @apiNote Positions are indexed from one; + * {@linkplain #startOffset offsets} are indexed from zero. */ public long startAt() { return startAt; } + /** + *

The offset at which to start when returning query results.

+ *

The first query result is at offset zero. If the start offset + * is strictly positive, some results at the beginning of the result + * set are skipped.

+ * + * @return offset of the first result. + * + * @apiNote Offsets are indexed from zero; + * {@linkplain #startAt positions} are indexed from one. + */ + public long startOffset() { + return startAt() - 1; + } + /** *

Create a limit that caps the number of results at the * specified maximum, starting from the first result.

@@ -126,6 +146,36 @@ public static Limit of(int maxResults) { return new Limit(maxResults, DEFAULT_START_AT); } + /** + *

Specify the position at which to start returning query results.

+ *

The first query result is at position one. If the start position + * is greater than one, some results at the beginning of the result set + * are skipped.

+ * + * @param startAt position of the first result. + * + * @apiNote Positions are indexed from one; + * {@linkplain #withStartOffset offsets} are indexed from zero. + */ + public Limit withStartAt(int startAt) { + return new Limit(maxResults, startAt); + } + + /** + *

Specify the offset at which to start returning query results.

+ *

The first query result is at offset zero. If the start offset + * is strictly positive, some results at the beginning of the result + * set are skipped.

+ * + * @param startOffset offset of the first result. + * + * @apiNote Offsets are indexed from zero; + * {@linkplain #withStartAt positions} are indexed from one. + */ + public Limit withStartOffset(long startOffset) { + return new Limit(maxResults, startOffset+1); + } + /** *

Create a limit that restricts the results to a range, * beginning with the {@code startAt} position and ending after the diff --git a/api/src/main/java/jakarta/data/page/CursoredPage.java b/api/src/main/java/jakarta/data/page/CursoredPage.java index 3004ba63d..9fa808310 100644 --- a/api/src/main/java/jakarta/data/page/CursoredPage.java +++ b/api/src/main/java/jakarta/data/page/CursoredPage.java @@ -93,7 +93,7 @@ *

{@code
  * Employee emp = ...
  * PageRequest pageRequest =
- *         PageRequest.ofPage(5)
+ *         PageRequest.ofSize(10).atPageNumber(5)
  *                    .size(50)
  *                    .afterCursor(Cursor.forKey(emp.lastName, emp.firstName, emp.id));
  * page = employees.withHoursOver(40, pageRequest);
diff --git a/api/src/main/java/jakarta/data/page/PageRequest.java b/api/src/main/java/jakarta/data/page/PageRequest.java
index 10fe0313a..23fec3732 100644
--- a/api/src/main/java/jakarta/data/page/PageRequest.java
+++ b/api/src/main/java/jakarta/data/page/PageRequest.java
@@ -84,7 +84,10 @@ public interface PageRequest {
      *         {@code null}.
      * @throws IllegalArgumentException when the page number is negative or
      *                                  zero.
+     * @deprecated Use {@link #ofPage(long, int, boolean)}
+     *             or {@link #ofSize} and {@link #atPageNumber}.
      */
+    @Deprecated(since = "1.1", forRemoval = true)
     static PageRequest ofPage(long pageNumber) {
         return new Pagination(pageNumber, 10, Mode.OFFSET, null, true);
     }
@@ -223,11 +226,40 @@ static PageRequest beforeCursor(Cursor cursor, long pageNumber, int maxPageSize,
     Mode mode();
 
     /**
-     * Returns the page to be returned.
+     * Returns the page number of the page to be returned.
      *
      * @return the page to be returned.
+     * @since 1.1
+     *
+     * @apiNote Page numbers are indexed from one;
+     *          page {@linkplain #pageOffset offsets} are indexed from zero.
+     */
+    long pageNumber();
+
+    /**
+     * Returns the page offset of the page to be returned.
+     *
+     * @return the page to be returned.
+     * @since 1.1
+     *
+     * @apiNote Page offsets are indexed from zero;
+     *          page {@linkplain #pageNumber numbers} are indexed from one.
+     */
+    default long pageOffset() {
+        return pageNumber() - 1;
+    }
+
+    /**
+     * Returns the page number of the page to be returned.
+     *
+     * @return the page to be returned.
+     *
+     * @deprecated Use {@link #pageNumber}
      */
-    long page();
+    @Deprecated(since = "1.1", forRemoval = true)
+    default long page() {
+        return pageNumber();
+    }
 
     /**
      * Returns the requested size of each page
@@ -266,8 +298,27 @@ static PageRequest beforeCursor(Cursor cursor, long pageNumber, int maxPageSize,
      * @return a new instance of {@code PageRequest}. This method never returns
      * {@code null}.
      * @since 1.1
+     *
+     * @apiNote Page numbers are indexed from one;
+     *          page {@linkplain #atPageOffset offsets} are indexed from zero.
+     */
+    PageRequest atPageNumber(long pageNumber);
+
+    /**
+     * 

Creates a new page request with the same pagination information, + * but with the specified page offset.

+ * + * @param pageOffset the page offset. + * @return a new instance of {@code PageRequest}. This method never returns + * {@code null}. + * @since 1.1 + * + * @apiNote Page offsets are indexed from zero; + * page {@linkplain #atPageNumber numbers} are indexed from one. */ - PageRequest page(long pageNumber); + default PageRequest atPageOffset(long pageOffset) { + return atPageNumber(pageOffset + 1); + } /** *

Creates a new page request with the same pagination information, diff --git a/api/src/main/java/jakarta/data/page/Pagination.java b/api/src/main/java/jakarta/data/page/Pagination.java index 80b953641..d47a4cae2 100644 --- a/api/src/main/java/jakarta/data/page/Pagination.java +++ b/api/src/main/java/jakarta/data/page/Pagination.java @@ -24,12 +24,12 @@ /** * Built-in implementation of PageRequest. */ -record Pagination(long page, int size, Mode mode, Cursor type, +record Pagination(long pageNumber, int size, Mode mode, Cursor type, boolean requestTotal) implements PageRequest { Pagination { - if (page < 1) { - throw new IllegalArgumentException("pageNumber: " + page); + if (pageNumber < 1) { + throw new IllegalArgumentException("pageNumber: " + pageNumber); } else if (size < 1) { throw new IllegalArgumentException("maxPageSize: " + size); } @@ -42,22 +42,22 @@ record Pagination(long page, int size, Mode mode, Cursor type, @Override public PageRequest withoutTotal() { - return new Pagination(page, size, mode, type, false); + return new Pagination(pageNumber, size, mode, type, false); } @Override public PageRequest withTotal() { - return new Pagination(page, size, mode, type, true); + return new Pagination(pageNumber, size, mode, type, true); } @Override public PageRequest afterCursor(Cursor cursor) { - return new Pagination(page, size, Mode.CURSOR_NEXT, cursor, requestTotal); + return new Pagination(pageNumber, size, Mode.CURSOR_NEXT, cursor, requestTotal); } @Override public PageRequest beforeCursor(Cursor cursor) { - return new Pagination(page, size, Mode.CURSOR_PREVIOUS, cursor, requestTotal); + return new Pagination(pageNumber, size, Mode.CURSOR_PREVIOUS, cursor, requestTotal); } @Override @@ -68,7 +68,7 @@ public Optional cursor() { @Override public String toString() { StringBuilder s = new StringBuilder(mode == Mode.OFFSET ? 100 : 150) - .append("PageRequest{page=").append(page) + .append("PageRequest{pageNumber=").append(pageNumber) .append(", size=").append(size) .append(", mode=").append(mode); if (type != null) { @@ -79,11 +79,11 @@ public String toString() { @Override public PageRequest size(int maxPageSize) { - return new Pagination(page, maxPageSize, mode, type, requestTotal); + return new Pagination(pageNumber, maxPageSize, mode, type, requestTotal); } @Override - public PageRequest page(long pageNumber) { + public PageRequest atPageNumber(long pageNumber) { return new Pagination(pageNumber, size, mode, type, requestTotal); } diff --git a/api/src/main/java/jakarta/data/page/impl/CursoredPageRecord.java b/api/src/main/java/jakarta/data/page/impl/CursoredPageRecord.java index e13ea0420..57ba2e293 100644 --- a/api/src/main/java/jakarta/data/page/impl/CursoredPageRecord.java +++ b/api/src/main/java/jakarta/data/page/impl/CursoredPageRecord.java @@ -82,12 +82,12 @@ public CursoredPageRecord(List content, this(content, cursors, totalElements, pageRequest, lastPage ? null : PageRequest.afterCursor( cursors.get(cursors.size() - 1), - pageRequest.page() + 1, + pageRequest.pageNumber() + 1, pageRequest.size(), pageRequest.requestTotal()), firstPage ? null : PageRequest.beforeCursor( cursors.get(0), - pageRequest.page() == 1 ? 1 : pageRequest.page() - 1, + pageRequest.pageNumber() == 1 ? 1 : pageRequest.pageNumber() - 1, pageRequest.size(), pageRequest.requestTotal())); } diff --git a/api/src/main/java/jakarta/data/page/impl/PageRecord.java b/api/src/main/java/jakarta/data/page/impl/PageRecord.java index 73e2688f0..ab18de40d 100644 --- a/api/src/main/java/jakarta/data/page/impl/PageRecord.java +++ b/api/src/main/java/jakarta/data/page/impl/PageRecord.java @@ -59,7 +59,7 @@ public PageRecord(PageRequest pageRequest, * as {@code true} if the page {@code content} is a full page of results and * the {@code totalElements} is either unavailable (indicated by a negative * value) or it exceeds the current - * {@linkplain PageRequest#page() page number} multiplied by the + * {@linkplain PageRequest#pageNumber() page number} multiplied by the * {@link PageRequest#size() size} of a full page. * * @param pageRequest The {@link PageRequest page request} for which this @@ -74,7 +74,7 @@ public PageRecord(PageRequest pageRequest, List content, long totalElements) this(pageRequest, content, totalElements, content.size() == pageRequest.size() && (totalElements < 0 - || totalElements > pageRequest.size() * pageRequest.page())); + || totalElements > pageRequest.size() * pageRequest.pageNumber())); } @Override @@ -98,14 +98,14 @@ public PageRequest nextPageRequest() { throw new NoSuchElementException(); } - return PageRequest.ofPage(pageRequest.page() + 1, + return PageRequest.ofPage(pageRequest.pageNumber() + 1, pageRequest.size(), pageRequest.requestTotal()); } @Override public boolean hasPrevious() { - return pageRequest.page() > 1; + return pageRequest.pageNumber() > 1; } @Override @@ -114,7 +114,7 @@ public PageRequest previousPageRequest() { throw new NoSuchElementException(); } - return PageRequest.ofPage(pageRequest.page() - 1, + return PageRequest.ofPage(pageRequest.pageNumber() - 1, pageRequest.size(), pageRequest.requestTotal()); } diff --git a/api/src/test/java/jakarta/data/page/PageRequestCursorTest.java b/api/src/test/java/jakarta/data/page/PageRequestCursorTest.java index d39b89b9e..a102d6613 100644 --- a/api/src/test/java/jakarta/data/page/PageRequestCursorTest.java +++ b/api/src/test/java/jakarta/data/page/PageRequestCursorTest.java @@ -36,7 +36,7 @@ void shouldCreatePageRequestAfterKeys() { assertSoftly(softly -> { softly.assertThat(pageRequest.size()).isEqualTo(20); - softly.assertThat(pageRequest.page()).isEqualTo(1L); + softly.assertThat(pageRequest.pageNumber()).isEqualTo(1L); softly.assertThat(pageRequest.requestTotal()).isEqualTo(false); softly.assertThat(pageRequest.mode()).isEqualTo(PageRequest.Mode.CURSOR_NEXT); softly.assertThat(pageRequest.cursor()).get().extracting(PageRequest.Cursor::size).isEqualTo(3); @@ -54,7 +54,7 @@ void shouldCreatePageRequestAfterCursor() { assertSoftly(softly -> { softly.assertThat(pageRequest.size()).isEqualTo(35); - softly.assertThat(pageRequest.page()).isEqualTo(1L); + softly.assertThat(pageRequest.pageNumber()).isEqualTo(1L); softly.assertThat(pageRequest.mode()).isEqualTo(PageRequest.Mode.CURSOR_NEXT); softly.assertThat(pageRequest.cursor()).get().extracting(PageRequest.Cursor::size).isEqualTo(2); softly.assertThat(pageRequest.cursor()).get().extracting(c -> c.get(0)).isEqualTo("me"); @@ -70,7 +70,7 @@ void shouldCreatePageRequestBeforeKey() { assertSoftly(softly -> { softly.assertThat(pageRequest.size()).isEqualTo(30); - softly.assertThat(pageRequest.page()).isEqualTo(10L); + softly.assertThat(pageRequest.pageNumber()).isEqualTo(10L); softly.assertThat(pageRequest.requestTotal()).isEqualTo(false); softly.assertThat(pageRequest.mode()).isEqualTo(PageRequest.Mode.CURSOR_PREVIOUS); softly.assertThat(pageRequest.cursor()).get().extracting(PageRequest.Cursor::size).isEqualTo(2); @@ -83,11 +83,11 @@ void shouldCreatePageRequestBeforeKey() { @DisplayName("Should include key values in previous PageRequest from Cursor") void shouldCreatePageRequestBeforeKeysetCursor() { PageRequest.Cursor cursor = new PageRequestCursor(900L, 300, "testing", 120, 'T'); - PageRequest pageRequest = PageRequest.ofPage(8).beforeCursor(cursor); + PageRequest pageRequest = PageRequest.ofSize(10).atPageNumber(8).beforeCursor(cursor); assertSoftly(softly -> { softly.assertThat(pageRequest.size()).isEqualTo(10); - softly.assertThat(pageRequest.page()).isEqualTo(8L); + softly.assertThat(pageRequest.pageNumber()).isEqualTo(8L); softly.assertThat(pageRequest.mode()).isEqualTo(PageRequest.Mode.CURSOR_PREVIOUS); softly.assertThat(pageRequest.cursor()).get().extracting(PageRequest.Cursor::size).isEqualTo(5); softly.assertThat(pageRequest.cursor()).get().extracting(c -> c.get(0)).isEqualTo(900L); @@ -130,10 +130,10 @@ void shouldPageRequestDisplayAsString() { assertSoftly(softly -> { softly.assertThat(afterKeySet.toString()) - .isEqualTo("PageRequest{page=1, size=200, mode=CURSOR_NEXT, cursor size=2}"); + .isEqualTo("PageRequest{pageNumber=1, size=200, mode=CURSOR_NEXT, cursor size=2}"); softly.assertThat(beforeKeySet.toString()) - .isEqualTo("PageRequest{page=1, size=100, mode=CURSOR_PREVIOUS, cursor size=2}"); + .isEqualTo("PageRequest{pageNumber=1, size=100, mode=CURSOR_PREVIOUS, cursor size=2}"); }); } @@ -144,7 +144,7 @@ void shouldBeEqualWithSameKeyValues() { PageRequest pageRequest25P1S0A1 = PageRequest.ofSize(25).afterCursor(PageRequest.Cursor.forKey("keyval1", '2', 3)); PageRequest pageRequest25P1S0B1 = PageRequest.ofSize(25).beforeCursor(PageRequest.Cursor.forKey("keyval1", '2', 3)); PageRequest pageRequest25P1S0A1Match = PageRequest.ofSize(25).afterCursor(new PageRequestCursor("keyval1", '2', 3)); - PageRequest pageRequest25P2S0A1 = PageRequest.ofPage(2).size(25).afterCursor(new PageRequestCursor("keyval1", '2', 3)); + PageRequest pageRequest25P2S0A1 = PageRequest.ofSize(10).atPageNumber(2).size(25).afterCursor(new PageRequestCursor("keyval1", '2', 3)); PageRequest pageRequest25P1S0A2 = PageRequest.ofSize(25).afterCursor(PageRequest.Cursor.forKey("keyval2", '2', 3)); PageRequest.Cursor cursor1 = new PageRequestCursor("keyval1", '2', 3); @@ -201,7 +201,7 @@ void shouldRaiseErrorForMissingKeysetValues() { @Test @DisplayName("Cursor should be replaced on new instance of PageRequest") void shouldReplaceCursor() { - PageRequest p1 = PageRequest.ofPage(12).size(30).afterCursor(PageRequest.Cursor.forKey("last1", "fname1", 100)); + PageRequest p1 = PageRequest.ofSize(10).atPageNumber(12).size(30).afterCursor(PageRequest.Cursor.forKey("last1", "fname1", 100)); PageRequest p2 = p1.beforeCursor(PageRequest.Cursor.forKey("lname2", "fname2", 200)); assertSoftly(softly -> { @@ -215,8 +215,8 @@ void shouldReplaceCursor() { softly.assertThat(p2.cursor()).get().extracting(c -> c.get(1)).isEqualTo("fname2"); softly.assertThat(p2.cursor()).get().extracting(c -> c.get(2)).isEqualTo(200); - softly.assertThat(p1.page()).isEqualTo(12L); - softly.assertThat(p2.page()).isEqualTo(12L); + softly.assertThat(p1.pageNumber()).isEqualTo(12L); + softly.assertThat(p2.pageNumber()).isEqualTo(12L); softly.assertThat(p1.size()).isEqualTo(30); softly.assertThat(p2.size()).isEqualTo(30); }); diff --git a/api/src/test/java/jakarta/data/page/PageRequestTest.java b/api/src/test/java/jakarta/data/page/PageRequestTest.java index 59c5bcf4c..9ddeeb4c3 100644 --- a/api/src/test/java/jakarta/data/page/PageRequestTest.java +++ b/api/src/test/java/jakarta/data/page/PageRequestTest.java @@ -28,10 +28,10 @@ class PageRequestTest { @Test @DisplayName("Should correctly paginate") void shouldCreatePageRequest() { - PageRequest pageRequest = PageRequest.ofPage(2).size(6); + PageRequest pageRequest = PageRequest.ofSize(10).atPageNumber(2).size(6); assertSoftly(softly -> { - softly.assertThat(pageRequest.page()).isEqualTo(2L); + softly.assertThat(pageRequest.pageNumber()).isEqualTo(2L); softly.assertThat(pageRequest.size()).isEqualTo(6); }); } @@ -42,7 +42,7 @@ void shouldCreatePageRequestWithSize() { PageRequest pageRequest = PageRequest.ofSize(50); assertSoftly(softly -> { - softly.assertThat(pageRequest.page()).isEqualTo(1L); + softly.assertThat(pageRequest.pageNumber()).isEqualTo(1L); softly.assertThat(pageRequest.size()).isEqualTo(50); }); } @@ -50,10 +50,10 @@ void shouldCreatePageRequestWithSize() { @Test @DisplayName("Should create a new PageRequest at the given page with a default size of 10") void shouldCreatePage() { - PageRequest pageRequest = PageRequest.ofPage(5); + PageRequest pageRequest = PageRequest.ofSize(10).atPageNumber(5); assertSoftly(softly -> { - softly.assertThat(pageRequest.page()).isEqualTo(5L); + softly.assertThat(pageRequest.pageNumber()).isEqualTo(5L); softly.assertThat(pageRequest.size()).isEqualTo(10); }); } @@ -63,28 +63,28 @@ void shouldCreatePage() { void shouldPageRequestDisplayAsString() { assertSoftly(softly -> { softly.assertThat(PageRequest.ofSize(60).toString()) - .isEqualTo("PageRequest{page=1, size=60, mode=OFFSET}"); + .isEqualTo("PageRequest{pageNumber=1, size=60, mode=OFFSET}"); softly.assertThat(PageRequest.ofSize(80).toString()) - .isEqualTo("PageRequest{page=1, size=80, mode=OFFSET}"); + .isEqualTo("PageRequest{pageNumber=1, size=80, mode=OFFSET}"); }); } @Test @DisplayName("The requestTotal configuration must be preserved when adding subsequent configuration.") void shouldRequestTotalConfigBePreserved() { - PageRequest pageRequest1 = PageRequest.ofPage(1).withTotal().size(70); + PageRequest pageRequest1 = PageRequest.ofSize(10).atPageNumber(1).withTotal().size(70); assertSoftly(softly -> { - softly.assertThat(pageRequest1.page()).isEqualTo(1L); + softly.assertThat(pageRequest1.pageNumber()).isEqualTo(1L); softly.assertThat(pageRequest1.size()).isEqualTo(70); softly.assertThat(pageRequest1.requestTotal()).isEqualTo(true); }); - PageRequest pageRequest2 = PageRequest.ofPage(2).size(80).withoutTotal(); + PageRequest pageRequest2 = PageRequest.ofSize(10).atPageNumber(2).size(80).withoutTotal(); assertSoftly(softly -> { - softly.assertThat(pageRequest2.page()).isEqualTo(2L); + softly.assertThat(pageRequest2.pageNumber()).isEqualTo(2L); softly.assertThat(pageRequest2.size()).isEqualTo(80); softly.assertThat(pageRequest2.requestTotal()).isEqualTo(false); }); @@ -93,10 +93,10 @@ void shouldRequestTotalConfigBePreserved() { @Test @DisplayName("Should throw IllegalArgumentException when page is not present") void shouldReturnErrorWhenThereIsIllegalArgument() { - PageRequest p1 = PageRequest.ofPage(1); + PageRequest p1 = PageRequest.ofSize(10).atPageNumber(1); - assertThatIllegalArgumentException().isThrownBy(() -> PageRequest.ofPage(0)); - assertThatIllegalArgumentException().isThrownBy(() -> PageRequest.ofPage(-1)); + assertThatIllegalArgumentException().isThrownBy(() -> PageRequest.ofSize(10).atPageNumber(0)); + assertThatIllegalArgumentException().isThrownBy(() -> PageRequest.ofSize(10).atPageNumber(-1)); assertThatIllegalArgumentException().isThrownBy(() -> p1.size(-1)); assertThatIllegalArgumentException().isThrownBy(() -> p1.size(0)); assertThatIllegalArgumentException().isThrownBy(() -> PageRequest.ofSize(0)); @@ -106,14 +106,14 @@ void shouldReturnErrorWhenThereIsIllegalArgument() { @Test @DisplayName("Size should be replaced on new instance of PageRequest") void shouldReplaceSize() { - PageRequest s90 = PageRequest.ofPage(4).size(90); + PageRequest s90 = PageRequest.ofSize(10).atPageNumber(4).size(90); PageRequest s80 = s90.size(80); assertSoftly(softly -> { softly.assertThat(s80.size()).isEqualTo(80); softly.assertThat(s90.size()).isEqualTo(90); - softly.assertThat(s90.page()).isEqualTo(4L); - softly.assertThat(s80.page()).isEqualTo(4L); + softly.assertThat(s90.pageNumber()).isEqualTo(4L); + softly.assertThat(s80.pageNumber()).isEqualTo(4L); }); } diff --git a/api/src/test/java/jakarta/data/page/PaginationTest.java b/api/src/test/java/jakarta/data/page/PaginationTest.java index 1f9495f5b..7801bb890 100644 --- a/api/src/test/java/jakarta/data/page/PaginationTest.java +++ b/api/src/test/java/jakarta/data/page/PaginationTest.java @@ -97,7 +97,7 @@ void shouldUpdatePageSize() { @DisplayName("should override page number") void shouldUpdatePageNumber() { var pagination = new Pagination(1, 10, PageRequest.Mode.OFFSET, null, false); - var updated = pagination.page(5); + var updated = pagination.atPageNumber(5); assertThat(updated).hasFieldOrPropertyWithValue("page", 5L); } @@ -109,7 +109,7 @@ void shouldPrintToStringWithCursorInfo() { var pagination = new Pagination(2, 50, PageRequest.Mode.CURSOR_NEXT, cursor, true); assertThat(pagination.toString()) - .contains("page=2", "size=50", "mode=CURSOR_NEXT", "cursor size=2"); + .contains("pageNumber=2", "size=50", "mode=CURSOR_NEXT", "cursor size=2"); } diff --git a/api/src/test/java/jakarta/data/page/impl/CursoredPageRecordTest.java b/api/src/test/java/jakarta/data/page/impl/CursoredPageRecordTest.java index 0ff6247f7..77123e397 100644 --- a/api/src/test/java/jakarta/data/page/impl/CursoredPageRecordTest.java +++ b/api/src/test/java/jakarta/data/page/impl/CursoredPageRecordTest.java @@ -42,27 +42,27 @@ class CursoredPageRecordTest { void shouldBeImmutable() { PageRequest page2Request = - PageRequest.ofPage(2).size(5).withoutTotal() + PageRequest.ofSize(10).atPageNumber(2).size(5).withoutTotal() .beforeCursor(Cursor.forKey("100")); PageRequest page3Request = - PageRequest.ofPage(3).size(5).withoutTotal() + PageRequest.ofSize(10).atPageNumber(3).size(5).withoutTotal() .afterCursor(Cursor.forKey("99")); PageRequest page4Request = - PageRequest.ofPage(4).size(5).withoutTotal() + PageRequest.ofSize(10).atPageNumber(4).size(5).withoutTotal() .afterCursor(Cursor.forKey("104")); PageRequest originalPage2Request = - PageRequest.ofPage(2).size(5).withoutTotal() + PageRequest.ofSize(10).atPageNumber(2).size(5).withoutTotal() .beforeCursor(Cursor.forKey("100")); PageRequest originalPage3Request = - PageRequest.ofPage(3).size(5).withoutTotal() + PageRequest.ofSize(10).atPageNumber(3).size(5).withoutTotal() .afterCursor(Cursor.forKey("99")); PageRequest originalPage4Request = - PageRequest.ofPage(4).size(5).withoutTotal() + PageRequest.ofSize(10).atPageNumber(4).size(5).withoutTotal() .afterCursor(Cursor.forKey("104")); List page3Content = BookSimulator.mock(5); @@ -85,9 +85,9 @@ void shouldBeImmutable() { // Modify the values that were supplied to the CursoredPageRecord // constructor - page2Request.page(5); - page3Request.page(6); - page4Request.page(7); + page2Request.atPageNumber(5); + page3Request.atPageNumber(6); + page4Request.atPageNumber(7); page2Request.size(9); page3Request.size(6); @@ -119,17 +119,17 @@ void shouldBeImmutable() { // Modify (or attempt to modify) values returned by the // CursoredPageRecord - page3.previousPageRequest().page(1); + page3.previousPageRequest().atPageNumber(1); page3.previousPageRequest().size(8); page3.previousPageRequest().withTotal(); page3.previousPageRequest().beforeCursor(Cursor.forKey("50")); - page3.pageRequest().page(4); + page3.pageRequest().atPageNumber(4); page3.pageRequest().size(7); page3.pageRequest().withTotal(); page3.pageRequest().afterCursor(Cursor.forKey("101")); - page3.nextPageRequest().page(5); + page3.nextPageRequest().atPageNumber(5); page3.nextPageRequest().size(3); page3.nextPageRequest().withTotal(); page3.nextPageRequest().afterCursor(Cursor.forKey("115")); @@ -161,7 +161,7 @@ void shouldReportContentAndSize() { List.of("A", "B"), List.of(PageRequest.Cursor.forKey("a"), PageRequest.Cursor.forKey("b")), 10, - PageRequest.ofPage(1).size(2), + PageRequest.ofSize(10).atPageNumber(1).size(2), true, false ); @@ -183,7 +183,7 @@ void shouldReturnCursorByIndex() { List.of("A", "B"), List.of(cursorA, cursorB), 10, - PageRequest.ofPage(1).size(2), + PageRequest.ofSize(10).atPageNumber(1).size(2), true, false ); @@ -201,7 +201,7 @@ void shouldDetectNavigationPossibilities() { List.of("X"), List.of(PageRequest.Cursor.forKey("x")), 10, - PageRequest.ofPage(2).size(1), + PageRequest.ofSize(10).atPageNumber(2).size(1), false, false ); @@ -219,7 +219,7 @@ void shouldThrowWhenPageNavigationUnavailable() { List.of("X"), List.of(PageRequest.Cursor.forKey("x")), 10, - PageRequest.ofPage(1).size(1), + PageRequest.ofSize(10).atPageNumber(1).size(1), true, true ); @@ -237,7 +237,7 @@ void shouldComputeTotalPages() { List.of("A", "B"), List.of(PageRequest.Cursor.forKey("a"), PageRequest.Cursor.forKey("b")), 10, - PageRequest.ofPage(1).size(3), + PageRequest.ofSize(10).atPageNumber(1).size(3), true, false ); @@ -254,7 +254,7 @@ void shouldThrowIfTotalUnavailable() { List.of("A"), List.of(PageRequest.Cursor.forKey("a")), -1, - PageRequest.ofPage(1).size(1), + PageRequest.ofSize(10).atPageNumber(1).size(1), true, true ); diff --git a/api/src/test/java/jakarta/data/page/impl/PageRecordTest.java b/api/src/test/java/jakarta/data/page/impl/PageRecordTest.java index f25216391..e41074543 100644 --- a/api/src/test/java/jakarta/data/page/impl/PageRecordTest.java +++ b/api/src/test/java/jakarta/data/page/impl/PageRecordTest.java @@ -42,10 +42,10 @@ class PageRecordTest { void shouldBeImmutable() { PageRequest page4Request = - PageRequest.ofPage(4).size(5).withTotal(); + PageRequest.ofSize(10).atPageNumber(4).size(5).withTotal(); PageRequest originalPage4Request = - PageRequest.ofPage(4).size(5).withTotal(); + PageRequest.ofSize(10).atPageNumber(4).size(5).withTotal(); List page4Content = BookSimulator.mock(5); @@ -57,7 +57,7 @@ void shouldBeImmutable() { Page page4 = new PageRecord<>(page4Request, page4Content, 44); // Modify the values that were supplied to the PageRecord constructor - page4Request.page(5); + page4Request.atPageNumber(5); page4Request.size(6); page4Request.withoutTotal(); page4Request.afterCursor(Cursor.forKey("104")); @@ -73,7 +73,7 @@ void shouldBeImmutable() { }); // Modify values returned by the PageRecord - page4.pageRequest().page(3); + page4.pageRequest().atPageNumber(3); page4.pageRequest().size(7); page4.pageRequest().withoutTotal(); page4.pageRequest().beforeCursor(Cursor.forKey("100")); @@ -96,7 +96,7 @@ void shouldBeImmutable() { @DisplayName("The custom constructor can create instances where moreResults is inferred from the other record components.") void shouldCreateInstanceWithCustomConstructor() { - PageRequest page2Request = PageRequest.ofPage(2).size(4); + PageRequest page2Request = PageRequest.ofSize(10).atPageNumber(2).size(4); List page2Content = List.of("E", "F", "G", "H"); PageRecord page2 = new PageRecord<>(page2Request, page2Content, -1L); // unknown total elements @@ -107,14 +107,14 @@ void shouldCreateInstanceWithCustomConstructor() { softly.assertThat(page2.hasPrevious()).isEqualTo(true); softly.assertThat(page2.hasTotals()).isEqualTo(false); softly.assertThat(page2.moreResults()).isEqualTo(true); - softly.assertThat(page2.nextPageRequest()).isEqualTo(PageRequest.ofPage(3).size(4)); + softly.assertThat(page2.nextPageRequest()).isEqualTo(PageRequest.ofSize(10).atPageNumber(3).size(4)); softly.assertThat(page2.numberOfElements()).isEqualTo(4); - softly.assertThat(page2.previousPageRequest()).isEqualTo(PageRequest.ofPage(1).size(4)); + softly.assertThat(page2.previousPageRequest()).isEqualTo(PageRequest.ofSize(10).atPageNumber(1).size(4)); }); assertThatThrownBy(page2::totalElements).isInstanceOf(IllegalStateException.class); assertThatThrownBy(page2::totalPages).isInstanceOf(IllegalStateException.class); - PageRequest page5Request = PageRequest.ofPage(5).size(4); + PageRequest page5Request = PageRequest.ofSize(10).atPageNumber(5).size(4); List page5Content = List.of("Q", "R"); PageRecord page5 = new PageRecord<>(page5Request, page5Content, -999L); // unknown total elements @@ -126,7 +126,7 @@ void shouldCreateInstanceWithCustomConstructor() { softly.assertThat(page5.hasTotals()).isEqualTo(false); softly.assertThat(page5.moreResults()).isEqualTo(false); softly.assertThat(page5.numberOfElements()).isEqualTo(2); - softly.assertThat(page5.previousPageRequest()).isEqualTo(PageRequest.ofPage(4).size(4)); + softly.assertThat(page5.previousPageRequest()).isEqualTo(PageRequest.ofSize(10).atPageNumber(4).size(4)); }); assertThatThrownBy(page5::nextPageRequest).isInstanceOf(NoSuchElementException.class); assertThatThrownBy(page5::totalElements).isInstanceOf(IllegalStateException.class); @@ -137,7 +137,7 @@ void shouldCreateInstanceWithCustomConstructor() { @DisplayName("Instances created by the record constructor must adhere to the requirements of the Page interface.") void shouldCreateInstanceWithRecordConstructor() { - PageRequest page1Request = PageRequest.ofPage(1).size(5); + PageRequest page1Request = PageRequest.ofSize(10).atPageNumber(1).size(5); List page1Content = List.of("A", "B", "C", "D", "E"); PageRecord page1 = new PageRecord<>(page1Request, page1Content, 18L, true); @@ -148,14 +148,14 @@ void shouldCreateInstanceWithRecordConstructor() { softly.assertThat(page1.hasPrevious()).isEqualTo(false); softly.assertThat(page1.hasTotals()).isEqualTo(true); softly.assertThat(page1.moreResults()).isEqualTo(true); - softly.assertThat(page1.nextPageRequest()).isEqualTo(PageRequest.ofPage(2).size(5)); + softly.assertThat(page1.nextPageRequest()).isEqualTo(PageRequest.ofSize(10).atPageNumber(2).size(5)); softly.assertThat(page1.numberOfElements()).isEqualTo(5); softly.assertThat(page1.totalElements()).isEqualTo(18L); softly.assertThat(page1.totalPages()).isEqualTo(4); }); assertThatThrownBy(page1::previousPageRequest).isInstanceOf(NoSuchElementException.class); - PageRequest page3Request = PageRequest.ofPage(3).size(5); + PageRequest page3Request = PageRequest.ofSize(10).atPageNumber(3).size(5); List page3Content = List.of("K", "L", "M", "N", "O"); PageRecord page3 = new PageRecord<>(page3Request, page3Content, 18L, true); @@ -166,9 +166,9 @@ void shouldCreateInstanceWithRecordConstructor() { softly.assertThat(page3.hasPrevious()).isEqualTo(true); softly.assertThat(page3.hasTotals()).isEqualTo(true); softly.assertThat(page3.moreResults()).isEqualTo(true); - softly.assertThat(page3.nextPageRequest()).isEqualTo(PageRequest.ofPage(4).size(5)); + softly.assertThat(page3.nextPageRequest()).isEqualTo(PageRequest.ofSize(10).atPageNumber(4).size(5)); softly.assertThat(page3.numberOfElements()).isEqualTo(5); - softly.assertThat(page3.previousPageRequest()).isEqualTo(PageRequest.ofPage(2).size(5)); + softly.assertThat(page3.previousPageRequest()).isEqualTo(PageRequest.ofSize(10).atPageNumber(2).size(5)); softly.assertThat(page3.totalElements()).isEqualTo(18L); softly.assertThat(page3.totalPages()).isEqualTo(4); }); diff --git a/tck/src/main/java/ee/jakarta/tck/data/standalone/entity/EntityTests.java b/tck/src/main/java/ee/jakarta/tck/data/standalone/entity/EntityTests.java index 5ce8dc5ca..b411ae654 100644 --- a/tck/src/main/java/ee/jakarta/tck/data/standalone/entity/EntityTests.java +++ b/tck/src/main/java/ee/jakarta/tck/data/standalone/entity/EntityTests.java @@ -389,7 +389,7 @@ public void testBasicRepositoryMethods() { @Assertion(id = "133", strategy = "Request a Page higher than the final Page, expecting an empty Page with 0 results.") public void testBeyondFinalPage() { - PageRequest sixth = PageRequest.ofPage(6).size(10); + PageRequest sixth = PageRequest.ofSize(10).atPageNumber(6).size(10); Page page; try { page = characters.findByNumericValueBetween(48, 90, sixth, Order.by(_AsciiCharacter.numericValue.asc())); @@ -421,7 +421,7 @@ public void testBeyondFinalPage() { @Assertion(id = "133", strategy = "Request a Slice higher than the final Slice, expecting an empty Slice with 0 results.") public void testBeyondFinalSlice() { - PageRequest sixth = PageRequest.ofPage(6).size(5).withoutTotal(); + PageRequest sixth = PageRequest.ofSize(10).atPageNumber(6).size(5).withoutTotal(); Page page; try { page = numbers.findByNumTypeAndFloorOfSquareRootLessThanEqual( @@ -651,7 +651,7 @@ public void testFalse() { @Assertion(id = "133", strategy = "Request the last Page of up to 10 results, expecting to find the final 3.") public void testFinalPageOfUpTo10() { - PageRequest fifthPageRequest = PageRequest.ofPage(5).size(10); + PageRequest fifthPageRequest = PageRequest.ofSize(10).atPageNumber(5).size(10); Page page; try { page = characters.findByNumericValueBetween(48, 90, fifthPageRequest, @@ -696,7 +696,7 @@ public void testFinalPageOfUpTo10() { assertFalse(it.hasNext()); - assertEquals(5, page.pageRequest().page()); + assertEquals(5, page.pageRequest().pageNumber()); assertTrue(page.hasContent()); assertEquals(3, page.numberOfElements()); try { @@ -711,7 +711,7 @@ public void testFinalPageOfUpTo10() { @Assertion(id = "133", strategy = "Request the last Slice of up to 5 results, expecting to find the final 2.") public void testFinalSliceOfUpTo5() { - PageRequest fifth = PageRequest.ofPage(5).size(5).withoutTotal(); + PageRequest fifth = PageRequest.ofSize(10).atPageNumber(5).size(5).withoutTotal(); Page page; try { page = numbers.findByNumTypeAndFloorOfSquareRootLessThanEqual( @@ -730,7 +730,7 @@ public void testFinalSliceOfUpTo5() { } } assertTrue(page.hasContent()); - assertEquals(5, page.pageRequest().page()); + assertEquals(5, page.pageRequest().pageNumber()); assertEquals(2, page.numberOfElements()); Iterator it = page.iterator(); @@ -762,7 +762,7 @@ public void testFinalSliceOfUpTo5() { "ascending and descending sort. Verify the page contains all 12 expected entities, " + "sorted according to the mixture of ascending and descending sort orders specified.") public void testFindAllWithPagination() { - PageRequest page2request = PageRequest.ofPage(2).size(12); + PageRequest page2request = PageRequest.ofSize(10).atPageNumber(2).size(12); Page page2; try { page2 = positives.findAll(page2request, @@ -779,7 +779,7 @@ public void testFindAllWithPagination() { } assertEquals(12, page2.numberOfElements()); - assertEquals(2, page2.pageRequest().page()); + assertEquals(2, page2.pageRequest().pageNumber()); assertEquals(List.of(11L, 10L, 9L, // square root rounds down to 3 24L, 23L, 22L, 21L, 20L, 19L, 18L, 17L, 16L), // square root rounds down to 4 @@ -832,7 +832,7 @@ public void testFindEntityAsRecordReturnOptional() { the names of record components. Results are return as a Page of record. """) public void testFindEntityAsRecordReturnPage() { - PageRequest page8Request = PageRequest.ofPage(8).size(10); + PageRequest page8Request = PageRequest.ofSize(10).atPageNumber(8).size(10); @SuppressWarnings("unchecked") Sort[] numAscending = @@ -1215,7 +1215,7 @@ public void testFirstPageOf10() { } } - assertEquals(1, page.pageRequest().page()); + assertEquals(1, page.pageRequest().pageNumber()); assertTrue(page.hasContent()); assertEquals(10, page.numberOfElements()); try { @@ -1472,7 +1472,7 @@ public void testCursoredPageOfNothing() { CursoredPage page; try { // There are no positive integers less than 4 which have a square root that rounds down to something other than 1. - page = positives.findByFloorOfSquareRootNotAndIdLessThanOrderByNumBitsRequiredDesc(1L, 4L, PageRequest.ofPage(1L), Order.by()); + page = positives.findByFloorOfSquareRootNotAndIdLessThanOrderByNumBitsRequiredDesc(1L, 4L, PageRequest.ofSize(10).atPageNumber(1L), Order.by()); } catch (UnsupportedOperationException x) { if (type.capableOfAnd() && type.capableOfConstraintsOnNonIdAttributes() && @@ -2340,7 +2340,7 @@ public void testQueryWithSelectReturnsOptionalOfRecord() { and returns a Page of Java record results. """) public void testQueryWithSelectReturnsPageOfRecord() { - PageRequest page3Req = PageRequest.ofPage(3).size(6); + PageRequest page3Req = PageRequest.ofSize(10).atPageNumber(3).size(6); Page page3; try { page3 = numbers.numberPage(page3Req); @@ -2495,7 +2495,7 @@ public void testRecordComponentsChooseAttributeReturnOptional() { Page of records. """) public void testRecordComponentsChooseAttributeReturnPage() { - PageRequest page2Req = PageRequest.ofPage(2).size(5); + PageRequest page2Req = PageRequest.ofSize(10).atPageNumber(2).size(5); Page page2; try { page2 = numbers.infoPaginated(true, page2Req); @@ -2815,7 +2815,7 @@ public void testSelectEntityAttributeAsOptional() { public void testSelectEntityAttributeAsPage() { final boolean odd = true; - PageRequest page4Request = PageRequest.ofPage(4).size(5); + PageRequest page4Request = PageRequest.ofSize(10).atPageNumber(4).size(5); Page page4; try { page4 = positives.withParity(odd, page4Request); @@ -3022,7 +3022,7 @@ public void testSelectEntityAttributesAsOptionalOfRecord() { to retrieve as a Page of record. """) public void testSelectEntityAttributesAsPageOfRecord() { - PageRequest page3Req = PageRequest.ofPage(3).size(4); + PageRequest page3Req = PageRequest.ofSize(10).atPageNumber(3).size(4); Page page3; try { page3 = numbers.wholeNumberPage(NumberType.PRIME.ordinal(), @@ -3304,7 +3304,7 @@ public void testStreamsFromList() { "Request the next Page via nextPageRequest, expecting page number 4 and another 10 results.") public void testThirdAndFourthPagesOf10() { Order order = Order.by(_AsciiCharacter.numericValue.asc()); - PageRequest third10 = PageRequest.ofPage(3).size(10); + PageRequest third10 = PageRequest.ofSize(10).atPageNumber(3).size(10); Page page; try { page = characters.findByNumericValueBetween(48, 90, third10, order); // 'D' to 'M' @@ -3319,7 +3319,7 @@ public void testThirdAndFourthPagesOf10() { } } - assertEquals(3, page.pageRequest().page()); + assertEquals(3, page.pageRequest().pageNumber()); assertTrue(page.hasContent()); assertEquals(10, page.numberOfElements()); try { @@ -3342,7 +3342,7 @@ public void testThirdAndFourthPagesOf10() { PageRequest fourth10 = page.nextPageRequest(); page = characters.findByNumericValueBetween(48, 90, fourth10, order); // 'N' to 'W' - assertEquals(4, page.pageRequest().page()); + assertEquals(4, page.pageRequest().pageNumber()); assertTrue(page.hasContent()); assertEquals(10, page.numberOfElements()); try { @@ -3366,7 +3366,7 @@ public void testThirdAndFourthPagesOf10() { strategy = "Request the third Slice of 5 results, expecting to find all 5. " + "Request the next Slice via nextPageRequest, expecting page number 4 and another 5 results.") public void testThirdAndFourthSlicesOf5() { - PageRequest third5 = PageRequest.ofPage(3).size(5).withoutTotal(); + PageRequest third5 = PageRequest.ofSize(10).atPageNumber(3).size(5).withoutTotal(); Sort sort = Sort.desc("id"); Page page; try { @@ -3382,7 +3382,7 @@ public void testThirdAndFourthSlicesOf5() { } } - assertEquals(3, page.pageRequest().page()); + assertEquals(3, page.pageRequest().pageNumber()); assertEquals(5, page.numberOfElements()); assertEquals(Arrays.toString(new Long[]{37L, 31L, 29L, 23L, 19L}), @@ -3395,7 +3395,7 @@ public void testThirdAndFourthSlicesOf5() { page = numbers.findByNumTypeAndFloorOfSquareRootLessThanEqual(NumberType.PRIME, 8L, fourth5, sort); - assertEquals(4, page.pageRequest().page()); + assertEquals(4, page.pageRequest().pageNumber()); assertEquals(5, page.numberOfElements()); assertEquals(Arrays.toString(new Long[]{17L, 13L, 11L, 7L, 5L}), diff --git a/tck/src/main/java/ee/jakarta/tck/data/standalone/entity/SortNullableTests.java b/tck/src/main/java/ee/jakarta/tck/data/standalone/entity/SortNullableTests.java index 5329e0aea..dd447b630 100644 --- a/tck/src/main/java/ee/jakarta/tck/data/standalone/entity/SortNullableTests.java +++ b/tck/src/main/java/ee/jakarta/tck/data/standalone/entity/SortNullableTests.java @@ -625,7 +625,7 @@ public void testMixedOrderByAndSortWithNullOrdering() { "OZ", Order.by(_Country.daylightTimeBegins.desc().nullsFirst(), _Country.code.asc()), - PageRequest.ofSize(25).page(2)); + PageRequest.ofSize(25).atPageNumber(2)); } catch (IllegalArgumentException x) { if (type.capableOfSortingNullsFirst()) { throw x;