branch develop updated (6ef976f -> 32ab51c)
This is an automated email from the git hooks/post-receive script. New change to branch develop in repository nuiton-utils. See https://gitlab.nuiton.org/nuiton/nuiton-utils.git from 6ef976f fixes #4051 Implement equals and hashCode on PaginationParameter and PaginationOrder new 32ab51c fixes #4052 Add a method to build a PaginationResult from a full list of elements and an instance of PaginationParameter The 1 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "adds" were already present in the repository and have only been added to this reference. Detailed log of new commits: 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 Summary of changes: .../nuiton/util/pagination/PaginationResult.java | 32 +++++++++ .../util/pagination/PaginationResultTest.java | 78 ++++++++++++++++++++++ 2 files changed, 110 insertions(+) -- To stop receiving notification emails like this one, please contact nuiton.org SCM administrator <admin+scm@nuiton.org>.
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>.
participants (1)
-
nuiton.org scm