@Test public void testAddSingleBranchAnd() { final GroupElement and1 = GroupElementFactory.newAndInstance(); final Pattern pattern = new Pattern( 0, null ); and1.addChild( pattern ); assertEquals( 1, and1.getChildren().size() ); assertSame( pattern, and1.getChildren().get( 0 ) ); final GroupElement or1 = GroupElementFactory.newOrInstance(); or1.addChild( and1 ); or1.pack(); assertEquals( 1, or1.getChildren().size() ); assertSame( pattern, or1.getChildren().get( 0 ) ); }
protected boolean checkProcessInstance(Activation activation) { final Map<?, ?> declarations = activation.getSubRule().getOuterDeclarations(); for ( Iterator<?> it = declarations.values().iterator(); it.hasNext(); ) { Declaration declaration = (Declaration) it.next(); if ("processInstance".equals(declaration.getIdentifier()) || "org.kie.api.runtime.process.WorkflowProcessInstance".equals(declaration.getTypeName())) { Object value = declaration.getValue( ((StatefulKnowledgeSessionImpl) getProcessInstance().getKnowledgeRuntime()).getInternalWorkingMemory(), ((InternalFactHandle) activation.getTuple().get(declaration)).getObject()); if (value instanceof ProcessInstance) { return ((ProcessInstance) value).getId() == getProcessInstance().getId(); } } } return true; }
final DrlParser parser = new DrlParser(LanguageLevelOption.DRL5); parser.hasErrors() ); pkg.addGlobal("results", List.class); kBuilder.getErrors().isEmpty()); final RuleImpl rule = kBuilder.getPackage("org.drools.compiler").getRule( "test nested CEs" ); rule.getDeclarations().size() ); final GroupElement not = (GroupElement) rule.getLhs().getChildren().get( 1 ); assertTrue( not.isNot() ); assertTrue( not.getOuterDeclarations().isEmpty() ); assertEquals( 1, not.getInnerDeclarations().size() ); assertTrue( not.getInnerDeclarations().keySet().contains( "$state" ) ); final GroupElement not2 = (GroupElement) ((GroupElement) not.getChildren().get( 0 )).getChildren().get( 1 ); assertTrue( not2.isNot() ); assertTrue( not2.getOuterDeclarations().isEmpty() ); assertEquals( 1, not2.getInnerDeclarations().size() ); assertTrue( not2.getInnerDeclarations().keySet().contains( "$likes" ) );
@Test public void testReturnValueMethodCompare() { final KnowledgeBuilderImpl builder1 = new KnowledgeBuilderImpl(); final PackageDescr packageDescr1 = new PackageDescr( "package1" ); createReturnValueRule( packageDescr1, " x + y " ); builder1.addPackage( packageDescr1 ); if ( builder1.hasErrors() ) { fail( builder1.getErrors().toString() ); final Pattern pattern1 = (Pattern) ((RuleImpl)builder1.getPackage("package1").getRules().iterator().next()).getLhs().getChildren().get( 0 ); final Constraint returnValue1 = pattern1.getConstraints().get( 0 ); " x + y " ); builder2.addPackage( packageDescr2 ); final Pattern pattern2 = (Pattern) ((RuleImpl)builder2.getPackage("package2").getRules().iterator().next()).getLhs().getChildren().get( 0 ); final Constraint returnValue2 = pattern2.getConstraints().get( 0 ); " x - y " ); builder3.addPackage( packageDescr3 ); final Pattern pattern3 = (Pattern) ((RuleImpl)builder3.getPackage("package3").getRules().iterator().next()).getLhs().getChildren().get( 0 ); final Constraint returnValue3 = pattern3.getConstraints().get( 0 );
@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 ); } }
@Test public void testOr() throws Exception { final KnowledgeBuilderImpl builder = new KnowledgeBuilderImpl(); final RuleImpl rule = createRule( new OrDescr(), builder, "update(stilton);" ); assertLength( 0, builder.getErrors().getErrors() ); final GroupElement lhs = rule.getLhs(); assertLength( 1, lhs.getChildren() ); final GroupElement or = (GroupElement) lhs.getChildren().get( 0 ); assertLength( 1, or.getChildren() ); final Pattern pattern = (Pattern) or.getChildren().get( 0 ); }
@Test public void testEval() throws Exception { final KnowledgeBuilderImpl builder = new KnowledgeBuilderImpl(); builder.addPackage( packageDescr ); builder.getErrors().getErrors() ); InternalKnowledgePackage pkg = builder.getPackage(packageDescr.getName()); final RuleImpl rule = pkg.getRule( "rule-1" ); final EvalCondition eval = (EvalCondition) rule.getLhs().getChildren().get( 1 ); final CompiledInvoker invoker = (CompiledInvoker) eval.getEvalExpression(); String s = invoker.getMethodBytecode();
@Test public void testEvalMethodCompare() { final KnowledgeBuilderImpl builder1 = new KnowledgeBuilderImpl(); final PackageDescr packageDescr1 = new PackageDescr( "package1" ); createEvalRule( packageDescr1, "1==1" ); builder1.addPackage( packageDescr1 ); final EvalCondition eval1 = (EvalCondition) ((RuleImpl)builder1.getPackage("package1").getRules().iterator().next()).getLhs().getChildren().get( 0 ); final KnowledgeBuilderImpl builder2 = new KnowledgeBuilderImpl(); final PackageDescr packageDescr2 = new PackageDescr( "package2" ); createEvalRule( packageDescr2, "1==1" ); builder2.addPackage( packageDescr2 ); final EvalCondition eval2 = (EvalCondition) ((RuleImpl)builder2.getPackage("package2").getRules().iterator().next()).getLhs().getChildren().get( 0 ); final KnowledgeBuilderImpl builder3 = new KnowledgeBuilderImpl(); final PackageDescr packageDescr3 = new PackageDescr( "package3" ); createEvalRule( packageDescr3, "1==3" ); builder3.addPackage( packageDescr3 ); final EvalCondition eval3 = (EvalCondition) ((RuleImpl)builder3.getPackage("package3").getRules().iterator().next()).getLhs().getChildren().get( 0 ); assertEquals( eval1, eval2 ); assertFalse( eval1.equals( eval3 ) ); assertFalse( eval2.equals( eval3 ) ); }
@Test public void testTimeWindowBehavior() throws Exception { final KnowledgeBuilderImpl builder = new KnowledgeBuilderImpl(); builder.addPackage( packageDescr ); builder.getErrors().getErrors() ); InternalKnowledgePackage pkg = builder.getPackageRegistry().get( "p1" ).getPackage(); final RuleImpl rule = pkg.getRule( "rule-1" ); assertNotNull( rule ); final Pattern pattern = (Pattern) rule.getLhs().getChildren().get( 0 ); assertEquals( StockTick.class.getName(), ((ClassObjectType) pattern.getObjectType()).getClassType().getName() );
@Test public void testSimpleExpression() throws Exception { PackageDescr pkgDescr = new PackageDescr( "pkg1" ); KnowledgeBuilderImpl pkgBuilder = new KnowledgeBuilderImpl(); pkgBuilder.addPackage( pkgDescr ); InternalKnowledgePackage pkg = pkgBuilder.getPackageRegistry( "pkg1" ).getPackage(); final RuleDescr ruleDescr = new RuleDescr( "rule 1" ); ruleDescr.setNamespace( "pkg1" ); ruleDescr.setConsequence( "modify (cheese) {price = 5 };\nretract (cheese)" ); DialectCompiletimeRegistry dialectRegistry = pkgBuilder.getPackageRegistry( pkg.getName() ).getDialectCompiletimeRegistry(); "cheese" ); final GroupElement subrule = new GroupElement( GroupElement.AND ); subrule.addChild( pattern ); final Map<String, Declaration> map = new HashMap<String, Declaration>(); map.put( "cheese", final DefaultKnowledgeHelper kbHelper = new DefaultKnowledgeHelper( ksession ); kbHelper.setActivation( item ); ((MVELConsequence) context.getRule().getConsequence()).compile( (MVELDialectRuntimeData) pkgBuilder.getPackageRegistry( pkg.getName() ).getDialectRuntimeRegistry().getDialectData( "mvel" )); context.getRule().getConsequence().evaluate( kbHelper, ksession );
System.out.println( drl ); KnowledgeBuilderImpl knowledgeBuilder = (KnowledgeBuilderImpl)KnowledgeBuilderFactory.newKnowledgeBuilder(); knowledgeBuilder.add( new ByteArrayResource( drl.getBytes() ), ResourceType.DRL ); System.err.println( knowledgeBuilder.getErrors() ); assertFalse( knowledgeBuilder.getErrors().toString(), knowledgeBuilder.hasErrors() ); RuleImpl r = ((RuleImpl) rule); assertEquals( 2, r.getLhs().getChildren().size() ); Iterator<RuleConditionElement> iter = r.getLhs().getChildren().iterator(); assertTrue( arg1 instanceof GroupElement && ((GroupElement) arg1).getType() == GroupElement.Type.OR ); assertEquals( 2, ((GroupElement) arg1).getChildren().size() );
KiePackage pkg3 = getKnowledgePackage2(); RuleImpl rule1 = ((InternalKnowledgePackage)pkg1).getRule( "rule1" ); RuleImpl rule2 = ((InternalKnowledgePackage)pkg2).getRule("rule1"); RuleImpl rule3 = ((InternalKnowledgePackage)pkg3).getRule( "rule1" ); Pattern p1 = ( Pattern ) rule1.getLhs().getChildren().get( 0 ); Constraint rvc1 = p1.getConstraints().get( 0 ); Pattern p2 = ( Pattern ) rule2.getLhs().getChildren().get( 0 ); Constraint rvc2 = p2.getConstraints().get( 0 ); assertEquals( rvc1, rvc2 ); Pattern p3 = ( Pattern ) rule3.getLhs().getChildren().get( 0 ); Constraint rvc3 = p3.getConstraints().get( 0 ); EvalCondition ec1 = ( EvalCondition ) rule1.getLhs().getChildren().get( 1 ); EvalExpression ee1 =( EvalExpression) ec1.getEvalExpression(); EvalCondition ec2 = ( EvalCondition ) rule2.getLhs().getChildren().get( 1 ); EvalExpression ee2 =( EvalExpression) ec2.getEvalExpression(); assertNotSame( ee1, ee2 ); assertEquals(ee1, ee2 ); EvalCondition ec3 = ( EvalCondition ) rule3.getLhs().getChildren().get( 1 ); EvalExpression ee3 =( EvalExpression) ec3.getEvalExpression(); assertNotSame( ee1,ee3 );
parent.addChild( or ); or.addChild( a ); or.addChild( b ); assertTrue( parent.isNot() ); assertEquals( 1, parent.getChildren().size() ); final GroupElement and = (GroupElement) parent.getChildren().get( 0 ); assertTrue( and.isAnd() ); assertEquals( 2, and.getChildren().size() ); final GroupElement b1 = (GroupElement) and.getChildren().get( 0 ); final GroupElement b2 = (GroupElement) and.getChildren().get( 1 ); assertTrue( b1.isNot() ); assertTrue( b2.isNot() ); b1.getChildren().size() ); assertEquals( a, b1.getChildren().get( 0 ) ); b2.getChildren().size() ); assertEquals( b, b2.getChildren().get( 0 ) );
@Test public void testAddRuleWithPatterns() { final RuleImpl rule = new RuleImpl( "only patterns" ); final Pattern c1 = new Pattern( 0, new ClassObjectType( String.class ) ); lhsroot.addChild( c1 ); lhsroot.addChild( c2 ); lhsroot.addChild( c3 ); rule.setLhs( lhsroot ); rule.setConsequence( consequence );
final Pattern pattern1 = new Pattern( 0, null ); or1.addChild( pattern1 ); or1.addChild( pattern2 ); and1.addChild( or1 ); assertEquals( 1, and1.getChildren().size() ); assertSame( or1, and1.getChildren().get( 0 ) ); or1.getChildren().get( 0 ) ); assertSame( pattern2, or1.getChildren().get( 1 ) ); or2.addChild( and1 ); or2.getChildren().size() ); assertSame( and1, or2.getChildren().get( 0 ) ); or3.addChild( or2 ); or2.getChildren().size() ); assertSame( or2, or3.getChildren().get( 0 ) ); and2.addChild( or3 );
new ClassObjectType( Person.class), "x" ); and1.addChild( pattern1 ); and1.addChild( pattern2 ); Declaration x1 = ( Declaration ) and1.getInnerDeclarations().get( "x" ); Declaration y1 = ( Declaration ) and1.getInnerDeclarations().get( "y" ); Declaration z1 = ( Declaration ) and1.getInnerDeclarations().get( "z" ); assertNotNull( x1 ); assertNotNull( y1 ); and1.getChildren().size() ); assertSame( pattern1, and1.getChildren().get( 0 ) ); assertSame( pattern2, and1.getChildren().get( 1 ) ); and2.addChild( and1 ); and2.addChild( pattern3 ); and2.pack(); assertEquals( 3, and2.getChildren().size() ); assertSame( pattern1, and2.getChildren().get( 0 ) ); assertSame( pattern2, and2.getChildren().get( 1 ) );
or.addChild( a ); or.addChild( b ); parent.addChild( or ); parent.addChild( c ); or2.addChild( d ); or2.addChild( e ); parent.addChild( or2 ); not.addChild( f ); parent.addChild( not ); parent.getType() ); parent.getChildren() ); assertEquals( GroupElement.class, parent.getChildren().get( 0 ).getClass() ); assertEquals( GroupElement.class, parent.getChildren().get( 1 ).getClass() ); assertEquals( GroupElement.class, parent.getChildren().get( 2 ).getClass() ); assertEquals( GroupElement.class, parent.getChildren().get( 3 ).getClass() ); GroupElement and1 = (GroupElement) parent.getChildren().get( 0 ); assertTrue( and1.isAnd() ); assertLength( 4, and1.getChildren() ); assertEquals( a,
final Pattern pattern1 = new Pattern( 0, null ); or1.addChild( pattern1 ); or1.addChild( pattern2 ); and1.addChild( or1 ); assertEquals( 1, and1.getChildren().size() ); assertSame( or1, and1.getChildren().get( 0 ) ); or1.getChildren().get( 0 ) ); assertSame( pattern2, or1.getChildren().get( 1 ) ); or2.addChild( and1 ); or2.getChildren().size() ); assertSame( and1, or2.getChildren().get( 0 ) ); or3.addChild( or2 ); or2.getChildren().size() ); assertSame( or2, or3.getChildren().get( 0 ) ); and2.addChild( or3 );
or.addChild( a ); or.addChild( b ); parent.addChild( or ); parent.addChild( c ); parent.getChildren() ); assertEquals( GroupElement.class, parent.getChildren().get( 0 ).getClass() ); assertEquals( GroupElement.class, parent.getChildren().get( 1 ).getClass() ); final GroupElement and1 = (GroupElement) parent.getChildren().get( 0 ); assertTrue( and1.isAnd() ); and1.getChildren().get( 0 ) ); assertEquals( c, and1.getChildren().get( 1 ) ); final GroupElement and2 = (GroupElement) parent.getChildren().get( 1 ); assertEquals( b, and2.getChildren().get( 0 ) ); assertEquals( c, and2.getChildren().get( 1 ) );
and1.addChild( a ); and1.addChild( b ); and2.addChild( c ); and2.addChild( d ); and1.addChild( and2 ); and1.addChild( or ); result ); assertLength( 4, result[0].getChildren() ); result[0].getChildren().get( 0 ) ); assertEquals( b, result[0].getChildren().get( 1 ) ); assertEquals( c, result[0].getChildren().get( 2 ) ); assertEquals( d, result[0].getChildren().get( 3 ) );