diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/messages/action-service.properties b/rm-server/config/alfresco/module/org_alfresco_module_rm/messages/action-service.properties index 693ff7bd03..5c6a7d4daf 100644 --- a/rm-server/config/alfresco/module/org_alfresco_module_rm/messages/action-service.properties +++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/messages/action-service.properties @@ -35,4 +35,5 @@ rm.action.undo-not-last=The cut off can't be undone, because the last dispositio rm.action.records_only_undeclared=Only records can be completed. rm.action.event-not-undone=The event {0} can't be undone, because it's not defined on the disposition lifecycle. rm.action.node-not-record-category=The disposition schedule could not be created, because the actioned upon node ({0}) was not a record category. -rm.action.parameter-not-supplied=The parameter ''{0}'' has not been supplied. \ No newline at end of file +rm.action.parameter-not-supplied=The parameter ''{0}'' has not been supplied. +rm.action.delete-not-hold-type=The hold couldn't be deleted, because the node isn't of type {0}. (actionedUponNodeRef={1}) \ No newline at end of file diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-action-context.xml b/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-action-context.xml index 09d8bc62e4..ea69d4c9e3 100644 --- a/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-action-context.xml +++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-action-context.xml @@ -139,6 +139,7 @@ + - + - + + parent="rmAction"> @@ -1074,7 +1075,7 @@ - + @@ -1085,4 +1086,29 @@ + + + + + + + + + + + + + + + + + + + org.alfresco.module.org_alfresco_module_rm.action.RecordsManagementAction.execute=RM_CAP.0.rma:filePlanComponent.DeleteHoldContainer + org.alfresco.module.org_alfresco_module_rm.action.RecordsManagementAction.*=RM_ALLOW + org.alfresco.repo.action.executer.ActionExecuter.*=RM_ALLOW + + + + \ No newline at end of file diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-ui-evaluators-context.xml b/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-ui-evaluators-context.xml index 059535bd90..82ea286697 100644 --- a/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-ui-evaluators-context.xml +++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-ui-evaluators-context.xml @@ -895,4 +895,15 @@ - + + + + + + HOLD + + + + + \ No newline at end of file diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/RMActionExecuterAbstractBase.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/RMActionExecuterAbstractBase.java index ab6a4032c1..d5dcde31c0 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/RMActionExecuterAbstractBase.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/RMActionExecuterAbstractBase.java @@ -30,6 +30,7 @@ import org.alfresco.module.org_alfresco_module_rm.disposition.DispositionService import org.alfresco.module.org_alfresco_module_rm.event.RecordsManagementEventService; import org.alfresco.module.org_alfresco_module_rm.fileplan.FilePlanComponentKind; import org.alfresco.module.org_alfresco_module_rm.freeze.FreezeService; +import org.alfresco.module.org_alfresco_module_rm.hold.HoldService; import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel; import org.alfresco.module.org_alfresco_module_rm.model.security.ModelSecurityService; import org.alfresco.module.org_alfresco_module_rm.record.RecordService; @@ -113,6 +114,9 @@ public abstract class RMActionExecuterAbstractBase extends PropertySubActionExe /** Record folder service */ protected RecordFolderService recordFolderService; + /** Hold service */ + protected HoldService holdService; + /** List of kinds for which this action is applicable */ protected Set applicableKinds = new HashSet(); @@ -204,7 +208,6 @@ public abstract class RMActionExecuterAbstractBase extends PropertySubActionExe this.recordsManagementEventService = recordsManagementEventService; } - /** * Set the ownable service * @param ownableSerice @@ -266,6 +269,14 @@ public abstract class RMActionExecuterAbstractBase extends PropertySubActionExe this.recordFolderService = recordFolderService; } + /** + * @param holdService hold service + */ + public void setHoldService(HoldService holdService) + { + this.holdService = holdService; + } + /** * @param applicableKinds kinds that this action is applicable for */ diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/impl/DeleteHoldAction.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/impl/DeleteHoldAction.java new file mode 100644 index 0000000000..e8f52ab40b --- /dev/null +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/impl/DeleteHoldAction.java @@ -0,0 +1,53 @@ +/* + * Copyright (C) 2005-2014 Alfresco Software Limited. + * + * This file is part of Alfresco + * + * Alfresco is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Alfresco is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Alfresco. If not, see . + */ +package org.alfresco.module.org_alfresco_module_rm.action.impl; + +import org.alfresco.error.AlfrescoRuntimeException; +import org.alfresco.module.org_alfresco_module_rm.action.RMActionExecuterAbstractBase; +import org.alfresco.service.cmr.action.Action; +import org.alfresco.service.cmr.repository.NodeRef; + +/** + * Delete Hold Action + * + * @author Tuna Aksoy + * @since 2.2 + * @version 1.0 + */ +public class DeleteHoldAction extends RMActionExecuterAbstractBase +{ + /** I18N */ + private static final String MSG_DELETE_NOT_HOLD_TYPE = "rm.action.delete-not-hold-type"; + + /** + * @see org.alfresco.repo.action.executer.ActionExecuterAbstractBase#executeImpl(org.alfresco.service.cmr.action.Action, org.alfresco.service.cmr.repository.NodeRef) + */ + @Override + protected void executeImpl(Action action, NodeRef actionedUponNodeRef) + { + if (holdService.isHold(actionedUponNodeRef)) + { + holdService.deleteHold(actionedUponNodeRef); + } + else + { + throw new AlfrescoRuntimeException(MSG_DELETE_NOT_HOLD_TYPE, new Object[]{ TYPE_HOLD.toString(), actionedUponNodeRef.toString() }); + } + } +} 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 a31cad0b54..24f4bf867c 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 @@ -418,6 +418,27 @@ public class HoldServiceImpl extends ServiceBaseImpl throw new AlfrescoRuntimeException("Can't delete hold, becuase passed node is not a hold. (hold=" + hold.toString() + ")"); } + List held = getHeld(hold); + List heldNames = new ArrayList(); + for (NodeRef nodeRef : held) + { + if (permissionService.hasPermission(hold, RMPermissionModel.FILING) == AccessStatus.ALLOWED) + { + heldNames.add((String) nodeService.getProperty(nodeRef, ContentModel.PROP_NAME)); + } + } + + if (heldNames.size() > 0) + { + StringBuilder sb = new StringBuilder(); + for (String name : heldNames) + { + sb.append("\n "); + sb.append(name); + } + throw new AlfrescoRuntimeException("Can't delete hold, because filing permissions for the following items are needed: " + sb.toString()); + } + // delete the hold node nodeService.deleteNode(hold); }