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 f54e169664e5af61b24decd89f48f8848666e3f0 Author: Eric Chatellier <chatellier@codelutin.com> Date: Tue Jan 31 18:20:05 2017 +0100 fixes #4142: PaginationParameter.fromFullList() procuce out of bound filtering when using order clauses --- .../nuiton/util/pagination/PaginationParameter.java | 18 ++++++++++++++++-- .../org/nuiton/util/pagination/PaginationResult.java | 2 +- .../nuiton/util/pagination/PaginationResultTest.java | 18 +++++++++++++----- 3 files changed, 30 insertions(+), 8 deletions(-) diff --git a/src/main/java/org/nuiton/util/pagination/PaginationParameter.java b/src/main/java/org/nuiton/util/pagination/PaginationParameter.java index 9ab8416..62c1c65 100644 --- a/src/main/java/org/nuiton/util/pagination/PaginationParameter.java +++ b/src/main/java/org/nuiton/util/pagination/PaginationParameter.java @@ -4,7 +4,7 @@ package org.nuiton.util.pagination; * #%L * Nuiton Utils * %% - * Copyright (C) 2004 - 2014 CodeLutin + * Copyright (C) 2004 - 2017 CodeLutin * %% * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as @@ -42,9 +42,14 @@ public class PaginationParameter implements Serializable { private static final long serialVersionUID = 1L; /** + * All results. + */ + protected static final int ALL_PAGE_SIZE = -1; + + /** * An instance that represents a page of ALL elements */ - public static final PaginationParameter ALL = PaginationParameter.of(0, -1); + public static final PaginationParameter ALL = PaginationParameter.of(0, ALL_PAGE_SIZE); /** * 0-based page number @@ -245,6 +250,15 @@ public class PaginationParameter implements Serializable { } /** + * Test if pagination parameter is about all results range. + * + * @return {@code true} if pagination parameter is about all results range + */ + public boolean isAll() { + return pageSize == ALL_PAGE_SIZE; + } + + /** * Class used to build an instance of PaginationParameter. Use the {@link #build()} method to create the * {@link org.nuiton.util.pagination.PaginationParameter}. * diff --git a/src/main/java/org/nuiton/util/pagination/PaginationResult.java b/src/main/java/org/nuiton/util/pagination/PaginationResult.java index d46b9e3..75bf7f6 100644 --- a/src/main/java/org/nuiton/util/pagination/PaginationResult.java +++ b/src/main/java/org/nuiton/util/pagination/PaginationResult.java @@ -84,7 +84,7 @@ public class PaginationResult<O> implements Serializable { int startIndex = requestedPage.getStartIndex(); - if (PaginationParameter.ALL.equals(requestedPage)) { + if (requestedPage.isAll()) { // Full list requested, use the full list subList = fullList; } else if (startIndex >= fullList.size()) { diff --git a/src/test/java/org/nuiton/util/pagination/PaginationResultTest.java b/src/test/java/org/nuiton/util/pagination/PaginationResultTest.java index d41c6cf..3472313 100644 --- a/src/test/java/org/nuiton/util/pagination/PaginationResultTest.java +++ b/src/test/java/org/nuiton/util/pagination/PaginationResultTest.java @@ -4,7 +4,7 @@ package org.nuiton.util.pagination; * #%L * Nuiton Utils * %% - * Copyright (C) 2004 - 2014 CodeLutin + * Copyright (C) 2004 - 2017 CodeLutin * %% * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as @@ -22,15 +22,14 @@ package org.nuiton.util.pagination; * #L% */ -import java.util.Arrays; -import java.util.List; - import com.google.common.base.Function; +import com.google.common.collect.Lists; import org.junit.Assert; import org.junit.Before; import org.junit.Test; -import com.google.common.collect.Lists; +import java.util.Arrays; +import java.util.List; /** * @author Arnaud Thimel (Code Lutin) @@ -140,6 +139,15 @@ public class PaginationResultTest { } { + // All elements + PaginationParameter all = PaginationParameter.of(0, -1, "name", true); + PaginationResult<String> page = PaginationResult.fromFullList(list, all); + Assert.assertEquals(22, page.getElements().size()); + Assert.assertEquals(22, page.getCount()); + Assert.assertEquals(PaginationParameter.of(0, -1, "name", true), 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()); -- To stop receiving notification emails like this one, please contact nuiton.org SCM administrator <admin+scm@nuiton.org>.