[jboss-svn-commits] JBL Code SVN: r32972 - in labs/jbossrules/trunk: drools-api/src/main/java/org/drools/runtime/rule and 13 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed May 19 18:24:19 EDT 2010


Author: mark.proctor at jboss.com
Date: 2010-05-19 18:24:17 -0400 (Wed, 19 May 2010)
New Revision: 32972

Added:
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/rule/AttachedViewChangedEventListener.java
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/rule/LiveQuery.java
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/rule/Row.java
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/rule/ViewChangedEventListener.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/AttachedViewChangedEventListenerImpl.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/InternalViewChangedEventListener.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/StandardQueryViewChangedEventListener.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/rule/impl/LiveQueryImpl.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/rule/impl/OpenQueryViewChangedEventListenerAdapter.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/rule/impl/RowAdapter.java
Removed:
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/DefaultQueryResultsCollector.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/QueryResultCollector.java
Modified:
   labs/jbossrules/trunk/drools-api/META-INF/MANIFEST.MF
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/rule/QueryResultsRow.java
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/rule/WorkingMemory.java
   labs/jbossrules/trunk/drools-compiler/META-INF/MANIFEST.MF
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/QueryTest.java
   labs/jbossrules/trunk/drools-core/META-INF/MANIFEST.MF
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/QueryResult.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/DroolsQuery.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/impl/CommandBasedStatefulKnowledgeSession.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AgendaItem.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DefaultAgenda.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/TruthMaintenanceSystem.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/StatefulKnowledgeSessionImpl.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/InputMarshaller.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/OutputMarshaller.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/AccumulateNode.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ExistsNode.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/JoinNode.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/LeftInputAdapterNode.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/LeftTuple.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/NotNode.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/QueryElementNode.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/QueryTerminalNode.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooWorkingMemory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/RuleTerminalNode.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/UnificationRestriction.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/rule/impl/FlatQueryResultRow.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/rule/impl/FlatQueryResults.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/rule/impl/NativeQueryResultRow.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/AccumulateNodeTest.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/JoinNodeTest.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/LogicalAssertionTest.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/NotNodeTest.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/QueryElementNodeTest.java
Log:
JBRULES-2514 Open Live Querries
-Implementation done, with unit test, see QueryTest.

Modified: labs/jbossrules/trunk/drools-api/META-INF/MANIFEST.MF
===================================================================
--- labs/jbossrules/trunk/drools-api/META-INF/MANIFEST.MF	2010-05-19 20:17:40 UTC (rev 32971)
+++ labs/jbossrules/trunk/drools-api/META-INF/MANIFEST.MF	2010-05-19 22:24:17 UTC (rev 32972)
@@ -1,6 +1,66 @@
 Manifest-Version: 1.0
+Export-Package: org.drools.event.io;uses:="org.drools";version="5.1.0.
+ SNAPSHOT",org.drools.marshalling;uses:="org.drools.runtime,org.drools
+ ";version="5.1.0.SNAPSHOT",org.drools.runtime;uses:="org.drools.comma
+ nd,org.drools.time,org.drools.runtime.process,org.drools.event,org.dr
+ ools.runtime.rule,org.drools,org.drools.runtime.conf";version="5.1.0.
+ SNAPSHOT",org.drools.event;uses:="org.drools.runtime,org.drools.event
+ .process,org.drools.event.rule";version="5.1.0.SNAPSHOT",org.drools.c
+ onf;uses:="org.drools.runtime.rule";version="5.1.0.SNAPSHOT",org.droo
+ ls.event.knowledgebase;uses:="org.drools.definition.rule,org.drools.d
+ efinition,org.drools";version="5.1.0.SNAPSHOT",org.drools;uses:="org.
+ drools.io,org.drools.runtime,org.drools.definition.type,org.drools.ev
+ ent.knowledgebase,org.drools.definition.process,org.drools.definition
+ ,org.drools.definition.rule,org.drools.conf,org.drools.util";version=
+ "5.1.0.SNAPSHOT",org.drools.definition.process;uses:="org.drools.defi
+ nition";version="5.1.0.SNAPSHOT",org.drools.util;uses:="org.drools,or
+ g.drools.io,org.drools.builder";version="5.1.0.SNAPSHOT",org.drools.b
+ uilder;uses:="org.drools.runtime,org.drools,org.drools.io,org.drools.
+ definition,org.drools.builder.conf,org.drools.util";version="5.1.0.SN
+ APSHOT",org.drools.builder.conf;uses:="org.drools.runtime.rule,org.dr
+ ools.conf";version="5.1.0.SNAPSHOT",org.drools.logger;uses:="org.droo
+ ls.event";version="5.1.0.SNAPSHOT",org.drools.runtime.process;uses:="
+ org.drools.runtime";version="5.1.0.SNAPSHOT",org.drools.runtime.conf;
+ uses:="org.drools.conf";version="5.1.0.SNAPSHOT",org.drools.runtime.h
+ elp;uses:="com.thoughtworks.xstream,org.quartz,org.drools.time";versi
+ on="5.1.0.SNAPSHOT",org.drools.time;version="5.1.0.SNAPSHOT",org.droo
+ ls.event.rule;uses:="org.drools.event,org.drools.runtime.rule";versio
+ n="5.1.0.SNAPSHOT",org.drools.definition.rule;uses:="org.drools.defin
+ ition";version="5.1.0.SNAPSHOT",org.drools.osgi.api;uses:="org.osgi.f
+ ramework,org.osgi.util.tracker,org.drools,org.drools.util";version="5
+ .1.0.SNAPSHOT",org.drools.runtime.rule;uses:="org.drools.definition.r
+ ule,org.drools.runtime";version="5.1.0.SNAPSHOT",org.drools.event.pro
+ cess;uses:="org.drools.runtime.process,org.drools.event";version="5.1
+ .0.SNAPSHOT",org.drools.definition;uses:="org.drools.definition.proce
+ ss,org.drools.definition.rule";version="5.1.0.SNAPSHOT",org.drools.vs
+ m;uses:="org.drools.command,org.drools.runtime,org.drools,org.drools.
+ agent,org.drools.builder,org.drools.persistence.jpa";version="5.1.0.S
+ NAPSHOT",org.drools.grid;uses:="org.drools.command";version="5.1.0.SN
+ APSHOT",org.drools.builder.help;uses:="com.sun.tools.xjc,org.drools.i
+ o,org.drools,org.drools.builder,javax.xml.bind";version="5.1.0.SNAPSH
+ OT",org.drools.definition.type;version="5.1.0.SNAPSHOT",org.drools.io
+ ;uses:="org.drools,org.drools.event.io,org.drools.util";version="5.1.
+ 0.SNAPSHOT",org.drools.runtime.pipeline;uses:="org.drools.runtime,jav
+ ax.xml.bind,net.sf.jxls.reader,org.milyn,com.thoughtworks.xstream";ve
+ rsion="5.1.0.SNAPSHOT",org.drools.agent;uses:="org.drools.runtime,org
+ .drools.io,org.drools";version="5.1.0.SNAPSHOT",org.drools.command;us
+ es:="org.drools.runtime,org.drools.runtime.rule";version="5.1.0.SNAPS
+ HOT",org.drools.task.service;version="5.1.0.SNAPSHOT",org.drools.pers
+ istence.jpa;uses:="org.drools.runtime,org.drools";version="5.1.0.SNAP
+ SHOT",org.drools.management;uses:="javax.management";version="5.1.0.S
+ NAPSHOT",org.drools.command.impl;uses:="org.drools.command";version="
+ 5.1.0.SNAPSHOT"
+Private-Package: .;version="5.1.0.SNAPSHOT"
+Tool: Bnd-0.0.357
+Bundle-Name: Drools :: API
+Created-By: 1.6.0_18 (Sun Microsystems Inc.)
+Bundle-Vendor: JBoss Inc.
+DynamicImport-Package: *
+Bundle-Version: 5.1.0.SNAPSHOT
+Bnd-LastModified: 1274306668600
 Bundle-Activator: org.drools.osgi.api.Activator
-Created-By: 1.5.0_21 (Sun Microsystems Inc.)
+Bundle-ManifestVersion: 2
+Bundle-Description: A rule production system
 Bundle-License: http://www.apache.org/licenses/LICENSE-2.0.txt
 Import-Package: com.sun.tools.xjc;resolution:=optional,com.thoughtwork
  s.xstream;resolution:=optional,javax.management;resolution:=optional,
@@ -8,64 +68,6 @@
  tional,org.milyn;resolution:=optional,org.osgi.framework;resolution:=
  optional;version="1.5",org.osgi.util.tracker;resolution:=optional;ver
  sion="1.4",org.quartz;resolution:=optional
-Bnd-LastModified: 1267407372231
-Export-Package: org.drools.logger;uses:="org.drools.event";version="5.
- 1.0.SNAPSHOT",org.drools.runtime;uses:="org.drools.command,org.drools
- .time,org.drools.event,org.drools,org.drools.runtime.process,org.droo
- ls.runtime.rule,org.drools.runtime.conf";version="5.1.0.SNAPSHOT",org
- .drools.task.service;version="5.1.0.SNAPSHOT",org.drools.marshalling;
- uses:="org.drools.runtime,org.drools";version="5.1.0.SNAPSHOT",org.dr
- ools.runtime.rule;uses:="org.drools.definition.rule,org.drools.runtim
- e";version="5.1.0.SNAPSHOT",org.drools.command;uses:="org.drools.runt
- ime,org.drools.runtime.rule";version="5.1.0.SNAPSHOT",org.drools.time
- ;version="5.1.0.SNAPSHOT",org.drools.management;uses:="javax.manageme
- nt";version="5.1.0.SNAPSHOT",org.drools.event.process;uses:="org.droo
- ls.event,org.drools.runtime.process";version="5.1.0.SNAPSHOT",org.dro
- ols.event.io;uses:="org.drools";version="5.1.0.SNAPSHOT",org.drools.c
- onf;uses:="org.drools.runtime.rule";version="5.1.0.SNAPSHOT",org.droo
- ls.osgi.api;uses:="org.osgi.framework,org.drools,org.drools.util,org.
- osgi.util.tracker";version="5.1.0.SNAPSHOT",org.drools;uses:="org.dro
- ols.io,org.drools.event.knowledgebase,org.drools.runtime,org.drools.d
- efinition,org.drools.definition.type,org.drools.definition.rule,org.d
- rools.definition.process,org.drools.conf,org.drools.util";version="5.
- 1.0.SNAPSHOT",org.drools.runtime.conf;uses:="org.drools.conf";version
- ="5.1.0.SNAPSHOT",org.drools.runtime.process;uses:="org.drools.runtim
- e";version="5.1.0.SNAPSHOT",org.drools.event.rule;uses:="org.drools.e
- vent,org.drools.runtime.rule";version="5.1.0.SNAPSHOT",org.drools.bui
- lder.help;uses:="com.sun.tools.xjc,org.drools.builder,org.drools.io,o
- rg.drools,javax.xml.bind";version="5.1.0.SNAPSHOT",org.drools.vsm;use
- s:="org.drools.command,org.drools.runtime,org.drools.persistence.jpa,
- org.drools.builder,org.drools,org.drools.agent";version="5.1.0.SNAPSH
- OT",org.drools.builder.conf;uses:="org.drools.runtime.rule,org.drools
- .conf";version="5.1.0.SNAPSHOT",org.drools.definition;uses:="org.droo
- ls.definition.rule,org.drools.definition.process";version="5.1.0.SNAP
- SHOT",org.drools.definition.rule;uses:="org.drools.definition";versio
- n="5.1.0.SNAPSHOT",org.drools.runtime.pipeline;uses:="org.drools.runt
- ime,javax.xml.bind,net.sf.jxls.reader,org.milyn,com.thoughtworks.xstr
- eam";version="5.1.0.SNAPSHOT",org.drools.runtime.help;uses:="com.thou
- ghtworks.xstream,org.drools.time,org.quartz";version="5.1.0.SNAPSHOT"
- ,org.drools.event.knowledgebase;uses:="org.drools.definition.rule,org
- .drools.definition,org.drools";version="5.1.0.SNAPSHOT",org.drools.ev
- ent;uses:="org.drools.runtime,org.drools.event.rule,org.drools.event.
- process";version="5.1.0.SNAPSHOT",org.drools.persistence.jpa;uses:="o
- rg.drools.runtime,org.drools";version="5.1.0.SNAPSHOT",org.drools.bui
- lder;uses:="org.drools.io,org.drools,org.drools.definition,org.drools
- .builder.conf,org.drools.util";version="5.1.0.SNAPSHOT",org.drools.io
- ;uses:="org.drools,org.drools.event.io,org.drools.util";version="5.1.
- 0.SNAPSHOT",org.drools.util;uses:="org.drools,org.drools.builder,org.
- drools.io";version="5.1.0.SNAPSHOT",org.drools.command.impl;uses:="or
- g.drools.command";version="5.1.0.SNAPSHOT",org.drools.definition.type
- ;version="5.1.0.SNAPSHOT",org.drools.definition.process;uses:="org.dr
- ools.definition";version="5.1.0.SNAPSHOT",org.drools.agent;uses:="org
- .drools.runtime,org.drools,org.drools.io";version="5.1.0.SNAPSHOT"
-Bundle-Version: 5.1.0.SNAPSHOT
-Bundle-Name: Drools :: API
-Bundle-Description: A rule production system
-Private-Package: .;version="5.1.0.SNAPSHOT"
+Bundle-SymbolicName: org.drools.api;singleton:=true
 Bundle-DocURL: http://www.jboss.org/
-Bundle-Vendor: JBoss Inc.
-Bundle-ManifestVersion: 2
-Bundle-SymbolicName: org.drools.api;singleton:=true
-Tool: Bnd-0.0.357
-DynamicImport-Package: *
 

Added: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/rule/AttachedViewChangedEventListener.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/rule/AttachedViewChangedEventListener.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/rule/AttachedViewChangedEventListener.java	2010-05-19 22:24:17 UTC (rev 32972)
@@ -0,0 +1,5 @@
+package org.drools.runtime.rule;
+
+public interface AttachedViewChangedEventListener {
+    void close();
+}

Added: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/rule/LiveQuery.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/rule/LiveQuery.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/rule/LiveQuery.java	2010-05-19 22:24:17 UTC (rev 32972)
@@ -0,0 +1,5 @@
+package org.drools.runtime.rule;
+
+public interface LiveQuery {
+    void close();
+}

Modified: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/rule/QueryResultsRow.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/rule/QueryResultsRow.java	2010-05-19 20:17:40 UTC (rev 32971)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/rule/QueryResultsRow.java	2010-05-19 22:24:17 UTC (rev 32972)
@@ -4,19 +4,6 @@
  * A row of data from the QueryResults container.
  *
  */
-public interface QueryResultsRow {
-    /**
-     * Get the object that is bound to the given identifier
-     * @param identifier
-     *     The identifier of the bound object
-     * @return
-     */
-    public Object get(String identifier);
-    
-    /**
-     * Return the FactHandle associated with the given identifier
-     * @param identifier
-     * @return
-     */
-    public FactHandle getFactHandle(String identifier);
+public interface QueryResultsRow extends Row {
+
 }

Added: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/rule/Row.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/rule/Row.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/rule/Row.java	2010-05-19 22:24:17 UTC (rev 32972)
@@ -0,0 +1,41 @@
+package org.drools.runtime.rule;
+
+public interface Row {
+    /**
+     * Get the object that is bound to the given identifier
+     * @param identifier
+     *     The identifier of the bound object
+     * @return
+     */
+    public Object get(String identifier);
+    
+    /**
+     * Return the Object for the specified position
+     * 
+     * @param i
+     * @return
+     */
+    public Object get(final int i);    
+    
+    /**
+     * Return the FactHandle associated with the given identifier
+     * @param identifier
+     * @return
+     */
+    public FactHandle getFactHandle(String identifier);
+
+    /**
+     * Return the FactHandle for the specified position
+     * 
+     * @param i
+     * @return
+     */
+    public FactHandle getFactHandle(final int i);  
+    
+    /**
+     * Number of objects in the row
+     * 
+     * @return
+     */
+    public int size();
+}

Added: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/rule/ViewChangedEventListener.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/rule/ViewChangedEventListener.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/rule/ViewChangedEventListener.java	2010-05-19 22:24:17 UTC (rev 32972)
@@ -0,0 +1,10 @@
+package org.drools.runtime.rule;
+
+public interface ViewChangedEventListener {
+	
+	public void rowAdded(Row row);
+	
+	public void rowRemoved(Row row);
+	
+	public void rowUpdated(Row row);
+}

Modified: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/rule/WorkingMemory.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/rule/WorkingMemory.java	2010-05-19 20:17:40 UTC (rev 32971)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/rule/WorkingMemory.java	2010-05-19 22:24:17 UTC (rev 32972)
@@ -38,15 +38,15 @@
      * @return
      */
     WorkingMemoryEntryPoint getWorkingMemoryEntryPoint(String name);
-    
+
     /**
      * Returns a collection of all available working memory entry points
      * for this session.
      * 
      * @return the collection of all available entry points for this session
      */
-    Collection<? extends WorkingMemoryEntryPoint> getWorkingMemoryEntryPoints();
-    
+    Collection< ? extends WorkingMemoryEntryPoint> getWorkingMemoryEntryPoints();
+
     /**
      * Retrieve the QueryResults of the specified query.
      *
@@ -76,5 +76,10 @@
      * @throws IllegalArgumentException
      *         if no query named "query" is found in the KnowledgeBase
      */
-    public QueryResults getQueryResults(String query, Object[] arguments);      
+    public QueryResults getQueryResults(String query,
+                                        Object[] arguments);
+
+    public LiveQuery openLiveQuery(String query,
+                                   Object[] arguments,
+                                   ViewChangedEventListener listener);
 }

Modified: labs/jbossrules/trunk/drools-compiler/META-INF/MANIFEST.MF
===================================================================
--- labs/jbossrules/trunk/drools-compiler/META-INF/MANIFEST.MF	2010-05-19 20:17:40 UTC (rev 32971)
+++ labs/jbossrules/trunk/drools-compiler/META-INF/MANIFEST.MF	2010-05-19 22:24:17 UTC (rev 32972)
@@ -1,84 +1,66 @@
 Manifest-Version: 1.0
-Bundle-Activator: org.drools.osgi.compiler.Activator
-Created-By: 1.5.0_21 (Sun Microsystems Inc.)
-Bundle-License: http://www.apache.org/licenses/LICENSE-2.0.txt
-Import-Package: com.thoughtworks.xstream,com.thoughtworks.xstream.io,c
- om.thoughtworks.xstream.io.xml,javax.xml.parsers,javax.xml.transform,
- javax.xml.transform.stream,org.antlr.runtime,org.antlr.runtime.tree,o
- rg.codehaus.janino,org.codehaus.janino.util,org.codehaus.janino.util.
- enumerator,org.codehaus.janino.util.resource,org.eclipse.jdt.core.com
- piler;provider=jasper;version="3.3",org.eclipse.jdt.internal.compiler
- ;provider=jasper;version="3.3",org.eclipse.jdt.internal.compiler.clas
- sfmt;provider=jasper;version="3.3",org.eclipse.jdt.internal.compiler.
- env;provider=jasper;version="3.3",org.eclipse.jdt.internal.compiler.p
- roblem;provider=jasper;version="3.3",org.mvel2;version="2.0",org.mvel
- 2.ast;version="2.0",org.mvel2.compiler;version="2.0",org.mvel2.integr
- ation;version="2.0",org.mvel2.integration.impl;version="2.0",org.mvel
- 2.optimizers;version="2.0",org.mvel2.templates;version="2.0",org.mvel
- 2.util;version="2.0",org.osgi.framework;version="1.5",org.osgi.util.t
- racker;version="1.4",org.w3c.dom,org.xml.sax
-Bnd-LastModified: 1267407606512
 Export-Package: org.drools.builder.impl;uses:="org.drools.compiler";ve
- rsion="5.1.0.SNAPSHOT",org.drools.rule.builder;uses:="org.drools.comp
- iler,org.mvel2.compiler,org.mvel2,org.drools.rule.builder.dialect.mve
- l";version="5.1.0.SNAPSHOT",org.drools.guvnor.client.modeldriven.test
- ing;uses:="org.drools.guvnor.client.modeldriven.brl";version="5.1.0.S
- NAPSHOT",org.drools.guvnor.server.util;uses:="org.drools.guvnor.clien
- t.modeldriven.brl,com.thoughtworks.xstream.io,com.thoughtworks.xstrea
- m.io.xml,com.thoughtworks.xstream,org.drools.guvnor.server.rules,org.
- drools.guvnor.client.modeldriven,org.mvel2,org.drools.guvnor.client.m
- odeldriven.dt,org.drools.guvnor.client.modeldriven.testing";version="
- 5.1.0.SNAPSHOT",org.drools.compiler.xml;uses:="org.drools.compiler.xm
- l.processes,org.drools.compiler.xml.rules,org.xml.sax,javax.xml.parse
- rs";version="5.1.0.SNAPSHOT",org.drools.compiler.xml.processes;uses:=
- "org.xml.sax,org.w3c.dom,org.drools.compiler.xml,javax.xml.transform.
- stream,javax.xml.transform";version="5.1.0.SNAPSHOT",org.drools.osgi.
- compiler;uses:="org.osgi.framework,org.osgi.util.tracker,org.drools.c
- ompiler,org.drools.builder.impl";version="5.1.0.SNAPSHOT",org.drools.
- guvnor.client.modeldriven.dt;uses:="org.drools.guvnor.client.modeldri
- ven.brl,org.drools.guvnor.client.modeldriven";version="5.1.0.SNAPSHOT
- ",org.drools.compiler.xml.rules;uses:="org.xml.sax,org.w3c.dom,org.an
- tlr.runtime.tree,org.antlr.runtime";version="5.1.0.SNAPSHOT",org.droo
- ls.process.builder;uses:="org.drools.rule.builder,org.drools.compiler
- ";version="5.1.0.SNAPSHOT",org.drools.testframework;uses:="org.drools
- .guvnor.client.modeldriven.testing,org.mvel2.compiler,org.drools.guvn
- or.server.util,org.mvel2";version="5.1.0.SNAPSHOT",org.drools.guvnor.
- client.modeldriven.ui;version="5.1.0.SNAPSHOT",org.drools.guvnor.clie
- nt.modeldriven;uses:="org.drools.guvnor.client.modeldriven.brl";versi
- on="5.1.0.SNAPSHOT",org.drools.reteoo.compiled;uses:="org.drools.comp
- iler,org.drools.rule.builder.dialect.java";version="5.1.0.SNAPSHOT",o
- rg.drools.rule.builder.dialect.java.parser;uses:="org.antlr.runtime";
- version="5.1.0.SNAPSHOT",org.drools.semantics.java.parser;version="5.
- 1.0.SNAPSHOT",org.drools.rule.builder.dialect.java;uses:="org.drools.
- rule.builder,org.mvel2.integration,org.mvel2.integration.impl,org.mve
- l2.templates,org.mvel2.compiler,org.mvel2.optimizers,org.drools.compi
- ler,org.drools.rule.builder.dialect.mvel,org.drools.rule.builder.dial
- ect.java.parser,org.antlr.runtime,org.mvel2";version="5.1.0.SNAPSHOT"
- ,org.drools.compiler;uses:="org.drools.rule.builder,org.antlr.runtime
- .tree,org.antlr.runtime,org.drools.guvnor.server.util,org.drools.comp
- iler.xml,org.xml.sax,org.drools.guvnor.client.modeldriven.brl,org.mve
- l2,org.drools.process.builder,org.drools.compiler.xml.processes,javax
- .xml.parsers";version="5.1.0.SNAPSHOT",org.drools.rule.builder.dialec
- t.mvel;uses:="org.drools.rule.builder,org.drools.compiler,org.mvel2,o
- rg.mvel2.compiler,org.mvel2.util,org.drools.rule.builder.dialect.java
- ,org.mvel2.ast";version="5.1.0.SNAPSHOT",org.drools.guvnor.server.rul
- es;uses:="org.drools.guvnor.server.util,org.drools.compiler,org.drool
- s.guvnor.client.modeldriven";version="5.1.0.SNAPSHOT",org.drools.guvn
- or.client.modeldriven.brl;version="5.1.0.SNAPSHOT"
-Bundle-Version: 5.1.0.SNAPSHOT
+ rsion="5.1.0.SNAPSHOT",org.drools.osgi.compiler;uses:="org.osgi.util.
+ tracker,org.osgi.framework,org.drools.builder.impl,org.drools.compile
+ r";version="5.1.0.SNAPSHOT",org.drools.compiler.xml.rules;uses:="org.
+ w3c.dom,org.xml.sax,org.antlr.runtime.tree,org.antlr.runtime";version
+ ="5.1.0.SNAPSHOT",org.drools.compiler.xml.processes;uses:="org.drools
+ .compiler.xml,org.w3c.dom,org.xml.sax,javax.xml.transform,javax.xml.t
+ ransform.stream";version="5.1.0.SNAPSHOT",org.drools.compiler.xml;use
+ s:="org.drools.compiler.xml.processes,org.drools.compiler.xml.rules,j
+ avax.xml.parsers,org.xml.sax";version="5.1.0.SNAPSHOT",org.drools.tes
+ tframework;version="5.1.0.SNAPSHOT",org.drools.compiler;uses:="org.dr
+ ools.rule.builder,org.antlr.runtime.tree,org.antlr.runtime,org.xml.sa
+ x,org.drools.compiler.xml,org.drools.process.builder,org.mvel2,org.dr
+ ools.compiler.xml.processes,javax.xml.parsers";version="5.1.0.SNAPSHO
+ T",org.drools.process.builder;uses:="org.drools.rule.builder,org.droo
+ ls.compiler";version="5.1.0.SNAPSHOT",org.drools.reteoo.compiled;uses
+ :="org.drools.rule.builder.dialect.java,org.drools.compiler";version=
+ "5.1.0.SNAPSHOT",org.drools.semantics.java.parser;version="5.1.0.SNAP
+ SHOT",org.drools.rule.builder.dialect.java;uses:="org.mvel2.templates
+ ,org.mvel2.integration,org.mvel2.integration.impl,org.drools.rule.bui
+ lder,org.drools.compiler,org.drools.rule.builder.dialect.mvel,org.mve
+ l2.optimizers,org.mvel2.compiler,org.drools.rule.builder.dialect.java
+ .parser,org.antlr.runtime,org.mvel2";version="5.1.0.SNAPSHOT",org.dro
+ ols.rule.builder.dialect.mvel;uses:="org.drools.rule.builder,org.droo
+ ls.compiler,org.mvel2,org.mvel2.util,org.drools.rule.builder.dialect.
+ java,org.mvel2.ast,org.mvel2.compiler";version="5.1.0.SNAPSHOT",org.d
+ rools.rule.builder.dialect.java.parser;uses:="org.antlr.runtime";vers
+ ion="5.1.0.SNAPSHOT",org.drools.rule.builder;uses:="org.drools.compil
+ er,org.drools.rule.builder.dialect.mvel,org.mvel2,org.mvel2.compiler"
+ ;version="5.1.0.SNAPSHOT"
+Private-Package: org.drools.commons.jci.problems;version="5.1.0.SNAPSH
+ OT",org.drools.lang.descr;version="5.1.0.SNAPSHOT",org.drools.commons
+ .jci.compilers;version="5.1.0.SNAPSHOT",org.drools.commons.jci.reader
+ s;version="5.1.0.SNAPSHOT",org.drools.commons.jci.stores;version="5.1
+ .0.SNAPSHOT",org.drools.lang;version="5.1.0.SNAPSHOT",org.drools.lang
+ .dsl;version="5.1.0.SNAPSHOT"
+Tool: Bnd-0.0.357
 Bundle-Name: Drools :: Compiler
-Bundle-Description: A rule production system
-Private-Package: org.drools.lang.descr;version="5.1.0.SNAPSHOT",org.dr
- ools.lang.dsl;version="5.1.0.SNAPSHOT",org.drools.commons.jci.compile
- rs;version="5.1.0.SNAPSHOT",org.drools.commons.jci.stores;version="5.
- 1.0.SNAPSHOT",org.drools.lang;version="5.1.0.SNAPSHOT",org.drools.com
- mons.jci.problems;version="5.1.0.SNAPSHOT",org.drools.commons.jci.rea
- ders;version="5.1.0.SNAPSHOT"
-Bundle-DocURL: http://www.jboss.org/
+Created-By: 1.6.0_18 (Sun Microsystems Inc.)
+Require-Bundle: org.drools.core;bundle-version="5.1.0.SNAPSHOT"
 Bundle-Vendor: JBoss Inc.
+DynamicImport-Package: *
+Bundle-Version: 5.1.0.SNAPSHOT
+Bnd-LastModified: 1274306750644
+Bundle-Activator: org.drools.osgi.compiler.Activator
 Bundle-ManifestVersion: 2
+Bundle-Description: A rule production system
+Bundle-License: http://www.apache.org/licenses/LICENSE-2.0.txt
+Import-Package: javax.xml.parsers,javax.xml.transform,javax.xml.transf
+ orm.stream,org.antlr.runtime,org.antlr.runtime.tree,org.codehaus.jani
+ no,org.codehaus.janino.util,org.codehaus.janino.util.enumerator,org.c
+ odehaus.janino.util.resource,org.eclipse.jdt.core.compiler;provider=j
+ asper;version="3.3",org.eclipse.jdt.internal.compiler;provider=jasper
+ ;version="3.3",org.eclipse.jdt.internal.compiler.classfmt;provider=ja
+ sper;version="3.3",org.eclipse.jdt.internal.compiler.env;provider=jas
+ per;version="3.3",org.eclipse.jdt.internal.compiler.problem;provider=
+ jasper;version="3.3",org.mvel2;version="2.0",org.mvel2.ast;version="2
+ .0",org.mvel2.compiler;version="2.0",org.mvel2.integration;version="2
+ .0",org.mvel2.integration.impl;version="2.0",org.mvel2.optimizers;ver
+ sion="2.0",org.mvel2.templates;version="2.0",org.mvel2.util;version="
+ 2.0",org.osgi.framework;version="1.5",org.osgi.util.tracker;version="
+ 1.4",org.w3c.dom,org.xml.sax
 Bundle-SymbolicName: org.drools.compiler;singleton:=true
-Tool: Bnd-0.0.357
-Require-Bundle: org.drools.core;bundle-version="5.1.0.SNAPSHOT"
-DynamicImport-Package: *
+Bundle-DocURL: http://www.jboss.org/
 

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/QueryTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/QueryTest.java	2010-05-19 20:17:40 UTC (rev 32971)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/QueryTest.java	2010-05-19 22:24:17 UTC (rev 32972)
@@ -45,6 +45,9 @@
 import org.drools.rule.Package;
 import org.drools.rule.Variable;
 import org.drools.runtime.StatefulKnowledgeSession;
+import org.drools.runtime.rule.LiveQuery;
+import org.drools.runtime.rule.Row;
+import org.drools.runtime.rule.ViewChangedEventListener;
 import org.drools.runtime.rule.impl.FlatQueryResults;
 import org.drools.spi.ObjectType;
 
@@ -562,5 +565,136 @@
 //            assertEquals( set,
 //                          newSet );
         }
+    
+    public void testOpenQuery() throws Exception {
+        String str = "";
+        str += "package org.drools.test  \n";
+        str += "import org.drools.Cheese \n";
+        str += "query cheeses(String $type1, String $type2) \n";
+        str += "    stilton : Cheese(type == $type1, $price : price) \n";
+        str += "    cheddar : Cheese(type == $type2, price == stilton.price) \n";
+        str += "end\n";
 
+        KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+        kbuilder.add( ResourceFactory.newByteArrayResource( str.getBytes() ),
+                      ResourceType.DRL );
+
+        if ( kbuilder.hasErrors() ) {
+            fail( kbuilder.getErrors().toString() );
+        }
+
+        KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+        kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
+
+        kbase = SerializationHelper.serializeObject( kbase );
+
+        StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+        Cheese stilton1 = new Cheese( "stilton",
+                                      1 );
+        Cheese cheddar1 = new Cheese( "cheddar",
+                                      1 );
+        Cheese stilton2 = new Cheese( "stilton",
+                                      2 );
+        Cheese cheddar2 = new Cheese( "cheddar",
+                                      2 );
+        Cheese stilton3 = new Cheese( "stilton",
+                                      3 );
+        Cheese cheddar3 = new Cheese( "cheddar",
+                                      3 );
+
+        org.drools.runtime.rule.FactHandle s1Fh = ksession.insert( stilton1 );
+        ksession.insert( stilton2 );
+        ksession.insert( stilton3 );
+        ksession.insert( cheddar1 );
+        ksession.insert( cheddar2 );
+        org.drools.runtime.rule.FactHandle c3Fh = ksession.insert( cheddar3 );
+        
+        final List updated = new ArrayList();
+        final List removed = new ArrayList();
+        final List added = new ArrayList();
+        
+        ViewChangedEventListener listener = new ViewChangedEventListener() {            
+            public void rowUpdated(Row row) {
+                updated.add( row.get( "$price" ) );
+            }
+            
+            public void rowRemoved(Row row) {
+                removed.add( row.get( "$price" ) );
+            }
+            
+            public void rowAdded(Row row) {
+                added.add( row.get( "$price" ) );
+            }
+        };        
+        
+        // Open the LiveQuery
+        LiveQuery query = ksession.openLiveQuery( "cheeses", new Object[] { "cheddar", "stilton" } , listener );
+        
+        // Assert that on opening we have three rows added
+        assertEquals( 3, added.size() );
+        assertEquals( 0, removed.size() );
+        assertEquals( 0, updated.size() );
+        
+        // And that we have correct values from those rows
+        assertEquals( 1, added.get( 0 ) );
+        assertEquals( 2, added.get( 1 ) );
+        assertEquals( 3, added.get( 2 ) );
+        
+        // Do an update that causes a match to become untrue, thus triggering a removed
+        cheddar3.setPrice( 4 );
+        ksession.update(  c3Fh, cheddar3 );
+        
+        assertEquals( 3, added.size() );
+        assertEquals( 1, removed.size() );
+        assertEquals( 0, updated.size() );
+        
+        assertEquals( 4, removed.get( 0 ) );
+                
+        // Now make that partial true again, and thus another added
+        cheddar3.setPrice( 3 );
+        ksession.update(  c3Fh, cheddar3 );
+        
+        
+        assertEquals( 4, added.size() );
+        assertEquals( 1, removed.size() );
+        assertEquals( 0, updated.size() );  
+        
+        assertEquals( 3, added.get( 3 ) );        
+        
+        // check a standard update
+        cheddar3.setOldPrice( 0 );
+        ksession.update(  c3Fh, cheddar3 ); 
+        
+        assertEquals( 4, added.size() );
+        assertEquals( 1, removed.size() );
+        assertEquals( 1, updated.size() );         
+        
+        assertEquals( 3, updated.get( 0 ) );      
+        
+        // Check a standard retract
+        ksession.retract( s1Fh );
+                
+        assertEquals( 4, added.size() );
+        assertEquals( 2, removed.size() );
+        assertEquals( 1, updated.size() );    
+        
+        assertEquals( 1, removed.get( 1 ) );          
+        
+        // Close the query, we should get removed events for each row
+        query.close();
+        
+        assertEquals( 4, added.size() );
+        assertEquals( 4, removed.size() );
+        assertEquals( 1, updated.size() );         
+     
+        assertEquals( 2, removed.get( 2 ) );
+        assertEquals( 3, removed.get( 3 ) );
+        
+        // Check that updates no longer have any impact.
+        ksession.update(  c3Fh, cheddar3 ); 
+        assertEquals( 4, added.size() );
+        assertEquals( 4, removed.size() );
+        assertEquals( 1, updated.size() );           
+    }
+
 }

Modified: labs/jbossrules/trunk/drools-core/META-INF/MANIFEST.MF
===================================================================
--- labs/jbossrules/trunk/drools-core/META-INF/MANIFEST.MF	2010-05-19 20:17:40 UTC (rev 32971)
+++ labs/jbossrules/trunk/drools-core/META-INF/MANIFEST.MF	2010-05-19 22:24:17 UTC (rev 32972)
@@ -1,299 +1,312 @@
 Manifest-Version: 1.0
+Export-Package: org.drools.server.profile;uses:="javax.xml.bind";versi
+ on="5.1.0.SNAPSHOT",org.drools.process.core.impl;uses:="org.drools.pr
+ ocess.core,org.drools.process.core.datatype,org.drools.process.core.c
+ ontext";version="5.1.0.SNAPSHOT",org.drools.workflow.instance.context
+ ;uses:="org.drools.process.instance,org.drools.workflow.instance,org.
+ drools.process.instance.impl,org.drools.process.instance.context,org.
+ drools.process.core";version="5.1.0.SNAPSHOT",org.drools.command.asse
+ rtion;uses:="org.mvel2,org.drools.command,org.drools.core.util,org.dr
+ ools.command.impl";version="5.1.0.SNAPSHOT",org.drools.runtime.pipeli
+ ne.impl;uses:="org.drools.runtime.pipeline,org.drools.command,org.dro
+ ols.command.runtime.rule,org.mvel2,org.mvel2.compiler,org.drools.comm
+ on,org.drools.impl,org.drools.rule,org.drools";version="5.1.0.SNAPSHO
+ T",org.drools.conflict;uses:="org.drools.spi,org.drools.rule,org.droo
+ ls.common";version="5.1.0.SNAPSHOT",org.drools.time.impl;uses:="org.d
+ rools.time,org.drools.common,org.drools";version="5.1.0.SNAPSHOT",org
+ .drools.process.instance.impl.humantask;uses:="javax.swing,javax.swin
+ g.event,javax.swing.border";version="5.1.0.SNAPSHOT",org.drools.proce
+ ss.instance.context;uses:="org.drools.process.instance,org.drools.pro
+ cess.core";version="5.1.0.SNAPSHOT",org.drools.base.extractors;uses:=
+ "org.drools.common,org.drools.base,org.drools,org.drools.spi,org.droo
+ ls.core.util,org.mvel2,org.mvel2.compiler";version="5.1.0.SNAPSHOT",o
+ rg.drools.base.field;uses:="org.drools,org.drools.spi,org.drools.comm
+ on,org.drools.core.util";version="5.1.0.SNAPSHOT",org.drools.workflow
+ .instance.impl;uses:="org.drools.workflow.instance.node,org.drools.wo
+ rkflow.core,org.drools,org.drools.workflow.core.impl,org.drools.commo
+ n,org.drools.process.instance,org.drools.base,org.drools.workflow.ins
+ tance,org.drools.process.instance.context.exception,org.drools.spi,or
+ g.drools.workflow.instance.impl.factory,org.drools.workflow.core.node
+ ,org.drools.event,org.drools.process.instance.context.exclusive,org.d
+ rools.process.core,org.mvel2.integration.impl,org.mvel2.integration,o
+ rg.drools.process.instance.context.variable,org.drools.process.instan
+ ce.impl,org.drools.process.instance.event";version="5.1.0.SNAPSHOT",o
+ rg.drools.ruleflow.core;uses:="org.drools.ruleflow.core.factory,org.d
+ rools.workflow.core,org.drools.workflow.core.impl,org.drools.workflow
+ .core.node,org.drools.process.core.context.variable,org.drools.proces
+ s.core.context.exception,org.drools.process.core.context.swimlane,org
+ .drools.process.core,org.drools.process.core.validation,org.drools.pr
+ ocess.core.datatype,org.drools.ruleflow.core.validation";version="5.1
+ .0.SNAPSHOT",org.drools.event.rule.impl;uses:="org.drools.common,org.
+ drools.event,org.drools,org.drools.spi,org.drools.impl";version="5.1.
+ 0.SNAPSHOT",org.drools.base.evaluators;uses:="org.drools.common,org.d
+ rools.base,org.drools.rule,org.drools,org.drools.spi,org.drools.time,
+ org.drools.core.util,org.drools.type,org.mvel2.util";version="5.1.0.S
+ NAPSHOT",org.drools.process.core.event;version="5.1.0.SNAPSHOT",org.d
+ rools.definitions.impl;uses:="org.drools.definitions.rule.impl,org.dr
+ ools.rule";version="5.1.0.SNAPSHOT",org.drools.process.instance.event
+ ;uses:="org.drools.common,org.drools.marshalling.impl,org.drools.proc
+ ess.instance,org.drools";version="5.1.0.SNAPSHOT",org.drools.xml.jaxb
+ .util;uses:="org.drools.common,org.drools.command.runtime.process,org
+ .drools.command.runtime,org.drools.runtime.impl,org.drools.command.ru
+ ntime.rule,org.drools.runtime.rule.impl,javax.xml.bind,javax.xml.bind
+ .annotation.adapters,javax.xml.bind.annotation";version="5.1.0.SNAPSH
+ OT",org.drools.ruleflow.core.validation;uses:="org.drools.process.cor
+ e.timer,org.drools.process.core.context.variable,org.drools.ruleflow.
+ core,org.drools.workflow.core.node,org.drools,org.drools.process.core
+ .validation.impl,org.drools.workflow.core,org.drools.workflow.core.im
+ pl,org.drools.process.core.validation,org.drools.process.core.datatyp
+ e,org.mvel2,org.mvel2.compiler,org.drools.time,org.drools.process.cor
+ e";version="5.1.0.SNAPSHOT",org.drools.process.instance.context.varia
+ ble;uses:="org.drools.common,org.drools.process.core.context.variable
+ ,org.drools.process.instance,org.drools.event,org.drools,org.drools.p
+ rocess.instance.context,org.drools.process.core";version="5.1.0.SNAPS
+ HOT",org.drools.command.runtime;uses:="org.drools.command,org.drools.
+ command.impl,org.drools.command.runtime.process,javax.xml.bind.annota
+ tion,org.drools.command.runtime.rule,org.drools.impl,org.drools.runti
+ me.impl,org.drools";version="5.1.0.SNAPSHOT",org.drools.process.insta
+ nce.context.exception;uses:="org.drools.common,org.drools.process.cor
+ e.context.exception,org.drools.process.instance,org.drools.base,org.d
+ rools.workflow.instance,org.drools,org.drools.workflow.core,org.drool
+ s.spi,org.drools.process.instance.context,org.drools.process.core";ve
+ rsion="5.1.0.SNAPSHOT",org.drools.command;uses:="org.drools.command.i
+ mpl,org.drools.runtime.impl,org.drools.time,org.drools";version="5.1.
+ 0.SNAPSHOT",org.drools.management;uses:="org.drools.common,javax.mana
+ gement,org.drools,javax.management.openmbean,org.drools.base,org.droo
+ ls.spi,org.drools.event,org.drools.rule";version="5.1.0.SNAPSHOT",org
+ .drools.process.core.context.variable;uses:="org.drools.process.core.
+ datatype.impl.type,org.drools.process.core.datatype,org.drools.proces
+ s.core,org.drools.process.core.context";version="5.1.0.SNAPSHOT",org.
+ drools.core.util.asm;uses:="org.mvel2.asm,org.drools,org.mvel2.asm.ut
+ il";version="5.1.0.SNAPSHOT",org.drools.definitions.rule.impl;uses:="
+ org.drools.rule";version="5.1.0.SNAPSHOT",org.drools.workflow.instanc
+ e.node;uses:="org.drools.workflow.instance.impl,org.drools.workflow.c
+ ore.node,org.drools,org.drools.workflow.core,org.drools.common,org.dr
+ ools.process.instance,org.drools.base,org.drools.workflow.instance,or
+ g.drools.spi,org.drools.process.instance.impl,org.drools.process.core
+ ,org.drools.impl,org.drools.event,org.drools.process.instance.context
+ .variable,org.drools.process.core.event,org.drools.process.instance.c
+ ontext.exception,org.mvel2.integration,org.mvel2,org.drools.process.i
+ nstance.context.swimlane,org.drools.rule,org.drools.process.instance.
+ context.exclusive,org.drools.process.core.timer,org.drools.process.in
+ stance.timer,org.drools.time";version="5.1.0.SNAPSHOT",org.drools.pro
+ cess.instance.impl;uses:="org.drools.process.instance,org.drools.proc
+ ess.core,org.drools.process.core.context.exception,org.drools.process
+ .core.context.variable,org.drools.process.instance.context.swimlane,o
+ rg.drools.process.core.context.swimlane,org.drools.process.instance.i
+ mpl.factory,org.drools.process.instance.context.variable,org.drools.p
+ rocess.instance.context.exception,org.drools,org.drools.common";versi
+ on="5.1.0.SNAPSHOT",org.drools.event.process.impl;uses:="org.drools.e
+ vent,org.drools,org.drools.common";version="5.1.0.SNAPSHOT",org.drool
+ s.process.core.validation.impl;uses:="org.drools.process.core.validat
+ ion";version="5.1.0.SNAPSHOT",org.drools.process.instance.timer;uses:
+ ="org.drools.time,org.drools.process.instance.event,org.drools,org.dr
+ ools.process.instance,org.drools.time.impl";version="5.1.0.SNAPSHOT",
+ org.drools.base;uses:="org.drools.event,org.drools,org.drools.spi,org
+ .drools.concurrent,org.drools.common,org.drools.core.util.asm,org.dro
+ ols.core.util,org.drools.base.evaluators,org.drools.time,org.drools.b
+ ase.extractors,org.mvel2.asm,org.drools.rule,org.drools.impl,org.droo
+ ls.process.instance,org.drools.base.field,org.drools.type,org.mvel2.i
+ ntegration,org.drools.base.mvel,org.mvel2.ast,org.drools.facttemplate
+ s";version="5.1.0.SNAPSHOT",org.drools.workflow.instance;uses:="org.d
+ rools.process.instance,org.drools.impl,org.drools.workflow.instance.i
+ mpl,org.drools,org.drools.workflow.core.impl,org.drools.common,org.dr
+ ools.process.core";version="5.1.0.SNAPSHOT",org.drools.util.codec;ver
+ sion="5.1.0.SNAPSHOT",org.drools.visualize;version="5.1.0.SNAPSHOT",o
+ rg.drools.process.core;uses:="org.drools.process.core.datatype";versi
+ on="5.1.0.SNAPSHOT",org.drools.process.core.datatype.impl.type;uses:=
+ "org.drools.process.core.datatype,org.drools.process.core,com.thought
+ works.xstream";version="5.1.0.SNAPSHOT",org.drools.common;uses:="org.
+ drools.spi,org.drools.rule,org.drools.impl,org.drools.event,org.drool
+ s,org.drools.base,org.drools.process.core,org.drools.core.util,org.dr
+ ools.management,org.drools.process.instance.event,org.drools.process.
+ instance,org.drools.process.core.event,org.drools.runtime.impl,org.dr
+ ools.type,org.drools.process.instance.timer,org.drools.time,org.drool
+ s.ruleflow.core,org.drools.workflow.core.node,org.drools.concurrent,o
+ rg.drools.base.evaluators,javax.xml.bind.annotation,org.drools.factte
+ mplates,org.drools.marshalling.impl,org.drools.time.impl";version="5.
+ 1.0.SNAPSHOT",org.drools.process.instance.context.exclusive;uses:="or
+ g.drools.process.instance.context";version="5.1.0.SNAPSHOT",org.drool
+ s.process.instance.impl.factory;uses:="org.drools.process.instance,or
+ g.drools.process.instance.impl,org.drools.process.instance.context,or
+ g.drools.process.core";version="5.1.0.SNAPSHOT",org.drools.workflow.i
+ nstance.impl.factory;uses:="org.drools.workflow.instance.impl,org.dro
+ ols.workflow.instance";version="5.1.0.SNAPSHOT",org.drools.command.ru
+ ntime.rule;uses:="org.drools.command,org.drools.command.impl,org.droo
+ ls.impl,org.drools,org.drools.spi,javax.xml.bind.annotation,org.drool
+ s.runtime.impl,org.drools.common,org.mvel2";version="5.1.0.SNAPSHOT",
+ org.drools.agent;uses:="org.drools,org.drools.rule,org.drools.core.ut
+ il,org.drools.definitions.impl,org.drools.util.codec,org.drools.agent
+ .impl,org.drools.common";version="5.1.0.SNAPSHOT",org.drools.xml.chan
+ geset;uses:="org.drools.io.impl,org.drools,org.w3c.dom,org.xml.sax,or
+ g.drools.xml,org.drools.builder.conf.impl,org.drools.io.internal,org.
+ drools.core.util";version="5.1.0.SNAPSHOT",org.drools.command.impl;us
+ es:="org.drools.command,org.drools.command.runtime.process,org.drools
+ .command.runtime.rule,org.drools.impl,org.drools,org.drools.command.r
+ untime,org.drools.rule,org.drools.time";version="5.1.0.SNAPSHOT",org.
+ drools.audit.event;version="5.1.0.SNAPSHOT",org.drools.process.instan
+ ce.context.swimlane;uses:="org.drools.process.core.context.swimlane,o
+ rg.drools.process.instance.context,org.drools.process.core";version="
+ 5.1.0.SNAPSHOT",org.drools.base.dataproviders;uses:="org.mvel2.integr
+ ation,org.drools.base.mvel,org.mvel2,org.drools.rule,org.drools,org.d
+ rools.spi,org.drools.core.util";version="5.1.0.SNAPSHOT",org.drools.b
+ uilder.conf.impl;version="5.1.0.SNAPSHOT",org.drools;uses:="org.drool
+ s.spi,org.drools.time.impl,org.drools.time,org.drools.rule,org.drools
+ .common,org.drools.workflow.instance.impl,org.drools.process.core.imp
+ l,org.drools.process.instance.impl,org.drools.runtime.rule.impl,org.d
+ rools.process.instance,org.drools.conflict,org.drools.process.core.da
+ tatype,org.mvel2,org.drools.process.core,org.drools.core.util,org.dro
+ ols.concurrent,org.drools.event,org.drools.process.instance.event,org
+ .drools.command,org.drools.process.instance.timer";version="5.1.0.SNA
+ PSHOT",org.drools.type;version="5.1.0.SNAPSHOT",org.drools.workflow.c
+ ore;uses:="org.drools.spi,org.drools.process.core";version="5.1.0.SNA
+ PSHOT",org.drools.workflow.core.impl;uses:="org.drools.workflow.core,
+ org.drools.process.core,org.drools.workflow.core.node,org.drools.proc
+ ess.core.impl";version="5.1.0.SNAPSHOT",org.drools.process.core.valid
+ ation;version="5.1.0.SNAPSHOT",org.drools.command.runtime.process;use
+ s:="javax.xml.bind.annotation,org.drools.command,org.drools.command.i
+ mpl,org.drools.process.instance,org.drools.xml.jaxb.util,javax.xml.bi
+ nd.annotation.adapters";version="5.1.0.SNAPSHOT",org.drools.rule;uses
+ :="org.drools.common,org.drools.spi,org.drools,org.drools.core.util,o
+ rg.drools.base,org.mvel2.integration.impl,org.mvel2.integration,org.m
+ vel2.ast,org.drools.base.mvel,org.drools.factmodel,org.drools.facttem
+ plates,org.drools.time.impl,org.drools.marshalling.impl,org.drools.ti
+ me";version="5.1.0.SNAPSHOT",org.drools.process.core.datatype.impl;us
+ es:="org.drools.process.core.datatype";version="5.1.0.SNAPSHOT",org.d
+ rools.spi;uses:="org.drools.base,org.drools.common,org.drools.rule,or
+ g.drools,org.drools.core.util,org.drools.time,org.drools.concurrent,o
+ rg.drools.facttemplates,org.drools.process.core.context.variable,org.
+ drools.impl,org.drools.process.instance,org.drools.process.instance.c
+ ontext.variable,org.drools.workflow.instance,org.drools.event";versio
+ n="5.1.0.SNAPSHOT",org.drools.time;uses:="org.drools.rule,org.drools,
+ org.drools.time.impl";version="5.1.0.SNAPSHOT",org.drools.xml;uses:="
+ org.xml.sax,org.drools.xml.changeset,javax.xml.parsers,org.w3c.dom,or
+ g.xml.sax.helpers,org.drools";version="5.1.0.SNAPSHOT",org.drools.aud
+ it;uses:="org.drools.event,org.drools.audit.event,org.drools,com.thou
+ ghtworks.xstream,org.drools.impl,org.drools.workflow.instance.node,or
+ g.drools.workflow.core.node,org.drools.common,org.drools.rule,org.dro
+ ols.workflow.instance,org.drools.command,org.drools.spi,org.drools.co
+ mmand.impl";version="5.1.0.SNAPSHOT",org.drools.process.core.context.
+ exception;uses:="org.drools.workflow.core,org.drools.process.core.con
+ text,org.drools.process.core";version="5.1.0.SNAPSHOT",org.drools.imp
+ l;uses:="org.drools,org.drools.definitions.rule.impl,org.drools.event
+ .knowlegebase.impl,org.drools.event,org.drools.rule,org.drools.defini
+ tions.impl,org.drools.common,org.drools.command,org.drools.agent,org.
+ drools.command.impl,org.drools.event.rule.impl,org.drools.spi,org.dro
+ ols.event.process.impl,org.drools.runtime.impl,org.drools.runtime.rul
+ e.impl,org.drools.process.instance.event,org.drools.process.instance,
+ org.drools.time,org.drools.base,org.drools.command.runtime,org.drools
+ .command.runtime.rule,org.drools.agent.impl,org.drools.core.util";ver
+ sion="5.1.0.SNAPSHOT",org.drools.osgi.core;uses:="org.drools.io.impl,
+ org.drools.impl,org.drools,org.osgi.framework";version="5.1.0.SNAPSHO
+ T",org.drools.event.knowlegebase.impl;uses:="org.drools";version="5.1
+ .0.SNAPSHOT",org.drools.ruleflow.core.factory;uses:="org.drools.rulef
+ low.core,org.drools.workflow.core.node,org.drools.workflow.core,org.d
+ rools.workflow.core.impl,org.drools.process.core.context.variable,org
+ .drools.process.core.context.exception,org.drools.process.core.dataty
+ pe,org.drools.process.core,org.drools.process.core.event,org.drools.p
+ rocess.core.timer,org.drools.process.core.impl";version="5.1.0.SNAPSH
+ OT",org.drools.process.core.context.swimlane;uses:="org.drools.proces
+ s.core.context,org.drools.process.core";version="5.1.0.SNAPSHOT",org.
+ drools.server;uses:="org.drools";version="5.1.0.SNAPSHOT",org.drools.
+ workflow.core.node;uses:="org.drools.workflow.core,org.drools.workflo
+ w.core.impl,org.drools.process.core.context,org.drools.process.core.i
+ mpl,org.drools.process.core,org.drools.process.core.event,org.drools.
+ process.core.context.variable,org.drools.process.core.datatype,org.dr
+ ools.process.core.datatype.impl.type,org.drools.process.core.timer";v
+ ersion="5.1.0.SNAPSHOT",org.drools.core.util.debug;uses:="org.drools.
+ common,org.drools.core.util,org.drools.rule,org.drools.impl,org.drool
+ s,org.mvel2.integration.impl,org.mvel2.templates,org.mvel2.integratio
+ n,org.mvel2.optimizers,org.mvel2.compiler";version="5.1.0.SNAPSHOT",o
+ rg.drools.process.instance;uses:="org.drools.process.core.context.var
+ iable,org.drools.common,org.drools.process.instance.context.variable,
+ org.drools,org.drools.process.core,org.drools.ruleflow.core,org.drool
+ s.ruleflow.instance";version="5.1.0.SNAPSHOT",org.drools.command.buil
+ der;uses:="org.drools.command,org.drools.command.impl,org.drools.runt
+ ime.impl";version="5.1.0.SNAPSHOT",org.drools.process.core.timer;vers
+ ion="5.1.0.SNAPSHOT",org.drools.io.impl;uses:="org.drools.io.internal
+ ,org.drools,org.drools.core.util,org.drools.util.codec";version="5.1.
+ 0.SNAPSHOT",org.drools.base.mvel;uses:="org.mvel2.integration,org.dro
+ ols,org.drools.common,org.mvel2.integration.impl,org.mvel2,org.drools
+ .rule,org.drools.spi,org.mvel2.compiler,org.drools.type,org.drools.co
+ re.util,org.drools.base,org.mvel2.debug";version="5.1.0.SNAPSHOT",org
+ .drools.event;uses:="org.drools.rule,org.drools.spi,org.drools,org.dr
+ ools.common,org.drools.process.instance";version="5.1.0.SNAPSHOT",org
+ .drools.runtime.impl;uses:="org.drools.xml.jaxb.util,javax.xml.bind.a
+ nnotation,javax.xml.bind.annotation.adapters";version="5.1.0.SNAPSHOT
+ ",org.drools.base.accumulators;uses:="org.drools.common,org.drools.ru
+ le,org.drools,org.drools.spi,org.mvel2.integration,org.drools.base.mv
+ el,org.mvel2";version="5.1.0.SNAPSHOT",org.drools.runtime.rule.impl;u
+ ses:="org.drools.common,org.drools.spi,org.drools.xml.jaxb.util,javax
+ .xml.bind.annotation,org.drools.rule,org.drools,javax.xml.bind.annota
+ tion.adapters,org.drools.base";version="5.1.0.SNAPSHOT",org.drools.fa
+ cttemplates;uses:="org.drools.rule,org.drools.common,org.drools.base,
+ org.drools,org.drools.spi,org.drools.core.util";version="5.1.0.SNAPSH
+ OT",org.drools.process.core.datatype;version="5.1.0.SNAPSHOT",org.dro
+ ols.core.util;uses:="org.drools.common,org.drools.rule,org.drools.spi
+ ,org.drools,org.drools.type";version="5.1.0.SNAPSHOT",org.drools.fact
+ model;uses:="org.mvel2.asm,org.drools.base,com.thoughtworks.xstream.i
+ o,com.thoughtworks.xstream.io.xml,com.thoughtworks.xstream";version="
+ 5.1.0.SNAPSHOT",org.drools.ruleflow.instance;uses:="org.drools.rulefl
+ ow.core,org.drools.workflow.instance.impl,org.drools.workflow.core.no
+ de,org.drools.workflow.instance,org.drools.process.instance";version=
+ "5.1.0.SNAPSHOT",org.drools.marshalling.impl;uses:="org.drools.proces
+ s.instance.context.swimlane,org.drools.workflow.instance.impl,org.dro
+ ols.workflow.instance.node,org.drools.common,org.drools.process.insta
+ nce.context.exclusive,org.drools.process.instance,org.drools.process.
+ instance.context.variable,org.drools.workflow.instance,org.drools.pro
+ cess.core,org.drools.core.util,org.drools.impl,org.drools,org.drools.
+ spi,org.drools.concurrent,org.drools.process.instance.impl,org.drools
+ .process.instance.timer,org.drools.base,org.drools.rule,org.drools.pr
+ ocess.instance.event,org.drools.ruleflow.instance";version="5.1.0.SNA
+ PSHOT",org.drools.process.instance.impl.demo;uses:="org.drools.proces
+ s.instance,javax.swing,javax.swing.event";version="5.1.0.SNAPSHOT",or
+ g.drools.process.core.context;uses:="org.drools.process.core";version
+ ="5.1.0.SNAPSHOT",org.drools.agent.impl;uses:="org.drools,org.drools.
+ spi,org.drools.rule,org.drools.agent,org.drools.core.util,org.drools.
+ definitions.impl,org.drools.io.impl,org.drools.impl,org.drools.common
+ ,org.drools.io.internal,org.drools.process.core,org.drools.xml";versi
+ on="5.1.0.SNAPSHOT",org.drools.process.core.context.exclusive;uses:="
+ org.drools.process.core.context,org.drools.process.core";version="5.1
+ .0.SNAPSHOT",org.drools.runtime.pipeline;version="5.1.0.SNAPSHOT",org
+ .drools.runtime.help.impl;uses:="org.drools.command.runtime.process,c
+ om.thoughtworks.xstream.io,com.thoughtworks.xstream.converters,com.th
+ oughtworks.xstream.mapper,org.drools.command,com.thoughtworks.xstream
+ .converters.collections,org.drools.common,org.drools.runtime.impl,org
+ .drools.command.runtime.rule,org.drools.command.runtime,org.drools.ru
+ ntime.rule.impl,org.drools.base,org.drools.rule,org.drools.spi,com.th
+ oughtworks.xstream";version="5.1.0.SNAPSHOT",org.drools.io.internal;v
+ ersion="5.1.0.SNAPSHOT",org.drools.concurrent;uses:="org.drools,org.d
+ rools.spi";version="5.1.0.SNAPSHOT"
+Private-Package: .;version="5.1.0.SNAPSHOT",org.drools.reteoo.compiled
+ ;version="5.1.0.SNAPSHOT",org.drools.reteoo.builder;version="5.1.0.SN
+ APSHOT",org.drools.reteoo;version="5.1.0.SNAPSHOT"
+Tool: Bnd-0.0.357
+Bundle-Name: Drools :: Core
+Created-By: 1.6.0_18 (Sun Microsystems Inc.)
+Require-Bundle: org.drools.api;visibility:=reexport;bundle-version="5.
+ 1.0.SNAPSHOT"
+Bundle-Vendor: JBoss Inc.
+DynamicImport-Package: *
+Bundle-Version: 5.1.0.SNAPSHOT
+Bnd-LastModified: 1274306691563
 Bundle-Activator: org.drools.osgi.core.Activator
-Created-By: 1.5.0_21 (Sun Microsystems Inc.)
+Bundle-ManifestVersion: 2
+Bundle-Description: A rule production system
 Bundle-License: http://www.apache.org/licenses/LICENSE-2.0.txt
 Import-Package: com.thoughtworks.xstream,com.thoughtworks.xstream.conv
  erters,com.thoughtworks.xstream.converters.collections,com.thoughtwor
  ks.xstream.io,com.thoughtworks.xstream.io.xml,com.thoughtworks.xstrea
  m.mapper,javax.management,javax.management.openmbean,javax.swing,java
- x.swing.border,javax.swing.event,javax.xml.bind.annotation,javax.xml.
- bind.annotation.adapters,javax.xml.parsers,org.mvel2;version="2.0",or
- g.mvel2.asm;version="2.0",org.mvel2.asm.util;version="2.0",org.mvel2.
- ast;version="2.0",org.mvel2.compiler;version="2.0",org.mvel2.debug;ve
- rsion="2.0",org.mvel2.integration;version="2.0",org.mvel2.integration
- .impl;version="2.0",org.mvel2.optimizers;version="2.0",org.mvel2.temp
- lates;version="2.0",org.mvel2.util;version="2.0",org.osgi.framework;v
- ersion="1.5",org.w3c.dom,org.xml.sax,org.xml.sax.helpers,sun.misc
-Bnd-LastModified: 1267407378178
-Export-Package: org.drools.process.instance.context.swimlane;uses:="or
- g.drools.process.core.context.swimlane,org.drools.process.core,org.dr
- ools.process.instance.context";version="5.1.0.SNAPSHOT",org.drools.pr
- ocess.core.timer;version="5.1.0.SNAPSHOT",org.drools.ruleflow.core.va
- lidation;uses:="org.mvel2.compiler,org.drools.process.core.timer,org.
- drools.process.core.validation,org.drools.process.core.datatype,org.d
- rools.workflow.core.node,org.drools.process.core.context.variable,org
- .drools.workflow.core.impl,org.mvel2,org.drools.time,org.drools,org.d
- rools.process.core.validation.impl,org.drools.ruleflow.core,org.drool
- s.process.core,org.drools.workflow.core";version="5.1.0.SNAPSHOT",org
- .drools.ruleflow.instance;uses:="org.drools.workflow.instance.impl,or
- g.drools.workflow.instance,org.drools.ruleflow.core,org.drools.workfl
- ow.core.node,org.drools.process.instance";version="5.1.0.SNAPSHOT",or
- g.drools.workflow.core.node;uses:="org.drools.workflow.core.impl,org.
- drools.workflow.core,org.drools.process.core.context,org.drools.proce
- ss.core,org.drools.process.core.impl,org.drools.process.core.event,or
- g.drools.process.core.datatype,org.drools.process.core.context.variab
- le,org.drools.process.core.datatype.impl.type,org.drools.process.core
- .timer";version="5.1.0.SNAPSHOT",org.drools.core.util.asm;uses:="org.
- mvel2.asm,org.drools,org.mvel2.asm.util";version="5.1.0.SNAPSHOT",org
- .drools.command.runtime.process;uses:="org.drools.command,org.drools.
- command.impl,javax.xml.bind.annotation,org.drools.process.instance,or
- g.drools.xml.jaxb.util,javax.xml.bind.annotation.adapters";version="5
- .1.0.SNAPSHOT",org.drools.process.instance.event;uses:="org.drools.ma
- rshalling.impl,org.drools.process.instance,org.drools.common,org.droo
- ls";version="5.1.0.SNAPSHOT",org.drools.osgi.core;uses:="org.drools,o
- rg.drools.impl,org.osgi.framework,org.drools.io.impl";version="5.1.0.
- SNAPSHOT",org.drools.ruleflow.core.factory;uses:="org.drools.workflow
- .core.impl,org.drools.ruleflow.core,org.drools.workflow.core.node,org
- .drools.workflow.core,org.drools.process.core,org.drools.process.core
- .datatype,org.drools.process.core.context.exception,org.drools.proces
- s.core.context.variable,org.drools.process.core.event,org.drools.proc
- ess.core.timer,org.drools.process.core.impl";version="5.1.0.SNAPSHOT"
- ,org.drools.marshalling.impl;uses:="org.drools.workflow.instance.impl
- ,org.drools.process.instance.context.swimlane,org.drools.process.inst
- ance,org.drools.workflow.instance.node,org.drools.workflow.instance,o
- rg.drools.process.core,org.drools.process.instance.context.variable,o
- rg.drools.common,org.drools.core.util,org.drools.impl,org.drools.conc
- urrent,org.drools,org.drools.spi,org.drools.process.instance.timer,or
- g.drools.base,org.drools.rule,org.drools.process.instance.impl,org.dr
- ools.process.instance.event,org.drools.ruleflow.instance";version="5.
- 1.0.SNAPSHOT",org.drools.time;uses:="org.drools.rule,org.drools,org.d
- rools.time.impl";version="5.1.0.SNAPSHOT",org.drools.workflow.core.im
- pl;uses:="org.drools.workflow.core,org.drools.process.core,org.drools
- .workflow.core.node,org.drools.process.core.impl";version="5.1.0.SNAP
- SHOT",org.drools.io.internal;version="5.1.0.SNAPSHOT",org.drools.proc
- ess.instance.impl.demo;uses:="org.drools.process.instance,javax.swing
- .event,javax.swing";version="5.1.0.SNAPSHOT",org.drools.rule;uses:="o
- rg.drools.spi,org.drools.common,org.drools,org.drools.core.util,org.d
- rools.base,org.mvel2.ast,org.mvel2.integration,org.mvel2.integration.
- impl,org.drools.base.mvel,org.drools.facttemplates,org.drools.factmod
- el,org.drools.time.impl,org.drools.marshalling.impl,org.drools.time";
- version="5.1.0.SNAPSHOT",org.drools.process.core.event;version="5.1.0
- .SNAPSHOT",org.drools.event.knowlegebase.impl;uses:="org.drools";vers
- ion="5.1.0.SNAPSHOT",org.drools.conflict;uses:="org.drools.spi,org.dr
- ools.rule,org.drools.common";version="5.1.0.SNAPSHOT",org.drools.proc
- ess.core.context.exception;uses:="org.drools.workflow.core,org.drools
- .process.core.context,org.drools.process.core";version="5.1.0.SNAPSHO
- T",org.drools.process.instance.context.variable;uses:="org.drools.eve
- nt,org.drools,org.drools.process.core,org.drools.process.instance,org
- .drools.process.core.context.variable,org.drools.process.instance.con
- text,org.drools.common";version="5.1.0.SNAPSHOT",org.drools.audit;use
- s:="org.drools.event,org.drools,org.drools.audit.event,com.thoughtwor
- ks.xstream,org.drools.impl,org.drools.workflow.core.node,org.drools.c
- ommand,org.drools.workflow.instance.node,org.drools.workflow.instance
- ,org.drools.rule,org.drools.spi,org.drools.command.impl,org.drools.co
- mmon";version="5.1.0.SNAPSHOT",org.drools.base.extractors;uses:="org.
- drools.base,org.drools.spi,org.drools.core.util,org.drools.common,org
- .drools,org.mvel2,org.mvel2.compiler";version="5.1.0.SNAPSHOT",org.dr
- ools.process.core.context;uses:="org.drools.process.core";version="5.
- 1.0.SNAPSHOT",org.drools.workflow.instance.impl.factory;uses:="org.dr
- ools.workflow.instance.impl,org.drools.workflow.instance";version="5.
- 1.0.SNAPSHOT",org.drools.core.util.debug;uses:="org.drools.common,org
- .drools.core.util,org.drools.rule,org.drools,org.drools.impl,org.mvel
- 2.integration,org.mvel2.compiler,org.mvel2.optimizers,org.mvel2.integ
- ration.impl,org.mvel2.templates";version="5.1.0.SNAPSHOT",org.drools.
- process.instance;uses:="org.drools,org.drools.process.core,org.drools
- .process.core.context.variable,org.drools.process.instance.context.va
- riable,org.drools.common,org.drools.ruleflow.instance,org.drools.rule
- flow.core";version="5.1.0.SNAPSHOT",org.drools.process.core.context.v
- ariable;uses:="org.drools.process.core.datatype,org.drools.process.co
- re,org.drools.process.core.datatype.impl.type,org.drools.process.core
- .context";version="5.1.0.SNAPSHOT",org.drools.event.rule.impl;uses:="
- org.drools.event,org.drools,org.drools.spi,org.drools.common,org.droo
- ls.impl";version="5.1.0.SNAPSHOT",org.drools.command.builder;uses:="o
- rg.drools.command,org.drools.command.impl,org.drools.runtime.impl";ve
- rsion="5.1.0.SNAPSHOT",org.drools.runtime.pipeline;version="5.1.0.SNA
- PSHOT",org.drools.base.accumulators;uses:="org.drools,org.drools.rule
- ,org.drools.spi,org.drools.common,org.mvel2,org.mvel2.integration,org
- .drools.base.mvel";version="5.1.0.SNAPSHOT",org.drools.event;uses:="o
- rg.drools.rule,org.drools.spi,org.drools,org.drools.common,org.drools
- .process.instance";version="5.1.0.SNAPSHOT",org.drools.definitions.ru
- le.impl;uses:="org.drools.rule";version="5.1.0.SNAPSHOT",org.drools.x
- ml;uses:="org.xml.sax,org.drools.xml.changeset,javax.xml.parsers,org.
- xml.sax.helpers,org.w3c.dom,org.drools";version="5.1.0.SNAPSHOT",org.
- drools.facttemplates;uses:="org.drools.rule,org.drools.base,org.drool
- s,org.drools.spi,org.drools.core.util,org.drools.common";version="5.1
- .0.SNAPSHOT",org.drools.base.field;uses:="org.drools,org.drools.spi,o
- rg.drools.core.util,org.drools.common";version="5.1.0.SNAPSHOT",org.d
- rools.runtime.rule.impl;uses:="org.drools.spi,org.drools.common,org.d
- rools,org.drools.rule,org.drools.xml.jaxb.util,javax.xml.bind.annotat
- ion.adapters,javax.xml.bind.annotation";version="5.1.0.SNAPSHOT",org.
- drools.process.core.context.swimlane;uses:="org.drools.process.core.c
- ontext,org.drools.process.core";version="5.1.0.SNAPSHOT",org.drools.c
- oncurrent;uses:="org.drools,org.drools.spi";version="5.1.0.SNAPSHOT",
- org.drools.ruleflow.core;uses:="org.drools.workflow.core.impl,org.dro
- ols.workflow.core,org.drools.ruleflow.core.factory,org.drools.workflo
- w.core.node,org.drools.process.core.context.swimlane,org.drools.proce
- ss.core,org.drools.process.core.context.exception,org.drools.process.
- core.context.variable,org.drools.ruleflow.core.validation,org.drools.
- process.core.validation,org.drools.process.core.datatype";version="5.
- 1.0.SNAPSHOT",org.drools.type;version="5.1.0.SNAPSHOT",org.drools.cor
- e.util;uses:="org.drools.rule,org.drools.spi,org.drools.common,org.dr
- ools,org.drools.type";version="5.1.0.SNAPSHOT",org.drools.agent;uses:
- ="org.drools,org.drools.rule,org.drools.definitions.impl,org.drools.c
- ore.util,sun.misc,org.drools.agent.impl,org.drools.common";version="5
- .1.0.SNAPSHOT",org.drools.time.impl;uses:="org.drools.time,org.drools
- ,org.drools.common";version="5.1.0.SNAPSHOT",org.drools.event.process
- .impl;uses:="org.drools.event,org.drools,org.drools.common";version="
- 5.1.0.SNAPSHOT",org.drools.common;uses:="org.drools.spi,org.drools.ru
- le,org.drools.impl,org.drools.event,org.drools.management,org.drools.
- base,org.drools,org.drools.process.core,org.drools.core.util,org.droo
- ls.process.instance.event,org.drools.process.core.event,org.drools.pr
- ocess.instance,org.drools.workflow.core.node,org.drools.time,org.droo
- ls.runtime.impl,org.drools.process.instance.timer,org.drools.concurre
- nt,org.drools.ruleflow.core,org.drools.type,org.drools.base.evaluator
- s,javax.xml.bind.annotation,org.drools.facttemplates,org.drools.marsh
- alling.impl,org.drools.time.impl";version="5.1.0.SNAPSHOT",org.drools
- .workflow.instance.impl;uses:="org.drools.workflow.instance.node,org.
- drools.workflow.core,org.drools.process.instance.context.exception,or
- g.drools.process.instance,org.drools.workflow.core.impl,org.drools.ba
- se,org.drools.workflow.instance,org.drools,org.drools.spi,org.drools.
- common,org.drools.workflow.instance.impl.factory,org.drools.workflow.
- core.node,org.drools.event,org.drools.process.core,org.mvel2.integrat
- ion,org.mvel2.integration.impl,org.drools.process.instance.context.va
- riable,org.drools.process.instance.event,org.drools.process.instance.
- impl";version="5.1.0.SNAPSHOT",org.drools.base.evaluators;uses:="org.
- drools.time,org.drools.base,org.drools,org.drools.rule,org.drools.spi
- ,org.drools.common,org.drools.core.util,org.drools.type,org.mvel2.uti
- l";version="5.1.0.SNAPSHOT",org.drools.impl;uses:="org.drools,org.dro
- ols.event,org.drools.definitions.rule.impl,org.drools.rule,org.drools
- .definitions.impl,org.drools.event.knowlegebase.impl,org.drools.comma
- nd,org.drools.command.impl,org.drools.agent,org.drools.common,org.dro
- ols.spi,org.drools.event.rule.impl,org.drools.event.process.impl,org.
- drools.runtime.impl,org.drools.process.instance,org.drools.process.in
- stance.event,org.drools.time,org.drools.runtime.rule.impl,org.drools.
- base,org.drools.command.runtime.rule,org.drools.agent.impl,org.drools
- .core.util";version="5.1.0.SNAPSHOT",org.drools.definitions.impl;uses
- :="org.drools.definitions.rule.impl,org.drools.rule";version="5.1.0.S
- NAPSHOT",org.drools.audit.event;version="5.1.0.SNAPSHOT",org.drools.p
- rocess.core.datatype;version="5.1.0.SNAPSHOT",org.drools.process.inst
- ance.context;uses:="org.drools.process.core,org.drools.process.instan
- ce";version="5.1.0.SNAPSHOT",org.drools.command;uses:="org.drools.com
- mand.impl,org.drools.runtime.impl,org.drools.time,org.drools";version
- ="5.1.0.SNAPSHOT",org.drools.management;uses:="javax.management,org.d
- rools.common,org.drools,org.drools.base,org.drools.spi,javax.manageme
- nt.openmbean,org.drools.event,org.drools.rule";version="5.1.0.SNAPSHO
- T",org.drools.base;uses:="org.drools.event,org.drools.concurrent,org.
- drools,org.drools.spi,org.drools.core.util.asm,org.drools.core.util,o
- rg.drools.common,org.drools.time,org.drools.base.evaluators,org.drool
- s.base.extractors,org.mvel2.asm,org.drools.rule,org.drools.impl,org.d
- rools.base.field,org.drools.type,org.mvel2.ast,org.mvel2.integration,
- org.drools.base.mvel,org.drools.facttemplates";version="5.1.0.SNAPSHO
- T",org.drools;uses:="org.drools.spi,org.drools.time,org.drools.time.i
- mpl,org.drools.rule,org.drools.common,org.drools.workflow.instance.im
- pl,org.drools.process.core.datatype,org.drools.process.instance,org.m
- vel2,org.drools.runtime.rule.impl,org.drools.concurrent,org.drools.pr
- ocess.core,org.drools.conflict,org.drools.process.core.impl,org.drool
- s.core.util,org.drools.process.instance.impl,org.drools.event,org.dro
- ols.process.instance.event,org.drools.command,org.drools.process.inst
- ance.timer";version="5.1.0.SNAPSHOT",org.drools.command.assertion;use
- s:="org.drools.command,org.mvel2,org.drools.command.impl,org.drools.c
- ore.util";version="5.1.0.SNAPSHOT",org.drools.agent.impl;uses:="org.d
- rools,org.drools.spi,org.drools.rule,org.drools.definitions.impl,org.
- drools.core.util,org.drools.agent,org.drools.impl,org.drools.xml,org.
- drools.io.internal,org.drools.process.core,org.drools.io.impl,org.dro
- ols.common";version="5.1.0.SNAPSHOT",org.drools.spi;uses:="org.drools
- .base,org.drools,org.drools.rule,org.drools.common,org.drools.core.ut
- il,org.drools.time,org.drools.concurrent,org.drools.facttemplates,org
- .drools.workflow.instance,org.drools.impl,org.drools.process.instance
- ,org.drools.process.core.context.variable,org.drools.process.instance
- .context.variable,org.drools.event";version="5.1.0.SNAPSHOT",org.droo
- ls.xml.jaxb.util;uses:="javax.xml.bind.annotation.adapters,javax.xml.
- bind.annotation";version="5.1.0.SNAPSHOT",org.drools.process.core.imp
- l;uses:="org.drools.process.core,org.drools.process.core.datatype,org
- .drools.process.core.context";version="5.1.0.SNAPSHOT",org.drools.pro
- cess.instance.impl.humantask;uses:="javax.swing.event,javax.swing,jav
- ax.swing.border";version="5.1.0.SNAPSHOT",org.drools.workflow.core;us
- es:="org.drools.spi,org.drools.process.core";version="5.1.0.SNAPSHOT"
- ,org.drools.visualize;version="5.1.0.SNAPSHOT",org.drools.runtime.imp
- l;uses:="org.drools.command,org.drools.command.impl,javax.xml.bind.an
- notation,org.drools.xml.jaxb.util,javax.xml.bind.annotation.adapters"
- ;version="5.1.0.SNAPSHOT",org.drools.builder.conf.impl;version="5.1.0
- .SNAPSHOT",org.drools.workflow.instance.context;uses:="org.drools.wor
- kflow.instance,org.drools.process.instance,org.drools.process.core,or
- g.drools.process.instance.impl,org.drools.process.instance.context";v
- ersion="5.1.0.SNAPSHOT",org.drools.process.core.validation;version="5
- .1.0.SNAPSHOT",org.drools.process.instance.context.exception;uses:="o
- rg.drools.base,org.drools.workflow.instance,org.drools,org.drools.spi
- ,org.drools.process.instance,org.drools.process.core.context.exceptio
- n,org.drools.workflow.core,org.drools.common,org.drools.process.core,
- org.drools.process.instance.context";version="5.1.0.SNAPSHOT",org.dro
- ols.xml.changeset;uses:="org.drools.xml,org.xml.sax,org.drools,org.w3
- c.dom,org.drools.io.impl,org.drools.io.internal,org.drools.builder.co
- nf.impl,org.drools.core.util";version="5.1.0.SNAPSHOT",org.drools.pro
- cess.instance.timer;uses:="org.drools.time,org.drools,org.drools.proc
- ess.instance.event,org.drools.process.instance,org.drools.time.impl";
- version="5.1.0.SNAPSHOT",org.drools.base.dataproviders;uses:="org.mve
- l2,org.mvel2.integration,org.drools,org.drools.rule,org.drools.spi,or
- g.drools.base.mvel,org.drools.core.util";version="5.1.0.SNAPSHOT",org
- .drools.process.instance.impl.factory;uses:="org.drools.process.core,
- org.drools.process.instance,org.drools.process.instance.impl,org.droo
- ls.process.instance.context";version="5.1.0.SNAPSHOT",org.drools.work
- flow.instance;uses:="org.drools.process.instance,org.drools.workflow.
- instance.impl,org.drools.impl,org.drools.workflow.core.impl,org.drool
- s,org.drools.process.core,org.drools.common";version="5.1.0.SNAPSHOT"
- ,org.drools.workflow.instance.node;uses:="org.drools.workflow.instanc
- e.impl,org.drools.workflow.core.node,org.drools.process.instance,org.
- drools.base,org.drools.workflow.instance,org.drools,org.drools.spi,or
- g.drools.workflow.core,org.drools.common,org.drools.process.core,org.
- drools.process.instance.impl,org.drools.event,org.drools.process.core
- .event,org.drools.process.instance.context.variable,org.drools.proces
- s.instance.context.exception,org.mvel2,org.mvel2.integration,org.droo
- ls.process.instance.context.swimlane,org.drools.rule,org.drools.proce
- ss.core.timer,org.drools.process.instance.timer,org.drools.time";vers
- ion="5.1.0.SNAPSHOT",org.drools.process.core.validation.impl;uses:="o
- rg.drools.process.core.validation";version="5.1.0.SNAPSHOT",org.drool
- s.factmodel;uses:="org.mvel2.asm,org.drools.base,com.thoughtworks.xst
- ream.io,com.thoughtworks.xstream.io.xml,com.thoughtworks.xstream";ver
- sion="5.1.0.SNAPSHOT",org.drools.base.mvel;uses:="org.mvel2.integrati
- on,org.mvel2.integration.impl,org.mvel2,org.drools,org.drools.rule,or
- g.drools.spi,org.drools.common,org.mvel2.compiler,org.drools.type,org
- .drools.core.util,org.drools.base,org.mvel2.debug";version="5.1.0.SNA
- PSHOT",org.drools.process.core;uses:="org.drools.process.core.datatyp
- e";version="5.1.0.SNAPSHOT",org.drools.command.impl;uses:="org.drools
- .command,org.drools.command.runtime.process,org.drools.command.runtim
- e.rule,org.drools.impl,org.drools.time,org.drools,org.drools.rule,org
- .drools.command.runtime,org.drools.runtime.impl";version="5.1.0.SNAPS
- HOT",org.drools.io.impl;uses:="org.drools.io.internal,org.drools,org.
- drools.core.util";version="5.1.0.SNAPSHOT",org.drools.runtime.help.im
- pl;uses:="org.drools.command,com.thoughtworks.xstream.io,com.thoughtw
- orks.xstream.mapper,com.thoughtworks.xstream.converters.collections,o
- rg.drools.command.runtime.process,com.thoughtworks.xstream.converters
- ,org.drools.runtime.impl,org.drools.common,org.drools.command.runtime
- .rule,org.drools.command.runtime,org.drools.base,org.drools.runtime.r
- ule.impl,org.drools.rule,org.drools.spi,com.thoughtworks.xstream";ver
- sion="5.1.0.SNAPSHOT",org.drools.process.core.datatype.impl;uses:="or
- g.drools.process.core.datatype";version="5.1.0.SNAPSHOT",org.drools.p
- rocess.core.datatype.impl.type;uses:="org.drools.process.core.datatyp
- e,org.drools.process.core,com.thoughtworks.xstream";version="5.1.0.SN
- APSHOT",org.drools.process.instance.impl;uses:="org.drools.process.co
- re,org.drools.process.instance,org.drools.process.instance.context.sw
- imlane,org.drools.process.core.context.swimlane,org.drools.process.in
- stance.context.exception,org.drools.process.instance.impl.factory,org
- .drools.process.core.context.exception,org.drools.process.core.contex
- t.variable,org.drools.process.instance.context.variable,org.drools,or
- g.drools.common";version="5.1.0.SNAPSHOT",org.drools.runtime.pipeline
- .impl;uses:="org.drools.runtime.pipeline,org.drools.command,org.drool
- s.command.runtime.rule,org.mvel2,org.mvel2.compiler,org.drools.common
- ,org.drools,org.drools.impl,org.drools.rule";version="5.1.0.SNAPSHOT"
- ,org.drools.command.runtime.rule;uses:="org.drools.command,org.drools
- .command.impl,org.drools,org.drools.impl,org.drools.spi,org.drools.ru
- ntime.impl,javax.xml.bind.annotation,org.drools.common,org.mvel2";ver
- sion="5.1.0.SNAPSHOT",org.drools.command.runtime;uses:="org.drools.co
- mmand,org.drools.command.impl,org.drools.command.runtime.process,java
- x.xml.bind.annotation,org.drools.command.runtime.rule,org.drools.runt
- ime.impl,org.drools.impl,org.drools";version="5.1.0.SNAPSHOT"
-Bundle-Version: 5.1.0.SNAPSHOT
-Bundle-Name: Drools :: Core
-Bundle-Description: A rule production system
-Private-Package: org.drools.reteoo.builder;version="5.1.0.SNAPSHOT",or
- g.drools.reteoo.compiled;version="5.1.0.SNAPSHOT",org.drools.reteoo;v
- ersion="5.1.0.SNAPSHOT",.;version="5.1.0.SNAPSHOT"
+ x.swing.border,javax.swing.event,javax.xml.bind,javax.xml.bind.annota
+ tion,javax.xml.bind.annotation.adapters,javax.xml.parsers,org.mvel2;v
+ ersion="2.0",org.mvel2.asm;version="2.0",org.mvel2.asm.util;version="
+ 2.0",org.mvel2.ast;version="2.0",org.mvel2.compiler;version="2.0",org
+ .mvel2.debug;version="2.0",org.mvel2.integration;version="2.0",org.mv
+ el2.integration.impl;version="2.0",org.mvel2.optimizers;version="2.0"
+ ,org.mvel2.templates;version="2.0",org.mvel2.util;version="2.0",org.o
+ sgi.framework;version="1.5",org.w3c.dom,org.xml.sax,org.xml.sax.helpe
+ rs
+Bundle-SymbolicName: org.drools.core
 Bundle-DocURL: http://www.jboss.org/
-Bundle-Vendor: JBoss Inc.
-Bundle-ManifestVersion: 2
-Bundle-SymbolicName: org.drools.core
-Tool: Bnd-0.0.357
-Require-Bundle: org.drools.api;visibility:=reexport;bundle-version="5.
- 1.0.SNAPSHOT"
-DynamicImport-Package: *
 

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/QueryResult.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/QueryResult.java	2010-05-19 20:17:40 UTC (rev 32971)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/QueryResult.java	2010-05-19 22:24:17 UTC (rev 32972)
@@ -91,6 +91,10 @@
         return this.factHandles[  declr.getPattern().getOffset() ]; // -1 because we shifted the array left
                                                                        // when removing the query object
     }     
+    
+    public FactHandle getFactHandle(int i) {
+        return this.factHandles[ i + 1 ];
+    }    
 
     /**
      * Return the FactHandles for the Tuple.

Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/AttachedViewChangedEventListenerImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/AttachedViewChangedEventListenerImpl.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/AttachedViewChangedEventListenerImpl.java	2010-05-19 22:24:17 UTC (rev 32972)
@@ -0,0 +1,44 @@
+package org.drools.base;
+
+import org.drools.QueryResults;
+import org.drools.common.InternalFactHandle;
+import org.drools.rule.Declaration;
+import org.drools.rule.EntryPoint;
+import org.drools.runtime.rule.AttachedViewChangedEventListener;
+import org.drools.runtime.rule.impl.OpenQueryViewChangedEventListenerAdapter;
+
+public class AttachedViewChangedEventListenerImpl
+    implements
+    AttachedViewChangedEventListener {
+
+    public void close() {
+        
+//        try {
+//            startOperation();
+//            this.ruleBase.readLock();
+//            this.lock.lock();
+//            DroolsQuery queryObject = new DroolsQuery( query,
+//                                                       arguments,
+//                                                       new ExternalViewEventListenerAdapter(listener) );
+//            InternalFactHandle handle = this.handleFactory.newFactHandle( queryObject,
+//                                                                          this.getObjectTypeConfigurationRegistry().getObjectTypeConf( EntryPoint.DEFAULT,
+//                                                                                                                                       queryObject ),
+//                                                                          this );
+//
+//            insert( handle,
+//                    queryObject,
+//                    null,
+//                    null,
+//                    this.typeConfReg.getObjectTypeConf( this.entryPoint,
+//                                                        queryObject ) );
+//
+//            this.handleFactory.destroyFactHandle( handle );
+//
+//        } finally {
+//            this.lock.unlock();
+//            this.ruleBase.readUnlock();
+//            endOperation();
+//        }
+    }
+
+}

Deleted: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/DefaultQueryResultsCollector.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/DefaultQueryResultsCollector.java	2010-05-19 20:17:40 UTC (rev 32971)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/DefaultQueryResultsCollector.java	2010-05-19 22:24:17 UTC (rev 32972)
@@ -1,69 +0,0 @@
-package org.drools.base;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.drools.common.DisconnectedFactHandle;
-import org.drools.common.InternalFactHandle;
-import org.drools.common.InternalWorkingMemory;
-import org.drools.reteoo.LeftTuple;
-import org.drools.rule.Query;
-import org.drools.rule.Variable;
-import org.drools.spi.PropagationContext;
-
-public class DefaultQueryResultsCollector
-    implements
-    QueryResultCollector {
-
-    private List results;
-
-    public DefaultQueryResultsCollector() {
-        this.results = new ArrayList( 250 );
-    }
-
-    public List getResults() {
-        return this.results;
-    }
-
-    public void add(final LeftTuple tuple,
-                    final PropagationContext context,
-                    final InternalWorkingMemory workingMemory) {
-        InternalFactHandle[] handles = new InternalFactHandle[tuple.getIndex() + 1];
-        LeftTuple entry = tuple;
-
-        // Add all the FactHandles except the root DroolQuery object
-        while ( entry.getIndex() > 0 ) {
-            InternalFactHandle handle = entry.getLastHandle();
-            handles[entry.getIndex()] = new DisconnectedFactHandle( handle.getId(),
-                                                                    handle.getIdentityHashCode(),
-                                                                    handle.getObjectHashCode(),
-                                                                    handle.getRecency(),
-                                                                    handle.getObject() );
-            entry = entry.getParent();
-        }
-
-        // Get the Query object
-        InternalFactHandle handle = entry.getLastHandle();
-        DroolsQuery query = (DroolsQuery) handle.getObject();
-
-        // Copy of it's arguments for unification variables.
-        Object[] args = query.getElements();
-        Object[] newArgs = new Object[args.length];
-        for ( int i = 0, length = args.length; i < length; i++ ) {
-            if ( args[i] instanceof Variable ) {
-                newArgs[i] = ((Variable) args[i]).getValue();
-            } else {
-                newArgs[i] = args[i];
-            }
-        }
-        handles[entry.getIndex()] = new DisconnectedFactHandle( handle.getId(),
-                                                                handle.getIdentityHashCode(),
-                                                                handle.getObjectHashCode(),
-                                                                handle.getRecency(),
-                                                                new ArrayElements( newArgs ) );
-
-        this.results.add( handles );
-
-    }
-
-}
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/DroolsQuery.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/DroolsQuery.java	2010-05-19 20:17:40 UTC (rev 32971)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/DroolsQuery.java	2010-05-19 22:24:17 UTC (rev 32972)
@@ -24,22 +24,26 @@
 
 public final class DroolsQuery extends ArrayElements {
     private final String         name;
-    private QueryResultCollector resultsCollector;
+    private InternalViewChangedEventListener resultsCollector;
     private Query                query;
+    private boolean              open;
 
     public DroolsQuery(final String name,
-                       QueryResultCollector resultsCollector) {
+                       InternalViewChangedEventListener resultsCollector) {
         this( name,
               null,
-              resultsCollector );
+              resultsCollector,
+              false );
     }
 
     public DroolsQuery(final String name,
                        final Object[] params,
-                       QueryResultCollector resultsCollector) {
+                       final InternalViewChangedEventListener resultsCollector,
+                       final boolean open ) {
         super( params );
         this.name = name;
         this.resultsCollector = resultsCollector;
+        this.open = open;
     }
 
     public String getName() {
@@ -55,10 +59,14 @@
         return this.query;
     }
 
-    public QueryResultCollector getQueryResultCollector() {
+    public InternalViewChangedEventListener getQueryResultCollector() {
         return this.resultsCollector;
     }
 
+    public boolean isOpen() {
+        return open;
+    }
+
     @Override
     public int hashCode() {
         final int prime = 31;

Copied: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/InternalViewChangedEventListener.java (from rev 32832, labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/QueryResultCollector.java)
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/InternalViewChangedEventListener.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/InternalViewChangedEventListener.java	2010-05-19 22:24:17 UTC (rev 32972)
@@ -0,0 +1,22 @@
+package org.drools.base;
+
+import org.drools.common.InternalWorkingMemory;
+import org.drools.reteoo.LeftTuple;
+import org.drools.rule.Rule;
+import org.drools.spi.PropagationContext;
+
+public interface InternalViewChangedEventListener {
+    public void rowAdded(Rule rule, 
+                         LeftTuple tuple,
+                         PropagationContext context,
+                         InternalWorkingMemory workingMemory);
+
+    public void rowRemoved(Rule rule, LeftTuple tuple,
+                           PropagationContext context,
+                           InternalWorkingMemory workingMemory);
+
+    public void rowUpdated(Rule rule,
+                           LeftTuple leftTuple,
+                           PropagationContext context,
+                           InternalWorkingMemory workingMemory);
+}

Deleted: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/QueryResultCollector.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/QueryResultCollector.java	2010-05-19 20:17:40 UTC (rev 32971)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/QueryResultCollector.java	2010-05-19 22:24:17 UTC (rev 32972)
@@ -1,11 +0,0 @@
-package org.drools.base;
-
-import org.drools.common.InternalWorkingMemory;
-import org.drools.reteoo.LeftTuple;
-import org.drools.spi.PropagationContext;
-
-public interface QueryResultCollector {
-    public void add(final LeftTuple tuple,
-                    final PropagationContext context,
-                    final InternalWorkingMemory workingMemory);
-}

Copied: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/StandardQueryViewChangedEventListener.java (from rev 32943, labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/DefaultQueryResultsCollector.java)
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/StandardQueryViewChangedEventListener.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/StandardQueryViewChangedEventListener.java	2010-05-19 22:24:17 UTC (rev 32972)
@@ -0,0 +1,83 @@
+package org.drools.base;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.drools.common.DisconnectedFactHandle;
+import org.drools.common.InternalFactHandle;
+import org.drools.common.InternalWorkingMemory;
+import org.drools.reteoo.LeftTuple;
+import org.drools.rule.Query;
+import org.drools.rule.Rule;
+import org.drools.rule.Variable;
+import org.drools.spi.PropagationContext;
+
+public class StandardQueryViewChangedEventListener
+    implements
+    InternalViewChangedEventListener {
+
+    private List results;
+
+    public StandardQueryViewChangedEventListener() {
+        this.results = new ArrayList( 250 );
+    }
+
+    public List getResults() {
+        return this.results;
+    }
+
+    public void rowAdded(final Rule rule,
+                         final LeftTuple tuple,
+                    final PropagationContext context,
+                    final InternalWorkingMemory workingMemory) {
+        InternalFactHandle[] handles = new InternalFactHandle[tuple.getIndex() + 1];
+        LeftTuple entry = tuple;
+
+        // Add all the FactHandles except the root DroolQuery object
+        while ( entry.getIndex() > 0 ) {
+            InternalFactHandle handle = entry.getLastHandle();
+            handles[entry.getIndex()] = new DisconnectedFactHandle( handle.getId(),
+                                                                    handle.getIdentityHashCode(),
+                                                                    handle.getObjectHashCode(),
+                                                                    handle.getRecency(),
+                                                                    handle.getObject() );
+            entry = entry.getParent();
+        }
+
+        // Get the Query object
+        InternalFactHandle handle = entry.getLastHandle();
+        DroolsQuery query = (DroolsQuery) handle.getObject();
+
+        // Copy of it's arguments for unification variables.
+        Object[] args = query.getElements();
+        Object[] newArgs = new Object[args.length];
+        for ( int i = 0, length = args.length; i < length; i++ ) {
+            if ( args[i] instanceof Variable ) {
+                newArgs[i] = ((Variable) args[i]).getValue();
+            } else {
+                newArgs[i] = args[i];
+            }
+        }
+        handles[entry.getIndex()] = new DisconnectedFactHandle( handle.getId(),
+                                                                handle.getIdentityHashCode(),
+                                                                handle.getObjectHashCode(),
+                                                                handle.getRecency(),
+                                                                new ArrayElements( newArgs ) );
+
+        this.results.add( handles );
+
+    }
+    
+    public void rowRemoved(final Rule rule,
+                           final LeftTuple tuple,
+            final PropagationContext context,
+            final InternalWorkingMemory workingMemory) {
+    }
+    
+    public void rowUpdated(final Rule rule,
+                           final LeftTuple tuple,
+            final PropagationContext context,
+            final InternalWorkingMemory workingMemory) {    	
+    }
+
+}
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/impl/CommandBasedStatefulKnowledgeSession.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/impl/CommandBasedStatefulKnowledgeSession.java	2010-05-19 20:17:40 UTC (rev 32971)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/impl/CommandBasedStatefulKnowledgeSession.java	2010-05-19 22:24:17 UTC (rev 32972)
@@ -69,8 +69,10 @@
 import org.drools.runtime.rule.AgendaFilter;
 import org.drools.runtime.rule.AgendaGroup;
 import org.drools.runtime.rule.FactHandle;
+import org.drools.runtime.rule.LiveQuery;
 import org.drools.runtime.rule.QueryResults;
 import org.drools.runtime.rule.RuleFlowGroup;
+import org.drools.runtime.rule.ViewChangedEventListener;
 import org.drools.runtime.rule.WorkingMemoryEntryPoint;
 import org.drools.time.SessionClock;
  
@@ -409,4 +411,10 @@
         return 0;
     }
 
+    public LiveQuery openLiveQuery(String query,
+                                               Object[] arguments,
+                                               ViewChangedEventListener listener) {
+        return null;
+    }
+
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java	2010-05-19 20:17:40 UTC (rev 32971)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java	2010-05-19 22:24:17 UTC (rev 32972)
@@ -1109,6 +1109,8 @@
                           ObjectTypeConf typeConf) {
         this.ruleBase.executeQueuedActions();
 
+        executeQueuedActions();
+        
         if ( activation != null ) {
             // release resources so that they can be GC'ed
             activation.getPropagationContext().releaseResources();
@@ -1279,6 +1281,10 @@
             this.ruleBase.readUnlock();
         }
     }
+    
+    public EntryPointNode getEntryPointNode() {
+        return this.entryPointNode;
+    }
 
     public void update(final org.drools.runtime.rule.FactHandle handle,
                        final Object object) throws FactException {

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AgendaItem.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AgendaItem.java	2010-05-19 20:17:40 UTC (rev 32971)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AgendaItem.java	2010-05-19 22:24:17 UTC (rev 32972)
@@ -91,6 +91,8 @@
     private ActivationGroupNode activationGroupNode;
 
     private ActivationNode   activationNode;
+    
+    public boolean fired;
 
     // ------------------------------------------------------------
     // Constructors

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DefaultAgenda.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DefaultAgenda.java	2010-05-19 20:17:40 UTC (rev 32971)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DefaultAgenda.java	2010-05-19 22:24:17 UTC (rev 32972)
@@ -918,6 +918,7 @@
                                                                 this.workingMemory );
                 this.knowledgeHelper.cancelRemainingPreviousLogicalDependencies();
                 this.knowledgeHelper.reset();
+                ((AgendaItem)activation).fired = true;
             } catch ( final Exception e ) {
                 if ( this.legacyConsequenceExceptionHandler != null ) {
                     this.legacyConsequenceExceptionHandler.handleException( activation,

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/TruthMaintenanceSystem.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/TruthMaintenanceSystem.java	2010-05-19 20:17:40 UTC (rev 32971)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/TruthMaintenanceSystem.java	2010-05-19 22:24:17 UTC (rev 32972)
@@ -230,7 +230,7 @@
             
             this.handle = context.handles.get( context.readInt() );
             this.context = context.propagationContexts.get( context.readLong() );
-            this.activation = context.terminalTupleMap.get( context.readInt() ).getActivation();
+            this.activation = (Activation) context.terminalTupleMap.get( context.readInt() ).getObject();
             
             this.set = ( Set ) this.tms.getJustifiedMap().get( handle.getId() ); 
            

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/StatefulKnowledgeSessionImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/StatefulKnowledgeSessionImpl.java	2010-05-19 20:17:40 UTC (rev 32971)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/StatefulKnowledgeSessionImpl.java	2010-05-19 22:24:17 UTC (rev 32972)
@@ -69,7 +69,9 @@
 import org.drools.runtime.rule.Agenda;
 import org.drools.runtime.rule.AgendaFilter;
 import org.drools.runtime.rule.FactHandle;
+import org.drools.runtime.rule.LiveQuery;
 import org.drools.runtime.rule.QueryResults;
+import org.drools.runtime.rule.ViewChangedEventListener;
 import org.drools.runtime.rule.WorkingMemoryEntryPoint;
 import org.drools.runtime.rule.impl.AgendaImpl;
 import org.drools.runtime.rule.impl.NativeQueryResults;
@@ -831,5 +833,11 @@
         return this.session.getFactCount();
     }
 
+    public LiveQuery openLiveQuery(String query,
+                                               Object[] arguments,
+                                               ViewChangedEventListener listener) {
+        return this.session.openLiveQuery( query, arguments, listener );
+    }
+
     
 }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/InputMarshaller.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/InputMarshaller.java	2010-05-19 20:17:40 UTC (rev 32971)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/InputMarshaller.java	2010-05-19 22:24:17 UTC (rev 32972)
@@ -617,7 +617,7 @@
                                                 rule,
                                                 subRule );
 
-        leftTuple.setActivation( activation );
+        leftTuple.setObject( activation );
 
         if ( stream.readBoolean() ) {
             String activationGroupName = stream.readUTF();

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/OutputMarshaller.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/OutputMarshaller.java	2010-05-19 20:17:40 UTC (rev 32971)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/OutputMarshaller.java	2010-05-19 22:24:17 UTC (rev 32972)
@@ -48,6 +48,7 @@
 import org.drools.rule.EntryPoint;
 import org.drools.rule.Rule;
 import org.drools.runtime.process.WorkItem;
+import org.drools.spi.Activation;
 import org.drools.spi.ActivationGroup;
 import org.drools.spi.AgendaGroup;
 import org.drools.spi.PropagationContext;
@@ -561,11 +562,11 @@
         //Map<LeftTuple, Integer> tuples = context.terminalTupleMap;
         if ( entries.length != 0 ) {
             for ( Entry<LeftTuple, Integer> entry : entries ) {
-                if (entry.getKey().getActivation() != null) {
+                if (entry.getKey().getObject() != null) {
 					LeftTuple leftTuple = entry.getKey();
 					stream.writeShort(PersisterEnums.ACTIVATION);
 					writeActivation(context, leftTuple, (AgendaItem) leftTuple
-							.getActivation(), (RuleTerminalNode) leftTuple
+							.getObject(), (RuleTerminalNode) leftTuple
 							.getLeftTupleSink());
 				}
             }
@@ -641,8 +642,8 @@
             Map<Long, PropagationContext> pcMap = new HashMap<Long, PropagationContext>();
             for ( Entry<LeftTuple, Integer> entry : entries ) {
                 LeftTuple leftTuple = entry.getKey();
-                if (leftTuple.getActivation() != null) {
-					PropagationContext pc = leftTuple.getActivation()
+                if (leftTuple.getObject() != null) {
+					PropagationContext pc = ((Activation)leftTuple.getObject())
 							.getPropagationContext();
 					if (!pcMap.containsKey(pc.getPropagationNumber())) {
 						stream.writeShort(PersisterEnums.PROPAGATION_CONTEXT);

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/AccumulateNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/AccumulateNode.java	2010-05-19 20:17:40 UTC (rev 32971)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/AccumulateNode.java	2010-05-19 22:24:17 UTC (rev 32972)
@@ -25,6 +25,7 @@
 
 import org.drools.RuleBaseConfiguration;
 import org.drools.RuntimeDroolsException;
+import org.drools.base.DroolsQuery;
 import org.drools.common.BetaConstraints;
 import org.drools.common.InternalFactHandle;
 import org.drools.common.InternalWorkingMemory;
@@ -128,12 +129,24 @@
 
         AccumulateContext accresult = new AccumulateContext();
 
+        boolean useLeftMemory = true;
         if ( this.tupleMemoryEnabled ) {
             memory.betaMemory.getLeftTupleMemory().add( leftTuple );
             memory.betaMemory.getCreatedHandles().put( leftTuple,
                                                        accresult,
                                                        false );
-        }
+        } else {
+            // this is a hack, to not add closed DroolsQuery objects
+            Object object = ((InternalFactHandle)context.getFactHandle()).getObject();
+            if ( memory.betaMemory.getLeftTupleMemory() != null && !(object instanceof DroolsQuery &&  !((DroolsQuery)object).isOpen() ) ) {                
+                memory.betaMemory.getLeftTupleMemory().add( leftTuple );
+                memory.betaMemory.getCreatedHandles().put( leftTuple,
+                                                           accresult,
+                                                           false );
+            } else {
+                useLeftMemory = false;
+            }
+        }        
 
         accresult.context = this.accumulate.createContext();
 
@@ -158,7 +171,8 @@
                           null,
                           workingMemory,
                           memory,
-                          accresult );
+                          accresult,
+                          useLeftMemory );
             }
         }
 
@@ -169,7 +183,8 @@
                                    context,
                                    workingMemory,
                                    memory,
-                                   accresult );
+                                   accresult,
+                                   useLeftMemory );
 
     }
 
@@ -230,9 +245,10 @@
 
         memory.betaMemory.getRightTupleMemory().add( rightTuple );
 
-        if ( !this.tupleMemoryEnabled ) {
-            // do nothing here, as we know there are no left tuples at this stage in sequential mode.
-            return;
+        if ( memory.betaMemory.getLeftTupleMemory() == null || memory.betaMemory.getLeftTupleMemory().size() == 0  ) {
+            // do nothing here, as we know there are no left tuples at this stage in sequential mode or for a query.
+            // unless it's an "Open Query" and thus that will have left memory, so continue as normal
+            return;            
         }
 
         this.constraints.updateFromFactHandle( memory.betaMemory.getContext(),
@@ -249,13 +265,15 @@
                           null,
                           workingMemory,
                           memory,
-                          accctx );
+                          accctx,
+                          true );
                 evaluateResultConstraints( ActivitySource.RIGHT,
                                            leftTuple,
                                            context,
                                            workingMemory,
                                            memory,
-                                           accctx );
+                                           accctx,
+                                           true );
             }
         }
 
@@ -343,7 +361,8 @@
                                   null,
                                   workingMemory,
                                   memory,
-                                  accctx );
+                                  accctx,
+                                  true );
                     }
                 }
             } else {
@@ -362,7 +381,8 @@
                                       null,
                                       workingMemory,
                                       memory,
-                                      accctx );
+                                      accctx,
+                                      true );
                         } else {
                             // we must re-add this to ensure deterministic iteration
                             LeftTuple temp = childLeftTuple.getLeftParentNext();
@@ -402,7 +422,8 @@
                                    context,
                                    workingMemory,
                                    memory,
-                                   accctx );
+                                   accctx,
+                                   true );
     }
 
     public void modifyRightTuple(RightTuple rightTuple,
@@ -415,7 +436,7 @@
         memory.betaMemory.getRightTupleMemory().remove( rightTuple );
         memory.betaMemory.getRightTupleMemory().add( rightTuple );
         
-        if ( !this.tupleMemoryEnabled ) {
+        if ( memory.betaMemory.getLeftTupleMemory() == null || memory.betaMemory.getLeftTupleMemory().size() == 0 ) {
             // do nothing here, as we know there are no left tuples at this stage in sequential mode.
             return;
         }        
@@ -466,13 +487,15 @@
                                   null,
                                   workingMemory,
                                   memory,
-                                  accctx );
+                                  accctx,
+                                  true );
                         evaluateResultConstraints( ActivitySource.RIGHT,
                                                    leftTuple,
                                                    context,
                                                    workingMemory,
                                                    memory,
-                                                   accctx );
+                                                   accctx,
+                                                   true );
                     }
                 }
             } else {
@@ -501,7 +524,8 @@
                                   childLeftTuple,
                                   workingMemory,
                                   memory,
-                                  accctx );
+                                  accctx,
+                                  true );
                         if( temp != null ) {
                             childLeftTuple = temp;
                         }
@@ -510,7 +534,8 @@
                                                    context,
                                                    workingMemory,
                                                    memory,
-                                                   accctx );
+                                                   accctx,
+                                                   true );
                     } else if ( childLeftTuple != null && childLeftTuple.getLeftParent() == leftTuple ) {
 
                         LeftTuple temp = childLeftTuple.getRightParentNext();
@@ -527,7 +552,8 @@
                                                    context,
                                                    workingMemory,
                                                    memory,
-                                                   accctx );
+                                                   accctx,
+                                                   true );
 
                         childLeftTuple = temp;
                     }
@@ -554,7 +580,8 @@
                                            final PropagationContext context,
                                            final InternalWorkingMemory workingMemory,
                                            final AccumulateMemory memory,
-                                           final AccumulateContext accctx) {
+                                           final AccumulateContext accctx,
+                                           final boolean useLeftMemory ) {
 
         // get the actual result
         final Object result = this.accumulate.getResult( memory.workingMemoryContext,
@@ -611,13 +638,13 @@
                                                              leftTuple,
                                                              context,
                                                              workingMemory,
-                                                             this.tupleMemoryEnabled );
+                                                             useLeftMemory );
                 } else {
                     this.sink.propagateModifyChildLeftTuple( leftTuple.firstChild,
                                                              accctx.result,
                                                              context,
                                                              workingMemory,
-                                                             this.tupleMemoryEnabled );
+                                                             useLeftMemory );
                 }
             } else {
                 // retract
@@ -641,7 +668,7 @@
                                                 null,
                                                 context,
                                                 workingMemory,
-                                                this.tupleMemoryEnabled );
+                                                useLeftMemory );
             accctx.propagated = true;
             // restore the matchings list
             restoreList( leftTuple,
@@ -668,7 +695,7 @@
                                                      null,
                                                      null,
                                                      sink,
-                                                     this.tupleMemoryEnabled ),
+                                                     true ),
                                       context,
                                       workingMemory );
                 restoreList( leftTuple,
@@ -741,7 +768,8 @@
                           final LeftTuple currentRightChild,
                           final InternalWorkingMemory workingMemory,
                           final AccumulateMemory memory,
-                          final AccumulateContext accresult) {
+                          final AccumulateContext accresult,
+                          final boolean useLeftMemory ) {
         LeftTuple tuple = leftTuple;
         InternalFactHandle handle = rightTuple.getFactHandle();
         if ( this.unwrapRightObject ) {
@@ -756,14 +784,14 @@
                                     workingMemory );
 
         // in sequential mode, we don't need to keep record of matched tuples
-        if ( this.tupleMemoryEnabled ) {
+        if ( useLeftMemory ) {
             // linking left and right by creating a new left tuple
             new LeftTuple( leftTuple,
                            rightTuple,
                            currentLeftChild,
                            currentRightChild,
                            this,
-                           this.tupleMemoryEnabled );
+                           true );
         }
     }
 
@@ -880,7 +908,8 @@
                                        context,
                                        workingMemory,
                                        memory,
-                                       accctx );
+                                       accctx,
+                                       true );
             match = tmp;
         }
     }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ExistsNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ExistsNode.java	2010-05-19 20:17:40 UTC (rev 32971)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ExistsNode.java	2010-05-19 22:24:17 UTC (rev 32972)
@@ -16,9 +16,11 @@
 
 package org.drools.reteoo;
 
+import org.drools.base.DroolsQuery;
 import org.drools.common.BetaConstraints;
 import org.drools.common.InternalFactHandle;
 import org.drools.common.InternalWorkingMemory;
+import org.drools.core.util.Iterator;
 import org.drools.reteoo.builder.BuildContext;
 import org.drools.rule.Behavior;
 import org.drools.spi.PropagationContext;
@@ -101,12 +103,21 @@
                                           workingMemory,
                                           leftTuple );
 
+        boolean useLeftMemory = true;
+        if ( !this.tupleMemoryEnabled ) {
+            // This is a hack, to not add closed DroolsQuery objects
+            Object object = ((InternalFactHandle) context.getFactHandle()).getObject();
+            if ( memory.getLeftTupleMemory() == null || object instanceof DroolsQuery && !((DroolsQuery) object).isOpen() ) {
+                useLeftMemory = false;
+            }
+        }
+
         for ( RightTuple rightTuple = memory.getRightTupleMemory().getFirst( leftTuple ); rightTuple != null; rightTuple = (RightTuple) rightTuple.getNext() ) {
             if ( this.constraints.isAllowedCachedLeft( memory.getContext(),
                                                        rightTuple.getFactHandle() ) ) {
 
                 leftTuple.setBlocker( rightTuple );
-                if ( this.tupleMemoryEnabled ) {
+                if ( useLeftMemory ) {
                     rightTuple.addBlocked( leftTuple );
                 }
 
@@ -121,8 +132,8 @@
             this.sink.propagateAssertLeftTuple( leftTuple,
                                                 context,
                                                 workingMemory,
-                                                this.tupleMemoryEnabled );
-        } else if ( this.tupleMemoryEnabled ) {
+                                                useLeftMemory );
+        } else if ( useLeftMemory ) {
             // LeftTuple is not blocked, so add to memory so other RightTuples can match
             memory.getLeftTupleMemory().add( leftTuple );
         }
@@ -158,8 +169,8 @@
 
         memory.getRightTupleMemory().add( rightTuple );
 
-        if ( !this.tupleMemoryEnabled ) {
-            // do nothing here, as we know there are no left tuples at this stage in sequential mode.
+        if ( memory.getLeftTupleMemory() == null || memory.getLeftTupleMemory().size() == 0 ) {
+            // do nothing here, as no left memory
             return;
         }
 
@@ -176,14 +187,12 @@
                 leftTuple.setBlocker( rightTuple );
                 rightTuple.addBlocked( leftTuple );
 
-                if ( this.tupleMemoryEnabled ) {
-                    // this is now blocked so remove it from memory
-                    memory.getLeftTupleMemory().remove( leftTuple );
-                }
+                memory.getLeftTupleMemory().remove( leftTuple );
+
                 this.sink.propagateAssertLeftTuple( leftTuple,
                                                     context,
                                                     workingMemory,
-                                                    this.tupleMemoryEnabled );
+                                                    true );
             }
 
             leftTuple = temp;
@@ -350,13 +359,13 @@
                 this.sink.propagateAssertLeftTuple( leftTuple,
                                                     context,
                                                     workingMemory,
-                                                    this.tupleMemoryEnabled );
+                                                    true );
             } else {
                 // blocked, with previous children, modify
                 this.sink.propagateModifyChildLeftTuple( leftTuple,
                                                          context,
                                                          workingMemory,
-                                                         this.tupleMemoryEnabled );
+                                                         true );
             }
         }
 
@@ -365,17 +374,17 @@
 
     public void modifyRightTuple(RightTuple rightTuple,
                                  PropagationContext context,
-                                 InternalWorkingMemory workingMemory) {        
+                                 InternalWorkingMemory workingMemory) {
         final BetaMemory memory = (BetaMemory) workingMemory.getNodeMemory( this );
-        
-        if ( !this.tupleMemoryEnabled ) {
-            // do nothing here, as we know there are no left tuples at this stage in sequential mode.
-            
+
+        if ( memory.getLeftTupleMemory() == null || ( memory.getLeftTupleMemory().size() == 0 && rightTuple.getBlocked() == null ) ) {
+            // do nothing here, as we know there are no left tuples
+
             //normally do this at the end, but as we are exiting early, make sure the buckets are still correct.
             memory.getRightTupleMemory().remove( rightTuple );
-            memory.getRightTupleMemory().add( rightTuple );            
+            memory.getRightTupleMemory().add( rightTuple );
             return;
-        }        
+        }
 
         // TODO: wtd with behaviours?
         //        if ( !behavior.assertRightTuple( memory.getBehaviorContext(),
@@ -412,7 +421,8 @@
                 // subclasses like ForallNotNode might override this propagation
                 this.sink.propagateAssertLeftTuple( leftTuple,
                                                     context,
-                                                    workingMemory, this.tupleMemoryEnabled  );
+                                                    workingMemory,
+                                                    true );
             }
 
             leftTuple = temp;
@@ -426,12 +436,12 @@
             // iterate all the existing previous blocked LeftTuples
             for ( LeftTuple leftTuple = (LeftTuple) firstBlocked; leftTuple != null; ) {
                 LeftTuple temp = leftTuple.getBlockedNext();
-                
+
                 leftTuple.setBlockedPrevious( null ); // must null these as we are re-adding them to the list
                 leftTuple.setBlockedNext( null );
-                
+
                 if ( this.constraints.isAllowedCachedRight( memory.getContext(),
-                                                                         leftTuple ) ) {
+                                                            leftTuple ) ) {
                     // in the same bucket and it still blocks, so add back into blocked list
                     rightTuple.addBlocked( leftTuple ); // no need to set on LeftTuple, as it already has the reference
                     leftTuple = temp;
@@ -486,17 +496,22 @@
     public void updateSink(final LeftTupleSink sink,
                            final PropagationContext context,
                            final InternalWorkingMemory workingMemory) {
-        //        final BetaMemory memory = (BetaMemory) workingMemory.getNodeMemory( this );
-        //
-        //        final Iterator tupleIter = memory.getLeftTupleMemory().iterator();
-        //        for ( LeftTuple tuple = (LeftTuple) tupleIter.next(); tuple != null; tuple = (LeftTuple) tupleIter.next() ) {
-        //            if ( tuple.getMatch() != null ) {
-        //                sink.assertLeftTuple( new LeftTuple( tuple ),
-        //                                      context,
-        //                                      workingMemory );
-        //            }
-        //        }
-        // @FIXME
+        final BetaMemory memory = (BetaMemory) workingMemory.getNodeMemory( this );
+        Iterator it = memory.getRightTupleMemory().iterator();
+
+        // Relies on the fact that any propagated LeftTuples are blocked, but due to lazy blocking
+        // they will only be blocked once. So we can iterate the right memory to find the left tuples to propagate
+        for ( RightTuple rightTuple = (RightTuple) it.next(); rightTuple != null; rightTuple = (RightTuple) it.next() ) {
+            LeftTuple leftTuple = rightTuple.getBlocked();
+            while ( leftTuple != null ) {
+                sink.assertLeftTuple( new LeftTuple( leftTuple,
+                                                     sink,
+                                                     true ),
+                                      context,
+                                      workingMemory );
+                leftTuple = leftTuple.getBlockedNext();
+            }
+        }
     }
 
     public String toString() {

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/JoinNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/JoinNode.java	2010-05-19 20:17:40 UTC (rev 32971)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/JoinNode.java	2010-05-19 22:24:17 UTC (rev 32972)
@@ -16,6 +16,7 @@
  * limitations under the License.
  */
 
+import org.drools.base.DroolsQuery;
 import org.drools.common.BetaConstraints;
 import org.drools.common.InternalFactHandle;
 import org.drools.common.InternalWorkingMemory;
@@ -51,7 +52,7 @@
                rightInput,
                binder,
                behaviors );
-        tupleMemoryEnabled = context.isTupleMemoryEnabled();
+        this.tupleMemoryEnabled = context.isTupleMemoryEnabled();
     }
 
     public void assertLeftTuple(final LeftTuple leftTuple,
@@ -59,8 +60,18 @@
                                 final InternalWorkingMemory workingMemory) {
         final BetaMemory memory = (BetaMemory) workingMemory.getNodeMemory( this );
 
-        if ( this.tupleMemoryEnabled ) {
+        boolean useLeftMemory = true;
+        if ( this.tupleMemoryEnabled  ) {
             memory.getLeftTupleMemory().add( leftTuple );
+        } else {
+            // This is a hack, to not add closed DroolsQuery objects
+            Object object = ((InternalFactHandle)context.getFactHandle()).getObject();                
+            if ( object instanceof DroolsQuery &&  !((DroolsQuery)object).isOpen() ) {
+                useLeftMemory = false;
+            } else  if ( memory.getLeftTupleMemory() != null ) {
+                // LeftMemory will be null for sequential (still created for queries).
+                memory.getLeftTupleMemory().add( leftTuple );
+            }
         }
 
         this.constraints.updateFromTuple( memory.getContext(),
@@ -76,7 +87,7 @@
                                                     null,
                                                     context,
                                                     workingMemory,
-                                                    this.tupleMemoryEnabled );
+                                                    useLeftMemory );
             }
         }
 
@@ -100,9 +111,9 @@
         }
 
         memory.getRightTupleMemory().add( rightTuple );
-        if ( !this.tupleMemoryEnabled ) {
-            // do nothing here, as we know there are no left tuples at this stage in sequential mode.
-            return;
+        if (  memory.getLeftTupleMemory() == null || memory.getLeftTupleMemory().size() == 0  ) {
+            // do nothing here, as no left memory
+            return;            
         }
 
         this.constraints.updateFromFactHandle( memory.getContext(),
@@ -119,7 +130,7 @@
                                                     null,
                                                     context,
                                                     workingMemory,
-                                                    this.tupleMemoryEnabled );
+                                                    true );
             }
             i++;
         }
@@ -173,8 +184,8 @@
         memory.getRightTupleMemory().remove( rightTuple );
         memory.getRightTupleMemory().add( rightTuple );
         
-        if ( !this.tupleMemoryEnabled ) {
-            // do nothing here, as we know there are no left tuples at this stage in sequential mode.
+        if ( memory.getLeftTupleMemory() != null && memory.getLeftTupleMemory().size() == 0 ) {
+            // do nothing here, as we know there are no left tuples.
             return;
         }        
 
@@ -212,7 +223,7 @@
                                                             null,
                                                             context,
                                                             workingMemory,
-                                                            this.tupleMemoryEnabled );
+                                                            true );
                     }
                 }
             } else {
@@ -227,7 +238,7 @@
                                                                 childLeftTuple,
                                                                 context,
                                                                 workingMemory,
-                                                                this.tupleMemoryEnabled );
+                                                                true );
                         } else {
                             // preserve the current LeftTuple, as we need to iterate to the next before re-adding
                             LeftTuple temp = childLeftTuple;
@@ -235,7 +246,7 @@
                                                                                       leftTuple,
                                                                                       context,
                                                                                       workingMemory,
-                                                                                      this.tupleMemoryEnabled );
+                                                                                      true );
                             // we must re-add this to ensure deterministic iteration
                             temp.reAddLeft();
                         }
@@ -297,7 +308,7 @@
                                                             null,
                                                             context,
                                                             workingMemory,
-                                                            this.tupleMemoryEnabled );
+                                                            true );
                     }
                 }
             } else {
@@ -314,7 +325,7 @@
                                                                 null,
                                                                 context,
                                                                 workingMemory,
-                                                                this.tupleMemoryEnabled );
+                                                                true );
                         } else {
                             // preserve the current LeftTuple, as we need to iterate to the next before re-adding
                             LeftTuple temp = childLeftTuple;
@@ -322,7 +333,7 @@
                                                                                       rightTuple,
                                                                                       context,
                                                                                       workingMemory,
-                                                                                      this.tupleMemoryEnabled );
+                                                                                      true );
                             // we must re-add this to ensure deterministic iteration
                             temp.reAddRight();
                         }
@@ -347,8 +358,8 @@
                            final PropagationContext context,
                            final InternalWorkingMemory workingMemory) {
 
-        final BetaMemory memory = (BetaMemory) workingMemory.getNodeMemory( this );
-
+        final BetaMemory memory = (BetaMemory) workingMemory.getNodeMemory( this );       
+        
         final Iterator tupleIter = memory.getLeftTupleMemory().iterator();
         for ( LeftTuple leftTuple = (LeftTuple) tupleIter.next(); leftTuple != null; leftTuple = (LeftTuple) tupleIter.next() ) {
             this.constraints.updateFromTuple( memory.getContext(),
@@ -362,7 +373,7 @@
                                                          null,
                                                          null,
                                                          sink,
-                                                         this.tupleMemoryEnabled ),
+                                                         true ),
                                           context,
                                           workingMemory );
                 }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/LeftInputAdapterNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/LeftInputAdapterNode.java	2010-05-19 20:17:40 UTC (rev 32971)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/LeftInputAdapterNode.java	2010-05-19 22:24:17 UTC (rev 32972)
@@ -20,6 +20,7 @@
 import java.io.ObjectInput;
 import java.io.ObjectOutput;
 
+import org.drools.base.DroolsQuery;
 import org.drools.common.BaseNode;
 import org.drools.common.InternalFactHandle;
 import org.drools.common.InternalWorkingMemory;
@@ -134,11 +135,20 @@
     public void assertObject(final InternalFactHandle factHandle,
                              final PropagationContext context,
                              final InternalWorkingMemory workingMemory) {
+        boolean useLeftMemory = true;
+        if ( !this.leftTupleMemoryEnabled ) {
+            // This is a hack, to not add closed DroolsQuery objects
+            Object object = ((InternalFactHandle)context.getFactHandle()).getObject();                
+            if ( object instanceof DroolsQuery &&  !((DroolsQuery)object).isOpen() ) {
+                useLeftMemory = false;
+            } 
+        }
+        
         if ( !workingMemory.isSequential() ) {
             this.sink.createAndPropagateAssertLeftTuple( factHandle,
                                                          context,
                                                          workingMemory,
-                                                         this.leftTupleMemoryEnabled );
+                                                         useLeftMemory );
         } else {
             workingMemory.addLIANodePropagation( new LIANodePropagation( this,
                                                                          factHandle,
@@ -161,7 +171,7 @@
                            final PropagationContext context,
                            final InternalWorkingMemory workingMemory) {
         final RightTupleSinkAdapter adapter = new RightTupleSinkAdapter( sink,
-                                                                         this.leftTupleMemoryEnabled );
+                                                                         true );
         this.objectSource.updateSink( adapter,
                                       context,
                                       workingMemory );

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/LeftTuple.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/LeftTuple.java	2010-05-19 20:17:40 UTC (rev 32971)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/LeftTuple.java	2010-05-19 22:24:17 UTC (rev 32972)
@@ -22,7 +22,7 @@
 
     private LeftTuple          parent;
 
-    private Activation         activation;
+    private Object             object;
 
     private RightTuple         blocker;
 
@@ -411,10 +411,6 @@
         return get( declaration.getPattern().getOffset() );
     }
 
-    public Activation getActivation() {
-        return this.activation;
-    }
-
     /**
      * Returns the fact handles in reverse order
      */
@@ -462,10 +458,14 @@
     public void setBlockedNext(LeftTuple blockerNext) {
         this.blockedNext = blockerNext;
     }
-
-    public void setActivation(final Activation activation) {
-        this.activation = activation;
+    
+    public Object getObject() {
+        return this.object;
     }
+    
+    public void setObject(final Object object) {
+        this.object = object;
+    }
 
 //    public int hashCode() {        
 //        return this.hashCode;
@@ -600,7 +600,7 @@
         }
         builder.append( Arrays.toString( ids ) )
                .append( " activation=" )
-               .append( this.activation != null ? ((AgendaItem)this.activation).toExternalForm() : "null" )
+               .append( this.object != null ? this.object : "null" )
                .append( " sink=" )
                .append( this.sink.getClass().getSimpleName() )
                .append( "(" ).append( sink.getId() ).append( ")" );

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/NotNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/NotNode.java	2010-05-19 20:17:40 UTC (rev 32971)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/NotNode.java	2010-05-19 22:24:17 UTC (rev 32972)
@@ -16,6 +16,7 @@
  * limitations under the License.
  */
 
+import org.drools.base.DroolsQuery;
 import org.drools.common.BetaConstraints;
 import org.drools.common.InternalFactHandle;
 import org.drools.common.InternalWorkingMemory;
@@ -62,6 +63,16 @@
                                 final InternalWorkingMemory workingMemory) {
         final BetaMemory memory = (BetaMemory) workingMemory.getNodeMemory( this );
 
+        
+        boolean useLeftMemory = true;
+        if ( !this.tupleMemoryEnabled ) {
+            // This is a hack, to not add closed DroolsQuery objects
+            Object object = ((InternalFactHandle)context.getFactHandle()).getObject();
+            if (  memory.getLeftTupleMemory() == null || object instanceof DroolsQuery &&  !((DroolsQuery)object).isOpen() ) {
+                useLeftMemory = false;
+            }
+        }
+        
         this.constraints.updateFromTuple( memory.getContext(),
                                           workingMemory,
                                           leftTuple );
@@ -71,7 +82,7 @@
                                                        rightTuple.getFactHandle() ) ) {
                 leftTuple.setBlocker( rightTuple );
 
-                if ( this.tupleMemoryEnabled ) {
+                if ( useLeftMemory ) {
                     rightTuple.addBlocked( leftTuple );
                 }
 
@@ -83,14 +94,14 @@
 
         if ( leftTuple.getBlocker() == null ) {
             // tuple is not blocked, so add to memory so other fact handles can attempt to match
-            if ( this.tupleMemoryEnabled ) {
+            if ( useLeftMemory ) {
                 memory.getLeftTupleMemory().add( leftTuple );
             }
 
             this.sink.propagateAssertLeftTuple( leftTuple,
                                                 context,
                                                 workingMemory,
-                                                this.tupleMemoryEnabled );
+                                                useLeftMemory );
         }
     }
 
@@ -113,9 +124,9 @@
 
         memory.getRightTupleMemory().add( rightTuple );
 
-        if ( !this.tupleMemoryEnabled ) {
-            // do nothing here, as we know there are no left tuples at this stage in sequential mode.
-            return;
+        if ( memory.getLeftTupleMemory() == null || memory.getLeftTupleMemory().size() == 0  ) {
+            // do nothing here, as no left memory
+            return;            
         }
 
         this.constraints.updateFromFactHandle( memory.getContext(),
@@ -306,8 +317,8 @@
                                  PropagationContext context,
                                  InternalWorkingMemory workingMemory) {        
         final BetaMemory memory = (BetaMemory) workingMemory.getNodeMemory( this );               
-        if ( !this.tupleMemoryEnabled ) {
-            // do nothing here, as we know there are no left tuples at this stage in sequential mode.
+        if ( memory.getLeftTupleMemory() == null || ( memory.getLeftTupleMemory().size() == 0 && rightTuple.getBlocked() == null ) ) {
+            // do nothing here, as we know there are no left tuples
             
             //normally do this at the end, but as we are exiting early, make sure the buckets are still correct.
             memory.getRightTupleMemory().remove( rightTuple );
@@ -425,7 +436,7 @@
         this.sink.propagateAssertLeftTuple( leftTuple,
                                             context,
                                             workingMemory,
-                                            this.tupleMemoryEnabled );
+                                            true );
     }
 
     /**
@@ -446,7 +457,7 @@
         this.sink.propagateModifyChildLeftTuple( leftTuple,
                                                  context,
                                                  workingMemory,
-                                                 this.tupleMemoryEnabled );
+                                                 true );
     }
 
     /**
@@ -460,7 +471,7 @@
         for ( LeftTuple leftTuple = (LeftTuple) tupleIter.next(); leftTuple != null; leftTuple = (LeftTuple) tupleIter.next() ) {
             sink.assertLeftTuple( new LeftTuple( leftTuple,
                                                  sink,
-                                                 this.tupleMemoryEnabled ),
+                                                 true ),
                                   context,
                                   workingMemory );
         }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/QueryElementNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/QueryElementNode.java	2010-05-19 20:17:40 UTC (rev 32971)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/QueryElementNode.java	2010-05-19 22:24:17 UTC (rev 32972)
@@ -1,7 +1,7 @@
 package org.drools.reteoo;
 
 import org.drools.base.DroolsQuery;
-import org.drools.base.QueryResultCollector;
+import org.drools.base.InternalViewChangedEventListener;
 import org.drools.common.BaseNode;
 import org.drools.common.InternalFactHandle;
 import org.drools.common.InternalWorkingMemory;
@@ -11,6 +11,7 @@
 import org.drools.rule.Declaration;
 import org.drools.rule.EntryPoint;
 import org.drools.rule.QueryElement;
+import org.drools.rule.Rule;
 import org.drools.rule.Variable;
 import org.drools.spi.PropagationContext;
 
@@ -104,14 +105,15 @@
                                            leftTuple.get( declr ).getObject() );
         }
 
-        UnificationNodeQueryResultsCollector collector = new UnificationNodeQueryResultsCollector( leftTuple,
+        UnificationNodeViewChangedEventListener collector = new UnificationNodeViewChangedEventListener( leftTuple,
                                                                                                    this.queryElement.getVariables(),
                                                                                                    this.sink,
                                                                                                    this.tupleMemoryEnabled );
         
         DroolsQuery queryObject = new DroolsQuery( this.queryElement.getQueryName(),
                                                    inputArgs,
-                                                   collector );
+                                                   collector,
+                                                   false );
         collector.setDroolsQuery( queryObject );
 
         InternalFactHandle handle = workingMemory.getFactHandleFactory().newFactHandle( queryObject,
@@ -140,9 +142,9 @@
 
     }
 
-    public static class UnificationNodeQueryResultsCollector
+    public static class UnificationNodeViewChangedEventListener
         implements
-        QueryResultCollector {
+        InternalViewChangedEventListener {
 
         private LeftTuple                 leftTuple;
         protected LeftTupleSinkPropagator sink;
@@ -152,7 +154,7 @@
         
         private boolean                   tupleMemoryEnabled;
 
-        public UnificationNodeQueryResultsCollector(LeftTuple leftTuple,
+        public UnificationNodeViewChangedEventListener(LeftTuple leftTuple,
                                                     int[] variables,
                                                     LeftTupleSinkPropagator sink,
                                                     boolean                   tupleMemoryEnabled) {
@@ -166,7 +168,8 @@
             this.query = query;
         }
 
-        public void add(LeftTuple resultLeftTuple,
+        public void rowAdded(final Rule rule,
+                             LeftTuple resultLeftTuple,
                         PropagationContext context,
                         InternalWorkingMemory workingMemory) {
 
@@ -184,6 +187,20 @@
                                                      rightTuple, 
                                                      this.tupleMemoryEnabled );
         }
+        
+        public void rowRemoved(final Rule rule,
+                               final LeftTuple tuple,
+                final PropagationContext context,
+                final InternalWorkingMemory workingMemory) {
+            //TODO
+        }
+        
+        public void rowUpdated(final Rule rule,
+                               final LeftTuple tuple,
+                final PropagationContext context,
+                final InternalWorkingMemory workingMemory) {
+            //TODO        	
+        }        
 
     }
 

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/QueryTerminalNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/QueryTerminalNode.java	2010-05-19 20:17:40 UTC (rev 32971)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/QueryTerminalNode.java	2010-05-19 22:24:17 UTC (rev 32972)
@@ -135,30 +135,84 @@
      * @throws AssertionException
      *             If an error occurs while asserting.
      */
-    public void assertLeftTuple(final LeftTuple tuple,
+    public void assertLeftTuple(final LeftTuple leftTuple,
                                 final PropagationContext context,
                                 final InternalWorkingMemory workingMemory) {
-        LeftTuple entry = tuple;
+        LeftTuple entry = leftTuple;
 
         // find the DroolsQuery object
         while ( entry.getParent() != null ) {
             entry = entry.getParent();
         }
         DroolsQuery query = (DroolsQuery) entry.getLastHandle().getObject();
-        query.setQuery( (Query) this.rule );
+        query.setQuery( (Query) this.rule );        
 
         // Add results to the adapter
-        query.getQueryResultCollector().add( tuple,
-                                             context,
-                                             workingMemory );
+        query.getQueryResultCollector().rowAdded( this.rule,
+                                                  leftTuple,
+                                                  context,
+                                                  workingMemory );
     }
 
-    public void retractLeftTuple(final LeftTuple tuple,
+    public void retractLeftTuple(final LeftTuple leftTuple,
                                  final PropagationContext context,
                                  final InternalWorkingMemory workingMemory) {
-        throw new UnsupportedOperationException( "Querries should not result in this method being called" );
+        LeftTuple entry = leftTuple;
+
+        // find the DroolsQuery object
+        while ( entry.getParent() != null ) {
+            entry = entry.getParent();
+        }
+        DroolsQuery query = (DroolsQuery) entry.getLastHandle().getObject();
+        query.setQuery( (Query) this.rule );
+
+        // Add results to the adapter
+        query.getQueryResultCollector().rowRemoved( this.rule,
+                                                    leftTuple,
+                                                    context,
+                                                    workingMemory );
     }
 
+    public void modifyLeftTuple(InternalFactHandle factHandle,
+                                ModifyPreviousTuples modifyPreviousTuples,
+                                PropagationContext context,
+                                InternalWorkingMemory workingMemory) {
+        LeftTuple leftTuple = modifyPreviousTuples.removeLeftTuple( this );
+        if ( leftTuple != null ) {
+            leftTuple.reAdd(); //
+            // LeftTuple previously existed, so continue as modify
+            modifyLeftTuple( leftTuple,
+                             context,
+                             workingMemory );
+        } else {
+            // LeftTuple does not exist, so create and continue as assert
+            assertLeftTuple( new LeftTuple( factHandle,
+                                            this,
+                                            true ),
+                             context,
+                             workingMemory );
+        }
+    }
+
+    public void modifyLeftTuple(LeftTuple leftTuple,
+                                PropagationContext context,
+                                InternalWorkingMemory workingMemory) {
+        LeftTuple entry = leftTuple;
+
+        // find the DroolsQuery object
+        while ( entry.getParent() != null ) {
+            entry = entry.getParent();
+        }
+        DroolsQuery query = (DroolsQuery) entry.getLastHandle().getObject();
+        query.setQuery( (Query) this.rule );
+
+        // Add results to the adapter
+        query.getQueryResultCollector().rowUpdated( this.rule,
+                                                    leftTuple,
+                                                    context,
+                                                    workingMemory );
+    }
+
     public String toString() {
         return "[QueryTerminalNode(" + this.getId() + "): query=" + this.rule.getName() + "]";
     }
@@ -265,17 +319,4 @@
         return NodeTypeEnums.QueryTerminalNode;
     }
 
-    public void modifyLeftTuple(InternalFactHandle factHandle,
-                                ModifyPreviousTuples modifyPreviousTuples,
-                                PropagationContext context,
-                                InternalWorkingMemory workingMemory) {
-        throw new UnsupportedOperationException( "Querries should not result in this method being called" );
-    }
-
-    public void modifyLeftTuple(LeftTuple leftTuple,
-                                PropagationContext context,
-                                InternalWorkingMemory workingMemory) {
-        throw new UnsupportedOperationException( "Querries should not result in this method being called" );
-    }
-
 }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooWorkingMemory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooWorkingMemory.java	2010-05-19 20:17:40 UTC (rev 32971)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooWorkingMemory.java	2010-05-19 22:24:17 UTC (rev 32972)
@@ -24,9 +24,10 @@
 import java.util.HashMap;
 import java.util.List;
 
+import org.drools.FactHandle;
 import org.drools.QueryResults;
 import org.drools.SessionConfiguration;
-import org.drools.base.DefaultQueryResultsCollector;
+import org.drools.base.StandardQueryViewChangedEventListener;
 import org.drools.base.DroolsQuery;
 import org.drools.common.AbstractWorkingMemory;
 import org.drools.common.DefaultAgenda;
@@ -47,6 +48,11 @@
 import org.drools.rule.Rule;
 import org.drools.runtime.Environment;
 import org.drools.runtime.ObjectFilter;
+import org.drools.runtime.rule.LiveQuery;
+import org.drools.runtime.rule.ViewChangedEventListener;
+import org.drools.runtime.rule.impl.OpenQueryViewChangedEventListenerAdapter;
+import org.drools.runtime.rule.impl.LiveQueryImpl;
+import org.drools.runtime.rule.impl.RowAdapter;
 import org.drools.spi.FactHandleFactory;
 import org.drools.spi.PropagationContext;
 
@@ -141,7 +147,8 @@
             this.lock.lock();
             DroolsQuery queryObject = new DroolsQuery( query,
                                                        arguments,
-                                                       new DefaultQueryResultsCollector() );
+                                                       new StandardQueryViewChangedEventListener(),
+                                                       false );
             InternalFactHandle handle = this.handleFactory.newFactHandle( queryObject,
                                                                           this.getObjectTypeConfigurationRegistry().getObjectTypeConf( EntryPoint.DEFAULT,
                                                                                                                                        queryObject ),
@@ -162,7 +169,7 @@
                 declarations = queryObject.getQuery().getDeclarations();
             }
 
-            return new QueryResults( ((DefaultQueryResultsCollector) queryObject.getQueryResultCollector()).getResults(),
+            return new QueryResults( ((StandardQueryViewChangedEventListener) queryObject.getQueryResultCollector()).getResults(),
                                      declarations,
                                      this );
         } finally {
@@ -171,7 +178,72 @@
             endOperation();
         }
     }
+    
+    public LiveQuery openLiveQuery(final String query,
+                              final Object[] arguments,
+                              final ViewChangedEventListener listener) {
 
+        try {
+            startOperation();
+            this.ruleBase.readLock();
+            this.lock.lock();
+            DroolsQuery queryObject = new DroolsQuery( query,
+                                                       arguments,
+                                                       new OpenQueryViewChangedEventListenerAdapter(listener),
+                                                       true );
+            InternalFactHandle handle = this.handleFactory.newFactHandle( queryObject,
+                                                                          this.getObjectTypeConfigurationRegistry().getObjectTypeConf( EntryPoint.DEFAULT,
+                                                                                                                                       queryObject ),
+                                                                          this );
+
+            insert( handle,
+                    queryObject,
+                    null,
+                    null,
+                    this.typeConfReg.getObjectTypeConf( this.entryPoint,
+                                                        queryObject ) );
+            
+            return new LiveQueryImpl( this, handle );
+
+//            this.handleFactory.destroyFactHandle( handle );
+//
+//            Declaration[] declarations = new Declaration[0];
+//            if ( queryObject.getQuery() != null ) {
+//                // this is null when there are no query results, thus the query object is never set
+//                declarations = queryObject.getQuery().getDeclarations();
+//            }
+//
+//            return new QueryResults( ((DefaultQueryResultsCollector) queryObject.getQueryResultCollector()).getResults(),
+//                                     declarations,
+//                                     this );
+        } finally {
+            this.lock.unlock();
+            this.ruleBase.readUnlock();
+            endOperation();
+        }
+    }    
+
+    public void closeLiveQuery(final InternalFactHandle factHandle) {
+
+             try {
+                 startOperation();
+                 this.ruleBase.readLock();
+                 this.lock.lock();
+
+                 getEntryPointNode().retractObject( factHandle,
+                                                            null,
+                                                            this.getObjectTypeConfigurationRegistry().getObjectTypeConf( this.getEntryPoint(),
+                                                                                                                            factHandle.getObject() ),
+                                                            this );
+                 getFactHandleFactory().destroyFactHandle( factHandle );
+                 
+             } finally {
+                 this.lock.unlock();
+                 this.ruleBase.readUnlock();
+                 endOperation();
+             }
+         }        
+    
     public static class WorkingMemoryReteAssertAction
         implements
         WorkingMemoryAction {

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/RuleTerminalNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/RuleTerminalNode.java	2010-05-19 20:17:40 UTC (rev 32971)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/RuleTerminalNode.java	2010-05-19 22:24:17 UTC (rev 32972)
@@ -184,7 +184,7 @@
 
             agenda.scheduleItem( item,
                                  workingMemory );
-            tuple.setActivation( item );
+            tuple.setObject( item );
 
             item.setActivated( true );
             ((EventSupport) workingMemory).getAgendaEventSupport().fireActivationCreated( item,
@@ -211,7 +211,7 @@
                                                              this.subrule );
             item.setSequenence( this.sequence );
 
-            tuple.setActivation( item );
+            tuple.setObject( item );
 
             boolean added = agenda.addActivation( item );
 
@@ -228,7 +228,7 @@
     public void retractLeftTuple(final LeftTuple leftTuple,
                                  final PropagationContext context,
                                  final InternalWorkingMemory workingMemory) {
-        final Activation activation = leftTuple.getActivation();
+        final Activation activation = (Activation) leftTuple.getObject();
 
         // activation can be null if the LeftTuple previous propagated into a no-loop
         if ( activation == null ) {
@@ -297,7 +297,7 @@
             return;
         }
 
-        AgendaItem item = (AgendaItem) leftTuple.getActivation();
+        AgendaItem item = (AgendaItem) leftTuple.getObject();
         if ( item != null && item.isActivated() ) {
             // already activated, do nothing
             return;
@@ -363,9 +363,6 @@
             item.setActivated( added );
 
             if ( added ) {
-                //                workingMemory.removeLogicalDependencies( item,
-                //                                                         context,
-                //                                                         this.rule );
                 ((EventSupport) workingMemory).getAgendaEventSupport().fireActivationCreated( item,
                                                                                               workingMemory );
             }
@@ -505,7 +502,7 @@
                 return;
             }
 
-            final Activation activation = leftTuple.getActivation();
+            final Activation activation = (Activation) leftTuple.getObject();
 
             if ( activation.isActivated() ) {
                 activation.remove();

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/UnificationRestriction.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/UnificationRestriction.java	2010-05-19 20:17:40 UTC (rev 32971)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/UnificationRestriction.java	2010-05-19 22:24:17 UTC (rev 32972)
@@ -43,7 +43,7 @@
                              InternalFactHandle handle,
                              InternalWorkingMemory workingMemory,
                              ContextEntry context) {
-        throw new UnsupportedOperationException( "Cannot use a Unification Restriction in the AlphaNetwork" );
+        return this.vr.isAllowed( extractor, handle, workingMemory, ((UnificationContextEntry)context).getContextEntry() );
     }
 
     public boolean isAllowedCachedLeft(ContextEntry context,
@@ -59,7 +59,7 @@
 
     public boolean isAllowedCachedRight(LeftTuple tuple,
                                         ContextEntry context) {
-        throw new UnsupportedOperationException( "Cannot right activate a Unification Restriction (for now )" );
+        return this.vr.isAllowedCachedRight( tuple, ((UnificationContextEntry)context).getContextEntry() );
     }
     
     public Evaluator getEvaluator() {
@@ -136,8 +136,7 @@
 
         public void updateFromFactHandle(InternalWorkingMemory workingMemory,
                                          InternalFactHandle handle) {
-            throw new UnsupportedOperationException( "Cannot right activate a Unification Restriction (for now )" );
-            //this.contextEntry.updateFromFactHandle( workingMemory, handle );
+            this.contextEntry.updateFromFactHandle( workingMemory, handle );
         }
 
         public void updateFromTuple(InternalWorkingMemory workingMemory,

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/rule/impl/FlatQueryResultRow.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/rule/impl/FlatQueryResultRow.java	2010-05-19 20:17:40 UTC (rev 32971)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/rule/impl/FlatQueryResultRow.java	2010-05-19 22:24:17 UTC (rev 32972)
@@ -12,8 +12,9 @@
     Map<String, Integer> identifiers;
     private List result;
     private List<FactHandle> factHandles;
+    private int size;
 
-    public FlatQueryResultRow(Map<String, Integer> identifiers, List result, List<FactHandle> factHandles) {
+    public FlatQueryResultRow(Map<String, Integer> identifiers, List result, List<FactHandle> factHandles, int size) {
         this.identifiers = identifiers;
         this.result = result;
         this.factHandles = factHandles;
@@ -23,10 +24,23 @@
         return this.result.get( identifiers.get( identifier ) );
     }
 
+    public Object get(int i) {
+        return this.result.get( i );
+    }
+    
+
     public FactHandle getFactHandle(String identifier) {
         return this.factHandles.get( identifiers.get( identifier ) );
+    }    
+
+    public FactHandle getFactHandle(int i) {
+        return this.factHandles.get( i );
     }
 
+    public int size() {
+        return this.size;
+    }
+
     
 
 }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/rule/impl/FlatQueryResults.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/rule/impl/FlatQueryResults.java	2010-05-19 20:17:40 UTC (rev 32971)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/rule/impl/FlatQueryResults.java	2010-05-19 22:24:17 UTC (rev 32972)
@@ -102,7 +102,8 @@
         public QueryResultsRow next() {
             return new FlatQueryResultRow( identifiers,
                                            this.iterator.next(),
-                                           this.handleIterator.next() );
+                                           this.handleIterator.next(),
+                                           size() );
         }
 
         public void remove() {

Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/rule/impl/LiveQueryImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/rule/impl/LiveQueryImpl.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/rule/impl/LiveQueryImpl.java	2010-05-19 22:24:17 UTC (rev 32972)
@@ -0,0 +1,24 @@
+package org.drools.runtime.rule.impl;
+
+import org.drools.FactHandle;
+import org.drools.common.InternalFactHandle;
+import org.drools.reteoo.ReteooWorkingMemory;
+import org.drools.runtime.rule.LiveQuery;
+
+public class LiveQueryImpl
+    implements
+    LiveQuery {
+    ReteooWorkingMemory wm;
+    InternalFactHandle  factHandle;
+
+    public LiveQueryImpl(ReteooWorkingMemory wm,
+                         FactHandle factHandle) {
+        this.wm = wm;
+        this.factHandle = (InternalFactHandle) factHandle;
+    }
+
+    public void close() {
+        this.wm.closeLiveQuery( this.factHandle );
+    }
+
+}

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/rule/impl/NativeQueryResultRow.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/rule/impl/NativeQueryResultRow.java	2010-05-19 20:17:40 UTC (rev 32971)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/rule/impl/NativeQueryResultRow.java	2010-05-19 22:24:17 UTC (rev 32972)
@@ -14,10 +14,22 @@
 
     public Object get(String identifier) {
         return this.result.get( identifier );
+    }    
+
+    public Object get(int i) {
+        return this.result.get( i );
     }
     
     public FactHandle getFactHandle(String identifier) {
         return this.result.getFactHandle( identifier );
+    }    
+
+    public FactHandle getFactHandle(int i) {
+        return this.result.getFactHandle( i );
     }
 
+    public int size() {
+        return result.size();
+    }
+
 }

Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/rule/impl/OpenQueryViewChangedEventListenerAdapter.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/rule/impl/OpenQueryViewChangedEventListenerAdapter.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/rule/impl/OpenQueryViewChangedEventListenerAdapter.java	2010-05-19 22:24:17 UTC (rev 32972)
@@ -0,0 +1,46 @@
+package org.drools.runtime.rule.impl;
+
+import org.drools.base.InternalViewChangedEventListener;
+import org.drools.common.InternalWorkingMemory;
+import org.drools.reteoo.LeftTuple;
+import org.drools.rule.Rule;
+import org.drools.runtime.rule.ViewChangedEventListener;
+import org.drools.spi.PropagationContext;
+
+public class OpenQueryViewChangedEventListenerAdapter
+    implements
+    InternalViewChangedEventListener {
+
+    private ViewChangedEventListener viewEventListener;
+    
+    public OpenQueryViewChangedEventListenerAdapter(ViewChangedEventListener viewEventListener) {
+        this.viewEventListener = viewEventListener;
+    }
+
+    public void rowAdded(final Rule rule,
+                         final LeftTuple leftTuple,
+                         final PropagationContext context,
+                         final InternalWorkingMemory workingMemory) {
+        RowAdapter rowAdapter = new RowAdapter(rule,
+                                               leftTuple);
+        leftTuple.setObject( rowAdapter );
+        this.viewEventListener.rowAdded( rowAdapter );
+    }
+
+    public void rowRemoved(final Rule rule,
+                           final LeftTuple leftTuple,
+                           final PropagationContext context,
+                           final InternalWorkingMemory workingMemory) {
+        RowAdapter rowAdapter = (RowAdapter) leftTuple.getObject();
+        this.viewEventListener.rowRemoved( rowAdapter );
+    }
+
+    public void rowUpdated(final Rule rule,
+                           final LeftTuple leftTuple,
+                           final PropagationContext context,
+                           final InternalWorkingMemory workingMemory) {
+        RowAdapter rowAdapter = (RowAdapter) leftTuple.getObject();
+        this.viewEventListener.rowUpdated( rowAdapter );
+    }
+
+}

Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/rule/impl/RowAdapter.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/rule/impl/RowAdapter.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/rule/impl/RowAdapter.java	2010-05-19 22:24:17 UTC (rev 32972)
@@ -0,0 +1,89 @@
+package org.drools.runtime.rule.impl;
+
+import org.drools.common.InternalFactHandle;
+import org.drools.reteoo.LeftTuple;
+import org.drools.rule.Declaration;
+import org.drools.rule.Rule;
+import org.drools.runtime.rule.FactHandle;
+import org.drools.runtime.rule.Row;
+
+public class RowAdapter implements Row {
+	
+    private Rule                 rule;
+	private LeftTuple 			 leftTuple;
+	private InternalFactHandle[] factHandles;
+
+	public RowAdapter(final Rule rule,
+	                  final LeftTuple leftTuple) {
+	    this.rule = rule;
+		this.leftTuple = leftTuple;
+	}
+	
+    private InternalFactHandle getFactHandle(Declaration declr) {
+        return this.factHandles[  declr.getPattern().getOffset() ]; // -1 because we shifted the array left
+                                                                       // when removing the query object
+    }  	
+
+	public Object get(String identifier) {
+		if ( factHandles == null ) {
+			this.factHandles = this.leftTuple.getFactHandles();
+		}
+		Declaration declr = this.rule.getDeclaration( identifier );
+		InternalFactHandle factHandle = getFactHandle( declr );
+		return declr.getValue( null, factHandle.getObject() );
+	}
+
+	public Object get(int i) {
+		if ( factHandles == null ) {
+			this.factHandles = this.leftTuple.getFactHandles();
+		}
+		return this.factHandles[ i + 1].getObject();
+	}
+
+	public FactHandle getFactHandle(String identifier) {
+		if ( factHandles == null ) {
+			this.factHandles = this.leftTuple.getFactHandles();
+		}
+		return null;
+	}
+
+	public FactHandle getFactHandle(int i) {
+		if ( factHandles == null ) {
+			this.factHandles = this.leftTuple.getFactHandles();
+		}
+		return null;
+	}
+
+	public int size() {
+		if ( factHandles == null ) {
+			this.factHandles = this.leftTuple.getFactHandles();
+		}
+		return 0;
+	}
+
+	@Override
+	public int hashCode() {
+		final int prime = 31;
+		int result = 1;
+		result = prime * result
+				+ ((this.leftTuple == null) ? 0 : this.leftTuple.hashCode());
+		return result;
+	}
+
+	@Override
+	public boolean equals(Object obj) {
+		if (this == obj)
+			return true;
+		if (obj == null)
+			return false;
+		if (getClass() != obj.getClass())
+			return false;
+		RowAdapter other = (RowAdapter) obj;
+		if (this.leftTuple == null) {
+			if (other.leftTuple != null)
+				return false;
+		} else if (!this.leftTuple.equals(other.leftTuple))
+			return false;
+		return true;
+	}
+}
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/AccumulateNodeTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/AccumulateNodeTest.java	2010-05-19 20:17:40 UTC (rev 32971)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/AccumulateNodeTest.java	2010-05-19 22:24:17 UTC (rev 32972)
@@ -375,7 +375,11 @@
 
         // assert tuple, should not add to left memory, since we are in sequential mode
         this.node.assertLeftTuple( tuple0,
-                                   this.context,
+                                   new PropagationContextImpl( 0,
+                                                               PropagationContext.ASSERTION,
+                                                               null,
+                                                               null,
+                                                               f0 ),
                                    this.workingMemory );
         // check memories 
         assertNull( this.memory.getLeftTupleMemory() );
@@ -390,7 +394,11 @@
                                                 null,
                                                 true );
         this.node.assertLeftTuple( tuple1,
-                                   this.context,
+                                   new PropagationContextImpl( 0,
+                                                               PropagationContext.ASSERTION,
+                                                               null,
+                                                               null,
+                                                               f1 ),
                                    this.workingMemory );
         assertNull( this.memory.getLeftTupleMemory() );
         Assert.assertEquals( "Wrong number of elements in matching objects list ",

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/JoinNodeTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/JoinNodeTest.java	2010-05-19 20:17:40 UTC (rev 32971)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/JoinNodeTest.java	2010-05-19 22:24:17 UTC (rev 32972)
@@ -219,10 +219,12 @@
 		final DefaultFactHandle f0 = new DefaultFactHandle(0, "cheese");
 		final LeftTuple tuple0 = new LeftTuple(f0, this.node, true);
 
-		this.node.assertObject(f0, this.context, this.workingMemory);
+		this.node.assertObject(f0, new PropagationContextImpl(0,
+		                                                      PropagationContext.ASSERTION, null, null, f0), this.workingMemory);
 
 		// assert tuple
-		this.node.assertLeftTuple(tuple0, this.context, this.workingMemory);
+		this.node.assertLeftTuple(tuple0, new PropagationContextImpl(0,
+		                                                              PropagationContext.ASSERTION, null, null, f0), this.workingMemory);
 
 		assertEquals(1, this.sink.getAsserted().size());
 

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/LogicalAssertionTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/LogicalAssertionTest.java	2010-05-19 20:17:40 UTC (rev 32971)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/LogicalAssertionTest.java	2010-05-19 22:24:17 UTC (rev 32972)
@@ -37,6 +37,7 @@
 import org.drools.rule.Rule;
 import org.drools.FactHandle;
 import org.drools.WorkingMemory;
+import org.drools.spi.Activation;
 import org.drools.spi.Consequence;
 import org.drools.spi.KnowledgeHelper;
 import org.drools.spi.PropagationContext;
@@ -127,7 +128,7 @@
                                                                                       false,
                                                                                       true,
                                                                                       rule1,
-                                                                                      tuple1.getActivation() );
+                                                                                      (Activation)tuple1.getObject() );
         new RightTuple( logicalHandle,
                         sink );
         // Retract the tuple and test the logically asserted fact was also retracted
@@ -155,7 +156,7 @@
                                                                    false,
                                                                    true,
                                                                    rule1,
-                                                                   tuple1.getActivation() );
+                                                                   (Activation)tuple1.getObject() );
 
         new RightTuple( logicalHandle,
                         sink );
@@ -251,14 +252,14 @@
                                                           false,
                                                           true,
                                                           rule1,
-                                                          tuple1.getActivation() );
+                                                          (Activation)tuple1.getObject() );
 
         final String logicalString2 = new String( "logical" );
         FactHandle logicalHandle2 = workingMemory.insert( logicalString2,
                                                           false,
                                                           true,
                                                           rule1,
-                                                          tuple1.getActivation() );
+                                                          (Activation)tuple1.getObject() );
 
         assertSame( logicalHandle1,
                     logicalHandle2 );
@@ -357,7 +358,7 @@
                                                           false,
                                                           true,
                                                           rule1,
-                                                          tuple1.getActivation() );
+                                                          (Activation)tuple1.getObject() );
 
         // This assertion is stated and should override any previous justified
         // "equals" objects.
@@ -397,7 +398,7 @@
                                                false,
                                                true,
                                                rule1,
-                                               tuple1.getActivation() );
+                                               (Activation)tuple1.getObject() );
 
         assertNull( logicalHandle1 );
 
@@ -406,7 +407,7 @@
                                                false,
                                                false,
                                                rule1,
-                                               tuple1.getActivation() );
+                                               (Activation)tuple1.getObject() );
         // return the matched handle
 
         assertSame( logicalHandle2,
@@ -521,7 +522,7 @@
                                                                 false,
                                                                 true,
                                                                 rule1,
-                                                                tuple1.getActivation() );
+                                                                (Activation)tuple1.getObject() );
 
         // This assertion is stated and should override any previous justified
         // "equals" objects.
@@ -627,7 +628,7 @@
                                                                 false,
                                                                 true,
                                                                 rule1,
-                                                                tuple1.getActivation() );
+                                                                (Activation)tuple1.getObject() );
 
         // create the second activation to justify the "logical" fact
         final Rule rule2 = new Rule( "test-rule2" );
@@ -658,7 +659,7 @@
                                                                 false,
                                                                 true,
                                                                 rule2,
-                                                                tuple2.getActivation() );
+                                                                (Activation)tuple2.getObject() );
 
         // "logical" should only appear once
         assertEquals( 1,
@@ -774,7 +775,7 @@
                                                                 false,
                                                                 true,
                                                                 rule1,
-                                                                tuple1.getActivation() );
+                                                                (Activation)tuple1.getObject() );
         new RightTuple( logicalHandle1,
                         sink );
 
@@ -784,7 +785,7 @@
                                                                 false,
                                                                 true,
                                                                 rule2,
-                                                                tuple2.getActivation() );
+                                                                (Activation)tuple2.getObject() );
         
         assertSame( logicalHandle1, logicalHandle2 );
 
@@ -908,7 +909,7 @@
                                                           false,
                                                           true,
                                                           rule1,
-                                                          tuple1.getActivation() );
+                                                          (Activation)tuple1.getObject() );
 
         // Checks that previous LogicalAssert failed
         assertNull( logicalHandle3 );
@@ -924,7 +925,7 @@
                                                    false,
                                                    true,
                                                    rule1,
-                                                   tuple1.getActivation() );
+                                                   (Activation)tuple1.getObject() );
 
             // Checks that previous LogicalAssert failed
             assertNull( logicalHandle3 );
@@ -936,7 +937,7 @@
                                                false,
                                                true,
                                                rule1,
-                                               tuple1.getActivation() );
+                                               (Activation)tuple1.getObject() );
 
         // Checks that previous LogicalAssert succeeded as there are no more
         // stated strings in the working memory
@@ -1019,7 +1020,7 @@
                                                               false,
                                                               true,
                                                               rule1,
-                                                              tuple1.getActivation() );
+                                                              (Activation) tuple1.getObject() );
 
         cheese.setType( "cheddar" );
         cheese.setPrice( 20 );

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/NotNodeTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/NotNodeTest.java	2010-05-19 20:17:40 UTC (rev 32971)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/NotNodeTest.java	2010-05-19 22:24:17 UTC (rev 32972)
@@ -423,7 +423,11 @@
 
         // assert tuple
         this.node.assertLeftTuple( tuple0,
-                                   this.context,
+                                   new PropagationContextImpl( 0,
+                                                               PropagationContext.ASSERTION,
+                                                               null,
+                                                               null,
+                                                               f0 ),
                                    this.workingMemory );
 
         assertEquals( 0,

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/QueryElementNodeTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/QueryElementNodeTest.java	2010-05-19 20:17:40 UTC (rev 32971)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/QueryElementNodeTest.java	2010-05-19 22:24:17 UTC (rev 32972)
@@ -27,7 +27,7 @@
 import org.drools.common.InternalWorkingMemory;
 import org.drools.common.PropagationContextImpl;
 import org.drools.reteoo.EvalConditionNode.EvalMemory;
-import org.drools.reteoo.QueryElementNode.UnificationNodeQueryResultsCollector;
+import org.drools.reteoo.QueryElementNode.UnificationNodeViewChangedEventListener;
 import org.drools.reteoo.builder.BuildContext;
 import org.drools.rule.Declaration;
 import org.drools.rule.Pattern;
@@ -159,13 +159,13 @@
                            ObjectTypeConf typeConf) {
             if( object instanceof DroolsQuery ) {
                 DroolsQuery query = ( DroolsQuery ) object;
-                UnificationNodeQueryResultsCollector collector = ( UnificationNodeQueryResultsCollector ) query.getQueryResultCollector();
+                UnificationNodeViewChangedEventListener collector = ( UnificationNodeViewChangedEventListener ) query.getQueryResultCollector();
                 for ( int i = 0; i < 3; i++ ) {
                     Object[] args = query.getElements();
                     ((Variable)args[0]).setValue( "string_0_" + i );
                     ((Variable)args[2]).setValue( "string_2_" + i );
                     ((Variable)args[5]).setValue( "string_5_" + i );
-                    collector.add( null, null, this );
+                    collector.rowAdded( rule, null, null, this );
                 }
             } else {
                 super.insert( handle, object, rule, activation, typeConf );



More information about the jboss-svn-commits mailing list