Merged 5.0.N (5.0.4) to 5.1.N (5.1.2)

127236 dungureanu: MNT-15149 : Rule set with "Rule applied to subfolder" also applies to a comment node.
      - added fm:post into ignored types list
      - externalised list into the spring config 
      - created test for ignored types


git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/BRANCHES/DEV/5.1.N/root@127263 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Andrei Rebegea
2016-05-19 15:05:40 +00:00
parent 4dcd2ce286
commit a710e77559
3 changed files with 51 additions and 17 deletions

View File

@@ -104,6 +104,18 @@
<value>{http://www.alfresco.org/model/system/1.0}temporary</value>
</list>
</property>
<property name="ignoredTypeStr">
<list>
<value>{http://www.alfresco.org/model/rule/1.0}rule</value>
<value>{http://www.alfresco.org/model/action/1.0}action</value>
<value>{http://www.alfresco.org/model/content/1.0}thumbnail</value>
<value>{http://www.alfresco.org/model/content/1.0}failedThumbnail</value>
<!-- Workaround to prevent rules running on cm:rating nodes (which happened for 'liked' folders ALF-8308 & ALF-8382) -->
<value>{http://www.alfresco.org/model/content/1.0}rating</value>
<value>{http://www.alfresco.org/model/content/1.0}systemfolder</value>
<value>{http://www.alfresco.org/model/forum/1.0}post</value>
</list>
</property>
</bean>
<bean id="on-create-node-trigger" class="org.alfresco.repo.rule.ruletrigger.CreateNodeRuleTrigger" parent="rule-trigger-base">

View File

@@ -50,26 +50,12 @@ import org.alfresco.service.namespace.QName;
*/
public abstract class RuleTriggerAbstractBase implements RuleTrigger
{
/** the types (hardcoded) to ignore generally */
private static final Set<QName> IGNORE_TYPES;
static
{
IGNORE_TYPES = new HashSet<QName>(13);
IGNORE_TYPES.add(RuleModel.TYPE_RULE);
IGNORE_TYPES.add(ActionModel.TYPE_ACTION);
IGNORE_TYPES.add(ContentModel.TYPE_THUMBNAIL);
IGNORE_TYPES.add(ContentModel.TYPE_FAILED_THUMBNAIL);
// Workaround to prevent rules running on cm:rating nodes (which happened for 'liked' folders ALF-8308 & ALF-8382)
IGNORE_TYPES.add(ContentModel.TYPE_RATING);
IGNORE_TYPES.add(ContentModel.TYPE_SYSTEM_FOLDER);
}
/**
* A list of the rule types that are interested in this trigger
*/
private Set<RuleType> ruleTypes = new HashSet<RuleType>();
private Set<QName> ignoredAspects = Collections.emptySet();
private Set<QName> ignoredTypes=Collections.emptySet();
protected PolicyComponent policyComponent;
protected NodeService nodeService;
@@ -194,7 +180,7 @@ public abstract class RuleTriggerAbstractBase implements RuleTrigger
{
boolean result = false;
QName typeQName = nodeService.getType(actionedUponNodeRef);
if (IGNORE_TYPES.contains(typeQName))
if (ignoredTypes.contains(typeQName))
{
result = true;
}
@@ -231,4 +217,23 @@ public abstract class RuleTriggerAbstractBase implements RuleTrigger
this.ignoredAspects.add(QName.createQName(ignoredAspectStr));
}
}
public Set<QName> getIgnoredTypes()
{
return ignoredTypes;
}
/**
* Converting String ignored Types from Spring context to QNames
*
* @param ignoredTypes
*/
public void setIgnoredTypeStr(List<String> ignoredTypes)
{
this.ignoredTypes = new HashSet<QName>(13);
for (String ignoredTypeStr : ignoredTypes)
{
this.ignoredTypes.add(QName.createQName(ignoredTypeStr));
}
}
}

View File

@@ -26,6 +26,7 @@
package org.alfresco.repo.rule.ruletrigger;
import org.alfresco.model.ContentModel;
import org.alfresco.model.ForumModel;
import org.alfresco.repo.content.MimetypeMap;
import org.alfresco.repo.security.authentication.AuthenticationUtil;
import org.alfresco.service.ServiceRegistry;
@@ -98,6 +99,22 @@ public class RuleTriggerTest extends BaseSpringTest
assertTrue(ruleType.rulesTriggered);
}
public void testOnCreateIgnoredTypesTrigger()
{
TestRuleType ruleType = createTestRuleType(ON_CREATE_NODE_TRIGGER);
assertFalse(ruleType.rulesTriggered);
//Try and trigger the type
this.nodeService.createNode(
this.rootNodeRef,
ForumModel.ASSOC_DISCUSSION,
ForumModel.ASSOC_DISCUSSION,
ForumModel.TYPE_POST);
//Check to see if the rule type has been triggered
assertFalse(ruleType.rulesTriggered);
}
public void testOnUpdateNodeTrigger()
{
NodeRef nodeRef = this.nodeService.createNode(