[jboss-svn-commits] JBL Code SVN: r26308 - in labs/jbossrules/trunk: drools-core/src/main/java/org/drools/runtime/help/impl and 2 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Wed Apr 29 20:58:56 EDT 2009
Author: mark.proctor at jboss.com
Date: 2009-04-29 20:58:56 -0400 (Wed, 29 Apr 2009)
New Revision: 26308
Modified:
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/InsertElementsCommand.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/InsertObjectCommand.java
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/impl/BatchExecutionResultImpl.java
labs/jbossrules/trunk/drools-pipeline/drools-transformer-xstream/src/test/java/org/drools/runtime/pipeline/impl/XStreamBatchExecutionTest.java
Log:
-insertElements now works with facthandles
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/InsertElementsCommand.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/InsertElementsCommand.java 2009-04-29 18:28:39 UTC (rev 26307)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/InsertElementsCommand.java 2009-04-30 00:58:56 UTC (rev 26308)
@@ -13,10 +13,10 @@
implements
Command<Collection<FactHandle>> {
public Iterable objects;
-
+
private String outIdentifier;
- private boolean returnObject = true;
+ private boolean returnObject = true;
public InsertElementsCommand() {
this.objects = new ArrayList();
@@ -25,7 +25,7 @@
public InsertElementsCommand(Iterable objects) {
this.objects = objects;
}
-
+
public Iterable getObjects() {
return this.objects;
}
@@ -35,22 +35,22 @@
}
public Collection<FactHandle> execute(ReteooWorkingMemory session) {
- List<FactHandle> handles = new ArrayList<FactHandle>( );
+ List<FactHandle> handles = new ArrayList<FactHandle>();
for ( Object object : objects ) {
handles.add( session.insert( object ) );
}
-
+
if ( outIdentifier != null ) {
if ( this.returnObject ) {
session.getExecutionResult().getResults().put( this.outIdentifier,
objects );
}
- session.getExecutionResult().getFacts().put( this.outIdentifier,
- handles );
- }
+ session.getExecutionResult().getFactHandles().put( this.outIdentifier,
+ handles );
+ }
return handles;
}
-
+
public String getOutIdentifier() {
return this.outIdentifier;
}
@@ -65,10 +65,10 @@
public void setReturnObject(boolean returnObject) {
this.returnObject = returnObject;
- }
+ }
public String toString() {
- List<Object> list = new ArrayList<Object>( );
+ List<Object> list = new ArrayList<Object>();
for ( Object object : objects ) {
list.add( object );
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/InsertObjectCommand.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/InsertObjectCommand.java 2009-04-29 18:28:39 UTC (rev 26307)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/InsertObjectCommand.java 2009-04-30 00:58:56 UTC (rev 26308)
@@ -26,7 +26,7 @@
session.getExecutionResult().getResults().put( this.outIdentifier,
object );
}
- session.getExecutionResult().getFacts().put( this.outIdentifier,
+ session.getExecutionResult().getFactHandles().put( this.outIdentifier,
factHandle );
}
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-04-29 18:28:39 UTC (rev 26307)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/help/impl/BatchExecutionHelperProviderImpl.java 2009-04-30 00:58:56 UTC (rev 26308)
@@ -2,6 +2,7 @@
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -82,7 +83,7 @@
xstream.alias( "complete-work-item",
CompleteWorkItemCommand.class );
xstream.alias( "abort-work-item",
- AbortWorkItemCommand.class );
+ AbortWorkItemCommand.class );
xstream.alias( "set-global",
SetGlobalCommand.class );
xstream.alias( "get-global",
@@ -319,7 +320,7 @@
writer.addAttribute( "out-identifier",
cmd.getOutIdentifier() );
- writer.addAttribute( "return-object",
+ writer.addAttribute( "return-objects",
Boolean.toString( cmd.isReturnObject() ) );
}
@@ -334,7 +335,7 @@
public Object unmarshal(HierarchicalStreamReader reader,
UnmarshallingContext context) {
String identifierOut = reader.getAttribute( "out-identifier" );
- String returnObject = reader.getAttribute( "return-object" );
+ String returnObject = reader.getAttribute( "return-objects" );
List objects = new ArrayList();
while ( reader.hasMoreChildren() ) {
@@ -779,7 +780,8 @@
reader.moveUp();
}
- Command cmd = CommandFactory.newCompleteWorkItem(Long.parseLong( id ), results);
+ Command cmd = CommandFactory.newCompleteWorkItem( Long.parseLong( id ),
+ results );
return cmd;
}
@@ -788,35 +790,35 @@
return clazz.equals( CompleteWorkItemCommand.class );
}
}
-
+
public static class AbortWorkItemConverter extends AbstractCollectionConverter
- implements
- Converter {
+ implements
+ Converter {
- public AbortWorkItemConverter(Mapper mapper) {
- super( mapper );
- }
+ public AbortWorkItemConverter(Mapper mapper) {
+ super( mapper );
+ }
- public void marshal(Object object,
- HierarchicalStreamWriter writer,
- MarshallingContext context) {
- AbortWorkItemCommand cmd = (AbortWorkItemCommand) object;
- writer.addAttribute( "id",
- Long.toString( cmd.getWorkItemId() ) );
- }
+ public void marshal(Object object,
+ HierarchicalStreamWriter writer,
+ MarshallingContext context) {
+ AbortWorkItemCommand cmd = (AbortWorkItemCommand) object;
+ writer.addAttribute( "id",
+ Long.toString( cmd.getWorkItemId() ) );
+ }
- public Object unmarshal(HierarchicalStreamReader reader,
- UnmarshallingContext context) {
- String id = reader.getAttribute( "id" );
- Command cmd = CommandFactory.newAbortWorkItem(Long.parseLong( id ) );
+ public Object unmarshal(HierarchicalStreamReader reader,
+ UnmarshallingContext context) {
+ String id = reader.getAttribute( "id" );
+ Command cmd = CommandFactory.newAbortWorkItem( Long.parseLong( id ) );
- return cmd;
- }
+ return cmd;
+ }
- public boolean canConvert(Class clazz) {
- return clazz.equals( AbortWorkItemCommand.class );
+ public boolean canConvert(Class clazz) {
+ return clazz.equals( AbortWorkItemCommand.class );
+ }
}
-}
public static class BatchExecutionResultConverter extends AbstractCollectionConverter
implements
@@ -841,13 +843,31 @@
writer.endNode();
}
- for ( String identifier : ((BatchExecutionResultImpl) result).getFacts().keySet() ) {
- writer.startNode( "fact-handle" );
- writer.addAttribute( "identifier",
- identifier );
- writer.addAttribute( "externalForm",
- ((InternalFactHandle) result.getFactHandle( identifier )).toExternalForm() );
- writer.endNode();
+ for ( String identifier : ((BatchExecutionResultImpl) result).getFactHandles().keySet() ) {
+
+ Object handle = result.getFactHandle( identifier );
+ if ( handle instanceof FactHandle ) {
+ writer.startNode( "fact-handle" );
+ writer.addAttribute( "identifier",
+ identifier );
+ writer.addAttribute( "externalForm",
+ ((FactHandle) handle).toExternalForm() );
+
+ writer.endNode();
+ } else if ( handle instanceof Collection ) {
+ writer.startNode( "fact-handles" );
+ writer.addAttribute( "identifier",
+ identifier );
+ for ( FactHandle factHandle : (Collection<FactHandle>) handle ) {
+ writer.startNode( "fact-handle" );
+ writer.addAttribute( "externalForm",
+ ((FactHandle) factHandle).toExternalForm() );
+ writer.endNode();
+ }
+
+ writer.endNode();
+ }
+
}
}
@@ -855,7 +875,7 @@
UnmarshallingContext context) {
BatchExecutionResultImpl result = new BatchExecutionResultImpl();
Map results = result.getResults();
- Map facts = result.getFacts();
+ Map facts = result.getFactHandles();
while ( reader.hasMoreChildren() ) {
reader.moveDown();
@@ -873,6 +893,16 @@
String identifier = reader.getAttribute( "identifier" );
facts.put( identifier,
new DisconnectedFactHandle( reader.getAttribute( "externalForm" ) ) );
+ } else if ( reader.getNodeName().equals( "fact-handles" ) ) {
+ String identifier = reader.getAttribute( "identifier" );
+ List<FactHandle> list = new ArrayList();
+ while ( reader.hasMoreChildren() ) {
+ reader.moveDown();
+ list.add( new DisconnectedFactHandle( reader.getAttribute( "externalForm" ) ) );
+ reader.moveUp();
+ }
+ facts.put( identifier,
+ list );
} else {
throw new IllegalArgumentException( "Element '" + reader.getNodeName() + "' is not supported here" );
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/impl/BatchExecutionResultImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/impl/BatchExecutionResultImpl.java 2009-04-29 18:28:39 UTC (rev 26307)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/impl/BatchExecutionResultImpl.java 2009-04-30 00:58:56 UTC (rev 26308)
@@ -36,11 +36,11 @@
this.results = results;
}
- public Map<String, Object> getFacts() {
+ public Map<String, Object> getFactHandles() {
return this.facts;
}
- public void setFacts(Map<String, Object> facts) {
+ public void setFactHandles(Map<String, Object> facts) {
this.facts = facts;
}
}
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-04-29 18:28:39 UTC (rev 26307)
+++ labs/jbossrules/trunk/drools-pipeline/drools-transformer-xstream/src/test/java/org/drools/runtime/pipeline/impl/XStreamBatchExecutionTest.java 2009-04-30 00:58:56 UTC (rev 26308)
@@ -434,7 +434,110 @@
assertEquals( expectedList,
new HashSet( list ) );
}
+
+ public void testInsertElementsWithReturnObjects() 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 out-identifier='myfacts' return-objects='true'>";
+ 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 += " <fire-all-rules/>";
+ inXml += "</batch-execution>";
+
+ StatefulKnowledgeSession ksession = getSessionStateful( ResourceFactory.newByteArrayResource( str.getBytes() ) );
+ ResultHandlerImpl resultHandler = new ResultHandlerImpl();
+ getPipelineStateful( ksession ).insert( inXml,
+ resultHandler );
+ String outXml = (String) resultHandler.getObject();
+
+ Collection<? extends FactHandle> factHandles = ksession.getFactHandles();
+
+ String expectedXml = "";
+ expectedXml += "<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 += " <result identifier=\"myfacts\">\n";
+ expectedXml += " <list>\n";
+ expectedXml += " <org.drools.Cheese reference=\"../../../result/list/org.drools.Cheese[2]\"/>\n";
+ expectedXml += " <org.drools.Cheese reference=\"../../../result/list/org.drools.Cheese\"/>\n";
+ expectedXml += " </list>\n";
+ expectedXml += " </result>\n";
+ expectedXml += " <fact-handles identifier=\"myfacts\">\n";
+ for ( FactHandle factHandle : factHandles ) {
+ if ( ((Cheese)ksession.getObject( factHandle )).getPrice() == 30 ) {
+ expectedXml += " <fact-handle externalForm=\""+ factHandle.toExternalForm() +"\"/>\n";
+ }
+ }
+
+ for ( FactHandle factHandle : factHandles ) {
+ if ( ((Cheese)ksession.getObject( factHandle )).getPrice() == 35 ) {
+ expectedXml += " <fact-handle externalForm=\""+ factHandle.toExternalForm() +"\"/>\n";
+ }
+ }
+ expectedXml += " </fact-handles>\n";
+
+ expectedXml += "</execution-results>\n";
+
+ System.out.println( expectedXml );
+ System.out.println( outXml );
+
+ assertXMLEqual( expectedXml,
+ outXml );
+
+ ExecutionResults result = (ExecutionResults) 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 testSetGlobal() throws Exception {
String str = "";
str += "package org.drools \n";
More information about the jboss-svn-commits
mailing list