From c3e03ca837c3f3e568a8ae45be5c15d1dbb83271 Mon Sep 17 00:00:00 2001 From: mohit-singh4 Date: Thu, 27 Jun 2024 10:41:36 +0530 Subject: [PATCH] [MNT-24127] Added Endpoint to Calculate Size of the folder with Integration Test Cases [ags][tas] --- .../api/nodes/NodeFolderSizeRelation.java | 4 +-- .../rest/api/tests/NodeFolderSizeApiTest.java | 4 +++ .../executer/NodeSizeActionExecuter.java | 25 +++++++++++++++---- 3 files changed, 25 insertions(+), 8 deletions(-) diff --git a/remote-api/src/main/java/org/alfresco/rest/api/nodes/NodeFolderSizeRelation.java b/remote-api/src/main/java/org/alfresco/rest/api/nodes/NodeFolderSizeRelation.java index 9889dbd2df..2897bb05e9 100644 --- a/remote-api/src/main/java/org/alfresco/rest/api/nodes/NodeFolderSizeRelation.java +++ b/remote-api/src/main/java/org/alfresco/rest/api/nodes/NodeFolderSizeRelation.java @@ -135,7 +135,6 @@ public class NodeFolderSizeRelation implements RelationshipResourceAction.Calcul Map result = new HashMap<>(); resetFolderOutput.put("status","IN-PROGRESS"); nodeService.setProperty(nodeRef, FolderSizeModel.PROP_OUTPUT, (Serializable) resetFolderOutput); - nodeService.setProperty(nodeRef, FolderSizeModel.PROP_ERROR,null); validatePermissions(nodeRef, nodeId); @@ -164,8 +163,7 @@ public class NodeFolderSizeRelation implements RelationshipResourceAction.Calcul @Override @WebApiDescription(title = "Returns Folder Node Size", description = "Returning a Folder Node Size") - @WebApiParameters({ - @WebApiParam(name = "nodeId", title = "The unique id of the Node being addressed", description = "A single node id")}) + @WebApiParameters({@WebApiParam(name = "nodeId", title = "The unique id of the Node being addressed", description = "A single node id")}) public Map readById(String nodeId, String id, Parameters parameters) { NodeRef nodeRef = nodes.validateNode(nodeId); diff --git a/remote-api/src/test/java/org/alfresco/rest/api/tests/NodeFolderSizeApiTest.java b/remote-api/src/test/java/org/alfresco/rest/api/tests/NodeFolderSizeApiTest.java index 69dbf091a6..23297d891b 100644 --- a/remote-api/src/test/java/org/alfresco/rest/api/tests/NodeFolderSizeApiTest.java +++ b/remote-api/src/test/java/org/alfresco/rest/api/tests/NodeFolderSizeApiTest.java @@ -40,13 +40,17 @@ import org.junit.runners.MethodSorters; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import java.util.Map; import java.util.UUID; import static org.alfresco.rest.api.tests.util.RestApiUtil.toJsonAsStringNonNull; import static org.junit.Assert.assertNotNull; +import javax.validation.constraints.AssertTrue; + /** * V1 REST API tests for Folder size */ diff --git a/repository/src/main/java/org/alfresco/repo/action/executer/NodeSizeActionExecuter.java b/repository/src/main/java/org/alfresco/repo/action/executer/NodeSizeActionExecuter.java index f61b42c2f4..47ed8b433e 100644 --- a/repository/src/main/java/org/alfresco/repo/action/executer/NodeSizeActionExecuter.java +++ b/repository/src/main/java/org/alfresco/repo/action/executer/NodeSizeActionExecuter.java @@ -48,6 +48,7 @@ import java.time.format.DateTimeFormatter; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.concurrent.atomic.AtomicLong; /** * NodeSizeActionExecuter @@ -116,7 +117,6 @@ public class NodeSizeActionExecuter extends ActionExecuterAbstractBase NodeRef nodeRef = actionedUponNodeRef; long totalSize = 0; - long resultSize; ResultSet results; boolean isCalculationCompleted = false; @@ -139,11 +139,25 @@ public class NodeSizeActionExecuter extends ActionExecuterAbstractBase while (!isCalculationCompleted) { - resultSize = results.getNodeRefs().subList(skipCount,totalItems).parallelStream() - .map(id -> nodeService.getProperty(id, ContentModel.PROP_CONTENT)!=null? ((ContentData) nodeService.getProperty(id, ContentModel.PROP_CONTENT)).getSize():0) - .reduce(0L, Long::sum); + List nodeRefs = results.getNodeRefs().subList(skipCount, totalItems); + // Using AtomicLong to accumulate the total size. + AtomicLong resultSize = new AtomicLong(0); + nodeRefs.parallelStream().forEach(id -> { + try + { + ContentData contentData = (ContentData) nodeService.getProperty(id, ContentModel.PROP_CONTENT); + if (contentData != null) + { + resultSize.addAndGet(contentData.getSize()); + } + } + catch (Exception e) + { + resultSize.addAndGet(0); + } + }); - totalSize+=resultSize; + totalSize+=resultSize.longValue(); if (results.getNodeRefs().size() <= totalItems || results.getNodeRefs().size() <= maxItems) { @@ -176,6 +190,7 @@ public class NodeSizeActionExecuter extends ActionExecuterAbstractBase if(isCalculationCompleted) { nodeService.setProperty(nodeRef, FolderSizeModel.PROP_OUTPUT, (Serializable) response); + nodeService.setProperty(nodeRef, FolderSizeModel.PROP_ERROR,null); } }