diff --git a/core/src/main/java/org/alfresco/query/AbstractCannedQuery.java b/core/src/main/java/org/alfresco/query/AbstractCannedQuery.java index a8effe90fc..6e83b4c490 100644 --- a/core/src/main/java/org/alfresco/query/AbstractCannedQuery.java +++ b/core/src/main/java/org/alfresco/query/AbstractCannedQuery.java @@ -113,7 +113,7 @@ public abstract class AbstractCannedQuery implements CannedQuery final List> finalPages = pages; // Has more items beyond requested pages ? ... ie. at least one more page (with at least one result) - final boolean hasMoreItems = (rawResults.size() > pagingDetails.getResultsRequiredForPaging()); + final boolean hasMoreItems = (rawResults.size() > pagingDetails.getResultsRequiredForPaging()) || (totalCount.getFirst() > pagingDetails.getResultsRequiredForPaging()); results = new CannedQueryResults() { diff --git a/repository/src/main/java/org/alfresco/repo/node/archive/GetArchivedNodesCannedQuery.java b/repository/src/main/java/org/alfresco/repo/node/archive/GetArchivedNodesCannedQuery.java index 7ca1d9b2c3..a358f6377d 100644 --- a/repository/src/main/java/org/alfresco/repo/node/archive/GetArchivedNodesCannedQuery.java +++ b/repository/src/main/java/org/alfresco/repo/node/archive/GetArchivedNodesCannedQuery.java @@ -36,6 +36,7 @@ import org.alfresco.repo.domain.query.CannedQueryDAO; import org.alfresco.repo.security.permissions.impl.acegi.AbstractCannedQueryPermissions; import org.alfresco.repo.security.permissions.impl.acegi.MethodSecurityBean; import org.alfresco.service.cmr.repository.NodeRef; +import org.alfresco.util.Pair; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -51,6 +52,7 @@ public class GetArchivedNodesCannedQuery extends AbstractCannedQueryPermissions< private static final String QUERY_NAMESPACE = "alfresco.query.archivednodes"; private static final String QUERY_SELECT_GET_ARCHIVED_NODES = "select_GetArchivedNodesCannedQuery"; + private static final String QUERY_SELECT_COUNT_ARCHIVED_NODES = "select_CountAllArchivedNodes"; private CannedQueryDAO cannedQueryDAO; private NodeDAO nodeDAO; @@ -75,18 +77,18 @@ public class GetArchivedNodesCannedQuery extends AbstractCannedQueryPermissions< // Get parameters GetArchivedNodesCannedQueryParams paramBean = (GetArchivedNodesCannedQueryParams) paramBeanObj; - + if (paramBean.getParentNodeId() == null || paramBean.getParentNodeId() < 0) { return Collections.emptyList(); } - int resultsRequired = parameters.getResultsRequired(); - paramBean.setLimit(resultsRequired); + int offset = parameters.getPageDetails().getSkipResults(); + int limit = parameters.getPageDetails().getPageSize(); // note: refer to SQL for specific DB filtering and sorting List results = cannedQueryDAO.executeQuery(QUERY_NAMESPACE, - QUERY_SELECT_GET_ARCHIVED_NODES, paramBean, 0, Integer.MAX_VALUE); + QUERY_SELECT_GET_ARCHIVED_NODES, paramBean, offset, limit); List nodeRefs = new ArrayList(results.size()); for (ArchivedNodeEntity entity : results) @@ -119,4 +121,38 @@ public class GetArchivedNodesCannedQuery extends AbstractCannedQueryPermissions< + (System.currentTimeMillis() - start) + " msecs"); } } + + @Override + protected Pair getTotalResultCount(List results) + { + Object paramBeanObj = super.getParameters().getParameterBean(); + if (paramBeanObj == null) + { + throw new NullPointerException( + "Required parameters not provided for GetArchivedNodes canned query, unexpected null value for query params"); + } + + GetArchivedNodesCannedQueryParams paramBean = (GetArchivedNodesCannedQueryParams) paramBeanObj; + if (paramBean.getParentNodeId() == null) + { + throw new NullPointerException( + "Required parameters not provided for GetArchivedNodes canned queryUnexpected null value for parentNodeId"); + } + + Long totalResultCountLongValue = cannedQueryDAO.executeCountQuery(QUERY_NAMESPACE, QUERY_SELECT_COUNT_ARCHIVED_NODES, paramBean); + + int totalResultCount = totalResultCountLongValue.intValue(); + if (totalResultCount < 0) + { + totalResultCount = Integer.MAX_VALUE; + } + + return new Pair<>(totalResultCount, totalResultCount); + } + + @Override + protected boolean isApplyPostQueryPaging() + { + return false; + } } diff --git a/repository/src/main/resources/alfresco/ibatis/org.alfresco.repo.domain.dialect.Dialect/query-archived-nodes-common-SqlMap.xml b/repository/src/main/resources/alfresco/ibatis/org.alfresco.repo.domain.dialect.Dialect/query-archived-nodes-common-SqlMap.xml index eece3944fa..1d9e55280f 100644 --- a/repository/src/main/resources/alfresco/ibatis/org.alfresco.repo.domain.dialect.Dialect/query-archived-nodes-common-SqlMap.xml +++ b/repository/src/main/resources/alfresco/ibatis/org.alfresco.repo.domain.dialect.Dialect/query-archived-nodes-common-SqlMap.xml @@ -10,4 +10,8 @@ limit ${limit} + + \ No newline at end of file