From 4c42b2cdf682bbcaeb08bded2eb45795fe949b57 Mon Sep 17 00:00:00 2001 From: Roxana Lucanu-Ghetu Date: Fri, 2 Feb 2018 16:11:38 +0200 Subject: [PATCH] RM-5733 Changed the way retention as of date is calculated. --- ...spositionActionDefinitionUpdateAction.java | 2 +- .../disposition/DispositionService.java | 4 +- .../disposition/DispositionServiceImpl.java | 37 +++++++++++++------ ...nActionDefinitionUpdateActionUnitTest.java | 4 +- .../DispositionServiceImplUnitTest.java | 4 +- 5 files changed, 32 insertions(+), 19 deletions(-) diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/action/impl/BroadcastDispositionActionDefinitionUpdateAction.java b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/action/impl/BroadcastDispositionActionDefinitionUpdateAction.java index b21d714dd4..05bcc4348b 100644 --- a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/action/impl/BroadcastDispositionActionDefinitionUpdateAction.java +++ b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/action/impl/BroadcastDispositionActionDefinitionUpdateAction.java @@ -253,7 +253,7 @@ public class BroadcastDispositionActionDefinitionUpdateAction extends RMActionEx { NodeRef dispositionedNode = getNodeService().getPrimaryParent(nextAction.getNodeRef()).getParentRef(); DispositionActionDefinition definition = nextAction.getDispositionActionDefinition(); - Date newAsOfDate = getDispositionService().calculateAsOfDate(dispositionedNode, definition, false); + Date newAsOfDate = getDispositionService().calculateAsOfDate(dispositionedNode, definition); if (logger.isDebugEnabled()) { diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/disposition/DispositionService.java b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/disposition/DispositionService.java index f9fa77e9f1..dd018e396c 100644 --- a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/disposition/DispositionService.java +++ b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/disposition/DispositionService.java @@ -260,11 +260,9 @@ public interface DispositionService * * @param nodeRef The node which the schedule applies to. * @param dispositionActionDefinition The definition of the disposition action. - * @param allowContextFromAsOf true if the context date is allowed to be obtained from the disposition "as of" property. * @return The new "disposition as of" date. */ - Date calculateAsOfDate(NodeRef nodeRef, DispositionActionDefinition dispositionActionDefinition, - boolean allowContextFromAsOf); + Date calculateAsOfDate(NodeRef nodeRef, DispositionActionDefinition dispositionActionDefinition); /** * Gets the origin disposition schedule for the record, not the calculated one diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/disposition/DispositionServiceImpl.java b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/disposition/DispositionServiceImpl.java index d07034fd4c..9a26ee5317 100644 --- a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/disposition/DispositionServiceImpl.java +++ b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/disposition/DispositionServiceImpl.java @@ -699,7 +699,6 @@ public class DispositionServiceImpl extends ServiceBaseImpl * * @param nodeRef node reference * @param dispositionActionDefinition disposition action definition - * @param allowContextFromAsOf true if the context date is allowed to be obtained from the disposition "as of" property. */ private DispositionAction initialiseDispositionAction(NodeRef nodeRef, DispositionActionDefinition dispositionActionDefinition, boolean allowContextFromAsOf) { @@ -712,7 +711,7 @@ public class DispositionServiceImpl extends ServiceBaseImpl // Create the properties Map props = new HashMap(10); - Date asOfDate = calculateAsOfDate(nodeRef, dispositionActionDefinition, allowContextFromAsOf); + Date asOfDate = calculateAsOfDate(nodeRef, dispositionActionDefinition); // Set the property values props.put(PROP_DISPOSITION_ACTION_ID, dispositionActionDefinition.getId()); @@ -750,8 +749,7 @@ public class DispositionServiceImpl extends ServiceBaseImpl * @return The new "disposition as of" date. */ @Override - public Date calculateAsOfDate(NodeRef nodeRef, DispositionActionDefinition dispositionActionDefinition, - boolean allowContextFromAsOf) + public Date calculateAsOfDate(NodeRef nodeRef, DispositionActionDefinition dispositionActionDefinition) { // Calculate the asOf date Date asOfDate = null; @@ -762,12 +760,29 @@ public class DispositionServiceImpl extends ServiceBaseImpl // Get the period properties value QName periodProperty = dispositionActionDefinition.getPeriodProperty(); - if (periodProperty != null && (allowContextFromAsOf - || !RecordsManagementModel.PROP_DISPOSITION_AS_OF.equals(periodProperty))) + if (periodProperty != null) +// && (allowContextFromAsOf +// || !RecordsManagementModel.PROP_DISPOSITION_AS_OF.equals(periodProperty))) { - // doesn't matter if the period property isn't set ... the asOfDate will get updated later - // when the value of the period property is set - contextDate = (Date)this.nodeService.getProperty(nodeRef, periodProperty); + if (RecordsManagementModel.PROP_DISPOSITION_AS_OF.equals(periodProperty)) + { + DispositionAction lastCompletedDispositionAction = getLastCompletedDispostionAction(nodeRef); + if (lastCompletedDispositionAction != null) + { + contextDate = lastCompletedDispositionAction.getCompletedAt(); + } + else + { + contextDate = (Date)this.nodeService.getProperty(nodeRef, periodProperty); + } + + } + else + { + // doesn't matter if the period property isn't set ... the asOfDate will get updated later + // when the value of the period property is set + contextDate = (Date)this.nodeService.getProperty(nodeRef, periodProperty); + } } else { @@ -1097,7 +1112,7 @@ public class DispositionServiceImpl extends ServiceBaseImpl if (assoc != null && assoc.getQName().getLocalName().contains(dispositionActionName)) { DispositionActionDefinition actionDefinition = ds.getDispositionActionDefinition(assoc.getChildRef().getId()); - return calculateAsOfDate(record, actionDefinition, true); + return calculateAsOfDate(record, actionDefinition); } } } @@ -1319,7 +1334,7 @@ public class DispositionServiceImpl extends ServiceBaseImpl } else if (firstDispositionActionDef.getPeriod() != null) { - Date firstActionDate = calculateAsOfDate(record, firstDispositionActionDef, true); + Date firstActionDate = calculateAsOfDate(record, firstDispositionActionDef); if (firstActionDate == null || (newDispositionActionDateAsOf != null && newDispositionActionDateAsOf.before(firstActionDate))) { diff --git a/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/action/impl/BroadcastDispositionActionDefinitionUpdateActionUnitTest.java b/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/action/impl/BroadcastDispositionActionDefinitionUpdateActionUnitTest.java index 6dfb7f4f61..192c8e1d9d 100644 --- a/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/action/impl/BroadcastDispositionActionDefinitionUpdateActionUnitTest.java +++ b/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/action/impl/BroadcastDispositionActionDefinitionUpdateActionUnitTest.java @@ -102,7 +102,7 @@ public class BroadcastDispositionActionDefinitionUpdateActionUnitTest when(mockAction.getName()).thenReturn("mockAction"); // Set up the disposition service to return a known "disposition as of" date. Date asOfDate = new Date(); - when(mockDispositionService.calculateAsOfDate(CONTENT_NODE_REF, mockDispositionActionDefinition, false)) + when(mockDispositionService.calculateAsOfDate(CONTENT_NODE_REF, mockDispositionActionDefinition)) .thenReturn(asOfDate); // Call the method under test. @@ -160,7 +160,7 @@ public class BroadcastDispositionActionDefinitionUpdateActionUnitTest when(mockAction.getParameterValue(CHANGED_PROPERTIES)).thenReturn((Serializable) asList(PROP_DISPOSITION_PERIOD_PROPERTY)); // Set up the expected "as of" date. Date newAsOfDate = new Date(123456789000L); - when(mockDispositionService.calculateAsOfDate(recordNode, mockActionDefinition, false)).thenReturn(newAsOfDate); + when(mockDispositionService.calculateAsOfDate(recordNode, mockActionDefinition)).thenReturn(newAsOfDate); // Call the method under test. action.executeImpl(mockAction, definitionNode); diff --git a/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/disposition/DispositionServiceImplUnitTest.java b/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/disposition/DispositionServiceImplUnitTest.java index cb3dd02875..a5b3f273c5 100644 --- a/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/disposition/DispositionServiceImplUnitTest.java +++ b/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/disposition/DispositionServiceImplUnitTest.java @@ -82,7 +82,7 @@ public class DispositionServiceImplUnitTest when(mockPeriod.getNextDate(createdDate)).thenReturn(nextDate); // Call the method under test. - Date asOfDate = dispositionService.calculateAsOfDate(CONTENT_NODE_REF, mockDispositionActionDefinition, true); + Date asOfDate = dispositionService.calculateAsOfDate(CONTENT_NODE_REF, mockDispositionActionDefinition); assertEquals("Unexpected calculation for 'as of' date", nextDate, asOfDate); } @@ -95,7 +95,7 @@ public class DispositionServiceImplUnitTest when(mockDispositionActionDefinition.getPeriod()).thenReturn(null); // Call the method under test. - Date asOfDate = dispositionService.calculateAsOfDate(CONTENT_NODE_REF, mockDispositionActionDefinition, true); + Date asOfDate = dispositionService.calculateAsOfDate(CONTENT_NODE_REF, mockDispositionActionDefinition); assertNull("It should not be possible to determine the 'as of' date.", asOfDate); }