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 02cafeeea3..48e4dde7e3 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 a7ef8229cc..0ab533e861 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 @@ -268,11 +268,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 b7145500ee..80728b1cec 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 @@ -139,7 +139,7 @@ public class DispositionServiceImpl extends ServiceBaseImpl /** * Set the dictionary service * - * @param dictionaryServic the dictionary service + * @param dictionaryService the dictionary service */ @Override public void setDictionaryService(DictionaryService dictionaryService) @@ -246,7 +246,7 @@ public class DispositionServiceImpl extends ServiceBaseImpl DispositionActionDefinition nextDispositionActionDefinition = dispositionActionDefinitions.get(0); // initialise the details of the next disposition action - initialiseDispositionAction(nodeRef, nextDispositionActionDefinition, true); + initialiseDispositionAction(nodeRef, nextDispositionActionDefinition); } } } @@ -451,7 +451,7 @@ public class DispositionServiceImpl extends ServiceBaseImpl if (this.nodeService.hasAspect(nodeRef, ASPECT_SCHEDULED)) { List childAssocs = this.nodeService.getChildAssocs(nodeRef, ASSOC_DISPOSITION_SCHEDULE, RegexQNamePattern.MATCH_ALL); - if (childAssocs.size() != 0) + if (!childAssocs.isEmpty()) { ChildAssociationRef firstChildAssocRef = childAssocs.get(0); result = firstChildAssocRef.getChildRef(); @@ -474,7 +474,7 @@ public class DispositionServiceImpl extends ServiceBaseImpl if (nodeService.exists(dsNodeRef)) { List assocs = this.nodeService.getParentAssocs(dsNodeRef, ASSOC_DISPOSITION_SCHEDULE, RegexQNamePattern.MATCH_ALL); - if (assocs.size() != 0) + if (!assocs.isEmpty()) { if (assocs.size() != 1) { @@ -534,7 +534,6 @@ public class DispositionServiceImpl extends ServiceBaseImpl * * @param isRecordLevelDisposition * @param rmContainer - * @param root * @return */ private List getDisposableItemsImpl(boolean isRecordLevelDisposition, NodeRef rmContainer) @@ -598,13 +597,13 @@ public class DispositionServiceImpl extends ServiceBaseImpl // Check whether there is already a disposition schedule object present List assocs = nodeService.getChildAssocs(nodeRef, ASSOC_DISPOSITION_SCHEDULE, RegexQNamePattern.MATCH_ALL); - if (assocs.size() == 0) + if (assocs.isEmpty()) { DispositionSchedule currentDispositionSchdule = getDispositionSchedule(nodeRef); if (currentDispositionSchdule != null) { List items = getDisposableItemsImpl(currentDispositionSchdule.isRecordLevelDisposition(), nodeRef); - if (items.size() != 0) + if (!items.isEmpty()) { throw new AlfrescoRuntimeException("Can not create a retention schedule if there are disposable items already under the control of an other retention schedule"); } @@ -686,7 +685,6 @@ public class DispositionServiceImpl extends ServiceBaseImpl * Updates the given disposition action definition belonging to the given disposition * schedule. * - * @param schedule The DispositionSchedule the action belongs to * @param actionDefinition The DispositionActionDefinition to update * @param actionDefinitionParams Map of parameters to use to update the action definition * @return The updated DispositionActionDefinition @@ -713,12 +711,11 @@ 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(final NodeRef nodeRef, DispositionActionDefinition dispositionActionDefinition, boolean allowContextFromAsOf) + private DispositionAction initialiseDispositionAction(final NodeRef nodeRef, DispositionActionDefinition dispositionActionDefinition) { List childAssocs = nodeService.getChildAssocs(nodeRef, ASSOC_NEXT_DISPOSITION_ACTION, ASSOC_NEXT_DISPOSITION_ACTION, 1, true); - if (childAssocs != null && childAssocs.size() > 0) + if (childAssocs != null && !childAssocs.isEmpty()) { return new DispositionActionImpl(serviceRegistry, childAssocs.get(0).getChildRef()); } @@ -726,7 +723,7 @@ public class DispositionServiceImpl extends ServiceBaseImpl // Create the properties final 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()); @@ -787,12 +784,10 @@ public class DispositionServiceImpl extends ServiceBaseImpl * * @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. */ @Override - public Date calculateAsOfDate(NodeRef nodeRef, DispositionActionDefinition dispositionActionDefinition, - boolean allowContextFromAsOf) + public Date calculateAsOfDate(NodeRef nodeRef, DispositionActionDefinition dispositionActionDefinition) { // Calculate the asOf date Date asOfDate = null; @@ -803,12 +798,27 @@ 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) { - // 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 { @@ -910,7 +920,7 @@ public class DispositionServiceImpl extends ServiceBaseImpl { NodeRef result = null; List assocs = nodeService.getChildAssocs(nodeRef, ASSOC_NEXT_DISPOSITION_ACTION, ASSOC_NEXT_DISPOSITION_ACTION, 1, true); - if (assocs.size() != 0) + if (!assocs.isEmpty()) { result = assocs.get(0).getChildRef(); } @@ -1031,7 +1041,7 @@ public class DispositionServiceImpl extends ServiceBaseImpl if (nodeService.hasAspect(nodeRef, ASPECT_DISPOSITION_LIFECYCLE)) { List assocs = nodeService.getChildAssocs(nodeRef, ASSOC_NEXT_DISPOSITION_ACTION, ASSOC_NEXT_DISPOSITION_ACTION); - if (assocs.size() > 0) + if (!assocs.isEmpty()) { currentDispositionAction = assocs.get(0).getChildRef(); } @@ -1086,7 +1096,7 @@ public class DispositionServiceImpl extends ServiceBaseImpl nodeService.addAspect(nodeRef, ASPECT_DISPOSITION_LIFECYCLE, null); } - initialiseDispositionAction(nodeRef, nextDispositionActionDefinition, false); + initialiseDispositionAction(nodeRef, nextDispositionActionDefinition); } } @@ -1159,14 +1169,14 @@ public class DispositionServiceImpl extends ServiceBaseImpl { DispositionSchedule ds = new DispositionScheduleImpl(serviceRegistry, nodeService, dispositionSchedule); List assocs = nodeService.getChildAssocs(dispositionSchedule); - if (assocs != null && assocs.size() > 0) + if (assocs != null && !assocs.isEmpty()) { for (ChildAssociationRef assoc : assocs) { if (assoc != null && assoc.getQName().getLocalName().contains(dispositionActionName)) { DispositionActionDefinition actionDefinition = ds.getDispositionActionDefinition(assoc.getChildRef().getId()); - return calculateAsOfDate(record, actionDefinition, true); + return calculateAsOfDate(record, actionDefinition); } } } @@ -1381,14 +1391,14 @@ public class DispositionServiceImpl extends ServiceBaseImpl { recordOrFolder = folder; } - DispositionAction firstDispositionAction = initialiseDispositionAction(recordOrFolder, firstDispositionActionDef, true); + DispositionAction firstDispositionAction = initialiseDispositionAction(recordOrFolder, firstDispositionActionDef); newAction = firstDispositionAction.getNodeRef(); newDispositionActionName = (String)nodeService.getProperty(newAction, PROP_DISPOSITION_ACTION_NAME); newDispositionActionDateAsOf = firstDispositionAction.getAsOfDate(); } 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 18876b1dcd..929749b0ad 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 fb880d8dda..bc7fd70d61 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); }