public void build(RuleBuildContext context, String name) { context.getRuleDescr().setConsequence("consequence was built"); } }
setupTest( "", new HashMap<String, Object>() ); try { ruleDescr.setConsequence( consequence ); JavaExprAnalyzer analyzer = new JavaExprAnalyzer(); JavaAnalysisResult analysis = (JavaAnalysisResult) analyzer.analyzeBlock( (String) ruleDescr.getConsequence(),
setupTest( "", new HashMap<String, Object>() ); try { ruleDescr.setConsequence( consequence ); JavaExprAnalyzer analyzer = new JavaExprAnalyzer(); JavaAnalysisResult analysis = (JavaAnalysisResult) analyzer.analyzeBlock( (String) ruleDescr.getConsequence(),
private void createEvalRule( final PackageDescr packageDescr, final String expression ) { final RuleDescr ruleDescr = new RuleDescr( "rule-1" ); packageDescr.addRule( ruleDescr ); final AndDescr lhs = new AndDescr(); ruleDescr.setLhs( lhs ); packageDescr.addGlobal( new GlobalDescr( "map", "java.util.Map" ) ); final EvalDescr evalDescr = new EvalDescr( expression ); lhs.addDescr( evalDescr ); ruleDescr.setConsequence( "" ); }
private PackageDescr createBasicPackageWithOneRule(int line, int col) { PackageDescr packageDescr = new PackageDescr( "p1" ); RuleDescr ruleDescr = new RuleDescr( "rule-1" ); ruleDescr.setLocation( line, col ); packageDescr.addRule( ruleDescr ); AndDescr lhs = new AndDescr(); ruleDescr.setLhs( lhs ); PatternDescr patternDescr = new PatternDescr( Cheese.class.getName(), "stilton" ); FieldConstraintDescr literalDescr = new FieldConstraintDescr( "type" ); literalDescr.addRestriction( new LiteralRestrictionDescr( "==", null ) ); patternDescr.addConstraint( literalDescr ); ruleDescr.setConsequence( "" ); return packageDescr; }
private void createLiteralRule( final BaseDescr descr ) { final KnowledgeBuilderImpl builder = new KnowledgeBuilderImpl(); final PackageDescr packageDescr = new PackageDescr( "p1" ); final RuleDescr ruleDescr = new RuleDescr( "rule-1" ); packageDescr.addRule( ruleDescr ); final AndDescr lhs = new AndDescr(); ruleDescr.setLhs( lhs ); final PatternDescr pattern = new PatternDescr( Primitives.class.getName() ); lhs.addDescr( pattern ); pattern.addConstraint( descr ); ruleDescr.setConsequence( "" ); builder.addPackage( packageDescr ); assertLength( 0, builder.getErrors().getErrors() ); }
@Test public void testLiteral() throws Exception { final KnowledgeBuilderImpl builder = new KnowledgeBuilderImpl(); final PackageDescr packageDescr = new PackageDescr( "p1" ); final RuleDescr ruleDescr = new RuleDescr( "rule-1" ); packageDescr.addRule( ruleDescr ); final AndDescr lhs = new AndDescr(); ruleDescr.setLhs( lhs ); final PatternDescr pattern = new PatternDescr( Cheese.class.getName(), "stilton" ); lhs.addDescr( pattern ); pattern.addConstraint( new ExprConstraintDescr( "type == 'stilton'" ) ); ruleDescr.setConsequence( "update(stilton);" ); builder.addPackage( packageDescr ); assertLength( 0, builder.getErrors().getErrors() ); }
private void createReturnValueRule( final PackageDescr packageDescr, final String expression ) { final RuleDescr ruleDescr = new RuleDescr( "rule-1" ); packageDescr.addRule( ruleDescr ); final AndDescr lhs = new AndDescr(); ruleDescr.setLhs( lhs ); final PatternDescr pattern = new PatternDescr( Cheese.class.getName(), "stilton" ); lhs.addDescr( pattern ); BindingDescr fieldBindingDescr = new BindingDescr( "x", "price" ); pattern.addConstraint( fieldBindingDescr ); fieldBindingDescr = new BindingDescr( "y", "price" ); pattern.addConstraint( fieldBindingDescr ); packageDescr.addGlobal( new GlobalDescr( "map", "java.util.Map" ) ); pattern.addConstraint( new ExprConstraintDescr("price == (" + expression + ")") ); ruleDescr.setConsequence( "update(stilton);" ); }
private void createPredicateRule( final PackageDescr packageDescr, final String expression ) { final RuleDescr ruleDescr = new RuleDescr( "rule-1" ); packageDescr.addRule( ruleDescr ); final AndDescr lhs = new AndDescr(); ruleDescr.setLhs( lhs ); final PatternDescr pattern = new PatternDescr( Cheese.class.getName(), "stilton" ); lhs.addDescr( pattern ); final BindingDescr fieldBindingDescr = new BindingDescr( "x", "price" ); pattern.addConstraint( fieldBindingDescr ); final BindingDescr fieldBindingDescr2 = new BindingDescr( "y", "price" ); pattern.addConstraint( fieldBindingDescr2 ); packageDescr.addGlobal( new GlobalDescr( "map", "java.util.Map" ) ); pattern.addConstraint( new ExprConstraintDescr( expression ) ); ruleDescr.setConsequence( "update(stilton);" ); }
@Test public void testInvalidDialect() throws Exception { final PackageDescr pkgDescr = new PackageDescr( "org.drools" ); final RuleDescr ruleDescr = new RuleDescr( "Test Rule" ); ruleDescr.addAttribute( new AttributeDescr( "dialect", "mvl" ) ); ruleDescr.setConsequence( "" ); pkgDescr.addRule( ruleDescr ); final KnowledgeBuilderImpl kBuilder = new KnowledgeBuilderImpl(); kBuilder.addPackage(pkgDescr); assertFalse(kBuilder.getErrors().toString(), kBuilder.getErrors().isEmpty()); }
@Test public void testBuildBigDecimalLiteralConstraint() throws Exception { final PackageDescr pkgDescr = new PackageDescr( "org.drools" ); final RuleDescr ruleDescr = new RuleDescr( "Test Rule" ); AndDescr andDescr = new AndDescr(); PatternDescr patDescr = new PatternDescr( "java.math.BigDecimal", "$bd" ); ExprConstraintDescr fcd = new ExprConstraintDescr( "this == 10" ); patDescr.addConstraint( fcd ); andDescr.addDescr( patDescr ); ruleDescr.setLhs( andDescr ); ruleDescr.setConsequence( "" ); pkgDescr.addRule( ruleDescr ); final KnowledgeBuilderImpl kBuilder = new KnowledgeBuilderImpl(); kBuilder.addPackage(pkgDescr); assertTrue(kBuilder.getErrors().toString(), kBuilder.getErrors().isEmpty()); final RuleImpl rule = kBuilder.getPackages()[0].getRule( "Test Rule" ); final GroupElement and = rule.getLhs(); final Pattern pat = (Pattern) and.getChildren().get( 0 ); if (pat.getConstraints().get(0) instanceof MvelConstraint) { final MvelConstraint fc = (MvelConstraint) pat.getConstraints().get( 0 ); assertTrue( "Wrong class. Expected java.math.BigDecimal. Found: " + fc.getField().getValue().getClass(), fc.getField().getValue() instanceof BigDecimal ); } }
@Test public void testBuildBigIntegerLiteralConstraint() throws Exception { final PackageDescr pkgDescr = new PackageDescr( "org.drools" ); final RuleDescr ruleDescr = new RuleDescr( "Test Rule" ); AndDescr andDescr = new AndDescr(); PatternDescr patDescr = new PatternDescr( "java.math.BigInteger", "$bd" ); ExprConstraintDescr fcd = new ExprConstraintDescr( "this==10" ); patDescr.addConstraint( fcd ); andDescr.addDescr( patDescr ); ruleDescr.setLhs( andDescr ); ruleDescr.setConsequence( "" ); pkgDescr.addRule( ruleDescr ); final KnowledgeBuilderImpl kBuilder = new KnowledgeBuilderImpl(); kBuilder.addPackage(pkgDescr); assertTrue(kBuilder.getErrors().toString(), kBuilder.getErrors().isEmpty()); final RuleImpl rule = kBuilder.getPackages()[0].getRule( "Test Rule" ); final GroupElement and = rule.getLhs(); final Pattern pat = (Pattern) and.getChildren().get( 0 ); if (pat.getConstraints().get(0) instanceof MvelConstraint) { final MvelConstraint fc = (MvelConstraint) pat.getConstraints().get( 0 ); assertTrue( "Wrong class. Expected java.math.BigInteger. Found: " + fc.getField().getValue().getClass(), fc.getField().getValue() instanceof BigInteger ); } }
private RuleImpl createRule( final ConditionalElementDescr ceDescr, final KnowledgeBuilderImpl builder, final String consequence ) throws Exception { final PackageDescr packageDescr = new PackageDescr( "p1" ); final RuleDescr ruleDescr = new RuleDescr( "rule-1" ); packageDescr.addRule( ruleDescr ); final AndDescr lhs = new AndDescr(); ruleDescr.setLhs( lhs ); lhs.addDescr( (BaseDescr) ceDescr ); final PatternDescr patternDescr = new PatternDescr( Cheese.class.getName(), "stilton" ); patternDescr.addConstraint( new ExprConstraintDescr( "type == \"stilton\" ") ); ceDescr.addDescr( patternDescr ); ruleDescr.setConsequence( consequence ); builder.addPackage( packageDescr ); InternalKnowledgePackage pkg = builder.getPackage(packageDescr.getName()); final RuleImpl rule = pkg.getRule( "rule-1" ); assertEquals( "rule-1", rule.getName() ); return rule; }
@Test public void testNull() { final KnowledgeBuilderImpl builder = new KnowledgeBuilderImpl(); final PackageDescr packageDescr = new PackageDescr( "p1" ); final RuleDescr ruleDescr = new RuleDescr( "rule-1" ); packageDescr.addRule( ruleDescr ); final AndDescr lhs = new AndDescr(); ruleDescr.setLhs( lhs ); final PatternDescr patternDescr = new PatternDescr( Cheese.class.getName(), "stilton" ); final FieldConstraintDescr literalDescr = new FieldConstraintDescr( "type" ); literalDescr.addRestriction( new LiteralRestrictionDescr( "==", null ) ); patternDescr.addConstraint( literalDescr ); ruleDescr.setConsequence( "" ); builder.addPackage( packageDescr ); InternalKnowledgePackage pkg = builder.getPackage(packageDescr.getName()); final RuleImpl rule = pkg.getRule( "rule-1" ); assertLength( 0, builder.getErrors().getErrors() ); }
@Test @Ignore // TODO we now allow bindings on declarations, so update the test for this public void testDuplicateDeclaration() { final KnowledgeBuilderImpl builder = new KnowledgeBuilderImpl(); final PackageDescr packageDescr = new PackageDescr( "p1" ); final RuleDescr ruleDescr = new RuleDescr( "rule-1" ); packageDescr.addRule( ruleDescr ); final AndDescr lhs = new AndDescr(); ruleDescr.setLhs( lhs ); final PatternDescr pattern1 = new PatternDescr( Cheese.class.getName() ); lhs.addDescr( pattern1 ); final BindingDescr fieldBindingDescr = new BindingDescr( "$type", "type" ); final FieldConstraintDescr literalDescr = new FieldConstraintDescr( "type" ); literalDescr.addRestriction( new LiteralRestrictionDescr( "==", "stilton" ) ); pattern1.addConstraint( fieldBindingDescr ); pattern1.addConstraint( literalDescr ); final PatternDescr pattern2 = new PatternDescr( Cheese.class.getName() ); lhs.addDescr( pattern2 ); pattern2.addConstraint( fieldBindingDescr ); ruleDescr.setConsequence( "update(stilton);" ); builder.addPackage( packageDescr ); assertLength( 2, builder.getErrors().getErrors() ); }
@Test public void testPredicate() throws Exception { final KnowledgeBuilderImpl builder = new KnowledgeBuilderImpl(); final PackageDescr packageDescr = new PackageDescr( "p1" ); final RuleDescr ruleDescr = new RuleDescr( "rule-1" ); packageDescr.addRule( ruleDescr ); final AndDescr lhs = new AndDescr(); ruleDescr.setLhs( lhs ); final PatternDescr pattern = new PatternDescr( Cheese.class.getName(), "stilton" ); lhs.addDescr( pattern ); final BindingDescr fieldBindingDescr = new BindingDescr( "x", "price" ); pattern.addConstraint( fieldBindingDescr ); final BindingDescr fieldBindingDescr2 = new BindingDescr( "y", "price" ); pattern.addConstraint( fieldBindingDescr2 ); packageDescr.addGlobal( new GlobalDescr( "map", "java.util.Map" ) ); final ExprConstraintDescr predicate = new ExprConstraintDescr( "eval(( ( Integer )map.get( new Integer(x) )).intValue() == y)" ); pattern.addConstraint( predicate ); ruleDescr.setConsequence( "update(stilton);" ); builder.addPackage( packageDescr ); assertLength( 0, builder.getErrors().getErrors() ); }
@Test public void testErrors() throws Exception { final KnowledgeBuilderImpl builder = new KnowledgeBuilderImpl(); final PackageDescr packageDescr = new PackageDescr( "p1" ); final RuleDescr ruleDescr = new RuleDescr( "rule-1" ); packageDescr.addRule( ruleDescr ); final AndDescr lhs = new AndDescr(); ruleDescr.setLhs( lhs ); final PatternDescr pattern = new PatternDescr( Cheese.class.getName(), "stilton" ); lhs.addDescr( pattern ); BindingDescr fieldBindingDescr = new BindingDescr( "x", "price" ); pattern.addConstraint( fieldBindingDescr ); fieldBindingDescr = new BindingDescr( "y", "price" ); pattern.addConstraint( fieldBindingDescr ); packageDescr.addGlobal( new GlobalDescr( "map", "java.util.Map" ) ); pattern.addConstraint( new ExprConstraintDescr("price == x") ); // There is no m this should produce errors. ruleDescr.setConsequence( "update(m);" ); builder.addPackage( packageDescr ); assertTrue( builder.getErrors().getErrors().length > 0 ); }
@Test public void testReturnValue() throws Exception { final KnowledgeBuilderImpl builder = new KnowledgeBuilderImpl(); final PackageDescr packageDescr = new PackageDescr( "p1" ); final RuleDescr ruleDescr = new RuleDescr( "rule-1" ); packageDescr.addRule( ruleDescr ); final AndDescr lhs = new AndDescr(); ruleDescr.setLhs( lhs ); final PatternDescr pattern = new PatternDescr( Cheese.class.getName(), "stilton" ); lhs.addDescr( pattern ); BindingDescr fieldBindingDescr = new BindingDescr( "x", "price" ); pattern.addConstraint( fieldBindingDescr ); fieldBindingDescr = new BindingDescr( "y", "price" ); pattern.addConstraint( fieldBindingDescr ); packageDescr.addGlobal( new GlobalDescr( "map", "java.util.Map" ) ); pattern.addConstraint( new ExprConstraintDescr("price == (( (Integer) map.get( new Integer( x )) ).intValue() * y)") ); ruleDescr.setConsequence( "update(stilton);" ); builder.addPackage( packageDescr ); assertEquals( "Should not have any errors", 0, builder.getErrors().getErrors().length ); }
ruleDescr.addAttribute( new AttributeDescr( "salience", "(p.age + 20)/2" ) ); ruleDescr.setConsequence( "" );
lhs.addDescr( evalDescr ); ruleDescr.setConsequence( "update(stilton);" );