This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository nuiton-utils. See https://gitlab.nuiton.org/nuiton/nuiton-utils.git commit 32ab51c502259cbf8bf1e8a0d0f17591aa871483 Author: Arnaud Thimel <thimel@codelutin.com> Date: Fri Sep 30 23:39:43 2016 +0200 fixes #4052 Add a method to build a PaginationResult from a full list of elements and an instance of PaginationParameter --- .../nuiton/util/pagination/PaginationResult.java | 32 +++++++++ .../util/pagination/PaginationResultTest.java | 78 ++++++++++++++++++++++ 2 files changed, 110 insertions(+) diff --git a/src/main/java/org/nuiton/util/pagination/PaginationResult.java b/src/main/java/org/nuiton/util/pagination/PaginationResult.java index 14b86e7..9ab5dbf 100644 --- a/src/main/java/org/nuiton/util/pagination/PaginationResult.java +++ b/src/main/java/org/nuiton/util/pagination/PaginationResult.java @@ -25,6 +25,7 @@ package org.nuiton.util.pagination; import com.google.common.base.Preconditions; import java.io.Serializable; +import java.util.LinkedList; import java.util.List; /** @@ -64,6 +65,37 @@ public class PaginationResult<O> implements Serializable { return result; } + /** + * Creates an instance using the full list of elements ({code}fullList{/code}) and the {code}requestedPage{/code} + * {@link PaginationParameter}. The built instance of PaginationResult will contain a sub list of the given + * {code}fullList{/code} parameter. + * + * @param fullList the full list of elements + * @param requestedPage the PaginationParameter to use to build this paged result + * @param <T> any object type + * @return the built instance of PaginationResult. + */ + public static <T> PaginationResult<T> fromFullList(List<T> fullList, PaginationParameter requestedPage) { + + List<T> subList; + + int startIndex = requestedPage.getStartIndex(); + + if (PaginationParameter.ALL.equals(requestedPage)) { + // Full list requested, use the full list + subList = fullList; + } else if (startIndex >= fullList.size()) { + // If requested page is out of range, return an empty list + subList = new LinkedList<T>(); + } else { + int toIndex = Math.min(requestedPage.getEndIndex() + 1, fullList.size()); + subList = fullList.subList(startIndex, toIndex); + } + + PaginationResult<T> result = PaginationResult.of(subList, fullList.size(), requestedPage); + return result; + } + public List<O> getElements() { return elements; } diff --git a/src/test/java/org/nuiton/util/pagination/PaginationResultTest.java b/src/test/java/org/nuiton/util/pagination/PaginationResultTest.java index bfc0683..d21edea 100644 --- a/src/test/java/org/nuiton/util/pagination/PaginationResultTest.java +++ b/src/test/java/org/nuiton/util/pagination/PaginationResultTest.java @@ -22,6 +22,7 @@ package org.nuiton.util.pagination; * #L% */ +import java.util.Arrays; import java.util.List; import org.junit.Assert; @@ -121,4 +122,81 @@ public class PaginationResultTest { Assert.assertEquals(5, pageResult.getPageCount()); } + @Test + public void testOfFullList() { + String str = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed non risus. Suspendisse lectus " + + "tortor, dignissim sit amet, adipiscing nec, ultricies sed, dolor"; + + List<String> list = Arrays.asList(str.split(" ")); + Assert.assertEquals(22, list.size()); + + { + // All elements + PaginationResult<String> page = PaginationResult.fromFullList(list, PaginationParameter.ALL); + Assert.assertEquals(22, page.getElements().size()); + Assert.assertEquals(22, page.getCount()); + Assert.assertEquals(PaginationParameter.ALL, page.getCurrentPage()); + } + + { + PaginationResult<String> page = PaginationResult.fromFullList(list, PaginationParameter.of(0, 2)); + Assert.assertEquals(2, page.getElements().size()); + Assert.assertEquals(Arrays.asList("Lorem", "ipsum"), page.getElements()); + Assert.assertEquals(22, page.getCount()); + Assert.assertEquals(11, page.getPageCount()); + Assert.assertEquals(PaginationParameter.of(0, 2), page.getCurrentPage()); + } + + { + // 20 elements per page, first page : 20 elements + PaginationResult<String> page = PaginationResult.fromFullList(list, PaginationParameter.of(0, 20)); + Assert.assertEquals(20, page.getElements().size()); + Assert.assertEquals(2, page.getPageCount()); + } + + { + // 20 elements per page, second page : the 2 last elements + PaginationResult<String> page = PaginationResult.fromFullList(list, PaginationParameter.of(1, 20)); + Assert.assertEquals(2, page.getElements().size()); + Assert.assertEquals(Arrays.asList("sed,", "dolor"), page.getElements()); + Assert.assertEquals(2, page.getPageCount()); + } + + { + // pageSize strictly equals elements size : first page = all elements + PaginationResult<String> page = PaginationResult.fromFullList(list, PaginationParameter.of(0, 22)); + Assert.assertEquals(22, page.getElements().size()); + Assert.assertEquals(1, page.getPageCount()); + } + + { + // pageSize strictly equals elements size : second page = no element + PaginationResult<String> page = PaginationResult.fromFullList(list, PaginationParameter.of(1, 22)); + Assert.assertEquals(0, page.getElements().size()); + Assert.assertEquals(1, page.getPageCount()); + } + + { + // larger pageSize than elements + PaginationResult<String> page = PaginationResult.fromFullList(list, PaginationParameter.of(0, 50)); + Assert.assertEquals(22, page.getElements().size()); + Assert.assertEquals(1, page.getPageCount()); + } + + { + // larger pageSize than elements : out of bound page + PaginationResult<String> page = PaginationResult.fromFullList(list, PaginationParameter.of(1, 50)); + Assert.assertEquals(0, page.getElements().size()); + Assert.assertEquals(1, page.getPageCount()); + } + + { + // larger pageSize than elements : insane page + PaginationResult<String> page = PaginationResult.fromFullList(list, PaginationParameter.of(1980, 27)); + Assert.assertEquals(0, page.getElements().size()); + Assert.assertEquals(1, page.getPageCount()); + } + + } + } -- To stop receiving notification emails like this one, please contact nuiton.org SCM administrator <admin+scm@nuiton.org>.