diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-service-context.xml b/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-service-context.xml index c884558fad..05bf166996 100644 --- a/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-service-context.xml +++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-service-context.xml @@ -93,6 +93,7 @@ + diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/disposition/DispositionServiceImpl.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/disposition/DispositionServiceImpl.java index 470c66ffdd..3883e7a097 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/disposition/DispositionServiceImpl.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/disposition/DispositionServiceImpl.java @@ -33,6 +33,7 @@ import org.alfresco.module.org_alfresco_module_rm.disposition.property.Dispositi import org.alfresco.module.org_alfresco_module_rm.event.RecordsManagementEvent; import org.alfresco.module.org_alfresco_module_rm.fileplan.FilePlanComponentKind; import org.alfresco.module.org_alfresco_module_rm.fileplan.FilePlanService; +import org.alfresco.module.org_alfresco_module_rm.freeze.FreezeService; import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel; import org.alfresco.module.org_alfresco_module_rm.record.RecordService; import org.alfresco.module.org_alfresco_module_rm.recordfolder.RecordFolderService; @@ -87,6 +88,9 @@ public class DispositionServiceImpl extends ServiceBaseImpl /** Record Service */ private RecordService recordService; + /** Freeze Service */ + private FreezeService freezeService; + /** Disposition properties */ private Map dispositionProperties = new HashMap(4); @@ -156,6 +160,14 @@ public class DispositionServiceImpl extends ServiceBaseImpl this.recordService = recordService; } + /** + * @param freezeService freeze service + */ + public void setFreezeService(FreezeService freezeService) + { + this.freezeService = freezeService; + } + /** * Set the dispositionSelectionStrategy bean. * @@ -965,7 +977,7 @@ public class DispositionServiceImpl extends ServiceBaseImpl if (FilePlanComponentKind.RECORD_FOLDER.equals(filePlanService.getFilePlanComponentKind(nodeRef)) || FilePlanComponentKind.RECORD.equals(filePlanService.getFilePlanComponentKind(nodeRef))) { - if (!isDisposableItemCutoff(nodeRef)) + if (!isDisposableItemCutoff(nodeRef) && !isFrozenOrHasFrozenChildren(nodeRef)) { if (recordFolderService.isRecordFolder(nodeRef)) { @@ -999,6 +1011,32 @@ public class DispositionServiceImpl extends ServiceBaseImpl } } + /** + * Helper method to determine if a node is frozen or has frozen children + * + * @param nodeRef Node to be checked + * @return true if the node is frozen or has frozen children, false otherwise + */ + private boolean isFrozenOrHasFrozenChildren(NodeRef nodeRef) + { + boolean result = false; + + if (recordFolderService.isRecordFolder(nodeRef)) + { + result = freezeService.isFrozen(nodeRef) || freezeService.hasFrozenChildren(nodeRef); + } + else if (recordService.isRecord(nodeRef)) + { + result = freezeService.isFrozen(nodeRef); + } + else + { + throw new AlfrescoRuntimeException("The nodeRef '" + nodeRef + "' is neither a record nor a record folder."); + } + + return result; + } + /** * Helper method to apply the cut off *