[jboss-svn-commits] JBL Code SVN: r32475 - in labs/jbossrules/trunk: drools-api/META-INF and 16 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Wed Apr 7 18:30:29 EDT 2010
Author: mark.proctor at jboss.com
Date: 2010-04-07 18:30:27 -0400 (Wed, 07 Apr 2010)
New Revision: 32475
Added:
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/DroolsTest.java
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/QueryTest.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/Arguments.java
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
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/QueryElementNode.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/QueryElementBuilder.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/QueryElement.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/UnificationRestriction.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Variable.java
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/QueryElementNodeTest.java
Removed:
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/UnificationNode.java
Modified:
labs/jbossrules/trunk/drools-api/.classpath
labs/jbossrules/trunk/drools-api/META-INF/MANIFEST.MF
labs/jbossrules/trunk/drools-compiler/.classpath
labs/jbossrules/trunk/drools-compiler/META-INF/MANIFEST.MF
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/PatternBuilder.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/QueryBuilder.java
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/testframework/MockWorkingMemory.java
labs/jbossrules/trunk/drools-core/.classpath
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/QueryResults.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/DroolsQuery.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/DoubleBetaConstraints.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InternalWorkingMemory.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/QuadroupleBetaConstraints.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/SingleBetaConstraints.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/TripleBetaConstraints.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/core/util/debug/QueryTerminalNodeVisitor.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/NodeTypeEnums.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/builder/ReteooRuleBuilder.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/EvalCondition.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/VariableConstraint.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/rule/impl/NativeQueryResults.java
Log:
JBRULES-535 allow for plugeable query result handlers
JBRULES-46 Proloq Style Query Based Backward Chaining
Modified: labs/jbossrules/trunk/drools-api/.classpath
===================================================================
--- labs/jbossrules/trunk/drools-api/.classpath 2010-04-07 22:23:52 UTC (rev 32474)
+++ labs/jbossrules/trunk/drools-api/.classpath 2010-04-07 22:30:27 UTC (rev 32475)
@@ -8,28 +8,24 @@
<classpathentry kind="var" path="M2_REPO/javax/xml/bind/jaxb-api/2.1/jaxb-api-2.1.jar"/>
<classpathentry kind="var" path="M2_REPO/javax/jms/jms/1.1/jms-1.1.jar"/>
<classpathentry kind="var" path="M2_REPO/javax/xml/stream/stax-api/1.0-2/stax-api-1.0-2.jar"/>
- <classpathentry kind="var" path="M2_REPO/cglib/cglib-nodep/2.1_3/cglib-nodep-2.1_3.jar"/>
<classpathentry kind="var" path="M2_REPO/commons-beanutils/commons-beanutils/1.7.0/commons-beanutils-1.7.0.jar"/>
<classpathentry kind="var" path="M2_REPO/commons-collections/commons-collections/3.1/commons-collections-3.1.jar"/>
<classpathentry kind="var" path="M2_REPO/commons-digester/commons-digester/1.8/commons-digester-1.8.jar"/>
<classpathentry kind="var" path="M2_REPO/commons-jexl/commons-jexl/1.1/commons-jexl-1.1.jar"/>
<classpathentry kind="var" path="M2_REPO/commons-lang/commons-lang/2.4/commons-lang-2.4.jar"/>
<classpathentry kind="var" path="M2_REPO/commons-logging/commons-logging/1.0.4/commons-logging-1.0.4.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/freemarker/freemarker/2.3.9/freemarker-2.3.9.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/hamcrest/hamcrest-core/1.1/hamcrest-core-1.1.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/hamcrest/hamcrest-library/1.1/hamcrest-library-1.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/freemarker/freemarker/2.3.11/freemarker-2.3.11.jar"/>
+ <classpathentry kind="var" path="M2_REPO/javassist/javassist/3.10.0.GA/javassist-3.10.0.GA.jar"/>
<classpathentry kind="var" path="M2_REPO/com/sun/xml/bind/jaxb-impl/2.1.7/jaxb-impl-2.1.7.jar"/>
<classpathentry kind="var" path="M2_REPO/com/sun/xml/bind/jaxb-xjc/2.1.7/jaxb-xjc-2.1.7.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/jmock/jmock/2.5.1/jmock-2.5.1.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/jmock/jmock-legacy/2.5.1/jmock-legacy-2.5.1.jar"/>
- <classpathentry kind="var" path="M2_REPO/junit/junit/4.6/junit-4.6.jar"/>
+ <classpathentry kind="var" path="M2_REPO/junit/junit/4.8.1/junit-4.8.1.jar"/>
<classpathentry kind="var" path="M2_REPO/net/sf/jxls/jxls-reader/0.9.6/jxls-reader-0.9.6.jar"/>
<classpathentry kind="var" path="M2_REPO/log4j/log4j/1.2.14/log4j-1.2.14.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/milyn/milyn-commons/1.1/milyn-commons-1.1.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/milyn/milyn-smooks-core/1.1/milyn-smooks-core-1.1.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/milyn/milyn-smooks-javabean/1.1/milyn-smooks-javabean-1.1.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/mvel/mvel/1.3.12-java1.5/mvel-1.3.12-java1.5.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/objenesis/objenesis/1.0/objenesis-1.0.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/milyn/milyn-commons/1.2/milyn-commons-1.2.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/milyn/milyn-smooks-core/1.2/milyn-smooks-core-1.2.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/milyn/milyn-smooks-javabean/1.2/milyn-smooks-javabean-1.2.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/mockito/mockito-all/1.8.2/mockito-all-1.8.2.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/mvel/mvel2/2.0.16/mvel2-2.0.16.jar"/>
<classpathentry kind="var" path="M2_REPO/org/apache/felix/org.osgi.compendium/1.4.0/org.osgi.compendium-1.4.0.jar"/>
<classpathentry kind="var" path="M2_REPO/org/apache/felix/org.osgi.core/1.4.0/org.osgi.core-1.4.0.jar"/>
<classpathentry kind="var" path="M2_REPO/org/apache/poi/poi/3.0.2-FINAL/poi-3.0.2-FINAL.jar"/>
@@ -38,5 +34,5 @@
<classpathentry kind="var" path="M2_REPO/xml-apis/xml-apis/2.0.2/xml-apis-2.0.2.jar"/>
<classpathentry kind="var" path="M2_REPO/xpp3/xpp3_min/1.1.4c/xpp3_min-1.1.4c.jar"/>
<classpathentry kind="var" path="M2_REPO/com/thoughtworks/xstream/xstream/1.3.1/xstream-1.3.1.jar"/>
- <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
</classpath>
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-api/META-INF/MANIFEST.MF
===================================================================
--- labs/jbossrules/trunk/drools-api/META-INF/MANIFEST.MF 2010-04-07 22:23:52 UTC (rev 32474)
+++ labs/jbossrules/trunk/drools-api/META-INF/MANIFEST.MF 2010-04-07 22:30:27 UTC (rev 32475)
@@ -1,64 +1,6 @@
Manifest-Version: 1.0
-Export-Package: org.drools.event.io;uses:="org.drools";version="5.1.0.
- SNAPSHOT",org.drools.runtime;uses:="org.drools.command,org.drools.tim
- e,org.drools.runtime.process,org.drools.event,org.drools.runtime.rule
- ,org.drools,org.drools.runtime.conf";version="5.1.0.SNAPSHOT",org.dro
- ols.marshalling;uses:="org.drools.runtime,org.drools";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,org.drools.io,org.drools.definition,org.droo
- ls.builder.conf,org.drools.util";version="5.1.0.SNAPSHOT",org.drools.
- builder.conf;uses:="org.drools.runtime.rule,org.drools.conf";version=
- "5.1.0.SNAPSHOT",org.drools.logger;uses:="org.drools.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.c
- onf";version="5.1.0.SNAPSHOT",org.drools.runtime.help;uses:="com.thou
- ghtworks.xstream,org.quartz,org.drools.time";version="5.1.0.SNAPSHOT"
- ,org.drools.time;version="5.1.0.SNAPSHOT",org.drools.event.rule;uses:
- ="org.drools.event,org.drools.runtime.rule";version="5.1.0.SNAPSHOT",
- org.drools.definition.rule;uses:="org.drools.definition";version="5.1
- .0.SNAPSHOT",org.drools.osgi.api;uses:="org.osgi.framework,org.osgi.u
- til.tracker,org.drools,org.drools.util";version="5.1.0.SNAPSHOT",org.
- drools.runtime.rule;uses:="org.drools.definition.rule,org.drools.runt
- ime";version="5.1.0.SNAPSHOT",org.drools.event.process;uses:="org.dro
- ols.runtime.process,org.drools.event";version="5.1.0.SNAPSHOT",org.dr
- ools.definition;uses:="org.drools.definition.process,org.drools.defin
- ition.rule";version="5.1.0.SNAPSHOT",org.drools.vsm;uses:="org.drools
- .command,org.drools.runtime,org.drools,org.drools.agent,org.drools.bu
- ilder,org.drools.persistence.jpa";version="5.1.0.SNAPSHOT",org.drools
- .builder.help;uses:="com.sun.tools.xjc,org.drools.io,org.drools,org.d
- rools.builder,javax.xml.bind";version="5.1.0.SNAPSHOT",org.drools.def
- inition.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.dr
- ools.runtime.pipeline;uses:="org.drools.runtime,javax.xml.bind,net.sf
- .jxls.reader,org.milyn,com.thoughtworks.xstream";version="5.1.0.SNAPS
- HOT",org.drools.agent;uses:="org.drools.runtime,org.drools.io,org.dro
- ols";version="5.1.0.SNAPSHOT",org.drools.command;uses:="org.drools.ru
- ntime,org.drools.runtime.rule";version="5.1.0.SNAPSHOT",org.drools.ta
- sk.service;version="5.1.0.SNAPSHOT",org.drools.persistence.jpa;uses:=
- "org.drools.runtime,org.drools";version="5.1.0.SNAPSHOT",org.drools.m
- anagement;uses:="javax.management";version="5.1.0.SNAPSHOT",org.drool
- s.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: 1266695704341
Bundle-Activator: org.drools.osgi.api.Activator
-Bundle-ManifestVersion: 2
-Bundle-Description: A rule production system
+Created-By: 1.5.0_21 (Sun Microsystems Inc.)
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,
@@ -66,6 +8,64 @@
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-DocURL: http://www.jboss.org/
+Bundle-Vendor: JBoss Inc.
+Bundle-ManifestVersion: 2
Bundle-SymbolicName: org.drools.api;singleton:=true
-Bundle-DocURL: http://www.jboss.org/
+Tool: Bnd-0.0.357
+DynamicImport-Package: *
Modified: labs/jbossrules/trunk/drools-compiler/.classpath
===================================================================
--- labs/jbossrules/trunk/drools-compiler/.classpath 2010-04-07 22:23:52 UTC (rev 32474)
+++ labs/jbossrules/trunk/drools-compiler/.classpath 2010-04-07 22:30:27 UTC (rev 32475)
@@ -11,24 +11,20 @@
<classpathentry kind="var" path="M2_REPO/antlr/antlr/2.7.7/antlr-2.7.7.jar"/>
<classpathentry kind="var" path="M2_REPO/org/antlr/antlr/3.1.3/antlr-3.1.3.jar"/>
<classpathentry kind="var" path="M2_REPO/org/antlr/antlr-runtime/3.1.3/antlr-runtime-3.1.3.jar"/>
- <classpathentry kind="var" path="M2_REPO/cglib/cglib-nodep/2.1_3/cglib-nodep-2.1_3.jar"/>
<classpathentry kind="var" path="M2_REPO/org/apache/jasper/springsource/com.springsource.org.apache.jasper.org.eclipse.jdt.springsource/6.0.20.S2-r5956/com.springsource.org.apache.jasper.org.eclipse.jdt.springsource-6.0.20.S2-r5956.jar"/>
+ <classpathentry kind="var" path="M2_REPO/commons-codec/commons-codec/1.4/commons-codec-1.4.jar"/>
<classpathentry kind="src" path="/drools-api"/>
<classpathentry kind="src" path="/drools-core"/>
<classpathentry kind="var" path="M2_REPO/org/antlr/gunit/3.1.3/gunit-3.1.3.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/hamcrest/hamcrest-core/1.1/hamcrest-core-1.1.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/hamcrest/hamcrest-library/1.1/hamcrest-library-1.1.jar"/>
<classpathentry kind="var" path="M2_REPO/janino/janino/2.5.15/janino-2.5.15.jar"/>
<classpathentry kind="var" path="M2_REPO/com/sun/xml/bind/jaxb-impl/2.1.7/jaxb-impl-2.1.7.jar"/>
<classpathentry kind="var" path="M2_REPO/com/sun/xml/bind/jaxb-xjc/2.1.7/jaxb-xjc-2.1.7.jar"/>
<classpathentry kind="var" path="M2_REPO/org/mortbay/jetty/jetty/6.1.15/jetty-6.1.15.jar"/>
<classpathentry kind="var" path="M2_REPO/org/mortbay/jetty/jetty-embedded/6.1.15/jetty-embedded-6.1.15.jar"/>
<classpathentry kind="var" path="M2_REPO/org/mortbay/jetty/jetty-util/6.1.15/jetty-util-6.1.15.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/jmock/jmock/2.5.1/jmock-2.5.1.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/jmock/jmock-legacy/2.5.1/jmock-legacy-2.5.1.jar"/>
- <classpathentry kind="var" path="M2_REPO/junit/junit/4.6/junit-4.6.jar"/>
+ <classpathentry kind="var" path="M2_REPO/junit/junit/4.8.1/junit-4.8.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/mockito/mockito-all/1.8.2/mockito-all-1.8.2.jar"/>
<classpathentry kind="var" path="M2_REPO/org/mvel/mvel2/2.0.16/mvel2-2.0.16.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/objenesis/objenesis/1.0/objenesis-1.0.jar"/>
<classpathentry kind="var" path="M2_REPO/org/apache/felix/org.osgi.compendium/1.4.0/org.osgi.compendium-1.4.0.jar"/>
<classpathentry kind="var" path="M2_REPO/org/apache/felix/org.osgi.core/1.4.0/org.osgi.core-1.4.0.jar"/>
<classpathentry kind="var" path="M2_REPO/org/opensymphony/quartz/quartz/1.6.1/quartz-1.6.1.jar"/>
@@ -36,5 +32,5 @@
<classpathentry kind="var" path="M2_REPO/org/antlr/stringtemplate/3.2/stringtemplate-3.2.jar"/>
<classpathentry kind="var" path="M2_REPO/xpp3/xpp3_min/1.1.4c/xpp3_min-1.1.4c.jar"/>
<classpathentry kind="var" path="M2_REPO/com/thoughtworks/xstream/xstream/1.3.1/xstream-1.3.1.jar"/>
- <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
</classpath>
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-compiler/META-INF/MANIFEST.MF
===================================================================
--- labs/jbossrules/trunk/drools-compiler/META-INF/MANIFEST.MF 2010-04-07 22:23:52 UTC (rev 32474)
+++ labs/jbossrules/trunk/drools-compiler/META-INF/MANIFEST.MF 2010-04-07 22:30:27 UTC (rev 32475)
@@ -1,68 +1,6 @@
Manifest-Version: 1.0
-Export-Package: org.drools.builder.impl;uses:="org.drools.compiler";ve
- 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.testframework;uses:="org.drools.guvnor.c
- lient.modeldriven.testing,org.mvel2,org.mvel2.compiler,org.drools.guv
- nor.server.util";version="5.1.0.SNAPSHOT",org.drools.process.builder;
- uses:="org.drools.rule.builder,org.drools.compiler";version="5.1.0.SN
- APSHOT",org.drools.rule.builder.dialect.java;uses:="org.mvel2.templat
- es,org.mvel2.integration,org.mvel2.integration.impl,org.drools.rule.b
- uilder,org.drools.compiler,org.drools.rule.builder.dialect.mvel,org.m
- vel2.optimizers,org.mvel2.compiler,org.drools.rule.builder.dialect.ja
- va.parser,org.antlr.runtime,org.mvel2";version="5.1.0.SNAPSHOT",org.d
- rools.rule.builder.dialect.mvel;uses:="org.drools.rule.builder,org.dr
- ools.compiler,org.mvel2,org.mvel2.util,org.drools.rule.builder.dialec
- t.java,org.mvel2.ast,org.mvel2.compiler";version="5.1.0.SNAPSHOT",org
- .drools.rule.builder.dialect.java.parser;uses:="org.antlr.runtime";ve
- rsion="5.1.0.SNAPSHOT",org.drools.guvnor.server.rules;uses:="org.droo
- ls.compiler,org.drools.guvnor.client.modeldriven,org.drools.guvnor.se
- rver.util";version="5.1.0.SNAPSHOT",org.drools.guvnor.client.modeldri
- ven.brl;version="5.1.0.SNAPSHOT",org.drools.guvnor.client.modeldriven
- .testing;uses:="org.drools.guvnor.client.modeldriven.brl";version="5.
- 1.0.SNAPSHOT",org.drools.guvnor.client.modeldriven.ui;version="5.1.0.
- SNAPSHOT",org.drools.compiler.xml.processes;uses:="org.drools.compile
- r.xml,org.w3c.dom,org.xml.sax,javax.xml.transform,javax.xml.transform
- .stream";version="5.1.0.SNAPSHOT",org.drools.compiler.xml;uses:="org.
- drools.compiler.xml.processes,org.drools.compiler.xml.rules,javax.xml
- .parsers,org.xml.sax";version="5.1.0.SNAPSHOT",org.drools.compiler;us
- es:="org.drools.rule.builder,org.antlr.runtime.tree,org.antlr.runtime
- ,org.xml.sax,org.drools.guvnor.client.modeldriven.brl,org.drools.comp
- iler.xml,org.drools.guvnor.server.util,org.drools.process.builder,org
- .mvel2,org.drools.compiler.xml.processes,javax.xml.parsers";version="
- 5.1.0.SNAPSHOT",org.drools.reteoo.compiled;uses:="org.drools.rule.bui
- lder.dialect.java,org.drools.compiler";version="5.1.0.SNAPSHOT",org.d
- rools.semantics.java.parser;version="5.1.0.SNAPSHOT",org.drools.guvno
- r.client.modeldriven.dt;uses:="org.drools.guvnor.client.modeldriven.b
- rl,org.drools.guvnor.client.modeldriven";version="5.1.0.SNAPSHOT",org
- .drools.rule.builder;uses:="org.drools.compiler,org.drools.rule.build
- er.dialect.mvel,org.mvel2,org.mvel2.compiler";version="5.1.0.SNAPSHOT
- ",org.drools.guvnor.client.modeldriven;uses:="org.drools.guvnor.clien
- t.modeldriven.brl";version="5.1.0.SNAPSHOT",org.drools.guvnor.server.
- util;uses:="org.drools.guvnor.client.modeldriven.brl,com.thoughtworks
- .xstream.io,com.thoughtworks.xstream.io.xml,com.thoughtworks.xstream,
- org.drools.guvnor.server.rules,org.drools.guvnor.client.modeldriven,o
- rg.mvel2,org.drools.guvnor.client.modeldriven.dt,org.drools.guvnor.cl
- ient.modeldriven.testing";version="5.1.0.SNAPSHOT"
-Private-Package: org.drools.lang.descr;version="5.1.0.SNAPSHOT",org.dr
- ools.commons.jci.compilers;version="5.1.0.SNAPSHOT",org.drools.lang.d
- sl;version="5.1.0.SNAPSHOT",org.drools.commons.jci.problems;version="
- 5.1.0.SNAPSHOT",org.drools.commons.jci.readers;version="5.1.0.SNAPSHO
- T",org.drools.commons.jci.stores;version="5.1.0.SNAPSHOT",org.drools.
- lang;version="5.1.0.SNAPSHOT"
-Tool: Bnd-0.0.357
-Bundle-Name: Drools :: Compiler
-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: 1266695776762
Bundle-Activator: org.drools.osgi.compiler.Activator
-Bundle-ManifestVersion: 2
-Bundle-Description: A rule production system
+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,
@@ -79,6 +17,68 @@
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
+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/
+Bundle-Vendor: JBoss Inc.
+Bundle-ManifestVersion: 2
Bundle-SymbolicName: org.drools.compiler;singleton:=true
-Bundle-DocURL: http://www.jboss.org/
+Tool: Bnd-0.0.357
+Require-Bundle: org.drools.core;bundle-version="5.1.0.SNAPSHOT"
+DynamicImport-Package: *
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/PatternBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/PatternBuilder.java 2010-04-07 22:23:52 UTC (rev 32474)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/PatternBuilder.java 2010-04-07 22:30:27 UTC (rev 32475)
@@ -25,6 +25,7 @@
import java.util.Set;
import org.drools.base.ClassObjectType;
+import org.drools.base.DroolsQuery;
import org.drools.base.FieldFactory;
import org.drools.base.ValueType;
import org.drools.base.evaluators.EvaluatorDefinition;
@@ -72,6 +73,7 @@
import org.drools.rule.RuleConditionElement;
import org.drools.rule.SlidingLengthWindow;
import org.drools.rule.SlidingTimeWindow;
+import org.drools.rule.UnificationRestriction;
import org.drools.rule.VariableConstraint;
import org.drools.rule.VariableRestriction;
import org.drools.rule.builder.dialect.mvel.MVELDialect;
@@ -382,17 +384,17 @@
pattern.getObjectType(),
fieldName,
(LiteralRestriction) restriction );
- } else if ( restriction instanceof VariableRestriction ) {
+ } else if ( restriction instanceof VariableRestriction || restriction instanceof UnificationRestriction ) {
constraint = new VariableConstraint( extractor,
- (VariableRestriction) restriction );
+ restriction );
registerReadAccessor( context,
pattern.getObjectType(),
fieldName,
- (VariableRestriction) restriction );
+ (AcceptsReadAccessor) restriction );
registerReadAccessor( context,
pattern.getObjectType(),
fieldName,
- (VariableRestriction) restriction );
+ (AcceptsReadAccessor) restriction );
} else if ( restriction instanceof ReturnValueRestriction ) {
constraint = new ReturnValueConstraint( extractor,
(ReturnValueRestriction) restriction );
@@ -743,7 +745,7 @@
return restriction;
}
- private VariableRestriction buildRestriction(final RuleBuildContext context,
+ private Restriction buildRestriction(final RuleBuildContext context,
final InternalReadAccessor extractor,
final FieldConstraintDescr fieldConstraintDescr,
final VariableRestrictionDescr variableRestrictionDescr) {
@@ -788,10 +790,17 @@
if ( evaluator == null ) {
return null;
}
+
+ Restriction restriction = new VariableRestriction( extractor,
+ declaration,
+ evaluator );
+
+ if ( declaration.getPattern().getObjectType().equals( new ClassObjectType( DroolsQuery.class ) ) ) {
+ // declaration is query argument, so allow for unification.
+ restriction = new UnificationRestriction( ( VariableRestriction ) restriction );
+ }
- return new VariableRestriction( extractor,
- declaration,
- evaluator );
+ return restriction;
}
private LiteralRestriction buildRestriction(final RuleBuildContext context,
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/QueryBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/QueryBuilder.java 2010-04-07 22:23:52 UTC (rev 32474)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/QueryBuilder.java 2010-04-07 22:30:27 UTC (rev 32475)
@@ -1,5 +1,6 @@
package org.drools.rule.builder;
+import org.drools.base.Arguments;
import org.drools.base.ClassObjectType;
import org.drools.base.DroolsQuery;
import org.drools.base.FieldFactory;
@@ -19,13 +20,13 @@
public class QueryBuilder implements EngineElementBuilder {
public Pattern build(final RuleBuildContext context,
final QueryDescr queryDescr) {
- ObjectType objectType = new ClassObjectType( DroolsQuery.class );
+ ObjectType queryObjectType = new ClassObjectType( DroolsQuery.class );
final Pattern pattern = new Pattern( context.getNextPatternId(),
0, // offset is 0 by default
- objectType,
+ queryObjectType,
null );
- final InternalReadAccessor extractor = PatternBuilder.getFieldReadAccessor( context, queryDescr, objectType, "name", null, true );
+ final InternalReadAccessor extractor = PatternBuilder.getFieldReadAccessor( context, queryDescr, queryObjectType, "name", null, true );
final FieldValue field = FieldFactory.getFieldValue( queryDescr.getName(),
ValueType.STRING_TYPE,
@@ -36,12 +37,14 @@
Operator.EQUAL ),
field );
- PatternBuilder.registerReadAccessor( context, objectType, "name", constraint );
+ PatternBuilder.registerReadAccessor( context, queryObjectType, "name", constraint );
// adds appropriate constraint to the pattern
pattern.addConstraint( constraint );
- InternalReadAccessor arrayExtractor = PatternBuilder.getFieldReadAccessor( context, queryDescr, objectType, "arguments", null, true );
+ ObjectType argsObjectType = new ClassObjectType( Arguments.class );
+
+ InternalReadAccessor arrayExtractor = PatternBuilder.getFieldReadAccessor( context, queryDescr, argsObjectType, "arguments", null, true );
String[] params = queryDescr.getParameters();
String[] types = queryDescr.getParameterTypes();
@@ -57,7 +60,7 @@
ArrayElementReader reader = new ArrayElementReader( arrayExtractor,
i,
context.getDialect().getTypeResolver().resolveType( types[i] ) );
- PatternBuilder.registerReadAccessor( context, objectType, "arguments", reader );
+ PatternBuilder.registerReadAccessor( context, argsObjectType, "arguments", reader );
declr.setReadAccessor( reader );
Added: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/DroolsTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/DroolsTest.java (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/DroolsTest.java 2010-04-07 22:30:27 UTC (rev 32475)
@@ -0,0 +1,77 @@
+package org.drools.integrationtests;
+
+import java.io.StringReader;
+
+import junit.framework.TestCase;
+
+import org.drools.RuleBase;
+import org.drools.RuleBaseFactory;
+import org.drools.WorkingMemory;
+import org.drools.compiler.PackageBuilder;
+
+public class DroolsTest extends TestCase {
+ private final static int NUM_FACTS = 20;
+
+ private static int counter;
+
+ public static class Foo {
+ private final int id;
+
+ Foo(int id) {
+ this.id = id;
+ }
+
+ public int getId() {
+ return id;
+ }
+ }
+
+ public static class Bar {
+ private final int id;
+
+ Bar(int id) {
+ this.id = id;
+ }
+
+ public int getId() {
+ return id;
+ }
+ }
+
+ public static void test1() throws Exception {
+ String str = "package org.drools.integrationtests;\n";
+ str += "import org.drools.integrationtests.DroolsTest;\n";
+ str += "import org.drools.integrationtests.DroolsTest.Foo;\n";
+ str += "import org.drools.integrationtests.DroolsTest.Bar;\n";
+ str += "rule test\n";
+ str += "when\n";
+ str += " Foo($p : id, id < " + Integer.toString( NUM_FACTS ) + ")\n";
+ str += " Bar(id == $p)\n";
+ str += "then\n";
+ str += " DroolsTest.incCounter();\n";
+ str += "end\n";
+
+ counter = 0;
+
+ RuleBase rb = RuleBaseFactory.newRuleBase();
+ WorkingMemory wm = rb.newStatefulSession();
+
+ for ( int i = 0; i < NUM_FACTS; i++ ) {
+ wm.insert( new Foo( i ) );
+ wm.insert( new Bar( i ) );
+ }
+ PackageBuilder bld = new PackageBuilder();
+ bld.addPackageFromDrl( new StringReader( str ) );
+ if ( bld.hasErrors() ) {
+ fail( bld.getErrors().toString() );
+ }
+
+ rb.addPackage( bld.getPackage() );
+ wm.fireAllRules();
+ System.out.println( counter + ":" + (counter == NUM_FACTS ? "passed" : "failed" ));
+ }
+
+ public static void incCounter() {
+ ++counter;
+ }
+}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java 2010-04-07 22:23:52 UTC (rev 32474)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java 2010-04-07 22:30:27 UTC (rev 32475)
@@ -22,6 +22,7 @@
import static org.mockito.Mockito.verify;
import java.io.IOException;
+import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.ObjectInput;
import java.io.ObjectOutput;
@@ -33,12 +34,10 @@
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
-import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Map;
-import java.util.Set;
import junit.framework.Assert;
import junit.framework.TestCase;
@@ -62,7 +61,6 @@
import org.drools.FromTestClass;
import org.drools.Guess;
import org.drools.IndexedNumber;
-import org.drools.InsertedObject;
import org.drools.KnowledgeBase;
import org.drools.KnowledgeBaseFactory;
import org.drools.Message;
@@ -79,8 +77,6 @@
import org.drools.Pet;
import org.drools.PolymorphicFact;
import org.drools.Primitives;
-import org.drools.QueryResult;
-import org.drools.QueryResults;
import org.drools.RandomNumber;
import org.drools.RuleBase;
import org.drools.RuleBaseConfiguration;
@@ -93,11 +89,8 @@
import org.drools.StatelessSession;
import org.drools.TestParam;
import org.drools.Win;
-import org.drools.Worker;
import org.drools.WorkingMemory;
import org.drools.Cheesery.Maturity;
-import org.drools.base.ClassObjectType;
-import org.drools.base.DroolsQuery;
import org.drools.builder.KnowledgeBuilder;
import org.drools.builder.KnowledgeBuilderError;
import org.drools.builder.KnowledgeBuilderErrors;
@@ -108,7 +101,6 @@
import org.drools.common.DefaultFactHandle;
import org.drools.common.DisconnectedFactHandle;
import org.drools.common.InternalFactHandle;
-import org.drools.common.InternalRuleBase;
import org.drools.compiler.DescrBuildError;
import org.drools.compiler.DrlParser;
import org.drools.compiler.DroolsError;
@@ -118,9 +110,6 @@
import org.drools.compiler.ParserError;
import org.drools.compiler.PackageBuilder.PackageMergeException;
import org.drools.compiler.xml.XmlDumper;
-import org.drools.core.util.Entry;
-import org.drools.core.util.ObjectHashSet;
-import org.drools.core.util.ObjectHashMap.ObjectEntry;
import org.drools.definition.KnowledgePackage;
import org.drools.definition.type.FactType;
import org.drools.event.ActivationCancelledEvent;
@@ -144,10 +133,9 @@
import org.drools.lang.descr.PackageDescr;
import org.drools.lang.descr.RuleDescr;
import org.drools.marshalling.MarshallerFactory;
-import org.drools.reteoo.EntryPointNode;
import org.drools.reteoo.LeftTuple;
-import org.drools.reteoo.ObjectTypeNode;
import org.drools.reteoo.ReteooRuleBase;
+import org.drools.reteoo.ReteooRuleBase;
import org.drools.reteoo.ReteooWorkingMemory;
import org.drools.rule.InvalidRulePackage;
import org.drools.rule.Package;
@@ -155,10 +143,8 @@
import org.drools.runtime.Globals;
import org.drools.runtime.StatefulKnowledgeSession;
import org.drools.runtime.rule.WorkingMemoryEntryPoint;
-import org.drools.runtime.rule.impl.FlatQueryResults;
import org.drools.spi.ConsequenceExceptionHandler;
import org.drools.spi.GlobalResolver;
-import org.drools.spi.ObjectType;
/** Run all the tests with the ReteOO engine implementation */
public class MiscTest extends TestCase {
@@ -2112,28 +2098,7 @@
}
- public void testQuery() throws Exception {
- final PackageBuilder builder = new PackageBuilder();
- builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "simple_query_test.drl" ) ) );
- final Package pkg = builder.getPackage();
- RuleBase ruleBase = getRuleBase();
- ruleBase.addPackage( pkg );
-
- //ruleBase = SerializationHelper.serializeObject( ruleBase );
- StatefulSession session = ruleBase.newStatefulSession();
-
- final Cheese stilton = new Cheese( "stinky",
- 5 );
- session.insert( stilton );
- // session = SerializationHelper.getSerialisedStatefulSession( session,
- // ruleBase );
- final QueryResults results = session.getQueryResults( "simple query" );
- assertEquals( 1,
- results.size() );
-
- }
-
public void testEval() throws Exception {
final PackageBuilder builder = new PackageBuilder();
builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "eval_rule_test.drl" ) ) );
@@ -3225,233 +3190,7 @@
}
}
- public void testQuery2() throws Exception {
- final PackageBuilder builder = new PackageBuilder();
- builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_Query.drl" ) ) );
- RuleBase ruleBase = getRuleBase();
- ruleBase.addPackage( builder.getPackage() );
- ruleBase = SerializationHelper.serializeObject( ruleBase );
-
- final WorkingMemory workingMemory = ruleBase.newStatefulSession();
- workingMemory.fireAllRules();
-
- final QueryResults results = workingMemory.getQueryResults( "assertedobjquery" );
- assertEquals( 1,
- results.size() );
- assertEquals( new InsertedObject( "value1" ),
- results.get( 0 ).get( 0 ) );
- }
-
- public void testQueryWithParams() throws Exception {
- final PackageBuilder builder = new PackageBuilder();
- builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_QueryWithParams.drl" ) ) );
-
- RuleBase ruleBase = getRuleBase();
- ruleBase.addPackage( builder.getPackage() );
- ruleBase = SerializationHelper.serializeObject( ruleBase );
-
- final WorkingMemory workingMemory = ruleBase.newStatefulSession();
- workingMemory.fireAllRules();
-
- QueryResults results = workingMemory.getQueryResults( "assertedobjquery",
- new String[]{"value1"} );
- assertEquals( 1,
- results.size() );
- assertEquals( new InsertedObject( "value1" ),
- results.get( 0 ).get( 0 ) );
-
- results = workingMemory.getQueryResults( "assertedobjquery",
- new String[]{"value3"} );
- assertEquals( 0,
- results.size() );
-
- results = workingMemory.getQueryResults( "assertedobjquery2",
- new String[]{null, "value2"} );
- assertEquals( 1,
- results.size() );
- assertEquals( new InsertedObject( "value2" ),
- results.get( 0 ).get( 0 ) );
-
- results = workingMemory.getQueryResults( "assertedobjquery2",
- new String[]{"value3", "value2"} );
- assertEquals( 1,
- results.size() );
- assertEquals( new InsertedObject( "value2" ),
- results.get( 0 ).get( 0 ) );
- }
-
- public void testQueryWithParamsOnKnowledgeApi() throws Exception {
- KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
- kbuilder.add( ResourceFactory.newClassPathResource( "test_QueryWithParams.drl",
- getClass() ),
- 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();
- ksession.fireAllRules();
-
- org.drools.runtime.rule.QueryResults results = ksession.getQueryResults( "assertedobjquery",
- new String[]{"value1"} );
- assertEquals( 1,
- results.size() );
- // assertEquals( new InsertedObject( "value1" ),
- // results.get( 0 ).get( 0 ) );
-
- results = ksession.getQueryResults( "assertedobjquery",
- new String[]{"value3"} );
- assertEquals( 0,
- results.size() );
-
- results = ksession.getQueryResults( "assertedobjquery2",
- new String[]{null, "value2"} );
- assertEquals( 1,
- results.size() );
-
- assertEquals( new InsertedObject( "value2" ),
- ((org.drools.runtime.rule.QueryResultsRow) results.iterator().next()).get( "assertedobj" ) );
-
- results = ksession.getQueryResults( "assertedobjquery2",
- new String[]{"value3", "value2"} );
- assertEquals( 1,
- results.size() );
- assertEquals( new InsertedObject( "value2" ),
- ((org.drools.runtime.rule.QueryResultsRow) results.iterator().next()).get( "assertedobj" ) );
- }
-
- public void testQueryWithMultipleResultsOnKnowledgeApi() throws Exception {
- String str = "";
- str += "package org.drools.test \n";
- str += "import org.drools.Cheese \n";
- str += "query cheeses \n";
- str += " stilton : Cheese(type == 'stilton') \n";
- str += " cheddar : Cheese(type == 'cheddar', 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 );
-
- Set set = new HashSet();
- List list = new ArrayList();
- list.add( stilton1 );
- list.add( cheddar1 );
- set.add( list );
-
- list = new ArrayList();
- list.add( stilton2 );
- list.add( cheddar2 );
- set.add( list );
-
- list = new ArrayList();
- list.add( stilton3 );
- list.add( cheddar3 );
- set.add( list );
-
- ksession.insert( stilton1 );
- ksession.insert( stilton2 );
- ksession.insert( stilton3 );
- ksession.insert( cheddar1 );
- ksession.insert( cheddar2 );
- ksession.insert( cheddar3 );
-
- org.drools.runtime.rule.QueryResults results = ksession.getQueryResults( "cheeses" );
- assertEquals( 3,
- results.size() );
- assertEquals( 2,
- results.getIdentifiers().length );
- Set newSet = new HashSet();
- for ( org.drools.runtime.rule.QueryResultsRow result : results ) {
- list = new ArrayList();
- list.add( result.get( "stilton" ) );
- list.add( result.get( "cheddar" ) );
- newSet.add( list );
- }
- assertEquals( set,
- newSet );
-
- FlatQueryResults flatResults = new FlatQueryResults( ((StatefulKnowledgeSessionImpl) ksession).session.getQueryResults( "cheeses" ) );
- assertEquals( 3,
- flatResults.size() );
- assertEquals( 2,
- flatResults.getIdentifiers().length );
- newSet = new HashSet();
- for ( org.drools.runtime.rule.QueryResultsRow result : flatResults ) {
- list = new ArrayList();
- list.add( result.get( "stilton" ) );
- list.add( result.get( "cheddar" ) );
- newSet.add( list );
- }
- assertEquals( set,
- newSet );
- }
-
- public void testTwoQuerries() throws Exception {
- // @see JBRULES-410 More than one Query definition causes an incorrect
- // Rete network to be built.
-
- final PackageBuilder builder = new PackageBuilder();
- builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_TwoQuerries.drl" ) ) );
- final Package pkg = builder.getPackage();
-
- RuleBase ruleBase = getRuleBase();
- ruleBase.addPackage( pkg );
- ruleBase = SerializationHelper.serializeObject( ruleBase );
- final WorkingMemory workingMemory = ruleBase.newStatefulSession();
-
- final Cheese stilton = new Cheese( "stinky",
- 5 );
- workingMemory.insert( stilton );
- final Person per1 = new Person( "stinker",
- "smelly feet",
- 70 );
- final Person per2 = new Person( "skunky",
- "smelly armpits",
- 40 );
-
- workingMemory.insert( per1 );
- workingMemory.insert( per2 );
-
- QueryResults results = workingMemory.getQueryResults( "find stinky cheeses" );
- assertEquals( 1,
- results.size() );
-
- results = workingMemory.getQueryResults( "find pensioners" );
- assertEquals( 1,
- results.size() );
- }
-
public void testInsurancePricingExample() throws Exception {
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add( ResourceFactory.newClassPathResource( "insurance_pricing_example.drl", getClass() ), ResourceType.DRL );
@@ -3572,92 +3311,8 @@
ksession.fireAllRules();
}
- public void testDoubleQueryWithExists() throws Exception {
- final PackageBuilder builder = new PackageBuilder();
- builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_DoubleQueryWithExists.drl" ) ) );
- final Package pkg = builder.getPackage();
- RuleBase ruleBase = getRuleBase();
- ruleBase.addPackage( pkg );
- ruleBase = SerializationHelper.serializeObject( ruleBase );
- final WorkingMemory workingMemory = ruleBase.newStatefulSession();
- final Person p1 = new Person( "p1",
- "stilton",
- 20 );
- p1.setStatus( "europe" );
- final FactHandle c1FactHandle = workingMemory.insert( p1 );
- final Person p2 = new Person( "p2",
- "stilton",
- 30 );
- p2.setStatus( "europe" );
- final FactHandle c2FactHandle = workingMemory.insert( p2 );
- final Person p3 = new Person( "p3",
- "stilton",
- 40 );
- p3.setStatus( "europe" );
- final FactHandle c3FactHandle = workingMemory.insert( p3 );
- workingMemory.fireAllRules();
-
- QueryResults queryResults = workingMemory.getQueryResults( "2 persons with the same status" );
- assertEquals( 2,
- queryResults.size() );
-
- // europe=[ 1, 2 ], america=[ 3 ]
- p3.setStatus( "america" );
- workingMemory.update( c3FactHandle,
- p3 );
- workingMemory.fireAllRules();
- queryResults = workingMemory.getQueryResults( "2 persons with the same status" );
- assertEquals( 1,
- queryResults.size() );
-
- // europe=[ 1 ], america=[ 2, 3 ]
- p2.setStatus( "america" );
- workingMemory.update( c2FactHandle,
- p2 );
- workingMemory.fireAllRules();
- queryResults = workingMemory.getQueryResults( "2 persons with the same status" );
- assertEquals( 1,
- queryResults.size() );
-
- // europe=[ ], america=[ 1, 2, 3 ]
- p1.setStatus( "america" );
- workingMemory.update( c1FactHandle,
- p1 );
- workingMemory.fireAllRules();
- queryResults = workingMemory.getQueryResults( "2 persons with the same status" );
- assertEquals( 2,
- queryResults.size() );
-
- // europe=[ 2 ], america=[ 1, 3 ]
- p2.setStatus( "europe" );
- workingMemory.update( c2FactHandle,
- p2 );
- workingMemory.fireAllRules();
- queryResults = workingMemory.getQueryResults( "2 persons with the same status" );
- assertEquals( 1,
- queryResults.size() );
-
- // europe=[ 1, 2 ], america=[ 3 ]
- p1.setStatus( "europe" );
- workingMemory.update( c1FactHandle,
- p1 );
- workingMemory.fireAllRules();
- queryResults = workingMemory.getQueryResults( "2 persons with the same status" );
- assertEquals( 1,
- queryResults.size() );
-
- // europe=[ 1, 2, 3 ], america=[ ]
- p3.setStatus( "europe" );
- workingMemory.update( c3FactHandle,
- p3 );
- workingMemory.fireAllRules();
- queryResults = workingMemory.getQueryResults( "2 persons with the same status" );
- assertEquals( 2,
- queryResults.size() );
- }
-
public void testFunctionWithPrimitives() throws Exception {
final PackageBuilder builder = new PackageBuilder();
builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_FunctionWithPrimitives.drl" ) ) );
@@ -5868,28 +5523,6 @@
objectWithSet.getMessage() );
}
- public void testQueryWithCollect() throws Exception {
- final PackageBuilder builder = new PackageBuilder();
- builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_Query.drl" ) ) );
-
- RuleBase ruleBase = getRuleBase();
- ruleBase.addPackage( builder.getPackage() );
- ruleBase = SerializationHelper.serializeObject( ruleBase );
-
- final WorkingMemory workingMemory = ruleBase.newStatefulSession();
- workingMemory.fireAllRules();
-
- final QueryResults results = workingMemory.getQueryResults( "collect objects" );
- assertEquals( 1,
- results.size() );
-
- final QueryResult result = results.get( 0 );
- final List list = (List) result.get( "$list" );
-
- assertEquals( 2,
- list.size() );
- }
-
public void testNestedAccessors() throws Exception {
final PackageBuilder builder = new PackageBuilder();
builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_NestedAccessors.drl" ) ) );
@@ -7120,76 +6753,6 @@
assertEquals( 3, list.size() );
}
- public void testDroolsQueryCleanup() {
- KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
- kbuilder.add( ResourceFactory.newClassPathResource( "test_QueryMemoryLeak.drl",
- getClass() ),
- ResourceType.DRL );
- KnowledgeBuilderErrors errors = kbuilder.getErrors();
- if ( errors.size() > 0 ) {
- for ( KnowledgeBuilderError error : errors ) {
- System.err.println( error );
- }
- throw new IllegalArgumentException( "Could not parse knowledge." );
- }
- KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
- kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
- StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
-
- String workerId = "B1234";
- Worker worker = new Worker();
- worker.setId( workerId );
-
- org.drools.runtime.rule.FactHandle handle = ksession.insert( worker );
- ksession.fireAllRules();
-
- assertNotNull( handle );
-
- Object retractedWorker = null;
- for ( int i = 0; i < 100; i++ ) {
- retractedWorker = (Object) ksession.getQueryResults( "getWorker",
- new Object[]{workerId} );
- }
-
- assertNotNull( retractedWorker );
-
- StatefulKnowledgeSessionImpl sessionImpl = (StatefulKnowledgeSessionImpl) ksession;
-
- ReteooWorkingMemory reteWorkingMemory = sessionImpl.session;
- AbstractWorkingMemory abstractWorkingMemory = (AbstractWorkingMemory) reteWorkingMemory;
-
- InternalRuleBase ruleBase = (InternalRuleBase) abstractWorkingMemory.getRuleBase();
- Collection<EntryPointNode> entryPointNodes = ruleBase.getRete().getEntryPointNodes().values();
-
- EntryPointNode defaultEntryPointNode = null;
- for ( EntryPointNode epNode : entryPointNodes ) {
- if ( epNode.getEntryPoint().getEntryPointId() == "DEFAULT" ) {
- defaultEntryPointNode = epNode;
- break;
- }
- }
- assertNotNull( defaultEntryPointNode );
-
- Map<ObjectType, ObjectTypeNode> obnodes = defaultEntryPointNode.getObjectTypeNodes();
-
- ObjectType key = new ClassObjectType( DroolsQuery.class );
- ObjectTypeNode droolsQueryNode = obnodes.get( key );
- ObjectHashSet droolsQueryMemory = (ObjectHashSet) abstractWorkingMemory.getNodeMemory( droolsQueryNode );
- assertEquals( 0,
- droolsQueryMemory.size() );
-
- Entry[] entries = droolsQueryMemory.getTable();
- int entryCounter = 0;
- for ( Entry entry : entries ) {
- if ( entry != null ) {
- entryCounter++;
- ObjectEntry oEntry = (ObjectEntry) entry;
- DefaultFactHandle factHandle = (DefaultFactHandle) oEntry.getValue();
- assertNull( factHandle.getObject() );
- }
- }
- }
-
public void testJBRules2140() {
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add( ResourceFactory.newClassPathResource( "test_JBRules2140.drl",
@@ -7338,8 +6901,7 @@
// XXX: Fails here, this worked in revision 30833
ksession.insert( new Pet("Toni") );
}
-
-
+
public void testSharedLIANodeRemoval() throws IOException, DroolsParserException {
String str = "global java.util.List list;\n";
str += "rule \"test\"\n";
@@ -7375,4 +6937,5 @@
assertEquals(1, list.size() );
}
+
}
Added: 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 (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/QueryTest.java 2010-04-07 22:30:27 UTC (rev 32475)
@@ -0,0 +1,566 @@
+package org.drools.integrationtests;
+
+import java.io.InputStreamReader;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.drools.Cheese;
+import org.drools.FactHandle;
+import org.drools.InsertedObject;
+import org.drools.KnowledgeBase;
+import org.drools.KnowledgeBaseFactory;
+import org.drools.Person;
+import org.drools.QueryResult;
+import org.drools.QueryResults;
+import org.drools.RuleBase;
+import org.drools.RuleBaseConfiguration;
+import org.drools.RuleBaseFactory;
+import org.drools.StatefulSession;
+import org.drools.Worker;
+import org.drools.WorkingMemory;
+import org.drools.base.ClassObjectType;
+import org.drools.base.DroolsQuery;
+import org.drools.builder.KnowledgeBuilder;
+import org.drools.builder.KnowledgeBuilderError;
+import org.drools.builder.KnowledgeBuilderErrors;
+import org.drools.builder.KnowledgeBuilderFactory;
+import org.drools.builder.ResourceType;
+import org.drools.common.AbstractWorkingMemory;
+import org.drools.common.DefaultFactHandle;
+import org.drools.common.InternalRuleBase;
+import org.drools.compiler.PackageBuilder;
+import org.drools.core.util.Entry;
+import org.drools.core.util.ObjectHashSet;
+import org.drools.core.util.ObjectHashMap.ObjectEntry;
+import org.drools.impl.StatefulKnowledgeSessionImpl;
+import org.drools.io.ResourceFactory;
+import org.drools.reteoo.EntryPointNode;
+import org.drools.reteoo.ObjectTypeNode;
+import org.drools.reteoo.ReteooWorkingMemory;
+import org.drools.rule.Package;
+import org.drools.rule.Variable;
+import org.drools.runtime.StatefulKnowledgeSession;
+import org.drools.runtime.rule.impl.FlatQueryResults;
+import org.drools.spi.ObjectType;
+
+import junit.framework.TestCase;
+
+public class QueryTest extends TestCase {
+ protected RuleBase getRuleBase() throws Exception {
+
+ RuleBaseConfiguration config = new RuleBaseConfiguration();
+ config.setMultithreadEvaluation( false );
+ return RuleBaseFactory.newRuleBase( RuleBase.RETEOO,
+ config );
+ }
+
+
+ public void testQuery() throws Exception {
+ final PackageBuilder builder = new PackageBuilder();
+ builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "simple_query_test.drl" ) ) );
+ final Package pkg = builder.getPackage();
+
+ RuleBase ruleBase = getRuleBase();
+ ruleBase.addPackage( pkg );
+
+ //ruleBase = SerializationHelper.serializeObject( ruleBase );
+ StatefulSession session = ruleBase.newStatefulSession();
+
+ final Cheese stilton = new Cheese( "stinky",
+ 5 );
+ session.insert( stilton );
+ // session = SerializationHelper.getSerialisedStatefulSession( session,
+ // ruleBase );
+ final QueryResults results = session.getQueryResults( "simple query" );
+ assertEquals( 1,
+ results.size() );
+
+ }
+
+ public void testQuery2() throws Exception {
+ final PackageBuilder builder = new PackageBuilder();
+ builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_Query.drl" ) ) );
+
+ RuleBase ruleBase = getRuleBase();
+ ruleBase.addPackage( builder.getPackage() );
+ ruleBase = SerializationHelper.serializeObject( ruleBase );
+
+ final WorkingMemory workingMemory = ruleBase.newStatefulSession();
+ workingMemory.fireAllRules();
+
+ final QueryResults results = workingMemory.getQueryResults( "assertedobjquery" );
+ assertEquals( 1,
+ results.size() );
+ assertEquals( new InsertedObject( "value1" ),
+ results.get( 0 ).get( 0 ) );
+ }
+
+ public void testQueryWithParams() throws Exception {
+ final PackageBuilder builder = new PackageBuilder();
+ builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_QueryWithParams.drl" ) ) );
+
+ RuleBase ruleBase = getRuleBase();
+ ruleBase.addPackage( builder.getPackage() );
+ ruleBase = SerializationHelper.serializeObject( ruleBase );
+
+ final WorkingMemory workingMemory = ruleBase.newStatefulSession();
+ workingMemory.fireAllRules();
+
+ QueryResults results = workingMemory.getQueryResults( "assertedobjquery",
+ new String[]{"value1"} );
+ assertEquals( 1,
+ results.size() );
+ assertEquals( new InsertedObject( "value1" ),
+ results.get( 0 ).get( 0 ) );
+
+ results = workingMemory.getQueryResults( "assertedobjquery",
+ new String[]{"value3"} );
+ assertEquals( 0,
+ results.size() );
+
+ results = workingMemory.getQueryResults( "assertedobjquery2",
+ new String[]{null, "value2"} );
+ assertEquals( 1,
+ results.size() );
+ assertEquals( new InsertedObject( "value2" ),
+ results.get( 0 ).get( 0 ) );
+
+ results = workingMemory.getQueryResults( "assertedobjquery2",
+ new String[]{"value3", "value2"} );
+ assertEquals( 1,
+ results.size() );
+ assertEquals( new InsertedObject( "value2" ),
+ results.get( 0 ).get( 0 ) );
+ }
+
+ public void testQueryWithParamsOnKnowledgeApi() throws Exception {
+ KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+ kbuilder.add( ResourceFactory.newClassPathResource( "test_QueryWithParams.drl",
+ getClass() ),
+ 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();
+ ksession.fireAllRules();
+
+ org.drools.runtime.rule.QueryResults results = ksession.getQueryResults( "assertedobjquery",
+ new String[]{"value1"} );
+ assertEquals( 1,
+ results.size() );
+ // assertEquals( new InsertedObject( "value1" ),
+ // results.get( 0 ).get( 0 ) );
+
+ results = ksession.getQueryResults( "assertedobjquery",
+ new String[]{"value3"} );
+ assertEquals( 0,
+ results.size() );
+
+ results = ksession.getQueryResults( "assertedobjquery2",
+ new String[]{null, "value2"} );
+ assertEquals( 1,
+ results.size() );
+
+ assertEquals( new InsertedObject( "value2" ),
+ ((org.drools.runtime.rule.QueryResultsRow) results.iterator().next()).get( "assertedobj" ) );
+
+ results = ksession.getQueryResults( "assertedobjquery2",
+ new String[]{"value3", "value2"} );
+ assertEquals( 1,
+ results.size() );
+ assertEquals( new InsertedObject( "value2" ),
+ ((org.drools.runtime.rule.QueryResultsRow) results.iterator().next()).get( "assertedobj" ) );
+ }
+
+ public void testQueryWithMultipleResultsOnKnowledgeApi() throws Exception {
+ String str = "";
+ str += "package org.drools.test \n";
+ str += "import org.drools.Cheese \n";
+ str += "query cheeses \n";
+ str += " stilton : Cheese(type == 'stilton') \n";
+ str += " cheddar : Cheese(type == 'cheddar', 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 );
+
+ Set set = new HashSet();
+ List list = new ArrayList();
+ list.add( stilton1 );
+ list.add( cheddar1 );
+ set.add( list );
+
+ list = new ArrayList();
+ list.add( stilton2 );
+ list.add( cheddar2 );
+ set.add( list );
+
+ list = new ArrayList();
+ list.add( stilton3 );
+ list.add( cheddar3 );
+ set.add( list );
+
+ ksession.insert( stilton1 );
+ ksession.insert( stilton2 );
+ ksession.insert( stilton3 );
+ ksession.insert( cheddar1 );
+ ksession.insert( cheddar2 );
+ ksession.insert( cheddar3 );
+
+ org.drools.runtime.rule.QueryResults results = ksession.getQueryResults( "cheeses" );
+ assertEquals( 3,
+ results.size() );
+ assertEquals( 2,
+ results.getIdentifiers().length );
+ Set newSet = new HashSet();
+ for ( org.drools.runtime.rule.QueryResultsRow result : results ) {
+ list = new ArrayList();
+ list.add( result.get( "stilton" ) );
+ list.add( result.get( "cheddar" ) );
+ newSet.add( list );
+ }
+ assertEquals( set,
+ newSet );
+
+ FlatQueryResults flatResults = new FlatQueryResults( ((StatefulKnowledgeSessionImpl) ksession).session.getQueryResults( "cheeses" ) );
+ assertEquals( 3,
+ flatResults.size() );
+ assertEquals( 2,
+ flatResults.getIdentifiers().length );
+ newSet = new HashSet();
+ for ( org.drools.runtime.rule.QueryResultsRow result : flatResults ) {
+ list = new ArrayList();
+ list.add( result.get( "stilton" ) );
+ list.add( result.get( "cheddar" ) );
+ newSet.add( list );
+ }
+ assertEquals( set,
+ newSet );
+ }
+
+ public void testTwoQuerries() throws Exception {
+ // @see JBRULES-410 More than one Query definition causes an incorrect
+ // Rete network to be built.
+
+ final PackageBuilder builder = new PackageBuilder();
+ builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_TwoQuerries.drl" ) ) );
+ final Package pkg = builder.getPackage();
+
+ RuleBase ruleBase = getRuleBase();
+ ruleBase.addPackage( pkg );
+ ruleBase = SerializationHelper.serializeObject( ruleBase );
+ final WorkingMemory workingMemory = ruleBase.newStatefulSession();
+
+ final Cheese stilton = new Cheese( "stinky",
+ 5 );
+ workingMemory.insert( stilton );
+ final Person per1 = new Person( "stinker",
+ "smelly feet",
+ 70 );
+ final Person per2 = new Person( "skunky",
+ "smelly armpits",
+ 40 );
+
+ workingMemory.insert( per1 );
+ workingMemory.insert( per2 );
+
+ QueryResults results = workingMemory.getQueryResults( "find stinky cheeses" );
+ assertEquals( 1,
+ results.size() );
+
+ results = workingMemory.getQueryResults( "find pensioners" );
+ assertEquals( 1,
+ results.size() );
+ }
+
+ public void testDoubleQueryWithExists() throws Exception {
+ final PackageBuilder builder = new PackageBuilder();
+ builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_DoubleQueryWithExists.drl" ) ) );
+ final Package pkg = builder.getPackage();
+
+ RuleBase ruleBase = getRuleBase();
+ ruleBase.addPackage( pkg );
+ ruleBase = SerializationHelper.serializeObject( ruleBase );
+ final WorkingMemory workingMemory = ruleBase.newStatefulSession();
+
+ final Person p1 = new Person( "p1",
+ "stilton",
+ 20 );
+ p1.setStatus( "europe" );
+ final FactHandle c1FactHandle = workingMemory.insert( p1 );
+ final Person p2 = new Person( "p2",
+ "stilton",
+ 30 );
+ p2.setStatus( "europe" );
+ final FactHandle c2FactHandle = workingMemory.insert( p2 );
+ final Person p3 = new Person( "p3",
+ "stilton",
+ 40 );
+ p3.setStatus( "europe" );
+ final FactHandle c3FactHandle = workingMemory.insert( p3 );
+ workingMemory.fireAllRules();
+
+ QueryResults queryResults = workingMemory.getQueryResults( "2 persons with the same status" );
+ assertEquals( 2,
+ queryResults.size() );
+
+ // europe=[ 1, 2 ], america=[ 3 ]
+ p3.setStatus( "america" );
+ workingMemory.update( c3FactHandle,
+ p3 );
+ workingMemory.fireAllRules();
+ queryResults = workingMemory.getQueryResults( "2 persons with the same status" );
+ assertEquals( 1,
+ queryResults.size() );
+
+ // europe=[ 1 ], america=[ 2, 3 ]
+ p2.setStatus( "america" );
+ workingMemory.update( c2FactHandle,
+ p2 );
+ workingMemory.fireAllRules();
+ queryResults = workingMemory.getQueryResults( "2 persons with the same status" );
+ assertEquals( 1,
+ queryResults.size() );
+
+ // europe=[ ], america=[ 1, 2, 3 ]
+ p1.setStatus( "america" );
+ workingMemory.update( c1FactHandle,
+ p1 );
+ workingMemory.fireAllRules();
+ queryResults = workingMemory.getQueryResults( "2 persons with the same status" );
+ assertEquals( 2,
+ queryResults.size() );
+
+ // europe=[ 2 ], america=[ 1, 3 ]
+ p2.setStatus( "europe" );
+ workingMemory.update( c2FactHandle,
+ p2 );
+ workingMemory.fireAllRules();
+ queryResults = workingMemory.getQueryResults( "2 persons with the same status" );
+ assertEquals( 1,
+ queryResults.size() );
+
+ // europe=[ 1, 2 ], america=[ 3 ]
+ p1.setStatus( "europe" );
+ workingMemory.update( c1FactHandle,
+ p1 );
+ workingMemory.fireAllRules();
+ queryResults = workingMemory.getQueryResults( "2 persons with the same status" );
+ assertEquals( 1,
+ queryResults.size() );
+
+ // europe=[ 1, 2, 3 ], america=[ ]
+ p3.setStatus( "europe" );
+ workingMemory.update( c3FactHandle,
+ p3 );
+ workingMemory.fireAllRules();
+ queryResults = workingMemory.getQueryResults( "2 persons with the same status" );
+ assertEquals( 2,
+ queryResults.size() );
+ }
+
+ public void testQueryWithCollect() throws Exception {
+ final PackageBuilder builder = new PackageBuilder();
+ builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_Query.drl" ) ) );
+
+ RuleBase ruleBase = getRuleBase();
+ ruleBase.addPackage( builder.getPackage() );
+ ruleBase = SerializationHelper.serializeObject( ruleBase );
+
+ final WorkingMemory workingMemory = ruleBase.newStatefulSession();
+ workingMemory.fireAllRules();
+
+ final QueryResults results = workingMemory.getQueryResults( "collect objects" );
+ assertEquals( 1,
+ results.size() );
+
+ final QueryResult result = results.get( 0 );
+ final List list = (List) result.get( "$list" );
+
+ assertEquals( 2,
+ list.size() );
+ }
+
+ public void testDroolsQueryCleanup() {
+ KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+ kbuilder.add( ResourceFactory.newClassPathResource( "test_QueryMemoryLeak.drl",
+ getClass() ),
+ ResourceType.DRL );
+ KnowledgeBuilderErrors errors = kbuilder.getErrors();
+ if ( errors.size() > 0 ) {
+ for ( KnowledgeBuilderError error : errors ) {
+ System.err.println( error );
+ }
+ throw new IllegalArgumentException( "Could not parse knowledge." );
+ }
+ KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+ kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
+ StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+
+ String workerId = "B1234";
+ Worker worker = new Worker();
+ worker.setId( workerId );
+
+ org.drools.runtime.rule.FactHandle handle = ksession.insert( worker );
+ ksession.fireAllRules();
+
+ assertNotNull( handle );
+
+ Object retractedWorker = null;
+ for ( int i = 0; i < 100; i++ ) {
+ retractedWorker = (Object) ksession.getQueryResults( "getWorker",
+ new Object[]{workerId} );
+ }
+
+ assertNotNull( retractedWorker );
+
+ StatefulKnowledgeSessionImpl sessionImpl = (StatefulKnowledgeSessionImpl) ksession;
+
+ ReteooWorkingMemory reteWorkingMemory = sessionImpl.session;
+ AbstractWorkingMemory abstractWorkingMemory = (AbstractWorkingMemory) reteWorkingMemory;
+
+ InternalRuleBase ruleBase = (InternalRuleBase) abstractWorkingMemory.getRuleBase();
+ Collection<EntryPointNode> entryPointNodes = ruleBase.getRete().getEntryPointNodes().values();
+
+ EntryPointNode defaultEntryPointNode = null;
+ for ( EntryPointNode epNode : entryPointNodes ) {
+ if ( epNode.getEntryPoint().getEntryPointId() == "DEFAULT" ) {
+ defaultEntryPointNode = epNode;
+ break;
+ }
+ }
+ assertNotNull( defaultEntryPointNode );
+
+ Map<ObjectType, ObjectTypeNode> obnodes = defaultEntryPointNode.getObjectTypeNodes();
+
+ ObjectType key = new ClassObjectType( DroolsQuery.class );
+ ObjectTypeNode droolsQueryNode = obnodes.get( key );
+ ObjectHashSet droolsQueryMemory = (ObjectHashSet) abstractWorkingMemory.getNodeMemory( droolsQueryNode );
+ assertEquals( 0,
+ droolsQueryMemory.size() );
+
+ Entry[] entries = droolsQueryMemory.getTable();
+ int entryCounter = 0;
+ for ( Entry entry : entries ) {
+ if ( entry != null ) {
+ entryCounter++;
+ ObjectEntry oEntry = (ObjectEntry) entry;
+ DefaultFactHandle factHandle = (DefaultFactHandle) oEntry.getValue();
+ assertNull( factHandle.getObject() );
+ }
+ }
+ }
+
+ public void testQueriesWithVariableUnification() throws Exception {
+ String str = "";
+ str += "package org.drools.test \n";
+ str += "import org.drools.Person \n";
+ str += "query peeps( String $name, String $likes, int $age ) \n";
+ str += " $p : Person(name == $name, likes == $likes, age == $age) \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();
+ Person p1 = new Person( "darth", "stilton", 100 );
+ Person p2 = new Person( "yoda", "stilton", 300 );
+ Person p3 = new Person( "luke", "brie", 300 );
+ Person p4 = new Person( "bobba", "cheddar", 300 );
+
+
+ ksession.insert( p1 );
+ ksession.insert( p2 );
+ ksession.insert( p3 );
+ ksession.insert( p4 );
+
+
+ //org.drools.runtime.rule.QueryResults results = ksession.getQueryResults( "peeps", new Object[] {"darth", "stilton", 100} );
+ //org.drools.runtime.rule.QueryResults results = ksession.getQueryResults( "peeps", new Object[] { new Variable(), "stilton", 300 } );
+ org.drools.runtime.rule.QueryResults results = ksession.getQueryResults( "peeps", new Object[] { new Variable(),new Variable(), 300 } );
+ System.out.println( Arrays.asList( results.getIdentifiers() ) );
+// assertEquals( 4,
+// results.size() );
+ for ( org.drools.runtime.rule.QueryResultsRow row : results ) {
+ for ( String id : results.getIdentifiers() ) {
+ System.out.print( row.get( id ) + ", " );
+ }
+ System.out.println();
+ }
+// assertEquals( 1,
+// results.getIdentifiers().length );
+
+
+// Set newSet = new HashSet();
+// for ( org.drools.runtime.rule.QueryResultsRow result : results ) {
+// list = new ArrayList();
+// list.add( result.get( "stilton" ) );
+// list.add( result.get( "cheddar" ) );
+// newSet.add( list );
+// }
+// assertEquals( set,
+// newSet );
+//
+// FlatQueryResults flatResults = new FlatQueryResults( ((StatefulKnowledgeSessionImpl) ksession).session.getQueryResults( "cheeses" ) );
+// assertEquals( 3,
+// flatResults.size() );
+// assertEquals( 2,
+// flatResults.getIdentifiers().length );
+// newSet = new HashSet();
+// for ( org.drools.runtime.rule.QueryResultsRow result : flatResults ) {
+// list = new ArrayList();
+// list.add( result.get( "stilton" ) );
+// list.add( result.get( "cheddar" ) );
+// newSet.add( list );
+// }
+// assertEquals( set,
+// newSet );
+ }
+
+}
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/testframework/MockWorkingMemory.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/testframework/MockWorkingMemory.java 2010-04-07 22:23:52 UTC (rev 32474)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/testframework/MockWorkingMemory.java 2010-04-07 22:30:27 UTC (rev 32475)
@@ -41,7 +41,9 @@
import org.drools.process.instance.event.SignalManager;
import org.drools.process.instance.timer.TimerManager;
import org.drools.reteoo.LIANodePropagation;
+import org.drools.reteoo.ObjectTypeConf;
import org.drools.reteoo.PartitionTaskManager;
+import org.drools.rule.EntryPoint;
import org.drools.rule.Rule;
import org.drools.rule.TimeMachine;
import org.drools.runtime.Calendars;
@@ -624,4 +626,18 @@
return null;
}
+ public EntryPoint getEntryPoint() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public void insert(InternalFactHandle handle,
+ Object object,
+ Rule rule,
+ Activation activation,
+ ObjectTypeConf typeConf) {
+ // TODO Auto-generated method stub
+
+ }
+
}
Modified: labs/jbossrules/trunk/drools-core/.classpath
===================================================================
--- labs/jbossrules/trunk/drools-core/.classpath 2010-04-07 22:23:52 UTC (rev 32474)
+++ labs/jbossrules/trunk/drools-core/.classpath 2010-04-07 22:30:27 UTC (rev 32475)
@@ -7,20 +7,18 @@
<classpathentry kind="var" path="M2_REPO/javax/activation/activation/1.1/activation-1.1.jar"/>
<classpathentry kind="var" path="M2_REPO/javax/xml/bind/jaxb-api/2.0/jaxb-api-2.0.jar"/>
<classpathentry kind="var" path="M2_REPO/javax/xml/bind/jsr173_api/1.0/jsr173_api-1.0.jar"/>
- <classpathentry kind="var" path="M2_REPO/cglib/cglib-nodep/2.1_3/cglib-nodep-2.1_3.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/antlr/antlr/3.1.3/antlr-3.1.3.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/antlr/antlr-runtime/3.1.3/antlr-runtime-3.1.3.jar"/>
+ <classpathentry kind="var" path="M2_REPO/commons-codec/commons-codec/1.4/commons-codec-1.4.jar"/>
<classpathentry kind="src" path="/drools-api"/>
- <classpathentry kind="var" path="M2_REPO/org/hamcrest/hamcrest-core/1.1/hamcrest-core-1.1.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/hamcrest/hamcrest-library/1.1/hamcrest-library-1.1.jar"/>
<classpathentry kind="var" path="M2_REPO/com/sun/xml/bind/jaxb-impl/2.0.3/jaxb-impl-2.0.3.jar"/>
<classpathentry kind="var" path="M2_REPO/com/sun/xml/bind/jaxb-xjc/2.0.3/jaxb-xjc-2.0.3.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/jmock/jmock/2.5.1/jmock-2.5.1.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/jmock/jmock-legacy/2.5.1/jmock-legacy-2.5.1.jar"/>
- <classpathentry kind="var" path="M2_REPO/junit/junit/4.6/junit-4.6.jar"/>
+ <classpathentry kind="var" path="M2_REPO/junit/junit/4.8.1/junit-4.8.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/mockito/mockito-all/1.8.2/mockito-all-1.8.2.jar"/>
<classpathentry kind="var" path="M2_REPO/org/mvel/mvel2/2.0.16/mvel2-2.0.16.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/objenesis/objenesis/1.0/objenesis-1.0.jar"/>
<classpathentry kind="var" path="M2_REPO/org/apache/felix/org.osgi.compendium/1.4.0/org.osgi.compendium-1.4.0.jar"/>
<classpathentry kind="var" path="M2_REPO/org/apache/felix/org.osgi.core/1.4.0/org.osgi.core-1.4.0.jar"/>
<classpathentry kind="var" path="M2_REPO/xpp3/xpp3_min/1.1.4c/xpp3_min-1.1.4c.jar"/>
<classpathentry kind="var" path="M2_REPO/com/thoughtworks/xstream/xstream/1.3.1/xstream-1.3.1.jar"/>
- <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
</classpath>
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-core/META-INF/MANIFEST.MF
===================================================================
--- labs/jbossrules/trunk/drools-core/META-INF/MANIFEST.MF 2010-04-07 22:23:52 UTC (rev 32474)
+++ labs/jbossrules/trunk/drools-core/META-INF/MANIFEST.MF 2010-04-07 22:30:27 UTC (rev 32475)
@@ -1,287 +1,6 @@
Manifest-Version: 1.0
-Export-Package: org.drools.audit.event;version="5.1.0.SNAPSHOT",org.dr
- ools.process.instance.context.swimlane;uses:="org.drools.process.core
- .context.swimlane,org.drools.process.instance.context,org.drools.proc
- ess.core";version="5.1.0.SNAPSHOT",org.drools.base.dataproviders;uses
- :="org.mvel2.integration,org.drools.base.mvel,org.mvel2,org.drools.ru
- le,org.drools,org.drools.spi,org.drools.core.util";version="5.1.0.SNA
- PSHOT",org.drools.process.core.impl;uses:="org.drools.process.core,or
- g.drools.process.core.datatype,org.drools.process.core.context";versi
- on="5.1.0.SNAPSHOT",org.drools.builder.conf.impl;version="5.1.0.SNAPS
- HOT",org.drools;uses:="org.drools.spi,org.drools.time.impl,org.drools
- .time,org.drools.rule,org.drools.common,org.drools.workflow.instance.
- impl,org.drools.process.core.impl,org.drools.process.instance.impl,or
- g.drools.runtime.rule.impl,org.drools.process.instance,org.drools.con
- flict,org.drools.process.core.datatype,org.mvel2,org.drools.process.c
- ore,org.drools.core.util,org.drools.concurrent,org.drools.event,org.d
- rools.process.instance.event,org.drools.command,org.drools.process.in
- stance.timer";version="5.1.0.SNAPSHOT",org.drools.command.assertion;u
- ses:="org.mvel2,org.drools.command,org.drools.core.util,org.drools.co
- mmand.impl";version="5.1.0.SNAPSHOT",org.drools.workflow.instance.con
- text;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.type;ver
- sion="5.1.0.SNAPSHOT",org.drools.workflow.core;uses:="org.drools.spi,
- org.drools.process.core";version="5.1.0.SNAPSHOT",org.drools.workflow
- .core.impl;uses:="org.drools.workflow.core,org.drools.process.core,or
- g.drools.workflow.core.node,org.drools.process.core.impl";version="5.
- 1.0.SNAPSHOT",org.drools.process.core.validation;version="5.1.0.SNAPS
- HOT",org.drools.command.runtime.process;uses:="javax.xml.bind.annotat
- ion,org.drools.command,org.drools.command.impl,org.drools.process.ins
- tance,org.drools.xml.jaxb.util,javax.xml.bind.annotation.adapters";ve
- rsion="5.1.0.SNAPSHOT",org.drools.runtime.pipeline.impl;uses:="org.dr
- ools.runtime.pipeline,org.drools.command,org.drools.command.runtime.r
- ule,org.mvel2,org.mvel2.compiler,org.drools.common,org.drools.impl,or
- g.drools.rule,org.drools";version="5.1.0.SNAPSHOT",org.drools.conflic
- t;uses:="org.drools.spi,org.drools.rule,org.drools.common";version="5
- .1.0.SNAPSHOT",org.drools.time.impl;uses:="org.drools.time,org.drools
- .common,org.drools";version="5.1.0.SNAPSHOT",org.drools.process.insta
- nce.impl.humantask;uses:="javax.swing,javax.swing.event,javax.swing.b
- order";version="5.1.0.SNAPSHOT",org.drools.process.core.datatype.impl
- ;uses:="org.drools.process.core.datatype";version="5.1.0.SNAPSHOT",or
- g.drools.rule;uses:="org.drools.common,org.drools.spi,org.drools,org.
- drools.core.util,org.drools.base,org.mvel2.integration.impl,org.mvel2
- .integration,org.mvel2.ast,org.drools.base.mvel,org.drools.factmodel,
- org.drools.facttemplates,org.drools.time.impl,org.drools.marshalling.
- impl,org.drools.time";version="5.1.0.SNAPSHOT",org.drools.process.ins
- tance.context;uses:="org.drools.process.instance,org.drools.process.c
- ore";version="5.1.0.SNAPSHOT",org.drools.spi;uses:="org.drools.base,o
- rg.drools.common,org.drools.rule,org.drools,org.drools.core.util,org.
- drools.time,org.drools.concurrent,org.drools.facttemplates,org.drools
- .process.core.context.variable,org.drools.impl,org.drools.process.ins
- tance,org.drools.process.instance.context.variable,org.drools.workflo
- w.instance,org.drools.event";version="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.changes
- et,javax.xml.parsers,org.w3c.dom,org.xml.sax.helpers,org.drools";vers
- ion="5.1.0.SNAPSHOT",org.drools.process.core.context.exception;uses:=
- "org.drools.workflow.core,org.drools.process.core.context,org.drools.
- process.core";version="5.1.0.SNAPSHOT",org.drools.base.field;uses:="o
- rg.drools,org.drools.spi,org.drools.common,org.drools.core.util";vers
- ion="5.1.0.SNAPSHOT",org.drools.base.extractors;uses:="org.drools.com
- mon,org.drools.base,org.drools.spi,org.drools.core.util,org.drools,or
- g.mvel2,org.mvel2.compiler";version="5.1.0.SNAPSHOT",org.drools.audit
- ;uses:="org.drools.event,org.drools.audit.event,org.drools,com.though
- tworks.xstream,org.drools.impl,org.drools.workflow.instance.node,org.
- drools.workflow.core.node,org.drools.common,org.drools.rule,org.drool
- s.workflow.instance,org.drools.command,org.drools.spi,org.drools.comm
- and.impl";version="5.1.0.SNAPSHOT",org.drools.osgi.core;uses:="org.dr
- ools.io.impl,org.drools.impl,org.drools,org.osgi.framework";version="
- 5.1.0.SNAPSHOT",org.drools.impl;uses:="org.drools,org.drools.definiti
- ons.rule.impl,org.drools.event.knowlegebase.impl,org.drools.event,org
- .drools.rule,org.drools.definitions.impl,org.drools.common,org.drools
- .command,org.drools.agent,org.drools.command.impl,org.drools.event.ru
- le.impl,org.drools.spi,org.drools.event.process.impl,org.drools.runti
- me.impl,org.drools.runtime.rule.impl,org.drools.process.instance.even
- t,org.drools.process.instance,org.drools.time,org.drools.base,org.dro
- ols.command.runtime.rule,org.drools.agent.impl,org.drools.core.util";
- version="5.1.0.SNAPSHOT",org.drools.event.knowlegebase.impl;uses:="or
- g.drools";version="5.1.0.SNAPSHOT",org.drools.ruleflow.core;uses:="or
- g.drools.ruleflow.core.factory,org.drools.workflow.core,org.drools.wo
- rkflow.core.impl,org.drools.workflow.core.node,org.drools.process.cor
- e.context.variable,org.drools.process.core.context.exception,org.droo
- ls.process.core.context.swimlane,org.drools.process.core,org.drools.p
- rocess.core.validation,org.drools.process.core.datatype,org.drools.ru
- leflow.core.validation";version="5.1.0.SNAPSHOT",org.drools.workflow.
- instance.impl;uses:="org.drools.workflow.instance.node,org.drools.wor
- kflow.core,org.drools,org.drools.workflow.core.impl,org.drools.common
- ,org.drools.process.instance,org.drools.base,org.drools.workflow.inst
- ance,org.drools.process.instance.context.exception,org.drools.spi,org
- .drools.workflow.instance.impl.factory,org.drools.workflow.core.node,
- org.drools.event,org.drools.process.core,org.mvel2.integration.impl,o
- rg.mvel2.integration,org.drools.process.instance.context.variable,org
- .drools.process.instance.impl,org.drools.process.instance.event";vers
- ion="5.1.0.SNAPSHOT",org.drools.process.core.context.swimlane;uses:="
- org.drools.process.core.context,org.drools.process.core";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.event.rule.impl;uses:="org.drools.common,org.drools.ev
- ent,org.drools,org.drools.spi,org.drools.impl";version="5.1.0.SNAPSHO
- T",org.drools.workflow.core.node;uses:="org.drools.workflow.core,org.
- drools.workflow.core.impl,org.drools.process.core.context,org.drools.
- process.core.impl,org.drools.process.core,org.drools.process.core.eve
- nt,org.drools.process.core.context.variable,org.drools.process.core.d
- atatype,org.drools.process.core.datatype.impl.type,org.drools.process
- .core.timer";version="5.1.0.SNAPSHOT",org.drools.core.util.debug;uses
- :="org.drools.common,org.drools.core.util,org.drools.rule,org.drools.
- impl,org.drools,org.mvel2.integration.impl,org.mvel2.templates,org.mv
- el2.integration,org.mvel2.optimizers,org.mvel2.compiler";version="5.1
- .0.SNAPSHOT",org.drools.base.evaluators;uses:="org.drools.common,org.
- drools.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.
- SNAPSHOT",org.drools.process.core.event;version="5.1.0.SNAPSHOT",org.
- drools.definitions.impl;uses:="org.drools.definitions.rule.impl,org.d
- rools.rule";version="5.1.0.SNAPSHOT",org.drools.process.instance.even
- t;uses:="org.drools.common,org.drools.process.instance,org.drools.mar
- shalling.impl,org.drools";version="5.1.0.SNAPSHOT",org.drools.process
- .instance;uses:="org.drools.process.core.context.variable,org.drools.
- common,org.drools.process.instance.context.variable,org.drools,org.dr
- ools.process.core,org.drools.ruleflow.core,org.drools.ruleflow.instan
- ce";version="5.1.0.SNAPSHOT",org.drools.command.builder;uses:="org.dr
- ools.command,org.drools.command.impl,org.drools.runtime.impl";version
- ="5.1.0.SNAPSHOT",org.drools.xml.jaxb.util;uses:="javax.xml.bind.anno
- tation.adapters,javax.xml.bind.annotation";version="5.1.0.SNAPSHOT",o
- rg.drools.command.runtime;uses:="org.drools.command,org.drools.comman
- d.impl,org.drools.command.runtime.process,javax.xml.bind.annotation,o
- rg.drools.command.runtime.rule,org.drools.impl,org.drools.runtime.imp
- l,org.drools";version="5.1.0.SNAPSHOT",org.drools.process.instance.co
- ntext.variable;uses:="org.drools.common,org.drools.process.core.conte
- xt.variable,org.drools.process.instance,org.drools.event,org.drools,o
- rg.drools.process.instance.context,org.drools.process.core";version="
- 5.1.0.SNAPSHOT",org.drools.ruleflow.core.validation;uses:="org.drools
- .process.core.timer,org.drools.process.core.context.variable,org.droo
- ls.ruleflow.core,org.drools.workflow.core.node,org.drools,org.drools.
- process.core.validation.impl,org.drools.workflow.core,org.drools.work
- flow.core.impl,org.drools.process.core.validation,org.drools.process.
- core.datatype,org.mvel2,org.mvel2.compiler,org.drools.time,org.drools
- .process.core";version="5.1.0.SNAPSHOT",org.drools.process.instance.c
- ontext.exception;uses:="org.drools.common,org.drools.process.core.con
- text.exception,org.drools.process.instance,org.drools.base,org.drools
- .workflow.instance,org.drools,org.drools.workflow.core,org.drools.spi
- ,org.drools.process.instance.context,org.drools.process.core";version
- ="5.1.0.SNAPSHOT",org.drools.command;uses:="org.drools.command.impl,o
- rg.drools.runtime.impl,org.drools.time,org.drools";version="5.1.0.SNA
- PSHOT",org.drools.management;uses:="org.drools.common,javax.managemen
- t,org.drools,javax.management.openmbean,org.drools.base,org.drools.sp
- i,org.drools.event,org.drools.rule";version="5.1.0.SNAPSHOT",org.droo
- ls.process.core.context.variable;uses:="org.drools.process.core.datat
- ype.impl.type,org.drools.process.core.datatype,org.drools.process.cor
- e,org.drools.process.core.context";version="5.1.0.SNAPSHOT",org.drool
- s.process.core.timer;version="5.1.0.SNAPSHOT",org.drools.io.impl;uses
- :="org.drools.io.internal,org.drools,org.drools.core.util";version="5
- .1.0.SNAPSHOT",org.drools.definitions.rule.impl;uses:="org.drools.rul
- e";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.droo
- ls.workflow.instance.node;uses:="org.drools.workflow.instance.impl,or
- g.drools.workflow.core.node,org.drools,org.drools.workflow.core,org.d
- rools.common,org.drools.process.instance,org.drools.base,org.drools.w
- orkflow.instance,org.drools.spi,org.drools.process.instance.impl,org.
- drools.process.core,org.drools.event,org.drools.process.instance.cont
- ext.variable,org.drools.process.core.event,org.drools.process.instanc
- e.context.exception,org.mvel2.integration,org.mvel2,org.drools.proces
- s.instance.context.swimlane,org.drools.rule,org.drools.process.core.t
- imer,org.drools.process.instance.timer,org.drools.time";version="5.1.
- 0.SNAPSHOT",org.drools.event;uses:="org.drools.rule,org.drools.spi,or
- g.drools,org.drools.common,org.drools.process.instance";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.process.impl;uses:="org.drools.event,org.drools,org.dro
- ols.common";version="5.1.0.SNAPSHOT",org.drools.process.instance.impl
- ;uses:="org.drools.process.instance,org.drools.process.core,org.drool
- s.process.core.context.exception,org.drools.process.core.context.vari
- able,org.drools.process.instance.context.swimlane,org.drools.process.
- core.context.swimlane,org.drools.process.instance.impl.factory,org.dr
- ools.process.instance.context.variable,org.drools.process.instance.co
- ntext.exception,org.drools,org.drools.common";version="5.1.0.SNAPSHOT
- ",org.drools.runtime.impl;uses:="javax.xml.bind.annotation,org.drools
- .command,org.drools.command.impl,org.drools.xml.jaxb.util,javax.xml.b
- ind.annotation.adapters";version="5.1.0.SNAPSHOT",org.drools.base.acc
- umulators;uses:="org.drools.common,org.drools.rule,org.drools,org.dro
- ols.spi,org.mvel2.integration,org.drools.base.mvel,org.mvel2";version
- ="5.1.0.SNAPSHOT",org.drools.process.core.validation.impl;uses:="org.
- drools.process.core.validation";version="5.1.0.SNAPSHOT",org.drools.r
- untime.rule.impl;uses:="org.drools.common,org.drools.spi,org.drools.x
- ml.jaxb.util,javax.xml.bind.annotation,org.drools.rule,org.drools,jav
- ax.xml.bind.annotation.adapters";version="5.1.0.SNAPSHOT",org.drools.
- process.instance.timer;uses:="org.drools.time,org.drools.process.inst
- ance.event,org.drools,org.drools.process.instance,org.drools.time.imp
- l";version="5.1.0.SNAPSHOT",org.drools.facttemplates;uses:="org.drool
- s.rule,org.drools.common,org.drools.base,org.drools,org.drools.spi,or
- g.drools.core.util";version="5.1.0.SNAPSHOT",org.drools.base;uses:="o
- rg.drools.event,org.drools,org.drools.spi,org.drools.concurrent,org.d
- rools.common,org.drools.core.util.asm,org.drools.core.util,org.drools
- .base.evaluators,org.drools.time,org.drools.base.extractors,org.mvel2
- .asm,org.drools.rule,org.drools.impl,org.drools.base.field,org.drools
- .type,org.mvel2.integration,org.drools.base.mvel,org.mvel2.ast,org.mv
- el2.compiler,org.drools.facttemplates";version="5.1.0.SNAPSHOT",org.d
- rools.process.core.datatype;version="5.1.0.SNAPSHOT",org.drools.workf
- low.instance;uses:="org.drools.process.instance,org.drools.impl,org.d
- rools.workflow.instance.impl,org.drools,org.drools.workflow.core.impl
- ,org.drools.common,org.drools.process.core";version="5.1.0.SNAPSHOT",
- org.drools.visualize;version="5.1.0.SNAPSHOT",org.drools.process.core
- ;uses:="org.drools.process.core.datatype";version="5.1.0.SNAPSHOT",or
- g.drools.core.util;uses:="org.drools.common,org.drools.rule,org.drool
- s.spi,org.drools,org.drools.type";version="5.1.0.SNAPSHOT",org.drools
- .process.core.datatype.impl.type;uses:="org.drools.process.core.datat
- ype,org.drools.process.core,com.thoughtworks.xstream";version="5.1.0.
- SNAPSHOT",org.drools.factmodel;uses:="org.mvel2.asm,org.drools.base,c
- om.thoughtworks.xstream.io,com.thoughtworks.xstream.io.xml,com.though
- tworks.xstream";version="5.1.0.SNAPSHOT",org.drools.ruleflow.instance
- ;uses:="org.drools.ruleflow.core,org.drools.workflow.instance.impl,or
- g.drools.workflow.core.node,org.drools.workflow.instance,org.drools.p
- rocess.instance";version="5.1.0.SNAPSHOT",org.drools.marshalling.impl
- ;uses:="org.drools.process.instance.context.swimlane,org.drools.workf
- low.instance.impl,org.drools.workflow.instance.node,org.drools.common
- ,org.drools.process.instance,org.drools.process.instance.context.vari
- able,org.drools.workflow.instance,org.drools.process.core,org.drools.
- core.util,org.drools.impl,org.drools,org.drools.spi,org.drools.concur
- rent,org.drools.process.instance.impl,org.drools.process.instance.tim
- er,org.drools.base,org.drools.rule,org.drools.process.instance.event,
- org.drools.ruleflow.instance";version="5.1.0.SNAPSHOT",org.drools.com
- mon;uses:="org.drools.spi,org.drools.rule,org.drools.impl,org.drools.
- event,org.drools,org.drools.base,org.drools.process.core,org.drools.m
- anagement,org.drools.core.util,org.drools.process.instance.event,org.
- drools.process.instance,org.drools.process.core.event,org.drools.runt
- ime.impl,org.drools.type,org.drools.process.instance.timer,org.drools
- .time,org.drools.ruleflow.core,org.drools.workflow.core.node,org.droo
- ls.concurrent,org.drools.base.evaluators,javax.xml.bind.annotation,or
- g.drools.facttemplates,org.drools.marshalling.impl,org.drools.time.im
- pl";version="5.1.0.SNAPSHOT",org.drools.process.core.context;uses:="o
- rg.drools.process.core";version="5.1.0.SNAPSHOT",org.drools.process.i
- nstance.impl.demo;uses:="org.drools.process.instance,javax.swing,java
- x.swing.event";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";version="5.1.0.SNAPSHOT",org.drools.process.instance
- .impl.factory;uses:="org.drools.process.instance,org.drools.process.i
- nstance.impl,org.drools.process.instance.context,org.drools.process.c
- ore";version="5.1.0.SNAPSHOT",org.drools.workflow.instance.impl.facto
- ry;uses:="org.drools.workflow.instance.impl,org.drools.workflow.insta
- nce";version="5.1.0.SNAPSHOT",org.drools.runtime.pipeline;version="5.
- 1.0.SNAPSHOT",org.drools.agent;uses:="org.drools,org.drools.rule,org.
- drools.core.util,org.drools.definitions.impl,org.drools.agent.impl,or
- g.drools.common";version="5.1.0.SNAPSHOT",org.drools.command.runtime.
- rule;uses:="org.drools.command,org.drools.command.impl,org.drools.imp
- l,org.drools,org.drools.spi,javax.xml.bind.annotation,org.drools.runt
- ime.impl,org.drools.common,org.mvel2";version="5.1.0.SNAPSHOT",org.dr
- ools.io.internal;version="5.1.0.SNAPSHOT",org.drools.runtime.help.imp
- l;uses:="org.drools.command.runtime.process,com.thoughtworks.xstream.
- io,com.thoughtworks.xstream.converters,com.thoughtworks.xstream.mappe
- r,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.runtime.rule.impl,org.droo
- ls.base,org.drools.rule,org.drools.spi,com.thoughtworks.xstream";vers
- ion="5.1.0.SNAPSHOT",org.drools.xml.changeset;uses:="org.drools.io.im
- pl,org.drools,org.w3c.dom,org.xml.sax,org.drools.xml,org.drools.build
- er.conf.impl,org.drools.io.internal,org.drools.core.util";version="5.
- 1.0.SNAPSHOT",org.drools.command.impl;uses:="org.drools.command,org.d
- rools.command.runtime.process,org.drools.command.runtime.rule,org.dro
- ols.impl,org.drools,org.drools.command.runtime,org.drools.rule,org.dr
- ools.time,org.drools.runtime.impl";version="5.1.0.SNAPSHOT",org.drool
- s.concurrent;uses:="org.drools,org.drools.spi";version="5.1.0.SNAPSHO
- T"
-Private-Package: org.drools.reteoo;version="5.1.0.SNAPSHOT",.;version=
- "5.1.0.SNAPSHOT",org.drools.reteoo.compiled;version="5.1.0.SNAPSHOT",
- org.drools.reteoo.builder;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: 1266695717368
Bundle-Activator: org.drools.osgi.core.Activator
-Bundle-ManifestVersion: 2
-Bundle-Description: A rule production system
+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.conv
erters,com.thoughtworks.xstream.converters.collections,com.thoughtwor
@@ -294,7 +13,287 @@
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
-Bundle-SymbolicName: org.drools.core;singleton:=true
+ 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"
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-04-07 22:23:52 UTC (rev 32474)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/QueryResult.java 2010-04-07 22:30:27 UTC (rev 32475)
@@ -25,6 +25,8 @@
import org.drools.WorkingMemory;
import org.drools.spi.Tuple;
+import com.sun.xml.bind.v2.runtime.unmarshaller.XsiNilLoader.Array;
+
public class QueryResult {
protected FactHandle[] factHandles;
@@ -58,7 +60,7 @@
* The Object
*/
public Object get(final int i) {
- return getObject( this.factHandles[ i ]);
+ return getObject( this.factHandles[ i + 1]); // Add one, as we hide root DroolsQuery
}
/**
@@ -86,7 +88,7 @@
}
public FactHandle getFactHandle(Declaration declr) {
- return this.factHandles[ declr.getPattern().getOffset() -1 ]; // -1 because we shifted the array left
+ return this.factHandles[ declr.getPattern().getOffset() ]; // -1 because we shifted the array left
// when removing the query object
}
@@ -95,7 +97,11 @@
* @return
*/
public FactHandle[] getFactHandles() {
- return this.factHandles;
+ int size = size();
+ FactHandle[] subArray = new FactHandle[ size];
+
+ System.arraycopy( this.factHandles, 1, subArray, 0, size );
+ return subArray;
}
/**
@@ -103,7 +109,7 @@
* @return
*/
public int size() {
- return this.factHandles.length;
+ return this.factHandles.length -1;
}
/**
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/QueryResults.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/QueryResults.java 2010-04-07 22:23:52 UTC (rev 32474)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/QueryResults.java 2010-04-07 22:30:27 UTC (rev 32475)
@@ -1,4 +1,5 @@
package org.drools;
+
/*
* Copyright 2005 JBoss Inc
*
@@ -15,6 +16,7 @@
* limitations under the License.
*/
+import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
@@ -29,30 +31,40 @@
* get a specific row. All the available Declarations used in the query can also be accessed.
*
*/
-public class QueryResults implements Iterable<QueryResult>{
- private Query query;
-
+public class QueryResults
+ implements
+ Iterable<QueryResult> {
private Map<String, Declaration> declarations;
- protected List<FactHandle[]> results;
- protected WorkingMemory workingMemory;
-
+ protected List<FactHandle[]> results;
+ protected WorkingMemory workingMemory;
+
public QueryResults() {
- }
+ }
public QueryResults(final List<FactHandle[]> results,
- final Query query,
+ final Declaration[] declArray,
final WorkingMemory workingMemory) {
this.results = results;
- this.query = query;
this.workingMemory = workingMemory;
+
+ if ( declArray.length > 0 ) {
+ final Map<String, Declaration> map = new HashMap<String, Declaration>( declArray.length );
+ for ( int i = 0, length = declArray.length; i < length; i++ ) {
+ map.put( declArray[i].getIdentifier(),
+ declArray[i] );
+ }
+ this.declarations = map;
+ } else {
+ this.declarations = Collections.emptyMap();
+ }
}
public QueryResult get(final int i) {
if ( i > this.results.size() ) {
throw new NoSuchElementException();
}
- return new QueryResult( this.results.get(i),
+ return new QueryResult( this.results.get( i ),
this.workingMemory,
this );
}
@@ -66,23 +78,7 @@
return new QueryResultsIterator( this.results.iterator() );
}
- /**
- * Return a map of Declarations where the key is the identifier and the value
- * is the Declaration.
- *
- * @return
- * The Map of Declarations.
- */
public Map<String, Declaration> getDeclarations() {
-
- final Declaration[] declarations = this.query.getDeclarations();
- final Map<String, Declaration> map = new HashMap<String, Declaration>( declarations.length );
- for ( int i = 0, length = declarations.length; i < length; i++ ) {
- map.put( declarations[i].getIdentifier(),
- declarations[i] );
- }
- this.declarations = map;
-
return this.declarations;
}
Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/Arguments.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/Arguments.java (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/Arguments.java 2010-04-07 22:30:27 UTC (rev 32475)
@@ -0,0 +1,47 @@
+package org.drools.base;
+
+import java.util.Arrays;
+
+
+public class Arguments {
+ private final Object[] args;
+
+ private static final Object[] EMPTY_PARAMS = new Object[0];
+
+ public Arguments() {
+ this(null);
+ }
+
+ public Arguments(final Object[] params) {
+ if ( params != null ) {
+ this.args = params;
+ } else {
+ this.args = EMPTY_PARAMS;
+ }
+ }
+
+ public Object[] getArguments() {
+ return this.args;
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + Arrays.hashCode( args );
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if ( this == obj ) return true;
+ if ( obj == null ) return false;
+ if ( getClass() != obj.getClass() ) return false;
+ Arguments other = (Arguments) obj;
+ if ( !Arrays.equals( args,
+ other.args ) ) return false;
+ return true;
+ }
+
+
+}
Added: 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 (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/DefaultQueryResultsCollector.java 2010-04-07 22:30:27 UTC (rev 32475)
@@ -0,0 +1,69 @@
+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.getArguments();
+ 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 Arguments( 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-04-07 22:23:52 UTC (rev 32474)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/DroolsQuery.java 2010-04-07 22:30:27 UTC (rev 32475)
@@ -1,5 +1,11 @@
package org.drools.base;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.drools.rule.Query;
+import org.drools.rule.Variable;
+
/*
* Copyright 2005 JBoss Inc
*
@@ -16,53 +22,61 @@
* limitations under the License.
*/
-public final class DroolsQuery {
- private final String name;
- private final Object[] args;
+public final class DroolsQuery extends Arguments {
+ private final String name;
+ private QueryResultCollector resultsCollector;
+ private Query query;
- private static final Object[] EMPTY_PARAMS = new Object[0];
-
- public DroolsQuery(final String name) {
- super();
- this.name = name;
- this.args = EMPTY_PARAMS;
+ public DroolsQuery(final String name,
+ QueryResultCollector resultsCollector) {
+ this( name,
+ null,
+ resultsCollector );
}
- public DroolsQuery(final String name, final Object[] params) {
- super();
+ public DroolsQuery(final String name,
+ final Object[] params,
+ QueryResultCollector resultsCollector) {
+ super( params );
this.name = name;
- if ( params != null ) {
- this.args = params;
- } else {
- this.args = EMPTY_PARAMS;
- }
+ this.resultsCollector = resultsCollector;
}
public String getName() {
return this.name;
}
- public Object[] getArguments() {
- return this.args;
+ public void setQuery(Query query) {
+ // this is set later, as we don't yet know which Query will match this DroolsQuery propagation
+ this.query = query;
}
+ public Query getQuery() {
+ return this.query;
+ }
+
+ public QueryResultCollector getQueryResultCollector() {
+ return this.resultsCollector;
+ }
+
+ @Override
public int hashCode() {
- final int PRIME = 31;
- int result = 1;
- result = PRIME * result + ((this.name == null) ? 0 : this.name.hashCode());
+ final int prime = 31;
+ int result = super.hashCode();
+ result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
- public boolean equals(final Object object) {
- if ( this == object ) {
- return true;
- }
+ @Override
+ public boolean equals(Object obj) {
+ if ( this == obj ) return true;
+ if ( !super.equals( obj ) ) return false;
+ if ( getClass() != obj.getClass() ) return false;
+ DroolsQuery other = (DroolsQuery) obj;
+ if ( name == null ) {
+ if ( other.name != null ) return false;
+ } else if ( !name.equals( other.name ) ) return false;
+ return true;
+ }
- if ( object == null || getClass() != object.getClass() ) {
- return false;
- }
-
- final DroolsQuery other = (DroolsQuery) object;
- return this.name.equals( other.name );
- }
}
\ No newline at end of file
Added: 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 (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/QueryResultCollector.java 2010-04-07 22:30:27 UTC (rev 32475)
@@ -0,0 +1,11 @@
+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);
+}
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-04-07 22:23:52 UTC (rev 32474)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java 2010-04-07 22:30:27 UTC (rev 32475)
@@ -147,8 +147,6 @@
protected ObjectStore objectStore;
- protected Map queryResults;
-
/** Global values which are associated with this memory. */
protected GlobalResolver globalResolver;
@@ -313,7 +311,6 @@
this.actionQueue = new LinkedList<WorkingMemoryAction>();
this.addRemovePropertyChangeListenerArgs = new Object[]{this};
- this.queryResults = Collections.EMPTY_MAP;
this.workingMemoryEventSupport = new WorkingMemoryEventSupport();
this.agendaEventSupport = new AgendaEventSupport();
this.workflowEventSupport = new RuleFlowEventSupport();
@@ -1105,7 +1102,7 @@
return handle;
}
- protected void insert(final InternalFactHandle handle,
+ public void insert(final InternalFactHandle handle,
final Object object,
final Rule rule,
final Activation activation,
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DoubleBetaConstraints.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DoubleBetaConstraints.java 2010-04-07 22:23:52 UTC (rev 32474)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DoubleBetaConstraints.java 2010-04-07 22:30:27 UTC (rev 32475)
@@ -121,12 +121,7 @@
}
private boolean isIndexable(final BetaNodeFieldConstraint constraint) {
- if ( constraint instanceof VariableConstraint ) {
- final VariableConstraint variableConstraint = (VariableConstraint) constraint;
- return (variableConstraint.getEvaluator().getOperator() == Operator.EQUAL);
- } else {
- return false;
- }
+ return SingleBetaConstraints.isIndexable( constraint );
}
/* (non-Javadoc)
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InternalWorkingMemory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InternalWorkingMemory.java 2010-04-07 22:23:52 UTC (rev 32474)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InternalWorkingMemory.java 2010-04-07 22:30:27 UTC (rev 32475)
@@ -14,7 +14,9 @@
import org.drools.process.instance.ProcessInstance;
import org.drools.process.instance.ProcessInstanceManager;
import org.drools.reteoo.LIANodePropagation;
+import org.drools.reteoo.ObjectTypeConf;
import org.drools.reteoo.PartitionTaskManager;
+import org.drools.rule.EntryPoint;
import org.drools.rule.Rule;
import org.drools.rule.TimeMachine;
import org.drools.runtime.Calendars;
@@ -63,6 +65,14 @@
public FactHandleFactory getFactHandleFactory();
+ public EntryPoint getEntryPoint();
+
+ public void insert(final InternalFactHandle handle,
+ final Object object,
+ final Rule rule,
+ final Activation activation,
+ ObjectTypeConf typeConf);
+
/**
* Looks for the fact handle associated to the given object
* by looking up the object IDENTITY (==), even if rule base
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/QuadroupleBetaConstraints.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/QuadroupleBetaConstraints.java 2010-04-07 22:23:52 UTC (rev 32474)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/QuadroupleBetaConstraints.java 2010-04-07 22:30:27 UTC (rev 32475)
@@ -177,12 +177,7 @@
}
private boolean isIndexable(final BetaNodeFieldConstraint constraint) {
- if ( constraint instanceof VariableConstraint ) {
- final VariableConstraint variableConstraint = (VariableConstraint) constraint;
- return (variableConstraint.getEvaluator().getOperator() == Operator.EQUAL);
- } else {
- return false;
- }
+ return SingleBetaConstraints.isIndexable( constraint );
}
/* (non-Javadoc)
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/SingleBetaConstraints.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/SingleBetaConstraints.java 2010-04-07 22:23:52 UTC (rev 32474)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/SingleBetaConstraints.java 2010-04-07 22:30:27 UTC (rev 32475)
@@ -33,6 +33,7 @@
import org.drools.reteoo.LeftTupleMemory;
import org.drools.reteoo.RightTupleMemory;
import org.drools.rule.ContextEntry;
+import org.drools.rule.UnificationRestriction;
import org.drools.rule.VariableConstraint;
import org.drools.spi.BetaNodeFieldConstraint;
@@ -97,13 +98,15 @@
out.writeObject(conf);
}
- private boolean isIndexable(final BetaNodeFieldConstraint constraint) {
- if ( constraint instanceof VariableConstraint ) {
+ public static boolean isIndexable(final BetaNodeFieldConstraint constraint) {
+ if ( constraint instanceof VariableConstraint ) {
final VariableConstraint variableConstraint = (VariableConstraint) constraint;
- return (variableConstraint.getEvaluator().getOperator() == Operator.EQUAL);
- } else {
- return false;
- }
+ if ( (!(variableConstraint.getRestriction() instanceof UnificationRestriction )) ) {
+ return (variableConstraint.getEvaluator().getOperator() == Operator.EQUAL);
+ }
+ }
+
+ return false;
}
public ContextEntry[] createContext() {
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/TripleBetaConstraints.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/TripleBetaConstraints.java 2010-04-07 22:23:52 UTC (rev 32474)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/TripleBetaConstraints.java 2010-04-07 22:30:27 UTC (rev 32475)
@@ -144,12 +144,7 @@
}
private boolean isIndexable(final BetaNodeFieldConstraint constraint) {
- if ( constraint instanceof VariableConstraint ) {
- final VariableConstraint variableConstraint = (VariableConstraint) constraint;
- return (variableConstraint.getEvaluator().getOperator() == Operator.EQUAL);
- } else {
- return false;
- }
+ return SingleBetaConstraints.isIndexable( constraint );
}
/* (non-Javadoc)
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/core/util/debug/QueryTerminalNodeVisitor.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/core/util/debug/QueryTerminalNodeVisitor.java 2010-04-07 22:23:52 UTC (rev 32474)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/core/util/debug/QueryTerminalNodeVisitor.java 2010-04-07 22:30:27 UTC (rev 32475)
@@ -25,10 +25,12 @@
info.assign( snode, rule );
}
- final LinkedList<?> memory = (LinkedList<?>) info.getSession().getNodeMemory( rtn );
- final DefaultNodeInfo ni = (DefaultNodeInfo) info.getNodeInfo( node );
- ni.setMemoryEnabled( true );
- ni.setTupleMemorySize( memory.size() );
+ // Query Terminal Nodes no longer have memory
+ // TODO delete this
+// final LinkedList<?> memory = (LinkedList<?>) info.getSession().getNodeMemory( rtn );
+// final DefaultNodeInfo ni = (DefaultNodeInfo) info.getNodeInfo( node );
+// ni.setMemoryEnabled( true );
+// ni.setTupleMemorySize( memory.size() );
}
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/NodeTypeEnums.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/NodeTypeEnums.java 2010-04-07 22:23:52 UTC (rev 32474)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/NodeTypeEnums.java 2010-04-07 22:30:27 UTC (rev 32475)
@@ -12,4 +12,5 @@
public static final short QueryTerminalNode = 8;
public static final short RuleTerminalNode = 9;
public static final short ForallNotNode = 10;
+ public static final short UnificationNode = 11;
}
Copied: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/QueryElementNode.java (from rev 32260, labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/UnificationNode.java)
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/QueryElementNode.java (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/QueryElementNode.java 2010-04-07 22:30:27 UTC (rev 32475)
@@ -0,0 +1,258 @@
+package org.drools.reteoo;
+
+import org.drools.QueryResults;
+import org.drools.RuleBaseConfiguration;
+import org.drools.base.DefaultQueryResultsCollector;
+import org.drools.base.DroolsQuery;
+import org.drools.base.QueryResultCollector;
+import org.drools.common.BaseNode;
+import org.drools.common.BetaConstraints;
+import org.drools.common.EmptyBetaConstraints;
+import org.drools.common.InternalFactHandle;
+import org.drools.common.InternalWorkingMemory;
+import org.drools.common.NodeMemory;
+import org.drools.common.PropagationContextImpl;
+import org.drools.core.util.Entry;
+import org.drools.reteoo.builder.BuildContext;
+import org.drools.rule.Declaration;
+import org.drools.rule.EntryPoint;
+import org.drools.rule.QueryElement;
+import org.drools.rule.Variable;
+import org.drools.spi.AlphaNodeFieldConstraint;
+import org.drools.spi.DataProvider;
+import org.drools.spi.PropagationContext;
+
+public class QueryElementNode extends LeftTupleSource
+ implements
+ LeftTupleSinkNode {
+
+ private LeftTupleSource tupleSource;
+
+ private LeftTupleSinkNode previousTupleSinkNode;
+ private LeftTupleSinkNode nextTupleSinkNode;
+
+ private QueryElement queryElement;
+
+ private boolean tupleMemoryEnabled;
+
+ public QueryElementNode(final int id,
+ final LeftTupleSource tupleSource,
+ final QueryElement queryElement,
+ final boolean tupleMemoryEnabled,
+ final BuildContext context) {
+ super( id,
+ context.getPartitionId(),
+ context.getRuleBase().getConfiguration().isMultithreadEvaluation() );
+ this.tupleSource = tupleSource;
+ this.queryElement = queryElement;
+ this.tupleMemoryEnabled = tupleMemoryEnabled;
+ }
+
+ public void updateSink(LeftTupleSink sink,
+ PropagationContext context,
+ InternalWorkingMemory workingMemory) {
+ // do nothing as we have no left memory
+ }
+
+ protected void doRemove(RuleRemovalContext context,
+ ReteooBuilder builder,
+ BaseNode node,
+ InternalWorkingMemory[] workingMemories) {
+ context.visitTupleSource( this );
+ if ( !node.isInUse() ) {
+ removeTupleSink( (LeftTupleSink) node );
+ }
+
+ if ( !context.alreadyVisited( this.tupleSource ) ) {
+ this.tupleSource.remove( context,
+ builder,
+ this,
+ workingMemories );
+ }
+ }
+
+ public void attach() {
+ this.tupleSource.addTupleSink( this );
+ }
+
+ public void attach(InternalWorkingMemory[] workingMemories) {
+ attach();
+
+ for ( int i = 0, length = workingMemories.length; i < length; i++ ) {
+ final InternalWorkingMemory workingMemory = workingMemories[i];
+ final PropagationContext propagationContext = new PropagationContextImpl( workingMemory.getNextPropagationIdCounter(),
+ PropagationContext.RULE_ADDITION,
+ null,
+ null,
+ null );
+ this.tupleSource.updateSink( this,
+ propagationContext,
+ workingMemory );
+ }
+ }
+
+ public void networkUpdated() {
+ this.tupleSource.networkUpdated();
+ }
+
+ public void assertLeftTuple(LeftTuple leftTuple,
+ PropagationContext context,
+ InternalWorkingMemory workingMemory) {
+ Object[] arguments = this.queryElement.getArguments();
+ Object[] inputArgs = new Object[arguments.length];
+
+ System.arraycopy( arguments,
+ 0,
+ inputArgs,
+ 0,
+ inputArgs.length );
+
+ int[] declIndexes = this.queryElement.getDeclIndexes();
+
+ for ( int i = 0, length = declIndexes.length; i > length; i++ ) {
+ Declaration declr = (Declaration) arguments[declIndexes[i]];
+ inputArgs[i] = declr.getValue( workingMemory,
+ leftTuple.get( declr ).getObject() );
+ }
+
+ UnificationNodeQueryResultsCollector collector = new UnificationNodeQueryResultsCollector( leftTuple,
+ this.queryElement.getVariables(),
+ this.sink );
+
+ DroolsQuery queryObject = new DroolsQuery( this.queryElement.getQueryName(),
+ inputArgs,
+ collector );
+ collector.setDroolsQuery( queryObject );
+
+ InternalFactHandle handle = workingMemory.getFactHandleFactory().newFactHandle( queryObject,
+ workingMemory.getObjectTypeConfigurationRegistry().getObjectTypeConf( EntryPoint.DEFAULT,
+ queryObject ),
+ workingMemory );
+
+ workingMemory.insert( handle,
+ queryObject,
+ null,
+ null,
+ workingMemory.getObjectTypeConfigurationRegistry().getObjectTypeConf( workingMemory.getEntryPoint(),
+ queryObject ) );
+
+ workingMemory.getFactHandleFactory().destroyFactHandle( handle );
+
+ }
+
+ public static class UnificationNodeQueryResultsCollector
+ implements
+ QueryResultCollector {
+
+ private LeftTuple leftTuple;
+ protected LeftTupleSinkPropagator sink;
+
+ private DroolsQuery query;
+ private int[] variables;
+
+ public UnificationNodeQueryResultsCollector(LeftTuple leftTuple,
+ int[] variables,
+ LeftTupleSinkPropagator sink) {
+ this.leftTuple = leftTuple;
+ this.variables = variables;
+ this.sink = sink;
+ }
+
+ public void setDroolsQuery(DroolsQuery query) {
+ this.query = query;
+ }
+
+ public void add(LeftTuple resultLeftTuple,
+ PropagationContext context,
+ InternalWorkingMemory workingMemory) {
+
+ Object[] args = query.getArguments();
+ Object[] objects = new Object[this.variables.length];
+
+ for ( int i = 0, length = this.variables.length; i < length; i++ ) {
+ objects[i] = ((Variable) args[ this.variables[i]] ).getValue();
+ }
+
+ final InternalFactHandle handle = workingMemory.getFactHandleFactory().newFactHandle( objects,
+ null, // set this to null, otherwise it uses the driver fact's entrypoint
+ workingMemory );
+
+ RightTuple rightTuple = new RightTuple( handle,
+ null );
+
+ this.sink.propagateAssertLeftTuple( this.leftTuple,
+ rightTuple,
+ null,
+ null,
+ context,
+ workingMemory,
+ false );
+ }
+
+ }
+
+ public short getType() {
+ return NodeTypeEnums.UnificationNode;
+ }
+
+ public boolean isLeftTupleMemoryEnabled() {
+ return false;
+ }
+
+ public void retractLeftTuple(LeftTuple leftTuple,
+ PropagationContext context,
+ InternalWorkingMemory workingMemory) {
+ }
+
+ public void modifyLeftTuple(LeftTuple leftTuple,
+ PropagationContext context,
+ InternalWorkingMemory workingMemory) {
+ }
+
+ public void modifyLeftTuple(InternalFactHandle factHandle,
+ ModifyPreviousTuples modifyPreviousTuples,
+ PropagationContext context,
+ InternalWorkingMemory workingMemory) {
+ }
+
+ public void setLeftTupleMemoryEnabled(boolean tupleMemoryEnabled) {
+ this.tupleMemoryEnabled = tupleMemoryEnabled;
+ }
+
+ /**
+ * Returns the next node
+ * @return
+ * The next TupleSinkNode
+ */
+ public LeftTupleSinkNode getNextLeftTupleSinkNode() {
+ return this.nextTupleSinkNode;
+ }
+
+ /**
+ * Sets the next node
+ * @param next
+ * The next TupleSinkNode
+ */
+ public void setNextLeftTupleSinkNode(final LeftTupleSinkNode next) {
+ this.nextTupleSinkNode = next;
+ }
+
+ /**
+ * Returns the previous node
+ * @return
+ * The previous TupleSinkNode
+ */
+ public LeftTupleSinkNode getPreviousLeftTupleSinkNode() {
+ return this.previousTupleSinkNode;
+ }
+
+ /**
+ * Sets the previous node
+ * @param previous
+ * The previous TupleSinkNode
+ */
+ public void setPreviousLeftTupleSinkNode(final LeftTupleSinkNode previous) {
+ this.previousTupleSinkNode = previous;
+ }
+
+}
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-04-07 22:23:52 UTC (rev 32474)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/QueryTerminalNode.java 2010-04-07 22:30:27 UTC (rev 32475)
@@ -20,8 +20,11 @@
import java.io.ObjectInput;
import java.io.ObjectOutput;
import java.util.LinkedList;
+import java.util.List;
import org.drools.RuleBaseConfiguration;
+import org.drools.base.Arguments;
+import org.drools.base.DroolsQuery;
import org.drools.common.BaseNode;
import org.drools.common.DisconnectedFactHandle;
import org.drools.common.InternalFactHandle;
@@ -30,7 +33,9 @@
import org.drools.common.PropagationContextImpl;
import org.drools.reteoo.builder.BuildContext;
import org.drools.rule.GroupElement;
+import org.drools.rule.Query;
import org.drools.rule.Rule;
+import org.drools.rule.Variable;
import org.drools.spi.PropagationContext;
/**
@@ -44,7 +49,6 @@
public final class QueryTerminalNode extends BaseNode
implements
LeftTupleSinkNode,
- NodeMemory,
TerminalNode {
// ------------------------------------------------------------
// Instance members
@@ -54,14 +58,13 @@
*
*/
private static final long serialVersionUID = 400L;
-
- public static final short type = 8;
-
+
+ public static final short type = 8;
+
/** The rule to invoke upon match. */
private Rule rule;
private GroupElement subrule;
private LeftTupleSource tupleSource;
- private boolean tupleMemoryEnabled;
private LeftTupleSinkNode previousTupleSinkNode;
private LeftTupleSinkNode nextTupleSinkNode;
@@ -85,14 +88,13 @@
final LeftTupleSource source,
final Rule rule,
final GroupElement subrule,
- final BuildContext context ) {
+ final BuildContext context) {
super( id,
context.getPartitionId(),
context.getRuleBase().getConfiguration().isMultithreadEvaluation() );
this.rule = rule;
this.subrule = subrule;
this.tupleSource = source;
- this.tupleMemoryEnabled = false; //hard coded to false
}
// ------------------------------------------------------------
@@ -104,7 +106,6 @@
rule = (Rule) in.readObject();
subrule = (GroupElement) in.readObject();
tupleSource = (LeftTupleSource) in.readObject();
- tupleMemoryEnabled = in.readBoolean();
previousTupleSinkNode = (LeftTupleSinkNode) in.readObject();
nextTupleSinkNode = (LeftTupleSinkNode) in.readObject();
}
@@ -114,7 +115,6 @@
out.writeObject( rule );
out.writeObject( subrule );
out.writeObject( tupleSource );
- out.writeBoolean( tupleMemoryEnabled );
out.writeObject( previousTupleSinkNode );
out.writeObject( nextTupleSinkNode );
}
@@ -145,32 +145,29 @@
public void assertLeftTuple(final LeftTuple tuple,
final PropagationContext context,
final InternalWorkingMemory workingMemory) {
- final LinkedList list = (LinkedList) workingMemory.getNodeMemory( this );
- if ( list.isEmpty() ) {
- ((ReteooWorkingMemory) workingMemory).setQueryResults( this.rule.getName(),
- this );
- }
-
- InternalFactHandle[] handles = new InternalFactHandle[tuple.getIndex()]; // don't add one, as we adjust for root Query object
LeftTuple entry = tuple;
-
- // miss out 0, which is the DroolsQuery object
- while ( entry.getIndex() != 0 ) {
- InternalFactHandle handle = entry.getLastHandle();
- handles[entry.getIndex() - 1] = new DisconnectedFactHandle(handle.getId(), handle.getIdentityHashCode(), handle.getObjectHashCode(), handle.getRecency(), handle.getObject() );
+
+ // find the DroolsQuery object
+ while ( entry.getParent() != null ) {
entry = entry.getParent();
}
-
- list.add( handles );
+ DroolsQuery query = (DroolsQuery) entry.getLastHandle().getObject();
+ query.setQuery( (Query) this.rule );
+
+ // Add results to the adapter
+ query.getQueryResultCollector().add( tuple,
+ context,
+ workingMemory );
}
public void retractLeftTuple(final LeftTuple tuple,
final PropagationContext context,
final InternalWorkingMemory workingMemory) {
+ throw new UnsupportedOperationException( "Querries should not result in this method being called" );
}
public String toString() {
- return "[QueryTerminalNode("+this.getId()+"): rule=" + this.rule.getName() + "]";
+ return "[QueryTerminalNode(" + this.getId() + "): query=" + this.rule.getName() + "]";
}
public void ruleAttached() {
@@ -205,10 +202,6 @@
final ReteooBuilder builder,
final BaseNode node,
final InternalWorkingMemory[] workingMemories) {
- for ( int i = 0, length = workingMemories.length; i < length; i++ ) {
- workingMemories[i].clearNodeMemory( this );
- }
-
if ( !context.alreadyVisited( this.tupleSource ) ) {
this.tupleSource.remove( context,
builder,
@@ -226,16 +219,12 @@
// There are no child nodes to update, do nothing.
}
- public Object createMemory(final RuleBaseConfiguration config) {
- return new LinkedList();
- }
-
public boolean isLeftTupleMemoryEnabled() {
- return tupleMemoryEnabled;
+ return false;
}
public void setLeftTupleMemoryEnabled(boolean tupleMemoryEnabled) {
- this.tupleMemoryEnabled = tupleMemoryEnabled;
+ // do nothing, this can only ever be false
}
/**
@@ -280,7 +269,7 @@
public void setNextLeftTupleSinkNode(final LeftTupleSinkNode next) {
this.nextTupleSinkNode = next;
}
-
+
public short getType() {
return NodeTypeEnums.QueryTerminalNode;
}
@@ -289,15 +278,13 @@
ModifyPreviousTuples modifyPreviousTuples,
PropagationContext context,
InternalWorkingMemory workingMemory) {
- // TODO Auto-generated method stub
-
+ throw new UnsupportedOperationException( "Querries should not result in this method being called" );
}
public void modifyLeftTuple(LeftTuple leftTuple,
PropagationContext context,
InternalWorkingMemory workingMemory) {
- // TODO Auto-generated method stub
-
- }
+ 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-04-07 22:23:52 UTC (rev 32474)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooWorkingMemory.java 2010-04-07 22:30:27 UTC (rev 32475)
@@ -26,6 +26,7 @@
import org.drools.QueryResults;
import org.drools.SessionConfiguration;
+import org.drools.base.DefaultQueryResultsCollector;
import org.drools.base.DroolsQuery;
import org.drools.common.AbstractWorkingMemory;
import org.drools.common.DefaultAgenda;
@@ -39,6 +40,7 @@
import org.drools.impl.EnvironmentFactory;
import org.drools.marshalling.impl.MarshallerReaderContext;
import org.drools.marshalling.impl.MarshallerWriteContext;
+import org.drools.rule.Declaration;
import org.drools.rule.EntryPoint;
import org.drools.rule.Package;
import org.drools.rule.Query;
@@ -61,7 +63,7 @@
*
*/
private static final long serialVersionUID = 400L;
-
+
public ReteooWorkingMemory() {
super();
}
@@ -136,76 +138,40 @@
try {
startOperation();
this.ruleBase.readLock();
- this.lock.lock();
- Object object = new DroolsQuery( query,
- arguments );
- InternalFactHandle handle = this.handleFactory.newFactHandle( object,
+ this.lock.lock();
+ DroolsQuery queryObject = new DroolsQuery( query,
+ arguments,
+ new DefaultQueryResultsCollector() );
+ InternalFactHandle handle = this.handleFactory.newFactHandle( queryObject,
this.getObjectTypeConfigurationRegistry().getObjectTypeConf( EntryPoint.DEFAULT,
- object ),
+ queryObject ),
this );
insert( handle,
- object,
+ queryObject,
null,
null,
this.typeConfReg.getObjectTypeConf( this.entryPoint,
- object ) );
+ queryObject ) );
- final QueryTerminalNode node = (QueryTerminalNode) this.queryResults.remove( query );
- Query queryObj = null;
- List list = null;
+ this.handleFactory.destroyFactHandle( handle );
- if ( node == null ) {
- // There are no results, first check the query object actually exists
- final org.drools.rule.Package[] pkgs = this.ruleBase.getPackages();
- for ( int i = 0; i < pkgs.length; i++ ) {
- final Rule rule = pkgs[i].getRule( query );
- if ( (rule != null) && (rule instanceof Query) ) {
- queryObj = (Query) rule;
- break;
- }
- }
-
- this.handleFactory.destroyFactHandle( handle );
-
- if ( queryObj == null ) {
- throw new IllegalArgumentException( "Query '" + query + "' does not exist" );
- }
- list = Collections.EMPTY_LIST;
- } else {
- list = (List) this.getNodeMemory( node );
-
- if ( list == null ) {
- list = Collections.EMPTY_LIST;
- } else {
- this.clearNodeMemory( node );
- }
- queryObj = (Query) node.getRule();
-
- 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( list,
- queryObj,
+ return new QueryResults( ((DefaultQueryResultsCollector) queryObject.getQueryResultCollector()).getResults(),
+ declarations,
this );
} finally {
this.lock.unlock();
- this.ruleBase.readUnlock();
+ this.ruleBase.readUnlock();
endOperation();
}
}
- void setQueryResults(final String query,
- final QueryTerminalNode node) {
- if ( this.queryResults == Collections.EMPTY_MAP ) {
- this.queryResults = new HashMap();
- }
- this.queryResults.put( query,
- node );
- }
-
-
-
public static class WorkingMemoryReteAssertAction
implements
WorkingMemoryAction {
@@ -340,47 +306,49 @@
}
public void execute(InternalWorkingMemory workingMemory) {
- if( this.factHandle.isValid() ) {
+ if ( this.factHandle.isValid() ) {
// if the fact is still in the working memory (since it may have been previously retracted already
final PropagationContext context = new PropagationContextImpl( workingMemory.getNextPropagationIdCounter(),
PropagationContext.EXPIRATION,
null,
null,
this.factHandle );
- ((EventFactHandle)factHandle).setExpired( true );
+ ((EventFactHandle) factHandle).setExpired( true );
this.node.retractObject( factHandle,
context,
workingMemory );
-
+
// if no activations for this expired event
- if( ((EventFactHandle)factHandle).getActivationsCount() == 0 ) {
+ if ( ((EventFactHandle) factHandle).getActivationsCount() == 0 ) {
// remove it from the object store and clean up resources
- ((EventFactHandle)factHandle).getEntryPoint().retract( factHandle );
+ ((EventFactHandle) factHandle).getEntryPoint().retract( factHandle );
}
}
}
}
- public EntryPoint getEntryPoint() {
+
+ public EntryPoint getEntryPoint() {
return this.entryPoint;
- }
- public InternalWorkingMemory getInternalWorkingMemory() {
+ }
+
+ public InternalWorkingMemory getInternalWorkingMemory() {
return this;
}
- public <T extends org.drools.runtime.rule.FactHandle> Collection< T > getFactHandles() {
- throw new UnsupportedOperationException("this is implementedby StatefulKnowledgeImpl");
+ public <T extends org.drools.runtime.rule.FactHandle> Collection<T> getFactHandles() {
+ throw new UnsupportedOperationException( "this is implementedby StatefulKnowledgeImpl" );
}
- public <T extends org.drools.runtime.rule.FactHandle> Collection< T > getFactHandles(ObjectFilter filter) {
- throw new UnsupportedOperationException("this is implementedby StatefulKnowledgeImpl");
+ public <T extends org.drools.runtime.rule.FactHandle> Collection<T> getFactHandles(ObjectFilter filter) {
+ throw new UnsupportedOperationException( "this is implementedby StatefulKnowledgeImpl" );
}
- public Collection< Object > getObjects() {
- throw new UnsupportedOperationException("this is implementedby StatefulKnowledgeImpl");
+ public Collection<Object> getObjects() {
+ throw new UnsupportedOperationException( "this is implementedby StatefulKnowledgeImpl" );
}
- public Collection< Object > getObjects(ObjectFilter filter) {
- throw new UnsupportedOperationException("this is implementedby StatefulKnowledgeImpl");
+ public Collection<Object> getObjects(ObjectFilter filter) {
+ throw new UnsupportedOperationException( "this is implementedby StatefulKnowledgeImpl" );
}
}
Deleted: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/UnificationNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/UnificationNode.java 2010-04-07 22:23:52 UTC (rev 32474)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/UnificationNode.java 2010-04-07 22:30:27 UTC (rev 32475)
@@ -1,114 +0,0 @@
-package org.drools.reteoo;
-
-import org.drools.RuleBaseConfiguration;
-import org.drools.common.BaseNode;
-import org.drools.common.InternalFactHandle;
-import org.drools.common.InternalWorkingMemory;
-import org.drools.common.NodeMemory;
-import org.drools.spi.PropagationContext;
-
-public class UnificationNode extends LeftTupleSource
- implements
- LeftTupleSinkNode,
- NodeMemory {
-
- public void updateSink(LeftTupleSink sink,
- PropagationContext context,
- InternalWorkingMemory workingMemory) {
- // TODO Auto-generated method stub
-
- }
-
- public void attach() {
- // TODO Auto-generated method stub
-
- }
-
- public void attach(InternalWorkingMemory[] workingMemories) {
- // TODO Auto-generated method stub
-
- }
-
- protected void doRemove(RuleRemovalContext context,
- ReteooBuilder builder,
- BaseNode node,
- InternalWorkingMemory[] workingMemories) {
- // TODO Auto-generated method stub
-
- }
-
- public void networkUpdated() {
- // TODO Auto-generated method stub
-
- }
-
- public LeftTupleSinkNode getNextLeftTupleSinkNode() {
- // TODO Auto-generated method stub
- return null;
- }
-
- public LeftTupleSinkNode getPreviousLeftTupleSinkNode() {
- // TODO Auto-generated method stub
- return null;
- }
-
- public void setNextLeftTupleSinkNode(LeftTupleSinkNode next) {
- // TODO Auto-generated method stub
-
- }
-
- public void setPreviousLeftTupleSinkNode(LeftTupleSinkNode previous) {
- // TODO Auto-generated method stub
-
- }
-
- public void assertLeftTuple(LeftTuple leftTuple,
- PropagationContext context,
- InternalWorkingMemory workingMemory) {
- // TODO Auto-generated method stub
-
- }
-
- public short getType() {
- // TODO Auto-generated method stub
- return 0;
- }
-
- public boolean isLeftTupleMemoryEnabled() {
- // TODO Auto-generated method stub
- return false;
- }
-
- public void retractLeftTuple(LeftTuple leftTuple,
- PropagationContext context,
- InternalWorkingMemory workingMemory) {
- // TODO Auto-generated method stub
-
- }
-
- public void setLeftTupleMemoryEnabled(boolean tupleMemoryEnabled) {
- // TODO Auto-generated method stub
-
- }
-
- public Object createMemory(RuleBaseConfiguration config) {
- // TODO Auto-generated method stub
- return null;
- }
-
- public void modifyLeftTuple(LeftTuple leftTuple,
- PropagationContext context,
- InternalWorkingMemory workingMemory) {
- // TODO Auto-generated method stub
-
- }
-
- public void modifyLeftTuple(InternalFactHandle factHandle,
- ModifyPreviousTuples modifyPreviousTuples,
- PropagationContext context,
- InternalWorkingMemory workingMemory) {
- // TODO Auto-generated method stub
-
- }
-
-}
Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/QueryElementBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/QueryElementBuilder.java (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/QueryElementBuilder.java 2010-04-07 22:30:27 UTC (rev 32475)
@@ -0,0 +1,57 @@
+/*
+ * Copyright 2006 JBoss Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.drools.reteoo.builder;
+
+import org.drools.reteoo.LeftTupleSource;
+import org.drools.reteoo.QueryElementNode;
+import org.drools.rule.QueryElement;
+import org.drools.rule.RuleConditionElement;
+
+
+public class QueryElementBuilder
+ implements
+ ReteooComponentBuilder {
+
+ /**
+ * @inheritDoc
+ */
+ public void build(final BuildContext context,
+ final BuildUtils utils,
+ final RuleConditionElement rce) {
+
+ final QueryElement qe = (QueryElement) rce;
+ utils.checkUnboundDeclarations( context,
+ qe.getRequiredDeclarations() );
+
+ context.setTupleSource( (LeftTupleSource) utils.attachNode( context,
+ new QueryElementNode( context.getNextId(),
+ context.getTupleSource(),
+ qe,
+ false,
+ context ) ) );
+
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public boolean requiresLeftActivation(final BuildUtils utils,
+ final RuleConditionElement rce) {
+ return true;
+ }
+
+}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/ReteooRuleBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/ReteooRuleBuilder.java 2010-04-07 22:23:52 UTC (rev 32474)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/ReteooRuleBuilder.java 2010-04-07 22:30:27 UTC (rev 32475)
@@ -39,6 +39,7 @@
import org.drools.rule.InvalidPatternException;
import org.drools.rule.Pattern;
import org.drools.rule.Query;
+import org.drools.rule.QueryElement;
import org.drools.rule.Rule;
import org.drools.time.TemporalDependencyMatrix;
@@ -59,6 +60,8 @@
new PatternBuilder() );
this.utils.addBuilder( EvalCondition.class,
new EvalBuilder() );
+ this.utils.addBuilder( QueryElement.class,
+ new QueryElementBuilder() );
this.utils.addBuilder( From.class,
new FromBuilder() );
this.utils.addBuilder( Collect.class,
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/EvalCondition.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/EvalCondition.java 2010-04-07 22:23:52 UTC (rev 32474)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/EvalCondition.java 2010-04-07 22:30:27 UTC (rev 32475)
@@ -176,7 +176,16 @@
public Map getOuterDeclarations() {
return Collections.EMPTY_MAP;
}
+
+ public List getNestedElements() {
+ return Collections.EMPTY_LIST;
+ }
+
+ public boolean isPatternScopeDelimiter() {
+ return true;
+ }
+
/**
* @inheritDoc
*/
@@ -184,14 +193,7 @@
return null;
}
- public List getNestedElements() {
- return Collections.EMPTY_LIST;
- }
- public boolean isPatternScopeDelimiter() {
- return true;
- }
-
public void replaceDeclaration(Declaration declaration,
Declaration resolved) {
for ( int i = 0; i < this.requiredDeclarations.length; i++ ) {
Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/QueryElement.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/QueryElement.java (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/QueryElement.java 2010-04-07 22:30:27 UTC (rev 32475)
@@ -0,0 +1,140 @@
+package org.drools.rule;
+
+import java.io.Externalizable;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+
+public class QueryElement extends ConditionalElement
+ implements
+ Externalizable {
+ private String queryName;
+ private Object[] arguments;
+ private int[] declIndexes;
+ private int[] variables;
+
+ private Declaration[] requiredDeclarations;
+
+ public QueryElement(String queryName,
+ Object[] arguments,
+ Declaration[] requiredDeclarations,
+ int[] declIndexes,
+ int[] variables) {
+ super();
+ this.queryName = queryName;
+ this.arguments = arguments;
+ this.requiredDeclarations = requiredDeclarations;
+ this.declIndexes = declIndexes;
+ this.variables = variables;
+ }
+
+ public String getQueryName() {
+ return queryName;
+ }
+
+ public Object[] getArguments() {
+ return arguments;
+ }
+
+ public int[] getDeclIndexes() {
+ return declIndexes;
+ }
+
+ public int[] getVariables() {
+ return variables;
+ }
+
+ public Map getInnerDeclarations() {
+ return Collections.EMPTY_MAP;
+ }
+
+ public Map getOuterDeclarations() {
+ return Collections.EMPTY_MAP;
+ }
+
+ public List getNestedElements() {
+ return Collections.EMPTY_LIST;
+ }
+
+ public boolean isPatternScopeDelimiter() {
+ return true;
+ }
+
+ public Declaration[] getRequiredDeclarations() {
+ return this.requiredDeclarations;
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public Declaration resolveDeclaration(final String identifier) {
+ return null;
+ }
+
+ public void replaceDeclaration(Declaration declaration,
+ Declaration resolved) {
+ for ( int i = 0; i < this.requiredDeclarations.length; i++ ) {
+ if ( this.requiredDeclarations[i].equals( declaration ) ) {
+ this.requiredDeclarations[i] = resolved;
+ }
+ }
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + Arrays.hashCode( arguments );
+ result = prime * result + Arrays.hashCode( declIndexes );
+ result = prime * result + ((queryName == null) ? 0 : queryName.hashCode());
+ result = prime * result + Arrays.hashCode( variables );
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if ( this == obj ) return true;
+ if ( obj == null ) return false;
+ if ( getClass() != obj.getClass() ) return false;
+ QueryElement other = (QueryElement) obj;
+ if ( !Arrays.equals( arguments,
+ other.arguments ) ) return false;
+ if ( !Arrays.equals( declIndexes,
+ other.declIndexes ) ) return false;
+ if ( queryName == null ) {
+ if ( other.queryName != null ) return false;
+ } else if ( !queryName.equals( other.queryName ) ) return false;
+ if ( !Arrays.equals( variables,
+ other.variables ) ) return false;
+ return true;
+ }
+
+ @Override
+ public Object clone() {
+ return new QueryElement( queryName, arguments, requiredDeclarations, declIndexes, variables );
+ }
+
+ public void writeExternal(ObjectOutput out) throws IOException {
+ out.writeObject( this.queryName );
+ out.writeObject( this.arguments );
+ out.writeObject( this.requiredDeclarations );
+ out.writeObject( this.declIndexes );
+ out.writeObject( this.variables );
+ }
+
+ public void readExternal(ObjectInput in) throws IOException,
+ ClassNotFoundException {
+ this.queryName = (String) in.readObject();
+ this.arguments = (Object[]) in.readObject();
+ this.requiredDeclarations = ( Declaration[] ) in.readObject();
+ this.declIndexes = ( int[] ) in.readObject();
+ this.variables = ( int[] ) in.readObject();
+ }
+
+
+
+}
Added: 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 (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/UnificationRestriction.java 2010-04-07 22:30:27 UTC (rev 32475)
@@ -0,0 +1,173 @@
+package org.drools.rule;
+
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+
+import org.drools.common.InternalFactHandle;
+import org.drools.common.InternalWorkingMemory;
+import org.drools.reteoo.LeftTuple;
+import org.drools.rule.VariableRestriction.VariableContextEntry;
+import org.drools.spi.AcceptsReadAccessor;
+import org.drools.spi.Evaluator;
+import org.drools.spi.InternalReadAccessor;
+import org.drools.spi.Restriction;
+import org.drools.time.Interval;
+
+public class UnificationRestriction
+ implements
+ AcceptsReadAccessor,
+ Restriction {
+
+ VariableRestriction vr;
+ Declaration declaration;
+
+ public UnificationRestriction() {
+
+ }
+
+ public UnificationRestriction(VariableRestriction vr) {
+ this.vr = vr;
+ this.declaration = vr.getRequiredDeclarations()[0];
+ }
+
+ public ContextEntry createContextEntry() {
+ return new UnificationContextEntry(this.vr.createContextEntry(), declaration);
+ }
+
+ public Declaration[] getRequiredDeclarations() {
+ return this.vr.getRequiredDeclarations();
+ }
+
+ public boolean isAllowed(InternalReadAccessor extractor,
+ InternalFactHandle handle,
+ InternalWorkingMemory workingMemory,
+ ContextEntry context) {
+ throw new UnsupportedOperationException( "Cannot use a Unification Restriction in the AlphaNetwork" );
+ }
+
+ public boolean isAllowedCachedLeft(ContextEntry context,
+ InternalFactHandle handle) {
+ if ( ((UnificationContextEntry)context).getVariable() == null ) {
+ return this.vr.isAllowedCachedLeft( ((UnificationContextEntry)context).getContextEntry(), handle );
+ } else {
+ VariableContextEntry vContext = (VariableContextEntry) ((UnificationContextEntry)context).getContextEntry();
+ ((UnificationContextEntry)context).getVariable() .setValue( vContext.getFieldExtractor().getValue(handle.getObject() ) );
+ return true;
+ }
+ }
+
+ public boolean isAllowedCachedRight(LeftTuple tuple,
+ ContextEntry context) {
+ throw new UnsupportedOperationException( "Cannot right activate a Unification Restriction (for now )" );
+ }
+
+ public Evaluator getEvaluator() {
+ return this.vr.getEvaluator();
+ }
+
+ public Interval getInterval() {
+ return this.vr.getInterval();
+ }
+
+ public boolean isTemporal() {
+ return false;
+ }
+
+ public void replaceDeclaration(Declaration oldDecl,
+ Declaration newDecl) {
+ this.vr.replaceDeclaration( oldDecl, newDecl );
+ this.declaration = vr.getRequiredDeclarations()[0];
+ }
+
+
+
+ public void readExternal(ObjectInput in) throws IOException,
+ ClassNotFoundException {
+ this.vr = ( VariableRestriction ) in.readObject();
+ this.declaration = vr.getRequiredDeclarations()[0];
+ }
+
+ public void writeExternal(ObjectOutput out) throws IOException {
+ out.writeObject( this.vr );
+ }
+
+ public Object clone() {
+ return new UnificationRestriction( (VariableRestriction) this.vr.clone() );
+ }
+
+ public void setReadAccessor(InternalReadAccessor readAccessor) {
+ this.vr.setReadAccessor( readAccessor );
+ this.declaration = vr.getRequiredDeclarations()[0];
+ }
+
+ public static class UnificationContextEntry implements ContextEntry {
+ private ContextEntry contextEntry;
+ private Declaration declaration;
+ private Variable variable;
+
+ public UnificationContextEntry(ContextEntry contextEntry,
+ Declaration declaration) {
+ this.contextEntry = contextEntry;
+ this.declaration = declaration;
+ }
+
+
+ public ContextEntry getContextEntry() {
+ return this.contextEntry;
+ }
+
+
+ public ContextEntry getNext() {
+ return this.contextEntry.getNext();
+ }
+
+ public void resetFactHandle() {
+ this.contextEntry.resetFactHandle();
+ }
+
+ public void resetTuple() {
+ this.contextEntry.resetTuple();
+ }
+
+ public void setNext(ContextEntry entry) {
+ this.contextEntry.setNext( entry );
+ }
+
+ public void updateFromFactHandle(InternalWorkingMemory workingMemory,
+ InternalFactHandle handle) {
+ throw new UnsupportedOperationException( "Cannot right activate a Unification Restriction (for now )" );
+ //this.contextEntry.updateFromFactHandle( workingMemory, handle );
+ }
+
+ public void updateFromTuple(InternalWorkingMemory workingMemory,
+ LeftTuple tuple) {
+ Object object = this.declaration.getValue( workingMemory, tuple.get( 0 ).getObject() );
+ if ( !(object instanceof Variable) ) {
+ this.variable = null;
+ this.contextEntry.updateFromTuple( workingMemory, tuple );
+ } else {
+ this.variable = (Variable) object;
+ }
+ }
+
+ public void readExternal(ObjectInput in) throws IOException,
+ ClassNotFoundException {
+ this.contextEntry = (ContextEntry) in.readObject();
+ this.declaration = ( Declaration ) in.readObject();
+ }
+
+ public void writeExternal(ObjectOutput out) throws IOException {
+ out.writeObject( this.contextEntry );
+ out.writeObject( this.declaration );
+ }
+
+ public Variable getVariable() {
+ return this.variable;
+ }
+
+ }
+
+
+
+}
Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Variable.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Variable.java (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Variable.java 2010-04-07 22:30:27 UTC (rev 32475)
@@ -0,0 +1,16 @@
+package org.drools.rule;
+
+public class Variable {
+ private Object value;
+
+ public Object getValue() {
+ return value;
+ }
+
+ public void setValue(Object value) {
+ this.value = value;
+ }
+
+
+
+}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/VariableConstraint.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/VariableConstraint.java 2010-04-07 22:23:52 UTC (rev 32474)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/VariableConstraint.java 2010-04-07 22:30:27 UTC (rev 32475)
@@ -27,6 +27,7 @@
import org.drools.spi.AcceptsReadAccessor;
import org.drools.spi.Evaluator;
import org.drools.spi.InternalReadAccessor;
+import org.drools.spi.Restriction;
import org.drools.time.Interval;
public class VariableConstraint extends MutableTypeConstraint
@@ -37,7 +38,7 @@
private static final long serialVersionUID = 400L;
private InternalReadAccessor fieldExtractor;
- private VariableRestriction restriction;
+ private Restriction restriction;
public VariableConstraint() {
}
@@ -52,7 +53,7 @@
}
public VariableConstraint(final InternalReadAccessor fieldExtractor,
- final VariableRestriction restriction) {
+ final Restriction restriction) {
this.fieldExtractor = fieldExtractor;
this.restriction = restriction;
}
@@ -61,7 +62,7 @@
ClassNotFoundException {
super.readExternal( in );
fieldExtractor = (InternalReadAccessor) in.readObject();
- restriction = (VariableRestriction) in.readObject();
+ restriction = (Restriction) in.readObject();
}
public void writeExternal(ObjectOutput out) throws IOException {
@@ -89,8 +90,16 @@
}
public Evaluator getEvaluator() {
- return this.restriction.getEvaluator();
+ if ( this.restriction instanceof UnificationRestriction ) {
+ return ((UnificationRestriction) this.restriction).getEvaluator();
+ } else {
+ return ((VariableRestriction) this.restriction).getEvaluator();
+ }
}
+
+ public Restriction getRestriction() {
+ return this.restriction;
+ }
public boolean isAllowed(final InternalFactHandle handle,
final InternalWorkingMemory workingMemory,
@@ -118,7 +127,11 @@
}
public Interval getInterval() {
- return this.restriction.getInterval();
+ if ( this.restriction instanceof UnificationRestriction ) {
+ return ((UnificationRestriction) this.restriction).getInterval();
+ } else {
+ return ((VariableRestriction) this.restriction).getInterval();
+ }
}
public String toString() {
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/rule/impl/NativeQueryResults.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/rule/impl/NativeQueryResults.java 2010-04-07 22:23:52 UTC (rev 32474)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/rule/impl/NativeQueryResults.java 2010-04-07 22:30:27 UTC (rev 32475)
@@ -29,7 +29,7 @@
}
public String[] getIdentifiers() {
- return this.getResults().getDeclarations().keySet().toArray( new String[this.getResults().getDeclarations().size()] );
+ return getDeclarations().keySet().toArray( new String[this.getResults().getDeclarations().size()] );
}
Added: 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 (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/QueryElementNodeTest.java 2010-04-07 22:30:27 UTC (rev 32475)
@@ -0,0 +1,169 @@
+package org.drools.reteoo;
+
+/*
+ * Copyright 2005 JBoss Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import org.drools.DroolsTestCase;
+import org.drools.FactException;
+import org.drools.FactHandle;
+import org.drools.RuleBaseFactory;
+import org.drools.base.DroolsQuery;
+import org.drools.common.DefaultFactHandle;
+import org.drools.common.InternalFactHandle;
+import org.drools.common.InternalRuleBase;
+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.builder.BuildContext;
+import org.drools.rule.Declaration;
+import org.drools.rule.QueryElement;
+import org.drools.rule.Rule;
+import org.drools.rule.Variable;
+import org.drools.spi.Activation;
+import org.drools.spi.PropagationContext;
+
+public class QueryElementNodeTest extends DroolsTestCase {
+ private PropagationContext context;
+ private ReteooWorkingMemory workingMemory;
+ private ReteooRuleBase ruleBase;
+ private BuildContext buildContext;
+
+ public QueryElementNodeTest(final String name) {
+ super( name );
+ }
+
+ public void setUp() {
+ this.ruleBase = (ReteooRuleBase) RuleBaseFactory.newRuleBase();
+ this.buildContext = new BuildContext( ruleBase,
+ ((ReteooRuleBase) ruleBase).getReteooBuilder().getIdGenerator() );
+
+ this.context = new PropagationContextImpl( 0,
+ PropagationContext.ASSERTION,
+ null,
+ null,
+ null );
+
+ this.workingMemory = new InstrumentedWorkingMemory( 0,
+ (InternalRuleBase) this.ruleBase );
+ }
+
+ public void testAttach() throws Exception {
+ final MockTupleSource source = new MockTupleSource( 12 );
+
+ final QueryElementNode node = new QueryElementNode( 18,
+ source,
+ null,
+ false,
+ buildContext );
+
+ assertEquals( 18,
+ node.getId() );
+
+ assertEquals( 0,
+ source.getAttached() );
+
+ node.attach();
+
+ assertEquals( 1,
+ source.getAttached() );
+
+ }
+
+ public void test1() {
+ QueryElement qe = new QueryElement( "queryName1",
+ new Object[]{new Variable(), "x1", new Variable(), "x3", "x4", new Variable(),"x6",},
+ new Declaration[0],
+ new int[0],
+ new int[] { 0, 2, 5 } );
+
+ final MockTupleSource source = new MockTupleSource( 12 );
+
+ final QueryElementNode node = new QueryElementNode( 18,
+ source,
+ qe,
+ false,
+ buildContext );
+
+ MockLeftTupleSink sink = new MockLeftTupleSink(12);
+ node.addTupleSink( sink );
+ sink.attach();
+
+
+ InternalFactHandle s1 = (InternalFactHandle) this.workingMemory.insert( "string" );
+
+ node.assertLeftTuple( new LeftTuple( s1,
+ node,
+ true ),
+ context,
+ workingMemory );
+
+ assertEquals(3, sink.getAsserted().size() );
+ LeftTuple leftTuple = (LeftTuple)((Object[])sink.getAsserted().get( 0 ))[0];
+ assertEquals(2, leftTuple.size());
+ assertEquals("string", leftTuple.getParent().getLastHandle().getObject() );
+ Object[] variables = (Object[]) leftTuple.getLastHandle().getObject();
+ assertEquals( "string_0_0", variables[0] );
+ assertEquals( "string_2_0", variables[1] );
+ assertEquals( "string_5_0", variables[2] );
+
+ leftTuple = (LeftTuple)((Object[])sink.getAsserted().get( 1 ))[0];
+ assertEquals(2, leftTuple.size());
+ assertEquals("string", leftTuple.getParent().getLastHandle().getObject() );
+ variables = (Object[]) leftTuple.getLastHandle().getObject();
+ assertEquals( "string_0_1", variables[0] );
+ assertEquals( "string_2_1", variables[1] );
+ assertEquals( "string_5_1", variables[2] );
+
+ leftTuple = (LeftTuple)((Object[])sink.getAsserted().get( 2 ))[0];
+ assertEquals(2, leftTuple.size());
+ assertEquals("string", leftTuple.getParent().getLastHandle().getObject() );
+ variables = (Object[]) leftTuple.getLastHandle().getObject();
+ assertEquals( "string_0_2", variables[0] );
+ assertEquals( "string_2_2", variables[1] );
+ assertEquals( "string_5_2", variables[2] );
+ }
+
+
+ public static class InstrumentedWorkingMemory extends ReteooWorkingMemory {
+
+ public InstrumentedWorkingMemory(final int id,
+ final InternalRuleBase ruleBase) {
+ super( id,
+ ruleBase );
+ }
+
+ public void insert(final InternalFactHandle handle,
+ final Object object,
+ final Rule rule,
+ final Activation activation,
+ ObjectTypeConf typeConf) {
+ if( object instanceof DroolsQuery ) {
+ DroolsQuery query = ( DroolsQuery ) object;
+ UnificationNodeQueryResultsCollector collector = ( UnificationNodeQueryResultsCollector ) query.getQueryResultCollector();
+ for ( int i = 0; i < 3; i++ ) {
+ Object[] args = query.getArguments();
+ ((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 );
+ }
+ } else {
+ super.insert( handle, object, rule, activation, typeConf );
+ }
+ }
+ }
+}
\ No newline at end of file
More information about the jboss-svn-commits
mailing list