From c72553b725947d48b5520f30e050b5bf0925093a Mon Sep 17 00:00:00 2001 From: Alan Davis Date: Fri, 20 Sep 2013 20:49:30 +0000 Subject: [PATCH] Merged HEAD-BUG-FIX to HEAD (4.2) 55501: Merged V4.1-BUG-FIX (4.1.7) to HEAD-BUG-FIX (4.2) << Had a conflict on merge - think it is okay >> 55463: Merged V4.1.6 (4.1.6) to V4.1-BUG-FIX (4.1.7) 55227: MNT-9074: Merged V4.1.6-PATCHES-2013_09_03 to PATCHES/V4.1.6 55046: MNT-9074 : My Tasks fails to render if tasks quantity is excessive Were implemented code for getting definite count of workflow instances and applying them to page. It makes the opening page more quickly. git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@55782 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../workflow/AbstractWorkflowWebscript.java | 26 ++++++++++++++++++- .../workflow/WorkflowInstancesGet.java | 20 ++++++++++---- 2 files changed, 40 insertions(+), 6 deletions(-) diff --git a/source/java/org/alfresco/repo/web/scripts/workflow/AbstractWorkflowWebscript.java b/source/java/org/alfresco/repo/web/scripts/workflow/AbstractWorkflowWebscript.java index 6cfdc79fb2..514130d04f 100644 --- a/source/java/org/alfresco/repo/web/scripts/workflow/AbstractWorkflowWebscript.java +++ b/source/java/org/alfresco/repo/web/scripts/workflow/AbstractWorkflowWebscript.java @@ -18,6 +18,7 @@ */ package org.alfresco.repo.web.scripts.workflow; +import java.lang.reflect.Field; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; @@ -227,7 +228,17 @@ public abstract class AbstractWorkflowWebscript extends DeclarativeWebScript protected Map createResultModel(WebScriptRequest req, String dataPropertyName, List> results) { - int totalItems = results.size(); + // MNT-9074 My Tasks fails to render if tasks quantity is excessive + int totalItems = 0; + try + { + totalItems = getCapacity(results); + } + catch (Exception e) + { + totalItems = results.size(); + } + int maxItems = getIntParameter(req, PARAM_MAX_ITEMS, DEFAULT_MAX_ITEMS); int skipCount = getIntParameter(req, PARAM_SKIP_COUNT, DEFAULT_SKIP_COUNT); @@ -243,6 +254,19 @@ public abstract class AbstractWorkflowWebscript extends DeclarativeWebScript return model; } + /** + * Get capacity instaead of size of list + * MNT-9074 My Tasks fails to render if tasks quantity is excessive + * @param list + * @return capacity of list + * @throws Exception + */ + private int getCapacity(List list) throws Exception { + Field dataField = ArrayList.class.getDeclaredField("elementData"); + dataField.setAccessible(true); + return ((Object[]) dataField.get(list)).length; + } + /** * Make the pagination for given list of objects * diff --git a/source/java/org/alfresco/repo/web/scripts/workflow/WorkflowInstancesGet.java b/source/java/org/alfresco/repo/web/scripts/workflow/WorkflowInstancesGet.java index ffe5500629..d5172cab8f 100644 --- a/source/java/org/alfresco/repo/web/scripts/workflow/WorkflowInstancesGet.java +++ b/source/java/org/alfresco/repo/web/scripts/workflow/WorkflowInstancesGet.java @@ -149,16 +149,26 @@ public class WorkflowInstancesGet extends AbstractWorkflowWebscript { workflowInstanceQuery.setWorkflowDefinitionId(workflowDefinitionId); } - workflows.addAll(workflowService.getWorkflows(workflowInstanceQuery)); - // sort workflows by due date - Collections.sort(workflows, workflowComparator); + // MNT-9074 My Tasks fails to render if tasks quantity is excessive + int maxItems = getIntParameter(req, PARAM_MAX_ITEMS, DEFAULT_MAX_ITEMS); + int skipCount = getIntParameter(req, PARAM_SKIP_COUNT, DEFAULT_SKIP_COUNT); - List> results = new ArrayList>(workflows.size()); + workflows.addAll(workflowService.getWorkflows(workflowInstanceQuery, maxItems, skipCount)); + + int total = (int) workflowService.countWorkflows(workflowInstanceQuery); + + List> results = new ArrayList>(total); + + // init empty list + results.addAll(Arrays.asList((Map[]) new Map[total])); for (WorkflowInstance workflow : workflows) { - results.add(modelBuilder.buildSimple(workflow)); + // set to special index + results.set(skipCount, modelBuilder.buildSimple(workflow)); + + skipCount++; } // create and return results, paginated if necessary