[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