diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/capability/rm-capabilities-recordfolder-context.xml b/rm-server/config/alfresco/module/org_alfresco_module_rm/capability/rm-capabilities-recordfolder-context.xml index 0cde4ca7b6..267220f657 100644 --- a/rm-server/config/alfresco/module/org_alfresco_module_rm/capability/rm-capabilities-recordfolder-context.xml +++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/capability/rm-capabilities-recordfolder-context.xml @@ -16,7 +16,7 @@ - + @@ -73,7 +73,7 @@ - + diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/hold/HoldServiceImpl.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/hold/HoldServiceImpl.java index 6556e3255c..a6595d3b26 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/hold/HoldServiceImpl.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/hold/HoldServiceImpl.java @@ -432,7 +432,7 @@ public class HoldServiceImpl extends ServiceBaseImpl * @see org.alfresco.module.org_alfresco_module_rm.hold.HoldService#addToHolds(java.util.List, org.alfresco.service.cmr.repository.NodeRef) */ @Override - public void addToHolds(List holds, NodeRef nodeRef) + public void addToHolds(final List holds, final NodeRef nodeRef) { ParameterCheck.mandatoryCollection("holds", holds); ParameterCheck.mandatory("nodeRef", nodeRef); @@ -442,7 +442,7 @@ public class HoldServiceImpl extends ServiceBaseImpl throw new AlfrescoRuntimeException("Can only add records or record folders to a hold."); } - for (NodeRef hold : holds) + for (final NodeRef hold : holds) { if (!isHold(hold)) { @@ -452,47 +452,57 @@ public class HoldServiceImpl extends ServiceBaseImpl // check that the node isn't already in the hold if (!getHeld(hold).contains(nodeRef)) { - // Link the record to the hold - nodeService.addChild(hold, nodeRef, ASSOC_FROZEN_RECORDS, ASSOC_FROZEN_RECORDS); - - // gather freeze properties - Map props = new HashMap(2); - props.put(PROP_FROZEN_AT, new Date()); - props.put(PROP_FROZEN_BY, AuthenticationUtil.getFullyAuthenticatedUser()); - - if (!nodeService.hasAspect(nodeRef, ASPECT_FROZEN)) + // run as system to ensure we have all the appropriate premissions to perform the manipulations we require + runAsSystem(new RunAsWork() { - // add freeze aspect - nodeService.addAspect(nodeRef, ASPECT_FROZEN, props); - - if (logger.isDebugEnabled()) + @Override + public Void doWork() throws Exception { - StringBuilder msg = new StringBuilder(); - msg.append("Frozen aspect applied to '").append(nodeRef).append("'."); - logger.debug(msg.toString()); - } - } + // Link the record to the hold + nodeService.addChild(hold, nodeRef, ASSOC_FROZEN_RECORDS, ASSOC_FROZEN_RECORDS); - // Mark all the folders contents as frozen - if (isRecordFolder(nodeRef)) - { - List records = recordService.getRecords(nodeRef); - for (NodeRef record : records) - { - // no need to freeze if already frozen! - if (!nodeService.hasAspect(record, ASPECT_FROZEN)) + // gather freeze properties + Map props = new HashMap(2); + props.put(PROP_FROZEN_AT, new Date()); + props.put(PROP_FROZEN_BY, AuthenticationUtil.getFullyAuthenticatedUser()); + + if (!nodeService.hasAspect(nodeRef, ASPECT_FROZEN)) { - nodeService.addAspect(record, ASPECT_FROZEN, props); + // add freeze aspect + nodeService.addAspect(nodeRef, ASPECT_FROZEN, props); if (logger.isDebugEnabled()) { StringBuilder msg = new StringBuilder(); - msg.append("Frozen aspect applied to '").append(record).append("'."); + msg.append("Frozen aspect applied to '").append(nodeRef).append("'."); logger.debug(msg.toString()); } } + + // Mark all the folders contents as frozen + if (isRecordFolder(nodeRef)) + { + List records = recordService.getRecords(nodeRef); + for (NodeRef record : records) + { + // no need to freeze if already frozen! + if (!nodeService.hasAspect(record, ASPECT_FROZEN)) + { + nodeService.addAspect(record, ASPECT_FROZEN, props); + + if (logger.isDebugEnabled()) + { + StringBuilder msg = new StringBuilder(); + msg.append("Frozen aspect applied to '").append(record).append("'."); + logger.debug(msg.toString()); + } + } + } + } + + return null; } - } + }); } } }