[jboss-svn-commits] JBL Code SVN: r23831 - in labs/jbossrules/trunk: drools-api/src/main/java/org/drools/runtime and 10 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Tue Nov 11 22:35:41 EST 2008


Author: mark.proctor at jboss.com
Date: 2008-11-11 22:35:41 -0500 (Tue, 11 Nov 2008)
New Revision: 23831

Added:
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/FactParams.java
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/GlobalParams.java
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/GlobalResolver.java
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/Parameters.java
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/StatelessKnowledgeSessionResults.java
   labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/testStatelessKnowledgeSessionInOutParams.drl
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/FactParamsImpl.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/GlobalParamsImpl.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/ParametersImpl.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/StatelessKnowledgeSessionImpl.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/StatelessKnowledgeSessionResultsImpl.java
Modified:
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/KnowledgeBase.java
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/StatefulKnowledgeSession.java
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/StatelessKnowledgeSession.java
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/rule/StatelessRuleSession.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/RuleDescr.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/StatelessSessionTest.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/MapGlobalResolver.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DefaultAgenda.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/process/impl/ProcessEventImpl.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/rule/impl/ObjectInsertedEventImpl.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/rule/impl/ObjectRetractedEventImpl.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/rule/impl/ObjectUpdatedEventImpl.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/KnowledgeBaseImpl.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/StatefulKnowledgeSessionImpl.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/GlobalResolver.java
Log:
JBRULES-1734 Drools API 
-Parameters now work for StatelessKnowledgeSessions

Modified: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/KnowledgeBase.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/KnowledgeBase.java	2008-11-12 02:40:47 UTC (rev 23830)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/KnowledgeBase.java	2008-11-12 03:35:41 UTC (rev 23831)
@@ -6,6 +6,7 @@
 import org.drools.event.knowledgebase.KnowledgeBaseEventManager;
 import org.drools.runtime.KnowledgeSessionConfiguration;
 import org.drools.runtime.StatefulKnowledgeSession;
+import org.drools.runtime.StatelessKnowledgeSession;
 
 public interface KnowledgeBase extends KnowledgeBaseEventManager {    
     
@@ -22,5 +23,8 @@
     
     StatefulKnowledgeSession newStatefulKnowledgeSession();
     
+    StatelessKnowledgeSession newStatelessKnowledgeSession(KnowledgeSessionConfiguration conf);
     
+    StatelessKnowledgeSession newStatelessKnowledgeSession();    
+    
 }

Added: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/FactParams.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/FactParams.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/FactParams.java	2008-11-12 03:35:41 UTC (rev 23831)
@@ -0,0 +1,12 @@
+package org.drools.runtime;
+
+import java.util.Collection;
+import java.util.Map;
+
+public interface FactParams {
+    void setIn(Map<String, ?> in);
+    
+    void setOut(Collection<String> out);
+    
+    void setInOut(Map<String, ?> inOut);        
+}

Added: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/GlobalParams.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/GlobalParams.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/GlobalParams.java	2008-11-12 03:35:41 UTC (rev 23831)
@@ -0,0 +1,17 @@
+package org.drools.runtime;
+
+import java.util.Collection;
+import java.util.Map;
+
+/**
+ * 
+ * @author mproctor
+ *
+ */
+public interface GlobalParams {
+    void setIn(Map<String, ?> in);
+    
+    void setOut(Collection<String> out);
+    
+    void setInOut(Map<String, ?> inOut);
+}

Added: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/GlobalResolver.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/GlobalResolver.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/GlobalResolver.java	2008-11-12 03:35:41 UTC (rev 23831)
@@ -0,0 +1,7 @@
+package org.drools.runtime;
+
+public interface GlobalResolver {
+    public Object resolveGlobal(String identifier);
+
+    public void setGlobal(String identifier, Object value);
+}

Added: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/Parameters.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/Parameters.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/Parameters.java	2008-11-12 03:35:41 UTC (rev 23831)
@@ -0,0 +1,7 @@
+package org.drools.runtime;
+
+public interface Parameters {
+    GlobalParams getGlobalParams();
+    
+    FactParams getFactParams();
+}

Modified: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/StatefulKnowledgeSession.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/StatefulKnowledgeSession.java	2008-11-12 02:40:47 UTC (rev 23830)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/StatefulKnowledgeSession.java	2008-11-12 03:35:41 UTC (rev 23831)
@@ -8,6 +8,12 @@
 
     void setGlobal(String identifier,
                    Object object);
+    
+    /**
+     * Delegate used to resolve any global names not found in the global map.
+     * @param globalResolver
+     */
+    void setGlobalResolver(GlobalResolver globalResolver);    
 
     KnowledgeBase getKnowledgeBase();
 

Modified: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/StatelessKnowledgeSession.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/StatelessKnowledgeSession.java	2008-11-12 02:40:47 UTC (rev 23830)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/StatelessKnowledgeSession.java	2008-11-12 03:35:41 UTC (rev 23831)
@@ -1,8 +1,22 @@
 package org.drools.runtime;
 
+import org.drools.event.process.ProcessEventManager;
+import org.drools.event.rule.WorkingMemoryEventManager;
 import org.drools.runtime.process.StatelessProcessSession;
 import org.drools.runtime.rule.StatelessRuleSession;
 
-public interface StatelessKnowledgeSession extends  StatelessRuleSession, StatelessProcessSession {
-
+public interface StatelessKnowledgeSession extends  StatelessRuleSession, StatelessProcessSession, WorkingMemoryEventManager, ProcessEventManager {
+   
+    /**
+     * Delegate used to resolve any global names not found in the global map.
+     * @param globalResolver
+     */
+    void setGlobalResolver(GlobalResolver globalResolver);
+    
+    /**
+     * Sets a global value
+     * @param identifer
+     * @param value
+     */
+    void setGlobal(String identifer, Object value); 
 }

Added: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/StatelessKnowledgeSessionResults.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/StatelessKnowledgeSessionResults.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/StatelessKnowledgeSessionResults.java	2008-11-12 03:35:41 UTC (rev 23831)
@@ -0,0 +1,9 @@
+package org.drools.runtime;
+
+import java.util.Collection;
+
+public interface StatelessKnowledgeSessionResults {
+    Collection<String> getIdentifiers();
+    
+    Object getValue(String identifier);
+}

Modified: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/rule/StatelessRuleSession.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/rule/StatelessRuleSession.java	2008-11-12 02:40:47 UTC (rev 23830)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/rule/StatelessRuleSession.java	2008-11-12 03:35:41 UTC (rev 23831)
@@ -1,5 +1,14 @@
 package org.drools.runtime.rule;
 
+import org.drools.runtime.Parameters;
+import org.drools.runtime.StatelessKnowledgeSessionResults;
+
 public interface StatelessRuleSession {
-
+    void executeObject(Object object);
+    void executeIterable(Iterable<?> objects);
+    
+    StatelessKnowledgeSessionResults executeObjectWithParameters(Object object, Parameters parameters);
+    StatelessKnowledgeSessionResults executeIterableWithParameters(Iterable<?> objects, Parameters parameters);
+    
+    Parameters newParameters();
 }

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/RuleDescr.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/RuleDescr.java	2008-11-12 02:40:47 UTC (rev 23830)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/RuleDescr.java	2008-11-12 03:35:41 UTC (rev 23831)
@@ -263,4 +263,8 @@
 	public String getParentName() {
 		return parentName;
 	}
+	
+	public String toString() {
+	    return "[Rule name='" + this.name + "']";
+	}
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/StatelessSessionTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/StatelessSessionTest.java	2008-11-12 02:40:47 UTC (rev 23830)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/StatelessSessionTest.java	2008-11-12 03:35:41 UTC (rev 23831)
@@ -2,12 +2,18 @@
 
 import java.io.InputStreamReader;
 import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 import junit.framework.TestCase;
 
 import org.drools.Cheese;
 import org.drools.Cheesery;
+import org.drools.KnowledgeBase;
+import org.drools.KnowledgeBaseFactory;
 import org.drools.RuleBase;
 import org.drools.RuleBaseConfiguration;
 import org.drools.RuleBaseFactory;
@@ -16,8 +22,16 @@
 import org.drools.base.CopyIdentifiersGlobalExporter;
 import org.drools.base.MapGlobalResolver;
 import org.drools.base.ReferenceOriginalGlobalExporter;
+import org.drools.builder.KnowledgeBuilder;
+import org.drools.builder.KnowledgeBuilderFactory;
+import org.drools.builder.KnowledgeType;
 import org.drools.compiler.PackageBuilder;
+import org.drools.definition.KnowledgePackage;
+import org.drools.impl.ParametersImpl;
 import org.drools.rule.Package;
+import org.drools.runtime.Parameters;
+import org.drools.runtime.StatelessKnowledgeSession;
+import org.drools.runtime.StatelessKnowledgeSessionResults;
 import org.drools.spi.GlobalResolver;
 
 public class StatelessSessionTest extends TestCase {
@@ -38,108 +52,212 @@
     }
 
     public void testSingleObjectAssert() throws Exception {
-        StatelessSession session = getSession();
+        StatelessKnowledgeSession session = getSession2( "literal_rule_test.drl" );
 
         final Cheese stilton = new Cheese( "stilton",
                                            5 );
 
-        session.execute( stilton );
+        session.executeObject( stilton );
 
         assertEquals( "stilton",
                       list.get( 0 ) );
     }
 
     public void testArrayObjectAssert() throws Exception {
-        StatelessSession session = getSession();
+        StatelessKnowledgeSession session = getSession2( "literal_rule_test.drl" );
 
         final Cheese stilton = new Cheese( "stilton",
                                            5 );
 
-        session.execute( new Object[]{stilton} );
+        session.executeIterable( Arrays.asList( new Object[]{stilton} ) );
 
         assertEquals( "stilton",
                       list.get( 0 ) );
     }
 
     public void testCollectionObjectAssert() throws Exception {
-        StatelessSession session = getSession();
+        StatelessKnowledgeSession session = getSession2( "literal_rule_test.drl" );
 
         final Cheese stilton = new Cheese( "stilton",
                                            5 );
 
         List collection = new ArrayList();
         collection.add( stilton );
-        session.execute( collection );
+        session.executeIterable( collection );
 
         assertEquals( "stilton",
                       list.get( 0 ) );
     }
 
     public void testSingleObjectAssertWithResults() throws Exception {
-        StatelessSession session = getSession();
+        StatelessKnowledgeSession session = getSession2( "literal_rule_test.drl" );
 
         // notice I don't export Cheessery
-        session.setGlobalExporter( new CopyIdentifiersGlobalExporter( new String[]{"list"} ) );
+        Parameters parameters = session.newParameters();
+        parameters.getGlobalParams().setOut( Arrays.asList(  new String[]{"list"} ) );        
 
         final Cheese stilton = new Cheese( "stilton",
                                            5 );
 
-        StatelessSessionResult result = session.executeWithResults( stilton );
+        StatelessKnowledgeSessionResults results = session.executeObjectWithParameters( stilton,
+                                                                             parameters );
+        
+        assertEquals( 1, results.getIdentifiers().size() );
+        assertTrue( results.getIdentifiers().contains( "list" ));
 
-        assertSame( stilton,
-                    result.iterateObjects().next() );
-
         assertEquals( "stilton",
-                      ((List) result.getGlobal( "list" )).get( 0 ) );
+                      ((List) results.getValue( "list" )).get( 0 ) );
 
         // cheesery should be null
-        assertNull( result.getGlobal( "cheesery" ) );
+        assertNull( results.getValue( "cheesery" ) );
     }
 
     public void testArrayObjectAssertWithResults() throws Exception {
-        StatelessSession session = getSession();
+        StatelessKnowledgeSession session = getSession2( "literal_rule_test.drl" );
 
         // notice I don't export Cheessery
-        session.setGlobalExporter( new CopyIdentifiersGlobalExporter( new String[]{"list"} ) );
+        Parameters parameters = session.newParameters();
+        parameters.getGlobalParams().setOut( Arrays.asList(  new String[]{"list"} ) ); 
 
         final Cheese stilton = new Cheese( "stilton",
                                            5 );
 
-        StatelessSessionResult result = session.executeWithResults( new Object[]{stilton} );
+        StatelessKnowledgeSessionResults results = session.executeIterableWithParameters( Arrays.asList( new Object[]{stilton} ),
+                                                                             parameters );
 
-        assertSame( stilton,
-                    result.iterateObjects().next() );
+        assertEquals( 1, results.getIdentifiers().size() );
+        assertTrue( results.getIdentifiers().contains( "list" ));
 
         assertEquals( "stilton",
-                      ((List) result.getGlobal( "list" )).get( 0 ) );
+                      ((List) results.getValue( "list" )).get( 0 ) );
 
         // cheesery should be null
-        assertNull( result.getGlobal( "cheesery" ) );
+        assertNull( results.getValue( "cheesery" ) );
     }
 
     public void testCollectionObjectAssertWithResults() throws Exception {
-        StatelessSession session = getSession();
+        StatelessKnowledgeSession session = getSession2( "literal_rule_test.drl" );
 
         // notice I don't export Cheessery
-        session.setGlobalExporter( new CopyIdentifiersGlobalExporter( new String[]{"list"} ) );
+        Parameters parameters = session.newParameters();
+        parameters.getGlobalParams().setOut( Arrays.asList(  new String[]{"list"} ) ); 
 
         final Cheese stilton = new Cheese( "stilton",
                                            5 );
 
         List collection = new ArrayList();
-        collection.add( stilton );
-        StatelessSessionResult result = session.executeWithResults( collection );
+        collection.add( stilton );        
+        StatelessKnowledgeSessionResults results = session.executeIterableWithParameters( collection,
+                                                                                          parameters );        
 
-        assertSame( stilton,
-                    result.iterateObjects().next() );
+        assertEquals( 1, results.getIdentifiers().size() );
+        assertTrue( results.getIdentifiers().contains( "list" ));
 
         assertEquals( "stilton",
-                      ((List) result.getGlobal( "list" )).get( 0 ) );
+                      ((List) results.getValue( "list" )).get( 0 ) );
 
         // cheesery should be null
-        assertNull( result.getGlobal( "cheesery" ) );
+        assertNull( results.getValue( "cheesery" ) );
     }
+    
+    public void testInAndOutParams() throws Exception {
+        StatelessKnowledgeSession session = getSession2( "testStatelessKnowledgeSessionInOutParams.drl" );
 
+
+        final Cheese stilton = new Cheese( "stilton",
+                                           5 );
+        
+        final Cheese cheddar = new Cheese( "cheddar",
+                                           25 );   
+        
+        // notice I don't export Cheessery
+        Parameters parameters = session.newParameters();
+        Map<String, Object> globalsIn = new HashMap<String, Object>();
+        globalsIn.put( "inString", "string" );
+        parameters.getGlobalParams().setIn( globalsIn );        
+        parameters.getGlobalParams().setOut( Arrays.asList(  new String[]{"list"} ) ); 
+        
+        Map<String, Object> factIn = new HashMap<String, Object>();
+        factIn.put( "inCheese", cheddar );
+        parameters.getFactParams().setIn( factIn );
+        parameters.getFactParams().setOut( Arrays.asList(  new String[]{ "outCheese"} ) );         
+ 
+        StatelessKnowledgeSessionResults results = session.executeObjectWithParameters( stilton,
+                                                                                        parameters );        
+
+        assertEquals( 2, results.getIdentifiers().size() );
+        assertTrue( results.getIdentifiers().contains( "list" ));
+        assertTrue( results.getIdentifiers().contains( "outCheese" ));
+        
+        assertEquals( new Cheese( "brie", 50), results.getValue( "outCheese" ) );
+
+        assertEquals( "rule1 cheddar",
+                      ((List) results.getValue( "list" )).get( 0 ) );
+        
+        assertEquals( "rule2 stilton",
+                      ((List) results.getValue( "list" )).get( 1 ) );      
+        
+        assertEquals( "rule3 brie",
+                      ((List) results.getValue( "list" )).get( 2 ) );         
+        
+        assertEquals( "rule4 string",
+                      ((List) results.getValue( "list" )).get( 3 ) );          
+
+        // cheesery should be null
+        assertNull( results.getValue( "cheesery" ) );        
+        
+    }
+    
+    public void testInOutAndOutParams() throws Exception {
+        StatelessKnowledgeSession session = getSession2( "testStatelessKnowledgeSessionInOutParams.drl" );
+
+
+        final Cheese stilton = new Cheese( "stilton",
+                                           5 );
+        
+        final Cheese cheddar = new Cheese( "cheddar",
+                                           25 );   
+        
+        // notice I don't export Cheessery
+        Parameters parameters = session.newParameters();
+        Map<String, Object> globalsInOut = new HashMap<String, Object>();
+        globalsInOut.put( "inString", "string" );
+        parameters.getGlobalParams().setInOut( globalsInOut );        
+        parameters.getGlobalParams().setOut( Arrays.asList(  new String[]{"list"} ) ); 
+        
+        Map<String, Object> factInOut = new HashMap<String, Object>();
+        factInOut.put( "inCheese", cheddar );
+        parameters.getFactParams().setInOut( factInOut );
+        parameters.getFactParams().setOut( Arrays.asList(  new String[]{ "outCheese"} ) );         
+ 
+        StatelessKnowledgeSessionResults results = session.executeObjectWithParameters( stilton,
+                                                                                        parameters );        
+
+        assertEquals( 4, results.getIdentifiers().size() );
+        assertTrue( results.getIdentifiers().contains( "list" ));
+        assertTrue( results.getIdentifiers().contains( "inString" ));
+        assertTrue( results.getIdentifiers().contains( "inCheese" ));
+        assertTrue( results.getIdentifiers().contains( "outCheese" ));
+        
+        assertEquals( new Cheese( "brie", 50), results.getValue( "outCheese" ) );
+
+        assertEquals( "rule1 cheddar",
+                      ((List) results.getValue( "list" )).get( 0 ) );
+        
+        assertEquals( "rule2 stilton",
+                      ((List) results.getValue( "list" )).get( 1 ) );      
+        
+        assertEquals( "rule3 brie",
+                      ((List) results.getValue( "list" )).get( 2 ) );         
+        
+        assertEquals( "rule4 string",
+                      ((List) results.getValue( "list" )).get( 3 ) );          
+
+        // cheesery should be null
+        assertNull( results.getValue( "cheesery" ) );        
+        
+    }    
+    
     public void testAsynSingleOjbectcAssert() throws Exception {
         StatelessSession session = getSession();
 
@@ -273,4 +391,32 @@
                            this.cheesery );
         return session;
     }
+    
+    private StatelessKnowledgeSession getSession2(String fileName) throws Exception {
+        KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+        kbuilder.addResource( new InputStreamReader( getClass().getResourceAsStream( fileName ) ), KnowledgeType.DRL );
+        
+        if (kbuilder.hasErrors() ) {
+            System.out.println( kbuilder.getErrors() );
+        }
+        
+        assertFalse( kbuilder.hasErrors() );
+        Collection<KnowledgePackage> pkgs = kbuilder.getKnowledgePackages();
+
+        KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+        
+       
+        kbase.addKnowledgePackages( pkgs );
+        kbase    = SerializationHelper.serializeObject( kbase );
+        StatelessKnowledgeSession session = kbase.newStatelessKnowledgeSession();
+        
+//        session    = SerializationHelper.serializeObject(session);
+        session.setGlobalResolver( this.globalResolver );
+
+        session.setGlobal( "list",
+                           this.list );
+        session.setGlobal( "cheesery",
+                           this.cheesery );
+        return session;
+    }    
 }

Added: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/testStatelessKnowledgeSessionInOutParams.drl
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/testStatelessKnowledgeSessionInOutParams.drl	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/testStatelessKnowledgeSessionInOutParams.drl	2008-11-12 03:35:41 UTC (rev 23831)
@@ -0,0 +1,48 @@
+package org.drools.test;
+
+import org.drools.Cheese;
+import org.drools.Cheesery
+
+global java.util.List list;
+global Cheesery cheesery;
+
+global String inString
+global Cheese inCheese;
+global Cheese outCheese;
+
+// test Fact in Parameter
+rule "rule1"
+    salience 10
+    when
+        Cheese( this == inCheese, $type : type )
+    then
+		list.add( "rule1 " + $type );        
+end    
+
+// test Global in Parameter
+rule "rule2"
+    salience 5
+    when
+        Cheese( $type : type == "stilton" )
+    then
+		list.add( "rule2 " + $type );      
+end  
+
+// test Global out Parameter
+rule "rule3"
+    salience 3
+    when
+    then
+        Cheese brie = new Cheese("brie", 50);
+        insert( brie );
+        list.add( "rule3 brie" ); 
+		drools.getWorkingMemory().setGlobal("outCheese", brie);
+end  
+
+// test Global in Parameter
+rule "rule4"
+    salience 0
+    when
+    then
+        list.add( "rule4 " + inString ); 
+end 
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/MapGlobalResolver.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/MapGlobalResolver.java	2008-11-12 02:40:47 UTC (rev 23830)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/MapGlobalResolver.java	2008-11-12 03:35:41 UTC (rev 23831)
@@ -1,5 +1,6 @@
 package org.drools.base;
 
+import java.io.Externalizable;
 import java.io.IOException;
 import java.io.ObjectInput;
 import java.io.ObjectOutput;
@@ -11,7 +12,8 @@
 
 public class MapGlobalResolver
     implements
-    GlobalResolver {
+    GlobalResolver,
+    Externalizable {
 
     private static final long serialVersionUID = 400L;
 

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DefaultAgenda.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DefaultAgenda.java	2008-11-12 02:40:47 UTC (rev 23830)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DefaultAgenda.java	2008-11-12 03:35:41 UTC (rev 23831)
@@ -35,6 +35,7 @@
 import org.drools.impl.StatefulKnowledgeSessionImpl;
 import org.drools.reteoo.LeftTuple;
 import org.drools.reteoo.ReteooStatefulSession;
+import org.drools.reteoo.ReteooWorkingMemory;
 import org.drools.RuleBaseConfiguration;
 import org.drools.WorkingMemory;
 import org.drools.spi.Activation;
@@ -915,7 +916,7 @@
                                                                         e );
             } else if ( this.consequenceExceptionHandler != null ) {
                 this.consequenceExceptionHandler.handleException( activation,
-                                                                  new StatefulKnowledgeSessionImpl( (ReteooStatefulSession) this.workingMemory ),
+                                                                  new StatefulKnowledgeSessionImpl( (ReteooWorkingMemory) this.workingMemory ),
                                                                   e );
             } else {
                 throw new RuntimeException( e );

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/process/impl/ProcessEventImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/process/impl/ProcessEventImpl.java	2008-11-12 02:40:47 UTC (rev 23830)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/process/impl/ProcessEventImpl.java	2008-11-12 03:35:41 UTC (rev 23831)
@@ -9,6 +9,7 @@
 import org.drools.event.process.ProcessEvent;
 import org.drools.impl.StatefulKnowledgeSessionImpl;
 import org.drools.reteoo.ReteooStatefulSession;
+import org.drools.reteoo.ReteooWorkingMemory;
 import org.drools.runtime.process.ProcessInstance;
 
 public class ProcessEventImpl extends KnowledgeRuntimeEventImpl implements ProcessEvent {
@@ -16,7 +17,7 @@
     private ProcessInstance processInstance;
 
     public ProcessEventImpl(org.drools.event.ProcessEvent event, WorkingMemory workingMemory) {
-        super( new StatefulKnowledgeSessionImpl( (ReteooStatefulSession) workingMemory ));
+        super( new StatefulKnowledgeSessionImpl( (ReteooWorkingMemory) workingMemory ));
         processInstance = event.getProcessInstance();
     }
     

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/rule/impl/ObjectInsertedEventImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/rule/impl/ObjectInsertedEventImpl.java	2008-11-12 02:40:47 UTC (rev 23830)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/rule/impl/ObjectInsertedEventImpl.java	2008-11-12 03:35:41 UTC (rev 23831)
@@ -7,6 +7,7 @@
 import org.drools.event.rule.ObjectInsertedEvent;
 import org.drools.impl.StatefulKnowledgeSessionImpl;
 import org.drools.reteoo.ReteooStatefulSession;
+import org.drools.reteoo.ReteooWorkingMemory;
 import org.drools.FactHandle;
 import org.drools.runtime.rule.WorkingMemory;
 
@@ -17,7 +18,7 @@
     private Object      object;
 
     public ObjectInsertedEventImpl(org.drools.event.ObjectInsertedEvent event) {
-        super( (WorkingMemory) new StatefulKnowledgeSessionImpl( (ReteooStatefulSession) event.getWorkingMemory() ), event.getPropagationContext() );
+        super( (WorkingMemory) new StatefulKnowledgeSessionImpl( (ReteooWorkingMemory) event.getWorkingMemory() ), event.getPropagationContext() );
         factHandle = event.getFactHandle();
         object = event.getObject();
     }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/rule/impl/ObjectRetractedEventImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/rule/impl/ObjectRetractedEventImpl.java	2008-11-12 02:40:47 UTC (rev 23830)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/rule/impl/ObjectRetractedEventImpl.java	2008-11-12 03:35:41 UTC (rev 23831)
@@ -7,6 +7,7 @@
 import org.drools.event.rule.ObjectRetractedEvent;
 import org.drools.impl.StatefulKnowledgeSessionImpl;
 import org.drools.reteoo.ReteooStatefulSession;
+import org.drools.reteoo.ReteooWorkingMemory;
 import org.drools.FactHandle;
 import org.drools.runtime.rule.WorkingMemory;
 
@@ -15,7 +16,7 @@
     private Object oldbOject;
     
     public ObjectRetractedEventImpl( org.drools.event.ObjectRetractedEvent event) {
-        super( (WorkingMemory) new StatefulKnowledgeSessionImpl( (ReteooStatefulSession) event.getWorkingMemory() ), event.getPropagationContext() );
+        super( (WorkingMemory) new StatefulKnowledgeSessionImpl( (ReteooWorkingMemory) event.getWorkingMemory() ), event.getPropagationContext() );
         factHandle = event.getFactHandle();
         oldbOject = event.getOldObject();
     }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/rule/impl/ObjectUpdatedEventImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/rule/impl/ObjectUpdatedEventImpl.java	2008-11-12 02:40:47 UTC (rev 23830)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/rule/impl/ObjectUpdatedEventImpl.java	2008-11-12 03:35:41 UTC (rev 23831)
@@ -7,6 +7,7 @@
 import org.drools.event.rule.ObjectUpdatedEvent;
 import org.drools.impl.StatefulKnowledgeSessionImpl;
 import org.drools.reteoo.ReteooStatefulSession;
+import org.drools.reteoo.ReteooWorkingMemory;
 import org.drools.FactHandle;
 import org.drools.runtime.rule.WorkingMemory;
 
@@ -16,7 +17,7 @@
     private Object      oldObject;
     
     public ObjectUpdatedEventImpl(org.drools.event.ObjectUpdatedEvent event) {
-        super( (WorkingMemory) new StatefulKnowledgeSessionImpl( (ReteooStatefulSession) event.getWorkingMemory() ), event.getPropagationContext() );
+        super( (WorkingMemory) new StatefulKnowledgeSessionImpl( (ReteooWorkingMemory) event.getWorkingMemory() ), event.getPropagationContext() );
         factHandle = event.getFactHandle();
         object = event.getObject();
         object = event.getOldObject();

Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/FactParamsImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/FactParamsImpl.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/FactParamsImpl.java	2008-11-12 03:35:41 UTC (rev 23831)
@@ -0,0 +1,37 @@
+package org.drools.impl;
+
+import java.util.Collection;
+import java.util.Map;
+
+import org.drools.runtime.FactParams;
+
+public class FactParamsImpl implements FactParams {
+    Map<String, ? > in;
+    Map<String, ? > inOut;
+    Collection<String> out;
+    
+    public void setIn(Map<String, ? > in) {
+        this.in = in;
+    }
+    
+    public Map<String, ? > getIn() {
+        return in;
+    }    
+
+    public void setInOut(Map<String, ? > inOut) {
+        this.inOut = inOut;
+    }
+    
+    public Map<String, ? > getInOut() {
+        return inOut;
+    }    
+
+    public void setOut(Collection<String> out) {
+        this.out = out;
+    }
+
+    public Collection<String> getOut() {
+        return out;
+    }
+
+}

Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/GlobalParamsImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/GlobalParamsImpl.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/GlobalParamsImpl.java	2008-11-12 03:35:41 UTC (rev 23831)
@@ -0,0 +1,37 @@
+package org.drools.impl;
+
+import java.util.Collection;
+import java.util.Map;
+
+import org.drools.runtime.GlobalParams;
+
+public class GlobalParamsImpl implements GlobalParams {
+    Map<String, ? > in;
+    Map<String, ? > inOut;
+    Collection<String> out;
+    
+    public void setIn(Map<String, ? > in) {
+        this.in = in;
+    }
+    
+    public Map<String, ? > getIn() {
+        return in;
+    }    
+
+    public void setInOut(Map<String, ? > inOut) {
+        this.inOut = inOut;
+    }
+    
+    public Map<String, ? > getInOut() {
+        return inOut;
+    }    
+
+    public void setOut(Collection<String> out) {
+        this.out = out;
+    }
+
+    public Collection<String> getOut() {
+        return out;
+    }
+    
+}

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/KnowledgeBaseImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/KnowledgeBaseImpl.java	2008-11-12 02:40:47 UTC (rev 23830)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/KnowledgeBaseImpl.java	2008-11-12 03:35:41 UTC (rev 23831)
@@ -15,6 +15,7 @@
 import org.drools.RuleBase;
 import org.drools.SessionConfiguration;
 import org.drools.StatefulSession;
+import org.drools.common.InternalRuleBase;
 import org.drools.definition.KnowledgePackage;
 import org.drools.event.AfterFunctionRemovedEvent;
 import org.drools.event.AfterPackageAddedEvent;
@@ -52,6 +53,7 @@
 import org.drools.rule.Package;
 import org.drools.runtime.KnowledgeSessionConfiguration;
 import org.drools.runtime.StatefulKnowledgeSession;
+import org.drools.runtime.StatelessKnowledgeSession;
 
 public class KnowledgeBaseImpl
     implements
@@ -128,6 +130,14 @@
         return new StatefulKnowledgeSessionImpl( session,
                                                  this );
     }    
+    
+    public StatelessKnowledgeSession newStatelessKnowledgeSession() {
+        return new StatelessKnowledgeSessionImpl( (InternalRuleBase) this.ruleBase );
+    }
+    
+    public StatelessKnowledgeSession newStatelessKnowledgeSession(KnowledgeSessionConfiguration conf) {        
+        return new StatelessKnowledgeSessionImpl( (InternalRuleBase) this.ruleBase );
+    } 
 
     public void removeKnowledgePackage(String packageName) {
         this.ruleBase.removePackage( packageName );
@@ -225,5 +235,4 @@
                                                                              new RuleImpl( event.getRule() ) ) );
         }
     }
-
 }

Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/ParametersImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/ParametersImpl.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/ParametersImpl.java	2008-11-12 03:35:41 UTC (rev 23831)
@@ -0,0 +1,19 @@
+package org.drools.impl;
+
+import org.drools.runtime.FactParams;
+import org.drools.runtime.GlobalParams;
+import org.drools.runtime.Parameters;
+
+public class ParametersImpl implements Parameters {
+    private FactParams factParams = new FactParamsImpl();
+    private GlobalParams globalParams = new GlobalParamsImpl();
+        
+    public FactParams getFactParams() {
+        return this.factParams;
+    }
+
+    public GlobalParams getGlobalParams() {
+        return this.globalParams;
+    }
+
+}

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/StatefulKnowledgeSessionImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/StatefulKnowledgeSessionImpl.java	2008-11-12 02:40:47 UTC (rev 23830)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/StatefulKnowledgeSessionImpl.java	2008-11-12 03:35:41 UTC (rev 23831)
@@ -45,6 +45,8 @@
 import org.drools.event.rule.impl.ObjectRetractedEventImpl;
 import org.drools.event.rule.impl.ObjectUpdatedEventImpl;
 import org.drools.reteoo.ReteooStatefulSession;
+import org.drools.reteoo.ReteooWorkingMemory;
+import org.drools.runtime.GlobalResolver;
 import org.drools.runtime.StatefulKnowledgeSession;
 import org.drools.runtime.process.ProcessInstance;
 import org.drools.runtime.process.WorkItemManager;
@@ -57,19 +59,19 @@
 public class StatefulKnowledgeSessionImpl
     implements
     StatefulKnowledgeSession {
-    public ReteooStatefulSession                                              session;
+    public ReteooWorkingMemory                                              session;
     public KnowledgeBaseImpl                                                  kbase;
 
     public Map<WorkingMemoryEventListener, WorkingMemoryEventListenerWrapper> mappedWorkingMemoryListeners;
     public Map<AgendaEventListener, AgendaEventListenerWrapper>               mappedAgendaListeners;
     public Map<ProcessEventListener, ProcessEventListenerWrapper>             mappedProcessListeners;
 
-    public StatefulKnowledgeSessionImpl(ReteooStatefulSession session) {
+    public StatefulKnowledgeSessionImpl(ReteooWorkingMemory session) {
         this( session,
               null );
     }
 
-    public StatefulKnowledgeSessionImpl(ReteooStatefulSession session,
+    public StatefulKnowledgeSessionImpl(ReteooWorkingMemory session,
                                         KnowledgeBaseImpl kbase) {
         this.session = session;
         this.kbase = kbase;
@@ -224,23 +226,27 @@
         this.session.setGlobal( identifier,
                                 object );
     }
+    
+    public void setGlobalResolver(GlobalResolver globalResolver) {
+        this.session.setGlobalResolver( (org.drools.spi.GlobalResolver) globalResolver );
+    }    
 
-    public Future<Object> asyncInsert(Object object) {
-        return new FutureAdapter( this.session.asyncInsert( object ) );
-    }
+//    public Future<Object> asyncInsert(Object object) {
+//        return new FutureAdapter( this.session.asyncInsert( object ) );
+//    }
+//
+//    public Future<Object> asyncInsert(Object[] array) {
+//        return new FutureAdapter( this.session.asyncInsert( array ) );
+//    }
+//
+//    public Future<Object> asyncInsert(Iterable< ? > iterable) {
+//        return new FutureAdapter( this.session.asyncInsert( iterable ) );
+//    }
+//
+//    public Future< ? > asyncFireAllRules() {
+//        return new FutureAdapter( this.session.asyncFireAllRules() );
+//    }
 
-    public Future<Object> asyncInsert(Object[] array) {
-        return new FutureAdapter( this.session.asyncInsert( array ) );
-    }
-
-    public Future<Object> asyncInsert(Iterable< ? > iterable) {
-        return new FutureAdapter( this.session.asyncInsert( iterable ) );
-    }
-
-    public Future< ? > asyncFireAllRules() {
-        return new FutureAdapter( this.session.asyncFireAllRules() );
-    }
-
     public Collection< ? extends FactHandle> getFactHandles() {
         return new ObjectStoreWrapper( session.getObjectStore(),
                                        null,
@@ -541,7 +547,4 @@
             return filter.accept( activation );
         }               
     }
-    
-    
-
 }

Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/StatelessKnowledgeSessionImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/StatelessKnowledgeSessionImpl.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/StatelessKnowledgeSessionImpl.java	2008-11-12 03:35:41 UTC (rev 23831)
@@ -0,0 +1,327 @@
+package org.drools.impl;
+
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import org.drools.SessionConfiguration;
+import org.drools.base.MapGlobalResolver;
+import org.drools.common.InternalRuleBase;
+import org.drools.common.InternalWorkingMemory;
+import org.drools.event.AgendaEventSupport;
+import org.drools.event.RuleFlowEventSupport;
+import org.drools.event.WorkingMemoryEventSupport;
+import org.drools.event.process.ProcessEventListener;
+import org.drools.event.rule.AgendaEventListener;
+import org.drools.event.rule.WorkingMemoryEventListener;
+import org.drools.impl.StatefulKnowledgeSessionImpl.AgendaEventListenerWrapper;
+import org.drools.impl.StatefulKnowledgeSessionImpl.ProcessEventListenerWrapper;
+import org.drools.impl.StatefulKnowledgeSessionImpl.WorkingMemoryEventListenerWrapper;
+import org.drools.reteoo.InitialFactHandle;
+import org.drools.reteoo.InitialFactHandleDummyObject;
+import org.drools.reteoo.ReteooWorkingMemory;
+import org.drools.reteoo.ReteooWorkingMemory.WorkingMemoryReteAssertAction;
+import org.drools.rule.EntryPoint;
+import org.drools.runtime.Parameters;
+import org.drools.runtime.StatelessKnowledgeSession;
+import org.drools.runtime.StatelessKnowledgeSessionResults;
+import org.drools.spi.AgendaFilter;
+import org.drools.spi.GlobalResolver;
+
+public class StatelessKnowledgeSessionImpl
+    implements
+    StatelessKnowledgeSession {
+
+    private InternalRuleBase                                                  ruleBase;
+    private AgendaFilter                                                      agendaFilter;
+    private GlobalResolver                                                    sessionGlobals            = new MapGlobalResolver();
+
+    /** The event mapping */
+    public Map<WorkingMemoryEventListener, WorkingMemoryEventListenerWrapper> mappedWorkingMemoryListeners;
+    public Map<AgendaEventListener, AgendaEventListenerWrapper>               mappedAgendaListeners;
+    public Map<ProcessEventListener, ProcessEventListenerWrapper>             mappedProcessListeners;
+
+    /** The event support */
+    protected WorkingMemoryEventSupport                                       workingMemoryEventSupport = new WorkingMemoryEventSupport();
+    protected AgendaEventSupport                                              agendaEventSupport        = new AgendaEventSupport();
+    protected RuleFlowEventSupport                                            ruleFlowEventSupport      = new RuleFlowEventSupport();
+
+    public StatelessKnowledgeSessionImpl() {
+    }
+
+    public StatelessKnowledgeSessionImpl(final InternalRuleBase ruleBase) {
+        this.ruleBase = ruleBase;
+    }
+
+    public InternalRuleBase getRuleBase() {
+        return this.ruleBase;
+    }
+
+    public InternalWorkingMemory newWorkingMemory() {
+        synchronized ( this.ruleBase.getPackagesMap() ) {
+            InternalWorkingMemory wm = new ReteooWorkingMemory( this.ruleBase.nextWorkingMemoryCounter(),
+                                                                this.ruleBase,
+                                                                new SessionConfiguration() );
+
+            DelegatingGlobalResolver resolver = new DelegatingGlobalResolver();
+            resolver.setDelegate( this.sessionGlobals );
+
+            wm.setGlobalResolver( resolver );
+            wm.setWorkingMemoryEventSupport( this.workingMemoryEventSupport );
+            wm.setAgendaEventSupport( this.agendaEventSupport );
+            wm.setRuleFlowEventSupport( this.ruleFlowEventSupport );
+
+            final InitialFactHandleDummyObject initialFact = new InitialFactHandleDummyObject();
+            final InitialFactHandle handle = new InitialFactHandle( wm.getFactHandleFactory().newFactHandle( initialFact,
+                                                                                                             wm.getObjectTypeConfigurationRegistry().getObjectTypeConf( EntryPoint.DEFAULT,
+                                                                                                                                                                        initialFact ),
+                                                                                                             wm ) );
+
+            wm.queueWorkingMemoryAction( new WorkingMemoryReteAssertAction( handle,
+                                                                            false,
+                                                                            true,
+                                                                            null,
+                                                                            null ) );
+            return wm;
+        }
+    }
+
+    public void addEventListener(WorkingMemoryEventListener listener) {
+        WorkingMemoryEventListenerWrapper wrapper = new WorkingMemoryEventListenerWrapper( listener );
+        this.mappedWorkingMemoryListeners.put( listener,
+                                               wrapper );
+        this.workingMemoryEventSupport.addEventListener( wrapper );
+    }
+
+    public void removeEventListener(WorkingMemoryEventListener listener) {
+        WorkingMemoryEventListenerWrapper wrapper = this.mappedWorkingMemoryListeners.remove( listener );
+        this.workingMemoryEventSupport.removeEventListener( wrapper );
+    }
+
+    public Collection<WorkingMemoryEventListener> getWorkingMemoryEventListeners() {
+        return Collections.unmodifiableCollection( this.mappedWorkingMemoryListeners.keySet() );
+    }
+
+    public void addEventListener(AgendaEventListener listener) {
+        AgendaEventListenerWrapper wrapper = new AgendaEventListenerWrapper( listener );
+        this.mappedAgendaListeners.put( listener,
+                                        wrapper );
+        this.agendaEventSupport.addEventListener( wrapper );
+    }
+
+    public Collection<AgendaEventListener> getAgendaEventListeners() {
+        return Collections.unmodifiableCollection( this.mappedAgendaListeners.keySet() );
+    }
+
+    public void removeEventListener(AgendaEventListener listener) {
+        AgendaEventListenerWrapper wrapper = this.mappedAgendaListeners.remove( listener );
+        this.agendaEventSupport.removeEventListener( wrapper );
+    }
+
+    public void addEventListener(ProcessEventListener listener) {
+        ProcessEventListenerWrapper wrapper = new ProcessEventListenerWrapper( listener );
+        this.mappedProcessListeners.put( listener,
+                                         wrapper );
+        this.ruleFlowEventSupport.addEventListener( wrapper );
+    }
+
+    public Collection<ProcessEventListener> getProcessEventListeners() {
+        return Collections.unmodifiableCollection( this.mappedProcessListeners.keySet() );
+    }
+
+    public void removeEventListener(ProcessEventListener listener) {
+        ProcessEventListenerWrapper wrapper = this.mappedProcessListeners.get( listener );
+        this.ruleFlowEventSupport.removeEventListener( wrapper );
+    }
+
+    public void setGlobal(String identifier,
+                          Object value) {
+        this.sessionGlobals.setGlobal( identifier,
+                                       value );
+    }
+
+    public void setGlobalResolver(org.drools.runtime.GlobalResolver globalResolver) {
+        this.sessionGlobals = (GlobalResolver) globalResolver;
+
+    }
+
+    public void executeObject(Object object) {
+        InternalWorkingMemory wm = newWorkingMemory();
+
+        wm.insert( object );
+        wm.fireAllRules( this.agendaFilter );
+    }
+
+    public void executeIterable(Iterable< ? > objects) {
+        InternalWorkingMemory wm = newWorkingMemory();
+
+        for ( Object object : objects ) {
+            wm.insert( object );
+        }
+        wm.fireAllRules( this.agendaFilter );
+    }
+
+    public StatelessKnowledgeSessionResults executeObjectWithParameters(Object object,
+                                                                        Parameters parameters) {
+        InternalWorkingMemory wm = newWorkingMemory();
+
+        wm.insert( object );
+
+        Map<String, Object> results = new HashMap<String, Object>();
+
+        executeInParams( wm,
+                         parameters,
+                         results );
+
+        wm.fireAllRules( this.agendaFilter );
+
+        getOutParams( wm,
+                      parameters,
+                      results );
+
+        return new StatelessKnowledgeSessionResultsImpl( results );
+
+    }
+
+    public StatelessKnowledgeSessionResults executeIterableWithParameters(Iterable< ? > objects,
+                                                                          Parameters parameters) {
+        InternalWorkingMemory wm = newWorkingMemory();
+
+        for ( Object object : objects ) {
+            wm.insert( object );
+        }
+
+        Map<String, Object> results = new HashMap<String, Object>();
+
+        executeInParams( wm,
+                         parameters,
+                         results );
+
+        wm.fireAllRules( this.agendaFilter );
+
+        getOutParams( wm,
+                      parameters,
+                      results );
+
+        return new StatelessKnowledgeSessionResultsImpl( results );
+
+    }
+
+    private void executeInParams(InternalWorkingMemory wm,
+                                 Parameters parameters,
+                                 Map<String, Object> results) {
+        Map<String, ? > map = ((FactParamsImpl) parameters.getFactParams()).getIn();
+        if ( map != null && !map.isEmpty() ) {
+            for ( Iterator it = map.entrySet().iterator(); it.hasNext(); ) {
+                Entry<String, Object> entry = (Entry<String, Object>) it.next();
+                sessionGlobals.setGlobal( entry.getKey(),
+                                          entry.getValue() );
+                wm.insert( entry.getValue() );
+            }
+        }
+
+        map = ((FactParamsImpl) parameters.getFactParams()).getInOut();
+        if ( map != null && !map.isEmpty() ) {
+            for ( Iterator it = map.entrySet().iterator(); it.hasNext(); ) {
+                Entry<String, Object> entry = (Entry<String, Object>) it.next();
+                sessionGlobals.setGlobal( entry.getKey(),
+                                          entry.getValue() );
+                results.put( entry.getKey(),
+                             entry.getValue() );
+                wm.insert( entry.getValue() );
+            }
+        }
+
+        map = ((GlobalParamsImpl) parameters.getGlobalParams()).getIn();
+        if ( map != null && !map.isEmpty() ) {
+            for ( Iterator it = map.entrySet().iterator(); it.hasNext(); ) {
+                Entry<String, Object> entry = (Entry<String, Object>) it.next();
+                sessionGlobals.setGlobal( entry.getKey(),
+                                          entry.getValue() );
+            }
+        }
+
+        map = ((GlobalParamsImpl) parameters.getGlobalParams()).getInOut();
+        if ( map != null && !map.isEmpty() ) {
+            for ( Iterator it = map.entrySet().iterator(); it.hasNext(); ) {
+                Entry<String, Object> entry = (Entry<String, Object>) it.next();
+                results.put( entry.getKey(),
+                             entry.getValue() );
+                sessionGlobals.setGlobal( entry.getKey(),
+                                          entry.getValue() );
+            }
+        }
+    }
+
+    private void getOutParams(InternalWorkingMemory wm,
+                              Parameters parameters,
+                              Map<String, Object> results) {
+        Collection<String> col = ((FactParamsImpl) parameters.getFactParams()).getOut();
+        if ( col != null && !col.isEmpty() ) {
+            for ( String identifer : col ) {
+                results.put( identifer,
+                             wm.getGlobal( identifer ) );
+            }
+        }
+
+        col = ((GlobalParamsImpl) parameters.getGlobalParams()).getOut();
+        if ( col != null && !col.isEmpty() ) {
+            for ( String identifer : col ) {
+                results.put( identifer,
+                             wm.getGlobal( identifer ) );
+            }
+        }
+    }
+    
+    public Parameters newParameters() {
+        return new ParametersImpl();
+    }
+
+    public static class DelegatingGlobalResolver
+        implements
+        GlobalResolver {
+        MapGlobalResolver resolver;
+        GlobalResolver    delegate;
+
+        public DelegatingGlobalResolver() {
+            this.resolver = new MapGlobalResolver();
+        }
+
+        public void setDelegate(GlobalResolver delegate) {
+            this.delegate = delegate;
+        }
+
+        public Object resolveGlobal(String identifier) {
+            Object object = this.resolver.resolveGlobal( identifier );
+            if ( object == null ) {
+                return this.delegate.resolveGlobal( identifier );
+            } else {
+                return object;
+            }
+        }
+
+        public void setGlobal(String identifier,
+                              Object value) {
+            resolver.setGlobal( identifier,
+                                value );
+        }
+
+        public void writeExternal(ObjectOutput out) throws IOException {
+            out.writeObject( this.resolver );
+            out.writeObject( this.delegate );
+        }
+
+        public void readExternal(ObjectInput in) throws IOException,
+                                                ClassNotFoundException {
+            this.resolver = (MapGlobalResolver) in.readObject();
+            this.delegate = (GlobalResolver) in.readObject();
+        }
+    }
+
+}

Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/StatelessKnowledgeSessionResultsImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/StatelessKnowledgeSessionResultsImpl.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/StatelessKnowledgeSessionResultsImpl.java	2008-11-12 03:35:41 UTC (rev 23831)
@@ -0,0 +1,24 @@
+package org.drools.impl;
+
+import java.util.Collection;
+import java.util.Map;
+
+import org.drools.runtime.StatelessKnowledgeSessionResults;
+
+public class StatelessKnowledgeSessionResultsImpl implements StatelessKnowledgeSessionResults {
+
+    private Map<String, ?> results;
+    
+    public StatelessKnowledgeSessionResultsImpl(Map<String, ?> results) {
+        this.results = results;
+    }
+    
+    public Collection<String> getIdentifiers() {
+        return results.keySet();
+    }
+
+    public Object getValue(String identifier) {
+        return results.get( identifier );
+    }
+
+}

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/GlobalResolver.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/GlobalResolver.java	2008-11-12 02:40:47 UTC (rev 23830)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/GlobalResolver.java	2008-11-12 03:35:41 UTC (rev 23831)
@@ -2,8 +2,6 @@
 
 import java.io.Externalizable;
 
-public interface GlobalResolver extends Externalizable {
-    public Object resolveGlobal(String identifier);
+public interface GlobalResolver extends org.drools.runtime.GlobalResolver {
 
-    public void setGlobal(String identifier, Object value);
 }




More information about the jboss-svn-commits mailing list