diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/rm-service-context.xml b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/rm-service-context.xml index 9377be06c2..7a903fc7b8 100644 --- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/rm-service-context.xml +++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/rm-service-context.xml @@ -1569,7 +1569,7 @@ org.alfresco.module.org_alfresco_module_rm.hold.HoldService.getHoldReason=RM.Read.0 org.alfresco.module.org_alfresco_module_rm.hold.HoldService.setHoldReason=RM_CAP.0.rma:filePlanComponent.EditHold org.alfresco.module.org_alfresco_module_rm.hold.HoldService.deleteHold=RM_CAP.0.rma:filePlanComponent.DeleteHold - org.alfresco.module.org_alfresco_module_rm.hold.HoldService.addToHold=RM_CAP.0.rma:filePlanComponent.AddToHold, ACL_NODE.1.sys:base.Write + org.alfresco.module.org_alfresco_module_rm.hold.HoldService.addToHold=RM_CAP.0.rma:filePlanComponent.AddToHold org.alfresco.module.org_alfresco_module_rm.hold.HoldService.addToHolds=RM_ALLOW org.alfresco.module.org_alfresco_module_rm.hold.HoldService.removeFromHold=RM_CAP.0.rma:filePlanComponent.RemoveFromHold org.alfresco.module.org_alfresco_module_rm.hold.HoldService.removeFromHolds=RM_ALLOW diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/freeze/FreezeServiceImpl.java b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/freeze/FreezeServiceImpl.java index 809094fc34..63a6c9cdb1 100644 --- a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/freeze/FreezeServiceImpl.java +++ b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/freeze/FreezeServiceImpl.java @@ -28,6 +28,9 @@ package org.alfresco.module.org_alfresco_module_rm.freeze; +import static org.alfresco.model.ContentModel.TYPE_FOLDER; +import static org.alfresco.repo.site.SiteModel.ASPECT_SITE_CONTAINER; + import java.io.Serializable; import java.util.ArrayList; import java.util.Date; @@ -273,8 +276,9 @@ public class FreezeServiceImpl extends ServiceBaseImpl boolean result = false; - // check that we are dealing with a record folder - if (isRecordFolder(nodeRef)) + // check that we are dealing with a record folder or a collaboration folder + if (isRecordFolder(nodeRef) || + (instanceOf(nodeRef, TYPE_FOLDER) && !nodeService.hasAspect(nodeRef, ASPECT_SITE_CONTAINER))) { int heldCount = 0; @@ -303,8 +307,8 @@ public class FreezeServiceImpl extends ServiceBaseImpl { for (ChildAssociationRef childAssociationRef : childAssocs) { - NodeRef record = childAssociationRef.getChildRef(); - if (childAssociationRef.isPrimary() && isRecord(record) && isFrozen(record)) + NodeRef childRef = childAssociationRef.getChildRef(); + if (childAssociationRef.isPrimary() && isFrozen(childRef)) { heldCount ++; } diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/hold/HoldServiceImpl.java b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/hold/HoldServiceImpl.java index 046a0ca8d2..7e769ec9b2 100644 --- a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/hold/HoldServiceImpl.java +++ b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/hold/HoldServiceImpl.java @@ -539,19 +539,23 @@ public class HoldServiceImpl extends ServiceBaseImpl ParameterCheck.mandatoryCollection("holds", holds); ParameterCheck.mandatory("nodeRef", nodeRef); + String nodeName = (String) nodeService.getProperty(nodeRef, ContentModel.PROP_NAME); if (!isRecord(nodeRef) && !isRecordFolder(nodeRef) && !instanceOf(nodeRef, ContentModel.TYPE_CONTENT)) { - String nodeName = (String) nodeService.getProperty(nodeRef, ContentModel.PROP_NAME); - // TODO error message needs to be changed - throw new AlfrescoRuntimeException("'" + nodeName + "' is neither a record nor a record folder. Only records or record folders can be added to a hold."); + throw new AlfrescoRuntimeException("'" + nodeName + "' is neither a record nor a record folder nor a document. " + + "Only records, record folders or active content can be added to a hold."); } if ((isRecord(nodeRef) || isRecordFolder(nodeRef)) && permissionService.hasPermission(nodeRef, RMPermissionModel.FILING) == AccessStatus.DENIED) { - String nodeName = (String) nodeService.getProperty(nodeRef, ContentModel.PROP_NAME); throw new AlfrescoRuntimeException("Filing permission on '" + nodeName + "' is needed."); } + else if (instanceOf(nodeRef, ContentModel.TYPE_CONTENT) && + permissionService.hasPermission(nodeRef, PermissionService.WRITE) == AccessStatus.DENIED) + { + throw new AlfrescoRuntimeException("Write permission on '" + nodeName + "' is needed."); + } for (final NodeRef hold : holds) { @@ -563,7 +567,6 @@ public class HoldServiceImpl extends ServiceBaseImpl if (permissionService.hasPermission(hold, RMPermissionModel.FILING) == AccessStatus.DENIED) { - String nodeName = (String) nodeService.getProperty(nodeRef, ContentModel.PROP_NAME); String holdName = (String) nodeService.getProperty(hold, ContentModel.PROP_NAME); throw new AlfrescoRuntimeException("'" + nodeName + "' can't be added to the hold container as filing permission for '" + holdName + "' is needed."); } diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/aspect/FrozenAspect.java b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/aspect/FrozenAspect.java index ea933e5185..958b808000 100644 --- a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/aspect/FrozenAspect.java +++ b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/aspect/FrozenAspect.java @@ -27,6 +27,8 @@ package org.alfresco.module.org_alfresco_module_rm.model.rma.aspect; +import static org.alfresco.model.ContentModel.TYPE_CONTENT; + import java.util.List; import org.alfresco.module.org_alfresco_module_rm.fileplan.FilePlanService; @@ -148,25 +150,24 @@ public class FrozenAspect extends BaseBehaviourBean kind = BehaviourKind.CLASS, notificationFrequency = NotificationFrequency.TRANSACTION_COMMIT ) - public void onAddAspect(final NodeRef record, final QName aspectTypeQName) + public void onAddAspect(final NodeRef nodeRef, final QName aspectTypeQName) { AuthenticationUtil.runAsSystem(new RunAsWork() { @Override public Void doWork() { - if (nodeService.exists(record) && - isRecord(record)) + if (nodeService.exists(nodeRef) && (isRecord(nodeRef) || instanceOf(nodeRef, TYPE_CONTENT))) { - // get the owning record folder - NodeRef recordFolder = nodeService.getPrimaryParent(record).getParentRef(); + // get the owning nodeRef folder + NodeRef parentRef = nodeService.getPrimaryParent(nodeRef).getParentRef(); // check that the aspect has been added - if (nodeService.hasAspect(recordFolder, ASPECT_HELD_CHILDREN)) + if (nodeService.hasAspect(parentRef, ASPECT_HELD_CHILDREN)) { // increment current count - int currentCount = (Integer)nodeService.getProperty(recordFolder, PROP_HELD_CHILDREN_COUNT); + int currentCount = (Integer) nodeService.getProperty(parentRef, PROP_HELD_CHILDREN_COUNT); currentCount = currentCount + 1; - nodeService.setProperty(recordFolder, PROP_HELD_CHILDREN_COUNT, currentCount); + nodeService.setProperty(parentRef, PROP_HELD_CHILDREN_COUNT, currentCount); } } return null;