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;
}
- }
+ });
}
}
}