[jboss-svn-commits] JBL Code SVN: r11385 - in labs/jbossrules/trunk/drools-core/src: main/java/org/drools/base/evaluators and 9 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Thu Apr 26 18:39:34 EDT 2007
Author: strobhen
Date: 2007-04-26 18:39:34 -0400 (Thu, 26 Apr 2007)
New Revision: 11385
Modified:
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/BaseClassFieldExtractor.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ClassFieldExtractor.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/BooleanFactory.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/ByteFactory.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/CharacterFactory.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/DoubleFactory.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/FloatFactory.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/IntegerFactory.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/LongFactory.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/ShortFactory.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/extractors/BaseBooleanClassFieldExtractor.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/extractors/BaseByteClassFieldExtractor.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/extractors/BaseCharClassFieldExtractor.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/extractors/BaseDoubleClassFieldExtractor.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/extractors/BaseFloatClassFieldExtractor.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/extractors/BaseIntClassFieldExtractor.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/extractors/BaseLongClassFieldExtractors.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/extractors/BaseObjectClassFieldExtractor.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/extractors/BaseShortClassFieldExtractor.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/extractors/SelfReferenceClassFieldExtractor.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/field/BooleanFieldImpl.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/field/DoubleFieldImpl.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/field/LongFieldImpl.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/field/ObjectFieldImpl.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/facttemplates/FactTemplateFieldExtractor.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/VariableRestriction.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/Extractor.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/FieldValue.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/GlobalExtractor.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/PatternExtractor.java
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/EvaluatorFactoryTest.java
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/TestBean.java
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/BaseClassFieldExtractorsTest.java
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/BooleanClassFieldExtractorTest.java
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/ByteClassFieldExtractorTest.java
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/CharClassFieldExtractorTest.java
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/DoubleClassFieldExtractorTest.java
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/FloatClassFieldExtractorTest.java
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/IntClassFieldExtractorTest.java
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/LongClassFieldExtractorTest.java
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/ObjectClassFieldExtractorTest.java
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/ShortClassFieldExtractorTest.java
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/facttemplates/FactTemplateFieldExtractorTest.java
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/CompositeObjectSinkAdapterTest.java
Log:
Fixed: JBRULES-627 null pointer with number comparison.
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/BaseClassFieldExtractor.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/BaseClassFieldExtractor.java 2007-04-26 22:08:08 UTC (rev 11384)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/BaseClassFieldExtractor.java 2007-04-26 22:39:34 UTC (rev 11385)
@@ -77,7 +77,7 @@
public ValueType getValueType() {
return this.valueType;
}
-
+
public int hashCode() {
final int PRIME = 31;
int result = 1;
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ClassFieldExtractor.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ClassFieldExtractor.java 2007-04-26 22:08:08 UTC (rev 11384)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ClassFieldExtractor.java 2007-04-26 22:39:34 UTC (rev 11385)
@@ -147,7 +147,11 @@
public short getShortValue(final Object object) {
return this.extractor.getShortValue( object );
}
-
+
+ public boolean isNullValue(final Object object) {
+ return this.extractor.isNullValue( object );
+ }
+
public Method getNativeReadMethod() {
return this.extractor.getNativeReadMethod();
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/BooleanFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/BooleanFactory.java 2007-04-26 22:08:08 UTC (rev 11384)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/BooleanFactory.java 2007-04-26 22:39:34 UTC (rev 11385)
@@ -67,16 +67,34 @@
public boolean evaluate(final Extractor extractor,
final Object object1,
final FieldValue object2) {
+ if ( extractor.isNullValue( object1 ) ) {
+ return object2.isNull();
+ } else if ( object2.isNull() ) {
+ return false;
+ }
+
return extractor.getBooleanValue( object1 ) == object2.getBooleanValue();
}
public boolean evaluateCachedRight(final VariableContextEntry context,
final Object left) {
+ if ( context.declaration.getExtractor().isNullValue( left ) ) {
+ return context.isRightNull();
+ } else if ( context.isRightNull() ) {
+ return false;
+ }
+
return context.declaration.getExtractor().getBooleanValue( left ) == ((BooleanVariableContextEntry) context).right;
}
public boolean evaluateCachedLeft(final VariableContextEntry context,
final Object object2) {
+ if ( context.extractor.isNullValue( object2 )) {
+ return context.isLeftNull();
+ } else if ( context.isLeftNull() ) {
+ return false;
+ }
+
return context.extractor.getBooleanValue( object2 ) == ((BooleanVariableContextEntry) context).left;
}
@@ -84,6 +102,12 @@
final Object object1,
final Extractor extractor2,
final Object object2) {
+ if (extractor1.isNullValue( object1 )) {
+ return extractor2.isNullValue( object2 );
+ } else if (extractor2.isNullValue( object2 )) {
+ return false;
+ }
+
return extractor1.getBooleanValue( object1 ) == extractor2.getBooleanValue( object2 );
}
@@ -108,16 +132,33 @@
public boolean evaluate(final Extractor extractor,
final Object object1,
final FieldValue object2) {
+ if ( extractor.isNullValue( object1 ) ) {
+ return !object2.isNull();
+ } else if ( object2.isNull() ) {
+ return true;
+ }
+
return extractor.getBooleanValue( object1 ) != object2.getBooleanValue();
}
public boolean evaluateCachedRight(final VariableContextEntry context,
final Object left) {
+ if ( context.declaration.getExtractor().isNullValue( left ) ) {
+ return !context.isRightNull();
+ } else if ( context.isRightNull() ) {
+ return true;
+ }
return context.declaration.getExtractor().getBooleanValue( left ) != ((BooleanVariableContextEntry) context).right;
}
public boolean evaluateCachedLeft(final VariableContextEntry context,
final Object object2) {
+ if ( context.extractor.isNullValue( object2 )) {
+ return !context.isLeftNull();
+ } else if ( context.isLeftNull() ) {
+ return true;
+ }
+
return context.extractor.getBooleanValue( object2 ) != ((BooleanVariableContextEntry) context).left;
}
@@ -125,6 +166,12 @@
final Object object1,
final Extractor extractor2,
final Object object2) {
+ if (extractor1.isNullValue( object1 )) {
+ return !extractor2.isNullValue( object2 );
+ } else if (extractor2.isNullValue( object2 )) {
+ return true;
+ }
+
return extractor1.getBooleanValue( object1 ) != extractor1.getBooleanValue( object2 );
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/ByteFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/ByteFactory.java 2007-04-26 22:08:08 UTC (rev 11384)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/ByteFactory.java 2007-04-26 22:39:34 UTC (rev 11385)
@@ -75,16 +75,34 @@
public boolean evaluate(final Extractor extractor,
final Object object1,
final FieldValue object2) {
+ if ( extractor.isNullValue( object1 ) ) {
+ return object2.isNull();
+ } else if ( object2.isNull() ) {
+ return false;
+ }
+
return extractor.getByteValue( object1 ) == object2.getByteValue();
}
public boolean evaluateCachedRight(final VariableContextEntry context,
final Object left) {
+ if ( context.declaration.getExtractor().isNullValue( left ) ) {
+ return context.isRightNull();
+ } else if ( context.isRightNull() ) {
+ return false;
+ }
+
return context.declaration.getExtractor().getByteValue( left ) == ((LongVariableContextEntry) context).right;
}
public boolean evaluateCachedLeft(final VariableContextEntry context,
final Object right) {
+ if ( context.extractor.isNullValue( right )) {
+ return context.isLeftNull();
+ } else if ( context.isLeftNull() ) {
+ return false;
+ }
+
return ((LongVariableContextEntry) context).left == context.extractor.getByteValue( right );
}
@@ -92,6 +110,12 @@
final Object object1,
final Extractor extractor2,
final Object object2) {
+ if (extractor1.isNullValue( object1 )) {
+ return extractor2.isNullValue( object2 );
+ } else if (extractor2.isNullValue( object2 )) {
+ return false;
+ }
+
return extractor1.getByteValue( object1 ) == extractor2.getByteValue( object2 );
}
@@ -116,23 +140,47 @@
public boolean evaluate(final Extractor extractor,
final Object object1,
final FieldValue object2) {
+ if ( extractor.isNullValue( object1 ) ) {
+ return !object2.isNull();
+ } else if ( object2.isNull() ) {
+ return true;
+ }
+
return extractor.getByteValue( object1 ) != object2.getByteValue();
}
public boolean evaluateCachedRight(final VariableContextEntry context,
final Object left) {
+ if ( context.declaration.getExtractor().isNullValue( left ) ) {
+ return !context.isRightNull();
+ } else if ( context.isRightNull() ) {
+ return true;
+ }
+
return context.declaration.getExtractor().getByteValue( left ) != ((LongVariableContextEntry) context).right;
}
public boolean evaluateCachedLeft(final VariableContextEntry context,
- final Object right) {
- return ((LongVariableContextEntry) context).left != context.extractor.getByteValue( right );
+ final Object object2) {
+ if ( context.extractor.isNullValue( object2 ) ) {
+ return !context.isLeftNull();
+ } else if ( context.isLeftNull() ) {
+ return true;
+ }
+
+ return ((LongVariableContextEntry) context).left != context.extractor.getByteValue( object2 );
}
public boolean evaluate(final Extractor extractor1,
final Object object1,
final Extractor extractor2,
final Object object2) {
+ if (extractor1.isNullValue( object1 )) {
+ return !extractor2.isNullValue( object2 );
+ } else if (extractor2.isNullValue( object2 )) {
+ return true;
+ }
+
return extractor1.getByteValue( object1 ) != extractor2.getByteValue( object2 );
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/CharacterFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/CharacterFactory.java 2007-04-26 22:08:08 UTC (rev 11384)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/CharacterFactory.java 2007-04-26 22:39:34 UTC (rev 11385)
@@ -75,16 +75,34 @@
public boolean evaluate(final Extractor extractor,
final Object object1,
final FieldValue object2) {
+ if ( extractor.isNullValue( object1 ) ) {
+ return object2.isNull();
+ } else if ( object2.isNull() ) {
+ return false;
+ }
+
return extractor.getCharValue( object1 ) == object2.getCharValue();
}
public boolean evaluateCachedRight(final VariableContextEntry context,
final Object left) {
+ if ( context.declaration.getExtractor().isNullValue( left ) ) {
+ return context.isRightNull();
+ } else if ( context.isRightNull() ) {
+ return false;
+ }
+
return context.declaration.getExtractor().getCharValue( left ) == ((LongVariableContextEntry) context).right;
}
public boolean evaluateCachedLeft(final VariableContextEntry context,
final Object right) {
+ if ( context.extractor.isNullValue( right )) {
+ return context.isLeftNull();
+ } else if ( context.isLeftNull() ) {
+ return false;
+ }
+
return ((LongVariableContextEntry) context).left == context.extractor.getCharValue( right );
}
@@ -92,6 +110,12 @@
final Object object1,
final Extractor extractor2,
final Object object2) {
+ if (extractor1.isNullValue( object1 )) {
+ return extractor2.isNullValue( object2 );
+ } else if (extractor2.isNullValue( object2 )) {
+ return false;
+ }
+
return extractor1.getCharValue( object1 ) == extractor2.getCharValue( object2 );
}
@@ -115,16 +139,34 @@
public boolean evaluate(final Extractor extractor,
final Object object1,
final FieldValue object2) {
+ if ( extractor.isNullValue( object1 ) ) {
+ return !object2.isNull();
+ } else if ( object2.isNull() ) {
+ return true;
+ }
+
return extractor.getCharValue( object1 ) != object2.getCharValue();
}
public boolean evaluateCachedRight(final VariableContextEntry context,
final Object left) {
+ if ( context.declaration.getExtractor().isNullValue( left ) ) {
+ return !context.isRightNull();
+ } else if ( context.isRightNull() ) {
+ return true;
+ }
+
return context.declaration.getExtractor().getCharValue( left ) != ((LongVariableContextEntry) context).right;
}
public boolean evaluateCachedLeft(final VariableContextEntry context,
final Object right) {
+ if ( context.extractor.isNullValue( right ) ) {
+ return !context.isLeftNull();
+ } else if ( context.isLeftNull() ) {
+ return true;
+ }
+
return ((LongVariableContextEntry) context).left != context.extractor.getCharValue( right );
}
@@ -132,6 +174,12 @@
final Object object1,
final Extractor extractor2,
final Object object2) {
+ if (extractor1.isNullValue( object1 )) {
+ return !extractor2.isNullValue( object2 );
+ } else if (extractor2.isNullValue( object2 )) {
+ return true;
+ }
+
return extractor1.getCharValue( object1 ) != extractor2.getCharValue( object2 );
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/DoubleFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/DoubleFactory.java 2007-04-26 22:08:08 UTC (rev 11384)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/DoubleFactory.java 2007-04-26 22:39:34 UTC (rev 11385)
@@ -75,18 +75,34 @@
public boolean evaluate(final Extractor extractor,
final Object object1,
final FieldValue object2) {
+ if ( extractor.isNullValue( object1 ) ) {
+ return object2.isNull();
+ } else if ( object2.isNull() ) {
+ return false;
+ }
// TODO: we are not handling delta right now... maybe we should
return extractor.getDoubleValue( object1 ) == object2.getDoubleValue();
}
public boolean evaluateCachedRight(final VariableContextEntry context,
final Object left) {
+ if ( context.declaration.getExtractor().isNullValue( left ) ) {
+ return context.isRightNull();
+ } else if ( context.isRightNull() ) {
+ return false;
+ }
// TODO: we are not handling delta right now... maybe we should
return context.declaration.getExtractor().getDoubleValue( left ) == ((DoubleVariableContextEntry) context).right;
}
public boolean evaluateCachedLeft(final VariableContextEntry context,
final Object right) {
+ if ( context.extractor.isNullValue( right )) {
+ return context.isLeftNull();
+ } else if ( context.isLeftNull() ) {
+ return false;
+ }
+
// TODO: we are not handling delta right now... maybe we should
return ((DoubleVariableContextEntry) context).left == context.extractor.getDoubleValue( right );
}
@@ -95,6 +111,12 @@
final Object object1,
final Extractor extractor2,
final Object object2) {
+ if (extractor1.isNullValue( object1 )) {
+ return extractor2.isNullValue( object2 );
+ } else if (extractor2.isNullValue( object2 )) {
+ return false;
+ }
+
// TODO: we are not handling delta right now... maybe we should
return extractor1.getDoubleValue( object1 ) == extractor2.getDoubleValue( object2 );
}
@@ -119,18 +141,36 @@
public boolean evaluate(final Extractor extractor,
final Object object1,
final FieldValue object2) {
+ if ( extractor.isNullValue( object1 ) ) {
+ return !object2.isNull();
+ } else if ( object2.isNull() ) {
+ return true;
+ }
+
// TODO: we are not handling delta right now... maybe we should
return extractor.getDoubleValue( object1 ) != object2.getDoubleValue();
}
public boolean evaluateCachedRight(final VariableContextEntry context,
final Object left) {
+ if ( context.declaration.getExtractor().isNullValue( left ) ) {
+ return !context.isRightNull();
+ } else if ( context.isRightNull() ) {
+ return true;
+ }
+
// TODO: we are not handling delta right now... maybe we should
return context.declaration.getExtractor().getDoubleValue( left ) != ((DoubleVariableContextEntry) context).right;
}
public boolean evaluateCachedLeft(final VariableContextEntry context,
final Object right) {
+ if ( context.extractor.isNullValue( right )) {
+ return !context.isLeftNull();
+ } else if ( context.isLeftNull() ) {
+ return true;
+ }
+
// TODO: we are not handling delta right now... maybe we should
return ((DoubleVariableContextEntry) context).left != context.extractor.getDoubleValue( right );
}
@@ -139,6 +179,12 @@
final Object object1,
final Extractor extractor2,
final Object object2) {
+ if (extractor1.isNullValue( object1 )) {
+ return !extractor2.isNullValue( object2 );
+ } else if (extractor2.isNullValue( object2 )) {
+ return true;
+ }
+
// TODO: we are not handling delta right now... maybe we should
return extractor1.getDoubleValue( object1 ) != extractor2.getDoubleValue( object2 );
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/FloatFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/FloatFactory.java 2007-04-26 22:08:08 UTC (rev 11384)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/FloatFactory.java 2007-04-26 22:39:34 UTC (rev 11385)
@@ -73,18 +73,36 @@
public boolean evaluate(final Extractor extractor,
final Object object1,
final FieldValue object2) {
+ if ( extractor.isNullValue( object1 ) ) {
+ return object2.isNull();
+ } else if ( object2.isNull() ) {
+ return false;
+ }
+
// TODO: we are not handling delta right now... maybe we should
return extractor.getFloatValue( object1 ) == object2.getFloatValue();
}
public boolean evaluateCachedRight(final VariableContextEntry context,
final Object left) {
+ if ( context.declaration.getExtractor().isNullValue( left ) ) {
+ return context.isRightNull();
+ } else if ( context.isRightNull() ) {
+ return false;
+ }
+
// TODO: we are not handling delta right now... maybe we should
return context.declaration.getExtractor().getFloatValue( left ) == ((DoubleVariableContextEntry) context).right;
}
public boolean evaluateCachedLeft(final VariableContextEntry context,
final Object right) {
+ if ( context.extractor.isNullValue( right )) {
+ return context.isLeftNull();
+ } else if ( context.isLeftNull() ) {
+ return false;
+ }
+
// TODO: we are not handling delta right now... maybe we should
return ((DoubleVariableContextEntry) context).left == context.extractor.getFloatValue( right );
}
@@ -93,6 +111,12 @@
final Object object1,
final Extractor extractor2,
final Object object2) {
+ if (extractor1.isNullValue( object1 )) {
+ return extractor2.isNullValue( object2 );
+ } else if (extractor2.isNullValue( object2 )) {
+ return false;
+ }
+
// TODO: we are not handling delta right now... maybe we should
return extractor1.getFloatValue( object1 ) == extractor2.getFloatValue( object2 );
}
@@ -117,18 +141,36 @@
public boolean evaluate(final Extractor extractor,
final Object object1,
final FieldValue object2) {
+ if ( extractor.isNullValue( object1 ) ) {
+ return !object2.isNull();
+ } else if ( object2.isNull() ) {
+ return true;
+ }
+
// TODO: we are not handling delta right now... maybe we should
return extractor.getFloatValue( object1 ) != object2.getFloatValue();
}
public boolean evaluateCachedRight(final VariableContextEntry context,
final Object left) {
+ if ( context.declaration.getExtractor().isNullValue( left ) ) {
+ return !context.isRightNull();
+ } else if ( context.isRightNull() ) {
+ return true;
+ }
+
// TODO: we are not handling delta right now... maybe we should
return context.declaration.getExtractor().getFloatValue( left ) != ((DoubleVariableContextEntry) context).right;
}
public boolean evaluateCachedLeft(final VariableContextEntry context,
final Object right) {
+ if ( context.extractor.isNullValue( right ) ) {
+ return !context.isLeftNull();
+ } else if ( context.isLeftNull() ) {
+ return true;
+ }
+
// TODO: we are not handling delta right now... maybe we should
return ((DoubleVariableContextEntry) context).left != context.extractor.getFloatValue( right );
}
@@ -137,6 +179,12 @@
final Object object1,
final Extractor extractor2,
final Object object2) {
+ if (extractor1.isNullValue( object1 )) {
+ return !extractor2.isNullValue( object2 );
+ } else if (extractor2.isNullValue( object2 )) {
+ return true;
+ }
+
// TODO: we are not handling delta right now... maybe we should
return extractor1.getFloatValue( object1 ) != extractor2.getFloatValue( object2 );
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/IntegerFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/IntegerFactory.java 2007-04-26 22:08:08 UTC (rev 11384)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/IntegerFactory.java 2007-04-26 22:39:34 UTC (rev 11385)
@@ -75,23 +75,47 @@
public boolean evaluate(final Extractor extractor,
final Object object1,
final FieldValue object2) {
+ if ( extractor.isNullValue( object1 ) ) {
+ return object2.isNull();
+ } else if ( object2.isNull() ) {
+ return false;
+ }
+
return extractor.getIntValue( object1 ) == object2.getIntValue();
}
public boolean evaluateCachedRight(final VariableContextEntry context,
final Object left) {
- return context.declaration.getExtractor().getIntValue( left ) == ((LongVariableContextEntry) context).right;
+ if ( context.declaration.getExtractor().isNullValue( left ) ) {
+ return context.isRightNull();
+ } else if ( context.isRightNull() ) {
+ return false;
+ }
+
+ return context.declaration.getExtractor().getIntValue( left ) == ((LongVariableContextEntry) context).right;
}
public boolean evaluateCachedLeft(final VariableContextEntry context,
final Object object2) {
+ if ( context.extractor.isNullValue( object2 )) {
+ return context.isLeftNull();
+ } else if ( context.isLeftNull() ) {
+ return false;
+ }
+
return context.extractor.getIntValue( object2 ) == ((LongVariableContextEntry) context).left;
}
public boolean evaluate(final Extractor extractor1,
final Object object1,
final Extractor extractor2,
- final Object object2) {
+ final Object object2) {
+ if (extractor1.isNullValue( object1 )) {
+ return extractor2.isNullValue( object2 );
+ } else if (extractor2.isNullValue( object2 )) {
+ return false;
+ }
+
return extractor1.getIntValue( object1 ) == extractor2.getIntValue( object2 );
}
@@ -115,17 +139,35 @@
public boolean evaluate(final Extractor extractor,
final Object object1,
- final FieldValue object2) {
+ final FieldValue object2) {
+ if ( extractor.isNullValue( object1 ) ) {
+ return !object2.isNull();
+ } else if ( object2.isNull() ) {
+ return true;
+ }
+
return extractor.getIntValue( object1 ) != object2.getIntValue();
}
public boolean evaluateCachedRight(final VariableContextEntry context,
final Object left) {
+ if ( context.declaration.getExtractor().isNullValue( left ) ) {
+ return !context.isRightNull();
+ } else if ( context.isRightNull() ) {
+ return true;
+ }
+
return context.declaration.getExtractor().getIntValue( left ) != ((LongVariableContextEntry) context).right;
}
public boolean evaluateCachedLeft(final VariableContextEntry context,
final Object object2) {
+ if ( context.extractor.isNullValue( object2 ) ) {
+ return !context.isLeftNull();
+ } else if ( context.isLeftNull() ) {
+ return true;
+ }
+
return context.extractor.getIntValue( object2 ) != ((LongVariableContextEntry) context).left;
}
@@ -133,6 +175,12 @@
final Object object1,
final Extractor extractor2,
final Object object2) {
+ if (extractor1.isNullValue( object1 )) {
+ return !extractor2.isNullValue( object2 );
+ } else if (extractor2.isNullValue( object2 )) {
+ return true;
+ }
+
return extractor1.getIntValue( object1 ) != extractor2.getIntValue( object2 );
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/LongFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/LongFactory.java 2007-04-26 22:08:08 UTC (rev 11384)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/LongFactory.java 2007-04-26 22:39:34 UTC (rev 11385)
@@ -75,16 +75,34 @@
public boolean evaluate(final Extractor extractor,
final Object object1,
final FieldValue object2) {
+ if ( extractor.isNullValue( object1 ) ) {
+ return object2.isNull();
+ } else if ( object2.isNull() ) {
+ return false;
+ }
+
return extractor.getLongValue( object1 ) == object2.getLongValue();
}
public boolean evaluateCachedRight(final VariableContextEntry context,
final Object left) {
+ if ( context.declaration.getExtractor().isNullValue( left ) ) {
+ return context.isRightNull();
+ } else if ( context.isRightNull() ) {
+ return false;
+ }
+
return context.declaration.getExtractor().getLongValue( left ) == ((LongVariableContextEntry) context).right;
}
public boolean evaluateCachedLeft(final VariableContextEntry context,
final Object right) {
+ if ( context.extractor.isNullValue( right )) {
+ return context.isLeftNull();
+ } else if ( context.isLeftNull() ) {
+ return false;
+ }
+
return ((LongVariableContextEntry) context).left == context.extractor.getLongValue( right );
}
@@ -92,6 +110,12 @@
final Object object1,
final Extractor extractor2,
final Object object2) {
+ if (extractor1.isNullValue( object1 )) {
+ return extractor2.isNullValue( object2 );
+ } else if (extractor2.isNullValue( object2 )) {
+ return false;
+ }
+
return extractor1.getLongValue( object1 ) == extractor2.getLongValue( object2 );
}
@@ -115,16 +139,34 @@
public boolean evaluate(final Extractor extractor,
final Object object1,
final FieldValue object2) {
+ if ( extractor.isNullValue( object1 ) ) {
+ return !object2.isNull();
+ } else if ( object2.isNull() ) {
+ return true;
+ }
+
return extractor.getLongValue( object1 ) != object2.getLongValue();
}
public boolean evaluateCachedRight(final VariableContextEntry context,
final Object left) {
+ if ( context.declaration.getExtractor().isNullValue( left ) ) {
+ return !context.isRightNull();
+ } else if ( context.isRightNull() ) {
+ return true;
+ }
+
return context.declaration.getExtractor().getLongValue( left ) != ((LongVariableContextEntry) context).right;
}
public boolean evaluateCachedLeft(final VariableContextEntry context,
final Object right) {
+ if ( context.extractor.isNullValue( right ) ) {
+ return !context.isLeftNull();
+ } else if ( context.isLeftNull() ) {
+ return true;
+ }
+
return ((LongVariableContextEntry) context).left != context.extractor.getLongValue( right );
}
@@ -132,6 +174,12 @@
final Object object1,
final Extractor extractor2,
final Object object2) {
+ if (extractor1.isNullValue( object1 )) {
+ return !extractor2.isNullValue( object2 );
+ } else if (extractor2.isNullValue( object2 )) {
+ return true;
+ }
+
return extractor1.getLongValue( object1 ) != extractor2.getLongValue( object2 );
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/ShortFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/ShortFactory.java 2007-04-26 22:08:08 UTC (rev 11384)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/ShortFactory.java 2007-04-26 22:39:34 UTC (rev 11385)
@@ -75,16 +75,34 @@
public boolean evaluate(final Extractor extractor,
final Object object1,
final FieldValue object2) {
+ if ( extractor.isNullValue( object1 ) ) {
+ return object2.isNull();
+ } else if ( object2.isNull() ) {
+ return false;
+ }
+
return extractor.getShortValue( object1 ) == object2.getShortValue();
}
public boolean evaluateCachedRight(final VariableContextEntry context,
final Object left) {
+ if ( context.declaration.getExtractor().isNullValue( left ) ) {
+ return context.isRightNull();
+ } else if ( context.isRightNull() ) {
+ return false;
+ }
+
return context.declaration.getExtractor().getShortValue( left ) == ((LongVariableContextEntry) context).right;
}
public boolean evaluateCachedLeft(final VariableContextEntry context,
final Object right) {
+ if ( context.extractor.isNullValue( right )) {
+ return context.isLeftNull();
+ } else if ( context.isLeftNull() ) {
+ return false;
+ }
+
return ((LongVariableContextEntry) context).left == context.extractor.getShortValue( right );
}
@@ -92,6 +110,12 @@
final Object object1,
final Extractor extractor2,
final Object object2) {
+ if (extractor1.isNullValue( object1 )) {
+ return extractor2.isNullValue( object2 );
+ } else if (extractor2.isNullValue( object2 )) {
+ return false;
+ }
+
return extractor1.getShortValue( object1 ) == extractor2.getShortValue( object2 );
}
@@ -115,16 +139,34 @@
public boolean evaluate(final Extractor extractor,
final Object object1,
final FieldValue object2) {
+ if ( extractor.isNullValue( object1 ) ) {
+ return !object2.isNull();
+ } else if ( object2.isNull() ) {
+ return true;
+ }
+
return extractor.getShortValue( object1 ) != object2.getShortValue();
}
public boolean evaluateCachedRight(final VariableContextEntry context,
final Object left) {
+ if ( context.declaration.getExtractor().isNullValue( left ) ) {
+ return !context.isRightNull();
+ } else if ( context.isRightNull() ) {
+ return true;
+ }
+
return context.declaration.getExtractor().getShortValue( left ) != ((LongVariableContextEntry) context).right;
}
public boolean evaluateCachedLeft(final VariableContextEntry context,
final Object right) {
+ if ( context.extractor.isNullValue( right ) ) {
+ return !context.isLeftNull();
+ } else if ( context.isLeftNull() ) {
+ return true;
+ }
+
return ((LongVariableContextEntry) context).left != context.extractor.getShortValue( right );
}
@@ -132,6 +174,12 @@
final Object object1,
final Extractor extractor2,
final Object object2) {
+ if (extractor1.isNullValue( object1 )) {
+ return !extractor2.isNullValue( object2 );
+ } else if (extractor2.isNullValue( object2 )) {
+ return true;
+ }
+
return extractor1.getShortValue( object1 ) != extractor2.getShortValue( object2 );
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/extractors/BaseBooleanClassFieldExtractor.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/extractors/BaseBooleanClassFieldExtractor.java 2007-04-26 22:08:08 UTC (rev 11384)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/extractors/BaseBooleanClassFieldExtractor.java 2007-04-26 22:39:34 UTC (rev 11385)
@@ -86,6 +86,10 @@
public short getShortValue(final Object object) {
throw new RuntimeDroolsException( "Conversion to short not supported from boolean" );
}
+
+ public boolean isNullValue(final Object object) {
+ return false;
+ }
public Method getNativeReadMethod() {
try {
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/extractors/BaseByteClassFieldExtractor.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/extractors/BaseByteClassFieldExtractor.java 2007-04-26 22:08:08 UTC (rev 11384)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/extractors/BaseByteClassFieldExtractor.java 2007-04-26 22:39:34 UTC (rev 11385)
@@ -87,6 +87,10 @@
return getByteValue( object );
}
+ public boolean isNullValue(final Object object) {
+ return false;
+ }
+
public Method getNativeReadMethod() {
try {
return this.getClass().getDeclaredMethod( "getByteValue",
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/extractors/BaseCharClassFieldExtractor.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/extractors/BaseCharClassFieldExtractor.java 2007-04-26 22:08:08 UTC (rev 11384)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/extractors/BaseCharClassFieldExtractor.java 2007-04-26 22:39:34 UTC (rev 11385)
@@ -65,6 +65,10 @@
return (short) getCharValue( object );
}
+ public boolean isNullValue(final Object object) {
+ return false;
+ }
+
public Method getNativeReadMethod() {
try {
return this.getClass().getDeclaredMethod( "getCharValue",
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/extractors/BaseDoubleClassFieldExtractor.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/extractors/BaseDoubleClassFieldExtractor.java 2007-04-26 22:08:08 UTC (rev 11384)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/extractors/BaseDoubleClassFieldExtractor.java 2007-04-26 22:39:34 UTC (rev 11385)
@@ -66,6 +66,10 @@
return (short) getDoubleValue( object );
}
+ public boolean isNullValue(final Object object) {
+ return false;
+ }
+
public Method getNativeReadMethod() {
try {
return this.getClass().getDeclaredMethod( "getDoubleValue",
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/extractors/BaseFloatClassFieldExtractor.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/extractors/BaseFloatClassFieldExtractor.java 2007-04-26 22:08:08 UTC (rev 11384)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/extractors/BaseFloatClassFieldExtractor.java 2007-04-26 22:39:34 UTC (rev 11385)
@@ -66,6 +66,10 @@
return (short) getFloatValue( object );
}
+ public boolean isNullValue(final Object object) {
+ return false;
+ }
+
public Method getNativeReadMethod() {
try {
return this.getClass().getDeclaredMethod( "getFloatValue",
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/extractors/BaseIntClassFieldExtractor.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/extractors/BaseIntClassFieldExtractor.java 2007-04-26 22:08:08 UTC (rev 11384)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/extractors/BaseIntClassFieldExtractor.java 2007-04-26 22:39:34 UTC (rev 11385)
@@ -66,6 +66,10 @@
return (short) getIntValue( object );
}
+ public boolean isNullValue(final Object object) {
+ return false;
+ }
+
public Method getNativeReadMethod() {
try {
return this.getClass().getDeclaredMethod( "getIntValue",
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/extractors/BaseLongClassFieldExtractors.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/extractors/BaseLongClassFieldExtractors.java 2007-04-26 22:08:08 UTC (rev 11384)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/extractors/BaseLongClassFieldExtractors.java 2007-04-26 22:39:34 UTC (rev 11385)
@@ -66,6 +66,10 @@
return (short) getLongValue( object );
}
+ public boolean isNullValue(final Object object) {
+ return false;
+ }
+
public Method getNativeReadMethod() {
try {
return this.getClass().getDeclaredMethod( "getLongValue",
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/extractors/BaseObjectClassFieldExtractor.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/extractors/BaseObjectClassFieldExtractor.java 2007-04-26 22:08:08 UTC (rev 11384)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/extractors/BaseObjectClassFieldExtractor.java 2007-04-26 22:39:34 UTC (rev 11385)
@@ -30,6 +30,7 @@
// this can be improved by generating specific
// bytecode generation in the subclass, avoiding the if instanceof
final Object value = getValue( object );
+
if ( value instanceof Boolean ) {
return ((Boolean) value).booleanValue();
}
@@ -40,6 +41,7 @@
// this can be improved by generating specific
// bytecode generation in the subclass, avoiding the if instanceof
final Object value = getValue( object );
+
if ( value instanceof Number ) {
return ((Number) value).byteValue();
}
@@ -50,6 +52,7 @@
// this can be improved by generating specific
// bytecode generation in the subclass, avoiding the if instanceof
final Object value = getValue( object );
+
if ( value instanceof Character ) {
return ((Character) value).charValue();
}
@@ -60,6 +63,7 @@
// this can be improved by generating specific
// bytecode generation in the subclass, avoiding the if instanceof
final Object value = getValue( object );
+
if ( value instanceof Number ) {
return ((Number) value).doubleValue();
}
@@ -70,6 +74,7 @@
// this can be improved by generating specific
// bytecode generation in the subclass, avoiding the if instanceof
final Object value = getValue( object );
+
if ( value instanceof Number ) {
return ((Number) value).floatValue();
}
@@ -80,6 +85,7 @@
// this can be improved by generating specific
// bytecode generation in the subclass, avoiding the if instanceof
final Object value = getValue( object );
+
if ( value instanceof Number ) {
return ((Number) value).intValue();
}
@@ -90,6 +96,7 @@
// this can be improved by generating specific
// bytecode generation in the subclass, avoiding the if instanceof
final Object value = getValue( object );
+
if ( value instanceof Number ) {
return ((Number) value).longValue();
}
@@ -100,11 +107,20 @@
// this can be improved by generating specific
// bytecode generation in the subclass, avoiding the if instanceof
final Object value = getValue( object );
+
if ( value instanceof Number ) {
return ((Number) value).shortValue();
}
throw new RuntimeDroolsException( "Conversion to short not supported from " + value.getClass().getName() );
}
+
+ public boolean isNullValue(final Object object) {
+ if (object == null) {
+ return true;
+ } else {
+ return getValue( object ) == null;
+ }
+ }
public Method getNativeReadMethod() {
try {
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/extractors/BaseShortClassFieldExtractor.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/extractors/BaseShortClassFieldExtractor.java 2007-04-26 22:08:08 UTC (rev 11384)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/extractors/BaseShortClassFieldExtractor.java 2007-04-26 22:39:34 UTC (rev 11385)
@@ -65,6 +65,10 @@
}
public abstract short getShortValue(Object object);
+
+ public boolean isNullValue(final Object object) {
+ return false;
+ }
public Method getNativeReadMethod() {
try {
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/extractors/SelfReferenceClassFieldExtractor.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/extractors/SelfReferenceClassFieldExtractor.java 2007-04-26 22:08:08 UTC (rev 11384)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/extractors/SelfReferenceClassFieldExtractor.java 2007-04-26 22:39:34 UTC (rev 11385)
@@ -37,6 +37,9 @@
public Object getValue(final Object object) {
return (object instanceof ShadowProxy) ? ((ShadowProxy) object).getShadowedObject() : object;
+ }
+
+ public boolean isNullValue(final Object object) {
+ return getValue( object ) == null;
}
-
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/field/BooleanFieldImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/field/BooleanFieldImpl.java 2007-04-26 22:08:08 UTC (rev 11384)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/field/BooleanFieldImpl.java 2007-04-26 22:39:34 UTC (rev 11385)
@@ -28,7 +28,7 @@
FieldValue {
private static final long serialVersionUID = 320;
- private boolean value;
+ private final boolean value;
public BooleanFieldImpl(final boolean value) {
this.value = value;
@@ -89,6 +89,10 @@
public int hashCode() {
return this.value ? 1 : 0;
}
+
+ public boolean isNull() {
+ return false;
+ }
public boolean isBooleanField() {
return true;
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/field/DoubleFieldImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/field/DoubleFieldImpl.java 2007-04-26 22:08:08 UTC (rev 11384)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/field/DoubleFieldImpl.java 2007-04-26 22:39:34 UTC (rev 11385)
@@ -8,7 +8,7 @@
FieldValue {
private static final long serialVersionUID = 320;
- private double value;
+ private final double value;
public DoubleFieldImpl(final double value) {
this.value = value;
@@ -69,6 +69,10 @@
public int hashCode() {
return (int) this.value;
}
+
+ public boolean isNull() {
+ return false;
+ }
public boolean isBooleanField() {
return false;
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/field/LongFieldImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/field/LongFieldImpl.java 2007-04-26 22:08:08 UTC (rev 11384)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/field/LongFieldImpl.java 2007-04-26 22:39:34 UTC (rev 11385)
@@ -8,7 +8,7 @@
FieldValue {
private static final long serialVersionUID = 320;
- private long value;
+ private final long value;
public LongFieldImpl(final long value) {
this.value = value;
@@ -69,6 +69,10 @@
public int hashCode() {
return (int) this.value;
}
+
+ public boolean isNull() {
+ return false;
+ }
public boolean isBooleanField() {
return false;
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/field/ObjectFieldImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/field/ObjectFieldImpl.java 2007-04-26 22:08:08 UTC (rev 11384)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/field/ObjectFieldImpl.java 2007-04-26 22:39:34 UTC (rev 11385)
@@ -24,7 +24,7 @@
FieldValue {
private static final long serialVersionUID = 320;
- private Object value;
+ private final Object value;
public ObjectFieldImpl(final Object value) {
this.value = value;
@@ -113,6 +113,10 @@
return 0;
}
}
+
+ public boolean isNull() {
+ return value == null;
+ }
public boolean isBooleanField() {
return false;
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/facttemplates/FactTemplateFieldExtractor.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/facttemplates/FactTemplateFieldExtractor.java 2007-04-26 22:08:08 UTC (rev 11384)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/facttemplates/FactTemplateFieldExtractor.java 2007-04-26 22:39:34 UTC (rev 11385)
@@ -81,4 +81,8 @@
public int getHashCode(final Object object) {
return getValue( object ).hashCode();
}
+
+ public boolean isNullValue(Object object) {
+ return ((Fact) object).getFieldValue( this.fieldIndex ) == null;
+ }
}
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 2007-04-26 22:08:08 UTC (rev 11384)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/VariableRestriction.java 2007-04-26 22:39:34 UTC (rev 11385)
@@ -137,6 +137,8 @@
public Declaration declaration;
public ReteTuple reteTuple;
public ContextEntry entry;
+ public boolean leftNull;
+ public boolean rightNull;
public VariableContextEntry(final FieldExtractor extractor,
final Declaration declaration) {
@@ -167,7 +169,14 @@
public Declaration getVariableDeclaration() {
return this.declaration;
}
-
+
+ public boolean isLeftNull() {
+ return this.leftNull;
+ }
+
+ public boolean isRightNull() {
+ return this.rightNull;
+ }
}
public static class ObjectVariableContextEntry extends VariableContextEntry {
@@ -185,12 +194,14 @@
public void updateFromTuple(final InternalWorkingMemory workingMemory,
final ReteTuple tuple) {
this.reteTuple = tuple;
+ this.leftNull = this.declaration.getExtractor().isNullValue( tuple.get( this.declaration ).getObject() );
this.left = this.declaration.getExtractor().getValue( tuple.get( this.declaration ).getObject() );
}
public void updateFromFactHandle(final InternalWorkingMemory workingMemory,
final InternalFactHandle handle) {
this.object = handle.getObject();
+ this.rightNull = this.extractor.isNullValue( handle.getObject() );
this.right = this.extractor.getValue( handle.getObject() );
}
}
@@ -211,13 +222,25 @@
public void updateFromTuple(final InternalWorkingMemory workingMemory,
final ReteTuple tuple) {
this.reteTuple = tuple;
- this.left = this.declaration.getExtractor().getLongValue( tuple.get( this.declaration ).getObject() );
+ this.leftNull = this.declaration.getExtractor().isNullValue( tuple.get( this.declaration ).getObject() );
+
+ if (!leftNull) {
+ this.left = this.declaration.getExtractor().getLongValue( tuple.get( this.declaration ).getObject() );
+ } else {
+ this.left = 0;
+ }
}
public void updateFromFactHandle(final InternalWorkingMemory workingMemory,
final InternalFactHandle handle) {
this.object = handle.getObject();
- this.right = this.extractor.getLongValue( handle.getObject() );
+ this.rightNull = this.extractor.isNullValue( handle.getObject() );
+
+ if ( !rightNull ) { // avoid a NullPointerException
+ this.right = this.extractor.getLongValue( handle.getObject() );
+ } else {
+ this.right = 0;
+ }
}
}
@@ -237,13 +260,25 @@
public void updateFromTuple(final InternalWorkingMemory workingMemory,
final ReteTuple tuple) {
this.reteTuple = tuple;
- this.left = this.declaration.getExtractor().getDoubleValue( tuple.get( this.declaration ).getObject() );
+ this.leftNull = this.declaration.getExtractor().isNullValue( tuple.get( this.declaration ).getObject() );
+
+ if (!leftNull) {
+ this.left = this.declaration.getExtractor().getDoubleValue( tuple.get( this.declaration ).getObject() );
+ } else {
+ this.left = 0;
+ }
}
public void updateFromFactHandle(final InternalWorkingMemory workingMemory,
final InternalFactHandle handle) {
this.object = handle.getObject();
- this.right = this.extractor.getDoubleValue( handle.getObject() );
+ this.rightNull = this.extractor.isNullValue( handle.getObject() );
+
+ if ( !rightNull ) { // avoid a NullPointerException
+ this.right = this.extractor.getDoubleValue( handle.getObject() );
+ } else {
+ this.right = 0;
+ }
}
}
@@ -262,14 +297,25 @@
public void updateFromTuple(final InternalWorkingMemory workingMemory,
final ReteTuple tuple) {
this.reteTuple = tuple;
- this.left = this.declaration.getExtractor().getBooleanValue( tuple.get( this.declaration ).getObject() );
+ this.leftNull = this.declaration.getExtractor().isNullValue( tuple.get( this.declaration ).getObject() );
+
+ if ( !leftNull ) {
+ this.left = this.declaration.getExtractor().getBooleanValue( tuple.get( this.declaration ).getObject() );
+ } else {
+ this.left = false;
+ }
}
public void updateFromFactHandle(final InternalWorkingMemory workingMemory,
final InternalFactHandle handle) {
this.object = handle.getObject();
- this.right = this.extractor.getBooleanValue( handle.getObject() );
+ this.rightNull = this.extractor.isNullValue( handle.getObject() );
+
+ if ( !rightNull ) { // avoid a NullPointerException
+ this.right = this.extractor.getBooleanValue( handle.getObject() );
+ } else {
+ this.right = false;
+ }
}
}
-
}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/Extractor.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/Extractor.java 2007-04-26 22:08:08 UTC (rev 11384)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/Extractor.java 2007-04-26 22:39:34 UTC (rev 11385)
@@ -42,6 +42,8 @@
public double getDoubleValue(Object object);
public boolean getBooleanValue(Object object);
+
+ public boolean isNullValue(Object object);
public ValueType getValueType();
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/FieldValue.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/FieldValue.java 2007-04-26 22:08:08 UTC (rev 11384)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/FieldValue.java 2007-04-26 22:39:34 UTC (rev 11385)
@@ -39,6 +39,8 @@
public double getDoubleValue();
public boolean getBooleanValue();
+
+ public boolean isNull();
public boolean isBooleanField();
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/GlobalExtractor.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/GlobalExtractor.java 2007-04-26 22:08:08 UTC (rev 11384)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/GlobalExtractor.java 2007-04-26 22:39:34 UTC (rev 11385)
@@ -114,4 +114,8 @@
return ( key == null ? other.key == null : key.equals( other.key ) ) &&
( this.objectType == null ? other.objectType == null : this.objectType.equals( other.objectType ));
}
+
+ public boolean isNullValue(Object object) {
+ throw new UnsupportedOperationException("Operation not supported for globals");
+ }
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/PatternExtractor.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/PatternExtractor.java 2007-04-26 22:08:08 UTC (rev 11384)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/PatternExtractor.java 2007-04-26 22:39:34 UTC (rev 11385)
@@ -127,6 +127,10 @@
}
}
+ public boolean isNullValue(final Object object) {
+ return getValue( object ) == null;
+ }
+
public int getHashCode(final Object object) {
return getValue( object ).hashCode();
}
@@ -145,4 +149,4 @@
final PatternExtractor other = (PatternExtractor) obj;
return this.objectType.equals( other.objectType );
}
-}
\ No newline at end of file
+}
Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/EvaluatorFactoryTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/EvaluatorFactoryTest.java 2007-04-26 22:08:08 UTC (rev 11384)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/EvaluatorFactoryTest.java 2007-04-26 22:39:34 UTC (rev 11385)
@@ -89,7 +89,8 @@
final Object[][] data = {{new Integer( 42 ), "==", new Integer( 42 ), Boolean.TRUE}, {new Integer( 42 ), "<", new Integer( 43 ), Boolean.TRUE}, {new Integer( 42 ), ">=", new Integer( 41 ), Boolean.TRUE},
{new Integer( 42 ), "!=", new Integer( 41 ), Boolean.TRUE}, {new Integer( 42 ), ">", new Integer( 41 ), Boolean.TRUE}, {new Integer( 42 ), "<=", new Integer( 42 ), Boolean.TRUE},
- {new Integer( 42 ), ">", new Integer( 100 ), Boolean.FALSE}};
+ {new Integer( 42 ), ">", new Integer( 100 ), Boolean.FALSE}, {new Integer( 42 ), "!=", null, Boolean.TRUE}, {new Integer( 42 ), "==", null, Boolean.FALSE}, {null, "==", null, Boolean.TRUE},
+ {null, "!=", null, Boolean.FALSE}, {null, "!=", new Integer( 42 ), Boolean.TRUE}, {null, "==", new Integer( 42 ), Boolean.FALSE}};
runEvaluatorTest( data,
ValueType.PINTEGER_TYPE );
@@ -132,7 +133,8 @@
//Test data: Obj1, Operand, Obj2
final Object[][] data = {{new Short( (short) 42 ), "==", new Short( (short) 42 ), Boolean.TRUE}, {new Short( (short) 42 ), "<", new Short( (short) 43 ), Boolean.TRUE}, {new Short( (short) 42 ), ">=", new Short( (short) 41 ), Boolean.TRUE},
- {new Short( (short) 42 ), "!=", new Short( (short) 41 ), Boolean.TRUE}};
+ {new Short( (short) 42 ), "!=", new Short( (short) 41 ), Boolean.TRUE}, {new Short( (short) 42 ), "==", null, Boolean.FALSE}, {null, "==", null, Boolean.TRUE}, {null, "!=", null, Boolean.FALSE},
+ {null, "!=", new Short( (short) 42 ), Boolean.TRUE}, {null, "==", new Short( (short) 42 ), Boolean.FALSE}};
runEvaluatorTest( data,
ValueType.PSHORT_TYPE );
@@ -142,7 +144,8 @@
//Test data: Obj1, Operand, Obj2
final Object[][] data = {{new Boolean( true ), "==", new Boolean( true ), Boolean.TRUE}, {new Boolean( false ), "!=", new Boolean( true ), Boolean.TRUE}, {new Boolean( true ), "==", new Boolean( false ), Boolean.FALSE},
- {new Boolean( true ), "!=", new Boolean( false ), Boolean.TRUE}};
+ {new Boolean( true ), "!=", new Boolean( false ), Boolean.TRUE}, {new Boolean( true ), "==", null, Boolean.FALSE}, {null, "==", null, Boolean.TRUE}, {null, "!=", null, Boolean.FALSE},
+ {null, "!=", new Boolean( true ), Boolean.TRUE}, {null, "==", new Boolean( true ), Boolean.FALSE}};
runEvaluatorTest( data,
ValueType.PBOOLEAN_TYPE );
@@ -151,7 +154,8 @@
public void testDouble() {
final Object[][] data = {{new Double( 42 ), "==", new Double( 42 ), Boolean.TRUE}, {new Double( 42 ), "<", new Double( 43 ), Boolean.TRUE}, {new Double( 42 ), ">=", new Double( 41 ), Boolean.TRUE},
{new Double( 42 ), "!=", new Double( 41 ), Boolean.TRUE}, {new Double( 42 ), ">", new Double( 41 ), Boolean.TRUE}, {new Double( 42 ), ">=", new Double( 41 ), Boolean.TRUE}, {new Double( 42 ), ">=", new Double( 42 ), Boolean.TRUE},
- {new Double( 42 ), ">=", new Double( 100 ), Boolean.FALSE}, {new Double( 42 ), "<", new Double( 1 ), Boolean.FALSE}};
+ {new Double( 42 ), ">=", new Double( 100 ), Boolean.FALSE}, {new Double( 42 ), "<", new Double( 1 ), Boolean.FALSE}, {new Double( 42 ), "==", null, Boolean.FALSE}, {null, "==", null, Boolean.TRUE}, {null, "!=", null, Boolean.FALSE},
+ {null, "!=", new Double( 42 ), Boolean.TRUE}, {null, "==", new Double( 42 ), Boolean.FALSE}};
runEvaluatorTest( data,
ValueType.PDOUBLE_TYPE );
@@ -160,7 +164,8 @@
public void testFloat() {
final Object[][] data = {{new Float( 42 ), "==", new Float( 42 ), Boolean.TRUE}, {new Float( 42 ), "<", new Float( 43 ), Boolean.TRUE}, {new Float( 42 ), ">=", new Float( 41 ), Boolean.TRUE},
{new Float( 42 ), "!=", new Float( 41 ), Boolean.TRUE}, {new Float( 42 ), ">", new Float( 41 ), Boolean.TRUE}, {new Float( 42 ), ">=", new Float( 41 ), Boolean.TRUE}, {new Float( 42 ), ">=", new Float( 42 ), Boolean.TRUE},
- {new Float( 42 ), ">=", new Float( 100 ), Boolean.FALSE}, {new Float( 42 ), "<", new Float( 1 ), Boolean.FALSE}};
+ {new Float( 42 ), ">=", new Float( 100 ), Boolean.FALSE}, {new Float( 42 ), "<", new Float( 1 ), Boolean.FALSE}, {new Float( 42 ), "==", null, Boolean.FALSE}, {null, "==", null, Boolean.TRUE}, {null, "!=", null, Boolean.FALSE},
+ {null, "!=", new Float( 42 ), Boolean.TRUE}, {null, "==", new Float( 42 ), Boolean.FALSE}};
runEvaluatorTest( data,
ValueType.PFLOAT_TYPE );
@@ -169,7 +174,8 @@
public void testLong() {
final Object[][] data = {{new Long( 42 ), "==", new Long( 42 ), Boolean.TRUE}, {new Long( 42 ), "<", new Long( 43 ), Boolean.TRUE}, {new Long( 42 ), ">=", new Long( 41 ), Boolean.TRUE}, {new Long( 42 ), "!=", new Long( 41 ), Boolean.TRUE},
{new Long( 42 ), ">", new Long( 41 ), Boolean.TRUE}, {new Long( 42 ), ">=", new Long( 41 ), Boolean.TRUE}, {new Long( 42 ), ">=", new Long( 42 ), Boolean.TRUE}, {new Long( 42 ), ">=", new Long( 100 ), Boolean.FALSE},
- {new Long( 42 ), "<", new Long( 1 ), Boolean.FALSE}};
+ {new Long( 42 ), "<", new Long( 1 ), Boolean.FALSE}, {new Long( 42 ), "==", null, Boolean.FALSE}, {null, "==", null, Boolean.TRUE}, {null, "!=", null, Boolean.FALSE}, {null, "!=", new Long( 42 ), Boolean.TRUE},
+ {null, "==", new Long( 42 ), Boolean.FALSE}};
runEvaluatorTest( data,
ValueType.PLONG_TYPE );
@@ -178,7 +184,8 @@
public void testCharacter() {
final Object[][] data = {{new Character( 'a' ), "==", new Character( 'a' ), Boolean.TRUE}, {new Character( 'a' ), "<", new Character( 'b' ), Boolean.TRUE}, {new Character( 'a' ), ">=", new Character( 'a' ), Boolean.TRUE},
{new Character( 'a' ), "!=", new Character( 'Z' ), Boolean.TRUE}, {new Character( 'z' ), ">", new Character( 'a' ), Boolean.TRUE}, {new Character( 'z' ), ">=", new Character( 'z' ), Boolean.TRUE},
- {new Character( 'z' ), ">=", new Character( 'a' ), Boolean.TRUE}, {new Character( 'a' ), ">=", new Character( 'z' ), Boolean.FALSE}, {new Character( 'z' ), "<", new Character( 'a' ), Boolean.FALSE}};
+ {new Character( 'z' ), ">=", new Character( 'a' ), Boolean.TRUE}, {new Character( 'a' ), ">=", new Character( 'z' ), Boolean.FALSE}, {new Character( 'z' ), "<", new Character( 'a' ), Boolean.FALSE},
+ {new Character( 'z' ), "==", null, Boolean.FALSE}, {null, "==", null, Boolean.TRUE}, {null, "!=", null, Boolean.FALSE}, {null, "!=", new Character( 'z' ), Boolean.TRUE}, {null, "==", new Character( 'z' ), Boolean.FALSE}};
runEvaluatorTest( data,
ValueType.PCHAR_TYPE );
}
@@ -200,7 +207,8 @@
public void testByte() {
final Object[][] data = {{new Byte( "1" ), "==", new Byte( "1" ), Boolean.TRUE}, {new Byte( "1" ), "==", new Byte( "2" ), Boolean.FALSE}, {new Byte( "1" ), "!=", new Byte( "2" ), Boolean.TRUE},
- {new Byte( "1" ), "!=", new Byte( "1" ), Boolean.FALSE}, {new Byte( "1" ), "<=", new Byte( "1" ), Boolean.TRUE}};
+ {new Byte( "1" ), "!=", new Byte( "1" ), Boolean.FALSE}, {new Byte( "1" ), "<=", new Byte( "1" ), Boolean.TRUE}, {new Byte( "1" ), "==", null, Boolean.FALSE}, {null, "==", null, Boolean.TRUE},
+ {null, "!=", null, Boolean.FALSE}, {null, "!=", new Byte( "1" ), Boolean.TRUE}, {null, "==", new Byte( "1" ), Boolean.FALSE}};
runEvaluatorTest( data,
ValueType.PBYTE_TYPE );
@@ -352,31 +360,78 @@
if ( valueType.isIntegerNumber() || valueType.isChar() ) {
final LongVariableContextEntry context = new LongVariableContextEntry( extractor,
declaration );
- if ( row[2] instanceof Character ) {
- context.left = ((Character) row[2]).charValue();
- context.right = ((Character) row[0]).charValue();
+
+ if ( valueType.isChar() ) {
+ if (row[2] == null) {
+ context.leftNull = true;
+ } else {
+ context.left = ((Character) row[2]).charValue();
+ }
+
+ if (row[0] == null) {
+ context.rightNull = true;
+ } else {
+ context.right = ((Character) row[0]).charValue();
+ }
} else {
- context.left = ((Number) row[2]).longValue();
- context.right = ((Number) row[0]).longValue();
+ if (row[2] == null) {
+ context.leftNull = true;
+ } else {
+ context.left = ((Number) row[2]).longValue();
+ }
+
+ if (row[0] == null) {
+ context.rightNull = true;
+ } else {
+ context.right = ((Number) row[0]).longValue();
+ }
}
return context;
} else if ( valueType.isBoolean() ) {
final BooleanVariableContextEntry context = new BooleanVariableContextEntry( extractor,
declaration );
- context.left = ((Boolean) row[2]).booleanValue();
- context.right = ((Boolean) row[0]).booleanValue();
+
+ if (row[2] == null) {
+ context.leftNull = true;
+ } else {
+ context.left = ((Boolean) row[2]).booleanValue();
+ }
+
+ if (row[0] == null) {
+ context.rightNull = true;
+ } else {
+ context.right = ((Boolean) row[0]).booleanValue();
+ }
return context;
} else if ( valueType.isFloatNumber() ) {
final DoubleVariableContextEntry context = new DoubleVariableContextEntry( extractor,
declaration );
- context.left = ((Number) row[2]).doubleValue();
- context.right = ((Number) row[0]).doubleValue();
+ if (row[2] == null) {
+ context.leftNull = true;
+ } else {
+ context.left = ((Number) row[2]).doubleValue();
+ }
+
+ if (row[0] == null) {
+ context.rightNull = true;
+ } else {
+ context.right = ((Number) row[0]).doubleValue();
+ }
return context;
} else {
final ObjectVariableContextEntry context = new ObjectVariableContextEntry( extractor,
declaration );
- context.left = row[2];
- context.right = row[0];
+ if (row[2] == null) {
+ context.leftNull = true;
+ } else {
+ context.left = row[2];
+ }
+
+ if (row[0] == null) {
+ context.rightNull = true;
+ } else {
+ context.right = row[0];
+ }
return context;
}
}
@@ -434,6 +489,10 @@
public Object getValue(final Object object) {
return object;
}
+
+ public boolean isNullValue(final Object object) {
+ return object == null;
+ }
public ValueType getValueType() {
// TODO Auto-generated method stub
Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/TestBean.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/TestBean.java 2007-04-26 22:08:08 UTC (rev 11384)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/TestBean.java 2007-04-26 22:39:34 UTC (rev 11385)
@@ -32,6 +32,7 @@
private final float floatAttr = 6.0f;
private final double doubleAttr = 7.0;
private final List listAttr = Collections.EMPTY_LIST;
+ private final Object nullAttr = null;
public String getName() {
return this.name;
@@ -77,4 +78,7 @@
return this.shortAttr;
}
+ public Object getNullAttr() {
+ return this.nullAttr;
+ }
}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/BaseClassFieldExtractorsTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/BaseClassFieldExtractorsTest.java 2007-04-26 22:08:08 UTC (rev 11384)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/BaseClassFieldExtractorsTest.java 2007-04-26 22:39:34 UTC (rev 11385)
@@ -21,5 +21,7 @@
public abstract void testGetDoubleValue();
public abstract void testGetValue();
+
+ public abstract void testIsNullValue();
}
Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/BooleanClassFieldExtractorTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/BooleanClassFieldExtractorTest.java 2007-04-26 22:08:08 UTC (rev 11384)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/BooleanClassFieldExtractorTest.java 2007-04-26 22:39:34 UTC (rev 11385)
@@ -95,4 +95,11 @@
}
}
+ public void testIsNullValue() {
+ try {
+ Assert.assertFalse( this.extractor.isNullValue( this.bean ) );
+ } catch ( final Exception e ) {
+ fail( "Should not throw an exception" );
+ }
+ }
}
Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/ByteClassFieldExtractorTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/ByteClassFieldExtractorTest.java 2007-04-26 22:08:08 UTC (rev 11384)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/ByteClassFieldExtractorTest.java 2007-04-26 22:39:34 UTC (rev 11385)
@@ -97,5 +97,12 @@
fail( "Should not throw an exception" );
}
}
-
+
+ public void testIsNullValue() {
+ try {
+ Assert.assertFalse( this.extractor.isNullValue( this.bean ) );
+ } catch ( final Exception e ) {
+ fail( "Should not throw an exception" );
+ }
+ }
}
Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/CharClassFieldExtractorTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/CharClassFieldExtractorTest.java 2007-04-26 22:08:08 UTC (rev 11384)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/CharClassFieldExtractorTest.java 2007-04-26 22:39:34 UTC (rev 11385)
@@ -95,4 +95,12 @@
fail( "Should not throw an exception" );
}
}
+
+ public void testIsNullValue() {
+ try {
+ Assert.assertFalse( this.extractor.isNullValue( this.bean ) );
+ } catch ( final Exception e ) {
+ fail( "Should not throw an exception" );
+ }
+ }
}
Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/DoubleClassFieldExtractorTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/DoubleClassFieldExtractorTest.java 2007-04-26 22:08:08 UTC (rev 11384)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/DoubleClassFieldExtractorTest.java 2007-04-26 22:39:34 UTC (rev 11385)
@@ -100,4 +100,12 @@
fail( "Should not throw an exception" );
}
}
+
+ public void testIsNullValue() {
+ try {
+ Assert.assertFalse( this.extractor.isNullValue( this.bean ) );
+ } catch ( final Exception e ) {
+ fail( "Should not throw an exception" );
+ }
+ }
}
Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/FloatClassFieldExtractorTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/FloatClassFieldExtractorTest.java 2007-04-26 22:08:08 UTC (rev 11384)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/FloatClassFieldExtractorTest.java 2007-04-26 22:39:34 UTC (rev 11385)
@@ -100,4 +100,12 @@
fail( "Should not throw an exception" );
}
}
+
+ public void testIsNullValue() {
+ try {
+ Assert.assertFalse( this.extractor.isNullValue( this.bean ) );
+ } catch ( final Exception e ) {
+ fail( "Should not throw an exception" );
+ }
+ }
}
Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/IntClassFieldExtractorTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/IntClassFieldExtractorTest.java 2007-04-26 22:08:08 UTC (rev 11384)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/IntClassFieldExtractorTest.java 2007-04-26 22:39:34 UTC (rev 11385)
@@ -100,4 +100,11 @@
}
}
+ public void testIsNullValue() {
+ try {
+ Assert.assertFalse( this.extractor.isNullValue( this.bean ) );
+ } catch ( final Exception e ) {
+ fail( "Should not throw an exception" );
+ }
+ }
}
Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/LongClassFieldExtractorTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/LongClassFieldExtractorTest.java 2007-04-26 22:08:08 UTC (rev 11384)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/LongClassFieldExtractorTest.java 2007-04-26 22:39:34 UTC (rev 11385)
@@ -100,4 +100,12 @@
fail( "Should not throw an exception" );
}
}
+
+ public void testIsNullValue() {
+ try {
+ Assert.assertFalse( this.extractor.isNullValue( this.bean ) );
+ } catch ( final Exception e ) {
+ fail( "Should not throw an exception" );
+ }
+ }
}
Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/ObjectClassFieldExtractorTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/ObjectClassFieldExtractorTest.java 2007-04-26 22:08:08 UTC (rev 11384)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/ObjectClassFieldExtractorTest.java 2007-04-26 22:39:34 UTC (rev 11385)
@@ -99,4 +99,16 @@
fail( "Should not throw an exception" );
}
}
+
+ public void testIsNullValue() {
+ try {
+ Assert.assertFalse( this.extractor.isNullValue( this.bean ) );
+
+ Extractor nullExtractor = ClassFieldExtractorFactory.getClassFieldExtractor( TestBean.class,
+ "nullAttr" );
+ Assert.assertTrue( nullExtractor.isNullValue( this.bean ) );
+ } catch ( final Exception e ) {
+ fail( "Should not throw an exception" );
+ }
+ }
}
Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/ShortClassFieldExtractorTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/ShortClassFieldExtractorTest.java 2007-04-26 22:08:08 UTC (rev 11384)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/ShortClassFieldExtractorTest.java 2007-04-26 22:39:34 UTC (rev 11385)
@@ -99,4 +99,12 @@
fail( "Should not throw an exception" );
}
}
+
+ public void testIsNullValue() {
+ try {
+ Assert.assertFalse( this.extractor.isNullValue( this.bean ) );
+ } catch ( final Exception e ) {
+ fail( "Should not throw an exception" );
+ }
+ }
}
Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/facttemplates/FactTemplateFieldExtractorTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/facttemplates/FactTemplateFieldExtractorTest.java 2007-04-26 22:08:08 UTC (rev 11384)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/facttemplates/FactTemplateFieldExtractorTest.java 2007-04-26 22:39:34 UTC (rev 11385)
@@ -39,6 +39,14 @@
assertEquals( new Integer( 200 ),
extractPrice.getValue( stilton ) );
+ assertFalse( extractName.isNullValue( stilton ) );
+
+ stilton.setFieldValue( "name",
+ null );
+
+ assertTrue( extractName.isNullValue( stilton ) );
+ assertFalse( extractPrice.isNullValue( stilton ) );
+
final Fact brie = cheese.createFact( 12 );
brie.setFieldValue( "name",
"brie" );
@@ -50,6 +58,14 @@
assertEquals( new Integer( 55 ),
extractPrice.getValue( brie ) );
+
+ assertFalse( extractName.isNullValue( brie ) );
+
+ brie.setFieldValue( "name",
+ null );
+
+ assertTrue( extractName.isNullValue( brie ) );
+ assertFalse( extractPrice.isNullValue( stilton ) );
}
public void testDeclaration() {
Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/CompositeObjectSinkAdapterTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/CompositeObjectSinkAdapterTest.java 2007-04-26 22:08:08 UTC (rev 11384)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/CompositeObjectSinkAdapterTest.java 2007-04-26 22:39:34 UTC (rev 11385)
@@ -266,6 +266,10 @@
// Auto-generated method stub
return null;
}
+
+ public boolean isNullValue(final Object object) {
+ return false;
+ }
public ValueType getValueType() {
// Auto-generated method stub
More information about the jboss-svn-commits
mailing list