[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