[jboss-svn-commits] JBL Code SVN: r25748 - in labs/jbossrules/trunk: drools-core/src/main/java/org/drools/command/impl and 3 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu Mar 19 12:00:28 EDT 2009


Author: mark.proctor at jboss.com
Date: 2009-03-19 12:00:28 -0400 (Thu, 19 Mar 2009)
New Revision: 25748

Modified:
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/command/CommandFactory.java
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/command/CommandFactoryProvider.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/impl/CommandFactoryProviderImpl.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/FireAllRulesCommand.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/GetObjectsCommand.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/help/impl/BatchExecutionHelperProviderImpl.java
   labs/jbossrules/trunk/drools-pipeline/drools-transformer-xstream/src/test/java/org/drools/runtime/pipeline/impl/XStreamBatchExecutionTest.java
Log:
JBRULES-2016 add support for FireAllRules to XStream marshalling

Modified: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/command/CommandFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/command/CommandFactory.java	2009-03-19 15:47:22 UTC (rev 25747)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/command/CommandFactory.java	2009-03-19 16:00:28 UTC (rev 25748)
@@ -142,6 +142,14 @@
         return getCommandFactoryProvider().newGetGlobal( identifier,
                                                          outIdentifier );
     }
+    
+    public static Command newFireAllRules() {
+        return getCommandFactoryProvider().newFireAllRules();
+    }
+    
+    public static Command newFireAllRules(int max) {
+        return getCommandFactoryProvider().newFireAllRules(max);
+    }    
 
     /**
      * Start a process

Modified: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/command/CommandFactoryProvider.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/command/CommandFactoryProvider.java	2009-03-19 15:47:22 UTC (rev 25747)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/command/CommandFactoryProvider.java	2009-03-19 16:00:28 UTC (rev 25748)
@@ -13,6 +13,10 @@
 
     Command newInsertElements(Iterable iterable);
     
+    Command newFireAllRules();
+
+    Command newFireAllRules(int max);    
+    
 	Command newGetObjects();
 
     public Command newGetObjects(ObjectFilter filter);

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/impl/CommandFactoryProviderImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/impl/CommandFactoryProviderImpl.java	2009-03-19 15:47:22 UTC (rev 25747)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/impl/CommandFactoryProviderImpl.java	2009-03-19 16:00:28 UTC (rev 25748)
@@ -5,6 +5,7 @@
 
 import org.drools.command.Command;
 import org.drools.command.CommandFactoryProvider;
+import org.drools.process.command.FireAllRulesCommand;
 import org.drools.process.command.GetGlobalCommand;
 import org.drools.process.command.GetObjectsCommand;
 import org.drools.process.command.InsertElementsCommand;
@@ -65,6 +66,14 @@
 		cmd.setOutIdentifier(outIdentifier);
 		return cmd;
 	}
+	
+	public Command newFireAllRules() {
+	    return new FireAllRulesCommand();
+	}
+	
+	public Command newFireAllRules(int max) {
+	    return new FireAllRulesCommand(max);
+	}
 
 	public Command newStartProcess(String processId) {
 		StartProcessCommand startProcess = new StartProcessCommand();

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/FireAllRulesCommand.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/FireAllRulesCommand.java	2009-03-19 15:47:22 UTC (rev 25747)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/FireAllRulesCommand.java	2009-03-19 16:00:28 UTC (rev 25748)
@@ -21,9 +21,13 @@
     public FireAllRulesCommand(AgendaFilter agendaFilter) {
         this.agendaFilter = agendaFilter;
     }
+    
+    public int getMax() {
+        return this.max;
+    }
 
     public Integer execute(ReteooWorkingMemory session) {
-        if ( max > 0 ) {
+        if ( max != -1 ) {
             return session.fireAllRules( max );
         } else if ( agendaFilter != null ) {
             return session.fireAllRules( new StatefulKnowledgeSessionImpl.AgendaFilterWrapper( agendaFilter ) );

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/GetObjectsCommand.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/GetObjectsCommand.java	2009-03-19 15:47:22 UTC (rev 25747)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/GetObjectsCommand.java	2009-03-19 16:00:28 UTC (rev 25748)
@@ -11,7 +11,7 @@
 
 public class GetObjectsCommand
     implements
-    Command<Collection< ? extends Object>> {
+    Command<Collection> {
 
     public String getOutIdentifier() {
 		return outIdentifier;
@@ -32,7 +32,7 @@
         this.filter = filter;
     }
 
-    public Collection< ? extends Object > execute(ReteooWorkingMemory session) {        
+    public Collection execute(ReteooWorkingMemory session) {        
         Collection col = null;
         
         if ( filter != null ) {

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/help/impl/BatchExecutionHelperProviderImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/help/impl/BatchExecutionHelperProviderImpl.java	2009-03-19 15:47:22 UTC (rev 25747)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/help/impl/BatchExecutionHelperProviderImpl.java	2009-03-19 16:00:28 UTC (rev 25748)
@@ -9,6 +9,7 @@
 
 import org.drools.base.ClassObjectType;
 import org.drools.base.DroolsQuery;
+import org.drools.process.command.FireAllRulesCommand;
 import org.drools.process.command.GetGlobalCommand;
 import org.drools.process.command.GetObjectsCommand;
 import org.drools.process.command.InsertElementsCommand;
@@ -67,6 +68,8 @@
                        GetObjectsCommand.class );
         xstream.alias( "batch-execution-results",
                        BatchExecutionResultImpl.class );
+        xstream.alias( "fire-all-rules",
+                       FireAllRulesCommand.class );
         xstream.alias( "query",
                        QueryCommand.class );
         xstream.alias( "query-results",
@@ -76,6 +79,7 @@
 
         xstream.registerConverter( new InsertConverter( xstream.getMapper() ) );
         xstream.registerConverter( new InsertElementsConverter( xstream.getMapper() ) );
+        xstream.registerConverter( new FireAllRulesConverter( xstream.getMapper() ) );
         xstream.registerConverter( new StartProcessConvert( xstream.getMapper() ) );
         xstream.registerConverter( new QueryConverter( xstream.getMapper() ) );
         xstream.registerConverter( new SetGlobalConverter( xstream.getMapper() ) );
@@ -348,6 +352,44 @@
         }
     }
 
+    public static class FireAllRulesConverter extends AbstractCollectionConverter
+        implements
+        Converter {
+
+        public FireAllRulesConverter(Mapper mapper) {
+            super( mapper );
+        }
+
+        public void marshal(Object object,
+                            HierarchicalStreamWriter writer,
+                            MarshallingContext context) {
+            FireAllRulesCommand cmd = (FireAllRulesCommand) object;
+
+            if ( cmd.getMax() != -1 ) {
+                writer.addAttribute( "max",
+                                     Integer.toString( cmd.getMax() ) );
+            }
+        }
+
+        public Object unmarshal(HierarchicalStreamReader reader,
+                                UnmarshallingContext context) {
+            String max = reader.getAttribute( "max" );
+            
+            FireAllRulesCommand cmd = null;
+            
+            if ( max != null ) {
+                cmd = new FireAllRulesCommand( Integer.parseInt( max ) );
+            } else {
+                cmd = new FireAllRulesCommand( );
+            }
+            return cmd;
+        }
+
+        public boolean canConvert(Class clazz) {
+            return clazz.equals( FireAllRulesCommand.class );
+        }
+    }
+
     public static class QueryConverter extends AbstractCollectionConverter
         implements
         Converter {

Modified: labs/jbossrules/trunk/drools-pipeline/drools-transformer-xstream/src/test/java/org/drools/runtime/pipeline/impl/XStreamBatchExecutionTest.java
===================================================================
--- labs/jbossrules/trunk/drools-pipeline/drools-transformer-xstream/src/test/java/org/drools/runtime/pipeline/impl/XStreamBatchExecutionTest.java	2009-03-19 15:47:22 UTC (rev 25747)
+++ labs/jbossrules/trunk/drools-pipeline/drools-transformer-xstream/src/test/java/org/drools/runtime/pipeline/impl/XStreamBatchExecutionTest.java	2009-03-19 16:00:28 UTC (rev 25748)
@@ -112,6 +112,14 @@
         inXml += "      <oldPrice>0</oldPrice>";
         inXml += "    </org.drools.Cheese>";
         inXml += "  </insert-elements>";
+        inXml += "  <fire-all-rules />";
+        inXml += "  <insert out-identifier='outBrie'>";
+        inXml += "    <org.drools.Cheese>";
+        inXml += "      <type>brie</type>";
+        inXml += "      <price>10</price>";
+        inXml += "      <oldPrice>5</oldPrice>";
+        inXml += "    </org.drools.Cheese>";
+        inXml += "  </insert>";        
         inXml += "</batch-execution>";
         
         StatelessKnowledgeSession ksession = getSession2( ResourceFactory.newByteArrayResource( str.getBytes() ) );
@@ -135,11 +143,20 @@
         expectedXml += "      </org.drools.Cheese>\n";
         expectedXml += "    </list>\n";        
         expectedXml += "  </result>\n";
+        expectedXml += "  <result identifier='outBrie'>";
+        expectedXml += "    <org.drools.Cheese>";
+        expectedXml += "      <type>brie</type>";
+        expectedXml += "      <price>10</price>";
+        expectedXml += "      <oldPrice>5</oldPrice>";
+        expectedXml += "    </org.drools.Cheese>";
+        expectedXml += "  </result>";         
         expectedXml += "</batch-execution-results>\n";
         
         assertXMLEqual( expectedXml, outXml );
         
         BatchExecutionResults result = ( BatchExecutionResults ) BatchExecutionHelper.newXStreamMarshaller().fromXML( outXml );
+        
+        // brie should not have been added to the list
         List list = ( List ) result.getValue( "list" );
         Cheese stilton25 = new Cheese( "stilton", 30);
         Cheese stilton30 = new Cheese( "stilton", 35);
@@ -148,7 +165,12 @@
         expectedList.add( stilton25 );
         expectedList.add( stilton30 );
         
-        assertEquals( expectedList, new HashSet( list ));       
+        assertEquals( expectedList, new HashSet( list )); 
+
+        // brie should not have changed
+        Cheese brie10 = new Cheese( "brie", 10);
+        brie10.setOldPrice( 5 );
+        assertEquals( brie10, result.getValue( "outBrie" ) );
     }    
     
     public void testSetGlobal() throws Exception {
@@ -487,8 +509,78 @@
             newSet.add( list );
         }
         assertEquals( set, newSet );  
-    }       
+    }   
     
+    public void testManualFireAllRules() throws Exception {
+        String str = "";
+        str += "package org.drools \n";
+        str += "import org.drools.Cheese \n";
+        str += "global java.util.List list \n";
+        str += "rule rule1 \n";
+        str += "  when \n";
+        str += "    $c : Cheese() \n";
+        str += " \n";
+        str += "  then \n";
+        str += "    $c.setPrice( $c.getPrice() + 5 ); \n";
+        str += "    list.add( $c );";
+        str += "end\n";        
+
+        String inXml = "";
+        inXml += "<batch-execution>";
+        inXml += "  <set-global identifier='list' out='true'>";
+        inXml += "    <list/>";
+        inXml += "  </set-global>";        
+        inXml += "  <insert-elements>";
+        inXml += "    <org.drools.Cheese>";
+        inXml += "      <type>stilton</type>";
+        inXml += "      <price>25</price>";
+        inXml += "      <oldPrice>0</oldPrice>";
+        inXml += "    </org.drools.Cheese>";
+        inXml += "    <org.drools.Cheese>";
+        inXml += "      <type>stilton</type>";
+        inXml += "      <price>30</price>";
+        inXml += "      <oldPrice>0</oldPrice>";
+        inXml += "    </org.drools.Cheese>";
+        inXml += "  </insert-elements>";
+        inXml += "</batch-execution>";
+        
+        StatelessKnowledgeSession ksession = getSession2( ResourceFactory.newByteArrayResource( str.getBytes() ) );
+        ResultHandlerImpl resultHandler = new ResultHandlerImpl();        
+        getPipeline(ksession).insert( inXml, resultHandler );        
+        String outXml = ( String ) resultHandler.getObject();
+        
+        String expectedXml = "";
+        expectedXml += "<batch-execution-results>\n";
+        expectedXml += "  <result identifier='list'>\n";
+        expectedXml += "    <list>\n";
+        expectedXml += "      <org.drools.Cheese>\n";
+        expectedXml += "        <type>stilton</type>\n";
+        expectedXml += "        <price>35</price>\n";        
+        expectedXml += "        <oldPrice>0</oldPrice>\n";        
+        expectedXml += "      </org.drools.Cheese>\n";
+        expectedXml += "      <org.drools.Cheese>\n";
+        expectedXml += "        <type>stilton</type>\n";     
+        expectedXml += "        <price>30</price>\n";
+        expectedXml += "        <oldPrice>0</oldPrice>\n";           
+        expectedXml += "      </org.drools.Cheese>\n";
+        expectedXml += "    </list>\n";        
+        expectedXml += "  </result>\n";
+        expectedXml += "</batch-execution-results>\n";
+        
+        assertXMLEqual( expectedXml, outXml );
+        
+        BatchExecutionResults result = ( BatchExecutionResults ) BatchExecutionHelper.newXStreamMarshaller().fromXML( outXml );
+        List list = ( List ) result.getValue( "list" );
+        Cheese stilton25 = new Cheese( "stilton", 30);
+        Cheese stilton30 = new Cheese( "stilton", 35);
+        
+        Set expectedList = new HashSet();
+        expectedList.add( stilton25 );
+        expectedList.add( stilton30 );
+        
+        assertEquals( expectedList, new HashSet( list ));       
+    }        
+    
     public void testProcess() throws SAXException, IOException {
         KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
         Reader source = new StringReader(




More information about the jboss-svn-commits mailing list