From d317abfa36a5e4356657d1c92070ac6dba731dfc Mon Sep 17 00:00:00 2001 From: Gavin Cornwell Date: Mon, 6 Dec 2010 15:36:56 +0000 Subject: [PATCH] Merged BRANCHES/V3.4 to HEAD (to fix ALF-5837) 23478: ALF-5303: Upload new version fails when file uploaded to sub-folder and parent folder has rule for update git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@24245 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../SimpleWorkflowActionExecuter.java | 3 +- .../alfresco/repo/rule/RuleServiceImpl.java | 21 ++++++++----- .../ruletrigger/RuleTriggerAbstractBase.java | 30 ++++++++++++++++--- 3 files changed, 42 insertions(+), 12 deletions(-) diff --git a/source/java/org/alfresco/repo/action/executer/SimpleWorkflowActionExecuter.java b/source/java/org/alfresco/repo/action/executer/SimpleWorkflowActionExecuter.java index 15cab74fdf..24d72595ab 100644 --- a/source/java/org/alfresco/repo/action/executer/SimpleWorkflowActionExecuter.java +++ b/source/java/org/alfresco/repo/action/executer/SimpleWorkflowActionExecuter.java @@ -73,7 +73,8 @@ public class SimpleWorkflowActionExecuter extends ActionExecuterAbstractBase Action ruleAction, NodeRef actionedUponNodeRef) { - if (this.nodeService.exists(actionedUponNodeRef) == true) + if (this.nodeService.exists(actionedUponNodeRef) == true && + this.nodeService.hasAspect(actionedUponNodeRef, ApplicationModel.ASPECT_SIMPLE_WORKFLOW) == false) { // Get the parameter values String approveStep = (String)ruleAction.getParameterValue(PARAM_APPROVE_STEP); diff --git a/source/java/org/alfresco/repo/rule/RuleServiceImpl.java b/source/java/org/alfresco/repo/rule/RuleServiceImpl.java index 4479f2f0af..24be6c458f 100644 --- a/source/java/org/alfresco/repo/rule/RuleServiceImpl.java +++ b/source/java/org/alfresco/repo/rule/RuleServiceImpl.java @@ -1044,17 +1044,24 @@ public class RuleServiceImpl * @see org.alfresco.repo.rule.RuleService#executePendingRules() */ public void executePendingRules() - { - if (logger.isDebugEnabled() == true) - { - logger.debug("Creating the executed rules list"); - } + { if (AlfrescoTransactionSupport.getResource(KEY_RULES_EXECUTED) == null) { + if (logger.isDebugEnabled() == true) + { + logger.debug("Creating the executed rules list"); + } AlfrescoTransactionSupport.bindResource(KEY_RULES_EXECUTED, new HashSet()); } - - List executeAtEndRules = new ArrayList(); + else + { + if (logger.isDebugEnabled() == true) + { + logger.debug("Executed rules list already exists"); + } + } + + List executeAtEndRules = new ArrayList(); executePendingRulesImpl(executeAtEndRules); for (PendingRuleData data : executeAtEndRules) { diff --git a/source/java/org/alfresco/repo/rule/ruletrigger/RuleTriggerAbstractBase.java b/source/java/org/alfresco/repo/rule/ruletrigger/RuleTriggerAbstractBase.java index 6bc12f0fd9..486b5cc981 100644 --- a/source/java/org/alfresco/repo/rule/ruletrigger/RuleTriggerAbstractBase.java +++ b/source/java/org/alfresco/repo/rule/ruletrigger/RuleTriggerAbstractBase.java @@ -21,13 +21,17 @@ package org.alfresco.repo.rule.ruletrigger; import java.util.HashSet; import java.util.Set; +import org.alfresco.model.ContentModel; +import org.alfresco.repo.action.ActionModel; import org.alfresco.repo.policy.PolicyComponent; +import org.alfresco.repo.rule.RuleModel; import org.alfresco.repo.security.authentication.AuthenticationComponent; import org.alfresco.service.cmr.dictionary.DictionaryService; import org.alfresco.service.cmr.repository.ContentService; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeService; import org.alfresco.service.cmr.rule.RuleType; +import org.alfresco.service.namespace.QName; /** * Rule trigger abstract base @@ -151,9 +155,27 @@ public abstract class RuleTriggerAbstractBase implements RuleTrigger */ protected void triggerRules(NodeRef nodeRef, NodeRef actionedUponNodeRef) { - for (RuleType ruleType : this.ruleTypes) - { - ruleType.triggerRuleType(nodeRef, actionedUponNodeRef, this.executeRuleImmediately); - } + // Do not trigger rules for rule and action type nodes + if (ignoreTrigger(actionedUponNodeRef) == false) + { + for (RuleType ruleType : this.ruleTypes) + { + ruleType.triggerRuleType(nodeRef, actionedUponNodeRef, this.executeRuleImmediately); + } + } + } + + private boolean ignoreTrigger(NodeRef actionedUponNodeRef) + { + boolean result = false; + QName typeQName = nodeService.getType(actionedUponNodeRef); + if (typeQName.equals(RuleModel.TYPE_RULE) == true || + typeQName.equals(ActionModel.TYPE_ACTION) == true || + typeQName.equals(ActionModel.TYPE_COMPOSITE_ACTION) == true || + typeQName.equals(ContentModel.TYPE_THUMBNAIL) == true) + { + result = true; + } + return result; } }