Britt Park b2f9df29d1 Humongous merge. It is incomplete, however; faces-config-navigation.xml and ClientConfigElement
were both beyond me, and are just the raw conflict merge data.  If Kev can't figure out how they should
go together by tomorrow AM (for me) I'll dig back in.


git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/BRANCHES/WCM-DEV2/root@4306 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
2006-11-08 05:17:40 +00:00

811 lines
33 KiB
Java

/*
* Copyright (C) 2005 Alfresco, Inc.
*
* Licensed under the Mozilla Public License version 1.1
* with a permitted attribution clause. You may obtain a
* copy of the License at
*
* http://www.alfresco.org/legal/license.txt
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
* either express or implied. See the License for the specific
* language governing permissions and limitations under the
* License.
*/
package org.alfresco.repo.rule;
import java.io.File;
import java.io.Serializable;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.alfresco.model.ContentModel;
import org.alfresco.repo.action.evaluator.ComparePropertyValueEvaluator;
import org.alfresco.repo.action.executer.ImageTransformActionExecuter;
import org.alfresco.repo.content.MimetypeMap;
import org.alfresco.repo.content.transform.AbstractContentTransformerTest;
import org.alfresco.repo.transaction.TransactionUtil;
import org.alfresco.repo.transaction.TransactionUtil.TransactionWork;
import org.alfresco.service.cmr.action.Action;
import org.alfresco.service.cmr.action.ActionCondition;
import org.alfresco.service.cmr.repository.ContentWriter;
import org.alfresco.service.cmr.repository.CyclicChildRelationshipException;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.rule.Rule;
import org.alfresco.service.cmr.rule.RuleType;
import org.alfresco.service.cmr.security.AuthenticationService;
import org.alfresco.service.cmr.security.PermissionService;
import org.alfresco.service.namespace.QName;
import org.apache.commons.digester.SetRootRule;
/**
* Rule service implementation test
*
* @author Roy Wetherall
*/
public class RuleServiceImplTest extends BaseRuleTest
{
AuthenticationService authenticationService;
PermissionService permissionService;
@Override
protected void onSetUpInTransaction() throws Exception
{
super.onSetUpInTransaction();
this.permissionService = (PermissionService)this.applicationContext.getBean("permissionService");
this.authenticationService = (AuthenticationService)this.applicationContext.getBean("authenticationService");
}
/**
* Test get rule type
*/
public void testGetRuleType()
{
List<RuleType> ruleTypes = this.ruleService.getRuleTypes();
assertNotNull(ruleTypes);
// Visual check to make sure that the display labels are being returned correctly
for (RuleType type : ruleTypes)
{
System.out.println(type.getDisplayLabel());
}
}
/**
* Test addRule
*
*/
public void testAddRule()
{
Rule newRule = createTestRule();
this.ruleService.saveRule(this.nodeRef, newRule);
assertNotNull(newRule.getNodeRef());
// Check the owning node reference
assertNotNull(this.ruleService.getOwningNodeRef(newRule));
assertEquals(this.nodeRef, this.ruleService.getOwningNodeRef(newRule));
Rule savedRule = this.ruleService.getRule(newRule.getNodeRef());
assertNotNull(savedRule);
assertFalse(savedRule.isAppliedToChildren());
savedRule.applyToChildren(true);
this.ruleService.saveRule(this.nodeRef, savedRule);
Rule savedRule2 = this.ruleService.getRule(savedRule.getNodeRef());
assertNotNull(savedRule2);
assertTrue(savedRule2.isAppliedToChildren());
}
public void testRemoveAllRules()
{
this.ruleService.removeAllRules(this.nodeRef);
List<Rule> rules1 = this.ruleService.getRules(this.nodeRef);
assertNotNull(rules1);
assertEquals(0, rules1.size());
Rule newRule = createTestRule(); //this.ruleService.createRule(ruleType.getName());
this.ruleService.saveRule(this.nodeRef, newRule);
Rule newRule2 = createTestRule(); //this.ruleService.createRule(ruleType.getName());
this.ruleService.saveRule(this.nodeRef, newRule2);
List<Rule> rules2 = this.ruleService.getRules(this.nodeRef);
assertNotNull(rules2);
assertEquals(2, rules2.size());
this.ruleService.removeAllRules(this.nodeRef);
List<Rule> rules3 = this.ruleService.getRules(this.nodeRef);
assertNotNull(rules3);
assertEquals(0, rules3.size());
}
/**
* Test get rules
*/
public void testGetRules()
{
// Check that there are no rules associationed with the node
List<Rule> noRules = this.ruleService.getRules(this.nodeRef);
assertNotNull(noRules);
assertEquals(0, noRules.size());
// Check that we still get nothing back after the details of the node
// have been cached in the rule store
List<Rule> noRulesAfterCache = this.ruleService.getRules(this.nodeRef);
assertNotNull(noRulesAfterCache);
assertEquals(0, noRulesAfterCache.size());
// Add a rule to the node
testAddRule();
// Get the rule from the rule service
List<Rule> rules = this.ruleService.getRules(this.nodeRef);
assertNotNull(rules);
assertEquals(1, rules.size());
// Check the details of the rule
Rule rule = rules.get(0);
assertEquals("title", rule.getTitle());
assertEquals("description", rule.getDescription());
assertNotNull(this.nodeService.getProperty(rule.getNodeRef(), ContentModel.PROP_CREATED));
assertNotNull(this.nodeService.getProperty(rule.getNodeRef(), ContentModel.PROP_CREATOR));
// Check that the condition action have been retireved correctly
Action action = rule.getAction();
assertNotNull(action);
List<ActionCondition> conditions = action.getActionConditions();
assertNotNull(conditions);
assertEquals(1, conditions.size());
}
/** Ensure the rules are retrieved in the correct order **/
public void testGetRulesOrder()
{
for (int index = 0; index < 10; index++)
{
Rule newRule = createTestRule(true, Integer.toString(index));
this.ruleService.saveRule(this.nodeRef, newRule);
}
// Check that they are all returned in the correct order
List<Rule> rules = this.ruleService.getRules(this.nodeRef);
int index = 0;
for (Rule rule : rules)
{
assertEquals(Integer.toString(index), rule.getTitle());
index++;
}
// Create a child node
NodeRef level1 = createNewNode(this.nodeRef);
for (int index2 = 10; index2 < 20; index2++)
{
Rule newRule = createTestRule(true, Integer.toString(index2));
this.ruleService.saveRule(level1, newRule);
}
// Check that they are all returned in the correct order
List<Rule> rules2 = this.ruleService.getRules(level1);
int index2 = 0;
for (Rule rule : rules2)
{
assertEquals(Integer.toString(index2), rule.getTitle());
index2++;
}
// Create a child node
NodeRef level2 = createNewNode(level1);
for (int index3 = 20; index3 < 30; index3++)
{
Rule newRule = createTestRule(true, Integer.toString(index3));
this.ruleService.saveRule(level2, newRule);
}
// Check that they are all returned in the correct order
List<Rule> rules3 = this.ruleService.getRules(level2);
int index3 = 0;
for (Rule rule : rules3)
{
//System.out.println(rule.getTitle());
assertEquals(Integer.toString(index3), rule.getTitle());
index3++;
}
// Update a couple of the rules
Rule rule1 = rules3.get(2);
rule1.setDescription("This has been changed");
this.ruleService.saveRule(this.nodeRef, rule1);
Rule rule2 = rules3.get(12);
rule2.setDescription("This has been changed");
this.ruleService.saveRule(level1, rule2);
Rule rule3 = rules3.get(22);
rule3.setDescription("This has been changed");
this.ruleService.saveRule(level2, rule3);
// Check that they are all returned in the correct order
List<Rule> rules4 = this.ruleService.getRules(level2);
int index4 = 0;
for (Rule rule : rules4)
{
assertEquals(Integer.toString(index4), rule.getTitle());
index4++;
}
}
public void testIgnoreInheritedRules()
{
// Create the nodes and rules
this.ruleService.saveRule(this.nodeRef, createTestRule(true, "rule1"));
this.ruleService.saveRule(this.nodeRef, createTestRule(false, "rule2"));
NodeRef nodeRef1 = createNewNode(this.nodeRef);
this.ruleService.saveRule(nodeRef1, createTestRule(true, "rule3"));
this.ruleService.saveRule(nodeRef1, createTestRule(false, "rule4"));
NodeRef nodeRef2 = createNewNode(nodeRef1);
this.ruleService.saveRule(nodeRef2, createTestRule(true, "rule5"));
this.ruleService.saveRule(nodeRef2, createTestRule(false, "rule6"));
// Apply the ignore aspect
this.nodeService.addAspect(nodeRef1, RuleModel.ASPECT_IGNORE_INHERITED_RULES, null);
// Get the rules
List<Rule> rules1 = this.ruleService.getRules(nodeRef2);
assertNotNull(rules1);
assertEquals(3, rules1.size());
assertEquals("rule3", rules1.get(0).getTitle());
assertEquals("rule5", rules1.get(1).getTitle());
assertEquals("rule6", rules1.get(2).getTitle());
// Apply the ignore aspect
this.nodeService.addAspect(nodeRef2, RuleModel.ASPECT_IGNORE_INHERITED_RULES, null);
// Get the rules
List<Rule> rules2 = this.ruleService.getRules(nodeRef2);
assertNotNull(rules2);
assertEquals(2, rules2.size());
assertEquals("rule5", rules2.get(0).getTitle());
assertEquals("rule6", rules2.get(1).getTitle());
// Remove the ignore aspect
this.nodeService.removeAspect(nodeRef1, RuleModel.ASPECT_IGNORE_INHERITED_RULES);
this.nodeService.removeAspect(nodeRef2, RuleModel.ASPECT_IGNORE_INHERITED_RULES);
// Get the rules
List<Rule> rules3 = this.ruleService.getRules(nodeRef2);
assertNotNull(rules3);
assertEquals(4, rules3.size());
assertEquals("rule1", rules3.get(0).getTitle());
assertEquals("rule3", rules3.get(1).getTitle());
assertEquals("rule5", rules3.get(2).getTitle());
assertEquals("rule6", rules3.get(3).getTitle());
}
/**
* Test disabling the rules
*/
public void testRulesDisabled()
{
testAddRule();
assertTrue(this.ruleService.rulesEnabled(this.nodeRef));
this.ruleService.disableRules(this.nodeRef);
assertFalse(this.ruleService.rulesEnabled(this.nodeRef));
this.ruleService.enableRules(this.nodeRef);
assertTrue(this.ruleService.rulesEnabled(this.nodeRef));
}
/**
* Helper method to easily create a new node which can be actionable (or not)
*
* @param parent the parent node
* @param isActionable indicates whether the node is actionable or not
*/
private NodeRef createNewNode(NodeRef parent)
{
return this.nodeService.createNode(parent,
ContentModel.ASSOC_CHILDREN,
QName.createQName("{test}testnode"),
ContentModel.TYPE_CONTAINER).getChildRef();
}
public void testRuleServicePermissionsConsumer()
{
this.authenticationService.createAuthentication("conUser", "password".toCharArray());
this.permissionService.setPermission(this.nodeRef, "conUser", PermissionService.CONSUMER, true);
this.permissionService.setInheritParentPermissions(this.nodeRef, true);
this.authenticationService.authenticate("conUser", "password".toCharArray());
Rule rule = createTestRule();
try
{
this.ruleService.saveRule(this.nodeRef, rule);
// Fail
fail("Consumers cannot create rules.");
}
catch (Exception exception)
{
// Ok
}
}
public void testRuleServicePermissionsEditor()
{
this.authenticationService.createAuthentication("editorUser", "password".toCharArray());
this.permissionService.setPermission(this.nodeRef, "editorUser", PermissionService.EDITOR, true);
this.permissionService.setInheritParentPermissions(this.nodeRef, true);
this.authenticationService.authenticate("editorUser", "password".toCharArray());
Rule rule = createTestRule();
try
{
this.ruleService.saveRule(this.nodeRef, rule);
// Fail
fail("Editors cannot create rules.");
}
catch (Exception exception)
{
// Ok
}
}
public void testRuleServicePermissionsCoordinator()
{
this.authenticationService.createAuthentication("coordUser", "password".toCharArray());
this.permissionService.setPermission(this.nodeRef, "coordUser", PermissionService.COORDINATOR, true);
this.permissionService.setInheritParentPermissions(this.nodeRef, true);
this.authenticationService.authenticate("admin", "admin".toCharArray());
Rule rule2 = createTestRule();
this.ruleService.saveRule(this.nodeRef, rule2);
this.authenticationService.clearCurrentSecurityContext();
}
/**
* Tests the rule inheritance within the store, checking that the cache is reset correctly when
* rules are added and removed.
*/
public void testRuleInheritance()
{
// Create the nodes and rules
NodeRef rootWithRules = createNewNode(this.rootNodeRef);
Rule rule1 = createTestRule();
this.ruleService.saveRule(rootWithRules, rule1);
Rule rule2 = createTestRule(true);
this.ruleService.saveRule(rootWithRules, rule2);
NodeRef nonActionableChild = createNewNode(rootWithRules);
NodeRef childWithRules = createNewNode(nonActionableChild);
Rule rule3 = createTestRule();
this.ruleService.saveRule(childWithRules, rule3);
Rule rule4 = createTestRule(true);
this.ruleService.saveRule(childWithRules, rule4);
NodeRef rootWithRules2 = createNewNode(this.rootNodeRef);
this.nodeService.addChild(
rootWithRules2,
childWithRules,
ContentModel.ASSOC_CHILDREN,
QName.createQName("{test}testnode"));
Rule rule5 = createTestRule();
this.ruleService.saveRule(rootWithRules2, rule5);
Rule rule6 = createTestRule(true);
this.ruleService.saveRule(rootWithRules2, rule6);
// Check that the rules are inherited in the correct way
List<? extends Rule> allRules = this.ruleService.getRules(childWithRules);
assertNotNull(allRules);
assertEquals(4, allRules.size());
assertTrue(allRules.contains(rule2));
assertTrue(allRules.contains(rule3));
assertTrue(allRules.contains(rule4));
assertTrue(allRules.contains(rule6));
// Check the owning node ref
int count = 0;
for (Rule rule : allRules)
{
NodeRef owningNodeRef = this.ruleService.getOwningNodeRef(rule);
assertNotNull(owningNodeRef);
if (owningNodeRef.equals(childWithRules) == true)
{
count++;
}
}
assertEquals(2, count);
List<? extends Rule> myRules = this.ruleService.getRules(childWithRules, false);
assertNotNull(myRules);
assertEquals(2, myRules.size());
assertTrue(myRules.contains(rule3));
assertTrue(myRules.contains(rule4));
List<? extends Rule> allRules2 = this.ruleService.getRules(nonActionableChild, true);
assertNotNull(allRules2);
assertEquals(1, allRules2.size());
assertTrue(allRules2.contains(rule2));
List<? extends Rule> myRules2 = this.ruleService.getRules(nonActionableChild, false);
assertNotNull(myRules2);
assertEquals(0, myRules2.size());
List<? extends Rule> allRules3 = this.ruleService.getRules(rootWithRules, true);
assertNotNull(allRules3);
assertEquals(2, allRules3.size());
assertTrue(allRules3.contains(rule1));
assertTrue(allRules3.contains(rule2));
List<? extends Rule> myRules3 = this.ruleService.getRules(rootWithRules, false);
assertNotNull(myRules3);
assertEquals(2, myRules3.size());
assertTrue(myRules3.contains(rule1));
assertTrue(myRules3.contains(rule2));
List<? extends Rule> allRules4 = this.ruleService.getRules(rootWithRules2, true);
assertNotNull(allRules4);
assertEquals(2, allRules4.size());
assertTrue(allRules4.contains(rule5));
assertTrue(allRules4.contains(rule6));
List<? extends Rule> myRules4 = this.ruleService.getRules(rootWithRules2, false);
assertNotNull(myRules4);
assertEquals(2, myRules4.size());
assertTrue(myRules4.contains(rule5));
assertTrue(myRules4.contains(rule6));
// Take the root node and add another rule
Rule rule7 = createTestRule(true);
this.ruleService.saveRule(rootWithRules, rule7);
List<? extends Rule> allRules5 = this.ruleService.getRules(childWithRules, true);
assertNotNull(allRules5);
assertEquals(5, allRules5.size());
assertTrue(allRules5.contains(rule2));
assertTrue(allRules5.contains(rule3));
assertTrue(allRules5.contains(rule4));
assertTrue(allRules5.contains(rule6));
assertTrue(allRules5.contains(rule7));
List<? extends Rule> allRules6 = this.ruleService.getRules(nonActionableChild, true);
assertNotNull(allRules6);
assertEquals(2, allRules6.size());
assertTrue(allRules6.contains(rule2));
assertTrue(allRules6.contains(rule7));
List<? extends Rule> allRules7 = this.ruleService.getRules(rootWithRules, true);
assertNotNull(allRules7);
assertEquals(3, allRules7.size());
assertTrue(allRules7.contains(rule1));
assertTrue(allRules7.contains(rule2));
assertTrue(allRules7.contains(rule7));
List<? extends Rule> allRules8 = this.ruleService.getRules(rootWithRules2, true);
assertNotNull(allRules8);
assertEquals(2, allRules8.size());
assertTrue(allRules8.contains(rule5));
assertTrue(allRules8.contains(rule6));
// Take the root node and and remove a rule
this.ruleService.removeRule(rootWithRules, rule7);
List<? extends Rule> allRules9 = this.ruleService.getRules(childWithRules, true);
assertNotNull(allRules9);
assertEquals(4, allRules9.size());
assertTrue(allRules9.contains(rule2));
assertTrue(allRules9.contains(rule3));
assertTrue(allRules9.contains(rule4));
assertTrue(allRules9.contains(rule6));
List<? extends Rule> allRules10 = this.ruleService.getRules(nonActionableChild, true);
assertNotNull(allRules10);
assertEquals(1, allRules10.size());
assertTrue(allRules10.contains(rule2));
List<? extends Rule> allRules11 = this.ruleService.getRules(rootWithRules, true);
assertNotNull(allRules11);
assertEquals(2, allRules11.size());
assertTrue(allRules11.contains(rule1));
assertTrue(allRules11.contains(rule2));
List<? extends Rule> allRules12 = this.ruleService.getRules(rootWithRules2, true);
assertNotNull(allRules12);
assertEquals(2, allRules12.size());
assertTrue(allRules12.contains(rule5));
assertTrue(allRules12.contains(rule6));
// Delete an association
this.nodeService.removeChild(rootWithRules2, childWithRules);
List<? extends Rule> allRules13 = this.ruleService.getRules(childWithRules, true);
assertNotNull(allRules13);
assertEquals(3, allRules13.size());
assertTrue(allRules13.contains(rule2));
assertTrue(allRules13.contains(rule3));
assertTrue(allRules13.contains(rule4));
List<? extends Rule> allRules14 = this.ruleService.getRules(nonActionableChild, true);
assertNotNull(allRules14);
assertEquals(1, allRules14.size());
assertTrue(allRules14.contains(rule2));
List<? extends Rule> allRules15 = this.ruleService.getRules(rootWithRules, true);
assertNotNull(allRules15);
assertEquals(2, allRules15.size());
assertTrue(allRules15.contains(rule1));
assertTrue(allRules15.contains(rule2));
List<? extends Rule> allRules16 = this.ruleService.getRules(rootWithRules2, true);
assertNotNull(allRules16);
assertEquals(2, allRules16.size());
assertTrue(allRules16.contains(rule5));
assertTrue(allRules16.contains(rule6));
this.ruleService.disableRules(rootWithRules2);
try
{
// Add an association
this.nodeService.addChild(
rootWithRules2,
childWithRules,
ContentModel.ASSOC_CHILDREN,
QName.createQName("{test}testnode"));
}
finally
{
this.ruleService.enableRules(rootWithRules2);
}
List<? extends Rule> allRules17 = this.ruleService.getRules(childWithRules, true);
assertNotNull(allRules17);
assertEquals(4, allRules17.size());
assertTrue(allRules17.contains(rule2));
assertTrue(allRules17.contains(rule3));
assertTrue(allRules17.contains(rule4));
assertTrue(allRules17.contains(rule6));
List<? extends Rule> allRules18 = this.ruleService.getRules(nonActionableChild, true);
assertNotNull(allRules18);
assertEquals(1, allRules18.size());
assertTrue(allRules18.contains(rule2));
List<? extends Rule> allRules19 = this.ruleService.getRules(rootWithRules, true);
assertNotNull(allRules19);
assertEquals(2, allRules19.size());
assertTrue(allRules19.contains(rule1));
assertTrue(allRules19.contains(rule2));
List<? extends Rule> allRules20 = this.ruleService.getRules(rootWithRules2, true);
assertNotNull(allRules20);
assertEquals(2, allRules20.size());
assertTrue(allRules20.contains(rule5));
assertTrue(allRules20.contains(rule6));
// Delete node
this.nodeService.deleteNode(rootWithRules2);
List<? extends Rule> allRules21 = this.ruleService.getRules(childWithRules, true);
assertNotNull(allRules21);
assertEquals(3, allRules21.size());
assertTrue(allRules21.contains(rule2));
assertTrue(allRules21.contains(rule3));
assertTrue(allRules21.contains(rule4));
List<? extends Rule> allRules22 = this.ruleService.getRules(nonActionableChild, true);
assertNotNull(allRules22);
assertEquals(1, allRules22.size());
assertTrue(allRules22.contains(rule2));
List<? extends Rule> allRules23 = this.ruleService.getRules(rootWithRules, true);
assertNotNull(allRules23);
assertEquals(2, allRules23.size());
assertTrue(allRules23.contains(rule1));
assertTrue(allRules23.contains(rule2));
}
/**
* Ensure that the rule store can cope with a cyclic node graph
*
* @throws Exception
*/
public void testCyclicGraphWithInheritedRules()
throws Exception
{
NodeRef nodeRef1 = createNewNode(this.rootNodeRef);
NodeRef nodeRef2 = createNewNode(nodeRef1);
NodeRef nodeRef3 = createNewNode(nodeRef2);
try
{
this.nodeService.addChild(nodeRef3, nodeRef1, ContentModel.ASSOC_CHILDREN, QName.createQName("{test}loop"));
fail("Expected detection of cyclic relationship");
}
catch (CyclicChildRelationshipException e)
{
// expected
// the node will still have been created in the current transaction, although the txn will be rollback-only
}
Rule rule1 = createTestRule(true);
this.ruleService.saveRule(nodeRef1, rule1);
Rule rule2 = createTestRule(true);
this.ruleService.saveRule(nodeRef2, rule2);
Rule rule3 = createTestRule(true);
this.ruleService.saveRule(nodeRef3, rule3);
List<? extends Rule> allRules1 = this.ruleService.getRules(nodeRef1, true);
assertNotNull(allRules1);
assertEquals(3, allRules1.size());
assertTrue(allRules1.contains(rule1));
assertTrue(allRules1.contains(rule2));
assertTrue(allRules1.contains(rule3));
List<? extends Rule> allRules2 = this.ruleService.getRules(nodeRef2, true);
assertNotNull(allRules2);
assertEquals(3, allRules2.size());
assertTrue(allRules2.contains(rule1));
assertTrue(allRules2.contains(rule2));
assertTrue(allRules2.contains(rule3));
List<? extends Rule> allRules3 = this.ruleService.getRules(nodeRef3, true);
assertNotNull(allRules3);
assertEquals(3, allRules3.size());
assertTrue(allRules3.contains(rule1));
assertTrue(allRules3.contains(rule2));
assertTrue(allRules3.contains(rule3));
}
/**
* Ensures that rules are not duplicated when inherited
*/
public void testRuleDuplication()
{
NodeRef nodeRef1 = createNewNode(this.rootNodeRef);
NodeRef nodeRef2 = createNewNode(nodeRef1);
NodeRef nodeRef3 = createNewNode(nodeRef2);
NodeRef nodeRef4 = createNewNode(nodeRef1);
this.nodeService.addChild(nodeRef4, nodeRef3, ContentModel.ASSOC_CHILDREN, QName.createQName("{test}test"));
Rule rule1 = createTestRule(true);
this.ruleService.saveRule(nodeRef1, rule1);
Rule rule2 = createTestRule(true);
this.ruleService.saveRule(nodeRef2, rule2);
Rule rule3 = createTestRule(true);
this.ruleService.saveRule(nodeRef3, rule3);
Rule rule4 = createTestRule(true);
this.ruleService.saveRule(nodeRef4, rule4);
List<? extends Rule> allRules1 = this.ruleService.getRules(nodeRef1, true);
assertNotNull(allRules1);
assertEquals(1, allRules1.size());
assertTrue(allRules1.contains(rule1));
List<? extends Rule> allRules2 = this.ruleService.getRules(nodeRef2, true);
assertNotNull(allRules2);
assertEquals(2, allRules2.size());
assertTrue(allRules2.contains(rule1));
assertTrue(allRules2.contains(rule2));
List<? extends Rule> allRules3 = this.ruleService.getRules(nodeRef3, true);
assertNotNull(allRules3);
assertEquals(4, allRules3.size());
assertTrue(allRules3.contains(rule1));
assertTrue(allRules3.contains(rule2));
assertTrue(allRules3.contains(rule3));
assertTrue(allRules3.contains(rule4));
List<? extends Rule> allRules4 = this.ruleService.getRules(nodeRef4, true);
assertNotNull(allRules4);
assertEquals(2, allRules4.size());
assertTrue(allRules4.contains(rule1));
assertTrue(allRules4.contains(rule4));
}
public void testCyclicRules()
{
}
public void testCyclicAsyncRules() throws Exception
{
NodeRef nodeRef = createNewNode(this.rootNodeRef);
// Create the first rule
Map<String, Serializable> conditionProps = new HashMap<String, Serializable>();
conditionProps.put(ComparePropertyValueEvaluator.PARAM_VALUE, "*.jpg");
Map<String, Serializable> actionProps = new HashMap<String, Serializable>();
actionProps.put(ImageTransformActionExecuter.PARAM_MIME_TYPE, MimetypeMap.MIMETYPE_IMAGE_GIF);
actionProps.put(ImageTransformActionExecuter.PARAM_DESTINATION_FOLDER, nodeRef);
actionProps.put(ImageTransformActionExecuter.PARAM_ASSOC_TYPE_QNAME, ContentModel.ASSOC_CHILDREN);
actionProps.put(ImageTransformActionExecuter.PARAM_ASSOC_QNAME, ContentModel.ASSOC_CHILDREN);
Rule rule = new Rule();
rule.setRuleType(this.ruleType.getName());
rule.setTitle("Convert from *.jpg to *.gif");
rule.setExecuteAsynchronously(true);
Action action = this.actionService.createAction(ImageTransformActionExecuter.NAME);
action.setParameterValues(actionProps);
ActionCondition actionCondition = this.actionService.createActionCondition(ComparePropertyValueEvaluator.NAME);
actionCondition.setParameterValues(conditionProps);
action.addActionCondition(actionCondition);
rule.setAction(action);
// Create the next rule
Map<String, Serializable> conditionProps2 = new HashMap<String, Serializable>();
conditionProps2.put(ComparePropertyValueEvaluator.PARAM_VALUE, "*.gif");
Map<String, Serializable> actionProps2 = new HashMap<String, Serializable>();
actionProps2.put(ImageTransformActionExecuter.PARAM_MIME_TYPE, MimetypeMap.MIMETYPE_IMAGE_JPEG);
actionProps2.put(ImageTransformActionExecuter.PARAM_DESTINATION_FOLDER, nodeRef);
actionProps2.put(ImageTransformActionExecuter.PARAM_ASSOC_QNAME, ContentModel.ASSOC_CHILDREN);
Rule rule2 = new Rule();
rule2.setRuleType(this.ruleType.getName());
rule2.setTitle("Convert from *.gif to *.jpg");
rule2.setExecuteAsynchronously(true);
Action action2 = this.actionService.createAction(ImageTransformActionExecuter.NAME);
action2.setParameterValues(actionProps2);
ActionCondition actionCondition2 = this.actionService.createActionCondition(ComparePropertyValueEvaluator.NAME);
actionCondition2.setParameterValues(conditionProps2);
action2.addActionCondition(actionCondition2);
rule2.setAction(action2);
// Save the rules
this.ruleService.saveRule(nodeRef, rule);
this.ruleService.saveRule(nodeRef, rule);
// Now create new content
NodeRef contentNode = this.nodeService.createNode(nodeRef,
ContentModel.ASSOC_CHILDREN,
QName.createQName("{test}testnode"),
ContentModel.TYPE_CONTENT).getChildRef();
this.nodeService.setProperty(contentNode, ContentModel.PROP_NAME, "myFile.jpg");
File file = AbstractContentTransformerTest.loadQuickTestFile("jpg");
ContentWriter writer = this.contentService.getWriter(contentNode, ContentModel.PROP_CONTENT, true);
writer.setEncoding("UTF-8");
writer.setMimetype(MimetypeMap.MIMETYPE_IMAGE_JPEG);
writer.putContent(file);
setComplete();
endTransaction();
//final NodeRef finalNodeRef = nodeRef;
// Check to see what has happened
// ActionServiceImplTest.postAsyncActionTest(
// this.transactionService,
// 10000,
// 10,
// new AsyncTest()
// {
// public boolean executeTest()
// {
// List<ChildAssociationRef> assocs = RuleServiceImplTest.this.nodeService.getChildAssocs(finalNodeRef);
// for (ChildAssociationRef ref : assocs)
// {
// NodeRef child = ref.getChildRef();
// System.out.println("Child name: " + RuleServiceImplTest.this.nodeService.getProperty(child, ContentModel.PROP_NAME));
// }
//
// return true;
// };
// });
}
}