[jboss-svn-commits] JBL Code SVN: r26576 - in labs/jbossrules/trunk: drools-core/src/main/java/org/drools/base/evaluators and 1 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Mon May 18 00:28:22 EDT 2009
Author: mark.proctor at jboss.com
Date: 2009-05-18 00:28:22 -0400 (Mon, 18 May 2009)
New Revision: 26576
Modified:
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ArrayContainsTest.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/SetEvaluatorsDefinition.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/VariableConstraint.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/VariableRestriction.java
Log:
JBRULES-1954 issue with using contains operator on array or collection of double (any )
-contains and memberof now works with arrays
-added extensive integregration test.
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ArrayContainsTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ArrayContainsTest.java 2009-05-16 10:03:33 UTC (rev 26575)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ArrayContainsTest.java 2009-05-18 04:28:22 UTC (rev 26576)
@@ -1,10 +1,12 @@
package org.drools.integrationtests;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
import org.drools.KnowledgeBase;
import org.drools.KnowledgeBaseFactory;
+import org.drools.Order;
import org.drools.Primitives;
import org.drools.builder.KnowledgeBuilder;
import org.drools.builder.KnowledgeBuilderFactory;
@@ -22,15 +24,17 @@
str += "global java.util.List list;\n";
str += "global Boolean bGlobal;\n";
+ str += "global Object bArrayGlobal;\n";
str += "rule \"contains in array\"\n";
str += " salience 10\n";
str += " when\n";
- str += " Primitives( $b : booleanPrimitive == true ) \n";
- str += " Primitives( booleanPrimitive == false, primitiveBooleanArray contains bGlobal, primitiveBooleanArray contains $b )\n";
+ str += " Primitives( $b : booleanPrimitive == true, $array1 : primitiveBooleanArray ) \n";
+ str += " Primitives( booleanPrimitive == false, $array2 : primitiveBooleanArray contains bGlobal, primitiveBooleanArray contains $b, ";
+ str += " booleanPrimitive memberOf $array2, booleanPrimitive memberOf $array1, booleanPrimitive memberOf bArrayGlobal )\n";
str += " then\n";
str += " list.add( \"ok1\" );\n";
- str += "end\n";
+ str += "end\n";
final KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add( ResourceFactory.newByteArrayResource( str.getBytes() ), ResourceType.DRL );
@@ -47,16 +51,19 @@
final List list = new ArrayList();
ksession.setGlobal( "list",
- list );
-
+ list );
ksession.setGlobal( "bGlobal",
- true );
+ true );
+ ksession.setGlobal( "bArrayGlobal",
+ new boolean[]{true, false} );
final Primitives p1 = new Primitives();
p1.setPrimitiveBooleanArray( new boolean[]{true, false} );
+ p1.setBooleanPrimitive( false );
FactHandle p1h = ksession.insert( p1 );
final Primitives p2 = new Primitives();
+ p2.setPrimitiveBooleanArray( new boolean[]{true, false} );
p2.setBooleanPrimitive( true );
ksession.insert( p2 );
@@ -75,21 +82,88 @@
list.size() );
}
+ public void testNotContainsBooleanArray() throws Exception {
+ String str = "";
+ str += "package org.drools;\n";
+
+ str += "global java.util.List list;\n";
+ str += "global Boolean bGlobal;\n";
+ str += "global Object bArrayGlobal;\n";
+
+ str += "rule \"contains in array\"\n";
+ str += " salience 10\n";
+ str += " when\n";
+ str += " Primitives( $b : booleanPrimitive, intPrimitive == 10, $array1 : primitiveBooleanArray ) \n";
+ str += " Primitives( booleanPrimitive == false, intPrimitive != 10, $array2 : primitiveBooleanArray not contains bGlobal, primitiveBooleanArray not contains $b, ";
+ str += " booleanPrimitive not memberOf $array2, booleanPrimitive not memberOf $array1, booleanPrimitive not memberOf bArrayGlobal )\n";
+ str += " then\n";
+ str += " list.add( \"ok1\" );\n";
+ str += "end\n";
+
+ final KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+ kbuilder.add( ResourceFactory.newByteArrayResource( str.getBytes() ), ResourceType.DRL );
+
+ if ( kbuilder.hasErrors() ) {
+ fail( "kbuilder has errors\n:" + kbuilder.getErrors() );
+ }
+
+ KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+ kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
+
+ kbase = SerializationHelper.serializeObject( kbase );
+ final StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+
+ final List list = new ArrayList();
+ ksession.setGlobal( "list",
+ list );
+ ksession.setGlobal( "bGlobal",
+ false );
+ ksession.setGlobal( "bArrayGlobal",
+ new boolean[]{true, true} );
+
+ final Primitives p1 = new Primitives();
+ p1.setIntPrimitive( 10 );
+ p1.setPrimitiveBooleanArray( new boolean[]{true, true} );
+ p1.setBooleanPrimitive( false );
+ FactHandle p1h = ksession.insert( p1 );
+
+ final Primitives p2 = new Primitives();
+ p2.setPrimitiveBooleanArray( new boolean[]{true,true} );
+ p2.setBooleanPrimitive( false );
+ ksession.insert( p2 );
+
+ ksession.fireAllRules();
+
+ assertEquals( 1,
+ list.size() );
+
+ ksession.retract( p1h );
+
+ ksession.insert( p1 );
+
+ ksession.fireAllRules();
+
+ assertEquals( 2,
+ list.size() );
+ }
+
public void testContainsByteArray() throws Exception {
String str = "";
str += "package org.drools;\n";
str += "global java.util.List list;\n";
- str += "global Byte bGlobal;\n";
+ str += "global Byte bGlobal;\n";
+ str += "global Object bArrayGlobal;\n";
str += "rule \"contains in array\"\n";
str += " salience 10\n";
str += " when\n";
- str += " Primitives( $b : bytePrimitive == 1 ) \n";
- str += " Primitives( bytePrimitive != 1, primitiveByteArray contains bGlobal, primitiveByteArray contains $b )\n";
+ str += " Primitives( $b : bytePrimitive == 1, $array1 : primitiveByteArray ) \n";
+ str += " Primitives( bytePrimitive != 1, $array2 : primitiveByteArray contains bGlobal, primitiveByteArray contains $b, ";
+ str += " bytePrimitive memberOf $array2, bytePrimitive memberOf $array1, bytePrimitive memberOf bArrayGlobal )\n";
str += " then\n";
str += " list.add( \"ok1\" );\n";
- str += "end\n";
+ str += "end\n";
final KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add( ResourceFactory.newByteArrayResource( str.getBytes() ), ResourceType.DRL );
@@ -106,16 +180,19 @@
final List list = new ArrayList();
ksession.setGlobal( "list",
- list );
-
+ list );
ksession.setGlobal( "bGlobal",
- (byte) 1 );
+ (byte) 1 );
+ ksession.setGlobal( "bArrayGlobal",
+ new byte[]{1, 2, 3} );
final Primitives p1 = new Primitives();
p1.setPrimitiveByteArray( new byte[]{1, 2, 3} );
+ p1.setBytePrimitive( (byte) 2 );
FactHandle p1h = ksession.insert( p1 );
final Primitives p2 = new Primitives();
+ p2.setPrimitiveByteArray( new byte[]{1, 2, 3} );
p2.setBytePrimitive( (byte) 1 );
ksession.insert( p2 );
@@ -134,21 +211,87 @@
list.size() );
}
+ public void testNotContainsByteArray() throws Exception {
+ String str = "";
+ str += "package org.drools;\n";
+
+ str += "global java.util.List list;\n";
+ str += "global Byte bGlobal;\n";
+ str += "global Object bArrayGlobal;\n";
+
+ str += "rule \"contains in array\"\n";
+ str += " salience 10\n";
+ str += " when\n";
+ str += " Primitives( $b : bytePrimitive == 1, $array1 : primitiveByteArray ) \n";
+ str += " Primitives( bytePrimitive != 1, $array2 : primitiveByteArray not contains bGlobal, primitiveByteArray not contains $b, ";
+ str += " bytePrimitive not memberOf $array2, bytePrimitive not memberOf $array1, bytePrimitive not memberOf bArrayGlobal )\n";
+ str += " then\n";
+ str += " list.add( \"ok1\" );\n";
+ str += "end\n";
+
+ final KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+ kbuilder.add( ResourceFactory.newByteArrayResource( str.getBytes() ), ResourceType.DRL );
+
+ if ( kbuilder.hasErrors() ) {
+ fail( "kbuilder has errors\n:" + kbuilder.getErrors() );
+ }
+
+ KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+ kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
+
+ kbase = SerializationHelper.serializeObject( kbase );
+ final StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+
+ final List list = new ArrayList();
+ ksession.setGlobal( "list",
+ list );
+ ksession.setGlobal( "bGlobal",
+ (byte) 1 );
+ ksession.setGlobal( "bArrayGlobal",
+ new byte[]{4, 5, 6} );
+
+ final Primitives p1 = new Primitives();
+ p1.setPrimitiveByteArray( new byte[]{4, 5, 6} );
+ p1.setBytePrimitive( (byte) 2 );
+ FactHandle p1h = ksession.insert( p1 );
+
+ final Primitives p2 = new Primitives();
+ p2.setPrimitiveByteArray( new byte[]{4, 5, 6} );
+ p2.setBytePrimitive( (byte) 1 );
+ ksession.insert( p2 );
+
+ ksession.fireAllRules();
+
+ assertEquals( 1,
+ list.size() );
+
+ ksession.retract( p1h );
+
+ ksession.insert( p1 );
+
+ ksession.fireAllRules();
+
+ assertEquals( 2,
+ list.size() );
+ }
+
public void testContainsShortArray() throws Exception {
String str = "";
str += "package org.drools;\n";
str += "global java.util.List list;\n";
- str += "global Short sGlobal;\n";
+ str += "global Short sGlobal;\n";
+ str += "global Object sArrayGlobal;\n";
str += "rule \"contains in array\"\n";
str += " salience 10\n";
str += " when\n";
- str += " Primitives( $s : shortPrimitive == 1 ) \n";
- str += " Primitives( shortPrimitive != 1, primitiveShortArray contains sGlobal, primitiveShortArray contains $s )\n";
+ str += " Primitives( $s : shortPrimitive == 1, $array1 : primitiveShortArray ) \n";
+ str += " Primitives( shortPrimitive != 1, $array2 : primitiveShortArray contains sGlobal, primitiveShortArray contains $s, ";
+ str += " shortPrimitive memberOf $array2, shortPrimitive memberOf $array1, shortPrimitive memberOf sArrayGlobal )\n";
str += " then\n";
str += " list.add( \"ok1\" );\n";
- str += "end\n";
+ str += "end\n";
final KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add( ResourceFactory.newByteArrayResource( str.getBytes() ), ResourceType.DRL );
@@ -165,16 +308,19 @@
final List list = new ArrayList();
ksession.setGlobal( "list",
- list );
-
+ list );
ksession.setGlobal( "sGlobal",
- (short) 1 );
+ (short) 1 );
+ ksession.setGlobal( "sArrayGlobal",
+ new short[]{1, 2, 3} );
final Primitives p1 = new Primitives();
p1.setPrimitiveShortArray( new short[]{1, 2, 3} );
+ p1.setShortPrimitive( (short) 2 );
FactHandle p1h = ksession.insert( p1 );
final Primitives p2 = new Primitives();
+ p2.setPrimitiveShortArray( new short[]{1, 2, 3} );
p2.setShortPrimitive( (short) 1 );
ksession.insert( p2 );
@@ -191,23 +337,89 @@
assertEquals( 2,
list.size() );
- }
+ }
+ public void testNotContainsShortArray() throws Exception {
+ String str = "";
+ str += "package org.drools;\n";
+
+ str += "global java.util.List list;\n";
+ str += "global Short sGlobal;\n";
+ str += "global Object sArrayGlobal;\n";
+
+ str += "rule \"contains in array\"\n";
+ str += " salience 10\n";
+ str += " when\n";
+ str += " Primitives( $s : shortPrimitive == 1, $array1 : primitiveShortArray ) \n";
+ str += " Primitives( shortPrimitive != 1, $array2 : primitiveShortArray not contains sGlobal, primitiveShortArray not contains $s, ";
+ str += " shortPrimitive not memberOf $array2, shortPrimitive not memberOf $array1, shortPrimitive not memberOf sArrayGlobal )\n";
+ str += " then\n";
+ str += " list.add( \"ok1\" );\n";
+ str += "end\n";
+
+ final KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+ kbuilder.add( ResourceFactory.newByteArrayResource( str.getBytes() ), ResourceType.DRL );
+
+ if ( kbuilder.hasErrors() ) {
+ fail( "kbuilder has errors\n:" + kbuilder.getErrors() );
+ }
+
+ KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+ kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
+
+ kbase = SerializationHelper.serializeObject( kbase );
+ final StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+
+ final List list = new ArrayList();
+ ksession.setGlobal( "list",
+ list );
+ ksession.setGlobal( "sGlobal",
+ (short) 1 );
+ ksession.setGlobal( "sArrayGlobal",
+ new short[]{4, 5, 6} );
+
+ final Primitives p1 = new Primitives();
+ p1.setPrimitiveShortArray( new short[]{4, 5, 6} );
+ p1.setShortPrimitive( (short) 2 );
+ FactHandle p1h = ksession.insert( p1 );
+
+ final Primitives p2 = new Primitives();
+ p2.setPrimitiveShortArray( new short[]{4, 5, 6} );
+ p2.setShortPrimitive( (short) 1 );
+ ksession.insert( p2 );
+
+ ksession.fireAllRules();
+
+ assertEquals( 1,
+ list.size() );
+
+ ksession.retract( p1h );
+
+ ksession.insert( p1 );
+
+ ksession.fireAllRules();
+
+ assertEquals( 2,
+ list.size() );
+ }
+
public void testContainsCharArray() throws Exception {
String str = "";
str += "package org.drools;\n";
str += "global java.util.List list;\n";
str += "global Character cGlobal;\n";
+ str += "global Object cArrayGlobal;\n";
str += "rule \"contains in array\"\n";
str += " salience 10\n";
str += " when\n";
- str += " Primitives( $c : charPrimitive == 'c' ) \n";
- str += " Primitives( charPrimitive != 'c', primitiveCharArray contains cGlobal, primitiveCharArray contains $c )\n";
+ str += " Primitives( $c : charPrimitive == 'c', $array1 : primitiveCharArray ) \n";
+ str += " Primitives( charPrimitive != 'c', $array2 : primitiveCharArray contains cGlobal, primitiveCharArray contains $c, ";
+ str += " charPrimitive memberOf $array2, charPrimitive memberOf $array1, charPrimitive memberOf cArrayGlobal )\n";
str += " then\n";
str += " list.add( \"ok1\" );\n";
- str += "end\n";
+ str += "end\n";
final KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add( ResourceFactory.newByteArrayResource( str.getBytes() ), ResourceType.DRL );
@@ -224,16 +436,19 @@
final List list = new ArrayList();
ksession.setGlobal( "list",
- list );
-
+ list );
ksession.setGlobal( "cGlobal",
- 'c' );
+ 'c' );
+ ksession.setGlobal( "cArrayGlobal",
+ new char[]{ 'a', 'b', 'c'} );
final Primitives p1 = new Primitives();
p1.setPrimitiveCharArray( new char[]{ 'a', 'b', 'c'} );
+ p1.setCharPrimitive( 'a' );
FactHandle p1h = ksession.insert( p1 );
final Primitives p2 = new Primitives();
+ p2.setPrimitiveCharArray( new char[]{ 'a', 'b', 'c'} );
p2.setCharPrimitive( 'c' );
ksession.insert( p2 );
@@ -252,21 +467,87 @@
list.size() );
}
+ public void testNotContainsCharArray() throws Exception {
+ String str = "";
+ str += "package org.drools;\n";
+
+ str += "global java.util.List list;\n";
+ str += "global Character cGlobal;\n";
+ str += "global Object cArrayGlobal;\n";
+
+ str += "rule \"contains in array\"\n";
+ str += " salience 10\n";
+ str += " when\n";
+ str += " Primitives( $c : charPrimitive == 'c', $array1 : primitiveCharArray ) \n";
+ str += " Primitives( charPrimitive != 'c', $array2 : primitiveCharArray not contains cGlobal, primitiveCharArray not contains $c, ";
+ str += " charPrimitive not memberOf $array2, charPrimitive not memberOf $array1, charPrimitive not memberOf cArrayGlobal )\n";
+ str += " then\n";
+ str += " list.add( \"ok1\" );\n";
+ str += "end\n";
+
+ final KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+ kbuilder.add( ResourceFactory.newByteArrayResource( str.getBytes() ), ResourceType.DRL );
+
+ if ( kbuilder.hasErrors() ) {
+ fail( "kbuilder has errors\n:" + kbuilder.getErrors() );
+ }
+
+ KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+ kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
+
+ kbase = SerializationHelper.serializeObject( kbase );
+ final StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+
+ final List list = new ArrayList();
+ ksession.setGlobal( "list",
+ list );
+ ksession.setGlobal( "cGlobal",
+ 'c' );
+ ksession.setGlobal( "cArrayGlobal",
+ new char[]{ 'd', 'e', 'f'} );
+
+ final Primitives p1 = new Primitives();
+ p1.setPrimitiveCharArray( new char[]{ 'd', 'e', 'f'} );
+ p1.setCharPrimitive( 'a' );
+ FactHandle p1h = ksession.insert( p1 );
+
+ final Primitives p2 = new Primitives();
+ p2.setPrimitiveCharArray( new char[]{ 'd', 'e', 'f'} );
+ p2.setCharPrimitive( 'c' );
+ ksession.insert( p2 );
+
+ ksession.fireAllRules();
+
+ assertEquals( 1,
+ list.size() );
+
+ ksession.retract( p1h );
+
+ ksession.insert( p1 );
+
+ ksession.fireAllRules();
+
+ assertEquals( 2,
+ list.size() );
+ }
+
public void testContainsIntArray() throws Exception {
String str = "";
str += "package org.drools;\n";
str += "global java.util.List list;\n";
- str += "global Integer iGlobal;\n";
+ str += "global Integer iGlobal;\n";
+ str += "global Object iArrayGlobal;\n";
str += "rule \"contains in array\"\n";
str += " salience 10\n";
str += " when\n";
- str += " Primitives( $i : intPrimitive == 10 ) \n";
- str += " Primitives( intPrimitive != 10, primitiveIntArray contains iGlobal, primitiveIntArray contains $i )\n";
+ str += " Primitives( $i : intPrimitive == 10, $array1 : primitiveIntArray ) \n";
+ str += " Primitives( intPrimitive != 10, $array2 : primitiveIntArray contains iGlobal, primitiveIntArray contains $i, ";
+ str += " intPrimitive memberOf $array2, intPrimitive memberOf $array1, intPrimitive memberOf iArrayGlobal )\n";
str += " then\n";
str += " list.add( \"ok1\" );\n";
- str += "end\n";
+ str += "end\n";
final KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add( ResourceFactory.newByteArrayResource( str.getBytes() ), ResourceType.DRL );
@@ -286,13 +567,17 @@
list );
ksession.setGlobal( "iGlobal",
- 10 );
+ 10 );
+ ksession.setGlobal( "iArrayGlobal",
+ new int[]{ 5, 10, 20} );
final Primitives p1 = new Primitives();
p1.setPrimitiveIntArray( new int[]{ 5, 10, 20} );
+ p1.setIntPrimitive( 5 );
FactHandle p1h = ksession.insert( p1 );
final Primitives p2 = new Primitives();
+ p2.setPrimitiveIntArray( new int[]{ 5, 10, 20} );
p2.setIntPrimitive( 10 );
ksession.insert( p2 );
@@ -311,21 +596,88 @@
list.size() );
}
+ public void testNotContainsIntArray() throws Exception {
+ String str = "";
+ str += "package org.drools;\n";
+
+ str += "global java.util.List list;\n";
+ str += "global Integer iGlobal;\n";
+ str += "global Object iArrayGlobal;\n";
+
+ str += "rule \"contains in array\"\n";
+ str += " salience 10\n";
+ str += " when\n";
+ str += " Primitives( $i : intPrimitive == 10, $array1 : primitiveIntArray ) \n";
+ str += " Primitives( intPrimitive != 10, $array2 : primitiveIntArray not contains iGlobal, primitiveIntArray not contains $i, ";
+ str += " intPrimitive not memberOf $array2, intPrimitive not memberOf $array1, intPrimitive not memberOf iArrayGlobal )\n";
+ str += " then\n";
+ str += " list.add( \"ok1\" );\n";
+ str += "end\n";
+
+ final KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+ kbuilder.add( ResourceFactory.newByteArrayResource( str.getBytes() ), ResourceType.DRL );
+
+ if ( kbuilder.hasErrors() ) {
+ fail( "kbuilder has errors\n:" + kbuilder.getErrors() );
+ }
+
+ KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+ kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
+
+ kbase = SerializationHelper.serializeObject( kbase );
+ final StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+
+ final List list = new ArrayList();
+ ksession.setGlobal( "list",
+ list );
+
+ ksession.setGlobal( "iGlobal",
+ 10 );
+ ksession.setGlobal( "iArrayGlobal",
+ new int[]{ 40, 50, 60} );
+
+ final Primitives p1 = new Primitives();
+ p1.setPrimitiveIntArray( new int[]{ 40, 50, 60} );
+ p1.setIntPrimitive( 5 );
+ FactHandle p1h = ksession.insert( p1 );
+
+ final Primitives p2 = new Primitives();
+ p2.setPrimitiveIntArray( new int[]{ 40, 50, 60} );
+ p2.setIntPrimitive( 10 );
+ ksession.insert( p2 );
+
+ ksession.fireAllRules();
+
+ assertEquals( 1,
+ list.size() );
+
+ ksession.retract( p1h );
+
+ ksession.insert( p1 );
+
+ ksession.fireAllRules();
+
+ assertEquals( 2,
+ list.size() );
+ }
+
public void testContainsLongArray() throws Exception {
String str = "";
str += "package org.drools;\n";
str += "global java.util.List list;\n";
- str += "global Long lGlobal;\n";
+ str += "global Long lGlobal;\n";
+ str += "global Object lArrayGlobal;\n";
str += "rule \"contains in array\"\n";
str += " salience 10\n";
str += " when\n";
- str += " Primitives( $l : longPrimitive == 10 ) \n";
- str += " Primitives( longPrimitive != 10, primitiveLongArray contains lGlobal, primitiveLongArray contains $l )\n";
+ str += " Primitives( $l : longPrimitive == 10, $array1 : primitiveLongArray ) \n";
+ str += " Primitives( longPrimitive != 10, $array2 : primitiveLongArray contains lGlobal, primitiveLongArray contains $l, ";
+ str += " longPrimitive memberOf $array2, longPrimitive memberOf $array1, longPrimitive memberOf lArrayGlobal )\n";
str += " then\n";
str += " list.add( \"ok1\" );\n";
- str += "end\n";
+ str += "end\n";
final KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add( ResourceFactory.newByteArrayResource( str.getBytes() ), ResourceType.DRL );
@@ -345,14 +697,18 @@
list );
ksession.setGlobal( "lGlobal",
- 10l );
+ 10l );
+ ksession.setGlobal( "lArrayGlobal",
+ new long[]{ 5, 10, 20} );
final Primitives p1 = new Primitives();
p1.setPrimitiveLongArray( new long[]{ 5, 10, 20} );
+ p1.setLongPrimitive( 5 );
FactHandle p1h = ksession.insert( p1 );
final Primitives p2 = new Primitives();
p2.setLongPrimitive( 10 );
+ p2.setPrimitiveLongArray( new long[]{ 5, 10, 20} );
ksession.insert( p2 );
ksession.fireAllRules();
@@ -370,21 +726,88 @@
list.size() );
}
+ public void testNotContainsLongArray() throws Exception {
+ String str = "";
+ str += "package org.drools;\n";
+
+ str += "global java.util.List list;\n";
+ str += "global Long lGlobal;\n";
+ str += "global Object lArrayGlobal;\n";
+
+ str += "rule \"contains in array\"\n";
+ str += " salience 10\n";
+ str += " when\n";
+ str += " Primitives( $l : longPrimitive == 10, $array1 : primitiveLongArray ) \n";
+ str += " Primitives( longPrimitive != 10, $array2 : primitiveLongArray not contains lGlobal, primitiveLongArray not contains $l, ";
+ str += " longPrimitive not memberOf $array2, longPrimitive not memberOf $array1, longPrimitive not memberOf lArrayGlobal )\n";
+ str += " then\n";
+ str += " list.add( \"ok1\" );\n";
+ str += "end\n";
+
+ final KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+ kbuilder.add( ResourceFactory.newByteArrayResource( str.getBytes() ), ResourceType.DRL );
+
+ if ( kbuilder.hasErrors() ) {
+ fail( "kbuilder has errors\n:" + kbuilder.getErrors() );
+ }
+
+ KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+ kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
+
+ kbase = SerializationHelper.serializeObject( kbase );
+ final StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+
+ final List list = new ArrayList();
+ ksession.setGlobal( "list",
+ list );
+
+ ksession.setGlobal( "lGlobal",
+ 10l );
+ ksession.setGlobal( "lArrayGlobal",
+ new long[]{ 40, 50, 60} );
+
+ final Primitives p1 = new Primitives();
+ p1.setPrimitiveLongArray( new long[]{ 40, 50, 60} );
+ p1.setLongPrimitive( 5 );
+ FactHandle p1h = ksession.insert( p1 );
+
+ final Primitives p2 = new Primitives();
+ p2.setLongPrimitive( 10 );
+ p2.setPrimitiveLongArray( new long[]{ 40, 50, 60} );
+ ksession.insert( p2 );
+
+ ksession.fireAllRules();
+
+ assertEquals( 1,
+ list.size() );
+
+ ksession.retract( p1h );
+
+ ksession.insert( p1 );
+
+ ksession.fireAllRules();
+
+ assertEquals( 2,
+ list.size() );
+ }
+
public void testContainsFloatArray() throws Exception {
String str = "";
str += "package org.drools;\n";
str += "global java.util.List list;\n";
str += "global Float fGlobal;\n";
+ str += "global Object fArrayGlobal;\n";
str += "rule \"contains in array\"\n";
str += " salience 10\n";
str += " when\n";
- str += " Primitives( $f : floatPrimitive == 10 ) \n";
- str += " Primitives( floatPrimitive != 10, primitiveFloatArray contains fGlobal, primitiveFloatArray contains $f )\n";
+ str += " Primitives( $f : floatPrimitive == 10, $array1 : primitiveFloatArray ) \n";
+ str += " Primitives( floatPrimitive != 10, $array2 : primitiveFloatArray contains fGlobal, primitiveFloatArray contains $f, ";
+ str += " floatPrimitive memberOf $array2, floatPrimitive memberOf $array1, floatPrimitive memberOf fArrayGlobal )\n";
str += " then\n";
str += " list.add( \"ok1\" );\n";
- str += "end\n";
+ str += "end\n";
final KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add( ResourceFactory.newByteArrayResource( str.getBytes() ), ResourceType.DRL );
@@ -404,14 +827,18 @@
list );
ksession.setGlobal( "fGlobal",
- 10.0f );
+ 10.0f );
+ ksession.setGlobal( "fArrayGlobal",
+ new float[]{ 5, 10, 20} );
final Primitives p1 = new Primitives();
- p1.setPrimitiveFloatArray( new float[]{ 5f, 10f, 20f} );
+ p1.setFloatPrimitive( 5 );
+ p1.setPrimitiveFloatArray( new float[]{ 5, 10, 20} );
FactHandle p1h = ksession.insert( p1 );
final Primitives p2 = new Primitives();
- p2.setFloatPrimitive( 10f );
+ p2.setFloatPrimitive( 10 );
+ p2.setPrimitiveFloatArray( new float[]{ 5, 10, 20} );
ksession.insert( p2 );
ksession.fireAllRules();
@@ -429,18 +856,86 @@
list.size() );
}
+ public void testNotContainsFloatArray() throws Exception {
+ String str = "";
+ str += "package org.drools;\n";
+
+ str += "global java.util.List list;\n";
+ str += "global Float fGlobal;\n";
+ str += "global Object fArrayGlobal;\n";
+
+ str += "rule \"contains in array\"\n";
+ str += " salience 10\n";
+ str += " when\n";
+ str += " Primitives( $f : floatPrimitive == 10, $array1 : primitiveFloatArray ) \n";
+ str += " Primitives( floatPrimitive != 10, $array2 : primitiveFloatArray not contains fGlobal, primitiveFloatArray not contains $f, ";
+ str += " floatPrimitive not memberOf $array2, floatPrimitive not memberOf $array1, floatPrimitive not memberOf fArrayGlobal )\n";
+ str += " then\n";
+ str += " list.add( \"ok1\" );\n";
+ str += "end\n";
+
+ final KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+ kbuilder.add( ResourceFactory.newByteArrayResource( str.getBytes() ), ResourceType.DRL );
+
+ if ( kbuilder.hasErrors() ) {
+ fail( "kbuilder has errors\n:" + kbuilder.getErrors() );
+ }
+
+ KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+ kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
+
+ kbase = SerializationHelper.serializeObject( kbase );
+ final StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+
+ final List list = new ArrayList();
+ ksession.setGlobal( "list",
+ list );
+
+ ksession.setGlobal( "fGlobal",
+ 10.0f );
+ ksession.setGlobal( "fArrayGlobal",
+ new float[]{ 40, 50, 60} );
+
+ final Primitives p1 = new Primitives();
+ p1.setFloatPrimitive( 5 );
+ p1.setPrimitiveFloatArray( new float[]{ 40, 50, 60} );
+ FactHandle p1h = ksession.insert( p1 );
+
+ final Primitives p2 = new Primitives();
+ p2.setFloatPrimitive( 10 );
+ p2.setPrimitiveFloatArray( new float[]{ 40, 50, 60} );
+ ksession.insert( p2 );
+
+ ksession.fireAllRules();
+
+ assertEquals( 1,
+ list.size() );
+
+ ksession.retract( p1h );
+
+ ksession.insert( p1 );
+
+ ksession.fireAllRules();
+
+ assertEquals( 2,
+ list.size() );
+ }
+
+
public void testContainsDoubleArray() throws Exception {
String str = "";
str += "package org.drools;\n";
str += "global java.util.List list;\n";
str += "global Double dGlobal;\n";
+ str += "global Object dArrayGlobal;\n";
str += "rule \"contains in array\"\n";
str += " salience 10\n";
str += " when\n";
- str += " Primitives( $d : doublePrimitive == 10 ) \n";
- str += " Primitives( doublePrimitive != 10, primitiveDoubleArray contains dGlobal, primitiveDoubleArray contains $d )\n";
+ str += " Primitives( $d : doublePrimitive == 10, $array1 : primitiveDoubleArray ) \n";
+ str += " Primitives( doublePrimitive != 10, $array2 : primitiveDoubleArray contains dGlobal, primitiveDoubleArray contains $d, ";
+ str += " doublePrimitive memberOf $array2, doublePrimitive memberOf $array1, doublePrimitive memberOf dArrayGlobal )\n";
str += " then\n";
str += " list.add( \"ok1\" );\n";
str += "end\n";
@@ -463,14 +958,19 @@
list );
ksession.setGlobal( "dGlobal",
- 10.0d );
+ 10.0d );
+ ksession.setGlobal( "dArrayGlobal",
+ new double[]{ 5, 10, 20} );
+
final Primitives p1 = new Primitives();
p1.setPrimitiveDoubleArray( new double[]{ 5, 10, 20} );
+ p1.setDoublePrimitive( 5 );
FactHandle p1h = ksession.insert( p1 );
final Primitives p2 = new Primitives();
p2.setDoublePrimitive( 10 );
+ p2.setPrimitiveDoubleArray( new double[]{ 5, 10, 20} );
ksession.insert( p2 );
ksession.fireAllRules();
@@ -487,5 +987,73 @@
assertEquals( 2,
list.size() );
}
+
+ public void testNotContainsDoubleArray() throws Exception {
+ String str = "";
+ str += "package org.drools;\n";
+
+ str += "global java.util.List list;\n";
+ str += "global Double dGlobal;\n";
+ str += "global Object dArrayGlobal;\n";
+
+ str += "rule \"contains in array\"\n";
+ str += " salience 10\n";
+ str += " when\n";
+ str += " Primitives( $d : doublePrimitive == 10, $array1 : primitiveDoubleArray ) \n";
+ str += " Primitives( doublePrimitive != 10, $array2 : primitiveDoubleArray not contains dGlobal, primitiveDoubleArray not contains $d, ";
+ str += " doublePrimitive not memberOf $array2, doublePrimitive not memberOf $array1, doublePrimitive not memberOf dArrayGlobal )\n";
+ str += " then\n";
+ str += " list.add( \"ok1\" );\n";
+ str += "end\n";
+
+ final KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+ kbuilder.add( ResourceFactory.newByteArrayResource( str.getBytes() ), ResourceType.DRL );
+
+ if ( kbuilder.hasErrors() ) {
+ fail( "kbuilder has errors\n:" + kbuilder.getErrors() );
+ }
+
+ KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+ kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
+
+ kbase = SerializationHelper.serializeObject( kbase );
+ final StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+
+ final List list = new ArrayList();
+ ksession.setGlobal( "list",
+ list );
+
+ ksession.setGlobal( "dGlobal",
+ 10.0d );
+
+ ksession.setGlobal( "dArrayGlobal",
+ new double[]{ 40, 50, 60} );
+
+ final Primitives p1 = new Primitives();
+ p1.setPrimitiveDoubleArray( new double[]{ 40, 50, 60} );
+ p1.setDoublePrimitive( 5 );
+ FactHandle p1h = ksession.insert( p1 );
+
+ final Primitives p2 = new Primitives();
+ p2.setDoublePrimitive( 10 );
+ p2.setPrimitiveDoubleArray( new double[]{ 40, 50, 60} );
+ ksession.insert( p2 );
+
+ ksession.fireAllRules();
+
+ assertEquals( 1,
+ list.size() );
+
+ ksession.retract( p1h );
+
+ ksession.insert( p1 );
+
+ ksession.fireAllRules();
+
+ assertEquals( 2,
+ list.size() );
+ }
+
+
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/SetEvaluatorsDefinition.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/SetEvaluatorsDefinition.java 2009-05-16 10:03:33 UTC (rev 26575)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/SetEvaluatorsDefinition.java 2009-05-18 04:28:22 UTC (rev 26576)
@@ -35,9 +35,9 @@
import org.drools.spi.InternalReadAccessor;
/**
- * This class defines all the set built in
- * evaluators like contains, memberOf, etc.
- *
+ * This class defines all the set built in evaluators like contains, memberOf,
+ * etc.
+ *
* @author etirelli
*/
public class SetEvaluatorsDefinition
@@ -73,12 +73,6 @@
addEvaluator( ValueType.ARRAY_TYPE,
NOT_EXCLUDES,
ArrayContainsEvaluator.INSTANCE );
- addEvaluator( ValueType.ARRAY_TYPE,
- MEMBEROF,
- ArrayMemberOfEvaluator.INSTANCE );
- addEvaluator( ValueType.ARRAY_TYPE,
- NOT_MEMBEROF,
- ArrayNotMemberOfEvaluator.INSTANCE );
addEvaluator( ValueType.BIG_DECIMAL_TYPE,
MEMBEROF,
BigDecimalMemberOfEvaluator.INSTANCE );
@@ -322,9 +316,8 @@
return eval;
}
- /* *********************************************************
- * Evaluator Implementations
- * *********************************************************
+ /*
+ * Evaluator Implementations
*/
public static class ArrayContainsEvaluator extends BaseEvaluator {
@@ -346,8 +339,7 @@
if ( array == null ) return false;
return getArrayContains( array.getClass() ).contains( array,
- object2,
- true );
+ object2 );
}
public boolean evaluateCachedRight(InternalWorkingMemory workingMemory,
@@ -359,8 +351,7 @@
return getArrayContains( array.getClass() ).contains( array,
workingMemory,
context.declaration.getExtractor(),
- left,
- true );
+ left );
}
public boolean evaluateCachedLeft(InternalWorkingMemory workingMemory,
@@ -374,8 +365,7 @@
return getArrayContains( array.getClass() ).contains( array,
workingMemory,
context.declaration.getExtractor(),
- context.getTuple().get( context.getVariableDeclaration() ).getObject(),
- true );
+ context.reteTuple.get( context.declaration ).getObject() );
}
public boolean evaluate(InternalWorkingMemory workingMemory,
@@ -391,8 +381,7 @@
return getArrayContains( array.getClass() ).contains( array,
workingMemory,
extractor2,
- object2,
- true );
+ object2 );
}
public String toString() {
@@ -416,100 +405,39 @@
final InternalReadAccessor extractor,
final Object object1,
final FieldValue object2) {
- final Object value = object2.getValue();
- final Object[] array = (Object[]) extractor.getValue( workingMemory,
- object1 );
- if ( array == null ) return true;
- return !contains( array,
- value );
- }
+ final Object array = extractor.getValue( workingMemory,
+ object1 );
- public boolean evaluateCachedRight(InternalWorkingMemory workingMemory,
- final VariableContextEntry context,
- final Object left) {
- final Object value = context.declaration.getExtractor().getValue( workingMemory,
- left );
- final Object[] array = (Object[]) ((ObjectVariableContextEntry) context).right;
- if ( array == null ) return true;
- return !contains( array,
- value );
- }
+ if ( array == null ) return false;
- public boolean evaluateCachedLeft(InternalWorkingMemory workingMemory,
- final VariableContextEntry context,
- final Object right) {
- final Object value = ((ObjectVariableContextEntry) context).left;
- final Object[] array = (Object[]) context.extractor.getValue( workingMemory,
- right );
- if ( array == null ) return true;
- return !contains( array,
- value );
+ return !getArrayContains( array.getClass() ).contains( array,
+ object2 );
}
- public boolean evaluate(InternalWorkingMemory workingMemory,
- final InternalReadAccessor extractor1,
- final Object object1,
- final InternalReadAccessor extractor2,
- final Object object2) {
- final Object value = extractor2.getValue( workingMemory,
- object2 );
- final Object[] array = (Object[]) extractor1.getValue( workingMemory,
- object1 );
-
- if ( array == null ) return true;
- return !contains( array,
- value );
- }
-
- public String toString() {
- return "Array excludes";
- }
- }
-
- public static class ArrayMemberOfEvaluator extends BaseEvaluator {
- /**
- *
- */
- private static final long serialVersionUID = 400L;
- public final static Evaluator INSTANCE = new ArrayMemberOfEvaluator();
-
- public ArrayMemberOfEvaluator() {
- super( ValueType.ARRAY_TYPE,
- MEMBEROF );
- }
-
- public boolean evaluate(InternalWorkingMemory workingMemory,
- final InternalReadAccessor extractor,
- final Object object1,
- final FieldValue object2) {
- final Object[] array = (Object[]) object2.getValue();
- final Object value = extractor.getValue( workingMemory,
- object1 );
- if ( array == null ) return false;
- return contains( array,
- value );
- }
-
public boolean evaluateCachedRight(InternalWorkingMemory workingMemory,
final VariableContextEntry context,
final Object left) {
- final Object[] array = (Object[]) context.declaration.getExtractor().getValue( workingMemory,
- left );
- final Object value = ((ObjectVariableContextEntry) context).right;
+ final Object array = ((ObjectVariableContextEntry) context).right;
if ( array == null ) return false;
- return contains( array,
- value );
+
+ return !getArrayContains( array.getClass() ).contains( array,
+ workingMemory,
+ context.declaration.getExtractor(),
+ left );
}
public boolean evaluateCachedLeft(InternalWorkingMemory workingMemory,
final VariableContextEntry context,
final Object right) {
- final Object[] array = (Object[]) ((ObjectVariableContextEntry) context).left;
- final Object value = context.extractor.getValue( workingMemory,
+ final Object array = context.extractor.getValue( workingMemory,
right );
+
if ( array == null ) return false;
- return contains( array,
- value );
+
+ return !getArrayContains( array.getClass() ).contains( array,
+ workingMemory,
+ context.declaration.getExtractor(),
+ context.getTuple().get( context.getVariableDeclaration() ).getObject() );
}
public boolean evaluate(InternalWorkingMemory workingMemory,
@@ -517,87 +445,23 @@
final Object object1,
final InternalReadAccessor extractor2,
final Object object2) {
- final Object[] array = (Object[]) extractor2.getValue( workingMemory,
- object2 );
- final Object value = extractor1.getValue( workingMemory,
+ final Object array = extractor1.getValue( workingMemory,
object1 );
if ( array == null ) return false;
- return contains( array,
- value );
- }
- public String toString() {
- return "Array memberOf";
- }
- }
-
- public static class ArrayNotMemberOfEvaluator extends BaseEvaluator {
- /**
- *
- */
- private static final long serialVersionUID = 400L;
- public final static Evaluator INSTANCE = new ArrayNotMemberOfEvaluator();
-
- public ArrayNotMemberOfEvaluator() {
- super( ValueType.ARRAY_TYPE,
- NOT_MEMBEROF );
- }
-
- public boolean evaluate(InternalWorkingMemory workingMemory,
- final InternalReadAccessor extractor,
- final Object object1,
- final FieldValue object2) {
- final Object[] array = (Object[]) object2.getValue();
- final Object value = extractor.getValue( workingMemory,
- object1 );
- if ( array == null ) return true;
- return !contains( array,
- value );
- }
-
- public boolean evaluateCachedRight(InternalWorkingMemory workingMemory,
- final VariableContextEntry context,
- final Object left) {
- final Object[] array = (Object[]) context.declaration.getExtractor().getValue( workingMemory,
- left );
- final Object value = ((ObjectVariableContextEntry) context).right;
- if ( array == null ) return true;
- return !SetEvaluatorsDefinition.contains( array,
- value );
- }
-
- public boolean evaluateCachedLeft(InternalWorkingMemory workingMemory,
- final VariableContextEntry context,
- final Object right) {
- final Object[] array = (Object[]) ((ObjectVariableContextEntry) context).left;
- final Object value = context.extractor.getValue( workingMemory,
- right );
- if ( array == null ) return true;
- return !contains( array,
- value );
- }
-
- public boolean evaluate(InternalWorkingMemory workingMemory,
- final InternalReadAccessor extractor1,
- final Object object1,
- final InternalReadAccessor extractor2,
- final Object object2) {
- final Object[] array = (Object[]) extractor2.getValue( workingMemory,
+ return !getArrayContains( array.getClass() ).contains( array,
+ workingMemory,
+ extractor2,
object2 );
- final Object value = extractor1.getValue( workingMemory,
- object1 );
-
- if ( array == null ) return true;
- return !SetEvaluatorsDefinition.contains( array,
- value );
}
public String toString() {
- return "Array not memberOf";
+ return "Array not contains";
}
}
+
private static boolean contains(Object[] array,
Object value) {
for ( int i = 0; i < array.length; i++ ) {
@@ -634,13 +498,19 @@
final FieldValue object2) {
if ( object2.isNull() ) {
return false;
- } else if ( !object2.isCollectionField() ) {
+ } else if ( object2.isCollectionField() ) {
+ final Collection col = (Collection) object2.getValue();
+ final Object value = extractor.getValue( workingMemory,
+ object1 );
+ return col.contains( value );
+ } else if ( object2.getValue().getClass().isArray() ) {
+ return getArrayContains( object2.getValue().getClass() ).contains( object2.getValue(),
+ workingMemory,
+ extractor,
+ object1 );
+ } else {
throw new ClassCastException( "Can't check if an attribute is member of an object of class " + object2.getValue().getClass() );
}
- final Collection col = (Collection) object2.getValue();
- final Object value = extractor.getValue( workingMemory,
- object1 );
- return col.contains( value );
}
public boolean evaluateCachedRight(InternalWorkingMemory workingMemory,
@@ -650,12 +520,18 @@
left );
if ( object == null ) {
return false;
- } else if ( !(object instanceof Collection) ) {
+ } else if ( object instanceof Collection ) {
+ final Collection col = (Collection) object;
+ final Object value = ((ObjectVariableContextEntry) context).right;
+ return col.contains( value );
+ } else if ( object.getClass().isArray() ) {
+ return getArrayContains( object.getClass() ).contains( object,
+ workingMemory,
+ context.extractor,
+ context.object );
+ } else {
throw new ClassCastException( "Can't check if an attribute is member of an object of class " + object.getClass() );
}
- final Collection col = (Collection) object;
- final Object value = ((ObjectVariableContextEntry) context).right;
- return col.contains( value );
}
public boolean evaluateCachedLeft(InternalWorkingMemory workingMemory,
@@ -664,13 +540,19 @@
final Object object = ((ObjectVariableContextEntry) context).left;
if ( object == null ) {
return false;
- } else if ( !(object instanceof Collection) ) {
+ } else if ( object instanceof Collection ) {
+ final Collection col = (Collection) object;
+ final Object value = context.extractor.getValue( workingMemory,
+ right );
+ return col.contains( value );
+ } else if ( object.getClass().isArray() ) {
+ return getArrayContains( object.getClass() ).contains( object,
+ workingMemory,
+ context.extractor,
+ right );
+ } else {
throw new ClassCastException( "Can't check if an attribute is member of an object of class " + object.getClass() );
}
- final Collection col = (Collection) object;
- final Object value = context.extractor.getValue( workingMemory,
- right );
- return col.contains( value );
}
public boolean evaluate(InternalWorkingMemory workingMemory,
@@ -682,13 +564,19 @@
object2 );
if ( object == null ) {
return false;
- } else if ( !(object instanceof Collection) ) {
+ } else if ( object instanceof Collection ) {
+ final Collection col = (Collection) object;
+ final Object value = extractor1.getValue( workingMemory,
+ object1 );
+ return col.contains( value );
+ } else if ( object.getClass().isArray() ) {
+ return getArrayContains( object.getClass() ).contains( object,
+ workingMemory,
+ extractor1,
+ object1 );
+ } else {
throw new ClassCastException( "Can't check if an attribute is member of an object of class " + object.getClass() );
}
- final Collection col = (Collection) object;
- final Object value = extractor1.getValue( workingMemory,
- object1 );
- return col.contains( value );
}
public abstract String toString();
@@ -716,13 +604,19 @@
final FieldValue object2) {
if ( object2.isNull() ) {
return false;
- } else if ( !object2.isCollectionField() ) {
+ } else if ( object2.isCollectionField() ) {
+ final Collection col = (Collection) object2.getValue();
+ final Object value = extractor.getValue( workingMemory,
+ object1 );
+ return !col.contains( value );
+ } else if ( object2.getValue().getClass().isArray() ) {
+ return !getArrayContains( object2.getValue().getClass() ).contains( object2.getValue(),
+ workingMemory,
+ extractor,
+ object1 );
+ } else {
throw new ClassCastException( "Can't check if an attribute is not member of an object of class " + object2.getValue().getClass() );
}
- final Collection col = (Collection) object2.getValue();
- final Object value = extractor.getValue( workingMemory,
- object1 );
- return !col.contains( value );
}
public boolean evaluateCachedRight(InternalWorkingMemory workingMemory,
@@ -732,12 +626,18 @@
left );
if ( object == null ) {
return false;
- } else if ( !(object instanceof Collection) ) {
+ } else if ( object instanceof Collection ) {
+ final Collection col = (Collection) object;
+ final Object value = ((ObjectVariableContextEntry) context).right;
+ return !col.contains( value );
+ } else if ( object.getClass().isArray() ) {
+ return !getArrayContains( object.getClass() ).contains( object,
+ workingMemory,
+ context.extractor,
+ context.object );
+ } else {
throw new ClassCastException( "Can't check if an attribute is not member of an object of class " + object.getClass() );
}
- final Collection col = (Collection) object;
- final Object value = ((ObjectVariableContextEntry) context).right;
- return !col.contains( value );
}
public boolean evaluateCachedLeft(InternalWorkingMemory workingMemory,
@@ -746,13 +646,19 @@
final Object object = ((ObjectVariableContextEntry) context).left;
if ( object == null ) {
return false;
- } else if ( !(object instanceof Collection) ) {
+ } else if ( object instanceof Collection ) {
+ final Collection col = (Collection) object;
+ final Object value = context.extractor.getValue( workingMemory,
+ right );
+ return !col.contains( value );
+ } else if ( object.getClass().isArray() ) {
+ return !getArrayContains( object.getClass() ).contains( object,
+ workingMemory,
+ context.extractor,
+ right );
+ } else {
throw new ClassCastException( "Can't check if an attribute is not member of an object of class " + object.getClass() );
}
- final Collection col = (Collection) object;
- final Object value = context.extractor.getValue( workingMemory,
- right );
- return !col.contains( value );
}
public boolean evaluate(InternalWorkingMemory workingMemory,
@@ -764,13 +670,20 @@
object2 );
if ( object == null ) {
return false;
- } else if ( !(object instanceof Collection) ) {
+ } else if ( object instanceof Collection ) {
+ final Collection col = (Collection) object;
+ final Object value = extractor1.getValue( workingMemory,
+ object1 );
+ return !col.contains( value );
+ } else if ( object.getClass().isArray() ) {
+ return !getArrayContains( object.getClass() ).contains( object,
+ workingMemory,
+ extractor1,
+ object1 );
+ } else {
throw new ClassCastException( "Can't check if an attribute is not member of an object of class " + object.getClass() );
}
- final Collection col = (Collection) object;
- final Object value = extractor1.getValue( workingMemory,
- object1 );
- return !col.contains( value );
+
}
public abstract String toString();
@@ -1286,14 +1199,20 @@
Class getArrayType();
boolean contains(Object array,
- FieldValue value,
- boolean negate);
+ FieldValue value);
boolean contains(Object array,
InternalWorkingMemory workingMemory,
InternalReadAccessor accessor,
- Object object,
- boolean negate);
+ Object object);
+ //
+ // boolean member(FieldValue array,
+ // Object object);
+ //
+ // boolean member(Object object,
+ // InternalWorkingMemory workingMemory,
+ // InternalReadAccessor accessor,
+ // Object array);
}
public static class BooleanArrayContainsEvaluator
@@ -1301,34 +1220,32 @@
ArrayContains {
public boolean contains(Object array,
- FieldValue value,
- boolean negate) {
+ FieldValue value) {
boolean[] boolArray = (boolean[]) array;
for ( int i = 0, length = boolArray.length; i < length; i++ ) {
if ( boolArray[i] == value.getBooleanValue() ) {
- return negate == true;
+ return true;
}
}
- return negate == false;
+ return false;
}
public boolean contains(Object array,
InternalWorkingMemory workingMemory,
InternalReadAccessor accessor,
- Object object,
- boolean negate) {
+ Object object) {
boolean[] boolArray = (boolean[]) array;
for ( int i = 0, length = boolArray.length; i < length; i++ ) {
if ( boolArray[i] == accessor.getBooleanValue( workingMemory,
object ) ) {
- return negate == true;
+ return true;
}
}
- return negate == false;
+ return false;
}
private boolean contains(byte[] array,
@@ -1336,11 +1253,11 @@
boolean negate) {
for ( int i = 0, length = array.length; i < length; i++ ) {
if ( array[i] == value ) {
- return negate == true;
+ return true;
}
}
- return negate == false;
+ return false;
}
public Class getArrayType() {
@@ -1354,34 +1271,29 @@
ArrayContains {
public boolean contains(Object array,
- FieldValue value,
- boolean negate) {
+ FieldValue value) {
return contains( (byte[]) array,
- value.getByteValue(),
- negate );
+ value.getByteValue() );
}
public boolean contains(Object array,
InternalWorkingMemory workingMemory,
InternalReadAccessor accessor,
- Object object,
- boolean negate) {
+ Object object) {
return contains( (byte[]) array,
accessor.getByteValue( workingMemory,
- object ),
- negate );
+ object ) );
}
private boolean contains(byte[] array,
- byte value,
- boolean negate) {
+ byte value) {
for ( int i = 0, length = array.length; i < length; i++ ) {
if ( array[i] == value ) {
- return negate == true;
+ return true;
}
}
- return negate == false;
+ return false;
}
public Class getArrayType() {
@@ -1395,34 +1307,29 @@
ArrayContains {
public boolean contains(Object array,
- FieldValue value,
- boolean negate) {
+ FieldValue value) {
return contains( (short[]) array,
- value.getShortValue(),
- negate );
+ value.getShortValue() );
}
public boolean contains(Object array,
InternalWorkingMemory workingMemory,
InternalReadAccessor accessor,
- Object object,
- boolean negate) {
+ Object object) {
return contains( (short[]) array,
accessor.getShortValue( workingMemory,
- object ),
- negate );
+ object ) );
}
private boolean contains(short[] array,
- short value,
- boolean negate) {
+ short value) {
for ( int i = 0, length = array.length; i < length; i++ ) {
if ( array[i] == value ) {
- return negate == true;
+ return true;
}
}
- return negate == false;
+ return false;
}
public Class getArrayType() {
@@ -1435,34 +1342,29 @@
ArrayContains {
public boolean contains(Object array,
- FieldValue value,
- boolean negate) {
+ FieldValue value) {
return contains( (char[]) array,
- value.getCharValue(),
- negate );
+ value.getCharValue() );
}
public boolean contains(Object array,
InternalWorkingMemory workingMemory,
InternalReadAccessor accessor,
- Object object,
- boolean negate) {
+ Object object) {
return contains( (char[]) array,
accessor.getCharValue( workingMemory,
- object ),
- negate );
+ object ) );
}
private boolean contains(char[] array,
- char value,
- boolean negate) {
+ char value) {
for ( int i = 0, length = array.length; i < length; i++ ) {
if ( array[i] == value ) {
- return negate == true;
+ return true;
}
}
- return negate == false;
+ return false;
}
public Class getArrayType() {
@@ -1476,34 +1378,29 @@
ArrayContains {
public boolean contains(Object array,
- FieldValue value,
- boolean negate) {
+ FieldValue value) {
return contains( (int[]) array,
- value.getIntValue(),
- negate );
+ value.getIntValue() );
}
public boolean contains(Object array,
InternalWorkingMemory workingMemory,
InternalReadAccessor accessor,
- Object object,
- boolean negate) {
+ Object object) {
return contains( (int[]) array,
accessor.getIntValue( workingMemory,
- object ),
- negate );
+ object ) );
}
private boolean contains(int[] array,
- int value,
- boolean negate) {
+ int value) {
for ( int i = 0, length = array.length; i < length; i++ ) {
if ( array[i] == value ) {
- return negate == true;
+ return true;
}
}
- return negate == false;
+ return false;
}
public Class getArrayType() {
@@ -1517,34 +1414,29 @@
ArrayContains {
public boolean contains(Object array,
- FieldValue value,
- boolean negate) {
+ FieldValue value) {
return contains( (long[]) array,
- value.getLongValue(),
- negate );
+ value.getLongValue() );
}
public boolean contains(Object array,
InternalWorkingMemory workingMemory,
InternalReadAccessor accessor,
- Object object,
- boolean negate) {
+ Object object) {
return contains( (long[]) array,
accessor.getLongValue( workingMemory,
- object ),
- negate );
+ object ) );
}
private boolean contains(long[] array,
- long value,
- boolean negate) {
+ long value) {
for ( int i = 0, length = array.length; i < length; i++ ) {
if ( array[i] == value ) {
- return negate == true;
+ return true;
}
}
- return negate == false;
+ return false;
}
public Class getArrayType() {
@@ -1558,34 +1450,29 @@
ArrayContains {
public boolean contains(Object array,
- FieldValue value,
- boolean negate) {
+ FieldValue value) {
return contains( (float[]) array,
- value.getFloatValue(),
- negate );
+ value.getFloatValue() );
}
public boolean contains(Object array,
InternalWorkingMemory workingMemory,
InternalReadAccessor accessor,
- Object object,
- boolean negate) {
+ Object object) {
return contains( (float[]) array,
accessor.getFloatValue( workingMemory,
- object ),
- negate );
+ object ) );
}
private boolean contains(float[] array,
- float value,
- boolean negate) {
+ float value) {
for ( int i = 0, length = array.length; i < length; i++ ) {
if ( array[i] == value ) {
- return negate == true;
+ return true;
}
}
- return negate == false;
+ return false;
}
public Class getArrayType() {
@@ -1598,34 +1485,44 @@
ArrayContains {
public boolean contains(Object array,
- FieldValue fieldValue,
- boolean negate) {
+ FieldValue fieldValue) {
return contains( (double[]) array,
- fieldValue.getDoubleValue(),
- negate );
+ fieldValue.getDoubleValue() );
}
public boolean contains(Object array,
InternalWorkingMemory workingMemory,
InternalReadAccessor accessor,
- Object object,
- boolean negate) {
+ Object object) {
return contains( (double[]) array,
accessor.getDoubleValue( workingMemory,
- object ),
- negate );
+ object ) );
}
+ // public boolean member(FieldValue array,
+ // Object object) {
+ // return contains( (double[]) array.getValue(),
+ // object );
+ // }
+ //
+ // public boolean member(Object object,
+ // InternalWorkingMemory workingMemory,
+ // InternalReadAccessor accessor,
+ // Object array) {
+ // return contains( (double[]) accessor.getValue( workingMemory,
+ // object ),
+ // object );
+ // }
+
private boolean contains(double[] array,
- double value,
- boolean negate) {
+ double value) {
for ( int i = 0, length = array.length; i < length; i++ ) {
if ( array[i] == value ) {
- return negate == true;
+ return true;
}
}
- return negate == false;
+ return false;
}
public Class getArrayType() {
@@ -1638,38 +1535,48 @@
ArrayContains {
public boolean contains(Object array,
- FieldValue fieldValue,
- boolean negate) {
+ FieldValue fieldValue) {
return contains( (Object[]) array,
- fieldValue.getValue(),
- negate );
+ fieldValue.getValue() );
}
public boolean contains(Object array,
InternalWorkingMemory workingMemory,
InternalReadAccessor accessor,
- Object object,
- boolean negate) {
+ Object object) {
return contains( (Object[]) array,
accessor.getValue( workingMemory,
- object ),
- negate );
+ object ) );
}
private boolean contains(Object[] array,
- Object value,
- boolean negate) {
+ Object value) {
for ( int i = 0, length = array.length; i < length; i++ ) {
if ( array[i].equals( value ) ) {
- return negate == true;
+ return true;
}
}
- return negate == false;
+ return false;
}
public Class getArrayType() {
return Object[].class;
}
+
+ // public boolean member(FieldValue array,
+ // Object object) {
+ // return contains( (Object[]) array.getValue(),
+ // object );
+ // }
+ //
+ // public boolean member(Object object,
+ // InternalWorkingMemory workingMemory,
+ // InternalReadAccessor accessor,
+ // Object array) {
+ // return contains( (Object[]) accessor.getValue( workingMemory,
+ // object ),
+ // object );
+ // }
}
}
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 2009-05-16 10:03:33 UTC (rev 26575)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/VariableConstraint.java 2009-05-18 04:28:22 UTC (rev 26576)
@@ -123,7 +123,7 @@
public String toString() {
return "[VariableConstraint fieldExtractor=" + this.fieldExtractor + " declaration=" + getRequiredDeclarations() + "]";
- }
+ }
public ContextEntry createContextEntry() {
return this.restriction.createContextEntry();
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/VariableRestriction.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/VariableRestriction.java 2009-05-16 10:03:33 UTC (rev 26575)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/VariableRestriction.java 2009-05-18 04:28:22 UTC (rev 26576)
@@ -108,7 +108,7 @@
final InternalFactHandle handle) {
return this.evaluator.evaluateCachedLeft( ((VariableContextEntry) context).workingMemory,
(VariableContextEntry) context,
- this.evaluator.prepareLeftObject( handle ) );
+ this.evaluator.prepareRightObject( handle ) );
}
public boolean isAllowedCachedRight(final LeftTuple tuple,
More information about the jboss-svn-commits
mailing list