From 24499816091ab8245598d88c15edb356a6f02555 Mon Sep 17 00:00:00 2001 From: Tuna Aksoy Date: Tue, 8 Oct 2013 12:18:21 +0000 Subject: [PATCH] RM-1051 (Outbound rule is executed when record references are deleted) git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/modules/recordsmanagement/HEAD@56383 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../rm-webscript-context.xml | 1 + .../script/CustomRefDelete.java | 52 ++++++++++++++----- 2 files changed, 41 insertions(+), 12 deletions(-) diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-webscript-context.xml b/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-webscript-context.xml index 6b6e6da420..a9769bcd14 100644 --- a/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-webscript-context.xml +++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-webscript-context.xml @@ -106,6 +106,7 @@ class="org.alfresco.module.org_alfresco_module_rm.script.CustomRefDelete" parent="rmBaseWebscript"> + diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/CustomRefDelete.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/CustomRefDelete.java index 3b33ee3c71..bf650e8831 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/CustomRefDelete.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/CustomRefDelete.java @@ -26,6 +26,8 @@ import javax.servlet.http.HttpServletResponse; import org.alfresco.module.org_alfresco_module_rm.admin.RecordsManagementAdminService; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.StoreRef; +import org.alfresco.service.cmr.rule.RuleService; +import org.alfresco.service.cmr.rule.RuleType; import org.alfresco.service.namespace.QName; import org.springframework.extensions.webscripts.Cache; import org.springframework.extensions.webscripts.Status; @@ -37,31 +39,57 @@ import org.apache.commons.logging.LogFactory; /** * Implementation for Java backed webscript to remove RM custom reference instances * from a node. - * + * * @author Neil McErlean */ public class CustomRefDelete extends AbstractRmWebScript { + /** Logger */ private static Log logger = LogFactory.getLog(CustomRefDelete.class); - + + /** RM Admin Service */ private RecordsManagementAdminService rmAdminService; + /** Rule Service */ + private RuleService ruleService; + + /** + * @param rmAdminService RM Admin Service + */ public void setRecordsManagementAdminService(RecordsManagementAdminService rmAdminService) { this.rmAdminService = rmAdminService; } + /** + * @param ruleService Rule Service + */ + public void setRuleService(RuleService ruleService) + { + this.ruleService = ruleService; + } + /* * @see org.alfresco.web.scripts.DeclarativeWebScript#executeImpl(org.alfresco.web.scripts.WebScriptRequest, org.alfresco.web.scripts.Status, org.alfresco.web.scripts.Cache) */ @Override protected Map executeImpl(WebScriptRequest req, Status status, Cache cache) { - Map ftlModel = removeCustomReferenceInstance(req); - + Map ftlModel; + ruleService.disableRuleType(RuleType.OUTBOUND); + + try + { + ftlModel = removeCustomReferenceInstance(req); + } + finally + { + ruleService.enableRuleType(RuleType.OUTBOUND); + } + return ftlModel; } - + /** * Removes custom reference. */ @@ -73,19 +101,19 @@ public class CustomRefDelete extends AbstractRmWebScript String storeType = req.getParameter("st"); String storeId = req.getParameter("si"); String nodeId = req.getParameter("id"); - + // create the NodeRef and ensure it is valid StoreRef storeRef = new StoreRef(storeType, storeId); NodeRef toNodeRef = new NodeRef(storeRef, nodeId); - + if (!this.nodeService.exists(toNodeRef)) { - throw new WebScriptException(HttpServletResponse.SC_NOT_FOUND, "Unable to find to-node: " + + throw new WebScriptException(HttpServletResponse.SC_NOT_FOUND, "Unable to find to-node: " + toNodeRef.toString()); } Map result = new HashMap(); - + Map templateVars = req.getServiceMatch().getTemplateVars(); String clientsRefId = templateVars.get("refId"); QName qn = rmAdminService.getQNameForClientId(clientsRefId); @@ -94,7 +122,7 @@ public class CustomRefDelete extends AbstractRmWebScript throw new WebScriptException(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Unable to find reference type: " + clientsRefId); } - + if (logger.isDebugEnabled()) { StringBuilder msg = new StringBuilder(); @@ -102,10 +130,10 @@ public class CustomRefDelete extends AbstractRmWebScript .append(fromNodeRef).append(" to ").append(toNodeRef); logger.debug(msg.toString()); } - + rmAdminService.removeCustomReference(fromNodeRef, toNodeRef, qn); rmAdminService.removeCustomReference(toNodeRef, fromNodeRef, qn); - + result.put("success", true); return result;