[jboss-svn-commits] JBL Code SVN: r12902 - in labs/jbossrules/trunk: drools-compiler/src/test/resources/org/drools/integrationtests and 4 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Wed Jun 27 20:03:23 EDT 2007
Author: tirelli
Date: 2007-06-27 20:03:23 -0400 (Wed, 27 Jun 2007)
New Revision: 12902
Added:
labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_halt.drl
Modified:
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/WorkingMemory.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/DefaultKnowledgeHelper.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InternalWorkingMemoryActions.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/KnowledgeHelper.java
Log:
JBRULES-313: adding halt command
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java 2007-06-27 21:14:23 UTC (rev 12901)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java 2007-06-28 00:03:23 UTC (rev 12902)
@@ -2921,6 +2921,30 @@
assertTrue( list.contains( map ) );
}
+
+ public void testHalt() throws Exception {
+ final PackageBuilder builder = new PackageBuilder();
+ builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_halt.drl" ) ) );
+ final Package pkg = builder.getPackage();
+
+ final RuleBase ruleBase = getRuleBase();
+ ruleBase.addPackage( pkg );
+ final WorkingMemory workingMemory = ruleBase.newStatefulSession();
+
+ final List results = new ArrayList();
+ workingMemory.setGlobal( "results",
+ results );
+
+ workingMemory.insert( new Integer( 0 ) );
+ workingMemory.fireAllRules();
+
+ assertEquals( 10,
+ results.size() );
+ for( int i = 0; i < 10; i++ ) {
+ assertEquals( new Integer( i ), results.get( i ) );
+ }
+ }
+
}
\ No newline at end of file
Added: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_halt.drl
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_halt.drl (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_halt.drl 2007-06-28 00:03:23 UTC (rev 12902)
@@ -0,0 +1,20 @@
+package org.drools;
+
+global java.util.List results;
+
+rule "fire"
+when
+ $old : Number( $val : intValue )
+then
+ results.add( $old );
+ insert( new Integer( $val + 1 ) );
+ retract( $old );
+end
+
+rule "stop"
+ salience 10
+when
+ Number( intValue == 10 )
+then
+ drools.halt();
+end
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/WorkingMemory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/WorkingMemory.java 2007-06-27 21:14:23 UTC (rev 12901)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/WorkingMemory.java 2007-06-28 00:03:23 UTC (rev 12902)
@@ -311,4 +311,11 @@
* Starts a new process instance for the process with the given id.
*/
ProcessInstance startProcess(String processId);
+
+ /**
+ * Stops rule firing after the currect rule finishes executing
+ *
+ */
+ public void halt();
+
}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/DefaultKnowledgeHelper.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/DefaultKnowledgeHelper.java 2007-06-27 21:14:23 UTC (rev 12901)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/DefaultKnowledgeHelper.java 2007-06-28 00:03:23 UTC (rev 12902)
@@ -198,4 +198,8 @@
public Declaration getDeclaration(final String identifier) {
return (Declaration) this.subrule.getOuterDeclarations().get( identifier );
}
+
+ public void halt() {
+ this.workingMemory.halt();
+ }
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java 2007-06-27 21:14:23 UTC (rev 12901)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java 2007-06-28 00:03:23 UTC (rev 12902)
@@ -145,6 +145,8 @@
/** Flag to determine if a rule is currently being fired. */
protected boolean firing;
+
+ protected boolean halt;
// ------------------------------------------------------------
// Constructors
@@ -394,6 +396,10 @@
return this.ruleBase;
}
+ public void halt() {
+ this.halt = true;
+ }
+
/**
* @see WorkingMemory
*/
@@ -405,7 +411,8 @@
// If we're already firing a rule, then it'll pick up
// the firing for any other assertObject(..) that get
// nested inside, avoiding concurrent-modification
- // exceptions, depending on code paths of the actions.
+ // exceptions, depending on code paths of the actions.
+ this.halt = false;
if ( isSequential() ) {
for ( Iterator it = this.liaPropagations.iterator(); it.hasNext(); ) {
@@ -423,7 +430,7 @@
try {
this.firing = true;
- while ( this.agenda.fireNextItem( agendaFilter ) ) {
+ while ( (!halt) && this.agenda.fireNextItem( agendaFilter ) ) {
noneFired = false;
if ( !this.actionQueue.isEmpty() ) {
executeQueuedActions();
@@ -450,7 +457,7 @@
executeQueuedActions();
}
- while ( this.agenda.fireNextItem( agendaFilter ) ) {
+ while ( (!halt) && this.agenda.fireNextItem( agendaFilter ) ) {
;
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InternalWorkingMemoryActions.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InternalWorkingMemoryActions.java 2007-06-27 21:14:23 UTC (rev 12901)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InternalWorkingMemoryActions.java 2007-06-28 00:03:23 UTC (rev 12902)
@@ -52,4 +52,5 @@
final Object object,
final Rule rule,
final Activation activation);
+
}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/KnowledgeHelper.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/KnowledgeHelper.java 2007-06-27 21:14:23 UTC (rev 12901)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/KnowledgeHelper.java 2007-06-28 00:03:23 UTC (rev 12902)
@@ -17,11 +17,9 @@
*/
import java.io.Serializable;
-import java.util.List;
import org.drools.FactException;
import org.drools.FactHandle;
-import org.drools.QueryResults;
import org.drools.WorkingMemory;
import org.drools.rule.Declaration;
import org.drools.rule.Rule;
@@ -134,5 +132,7 @@
// void setFocus(AgendaGroup focus);
public Declaration getDeclaration(String identifier);
+
+ public void halt();
}
\ No newline at end of file
More information about the jboss-svn-commits
mailing list