protected void visit( final RuleDescr descr ) { checkResource(descr); for( AttributeDescr d : descr.getAttributes().values() ) { visit(d); } visit(descr.getLhs()); visitConsequence(descr.getConsequence()); for( Object o : descr.getNamedConsequences().values() ) { visitConsequence(o); } }
@Test public void testAttributeRefract() throws Exception { final String source = "rule Test refract when Person() then end"; PackageDescr pkg = (PackageDescr) parse( "compilationUnit", source ); assertFalse( parser.getErrors().toString(), parser.hasErrors() ); RuleDescr rule = (RuleDescr) pkg.getRules().get( 0 ); assertEquals( "Test", rule.getName() ); Map<String, AttributeDescr> attributes = rule.getAttributes(); assertEquals( 1, attributes.size() ); AttributeDescr refract = attributes.get( "refract" ); assertNotNull( refract ); assertEquals( "true", refract.getValue() ); }
@Test public void testRuleFlowGroup() throws Exception { final RuleDescr rule = (RuleDescr) parseResource( "rule", "ruleflowgroup.drl" ); assertFalse( parser.getErrors().toString(), parser.hasErrors() ); assertNotNull( rule ); assertEquals( "rule1", rule.getName() ); final AttributeDescr att = (AttributeDescr) rule.getAttributes().get( "ruleflow-group" ); assertEquals( "a group", att.getValue() ); assertEquals( "ruleflow-group", att.getName() ); }
@Test public void testNoLoop() throws Exception { final RuleDescr rule = (RuleDescr) parseResource( "rule", "no-loop.drl" ); assertFalse( parser.getErrors().toString(), parser.hasErrors() ); assertNotNull( rule ); assertEquals( "rule1", rule.getName() ); final AttributeDescr att = (AttributeDescr) rule.getAttributes().get( "no-loop" ); assertEquals( "false", att.getValue() ); assertEquals( "no-loop", att.getName() ); }
@Test public void testAutofocus() throws Exception { final RuleDescr rule = (RuleDescr) parseResource( "rule", "autofocus.drl" ); assertFalse( parser.getErrors().toString(), parser.hasErrors() ); assertNotNull( rule ); assertEquals( "rule1", rule.getName() ); final AttributeDescr att = (AttributeDescr) rule.getAttributes().get( "auto-focus" ); assertEquals( "true", att.getValue() ); assertEquals( "auto-focus", att.getName() ); }
assertEquals( "rule1", rule.getName() ); Map<String, AttributeDescr> attrs = rule.getAttributes(); assertEquals( 2, attrs.size() ); assertEquals( "rule2", rule.getName() ); attrs = rule.getAttributes(); assertEquals( 2, attrs.size() ); assertEquals( "rule3", rule.getName() ); attrs = rule.getAttributes(); assertEquals( 2, attrs.size() );
assertEquals( "bar", rule.getName() ); at = (AttributeDescr) rule.getAttributes().get( "agenda-group" ); assertEquals( "agenda-group", at.getName() ); assertEquals( "x", at.getValue() ); at = (AttributeDescr) rule.getAttributes().get( "dialect" ); assertEquals( "dialect", at.getName() ); assertEquals( "baz", rule.getName() ); at = (AttributeDescr) rule.getAttributes().get( "dialect" ); assertEquals( "dialect", at.getName() ); assertEquals( "mvel", at.getValue() ); at = (AttributeDescr) rule.getAttributes().get( "agenda-group" ); assertEquals( "agenda-group", at.getName() );
@Test public void testDurationExpression() throws Exception { final RuleDescr rule = (RuleDescr) parseResource( "rule", "rule_duration_expression.drl" ); assertEquals( "simple_rule", rule.getName() ); assertEqualsIgnoreWhitespace( "bar();", (String) rule.getConsequence() ); final Map<String, AttributeDescr> attrs = rule.getAttributes(); assertEquals( 2, attrs.size() ); AttributeDescr at = (AttributeDescr) attrs.get( "duration" ); assertEquals( "duration", at.getName() ); assertEquals( "1h30m", at.getValue() ); at = (AttributeDescr) attrs.get( "lock-on-active" ); assertEquals( "lock-on-active", at.getName() ); assertEquals( "true", at.getValue() ); }
@Test public void testCalendars() throws Exception { final RuleDescr rule = (RuleDescr) parseResource( "rule", "rule_calendars_attribute.drl" ); assertEquals( "simple_rule", rule.getName() ); assertEqualsIgnoreWhitespace( "bar();", (String) rule.getConsequence() ); final Map<String, AttributeDescr> attrs = rule.getAttributes(); assertEquals( 2, attrs.size() ); AttributeDescr at = (AttributeDescr) attrs.get( "calendars" ); assertEquals( "calendars", at.getName() ); assertEquals( "[ \"cal1\" ]", at.getValue() ); at = (AttributeDescr) attrs.get( "lock-on-active" ); assertEquals( "lock-on-active", at.getName() ); assertEquals( "true", at.getValue() ); }
@Test public void testAttributeOverriding() { PackageDescr desc = new PackageDescr("foo"); AttributeDescr at1 = new AttributeDescr("foo", "bar"); AttributeDescr at2 = new AttributeDescr("foo2", "default"); desc.addAttribute( at1 ); desc.addAttribute( at2 ); RuleDescr rule = new RuleDescr("abc"); rule.addAttribute( new AttributeDescr("foo", "overridden") ); desc.addRule( rule ); List pkgAts = desc.getAttributes(); assertEquals("bar", ((AttributeDescr)pkgAts.get( 0 )).getValue()); assertEquals("default", ((AttributeDescr)pkgAts.get( 1 )).getValue()); desc.afterRuleAdded( rule ); Map<String, AttributeDescr> ruleAts = rule.getAttributes(); assertEquals("overridden", ((AttributeDescr)ruleAts.get( "foo" )).getValue()); assertEquals("default", ((AttributeDescr)ruleAts.get( "foo2" )).getValue()); }
@Test public void testCalendars2() throws Exception { final RuleDescr rule = (RuleDescr) parseResource( "rule", "rule_calendars_attribute2.drl" ); assertFalse( parser.getErrors().toString(), parser.hasErrors() ); assertEquals( "simple_rule", rule.getName() ); assertEqualsIgnoreWhitespace( "bar();", (String) rule.getConsequence() ); final Map<String, AttributeDescr> attrs = rule.getAttributes(); assertEquals( 2, attrs.size() ); AttributeDescr at = (AttributeDescr) attrs.get( "calendars" ); assertEquals( "calendars", at.getName() ); assertEquals( "[ \"cal 1\", \"cal 2\", \"cal 3\" ]", at.getValue() ); at = (AttributeDescr) attrs.get( "lock-on-active" ); assertEquals( "lock-on-active", at.getName() ); assertEquals( "true", at.getValue() ); }
@Test public void testEnabledExpression() throws Exception { final RuleDescr rule = (RuleDescr) parseResource( "rule", "rule_enabled_expression.drl" ); assertEquals( "simple_rule", rule.getName() ); assertEqualsIgnoreWhitespace( "bar();", (String) rule.getConsequence() ); final Map<String, AttributeDescr> attrs = rule.getAttributes(); assertEquals( 3, attrs.size() ); AttributeDescr at = (AttributeDescr) attrs.get( "enabled" ); assertEquals( "enabled", at.getName() ); assertEquals( "( 1 + 1 == 2 )", at.getValue() ); at = (AttributeDescr) attrs.get( "salience" ); assertEquals( "salience", at.getName() ); assertEquals( "( 1+2 )", at.getValue() ); at = (AttributeDescr) attrs.get( "lock-on-active" ); assertEquals( "lock-on-active", at.getName() ); assertEquals( "true", at.getValue() ); }
(String) rule.getConsequence() ); final Map<String, AttributeDescr> attrs = rule.getAttributes(); assertEquals( 6, attrs.size() );
(String) rule.getConsequence() ); final Map<String, AttributeDescr> attrs = rule.getAttributes(); assertEquals( 6, attrs.size() );
protected void visit(final RuleDescr descr) { // This is the NAME of the rule, not a reference to it!! String ruleName = getPackagePrefix() + descr.getName(); addResource(ruleName, ResourceType.RULE); // This is, on other hand, is a reference to the parent rule (because it's used in inheritance) String parentRuleName = descr.getParentName(); if (parentRuleName != null) { addResourceReference(parentRuleName, ResourceType.RULE); } for (AttributeDescr d : descr.getAttributes().values()) { visit(d); } visit(descr.getLhs()); visitConsequence(descr.getConsequence()); // need compilation for this.. for (String namedConsequence : descr.getNamedConsequences().keySet()) { // TODO // ? addResourceReference(namedConsequence, PartType.NAMED_CONSEQUENCE); } visitAnnos(descr); }
Map<String, AttributeDescr> ruleAttrs = rule.getAttributes(); assertEquals( 1, ruleAttrs.size() );
private RuleModel getRuleModel( ExpandedDRLInfo expandedDRLInfo ) { //De-serialize model RuleDescr ruleDescr = parseDrl( expandedDRLInfo ); RuleModel model = new RuleModel(); model.name = ruleDescr.getName(); //De-serialize Package name final String packageName = PackageNameParser.parsePackageName( expandedDRLInfo.plainDrl ); model.setPackageName( packageName ); //De-serialize imports final Imports imports = ImportsParser.parseImports( expandedDRLInfo.plainDrl ); for ( Import item : imports.getImports() ) { model.getImports().addImport( item ); } boolean isJavaDialect = parseAttributes( model, ruleDescr.getAttributes() ); Map<String, String> boundParams = parseLhs( model, ruleDescr.getLhs(), expandedDRLInfo ); parseRhs( model, expandedDRLInfo.consequence != null ? expandedDRLInfo.consequence : (String)ruleDescr.getConsequence(), isJavaDialect, boundParams, expandedDRLInfo ); return model; }
ruleDescr.getAttributes()); Map<String, String> boundParams = parseLhs(model, ruleDescr.getLhs(),