[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