[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