diff --git a/amps/ags/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/job/DispositionLifecycleJobExecuter.java b/amps/ags/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/job/DispositionLifecycleJobExecuter.java index 9dcc126f20..3217505fa5 100644 --- a/amps/ags/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/job/DispositionLifecycleJobExecuter.java +++ b/amps/ags/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/job/DispositionLifecycleJobExecuter.java @@ -30,8 +30,10 @@ package org.alfresco.module.org_alfresco_module_rm.job; import static org.alfresco.module.org_alfresco_module_rm.action.RMDispositionActionExecuterAbstractBase.PARAM_NO_ERROR_CHECK; import java.io.Serializable; +import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; import lombok.extern.slf4j.Slf4j; import org.alfresco.error.AlfrescoRuntimeException; @@ -47,7 +49,6 @@ import org.alfresco.service.cmr.search.ResultSet; import org.alfresco.service.cmr.search.SearchParameters; import org.alfresco.service.cmr.search.SearchService; import org.alfresco.service.cmr.security.PersonService; -import org.springframework.extensions.surf.util.I18NUtil; /** @@ -64,7 +65,6 @@ public class DispositionLifecycleJobExecuter extends RecordsManagementJobExecute /** batching properties */ private int batchSize; public static final int DEFAULT_BATCH_SIZE = 500; - private static final String MSG_NODE_FROZEN = "rm.action.node.frozen.error-message"; /** list of disposition actions to automatically execute */ private List dispositionActions; @@ -194,6 +194,7 @@ public class DispositionLifecycleJobExecuter extends RecordsManagementJobExecute boolean hasMore = true; int skipCount = 0; + List resultNodes = new ArrayList<>(); if (batchSize < 1) { @@ -214,7 +215,14 @@ public class DispositionLifecycleJobExecuter extends RecordsManagementJobExecute // execute search ResultSet results = searchService.query(params); - List resultNodes = results.getNodeRefs(); + if(results != null) + { + // filtering out the hold/freezed cases from the result set + resultNodes = + results.getNodeRefs().stream().filter(node -> nodeService.getPrimaryParent(node) == null ? + !freezeService.isFrozenOrHasFrozenChildren(node) : + !freezeService.isFrozenOrHasFrozenChildren(nodeService.getPrimaryParent(node).getParentRef())).collect(Collectors.toList()); + } hasMore = results.hasMore(); skipCount += resultNodes.size(); // increase by page size results.close(); @@ -265,12 +273,6 @@ public class DispositionLifecycleJobExecuter extends RecordsManagementJobExecute } Map props = Map.of(PARAM_NO_ERROR_CHECK, false); - if (freezeService.isFrozenOrHasFrozenChildren(parent.getParentRef())) - { - log.debug(I18NUtil.getMessage(MSG_NODE_FROZEN, dispAction)); - continue; - } - try { // execute disposition action diff --git a/amps/ags/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/job/DispositionLifecycleJobExecuterUnitTest.java b/amps/ags/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/job/DispositionLifecycleJobExecuterUnitTest.java index fa5df76e58..027610f97d 100644 --- a/amps/ags/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/job/DispositionLifecycleJobExecuterUnitTest.java +++ b/amps/ags/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/job/DispositionLifecycleJobExecuterUnitTest.java @@ -170,7 +170,7 @@ public class DispositionLifecycleJobExecuterUnitTest extends BaseUnitTest executer.executeImpl(); // then - + verify(mockedNodeService, times(2)).getPrimaryParent(any(NodeRef.class)); // ensure the query is executed and closed verifyQueryTimes(2); @@ -206,7 +206,7 @@ public class DispositionLifecycleJobExecuterUnitTest extends BaseUnitTest executer.executeImpl(); // then - + verify(mockedNodeService, times(1)).getPrimaryParent(any(NodeRef.class)); // ensure the query is executed and closed verifyQueryTimes(1); @@ -262,11 +262,11 @@ public class DispositionLifecycleJobExecuterUnitTest extends BaseUnitTest // ensure each node is process correctly // node1 verify(mockedNodeService, times(1)).getProperty(node1, RecordsManagementModel.PROP_DISPOSITION_ACTION); - verify(mockedNodeService, times(1)).getPrimaryParent(node1); + verify(mockedNodeService, times(3)).getPrimaryParent(node1); verify(mockedRecordsManagementActionService, times(1)).executeRecordsManagementAction(eq(parent), eq(CUTOFF), anyMap()); // node2 verify(mockedNodeService, times(1)).getProperty(node2, RecordsManagementModel.PROP_DISPOSITION_ACTION); - verify(mockedNodeService, times(1)).getPrimaryParent(node2); + verify(mockedNodeService, times(3)).getPrimaryParent(node2); verify(mockedRecordsManagementActionService, times(1)).executeRecordsManagementAction(eq(parent), eq(RETAIN), anyMap()); // ensure no more interactions @@ -329,7 +329,7 @@ public class DispositionLifecycleJobExecuterUnitTest extends BaseUnitTest // call the service executer.executeImpl(); - // check the loop iterated trough all the elements + // check the loop iterated through all the elements verify(mockedNodeService).exists(node1); verify(mockedNodeService).exists(node2); verify(mockedNodeService).exists(node3);