Author: athimel Date: 2014-05-23 10:28:43 +0200 (Fri, 23 May 2014) New Revision: 3131 Url: http://forge.nuiton.org/projects/topia/repository/revisions/3131 Log: refs-80 #3208 Introduce findPage(...) methods Removed: trunk/topia-persistence/src/test/java/org/nuiton/topia/persistence/pager/ Modified: trunk/topia-it/src/test/java/org/nuiton/topia/persistence/internal/TopiaDaoTest.java trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaDao.java trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaQueryBuilderRunQueryStep.java trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/internal/AbstractTopiaDao.java Modified: trunk/topia-it/src/test/java/org/nuiton/topia/persistence/internal/TopiaDaoTest.java =================================================================== --- trunk/topia-it/src/test/java/org/nuiton/topia/persistence/internal/TopiaDaoTest.java 2014-05-23 07:31:13 UTC (rev 3130) +++ trunk/topia-it/src/test/java/org/nuiton/topia/persistence/internal/TopiaDaoTest.java 2014-05-23 08:28:43 UTC (rev 3131) @@ -42,6 +42,7 @@ import org.nuiton.topia.persistence.TopiaEntities; import org.nuiton.topia.persistence.TopiaException; import org.nuiton.util.pagination.PaginationParameter; +import org.nuiton.util.pagination.PaginationResult; import com.google.common.base.Function; import com.google.common.base.Strings; @@ -208,9 +209,7 @@ @Test public void iterateOnEmptyTopiaDAO() throws TopiaException { - for (Person person : dao) { - Assert.fail("No person has been created"); - } + Assert.assertFalse("No person has been created, hasNext should return false", dao.iterator().hasNext()); } protected void createPersons(int number) throws TopiaException { @@ -339,4 +338,78 @@ Assert.assertTrue(intersection.contains("toto07")); } + @Test + public void testFindPage() throws TopiaException { + + createPersons(19); + + String hql = dao.newFromClause("p") + " WHERE p." + Person.PROPERTY_NAME + " LIKE 'toto%' "; + PaginationResult<Person> page = dao.forHql(hql).findPage(PaginationParameter.of(0, 5)); + + Assert.assertEquals(5, page.getElements().size()); + Assert.assertEquals(0, page.getCurrentPage().getStartIndex()); + Assert.assertEquals(4, page.getCurrentPage().getEndIndex()); + Assert.assertEquals(19, page.getCount()); + Assert.assertEquals(4, page.getPageCount()); + + while (page.hasNextPage()) { + PaginationParameter nextPage = page.getNextPage(); + page = dao.forHql(hql).findPage(nextPage); + + if (page.hasNextPage()) { + Assert.assertEquals(5, page.getElements().size()); + } else { + // last page only has 4 elements + Assert.assertEquals(4, page.getElements().size()); + } + Assert.assertEquals(19, page.getCount()); + Assert.assertEquals(4, page.getPageCount()); + } + } + + @Test + public void testFindPageWithOrder() throws TopiaException { + + createPersons(19); + + String hql = dao.newFromClause("p") + " WHERE p." + Person.PROPERTY_NAME + " LIKE 'toto%' "; + PaginationResult<Person> page = dao.forHql(hql).findPage(PaginationParameter.of(0, 7, Person.PROPERTY_NAME, true)); + + Assert.assertEquals(7, page.getElements().size()); + Assert.assertEquals(0, page.getCurrentPage().getStartIndex()); + Assert.assertEquals(6, page.getCurrentPage().getEndIndex()); + Assert.assertEquals(19, page.getCount()); + Assert.assertEquals(3, page.getPageCount()); + + Assert.assertEquals("toto18", page.getElements().iterator().next().getName()); + Assert.assertEquals("toto12", Iterables.getLast(page.getElements()).getName()); + + PaginationParameter lastPage = page.getLastPage(); + page = dao.forHql(hql).findPage(lastPage); + + Assert.assertEquals(5, page.getElements().size()); + Assert.assertEquals(14, page.getCurrentPage().getStartIndex()); + Assert.assertEquals(20, page.getCurrentPage().getEndIndex()); + Assert.assertEquals(19, page.getCount()); + Assert.assertEquals(3, page.getPageCount()); + Assert.assertFalse(page.hasNextPage()); + + Assert.assertEquals("toto04", page.getElements().iterator().next().getName()); + Assert.assertEquals("toto00", Iterables.getLast(page.getElements()).getName()); + + } + + @Test + public void testFindPageNoData() throws TopiaException { + + String hql = dao.newFromClause("p"); + PaginationResult<Person> page = dao.forHql(hql).findPage(PaginationParameter.of(0, 5)); + + Assert.assertEquals(0, page.getElements().size()); + Assert.assertEquals(0, page.getCount()); + Assert.assertEquals(0, page.getPageCount()); + Assert.assertFalse(page.hasNextPage()); + + } + } Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaDao.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaDao.java 2014-05-23 07:31:13 UTC (rev 3130) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaDao.java 2014-05-23 08:28:43 UTC (rev 3131) @@ -82,7 +82,9 @@ * @param pageSize size of a page * @return the initialized pager. * @since 3.0 + * @deprecated This method has to be replaced by another clearer method */ + @Deprecated PaginationResult<E> newPager(int pageSize); /** @@ -97,7 +99,9 @@ * @param pageSize size of a page * @return the initialized pager. * @since 3.0 + * @deprecated This method has to be replaced by another clearer method */ + @Deprecated PaginationResult<E> newPager(String hql, Map<String, Object> params, int pageSize); /** Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaQueryBuilderRunQueryStep.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaQueryBuilderRunQueryStep.java 2014-05-23 07:31:13 UTC (rev 3130) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaQueryBuilderRunQueryStep.java 2014-05-23 08:28:43 UTC (rev 3131) @@ -27,6 +27,7 @@ import java.util.List; import org.nuiton.util.pagination.PaginationParameter; +import org.nuiton.util.pagination.PaginationResult; import com.google.common.base.Optional; @@ -121,10 +122,14 @@ List<E> find(PaginationParameter page); + PaginationResult<E> findPage(PaginationParameter page); + List<String> findAllIds(); List<String> findIds(int startIndex, int endIndex); List<String> findIds(PaginationParameter page); + PaginationResult<String> findIdsPage(PaginationParameter page); + } Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/internal/AbstractTopiaDao.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/internal/AbstractTopiaDao.java 2014-05-23 07:31:13 UTC (rev 3130) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/internal/AbstractTopiaDao.java 2014-05-23 08:28:43 UTC (rev 3131) @@ -946,6 +946,11 @@ } @Override + public PaginationResult<E> findPage(PaginationParameter page) { + return getNextStep().findPage(page); + } + + @Override public Iterable<E> findAllLazy() { return getNextStep().findAllLazy(); } @@ -971,6 +976,11 @@ } @Override + public PaginationResult<String> findIdsPage(PaginationParameter page) { + return getNextStep().findIdsPage(page); + } + + @Override public List<String> findAllIds() { return getNextStep().findAllIds(); } @@ -1086,6 +1096,14 @@ } @Override + public PaginationResult<E> findPage(PaginationParameter page) { + List<E> elements = find(page); + long count = count(); + PaginationResult<E> result = PaginationResult.of(elements, count, page); + return result; + } + + @Override public List<String> findAllIds() { String hqlWithSelectClause = "select topiaId " + hql; return topiaDAO.findAll(hqlWithSelectClause, hqlParameters); @@ -1102,6 +1120,15 @@ String hqlWithSelectClause = "select topiaId " + hql; return topiaDAO.find(hqlWithSelectClause, hqlParameters, page); } + + @Override + public PaginationResult<String> findIdsPage(PaginationParameter page) { + List<String> elements = findIds(page); + long count = count(); + PaginationResult<String> result = PaginationResult.of(elements, count, page); + return result; + } + } }