diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/extended-repository-context.xml b/rm-server/config/alfresco/module/org_alfresco_module_rm/extended-repository-context.xml index 3ca1c3964e..da0c183138 100644 --- a/rm-server/config/alfresco/module/org_alfresco_module_rm/extended-repository-context.xml +++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/extended-repository-context.xml @@ -242,6 +242,8 @@ ${rm.rule.runasrmadmin} + + diff --git a/rm-server/source/java/org/alfresco/repo/rule/ExtendedRuleServiceImpl.java b/rm-server/source/java/org/alfresco/repo/rule/ExtendedRuleServiceImpl.java index d1f7333210..143c5549df 100644 --- a/rm-server/source/java/org/alfresco/repo/rule/ExtendedRuleServiceImpl.java +++ b/rm-server/source/java/org/alfresco/repo/rule/ExtendedRuleServiceImpl.java @@ -21,8 +21,10 @@ package org.alfresco.repo.rule; import java.util.HashSet; import java.util.Set; +import org.alfresco.model.ContentModel; import org.alfresco.module.org_alfresco_module_rm.fileplan.FilePlanService; import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel; +import org.alfresco.module.org_alfresco_module_rm.record.RecordService; import org.alfresco.module.org_alfresco_module_rm.security.FilePlanAuthenticationService; import org.alfresco.repo.security.authentication.AuthenticationUtil; import org.alfresco.repo.security.authentication.AuthenticationUtil.RunAsWork; @@ -54,6 +56,9 @@ public class ExtendedRuleServiceImpl extends RuleServiceImpl /** node service */ protected NodeService nodeService; + /** Record service */ + protected RecordService recordService; + /** * @param runAsRmAdmin true if run rules as rmadmin, false otherwise */ @@ -79,12 +84,20 @@ public class ExtendedRuleServiceImpl extends RuleServiceImpl } /** - * @param filePlanService file plan service + * @param filePlanService file plan service */ public void setFilePlanService(FilePlanService filePlanService) { - this.filePlanService = filePlanService; - } + this.filePlanService = filePlanService; + } + + /** + * @param recordService record service + */ + public void setRecordService(RecordService recordService) + { + this.recordService = recordService; + } /** * Init method @@ -157,10 +170,10 @@ public class ExtendedRuleServiceImpl extends RuleServiceImpl @Override public void executeRule(final Rule rule, final NodeRef nodeRef, final Set executedRules) { - if (nodeService.exists(nodeRef)) - { - QName typeQName = nodeService.getType(nodeRef); + QName typeQName = nodeService.getType(nodeRef); + if (nodeService.exists(nodeRef) && shouldRuleBeAppliedToNode(rule, nodeRef, typeQName)) + { // check if this is a rm rule on a rm artifact if (filePlanService.isFilePlanComponent(nodeRef) && isFilePlanComponentRule(rule)) @@ -216,4 +229,33 @@ public class ExtendedRuleServiceImpl extends RuleServiceImpl { return ignoredTypes.contains(typeQName); } + + /** + * Check if the rule is associated with the file plan component that the node it is being + * applied to isn't a hold container, a hold, a transfer container, a transfer, an unfiled + * record container, an unfiled record folder or unfiled content + * + * @param rule + * @param nodeRef + * @param typeQName + * @return + */ + private boolean shouldRuleBeAppliedToNode(Rule rule, NodeRef nodeRef, QName typeQName) + { + boolean result = true; + NodeRef ruleNodeRef = getOwningNodeRef(rule); + if(filePlanService.isFilePlan(ruleNodeRef)) + { + // if this rule is defined at the root of the file plan then we do not want to apply + // it to holds/transfers/unfiled content... + result = !(RecordsManagementModel.TYPE_HOLD.equals(typeQName) || + RecordsManagementModel.TYPE_HOLD_CONTAINER.equals(typeQName) || + RecordsManagementModel.TYPE_TRANSFER.equals(typeQName) || + RecordsManagementModel.TYPE_TRANSFER_CONTAINER.equals(typeQName) || + RecordsManagementModel.TYPE_UNFILED_RECORD_CONTAINER.equals(typeQName) || + RecordsManagementModel.TYPE_UNFILED_RECORD_FOLDER.equals(typeQName) || + (ContentModel.TYPE_CONTENT.equals(typeQName) && !recordService.isFiled(nodeRef))); + } + return result; + } }