From: <jbo...@li...> - 2006-05-09 04:41:39
|
Author: bagerman Date: 2006-05-09 00:41:33 -0400 (Tue, 09 May 2006) New Revision: 4144 Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/LeapsTest.java labs/jbossrules/trunk/drools-core/src/main/java/org/drools/leaps/LeapsAgenda.java Log: Xor group implementation for leaps Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/LeapsTest.java =================================================================== --- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/LeapsTest.java 2006-05-09 00:46:25 UTC (rev 4143) +++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/LeapsTest.java 2006-05-09 04:41:33 UTC (rev 4144) @@ -27,6 +27,8 @@ import org.drools.WorkingMemory; import org.drools.compiler.PackageBuilder; import org.drools.rule.Package; +import org.drools.spi.AgendaGroup; +import org.drools.spi.XorGroup; /** * This runs the integration test cases with the leaps implementation. @@ -127,7 +129,38 @@ // Not working in leaps } + + // while Xor group behaviour is supported by leaps certain functionality is no + // due to the lazy nature of leaps and the fact that it does not accumulate + // activations before firing them we can not do counts on xor groups and + // agenda groups as in base integration test public void testXorGroups() throws Exception { - // Not Working in leaps + PackageBuilder builder = new PackageBuilder(); + builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_XorGroups.drl" ) ) ); + Package pkg = builder.getPackage(); + + RuleBase ruleBase = getRuleBase(); + ruleBase.addPackage( pkg ); + WorkingMemory workingMemory = ruleBase.newWorkingMemory(); + + List list = new ArrayList(); + workingMemory.setGlobal( "list", + list ); + + Cheese brie = new Cheese( "brie", + 12 ); + workingMemory.assertObject( brie ); + + workingMemory.fireAllRules(); + + assertEquals( 3, + list.size() ); + assertTrue( "rule0", + list.contains( "rule0" ) ); + assertTrue( "rule1", + list.contains( "rule1" ) ); + assertTrue( "rule2", + list.contains( "rule2" ) ); } + } Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/leaps/LeapsAgenda.java =================================================================== --- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/leaps/LeapsAgenda.java 2006-05-09 00:46:25 UTC (rev 4143) +++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/leaps/LeapsAgenda.java 2006-05-09 04:41:33 UTC (rev 4144) @@ -39,14 +39,24 @@ this.workingMemory = workingMemory; } - public synchronized void fireActivation(Activation activation) throws ConsequenceException { - if ( activation.getRule() instanceof Query ) { + public synchronized void fireActivation( Activation activation ) + throws ConsequenceException { + if (activation.getRule( ) instanceof Query) { // put query results to the working memory location - this.workingMemory.addToQueryResults( activation.getRule().getName(), - activation.getTuple() ); - } else { - // fire regular rule - super.fireActivation( activation ); + this.workingMemory.addToQueryResults( activation.getRule( ).getName( ), + activation.getTuple( ) ); } + else { + if (activation.getRule( ).getXorGroup( ) == null + || ( activation.getRule( ).getXorGroup( ) != null && this.getXorGroup( activation.getRule( ) + .getXorGroup( ) ) + .isEmpty( ) )) { + // fire regular rule + super.fireActivation( activation ); + if (activation.getRule( ).getXorGroup( ) != null) { + this.getXorGroup( activation.getRule( ).getXorGroup( ) ); + } + } + } } } |