From b753ce3a73ad7efda97451a102d7db8aa949479d Mon Sep 17 00:00:00 2001 From: Robin Bygrave Date: Thu, 22 Sep 2016 20:57:17 +1200 Subject: [PATCH] #820 - #718 Removed PagedList.getPageIndex() - Can it be added back? --- src/main/java/com/avaje/ebean/PagedList.java | 8 ++ .../server/query/LimitOffsetPagedList.java | 8 ++ .../query/LimitOffsetPagedListTest.java | 105 ++++++++++++++++++ 3 files changed, 121 insertions(+) create mode 100644 src/test/java/com/avaje/ebeaninternal/server/query/LimitOffsetPagedListTest.java diff --git a/src/main/java/com/avaje/ebean/PagedList.java b/src/main/java/com/avaje/ebean/PagedList.java index 9efb6a830..e6daf3573 100644 --- a/src/main/java/com/avaje/ebean/PagedList.java +++ b/src/main/java/com/avaje/ebean/PagedList.java @@ -207,6 +207,14 @@ public interface PagedList { */ int getPageSize(); + /** + * Return the index position of this page (Zero based). + *

+ * This is a calculated value based on firstRow/maxRows. + *

+ */ + int getPageIndex(); + /** * Return true if there is a next page. *

diff --git a/src/main/java/com/avaje/ebeaninternal/server/query/LimitOffsetPagedList.java b/src/main/java/com/avaje/ebeaninternal/server/query/LimitOffsetPagedList.java index eb5ef408c..07c4d04dc 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/query/LimitOffsetPagedList.java +++ b/src/main/java/com/avaje/ebeaninternal/server/query/LimitOffsetPagedList.java @@ -73,6 +73,14 @@ public class LimitOffsetPagedList implements PagedList { } } + @Override + public int getPageIndex() { + if (firstRow == 0) { + return 0; + } + return ((firstRow - 1) / maxRows) + 1; + } + public int getTotalPageCount() { int rowCount = getTotalCount(); diff --git a/src/test/java/com/avaje/ebeaninternal/server/query/LimitOffsetPagedListTest.java b/src/test/java/com/avaje/ebeaninternal/server/query/LimitOffsetPagedListTest.java new file mode 100644 index 000000000..47ebf44b7 --- /dev/null +++ b/src/test/java/com/avaje/ebeaninternal/server/query/LimitOffsetPagedListTest.java @@ -0,0 +1,105 @@ +package com.avaje.ebeaninternal.server.query; + +import com.avaje.ebean.Ebean; +import com.avaje.ebean.EbeanServer; +import com.avaje.ebeaninternal.api.SpiQuery; +import com.avaje.tests.model.basic.Order; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; + +public class LimitOffsetPagedListTest { + + private EbeanServer server = Ebean.getDefaultServer(); + + @Test + public void getPageIndex_when_firstRowsZero() throws Exception { + assertEquals(limit(0, 10).getPageIndex(), 0); + } + + @Test + public void getPageIndex_when_10_10() { + assertEquals(limit(10, 10).getPageIndex(), 1); + } + + @Test + public void getPageIndex_when_20_10() { + assertEquals(limit(20, 10).getPageIndex(), 2); + } + + @Test + public void getPageIndex_when_1_10() throws Exception { + assertEquals(limit(1, 10).getPageIndex(), 1); + } + + @Test + public void getPageIndex_when_9_10() throws Exception { + assertEquals(limit(1, 10).getPageIndex(), 1); + } + + @Test + public void getPageIndex_when_10_4() { + assertEquals(limit(10, 4).getPageIndex(), 3); + } + + @Test + public void getPageIndex_when_10_5() { + assertEquals(limit(10, 5).getPageIndex(), 2); + } + + @Test + public void getPageIndex_when_10_9() { + assertEquals(limit(10, 9).getPageIndex(), 2); + } + + @Test + public void getPageIndex_when_10_11() { + assertEquals(limit(10, 11).getPageIndex(), 1); + } + + @Test + public void getPageIndex_when_21_10() { + assertEquals(limit(21, 10).getPageIndex(), 3); + } + + @Test + public void getPageIndex_when_29_10() { + assertEquals(limit(29, 10).getPageIndex(), 3); + } + + @Test + public void getPageIndex_when_30_10() { + assertEquals(limit(30, 10).getPageIndex(), 3); + } + + @Test + public void getPageIndex_when_31_10() { + assertEquals(limit(31, 10).getPageIndex(), 4); + } + + @Test + public void getPageIndex_when_40_10() { + assertEquals(limit(40, 10).getPageIndex(), 4); + } + + + private LimitOffsetPagedList limit(int first, int max) { + return limitQuery(queryWith(first, max)); + } + + private LimitOffsetPagedList limitQuery(SpiQuery query) { + return new LimitOffsetPagedList(server, query); + } + + private SpiQuery queryWith(int first, int max) { + SpiQuery query = query(); + query.setFirstRow(first); + query.setMaxRows(max); + return query; + } + + private SpiQuery query() { + return (SpiQuery) server.find(Order.class); + } + +} \ No newline at end of file