[jboss-svn-commits] JBL Code SVN: r26753 - in labs/jbossrules/trunk/drools-pipeline/drools-transformer-xstream/src/test/java/org/drools: runtime/pipeline/impl and 1 other directory.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed May 27 22:58:12 EDT 2009


Author: michael.neale at jboss.com
Date: 2009-05-27 22:58:12 -0400 (Wed, 27 May 2009)
New Revision: 26753

Added:
   labs/jbossrules/trunk/drools-pipeline/drools-transformer-xstream/src/test/java/org/drools/ChangeCollector.java
Modified:
   labs/jbossrules/trunk/drools-pipeline/drools-transformer-xstream/src/test/java/org/drools/runtime/pipeline/impl/XStreamBatchExecutionTest.java
Log:
shows how to get changes back out

Added: labs/jbossrules/trunk/drools-pipeline/drools-transformer-xstream/src/test/java/org/drools/ChangeCollector.java
===================================================================
--- labs/jbossrules/trunk/drools-pipeline/drools-transformer-xstream/src/test/java/org/drools/ChangeCollector.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-pipeline/drools-transformer-xstream/src/test/java/org/drools/ChangeCollector.java	2009-05-28 02:58:12 UTC (rev 26753)
@@ -0,0 +1,51 @@
+package org.drools;
+
+import org.drools.event.rule.WorkingMemoryEventListener;
+import org.drools.event.rule.ObjectInsertedEvent;
+import org.drools.event.rule.ObjectUpdatedEvent;
+import org.drools.event.rule.ObjectRetractedEvent;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author Michael Neale
+ */
+public class ChangeCollector implements WorkingMemoryEventListener {
+
+    private List<String> retracted;
+    private List changes;
+
+
+
+
+    public List<String> getRetracted() {
+        return retracted;
+    }
+
+
+    public List getChanges() {
+        return changes;
+    }
+
+
+    public void objectInserted(ObjectInsertedEvent event) {
+        
+    }
+
+    public void objectUpdated(ObjectUpdatedEvent event) {
+        if (changes == null) changes = new ArrayList();
+        if (event.getObject() instanceof Cheese) {
+            Cheese c = (Cheese) event.getObject();
+            changes.add(c);
+        }
+    }
+
+    public void objectRetracted(ObjectRetractedEvent event) {
+        if (retracted == null) retracted = new ArrayList<String>();
+        if (event.getOldObject() instanceof Cheese) {
+            Cheese c = (Cheese) event.getOldObject();
+            retracted.add(c.getType());
+        }
+    }
+}


Property changes on: labs/jbossrules/trunk/drools-pipeline/drools-transformer-xstream/src/test/java/org/drools/ChangeCollector.java
___________________________________________________________________
Name: svn:eol-style
   + native

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-05-27 18:12:44 UTC (rev 26752)
+++ labs/jbossrules/trunk/drools-pipeline/drools-transformer-xstream/src/test/java/org/drools/runtime/pipeline/impl/XStreamBatchExecutionTest.java	2009-05-28 02:58:12 UTC (rev 26753)
@@ -80,6 +80,125 @@
         }
     }
 
+
+    public void testListenForChanges() throws Exception {
+
+        String str = "";
+        str += "package org.drools \n";
+        str += "import org.drools.Cheese \n";
+        str += "import org.drools.ChangeCollector \n";
+        str += "rule rule1 \n";
+        str += "  when \n";
+        str += "    $c : Cheese(price==25) \n";
+        str += " \n";
+        str += "  then \n";
+        str += "end\n";
+
+
+        str += "rule rule2 \n";
+        str += "  when \n";
+        str += "    p : Person(name=='mic') \n";
+        str += "    c : Cheese(price != 42) \n";
+        str += " \n";
+        str += "  then \n";
+        str += "    c.setPrice( 42 ); \n";
+        str += "    update(c); \n";
+        str += "end\n";
+
+        str += "rule rule3 \n";
+        str += "  when \n";
+        str += "    p : Person(name=='mark') \n";
+        str += "    c : Cheese(price == 42) \n";
+        str += " \n";
+        str += "  then \n";
+        str += "    retract(c); \n";
+        str += "end\n";
+
+
+
+        str += "rule ruleBootStrap \n";
+        str += "salience 10000\n";
+        str += "  when \n";
+        str += "    $c : ChangeCollector() \n";
+        str += " \n";
+        str += "  then \n";
+        str += "    kcontext.getKnowledgeRuntime().addEventListener($c); \n";
+        str += "end\n";
+
+
+        str += "rule ruleCleanup \n";
+        str += "salience -10000\n";
+        str += "  when \n";
+        str += "    $c : ChangeCollector() \n";
+        str += " \n";
+        str += "  then \n";
+        str += "    kcontext.getKnowledgeRuntime().removeEventListener($c); \n";
+        str += "    retract($c); \n";        
+        str += "end\n";
+
+        String inXml = "";
+        inXml += "<batch-execution>";
+        inXml += "  <insert out-identifier='outStilton'>";
+        inXml += "    <org.drools.Cheese>";
+        inXml += "      <type>stilton</type>";
+        inXml += "      <price>25</price>";
+        inXml += "      <oldPrice>0</oldPrice>";
+        inXml += "    </org.drools.Cheese>";
+        inXml += "  </insert>";
+        inXml += "  <fire-all-rules />";
+        inXml += "</batch-execution>";
+
+        StatefulKnowledgeSession ksession = getSessionStateful( ResourceFactory.newByteArrayResource( str.getBytes() ) );
+        ResultHandlerImpl resultHandler = new ResultHandlerImpl();
+        getPipelineStateful( ksession ).insert( inXml,
+                                                resultHandler );
+
+
+
+        inXml = "";
+        inXml += "<batch-execution>";
+        inXml += "  <insert out-identifier='person'>";
+        inXml += "    <org.drools.Person>";
+        inXml += "      <name>mic</name>";
+        inXml += "    </org.drools.Person>";
+        inXml += "  </insert>";
+        inXml += "  <insert out-identifier='changes'>";
+        inXml += "    <org.drools.ChangeCollector/>";
+        inXml += "  </insert>";
+        inXml += "  <fire-all-rules />";
+        inXml += "</batch-execution>";
+
+        resultHandler = new ResultHandlerImpl();
+        getPipelineStateful( ksession ).insert( inXml, resultHandler );
+        String outXml = (String) resultHandler.getObject();
+
+        assertTrue(outXml.indexOf("<changes>") > -1);
+
+
+
+        inXml = "";
+        inXml += "<batch-execution>";
+        inXml += "  <insert out-identifier='person'>";
+        inXml += "    <org.drools.Person>";
+        inXml += "      <name>mark</name>";
+        inXml += "    </org.drools.Person>";
+        inXml += "  </insert>";
+        inXml += "  <insert out-identifier='changes'>";
+        inXml += "    <org.drools.ChangeCollector/>";
+        inXml += "  </insert>";
+        inXml += "  <fire-all-rules />";
+        inXml += "</batch-execution>";
+
+        resultHandler = new ResultHandlerImpl();
+        getPipelineStateful( ksession ).insert( inXml, resultHandler );
+        outXml = (String) resultHandler.getObject();
+
+        assertTrue(outXml.indexOf("<retracted>") > -1);
+        
+
+
+    }
+
     public void testInsertWithDefaults() throws Exception {
         String str = "";
         str += "package org.drools \n";




More information about the jboss-svn-commits mailing list