[jboss-svn-commits] JBL Code SVN: r6903 - in labs/jbossrules/trunk/drools-core/src: main/java/org/drools/base main/java/org/drools/base/evaluators main/java/org/drools/base/extractors main/java/org/drools/base/field main/java/org/drools/facttemplates main/java/org/drools/reteoo main/java/org/drools/rule main/java/org/drools/spi test/java/org/drools/base test/java/org/drools/base/extractors test/java/org/drools/examples/manners test/java/org/drools/rule
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Wed Oct 18 18:17:22 EDT 2006
Author: tirelli
Date: 2006-10-18 18:13:06 -0400 (Wed, 18 Oct 2006)
New Revision: 6903
Added:
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/extractors/
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/field/
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/test/java/org/drools/base/ValueTypeTest.java
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/
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/ClassFieldExtractorsBaseTest.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
Removed:
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/FieldImpl.java
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/BaseEvaluator.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/ClassFieldExtractorFactory.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/FieldFactory.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ValueType.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/ArrayFactory.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/BigDecimalFactory.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/BigIntegerFactory.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/DateFactory.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/FactTemplateFactory.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/ObjectFactory.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/evaluators/StringFactory.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/facttemplates/FactTemplateFieldExtractor.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/CompositeObjectSinkAdapter.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/LiteralConstraint.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/LiteralRestriction.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/ReturnValueConstraint.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/ReturnValueRestriction.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
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/ColumnExtractor.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/Evaluator.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/Restriction.java
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/ClassFieldExtractorFactoryTest.java
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/TestBean.java
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/examples/manners/BaseMannersTest.java
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/examples/manners/Chosen.java
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/examples/manners/Context.java
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/examples/manners/Count.java
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/examples/manners/Hobby.java
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/examples/manners/LastSeat.java
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/examples/manners/Path.java
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/examples/manners/ReteooMannersTest.java
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/examples/manners/Seating.java
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/examples/manners/Sex.java
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/rule/FieldConstraintTest.java
Log:
JBRULES-527: adding primitive handling support to the core engine.
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 2006-10-18 22:06:58 UTC (rev 6902)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/BaseClassFieldExtractor.java 2006-10-18 22:13:06 UTC (rev 6903)
@@ -38,7 +38,7 @@
try {
final ClassFieldInspector inspector = new ClassFieldInspector( clazz );
this.index = ((Integer) inspector.getFieldNames().get( fieldName ) ).intValue();
- this.fieldType = wrapPrimitive( (Class) inspector.getFieldTypes().get( fieldName ) );
+ this.fieldType = (Class) inspector.getFieldTypes().get( fieldName ) ;
this.valueType = ValueType.determineValueType( this.fieldType );
} catch ( final Exception e ) {
throw new RuntimeDroolsException( e );
@@ -57,37 +57,6 @@
return this.valueType;
}
- /** This will be implemented by the dynamic classes */
- abstract public Object getValue(Object object);
-
- protected static Class wrapPrimitive(final Class fieldType) {
- Class returnClass = null;
- // autobox primitives
- if ( fieldType.isPrimitive() ) {
- if ( fieldType == char.class ) {
- returnClass = Character.class;
- } else if ( fieldType == byte.class ) {
- returnClass = Byte.class;
- } else if ( fieldType == short.class ) {
- returnClass = Short.class;
- } else if ( fieldType == int.class ) {
- returnClass = Integer.class;
- } else if ( fieldType == long.class ) {
- returnClass = Long.class;
- } else if ( fieldType == float.class ) {
- returnClass = Float.class;
- } else if ( fieldType == double.class ) {
- returnClass = Double.class;
- } else if ( fieldType == boolean.class ) {
- returnClass = Boolean.class;
- }
- } else {
- returnClass = fieldType;
- }
-
- return returnClass;
- }
-
public int hashCode() {
final int PRIME = 31;
int result = 1;
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/BaseEvaluator.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/BaseEvaluator.java 2006-10-18 22:06:58 UTC (rev 6902)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/BaseEvaluator.java 2006-10-18 22:13:06 UTC (rev 6903)
@@ -47,9 +47,6 @@
return this.type;
}
- public abstract boolean evaluate(Object object1,
- Object object2);
-
public boolean equals(final Object object) {
if ( this == object ) {
return true;
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 2006-10-18 22:06:58 UTC (rev 6902)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ClassFieldExtractor.java 2006-10-18 22:13:06 UTC (rev 6903)
@@ -107,4 +107,36 @@
return this.extractor.getValueType() == other.getValueType() && this.extractor.getIndex() == other.getIndex();
}
+
+ public boolean getBooleanValue(Object object) {
+ return this.extractor.getBooleanValue( object );
+ }
+
+ public byte getByteValue(Object object) {
+ return this.extractor.getByteValue( object );
+ }
+
+ public char getCharValue(Object object) {
+ return this.extractor.getCharValue( object );
+ }
+
+ public double getDoubleValue(Object object) {
+ return this.extractor.getDoubleValue( object );
+ }
+
+ public float getFloatValue(Object object) {
+ return this.extractor.getFloatValue( object );
+ }
+
+ public int getIntValue(Object object) {
+ return this.extractor.getIntValue( object );
+ }
+
+ public long getLongValue(Object object) {
+ return this.extractor.getLongValue( object );
+ }
+
+ public short getShortValue(Object object) {
+ return this.extractor.getShortValue( object );
+ }
}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ClassFieldExtractorFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ClassFieldExtractorFactory.java 2006-10-18 22:06:58 UTC (rev 6902)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ClassFieldExtractorFactory.java 2006-10-18 22:13:06 UTC (rev 6903)
@@ -23,6 +23,16 @@
import org.drools.asm.Label;
import org.drools.asm.MethodVisitor;
import org.drools.asm.Opcodes;
+import org.drools.asm.Type;
+import org.drools.base.extractors.BaseBooleanClassFieldExtractor;
+import org.drools.base.extractors.BaseByteClassFieldExtractor;
+import org.drools.base.extractors.BaseCharClassFieldExtractor;
+import org.drools.base.extractors.BaseDoubleClassFieldExtractor;
+import org.drools.base.extractors.BaseFloatClassFieldExtractor;
+import org.drools.base.extractors.BaseIntClassFieldExtractor;
+import org.drools.base.extractors.BaseLongClassFieldExtractors;
+import org.drools.base.extractors.BaseObjectClassFieldExtractor;
+import org.drools.base.extractors.BaseShortClassFieldExtractor;
import org.drools.util.asm.ClassFieldInspector;
/**
@@ -36,29 +46,20 @@
public class ClassFieldExtractorFactory {
- private static final String GETTER = "get";
+ private static final String BASE_PACKAGE = "org/drools/base";
- private static final String BOOLEAN_GETTER = "is";
-
- private static final String BASE_PACKAGE = "org/drools/base";
-
- private static final String BASE_EXTRACTOR = "org/drools/base/BaseClassFieldExtractor";
-
public static BaseClassFieldExtractor getClassFieldExtractor(final Class clazz,
final String fieldName) {
try {
final ClassFieldInspector inspector = new ClassFieldInspector( clazz );
final Class fieldType = (Class) inspector.getFieldTypes().get( fieldName );
- final String originalClassName = clazz.getName().replace( '.',
- '/' );
- final String getterName = ((Method) inspector.getGetterMethods().get( fieldName )).getName();
- final String className = ClassFieldExtractorFactory.BASE_PACKAGE + "/" + originalClassName + "$" + getterName;
- final String typeName = getTypeName( fieldType );
+ final Method getterMethod = (Method) inspector.getGetterMethods().get( fieldName );
+ final String className = ClassFieldExtractorFactory.BASE_PACKAGE + "/" + Type.getInternalName( clazz ) + "$" + getterMethod.getName();
+
// generating byte array to create target class
- final byte[] bytes = dump( originalClassName,
+ final byte[] bytes = dump( clazz,
className,
- getterName,
- typeName,
+ getterMethod,
fieldType,
clazz.isInterface() );
// use bytes to get a class
@@ -74,38 +75,73 @@
}
}
- private static byte[] dump(final String originalClassName,
+ private static byte[] dump(final Class originalClass,
final String className,
- final String getterName,
- final String typeName,
+ final Method getterMethod,
final Class fieldType,
final boolean isInterface) throws Exception {
final ClassWriter cw = new ClassWriter( true );
- MethodVisitor mv;
+ Class superClass = getSuperClassFor( fieldType );
+ buildClassHeader( superClass,
+ className,
+ cw );
+
+ buildConstructor( superClass,
+ className,
+ cw );
+
+ buildGetMethod( originalClass, className, superClass, getterMethod, cw );
+
+ cw.visitEnd();
+
+ return cw.toByteArray();
+ }
+
+ /**
+ * Builds the class header
+ *
+ * @param clazz The class to build the extractor for
+ * @param className The extractor class name
+ * @param cw
+ */
+ protected static void buildClassHeader(final Class superClass,
+ final String className,
+ final ClassWriter cw) {
cw.visit( Opcodes.V1_2,
Opcodes.ACC_PUBLIC + Opcodes.ACC_SUPER,
className,
null,
- ClassFieldExtractorFactory.BASE_EXTRACTOR,
+ Type.getInternalName( superClass ),
null );
cw.visitSource( null,
null );
+ }
- // constractor
+ /**
+ * Creates a constructor for the shadow proxy receiving
+ * the actual delegate class as parameter
+ *
+ * @param originalClassName
+ * @param className
+ * @param cw
+ */
+ private static void buildConstructor(final Class superClazz,
+ final String className,
+ final ClassWriter cw) {
+ MethodVisitor mv;
{
mv = cw.visitMethod( Opcodes.ACC_PUBLIC,
"<init>",
- "(Ljava/lang/Class;Ljava/lang/String;)V",
+ Type.getMethodDescriptor( Type.VOID_TYPE,
+ new Type[]{ Type.getType( Class.class ), Type.getType( String.class )} ),
null,
null );
mv.visitCode();
final Label l0 = new Label();
mv.visitLabel( l0 );
- mv.visitLineNumber( 10,
- l0 );
mv.visitVarInsn( Opcodes.ALOAD,
0 );
mv.visitVarInsn( Opcodes.ALOAD,
@@ -113,13 +149,12 @@
mv.visitVarInsn( Opcodes.ALOAD,
2 );
mv.visitMethodInsn( Opcodes.INVOKESPECIAL,
- ClassFieldExtractorFactory.BASE_EXTRACTOR,
+ Type.getInternalName( superClazz ),
"<init>",
- "(Ljava/lang/Class;Ljava/lang/String;)V" );
+ Type.getMethodDescriptor( Type.VOID_TYPE,
+ new Type[]{ Type.getType( Class.class ), Type.getType( String.class )} ));
final Label l1 = new Label();
mv.visitLabel( l1 );
- mv.visitLineNumber( 11,
- l1 );
mv.visitInsn( Opcodes.RETURN );
final Label l2 = new Label();
mv.visitLabel( l2 );
@@ -130,179 +165,147 @@
l2,
0 );
mv.visitLocalVariable( "clazz",
- "Ljava/lang/Class;",
+ Type.getDescriptor( Class.class ),
null,
l0,
l2,
1 );
mv.visitLocalVariable( "fieldName",
- "Ljava/lang/String;",
+ Type.getDescriptor( String.class ),
null,
l0,
l2,
2 );
- mv.visitMaxs( 3,
- 3 );
+ mv.visitMaxs( 0,
+ 0 );
mv.visitEnd();
}
+ }
- // for primitive it's different because we special characters for
- // return types and create corresponding Objects (e.g. int -> Integer, boolean -> Boolean, ..)
- if ( fieldType.isPrimitive() ) {
- final String primitiveTypeTag = getPrimitiveTag( fieldType );
-
- mv = cw.visitMethod( Opcodes.ACC_PUBLIC,
- "getValue",
- "(Ljava/lang/Object;)Ljava/lang/Object;",
- null,
- null );
- mv.visitCode();
- final Label l0 = new Label();
- mv.visitLabel( l0 );
- mv.visitLineNumber( 14,
- l0 );
- mv.visitTypeInsn( Opcodes.NEW,
- typeName );
- mv.visitInsn( Opcodes.DUP );
- mv.visitVarInsn( Opcodes.ALOAD,
- 1 );
- mv.visitTypeInsn( Opcodes.CHECKCAST,
- originalClassName );
-
- if ( isInterface ) {
- mv.visitMethodInsn( Opcodes.INVOKEINTERFACE,
- originalClassName,
- getterName,
- "()" + primitiveTypeTag );
-
- } else {
- mv.visitMethodInsn( Opcodes.INVOKEVIRTUAL,
- originalClassName,
- getterName,
- "()" + primitiveTypeTag );
- }
- mv.visitMethodInsn( Opcodes.INVOKESPECIAL,
- typeName,
- "<init>",
- "(" + primitiveTypeTag + ")V" );
- mv.visitInsn( Opcodes.ARETURN );
- final Label l1 = new Label();
- mv.visitLabel( l1 );
- mv.visitLocalVariable( "this",
- "L" + className + ";",
- null,
- l0,
- l1,
- 0 );
- mv.visitLocalVariable( "object",
- "Ljava/lang/Object;",
- null,
- l0,
- l1,
- 1 );
- mv.visitMaxs( 3,
- 2 );
- mv.visitEnd();
+ /**
+ * Creates the proxy reader method for the given method
+ *
+ * @param fieldName
+ * @param fieldFlag
+ * @param method
+ * @param cw
+ */
+ protected static void buildGetMethod(Class originalClass,
+ String className,
+ Class superClass,
+ Method getterMethod,
+ ClassWriter cw) {
+
+ Class fieldType = getterMethod.getReturnType();
+ Method overridingMethod;
+ try {
+ overridingMethod = superClass.getMethod( getOverridingMethodName( fieldType ),
+ new Class[] { Object.class } );
+ } catch ( Exception e ) {
+ throw new RuntimeDroolsException("This is a bug. Please report back to JBRules team.", e);
+ }
+ MethodVisitor mv = cw.visitMethod( Opcodes.ACC_PUBLIC,
+ overridingMethod.getName(),
+ Type.getMethodDescriptor( overridingMethod ),
+ null,
+ null );
+
+ mv.visitCode();
+
+ final Label l0 = new Label();
+ mv.visitLabel( l0 );
+ mv.visitVarInsn( Opcodes.ALOAD,
+ 1 );
+ mv.visitTypeInsn( Opcodes.CHECKCAST,
+ Type.getInternalName( originalClass ) );
+
+ if ( originalClass.isInterface() ) {
+ mv.visitMethodInsn( Opcodes.INVOKEINTERFACE,
+ Type.getInternalName( originalClass ),
+ getterMethod.getName(),
+ Type.getMethodDescriptor( getterMethod ) );
} else {
- String typeNotation = fieldType.isArray() ? typeName : "L"+typeName+";";
- mv = cw.visitMethod( Opcodes.ACC_PUBLIC,
- "getValue",
- "(Ljava/lang/Object;)Ljava/lang/Object;",
- null,
- null );
- mv.visitCode();
- final Label l0 = new Label();
- mv.visitLabel( l0 );
- mv.visitLineNumber( 15,
- l0 );
- mv.visitVarInsn( Opcodes.ALOAD,
- 1 );
- mv.visitTypeInsn( Opcodes.CHECKCAST,
- originalClassName );
- if ( isInterface ) {
- mv.visitMethodInsn( Opcodes.INVOKEINTERFACE,
- originalClassName,
- getterName,
- "()" + typeNotation );
- } else {
- mv.visitMethodInsn( Opcodes.INVOKEVIRTUAL,
- originalClassName,
- getterName,
- "()" + typeNotation );
- }
- mv.visitInsn( Opcodes.ARETURN );
- final Label l1 = new Label();
- mv.visitLabel( l1 );
- mv.visitLocalVariable( "this",
- "L" + className + ";",
- null,
- l0,
- l1,
- 0 );
- mv.visitLocalVariable( "object",
- "Ljava/lang/Object;",
- null,
- l0,
- l1,
- 1 );
- mv.visitMaxs( 1,
- 2 );
- mv.visitEnd();
+ mv.visitMethodInsn( Opcodes.INVOKEVIRTUAL,
+ Type.getInternalName( originalClass ),
+ getterMethod.getName(),
+ Type.getMethodDescriptor( getterMethod ) );
}
- cw.visitEnd();
-
- return cw.toByteArray();
+ mv.visitInsn( Type.getType( fieldType ).getOpcode( Opcodes.IRETURN ) );
+ final Label l1 = new Label();
+ mv.visitLabel( l1 );
+ mv.visitLocalVariable( "this",
+ "L" + className + ";",
+ null,
+ l0,
+ l1,
+ 0 );
+ mv.visitLocalVariable( "object",
+ Type.getDescriptor( Object.class ),
+ null,
+ l0,
+ l1,
+ 1 );
+ mv.visitMaxs( 0,
+ 0 );
+ mv.visitEnd();
}
- private static String getTypeName(final Class fieldType) {
+ private static String getOverridingMethodName( Class fieldType ) {
String ret = null;
-
if ( fieldType.isPrimitive() ) {
if ( fieldType == char.class ) {
- ret = "java/lang/Character";
+ ret = "getCharValue";
} else if ( fieldType == byte.class ) {
- ret = "java/lang/Byte";
+ ret = "getByteValue";
} else if ( fieldType == short.class ) {
- ret = "java/lang/Short";
+ ret = "getShortValue";
} else if ( fieldType == int.class ) {
- ret = "java/lang/Integer";
+ ret = "getIntValue";
} else if ( fieldType == long.class ) {
- ret = "java/lang/Long";
+ ret = "getLongValue";
} else if ( fieldType == float.class ) {
- ret = "java/lang/Float";
+ ret = "getFloatValue";
} else if ( fieldType == double.class ) {
- ret = "java/lang/Double";
+ ret = "getDoubleValue";
} else if ( fieldType == boolean.class ) {
- ret = "java/lang/Boolean";
+ ret = "getBooleanValue";
}
} else {
- ret = fieldType.getName().replace( '.',
- '/' );
+ ret = "getValue";
}
-
return ret;
}
- private static String getPrimitiveTag(final Class fieldType) {
- String ret = null;
- if ( fieldType == char.class ) {
- ret = "C";
- } else if ( fieldType == byte.class ) {
- ret = "B";
- } else if ( fieldType == short.class ) {
- ret = "S";
- } else if ( fieldType == int.class ) {
- ret = "I";
- } else if ( fieldType == long.class ) {
- ret = "J";
- } else if ( fieldType == float.class ) {
- ret = "F";
- } else if ( fieldType == double.class ) {
- ret = "D";
- } else if ( fieldType == boolean.class ) {
- ret = "Z";
+ /**
+ * Returns the appropriate Base class field extractor class
+ * for the given fieldType
+ *
+ * @param fieldType
+ * @return
+ */
+ private static Class getSuperClassFor(Class fieldType) {
+ Class ret = null;
+ if ( fieldType.isPrimitive() ) {
+ if ( fieldType == char.class ) {
+ ret = BaseCharClassFieldExtractor.class;
+ } else if ( fieldType == byte.class ) {
+ ret = BaseByteClassFieldExtractor.class;
+ } else if ( fieldType == short.class ) {
+ ret = BaseShortClassFieldExtractor.class;
+ } else if ( fieldType == int.class ) {
+ ret = BaseIntClassFieldExtractor.class;
+ } else if ( fieldType == long.class ) {
+ ret = BaseLongClassFieldExtractors.class;
+ } else if ( fieldType == float.class ) {
+ ret = BaseFloatClassFieldExtractor.class;
+ } else if ( fieldType == double.class ) {
+ ret = BaseDoubleClassFieldExtractor.class;
+ } else if ( fieldType == boolean.class ) {
+ ret = BaseBooleanClassFieldExtractor.class;
+ }
+ } else {
+ ret = BaseObjectClassFieldExtractor.class;
}
-
return ret;
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/FieldFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/FieldFactory.java 2006-10-18 22:06:58 UTC (rev 6902)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/FieldFactory.java 2006-10-18 22:13:06 UTC (rev 6903)
@@ -19,6 +19,10 @@
import java.math.BigDecimal;
import java.math.BigInteger;
+import org.drools.base.field.BooleanFieldImpl;
+import org.drools.base.field.DoubleFieldImpl;
+import org.drools.base.field.LongFieldImpl;
+import org.drools.base.field.ObjectFieldImpl;
import org.drools.spi.FieldValue;
public class FieldFactory {
@@ -40,37 +44,37 @@
}
if ( valueType == ValueType.NULL_TYPE ) {
- field = new FieldImpl( null );
+ field = new ObjectFieldImpl( null );
} else if ( valueType == ValueType.CHAR_TYPE ) {
- field = new FieldImpl( new Character( value.charAt( 0 ) ) );
+ field = new LongFieldImpl( value.charAt( 0 ) );
} else if ( valueType == ValueType.BYTE_TYPE ) {
- field = new FieldImpl( new Byte( value ) );
+ field = new LongFieldImpl( Long.parseLong( value ) );
} else if ( valueType == ValueType.SHORT_TYPE ) {
- field = new FieldImpl( new Short( value ) );
+ field = new LongFieldImpl( Long.parseLong( value ) );
} else if ( valueType == ValueType.INTEGER_TYPE ) {
- field = new FieldImpl( new Integer( stripNumericType( value ) ) );
+ field = new LongFieldImpl( Long.parseLong( stripNumericType( value ) ) );
} else if ( valueType == ValueType.LONG_TYPE ) {
- field = new FieldImpl( new Long( stripNumericType( value ) ) );
+ field = new LongFieldImpl( Long.parseLong( stripNumericType( value ) ) );
} else if ( valueType == ValueType.FLOAT_TYPE ) {
- field = new FieldImpl( new Float( stripNumericType( value ) ) );
+ field = new DoubleFieldImpl( Float.parseFloat( stripNumericType( value ) ) );
} else if ( valueType == ValueType.DOUBLE_TYPE ) {
- field = new FieldImpl( new Double( stripNumericType( value ) ) );
+ field = new DoubleFieldImpl( Double.parseDouble( stripNumericType( value ) ) );
} else if ( valueType == ValueType.BOOLEAN_TYPE ) {
- field = new FieldImpl( new Boolean( value ) );
+ field = new BooleanFieldImpl( Boolean.valueOf( value ).booleanValue() );
} else if ( valueType == ValueType.STRING_TYPE ) {
- field = new FieldImpl( value.intern() );
+ field = new ObjectFieldImpl( value.intern() );
} else if ( valueType == ValueType.DATE_TYPE ) {
//MN: I think its fine like this, seems to work !
- field = new FieldImpl( value );
+ field = new ObjectFieldImpl( value );
} else if ( valueType == ValueType.ARRAY_TYPE ) {
//MN: I think its fine like this.
- field = new FieldImpl( value );
+ field = new ObjectFieldImpl( value );
} else if ( valueType == ValueType.OBJECT_TYPE ) {
- field = new FieldImpl( value );
+ field = new ObjectFieldImpl( value );
} else if ( valueType == ValueType.BIG_DECIMAL_TYPE ) {
- field = new FieldImpl( new BigDecimal(value) );
+ field = new ObjectFieldImpl( new BigDecimal(value) );
} else if ( valueType == ValueType.BIG_INTEGER_TYPE ) {
- field = new FieldImpl( new BigInteger(value) );
+ field = new ObjectFieldImpl( new BigInteger(value) );
}
return field;
Deleted: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/FieldImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/FieldImpl.java 2006-10-18 22:06:58 UTC (rev 6902)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/FieldImpl.java 2006-10-18 22:13:06 UTC (rev 6903)
@@ -1,61 +0,0 @@
-package org.drools.base;
-
-/*
- * Copyright 2005 JBoss Inc
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import org.drools.spi.FieldValue;
-
-public class FieldImpl
- implements
- FieldValue {
- /**
- *
- */
- private static final long serialVersionUID = 320;
- private Object value;
-
- public FieldImpl(final Object value) {
- this.value = value;
- }
-
- public Object getValue() {
- return this.value;
- }
-
- public String toString() {
- return this.value.toString();
- }
-
- public boolean equals(final Object object) {
- if ( this == object ) {
- return true;
- }
- if ( object == null || !(object instanceof FieldValue) ) {
- return false;
- }
- final FieldImpl other = (FieldImpl) object;
-
- return (((this.value == null) && (other.value == null)) || ((this.value != null) && (this.value.equals( other.value ))));
- }
-
- public int hashCode() {
- if ( this.value != null ) {
- return this.value.hashCode();
- } else {
- return 0;
- }
- }
-}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ValueType.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ValueType.java 2006-10-18 22:06:58 UTC (rev 6902)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ValueType.java 2006-10-18 22:13:06 UTC (rev 6903)
@@ -25,110 +25,204 @@
import org.drools.facttemplates.FactTemplate;
import org.drools.spi.Evaluator;
-public class ValueType implements Serializable {
-
- private static final long serialVersionUID = 320;
-
- public static final ValueType NULL_TYPE = new ValueType( "null", null, null );
- public static final ValueType CHAR_TYPE = new ValueType( "Character", Character.class, CharacterFactory.getInstance() );
- public static final ValueType BYTE_TYPE = new ValueType( "Byte", Byte.class, ByteFactory.getInstance() );
- public static final ValueType SHORT_TYPE = new ValueType( "Short", Short.class, ShortFactory.getInstance() );
- public static final ValueType INTEGER_TYPE = new ValueType( "Integer", Integer.class, IntegerFactory.getInstance() );
- public static final ValueType LONG_TYPE = new ValueType( "Long", Long.class, LongFactory.getInstance() );
- public static final ValueType FLOAT_TYPE = new ValueType( "Float", Float.class, FloatFactory.getInstance() );
- public static final ValueType DOUBLE_TYPE = new ValueType( "Double", Double.class, DoubleFactory.getInstance() );
- public static final ValueType BOOLEAN_TYPE = new ValueType( "Boolean", Boolean.class, BooleanFactory.getInstance() );
- public static final ValueType DATE_TYPE = new ValueType( "Date", Date.class, DateFactory.getInstance() );
- public static final ValueType ARRAY_TYPE = new ValueType( "Array", Object[].class, ArrayFactory.getInstance() );
- public static final ValueType STRING_TYPE = new ValueType( "String", String.class, StringFactory.getInstance() );
- public static final ValueType OBJECT_TYPE = new ValueType( "Object", Object.class, ObjectFactory.getInstance() );
- public static final ValueType FACTTEMPLATE_TYPE = new ValueType( "FactTemplate", FactTemplate.class, ObjectFactory.getInstance() );
- public static final ValueType BIG_DECIMAL_TYPE = new ValueType( "BigDecimal", BigDecimal.class, BigDecimalFactory.getInstance() );
- public static final ValueType BIG_INTEGER_TYPE = new ValueType( "BigInteger", BigInteger.class, BigIntegerFactory.getInstance() );
-
- private final String name;
- private final Class classType;
+public class ValueType
+ implements
+ Serializable {
+
+ private static final long serialVersionUID = 320;
+
+ public static final ValueType NULL_TYPE = new ValueType( "null",
+ null,
+ null );
+ // wrapper types
+ public static final ValueType CHAR_TYPE = new ValueType( "Character",
+ Character.class,
+ ObjectFactory.getInstance() );
+ public static final ValueType BYTE_TYPE = new ValueType( "Byte",
+ Byte.class,
+ ObjectFactory.getInstance() );
+ public static final ValueType SHORT_TYPE = new ValueType( "Short",
+ Short.class,
+ ObjectFactory.getInstance() );
+ public static final ValueType INTEGER_TYPE = new ValueType( "Integer",
+ Integer.class,
+ ObjectFactory.getInstance() );
+ public static final ValueType LONG_TYPE = new ValueType( "Long",
+ Long.class,
+ ObjectFactory.getInstance() );
+ public static final ValueType FLOAT_TYPE = new ValueType( "Float",
+ Float.class,
+ ObjectFactory.getInstance() );
+ public static final ValueType DOUBLE_TYPE = new ValueType( "Double",
+ Double.class,
+ ObjectFactory.getInstance() );
+ public static final ValueType BOOLEAN_TYPE = new ValueType( "Boolean",
+ Boolean.class,
+ ObjectFactory.getInstance() );
+ // primitive types
+ public static final ValueType PCHAR_TYPE = new ValueType( "char",
+ Character.TYPE,
+ CharacterFactory.getInstance() );
+ public static final ValueType PBYTE_TYPE = new ValueType( "byte",
+ Byte.TYPE,
+ ByteFactory.getInstance() );
+ public static final ValueType PSHORT_TYPE = new ValueType( "short",
+ Short.TYPE,
+ ShortFactory.getInstance() );
+ public static final ValueType PINTEGER_TYPE = new ValueType( "int",
+ Integer.TYPE,
+ IntegerFactory.getInstance() );
+ public static final ValueType PLONG_TYPE = new ValueType( "long",
+ Long.TYPE,
+ LongFactory.getInstance() );
+ public static final ValueType PFLOAT_TYPE = new ValueType( "float",
+ Float.TYPE,
+ FloatFactory.getInstance() );
+ public static final ValueType PDOUBLE_TYPE = new ValueType( "double",
+ Double.TYPE,
+ DoubleFactory.getInstance() );
+ public static final ValueType PBOOLEAN_TYPE = new ValueType( "boolean",
+ Boolean.TYPE,
+ BooleanFactory.getInstance() );
+ // other types
+ public static final ValueType DATE_TYPE = new ValueType( "Date",
+ Date.class,
+ DateFactory.getInstance() );
+ public static final ValueType ARRAY_TYPE = new ValueType( "Array",
+ Object[].class,
+ ArrayFactory.getInstance() );
+ public static final ValueType STRING_TYPE = new ValueType( "String",
+ String.class,
+ StringFactory.getInstance() );
+ public static final ValueType OBJECT_TYPE = new ValueType( "Object",
+ Object.class,
+ ObjectFactory.getInstance() );
+ public static final ValueType FACTTEMPLATE_TYPE = new ValueType( "FactTemplate",
+ FactTemplate.class,
+ ObjectFactory.getInstance() );
+ public static final ValueType BIG_DECIMAL_TYPE = new ValueType( "BigDecimal",
+ BigDecimal.class,
+ BigDecimalFactory.getInstance() );
+ public static final ValueType BIG_INTEGER_TYPE = new ValueType( "BigInteger",
+ BigInteger.class,
+ BigIntegerFactory.getInstance() );
+
+ private final String name;
+ private final Class classType;
private final EvaluatorFactory evaluatorFactory;
-
- private ValueType(String name, Class classType, EvaluatorFactory evaluatorFactory) {
- this.name = name;
- this.classType = classType;
+
+ private ValueType(String name,
+ Class classType,
+ EvaluatorFactory evaluatorFactory) {
+ this.name = name;
+ this.classType = classType;
this.evaluatorFactory = evaluatorFactory;
}
-
- private Object readResolve () throws java.io.ObjectStreamException
- {
+
+ private Object readResolve() throws java.io.ObjectStreamException {
return determineValueType( this.classType );
}
-
+
public String getName() {
return this.name;
}
-
+
public Class getClassType() {
return this.classType;
}
-
- public Evaluator getEvaluator(Operator operator) {
+
+ public Evaluator getEvaluator(Operator operator) {
return this.evaluatorFactory.getEvaluator( operator );
}
-
+
public static ValueType determineValueType(Class clazz) {
if ( clazz == null ) {
- return ValueType .NULL_TYPE;
- } if ( clazz == FactTemplate.class ) {
- return ValueType.FACTTEMPLATE_TYPE;
+ return ValueType.NULL_TYPE;
+ }
+ if ( clazz == FactTemplate.class ) {
+ return ValueType.FACTTEMPLATE_TYPE;
+ } else if ( clazz == Character.TYPE ) {
+ return ValueType.PCHAR_TYPE;
+ } else if ( clazz == Byte.TYPE ) {
+ return ValueType.PBYTE_TYPE;
+ } else if ( clazz == Short.TYPE ) {
+ return ValueType.PSHORT_TYPE;
+ } else if ( clazz == Integer.TYPE ) {
+ return ValueType.PINTEGER_TYPE;
+ } else if ( clazz == Long.TYPE ) {
+ return ValueType.PLONG_TYPE;
+ } else if ( clazz == Float.TYPE ) {
+ return ValueType.PFLOAT_TYPE;
+ } else if ( clazz == Double.TYPE ) {
+ return ValueType.PDOUBLE_TYPE;
+ } else if ( clazz == Boolean.TYPE ) {
+ return ValueType.PBOOLEAN_TYPE;
} else if ( clazz == Character.class ) {
- return ValueType.CHAR_TYPE;
+ return ValueType.CHAR_TYPE;
} else if ( clazz == Byte.class ) {
- return ValueType .BYTE_TYPE;
+ return ValueType.BYTE_TYPE;
} else if ( clazz == Short.class ) {
- return ValueType .SHORT_TYPE;
+ return ValueType.SHORT_TYPE;
} else if ( clazz == Integer.class ) {
- return ValueType .INTEGER_TYPE;
+ return ValueType.INTEGER_TYPE;
} else if ( clazz == Long.class ) {
- return ValueType .LONG_TYPE;
+ return ValueType.LONG_TYPE;
} else if ( clazz == Float.class ) {
- return ValueType .FLOAT_TYPE;
+ return ValueType.FLOAT_TYPE;
} else if ( clazz == Double.class ) {
- return ValueType .DOUBLE_TYPE;
+ return ValueType.DOUBLE_TYPE;
} else if ( clazz == Boolean.class ) {
- return ValueType .BOOLEAN_TYPE;
+ return ValueType.BOOLEAN_TYPE;
} else if ( clazz == java.sql.Date.class ) {
- return ValueType .DATE_TYPE;
+ return ValueType.DATE_TYPE;
} else if ( clazz == java.util.Date.class ) {
- return ValueType .DATE_TYPE;
+ return ValueType.DATE_TYPE;
} else if ( clazz.isAssignableFrom( Object[].class ) ) {
- return ValueType .ARRAY_TYPE;
- } else if ( clazz == BigDecimal.class ) {
- return ValueType .BIG_DECIMAL_TYPE;
-
- }
- else if ( clazz == BigInteger.class ) {
- return ValueType .BIG_INTEGER_TYPE;
- }
- else if ( clazz == String.class ) {
- return ValueType .STRING_TYPE;
+ return ValueType.ARRAY_TYPE;
+ } else if ( clazz == BigDecimal.class ) {
+ return ValueType.BIG_DECIMAL_TYPE;
+ } else if ( clazz == BigInteger.class ) {
+ return ValueType.BIG_INTEGER_TYPE;
+ } else if ( clazz == String.class ) {
+ return ValueType.STRING_TYPE;
} else if ( clazz instanceof Object ) {
- return ValueType .OBJECT_TYPE;
+ return ValueType.OBJECT_TYPE;
}
- throw new RuntimeDroolsException( "unable to determine ValueType for Class [" + clazz + "]" );
+ throw new RuntimeDroolsException( "unable to determine ValueType for Class [" + clazz + "]" );
}
-
+
public String toString() {
return "ValueType = '" + this.name + "'";
- }
-
+ }
+
public int hashCode() {
return this.name.hashCode();
}
-
+
public boolean equals(Object object) {
if ( object == this ) {
- return true;
+ return true;
}
-
- return false;
+
+ return false;
}
-
+
+ public boolean isBoolean() {
+ return ((this.classType == Boolean.class) || (this.classType == Boolean.TYPE));
+ }
+
+ public boolean isNumber() {
+ return (Number.class.isAssignableFrom( this.classType )) ||
+ (this.classType == Byte.TYPE) ||
+ (this.classType == Short.TYPE) ||
+ (this.classType == Integer.TYPE) ||
+ (this.classType == Long.TYPE) ||
+ (this.classType == Float.TYPE) ||
+ (this.classType == Double.TYPE);
+ }
+
+ public boolean isChar() {
+ return ((this.classType == Character.class) || (this.classType == Character.TYPE));
+ }
+
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/ArrayFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/ArrayFactory.java 2006-10-18 22:06:58 UTC (rev 6902)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/ArrayFactory.java 2006-10-18 22:13:06 UTC (rev 6903)
@@ -20,25 +20,27 @@
import org.drools.base.BaseEvaluator;
import org.drools.base.ValueType;
-import org.drools.base.evaluators.ShortFactory.ShortEqualEvaluator;
-import org.drools.base.evaluators.ShortFactory.ShortGreaterEvaluator;
-import org.drools.base.evaluators.ShortFactory.ShortGreaterOrEqualEvaluator;
-import org.drools.base.evaluators.ShortFactory.ShortLessEvaluator;
-import org.drools.base.evaluators.ShortFactory.ShortLessOrEqualEvaluator;
-import org.drools.base.evaluators.ShortFactory.ShortNotEqualEvaluator;
+import org.drools.rule.VariableConstraint.ObjectVariableContextEntry;
+import org.drools.rule.VariableConstraint.VariableContextEntry;
import org.drools.spi.Evaluator;
+import org.drools.spi.Extractor;
+import org.drools.spi.FieldValue;
/**
* For handling simple (non collection) array types.
* @author Michael Neale
*/
-public class ArrayFactory implements EvaluatorFactory {
- private static EvaluatorFactory INSTANCE = new ArrayFactory();
-
+public class ArrayFactory
+ implements
+ EvaluatorFactory {
+
+ private static final long serialVersionUID = -5485618486269637287L;
+ private static EvaluatorFactory INSTANCE = new ArrayFactory();
+
private ArrayFactory() {
-
+
}
-
+
public static EvaluatorFactory getInstance() {
if ( INSTANCE == null ) {
INSTANCE = new ArrayFactory();
@@ -53,13 +55,12 @@
return ArrayNotEqualEvaluator.INSTANCE;
} else if ( operator == Operator.LESS ) {
return ArrayContainsEvaluator.INSTANCE;
- } else if ( operator == Operator.CONTAINS) {
+ } else if ( operator == Operator.CONTAINS ) {
return ArrayContainsEvaluator.INSTANCE;
} else {
throw new RuntimeException( "Operator '" + operator + "' does not exist for ArrayEvaluator" );
- }
+ }
}
-
static class ArrayEqualEvaluator extends BaseEvaluator {
/**
@@ -73,14 +74,46 @@
Operator.EQUAL );
}
- public boolean evaluate(final Object object1,
+ public boolean evaluate(final Extractor extractor,
+ final Object object1,
+ final FieldValue object2) {
+ Object value1 = extractor.getValue( object1 );
+ Object value2 = object2.getValue();
+ if ( value1 == null ) {
+ return value2 == null;
+ }
+ return value1.equals( value2 );
+ }
+
+ public boolean evaluate(final FieldValue object1,
+ final Extractor extractor,
final Object object2) {
- if ( object1 == null ) {
- return object2 == null;
+ Object value1 = object1.getValue();
+ Object value2 = extractor.getValue( object2 );
+ if ( value1 == null ) {
+ return value2 == null;
}
- return object1.equals( object2 );
+ return value1.equals( value2 );
}
+ public boolean evaluateCachedRight(VariableContextEntry context,
+ Object left) {
+ Object value = context.declaration.getExtractor().getValue( left );
+ if ( value == null ) {
+ return ((ObjectVariableContextEntry) context).right == null;
+ }
+ return value.equals( ((ObjectVariableContextEntry) context).right );
+ }
+
+ public boolean evaluateCachedLeft(VariableContextEntry context,
+ Object right) {
+ Object value = context.extractor.getValue( right );
+ if ( ((ObjectVariableContextEntry) context).left == null ) {
+ return value == null;
+ }
+ return ((ObjectVariableContextEntry) context).left.equals( value );
+ }
+
public String toString() {
return "Array ==";
}
@@ -98,12 +131,46 @@
Operator.NOT_EQUAL );
}
- public boolean evaluate(final Object object1,
+ public boolean evaluate(final Extractor extractor,
+ final Object object1,
+ final FieldValue object2) {
+ Object value1 = extractor.getValue( object1 );
+ Object value2 = object2.getValue();
+ if ( value1 == null ) {
+ return value2 == null;
+ }
+ return !value1.equals( value2 );
+ }
+
+ public boolean evaluate(final FieldValue object1,
+ final Extractor extractor,
final Object object2) {
- return !Arrays.equals( (Object[]) object1,
- (Object[]) object2 );
+ Object value1 = object1.getValue();
+ Object value2 = extractor.getValue( object2 );
+ if ( value1 == null ) {
+ return value2 == null;
+ }
+ return !value1.equals( value2 );
}
+ public boolean evaluateCachedRight(VariableContextEntry context,
+ Object left) {
+ Object value = context.declaration.getExtractor().getValue( left );
+ if ( value == null ) {
+ return ((ObjectVariableContextEntry) context).right == null;
+ }
+ return !value.equals( ((ObjectVariableContextEntry) context).right );
+ }
+
+ public boolean evaluateCachedLeft(VariableContextEntry context,
+ Object right) {
+ Object value = context.extractor.getValue( right );
+ if ( ((ObjectVariableContextEntry) context).left == null ) {
+ return value == null;
+ }
+ return !((ObjectVariableContextEntry) context).left.equals( value );
+ }
+
public String toString() {
return "Array !=";
}
@@ -121,19 +188,53 @@
Operator.CONTAINS );
}
- public boolean evaluate(final Object object1,
+ public boolean evaluate(final Extractor extractor,
+ final Object object1,
+ final FieldValue object2) {
+ Object value = object2.getValue();
+ final Object[] array = (Object[]) extractor.getValue( object1 );
+
+ if ( Arrays.binarySearch( array,
+ value ) == -1 ) {
+ return false;
+ }
+ return true;
+ }
+
+ public boolean evaluate(final FieldValue object1,
+ final Extractor extractor,
final Object object2) {
- if ( object2 == null ) {
+ Object value = extractor.getValue( object2 );
+ final Object[] array = (Object[]) object1.getValue();
+ if ( Arrays.binarySearch( array,
+ value ) == -1 ) {
return false;
}
- if ( Arrays.binarySearch( (Object[]) object1,
- object2 ) == -1 ) {
+ return true;
+ }
+
+ public boolean evaluateCachedRight(VariableContextEntry context,
+ Object left) {
+ Object value = ((ObjectVariableContextEntry) context).right;
+ final Object[] array = (Object[]) context.declaration.getExtractor().getValue( left );
+ if ( Arrays.binarySearch( array,
+ value ) == -1 ) {
return false;
- } else {
- return true;
}
+ return true;
}
+ public boolean evaluateCachedLeft(VariableContextEntry context,
+ Object right) {
+ Object value = context.extractor.getValue( right );
+ final Object[] array = (Object[]) ((ObjectVariableContextEntry) context).left;
+ if ( Arrays.binarySearch( array,
+ value ) == -1 ) {
+ return false;
+ }
+ return true;
+ }
+
public String toString() {
return "Array contains";
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/BigDecimalFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/BigDecimalFactory.java 2006-10-18 22:06:58 UTC (rev 6902)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/BigDecimalFactory.java 2006-10-18 22:13:06 UTC (rev 6903)
@@ -20,15 +20,23 @@
import org.drools.base.BaseEvaluator;
import org.drools.base.ValueType;
+import org.drools.rule.VariableConstraint.ObjectVariableContextEntry;
+import org.drools.rule.VariableConstraint.VariableContextEntry;
import org.drools.spi.Evaluator;
+import org.drools.spi.Extractor;
+import org.drools.spi.FieldValue;
-public class BigDecimalFactory implements EvaluatorFactory {
- private static EvaluatorFactory INSTANCE = new BigDecimalFactory();
-
+public class BigDecimalFactory
+ implements
+ EvaluatorFactory {
+
+ private static final long serialVersionUID = -3272957023711251983L;
+ private static EvaluatorFactory INSTANCE = new BigDecimalFactory();
+
private BigDecimalFactory() {
-
+
}
-
+
public static EvaluatorFactory getInstance() {
if ( INSTANCE == null ) {
INSTANCE = new BigDecimalFactory();
@@ -49,7 +57,7 @@
return BigDecimalGreaterEvaluator.INSTANCE;
} else if ( operator == Operator.GREATER_OR_EQUAL ) {
return BigDecimalGreaterOrEqualEvaluator.INSTANCE;
- } else {
+ } else {
throw new RuntimeException( "Operator '" + operator + "' does not exist for BigDecimalEvaluator" );
}
}
@@ -66,14 +74,46 @@
Operator.EQUAL );
}
- public boolean evaluate(final Object object1,
+ public boolean evaluate(final Extractor extractor,
+ final Object object1,
+ final FieldValue object2) {
+ Object value1 = extractor.getValue( object1 );
+ Object value2 = object2.getValue();
+ if ( value1 == null ) {
+ return value2 == null;
+ }
+ return value1.equals( value2 );
+ }
+
+ public boolean evaluate(final FieldValue object1,
+ final Extractor extractor,
final Object object2) {
- if ( object1 == null ) {
- return object2 == null;
+ Object value1 = object1.getValue();
+ Object value2 = extractor.getValue( object2 );
+ if ( value1 == null ) {
+ return value2 == null;
}
- return ((Number) object1).equals( object2 );
+ return value1.equals( value2 );
}
+ public boolean evaluateCachedRight(VariableContextEntry context,
+ Object left) {
+ Object value = context.declaration.getExtractor().getValue( left );
+ if ( value == null ) {
+ return ((ObjectVariableContextEntry) context).right == null;
+ }
+ return value.equals( ((ObjectVariableContextEntry) context).right );
+ }
+
+ public boolean evaluateCachedLeft(VariableContextEntry context,
+ Object right) {
+ Object value = context.extractor.getValue( right );
+ if ( ((ObjectVariableContextEntry) context).left == null ) {
+ return value == null;
+ }
+ return ((ObjectVariableContextEntry) context).left.equals( value );
+ }
+
public String toString() {
return "BigDecimal ==";
}
@@ -91,14 +131,46 @@
Operator.NOT_EQUAL );
}
- public boolean evaluate(final Object object1,
+ public boolean evaluate(final Extractor extractor,
+ final Object object1,
+ final FieldValue object2) {
+ Object value1 = extractor.getValue( object1 );
+ Object value2 = object2.getValue();
+ if ( value1 == null ) {
+ return value2 != null;
+ }
+ return !value1.equals( value2 );
+ }
+
+ public boolean evaluate(final FieldValue object1,
+ final Extractor extractor,
final Object object2) {
- if ( object1 == null ) {
- return object2 != null;
+ Object value1 = object1.getValue();
+ Object value2 = extractor.getValue( object2 );
+ if ( value1 == null ) {
+ return value2 != null;
}
- return !((BigDecimal) object1).equals( object2 );
+ return !value1.equals( value2 );
}
+ public boolean evaluateCachedRight(VariableContextEntry context,
+ Object left) {
+ Object value = context.declaration.getExtractor().getValue( left );
+ if ( value == null ) {
+ return ((ObjectVariableContextEntry) context).right != null;
+ }
+ return !value.equals( ((ObjectVariableContextEntry) context).right );
+ }
+
+ public boolean evaluateCachedLeft(VariableContextEntry context,
+ Object right) {
+ Object value = context.extractor.getValue( right );
+ if ( ((ObjectVariableContextEntry) context).left == null ) {
+ return value != null;
+ }
+ return !((ObjectVariableContextEntry) context).left.equals( value );
+ }
+
public String toString() {
return "BigDecimal !=";
}
@@ -116,11 +188,32 @@
Operator.LESS );
}
- public boolean evaluate(final Object object1,
+ public boolean evaluate(final Extractor extractor,
+ final Object object1,
+ final FieldValue object2) {
+ final BigDecimal comp = (BigDecimal) extractor.getValue( object1 );
+ return comp.compareTo( object2.getValue() ) < 0;
+ }
+
+ public boolean evaluate(final FieldValue object1,
+ final Extractor extractor,
final Object object2) {
- return ((BigDecimal) object1).compareTo( (BigDecimal) object2) < 0;
+ final BigDecimal comp = (BigDecimal) object1.getValue();
+ return comp.compareTo( extractor.getValue( object2 ) ) < 0;
}
+ public boolean evaluateCachedRight(VariableContextEntry context,
+ Object left) {
+ final BigDecimal comp = (BigDecimal) context.declaration.getExtractor().getValue( left );
+ return comp.compareTo( ((ObjectVariableContextEntry) context).right ) < 0;
+ }
+
+ public boolean evaluateCachedLeft(VariableContextEntry context,
+ Object right) {
+ final BigDecimal comp = (BigDecimal) ((ObjectVariableContextEntry) context).left;
+ return comp.compareTo( context.extractor.getValue( right ) ) < 0;
+ }
+
public String toString() {
return "BigDecimal <";
}
@@ -138,11 +231,32 @@
Operator.LESS_OR_EQUAL );
}
- public boolean evaluate(final Object object1,
+ public boolean evaluate(final Extractor extractor,
+ final Object object1,
+ final FieldValue object2) {
+ final BigDecimal comp = (BigDecimal) extractor.getValue( object1 );
+ return comp.compareTo( object2.getValue() ) <= 0;
+ }
+
+ public boolean evaluate(final FieldValue object1,
+ final Extractor extractor,
final Object object2) {
- return ((BigDecimal) object1).compareTo((BigDecimal)object2) <= 0;
+ final BigDecimal comp = (BigDecimal) object1.getValue();
+ return comp.compareTo( extractor.getValue( object2 ) ) <= 0;
}
+ public boolean evaluateCachedRight(VariableContextEntry context,
+ Object left) {
+ final BigDecimal comp = (BigDecimal) context.declaration.getExtractor().getValue( left );
+ return comp.compareTo( ((ObjectVariableContextEntry) context).right ) <= 0;
+ }
+
+ public boolean evaluateCachedLeft(VariableContextEntry context,
+ Object right) {
+ final BigDecimal comp = (BigDecimal) ((ObjectVariableContextEntry) context).left;
+ return comp.compareTo( context.extractor.getValue( right ) ) <= 0;
+ }
+
public String toString() {
return "BigDecimal <=";
}
@@ -160,11 +274,32 @@
Operator.GREATER );
}
- public boolean evaluate(final Object object1,
+ public boolean evaluate(final Extractor extractor,
+ final Object object1,
+ final FieldValue object2) {
+ final BigDecimal comp = (BigDecimal) extractor.getValue( object1 );
+ return comp.compareTo( object2.getValue() ) > 0;
+ }
+
+ public boolean evaluate(final FieldValue object1,
+ final Extractor extractor,
final Object object2) {
- return ((BigDecimal) object1).compareTo((BigDecimal)object2) > 0;
+ final BigDecimal comp = (BigDecimal) object1.getValue();
+ return comp.compareTo( extractor.getValue( object2 ) ) > 0;
}
+ public boolean evaluateCachedRight(VariableContextEntry context,
+ Object left) {
+ final BigDecimal comp = (BigDecimal) context.declaration.getExtractor().getValue( left );
+ return comp.compareTo( ((ObjectVariableContextEntry) context).right ) > 0;
+ }
+
+ public boolean evaluateCachedLeft(VariableContextEntry context,
+ Object right) {
+ final BigDecimal comp = (BigDecimal) ((ObjectVariableContextEntry) context).left;
+ return comp.compareTo( context.extractor.getValue( right ) ) > 0;
+ }
+
public String toString() {
return "BigDecimal >";
}
@@ -182,11 +317,32 @@
Operator.GREATER_OR_EQUAL );
}
- public boolean evaluate(final Object object1,
+ public boolean evaluate(final Extractor extractor,
+ final Object object1,
+ final FieldValue object2) {
+ final BigDecimal comp = (BigDecimal) extractor.getValue( object1 );
+ return comp.compareTo( object2.getValue() ) >= 0;
+ }
+
+ public boolean evaluate(final FieldValue object1,
+ final Extractor extractor,
final Object object2) {
- return ((BigDecimal) object1).compareTo((BigDecimal)object2) >= 0;
+ final BigDecimal comp = (BigDecimal) object1.getValue();
+ return comp.compareTo( extractor.getValue( object2 ) ) >= 0;
}
+ public boolean evaluateCachedRight(VariableContextEntry context,
+ Object left) {
+ final BigDecimal comp = (BigDecimal) context.declaration.getExtractor().getValue( left );
+ return comp.compareTo( ((ObjectVariableContextEntry) context).right ) >= 0;
+ }
+
+ public boolean evaluateCachedLeft(VariableContextEntry context,
+ Object right) {
+ final BigDecimal comp = (BigDecimal) ((ObjectVariableContextEntry) context).left;
+ return comp.compareTo( context.extractor.getValue( right ) ) >= 0;
+ }
+
public String toString() {
return "BigDecimal >=";
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/BigIntegerFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/BigIntegerFactory.java 2006-10-18 22:06:58 UTC (rev 6902)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/BigIntegerFactory.java 2006-10-18 22:13:06 UTC (rev 6903)
@@ -20,9 +20,15 @@
import org.drools.base.BaseEvaluator;
import org.drools.base.ValueType;
+import org.drools.rule.VariableConstraint.ObjectVariableContextEntry;
+import org.drools.rule.VariableConstraint.VariableContextEntry;
import org.drools.spi.Evaluator;
+import org.drools.spi.Extractor;
+import org.drools.spi.FieldValue;
public class BigIntegerFactory implements EvaluatorFactory {
+
+ private static final long serialVersionUID = 4180922947425495749L;
private static EvaluatorFactory INSTANCE = new BigIntegerFactory();
private BigIntegerFactory() {
@@ -66,14 +72,46 @@
Operator.EQUAL );
}
- public boolean evaluate(final Object object1,
+ public boolean evaluate(final Extractor extractor,
+ final Object object1,
+ final FieldValue object2) {
+ Object value1 = extractor.getValue( object1 );
+ Object value2 = object2.getValue();
+ if ( value1 == null ) {
+ return value2 == null;
+ }
+ return value1.equals( value2 );
+ }
+
+ public boolean evaluate(final FieldValue object1,
+ final Extractor extractor,
final Object object2) {
- if ( object1 == null ) {
- return object2 == null;
+ Object value1 = object1.getValue();
+ Object value2 = extractor.getValue( object2 );
+ if ( value1 == null ) {
+ return value2 == null;
}
- return ((Number) object1).equals( object2 );
+ return value1.equals( value2 );
}
+ public boolean evaluateCachedRight(VariableContextEntry context,
+ Object left) {
+ Object value = context.declaration.getExtractor().getValue( left );
+ if ( value == null ) {
+ return ((ObjectVariableContextEntry) context).right == null;
+ }
+ return value.equals( ((ObjectVariableContextEntry) context).right );
+ }
+
+ public boolean evaluateCachedLeft(VariableContextEntry context,
+ Object right) {
+ Object value = context.extractor.getValue( right );
+ if ( ((ObjectVariableContextEntry) context).left == null ) {
+ return value == null;
+ }
+ return ((ObjectVariableContextEntry) context).left.equals( value );
+ }
+
public String toString() {
return "BigInteger ==";
}
@@ -91,14 +129,46 @@
Operator.NOT_EQUAL );
}
- public boolean evaluate(final Object object1,
+ public boolean evaluate(final Extractor extractor,
+ final Object object1,
+ final FieldValue object2) {
+ Object value1 = extractor.getValue( object1 );
+ Object value2 = object2.getValue();
+ if ( value1 == null ) {
+ return value2 != null;
+ }
+ return !value1.equals( value2 );
+ }
+
+ public boolean evaluate(final FieldValue object1,
+ final Extractor extractor,
final Object object2) {
- if ( object1 == null ) {
- return object2 != null;
+ Object value1 = object1.getValue();
+ Object value2 = extractor.getValue( object2 );
+ if ( value1 == null ) {
+ return value2 != null;
}
- return !((BigInteger) object1).equals( object2 );
+ return !value1.equals( value2 );
}
+ public boolean evaluateCachedRight(VariableContextEntry context,
+ Object left) {
+ Object value = context.declaration.getExtractor().getValue( left );
+ if ( value == null ) {
+ return ((ObjectVariableContextEntry) context).right != null;
+ }
+ return !value.equals( ((ObjectVariableContextEntry) context).right );
+ }
+
+ public boolean evaluateCachedLeft(VariableContextEntry context,
+ Object right) {
+ Object value = context.extractor.getValue( right );
+ if ( ((ObjectVariableContextEntry) context).left == null ) {
+ return value != null;
+ }
+ return !((ObjectVariableContextEntry) context).left.equals( value );
+ }
+
public String toString() {
return "BigInteger !=";
}
@@ -116,11 +186,32 @@
Operator.LESS );
}
- public boolean evaluate(final Object object1,
+ public boolean evaluate(final Extractor extractor,
+ final Object object1,
+ final FieldValue object2) {
+ final BigInteger comp = (BigInteger) extractor.getValue( object1 );
+ return comp.compareTo( object2.getValue() ) < 0;
+ }
+
+ public boolean evaluate(final FieldValue object1,
+ final Extractor extractor,
final Object object2) {
- return ((BigInteger) object1).compareTo( (BigInteger) object2) < 0;
+ final BigInteger comp = (BigInteger) object1.getValue();
+ return comp.compareTo( extractor.getValue( object2 ) ) < 0;
}
+ public boolean evaluateCachedRight(VariableContextEntry context,
+ Object left) {
+ final BigInteger comp = (BigInteger) context.declaration.getExtractor().getValue( left );
+ return comp.compareTo( ((ObjectVariableContextEntry) context).right ) < 0;
+ }
+
+ public boolean evaluateCachedLeft(VariableContextEntry context,
+ Object right) {
+ final BigInteger comp = (BigInteger) ((ObjectVariableContextEntry) context).left;
+ return comp.compareTo( context.extractor.getValue( right ) ) < 0;
+ }
+
public String toString() {
return "BigInteger <";
}
@@ -138,11 +229,32 @@
Operator.LESS_OR_EQUAL );
}
- public boolean evaluate(final Object object1,
+ public boolean evaluate(final Extractor extractor,
+ final Object object1,
+ final FieldValue object2) {
+ final BigInteger comp = (BigInteger) extractor.getValue( object1 );
+ return comp.compareTo( object2.getValue() ) <= 0;
+ }
+
+ public boolean evaluate(final FieldValue object1,
+ final Extractor extractor,
final Object object2) {
- return ((BigInteger) object1).compareTo((BigInteger)object2) <= 0;
+ final BigInteger comp = (BigInteger) object1.getValue();
+ return comp.compareTo( extractor.getValue( object2 ) ) <= 0;
}
+ public boolean evaluateCachedRight(VariableContextEntry context,
+ Object left) {
+ final BigInteger comp = (BigInteger) context.declaration.getExtractor().getValue( left );
+ return comp.compareTo( ((ObjectVariableContextEntry) context).right ) <= 0;
+ }
+
+ public boolean evaluateCachedLeft(VariableContextEntry context,
+ Object right) {
+ final BigInteger comp = (BigInteger) ((ObjectVariableContextEntry) context).left;
+ return comp.compareTo( context.extractor.getValue( right ) ) <= 0;
+ }
+
public String toString() {
return "BigInteger <=";
}
@@ -160,11 +272,32 @@
Operator.GREATER );
}
- public boolean evaluate(final Object object1,
+ public boolean evaluate(final Extractor extractor,
+ final Object object1,
+ final FieldValue object2) {
+ final BigInteger comp = (BigInteger) extractor.getValue( object1 );
+ return comp.compareTo( object2.getValue() ) > 0;
+ }
+
+ public boolean evaluate(final FieldValue object1,
+ final Extractor extractor,
final Object object2) {
- return ((BigInteger) object1).compareTo((BigInteger)object2) > 0;
+ final BigInteger comp = (BigInteger) object1.getValue();
+ return comp.compareTo( extractor.getValue( object2 ) ) > 0;
}
+ public boolean evaluateCachedRight(VariableContextEntry context,
+ Object left) {
+ final BigInteger comp = (BigInteger) context.declaration.getExtractor().getValue( left );
+ return comp.compareTo( ((ObjectVariableContextEntry) context).right ) > 0;
+ }
+
+ public boolean evaluateCachedLeft(VariableContextEntry context,
+ Object right) {
+ final BigInteger comp = (BigInteger) ((ObjectVariableContextEntry) context).left;
+ return comp.compareTo( context.extractor.getValue( right ) ) > 0;
+ }
+
public String toString() {
return "BigInteger >";
}
@@ -182,11 +315,32 @@
Operator.GREATER_OR_EQUAL );
}
- public boolean evaluate(final Object object1,
+ public boolean evaluate(final Extractor extractor,
+ final Object object1,
+ final FieldValue object2) {
+ final BigInteger comp = (BigInteger) extractor.getValue( object1 );
+ return comp.compareTo( object2.getValue() ) >= 0;
+ }
+
+ public boolean evaluate(final FieldValue object1,
+ final Extractor extractor,
final Object object2) {
- return ((BigInteger) object1).compareTo((BigInteger)object2) >= 0;
+ final BigInteger comp = (BigInteger) object1.getValue();
+ return comp.compareTo( extractor.getValue( object2 ) ) >= 0;
}
+ public boolean evaluateCachedRight(VariableContextEntry context,
+ Object left) {
+ final BigInteger comp = (BigInteger) context.declaration.getExtractor().getValue( left );
+ return comp.compareTo( ((ObjectVariableContextEntry) context).right ) >= 0;
+ }
+
+ public boolean evaluateCachedLeft(VariableContextEntry context,
+ Object right) {
+ final BigInteger comp = (BigInteger) ((ObjectVariableContextEntry) context).left;
+ return comp.compareTo( context.extractor.getValue( right ) ) >= 0;
+ }
+
public String toString() {
return "BigInteger >=";
}
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 2006-10-18 22:06:58 UTC (rev 6902)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/BooleanFactory.java 2006-10-18 22:13:06 UTC (rev 6903)
@@ -18,38 +18,39 @@
import org.drools.base.BaseEvaluator;
import org.drools.base.ValueType;
-import org.drools.base.evaluators.ShortFactory.ShortEqualEvaluator;
-import org.drools.base.evaluators.ShortFactory.ShortGreaterEvaluator;
-import org.drools.base.evaluators.ShortFactory.ShortGreaterOrEqualEvaluator;
-import org.drools.base.evaluators.ShortFactory.ShortLessEvaluator;
-import org.drools.base.evaluators.ShortFactory.ShortLessOrEqualEvaluator;
-import org.drools.base.evaluators.ShortFactory.ShortNotEqualEvaluator;
+import org.drools.rule.VariableConstraint.BooleanVariableContextEntry;
+import org.drools.rule.VariableConstraint.VariableContextEntry;
import org.drools.spi.Evaluator;
+import org.drools.spi.Extractor;
+import org.drools.spi.FieldValue;
-public class BooleanFactory implements EvaluatorFactory {
+public class BooleanFactory
+ implements
+ EvaluatorFactory {
+
+ private static final long serialVersionUID = -1463529133869380215L;
private static EvaluatorFactory INSTANCE = new BooleanFactory();
-
+
private BooleanFactory() {
-
+
}
-
+
public static EvaluatorFactory getInstance() {
if ( INSTANCE == null ) {
INSTANCE = new BooleanFactory();
}
return INSTANCE;
}
-
+
public Evaluator getEvaluator(final Operator operator) {
if ( operator == Operator.EQUAL ) {
return BooleanEqualEvaluator.INSTANCE;
} else if ( operator == Operator.NOT_EQUAL ) {
return BooleanNotEqualEvaluator.INSTANCE;
- } else {
+ } else {
throw new RuntimeException( "Operator '" + operator + "' does not exist for BooleanEvaluator" );
- }
+ }
}
-
static class BooleanEqualEvaluator extends BaseEvaluator {
/**
@@ -63,14 +64,28 @@
Operator.EQUAL );
}
- public boolean evaluate(final Object object1,
+ public boolean evaluate(final Extractor extractor,
+ final Object object1,
+ final FieldValue object2) {
+ return extractor.getBooleanValue( object1 ) == object2.getBooleanValue();
+ }
+
+ public boolean evaluate(final FieldValue object1,
+ final Extractor extractor,
final Object object2) {
- if ( object1 == null ) {
- return object2 == null;
- }
- return ((Boolean) object1).equals( object2 );
+ return extractor.getBooleanValue( object2 ) == object1.getBooleanValue();
}
+ public boolean evaluateCachedRight(VariableContextEntry context,
+ Object left) {
+ return context.declaration.getExtractor().getBooleanValue( left ) == ((BooleanVariableContextEntry) context).right;
+ }
+
+ public boolean evaluateCachedLeft(VariableContextEntry context,
+ Object object2) {
+ return context.extractor.getBooleanValue( object2 ) == ((BooleanVariableContextEntry) context).left;
+ }
+
public String toString() {
return "Boolean ==";
}
@@ -88,14 +103,28 @@
Operator.NOT_EQUAL );
}
- public boolean evaluate(final Object object1,
+ public boolean evaluate(final Extractor extractor,
+ final Object object1,
+ final FieldValue object2) {
+ return extractor.getBooleanValue( object1 ) != object2.getBooleanValue();
+ }
+
+ public boolean evaluate(final FieldValue object1,
+ final Extractor extractor,
final Object object2) {
- if ( object1 == null ) {
- return object2 != null;
- }
- return !((Boolean) object1).equals( object2 );
+ return extractor.getBooleanValue( object2 ) != object1.getBooleanValue();
}
+ public boolean evaluateCachedRight(VariableContextEntry context,
+ Object left) {
+ return context.declaration.getExtractor().getBooleanValue( left ) != ((BooleanVariableContextEntry) context).right;
+ }
+
+ public boolean evaluateCachedLeft(VariableContextEntry context,
+ Object object2) {
+ return context.extractor.getBooleanValue( object2 ) != ((BooleanVariableContextEntry) context).left;
+ }
+
public String toString() {
return "Boolean !=";
}
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 2006-10-18 22:06:58 UTC (rev 6902)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/ByteFactory.java 2006-10-18 22:13:06 UTC (rev 6903)
@@ -18,21 +18,23 @@
import org.drools.base.BaseEvaluator;
import org.drools.base.ValueType;
-import org.drools.base.evaluators.ShortFactory.ShortEqualEvaluator;
-import org.drools.base.evaluators.ShortFactory.ShortGreaterEvaluator;
-import org.drools.base.evaluators.ShortFactory.ShortGreaterOrEqualEvaluator;
-import org.drools.base.evaluators.ShortFactory.ShortLessEvaluator;
-import org.drools.base.evaluators.ShortFactory.ShortLessOrEqualEvaluator;
-import org.drools.base.evaluators.ShortFactory.ShortNotEqualEvaluator;
+import org.drools.rule.VariableConstraint.LongVariableContextEntry;
+import org.drools.rule.VariableConstraint.VariableContextEntry;
import org.drools.spi.Evaluator;
+import org.drools.spi.Extractor;
+import org.drools.spi.FieldValue;
-public class ByteFactory implements EvaluatorFactory {
- private static EvaluatorFactory INSTANCE = new ByteFactory();
-
+public class ByteFactory
+ implements
+ EvaluatorFactory {
+
+ private static final long serialVersionUID = -2213953461197502182L;
+ private static EvaluatorFactory INSTANCE = new ByteFactory();
+
private ByteFactory() {
-
+
}
-
+
public static EvaluatorFactory getInstance() {
if ( INSTANCE == null ) {
INSTANCE = new ByteFactory();
@@ -53,12 +55,11 @@
return ByteGreaterEvaluator.INSTANCE;
} else if ( operator == Operator.GREATER_OR_EQUAL ) {
return ByteGreaterOrEqualEvaluator.INSTANCE;
- } else {
+ } else {
throw new RuntimeException( "Operator '" + operator + "' does not exist for ByteEvaluator" );
- }
+ }
}
-
static class ByteEqualEvaluator extends BaseEvaluator {
/**
*
@@ -71,14 +72,28 @@
Operator.EQUAL );
}
- public boolean evaluate(final Object object1,
+ public boolean evaluate(final Extractor extractor,
+ final Object object1,
+ final FieldValue object2) {
+ return extractor.getByteValue( object1 ) == object2.getByteValue();
+ }
+
+ public boolean evaluate(final FieldValue object1,
+ final Extractor extractor,
final Object object2) {
- if ( object1 == null ) {
- return object2 == null;
- }
- return ((Byte) object1).equals( object2 );
+ return object1.getByteValue() == extractor.getByteValue( object2 );
}
+ public boolean evaluateCachedRight(VariableContextEntry context,
+ Object left) {
+ return context.declaration.getExtractor().getByteValue( left ) == ((LongVariableContextEntry) context).right;
+ }
+
+ public boolean evaluateCachedLeft(VariableContextEntry context,
+ Object right) {
+ return ((LongVariableContextEntry) context).left == context.extractor.getByteValue( right );
+ }
+
public String toString() {
return "Byte ==";
}
@@ -96,14 +111,28 @@
Operator.NOT_EQUAL );
}
- public boolean evaluate(final Object object1,
+ public boolean evaluate(final Extractor extractor,
+ final Object object1,
+ final FieldValue object2) {
+ return extractor.getByteValue( object1 ) != object2.getByteValue();
+ }
+
+ public boolean evaluate(final FieldValue object1,
+ final Extractor extractor,
final Object object2) {
- if ( object1 == null ) {
- return object2 != null;
- }
- return !((Byte) object1).equals( object2 );
+ return object1.getByteValue() != extractor.getByteValue( object2 );
}
+ public boolean evaluateCachedRight(VariableContextEntry context,
+ Object left) {
+ return context.declaration.getExtractor().getByteValue( left ) != ((LongVariableContextEntry) context).right;
+ }
+
+ public boolean evaluateCachedLeft(VariableContextEntry context,
+ Object right) {
+ return ((LongVariableContextEntry) context).left != context.extractor.getByteValue( right );
+ }
+
public String toString() {
return "Byte !=";
}
@@ -121,11 +150,28 @@
Operator.LESS );
}
- public boolean evaluate(final Object object1,
+ public boolean evaluate(final Extractor extractor,
+ final Object object1,
+ final FieldValue object2) {
+ return extractor.getByteValue( object1 ) < object2.getByteValue();
+ }
+
+ public boolean evaluate(final FieldValue object1,
+ final Extractor extractor,
final Object object2) {
- return ((Byte) object1).byteValue() < ((Byte) object2).byteValue();
+ return object1.getByteValue() < extractor.getByteValue( object2 );
}
+ public boolean evaluateCachedRight(VariableContextEntry context,
+ Object left) {
+ return context.declaration.getExtractor().getByteValue( left ) < ((LongVariableContextEntry) context).right;
+ }
+
+ public boolean evaluateCachedLeft(VariableContextEntry context,
+ Object right) {
+ return ((LongVariableContextEntry) context).left < context.extractor.getByteValue( right );
+ }
+
public String toString() {
return "Byte <";
}
@@ -143,11 +189,28 @@
Operator.LESS_OR_EQUAL );
}
- public boolean evaluate(final Object object1,
+ public boolean evaluate(final Extractor extractor,
+ final Object object1,
+ final FieldValue object2) {
+ return extractor.getByteValue( object1 ) <= object2.getByteValue();
+ }
+
+ public boolean evaluate(final FieldValue object1,
+ final Extractor extractor,
final Object object2) {
- return ((Byte) object1).byteValue() <= ((Byte) object2).byteValue();
+ return object1.getByteValue() <= extractor.getByteValue( object2 );
}
+ public boolean evaluateCachedRight(VariableContextEntry context,
+ Object left) {
+ return context.declaration.getExtractor().getByteValue( left ) <= ((LongVariableContextEntry) context).right;
+ }
+
+ public boolean evaluateCachedLeft(VariableContextEntry context,
+ Object right) {
+ return ((LongVariableContextEntry) context).left <= context.extractor.getByteValue( right );
+ }
+
public String toString() {
return "Byte <=";
}
@@ -165,11 +228,28 @@
Operator.GREATER );
}
- public boolean evaluate(final Object object1,
+ public boolean evaluate(final Extractor extractor,
+ final Object object1,
+ final FieldValue object2) {
+ return extractor.getByteValue( object1 ) > object2.getByteValue();
+ }
+
+ public boolean evaluate(final FieldValue object1,
+ final Extractor extractor,
final Object object2) {
- return ((Byte) object1).byteValue() > ((Byte) object2).byteValue();
+ return object1.getByteValue() > extractor.getByteValue( object2 );
}
+ public boolean evaluateCachedRight(VariableContextEntry context,
+ Object left) {
+ return context.declaration.getExtractor().getByteValue( left ) > ((LongVariableContextEntry) context).right;
+ }
+
+ public boolean evaluateCachedLeft(VariableContextEntry context,
+ Object right) {
+ return ((LongVariableContextEntry) context).left > context.extractor.getByteValue( right );
+ }
+
public String toString() {
return "Byte >";
}
@@ -187,11 +267,28 @@
Operator.GREATER_OR_EQUAL );
}
- public boolean evaluate(final Object object1,
+ public boolean evaluate(final Extractor extractor,
+ final Object object1,
+ final FieldValue object2) {
+ return extractor.getByteValue( object1 ) >= object2.getByteValue();
+ }
+
+ public boolean evaluate(final FieldValue object1,
+ final Extractor extractor,
final Object object2) {
- return ((Byte) object1).byteValue() >= ((Byte) object2).byteValue();
+ return object1.getByteValue() >= extractor.getByteValue( object2 );
}
+ public boolean evaluateCachedRight(VariableContextEntry context,
+ Object left) {
+ return context.declaration.getExtractor().getByteValue( left ) >= ((LongVariableContextEntry) context).right;
+ }
+
+ public boolean evaluateCachedLeft(VariableContextEntry context,
+ Object right) {
+ return ((LongVariableContextEntry) context).left >= context.extractor.getByteValue( right );
+ }
+
public String toString() {
return "Byte >=";
}
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 2006-10-18 22:06:58 UTC (rev 6902)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/CharacterFactory.java 2006-10-18 22:13:06 UTC (rev 6903)
@@ -18,21 +18,23 @@
import org.drools.base.BaseEvaluator;
import org.drools.base.ValueType;
-import org.drools.base.evaluators.ShortFactory.ShortEqualEvaluator;
-import org.drools.base.evaluators.ShortFactory.ShortGreaterEvaluator;
-import org.drools.base.evaluators.ShortFactory.ShortGreaterOrEqualEvaluator;
-import org.drools.base.evaluators.ShortFactory.ShortLessEvaluator;
-import org.drools.base.evaluators.ShortFactory.ShortLessOrEqualEvaluator;
-import org.drools.base.evaluators.ShortFactory.ShortNotEqualEvaluator;
+import org.drools.rule.VariableConstraint.LongVariableContextEntry;
+import org.drools.rule.VariableConstraint.VariableContextEntry;
import org.drools.spi.Evaluator;
+import org.drools.spi.Extractor;
+import org.drools.spi.FieldValue;
-public class CharacterFactory implements EvaluatorFactory {
- private static EvaluatorFactory INSTANCE = new CharacterFactory();
-
+public class CharacterFactory
+ implements
+ EvaluatorFactory {
+
+ private static final long serialVersionUID = -8006570416583057447L;
+ private static EvaluatorFactory INSTANCE = new CharacterFactory();
+
private CharacterFactory() {
-
+
}
-
+
public static EvaluatorFactory getInstance() {
if ( INSTANCE == null ) {
INSTANCE = new CharacterFactory();
@@ -53,12 +55,11 @@
return CharacterGreaterEvaluator.INSTANCE;
} else if ( operator == Operator.GREATER_OR_EQUAL ) {
return CharacterGreaterOrEqualEvaluator.INSTANCE;
- } else {
+ } else {
throw new RuntimeException( "Operator '" + operator + "' does not exist for CharacterEvaluator" );
- }
+ }
}
-
static class CharacterEqualEvaluator extends BaseEvaluator {
/**
*
@@ -71,14 +72,28 @@
Operator.EQUAL );
}
- public boolean evaluate(final Object object1,
+ public boolean evaluate(final Extractor extractor,
+ final Object object1,
+ final FieldValue object2) {
+ return extractor.getCharValue( object1 ) == object2.getCharValue();
+ }
+
+ public boolean evaluate(final FieldValue object1,
+ final Extractor extractor,
final Object object2) {
- if ( object1 == null ) {
- return object2 == null;
- }
- return ((Character) object1).equals( object2 );
+ return object1.getCharValue() == extractor.getCharValue( object2 );
}
+ public boolean evaluateCachedRight(VariableContextEntry context,
+ Object left) {
+ return context.declaration.getExtractor().getCharValue( left ) == ((LongVariableContextEntry) context).right;
+ }
+
+ public boolean evaluateCachedLeft(VariableContextEntry context,
+ Object right) {
+ return ((LongVariableContextEntry) context).left == context.extractor.getCharValue( right );
+ }
+
public String toString() {
return "Character ==";
}
@@ -96,14 +111,28 @@
Operator.NOT_EQUAL );
}
- public boolean evaluate(final Object object1,
+ public boolean evaluate(final Extractor extractor,
+ final Object object1,
+ final FieldValue object2) {
+ return extractor.getCharValue( object1 ) != object2.getCharValue();
+ }
+
+ public boolean evaluate(final FieldValue object1,
+ final Extractor extractor,
final Object object2) {
- if ( object1 == null ) {
- return object2 != null;
- }
- return !((Character) object1).equals( object2 );
+ return object1.getCharValue() != extractor.getCharValue( object2 );
}
+ public boolean evaluateCachedRight(VariableContextEntry context,
+ Object left) {
+ return context.declaration.getExtractor().getCharValue( left ) != ((LongVariableContextEntry) context).right;
+ }
+
+ public boolean evaluateCachedLeft(VariableContextEntry context,
+ Object right) {
+ return ((LongVariableContextEntry) context).left != context.extractor.getCharValue( right );
+ }
+
public String toString() {
return "Character !=";
}
@@ -121,11 +150,28 @@
Operator.LESS );
}
- public boolean evaluate(final Object object1,
+ public boolean evaluate(final Extractor extractor,
+ final Object object1,
+ final FieldValue object2) {
+ return extractor.getCharValue( object1 ) < object2.getCharValue();
+ }
+
+ public boolean evaluate(final FieldValue object1,
+ final Extractor extractor,
final Object object2) {
- return ((Character) object1).charValue() < ((Character) object2).charValue();
+ return object1.getCharValue() < extractor.getCharValue( object2 );
}
+ public boolean evaluateCachedRight(VariableContextEntry context,
+ Object left) {
+ return context.declaration.getExtractor().getCharValue( left ) < ((LongVariableContextEntry) context).right;
+ }
+
+ public boolean evaluateCachedLeft(VariableContextEntry context,
+ Object right) {
+ return ((LongVariableContextEntry) context).left < context.extractor.getCharValue( right );
+ }
+
public String toString() {
return "Character <";
}
@@ -143,11 +189,28 @@
Operator.LESS_OR_EQUAL );
}
- public boolean evaluate(final Object object1,
+ public boolean evaluate(final Extractor extractor,
+ final Object object1,
+ final FieldValue object2) {
+ return extractor.getCharValue( object1 ) <= object2.getCharValue();
+ }
+
+ public boolean evaluate(final FieldValue object1,
+ final Extractor extractor,
final Object object2) {
- return ((Character) object1).charValue() <= ((Character) object2).charValue();
+ return object1.getCharValue() <= extractor.getCharValue( object2 );
}
+ public boolean evaluateCachedRight(VariableContextEntry context,
+ Object left) {
+ return context.declaration.getExtractor().getCharValue( left ) <= ((LongVariableContextEntry) context).right;
+ }
+
+ public boolean evaluateCachedLeft(VariableContextEntry context,
+ Object right) {
+ return ((LongVariableContextEntry) context).left <= context.extractor.getCharValue( right );
+ }
+
public String toString() {
return "Character <=";
}
@@ -165,11 +228,28 @@
Operator.GREATER );
}
- public boolean evaluate(final Object object1,
+ public boolean evaluate(final Extractor extractor,
+ final Object object1,
+ final FieldValue object2) {
+ return extractor.getCharValue( object1 ) > object2.getCharValue();
+ }
+
+ public boolean evaluate(final FieldValue object1,
+ final Extractor extractor,
final Object object2) {
- return ((Character) object1).charValue() > ((Character) object2).charValue();
+ return object1.getCharValue() > extractor.getCharValue( object2 );
}
+ public boolean evaluateCachedRight(VariableContextEntry context,
+ Object left) {
+ return context.declaration.getExtractor().getCharValue( left ) > ((LongVariableContextEntry) context).right;
+ }
+
+ public boolean evaluateCachedLeft(VariableContextEntry context,
+ Object right) {
+ return ((LongVariableContextEntry) context).left > context.extractor.getCharValue( right );
+ }
+
public String toString() {
return "Character >";
}
@@ -187,11 +267,28 @@
Operator.GREATER_OR_EQUAL );
}
- public boolean evaluate(final Object object1,
+ public boolean evaluate(final Extractor extractor,
+ final Object object1,
+ final FieldValue object2) {
+ return extractor.getCharValue( object1 ) >= object2.getCharValue();
+ }
+
+ public boolean evaluate(final FieldValue object1,
+ final Extractor extractor,
final Object object2) {
- return ((Character) object1).charValue() >= ((Character) object2).charValue();
+ return object1.getCharValue() >= extractor.getCharValue( object2 );
}
+ public boolean evaluateCachedRight(VariableContextEntry context,
+ Object left) {
+ return context.declaration.getExtractor().getCharValue( left ) >= ((LongVariableContextEntry) context).right;
+ }
+
+ public boolean evaluateCachedLeft(VariableContextEntry context,
+ Object right) {
+ return ((LongVariableContextEntry) context).left >= context.extractor.getCharValue( right );
+ }
+
public String toString() {
return "Character >=";
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/DateFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/DateFactory.java 2006-10-18 22:06:58 UTC (rev 6902)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/DateFactory.java 2006-10-18 22:13:06 UTC (rev 6903)
@@ -22,7 +22,11 @@
import org.drools.base.BaseEvaluator;
import org.drools.base.ValueType;
+import org.drools.rule.VariableConstraint.ObjectVariableContextEntry;
+import org.drools.rule.VariableConstraint.VariableContextEntry;
import org.drools.spi.Evaluator;
+import org.drools.spi.Extractor;
+import org.drools.spi.FieldValue;
/**
* This will generate evaluators that handle dates.
@@ -40,6 +44,7 @@
implements
EvaluatorFactory {
+ private static final long serialVersionUID = -9190991797780589450L;
private static final String DEFAULT_FORMAT_MASK = "dd-MMM-yyyy";
private static final String DATE_FORMAT_MASK = getDateFormatMask();
@@ -86,23 +91,60 @@
Operator.EQUAL );
}
- public boolean evaluate(final Object object1,
+ public boolean evaluate(final Extractor extractor,
+ final Object object1,
+ final FieldValue object2) {
+ Date value1 = (Date) extractor.getValue( object1 );
+ Object value2 = object2.getValue();
+ if ( value1 == null ) {
+ return value2 == null;
+ }
+ if ( value2 == null ) {
+ return false;
+ }
+ return value1.compareTo( getRightDate( value2 ) ) == 0;
+ }
+
+ public boolean evaluate(final FieldValue object1,
+ final Extractor extractor,
final Object object2) {
- if ( object1 == null ) {
- return object2 == null;
+ Date value1 = (Date) object1.getValue();
+ Object value2 = extractor.getValue( object2 );
+ if ( value1 == null ) {
+ return value2 == null;
}
- if ( object2 == null ) {
+ if ( value2 == null ) {
return false;
}
- final Date left = (Date) object1;
+ return value1.compareTo( getRightDate( value2 ) ) == 0;
+ }
- if ( left.compareTo( getRightDate( object2 ) ) == 0 ) {
- return true;
- } else {
+ public boolean evaluateCachedRight(VariableContextEntry context,
+ Object left) {
+ Date value1 = (Date) context.declaration.getExtractor().getValue( left );
+ Object value2 = ((ObjectVariableContextEntry) context).right;
+ if ( value1 == null ) {
+ return value2 == null;
+ }
+ if ( value2 == null ) {
return false;
}
+ return value1.compareTo( getRightDate( value2 ) ) == 0;
}
+ public boolean evaluateCachedLeft(VariableContextEntry context,
+ Object right) {
+ Date value1 = (Date) ((ObjectVariableContextEntry) context).left;
+ Object value2 = context.extractor.getValue( right );
+ if ( value1 == null ) {
+ return value2 == null;
+ }
+ if ( value2 == null ) {
+ return false;
+ }
+ return value1.compareTo( getRightDate( value2 ) ) == 0;
+ }
+
public String toString() {
return "Date ==";
}
@@ -120,22 +162,60 @@
Operator.NOT_EQUAL );
}
- public boolean evaluate(final Object object1,
+ public boolean evaluate(final Extractor extractor,
+ final Object object1,
+ final FieldValue object2) {
+ Date value1 = (Date) extractor.getValue( object1 );
+ Object value2 = object2.getValue();
+ if ( value1 == null ) {
+ return value2 != null;
+ }
+ if ( value2 == null ) {
+ return true;
+ }
+ return value1.compareTo( getRightDate( value2 ) ) != 0;
+ }
+
+ public boolean evaluate(final FieldValue object1,
+ final Extractor extractor,
final Object object2) {
- if ( object1 == null ) {
- return object2 != null;
+ Date value1 = (Date) object1.getValue();
+ Object value2 = extractor.getValue( object2 );
+ if ( value1 == null ) {
+ return value2 != null;
}
- if ( object2 == null ) {
+ if ( value2 == null ) {
return true;
}
- final Date left = (Date) object1;
- if ( left.compareTo( getRightDate( object2 ) ) != 0 ) {
+ return value1.compareTo( getRightDate( value2 ) ) != 0;
+ }
+
+ public boolean evaluateCachedRight(VariableContextEntry context,
+ Object left) {
+ Date value1 = (Date) context.declaration.getExtractor().getValue( left );
+ Object value2 = ((ObjectVariableContextEntry) context).right;
+ if ( value1 == null ) {
+ return value2 != null;
+ }
+ if ( value2 == null ) {
return true;
- } else {
- return false;
}
+ return value1.compareTo( getRightDate( value2 ) ) != 0;
}
+ public boolean evaluateCachedLeft(VariableContextEntry context,
+ Object right) {
+ Date value1 = (Date) ((ObjectVariableContextEntry) context).left;
+ Object value2 = context.extractor.getValue( right );
+ if ( value1 == null ) {
+ return value2 != null;
+ }
+ if ( value2 == null ) {
+ return true;
+ }
+ return value1.compareTo( getRightDate( value2 ) ) != 0;
+ }
+
public String toString() {
return "Date !=";
}
@@ -153,16 +233,36 @@
Operator.LESS );
}
- public boolean evaluate(final Object object1,
+ public boolean evaluate(final Extractor extractor,
+ final Object object1,
+ final FieldValue object2) {
+ Date value1 = (Date) extractor.getValue( object1 );
+ Object value2 = object2.getValue();
+ return value1.compareTo( getRightDate( value2 ) ) < 0;
+ }
+
+ public boolean evaluate(final FieldValue object1,
+ final Extractor extractor,
final Object object2) {
- final Date left = (Date) object1;
- if ( left.compareTo( getRightDate( object2 ) ) < 0 ) {
- return true;
- } else {
- return false;
- }
+ Date value1 = (Date) object1.getValue();
+ Object value2 = extractor.getValue( object2 );
+ return value1.compareTo( getRightDate( value2 ) ) < 0;
}
+ public boolean evaluateCachedRight(VariableContextEntry context,
+ Object left) {
+ Date value1 = (Date) context.declaration.getExtractor().getValue( left );
+ Object value2 = ((ObjectVariableContextEntry) context).right;
+ return value1.compareTo( getRightDate( value2 ) ) < 0;
+ }
+
+ public boolean evaluateCachedLeft(VariableContextEntry context,
+ Object right) {
+ Date value1 = (Date) ((ObjectVariableContextEntry) context).left;
+ Object value2 = context.extractor.getValue( right );
+ return value1.compareTo( getRightDate( value2 ) ) < 0;
+ }
+
public String toString() {
return "Date <";
}
@@ -180,16 +280,36 @@
Operator.LESS_OR_EQUAL );
}
- public boolean evaluate(final Object object1,
+ public boolean evaluate(final Extractor extractor,
+ final Object object1,
+ final FieldValue object2) {
+ Date value1 = (Date) extractor.getValue( object1 );
+ Object value2 = object2.getValue();
+ return value1.compareTo( getRightDate( value2 ) ) <= 0;
+ }
+
+ public boolean evaluate(final FieldValue object1,
+ final Extractor extractor,
final Object object2) {
- final Date left = (Date) object1;
- if ( left.compareTo( getRightDate( object2 ) ) <= 0 ) {
- return true;
- } else {
- return false;
- }
+ Date value1 = (Date) object1.getValue();
+ Object value2 = extractor.getValue( object2 );
+ return value1.compareTo( getRightDate( value2 ) ) <= 0;
}
+ public boolean evaluateCachedRight(VariableContextEntry context,
+ Object left) {
+ Date value1 = (Date) context.declaration.getExtractor().getValue( left );
+ Object value2 = ((ObjectVariableContextEntry) context).right;
+ return value1.compareTo( getRightDate( value2 ) ) <= 0;
+ }
+
+ public boolean evaluateCachedLeft(VariableContextEntry context,
+ Object right) {
+ Date value1 = (Date) ((ObjectVariableContextEntry) context).left;
+ Object value2 = context.extractor.getValue( right );
+ return value1.compareTo( getRightDate( value2 ) ) <= 0;
+ }
+
public String toString() {
return "Date <=";
}
@@ -207,16 +327,36 @@
Operator.GREATER );
}
- public boolean evaluate(final Object object1,
+ public boolean evaluate(final Extractor extractor,
+ final Object object1,
+ final FieldValue object2) {
+ Date value1 = (Date) extractor.getValue( object1 );
+ Object value2 = object2.getValue();
+ return value1.compareTo( getRightDate( value2 ) ) > 0;
+ }
+
+ public boolean evaluate(final FieldValue object1,
+ final Extractor extractor,
final Object object2) {
- final Date left = (Date) object1;
- if ( left.compareTo( getRightDate( object2 ) ) > 0 ) {
- return true;
- } else {
- return false;
- }
+ Date value1 = (Date) object1.getValue();
+ Object value2 = extractor.getValue( object2 );
+ return value1.compareTo( getRightDate( value2 ) ) > 0;
}
+ public boolean evaluateCachedRight(VariableContextEntry context,
+ Object left) {
+ Date value1 = (Date) context.declaration.getExtractor().getValue( left );
+ Object value2 = ((ObjectVariableContextEntry) context).right;
+ return value1.compareTo( getRightDate( value2 ) ) > 0;
+ }
+
+ public boolean evaluateCachedLeft(VariableContextEntry context,
+ Object right) {
+ Date value1 = (Date) ((ObjectVariableContextEntry) context).left;
+ Object value2 = context.extractor.getValue( right );
+ return value1.compareTo( getRightDate( value2 ) ) > 0;
+ }
+
public String toString() {
return "Date >";
}
@@ -234,16 +374,36 @@
Operator.GREATER_OR_EQUAL );
}
- public boolean evaluate(final Object object1,
+ public boolean evaluate(final Extractor extractor,
+ final Object object1,
+ final FieldValue object2) {
+ Date value1 = (Date) extractor.getValue( object1 );
+ Object value2 = object2.getValue();
+ return value1.compareTo( getRightDate( value2 ) ) >= 0;
+ }
+
+ public boolean evaluate(final FieldValue object1,
+ final Extractor extractor,
final Object object2) {
- final Date left = (Date) object1;
- if ( left.compareTo( getRightDate( object2 ) ) >= 0 ) {
- return true;
- } else {
- return false;
- }
+ Date value1 = (Date) object1.getValue();
+ Object value2 = extractor.getValue( object2 );
+ return value1.compareTo( getRightDate( value2 ) ) >= 0;
}
+ public boolean evaluateCachedRight(VariableContextEntry context,
+ Object left) {
+ Date value1 = (Date) context.declaration.getExtractor().getValue( left );
+ Object value2 = ((ObjectVariableContextEntry) context).right;
+ return value1.compareTo( getRightDate( value2 ) ) >= 0;
+ }
+
+ public boolean evaluateCachedLeft(VariableContextEntry context,
+ Object right) {
+ Date value1 = (Date) ((ObjectVariableContextEntry) context).left;
+ Object value2 = context.extractor.getValue( right );
+ return value1.compareTo( getRightDate( value2 ) ) >= 0;
+ }
+
public String toString() {
return "Date >=";
}
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 2006-10-18 22:06:58 UTC (rev 6902)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/DoubleFactory.java 2006-10-18 22:13:06 UTC (rev 6903)
@@ -18,15 +18,23 @@
import org.drools.base.BaseEvaluator;
import org.drools.base.ValueType;
+import org.drools.rule.VariableConstraint.DoubleVariableContextEntry;
+import org.drools.rule.VariableConstraint.VariableContextEntry;
import org.drools.spi.Evaluator;
+import org.drools.spi.Extractor;
+import org.drools.spi.FieldValue;
-public class DoubleFactory implements EvaluatorFactory {
- private static EvaluatorFactory INSTANCE = new DoubleFactory();
-
+public class DoubleFactory
+ implements
+ EvaluatorFactory {
+
+ private static final long serialVersionUID = -3853062740291829023L;
+ private static EvaluatorFactory INSTANCE = new DoubleFactory();
+
private DoubleFactory() {
-
+
}
-
+
public static EvaluatorFactory getInstance() {
if ( INSTANCE == null ) {
INSTANCE = new DoubleFactory();
@@ -47,7 +55,7 @@
return DoubleGreaterEvaluator.INSTANCE;
} else if ( operator == Operator.GREATER_OR_EQUAL ) {
return DoubleGreaterOrEqualEvaluator.INSTANCE;
- } else {
+ } else {
throw new RuntimeException( "Operator '" + operator + "' does not exist for DoubleEvaluator" );
}
}
@@ -64,14 +72,32 @@
Operator.EQUAL );
}
- public boolean evaluate(final Object object1,
+ public boolean evaluate(final Extractor extractor,
+ final Object object1,
+ final FieldValue object2) {
+ // TODO: we are not handling delta right now... maybe we should
+ return extractor.getDoubleValue( object1 ) == object2.getDoubleValue();
+ }
+
+ public boolean evaluate(final FieldValue object1,
+ final Extractor extractor,
final Object object2) {
- if ( object1 == null ) {
- return object2 == null;
- }
- return ((Number) object1).equals( object2 );
+ // TODO: we are not handling delta right now... maybe we should
+ return object1.getDoubleValue() == extractor.getDoubleValue( object2 );
}
+ public boolean evaluateCachedRight(VariableContextEntry context,
+ Object left) {
+ // TODO: we are not handling delta right now... maybe we should
+ return context.declaration.getExtractor().getDoubleValue( left ) == ((DoubleVariableContextEntry) context).right;
+ }
+
+ public boolean evaluateCachedLeft(VariableContextEntry context,
+ Object right) {
+ // TODO: we are not handling delta right now... maybe we should
+ return ((DoubleVariableContextEntry) context).left == context.extractor.getDoubleValue( right );
+ }
+
public String toString() {
return "Double ==";
}
@@ -89,14 +115,32 @@
Operator.NOT_EQUAL );
}
- public boolean evaluate(final Object object1,
+ public boolean evaluate(final Extractor extractor,
+ final Object object1,
+ final FieldValue object2) {
+ // TODO: we are not handling delta right now... maybe we should
+ return extractor.getDoubleValue( object1 ) != object2.getDoubleValue();
+ }
+
+ public boolean evaluate(final FieldValue object1,
+ final Extractor extractor,
final Object object2) {
- if ( object1 == null ) {
- return object2 != null;
- }
- return !((Number) object1).equals( object2 );
+ // TODO: we are not handling delta right now... maybe we should
+ return object1.getDoubleValue() != extractor.getDoubleValue( object2 );
}
+ public boolean evaluateCachedRight(VariableContextEntry context,
+ Object left) {
+ // TODO: we are not handling delta right now... maybe we should
+ return context.declaration.getExtractor().getDoubleValue( left ) != ((DoubleVariableContextEntry) context).right;
+ }
+
+ public boolean evaluateCachedLeft(VariableContextEntry context,
+ Object right) {
+ // TODO: we are not handling delta right now... maybe we should
+ return ((DoubleVariableContextEntry) context).left != context.extractor.getDoubleValue( right );
+ }
+
public String toString() {
return "Double !=";
}
@@ -114,11 +158,32 @@
Operator.LESS );
}
- public boolean evaluate(final Object object1,
+ public boolean evaluate(final Extractor extractor,
+ final Object object1,
+ final FieldValue object2) {
+ // TODO: we are not handling delta right now... maybe we should
+ return extractor.getDoubleValue( object1 ) < object2.getDoubleValue();
+ }
+
+ public boolean evaluate(final FieldValue object1,
+ final Extractor extractor,
final Object object2) {
- return ((Number) object1).doubleValue() < ((Number) object2).doubleValue();
+ // TODO: we are not handling delta right now... maybe we should
+ return object1.getDoubleValue() < extractor.getDoubleValue( object2 );
}
+ public boolean evaluateCachedRight(VariableContextEntry context,
+ Object left) {
+ // TODO: we are not handling delta right now... maybe we should
+ return context.declaration.getExtractor().getDoubleValue( left ) < ((DoubleVariableContextEntry) context).right;
+ }
+
+ public boolean evaluateCachedLeft(VariableContextEntry context,
+ Object right) {
+ // TODO: we are not handling delta right now... maybe we should
+ return ((DoubleVariableContextEntry) context).left < context.extractor.getDoubleValue( right );
+ }
+
public String toString() {
return "Double <";
}
@@ -136,11 +201,32 @@
Operator.LESS_OR_EQUAL );
}
- public boolean evaluate(final Object object1,
+ public boolean evaluate(final Extractor extractor,
+ final Object object1,
+ final FieldValue object2) {
+ // TODO: we are not handling delta right now... maybe we should
+ return extractor.getDoubleValue( object1 ) <= object2.getDoubleValue();
+ }
+
+ public boolean evaluate(final FieldValue object1,
+ final Extractor extractor,
final Object object2) {
- return ((Number) object1).doubleValue() <= ((Number) object2).doubleValue();
+ // TODO: we are not handling delta right now... maybe we should
+ return object1.getDoubleValue() <= extractor.getDoubleValue( object2 );
}
+ public boolean evaluateCachedRight(VariableContextEntry context,
+ Object left) {
+ // TODO: we are not handling delta right now... maybe we should
+ return context.declaration.getExtractor().getDoubleValue( left ) <= ((DoubleVariableContextEntry) context).right;
+ }
+
+ public boolean evaluateCachedLeft(VariableContextEntry context,
+ Object right) {
+ // TODO: we are not handling delta right now... maybe we should
+ return ((DoubleVariableContextEntry) context).left <= context.extractor.getDoubleValue( right );
+ }
+
public String toString() {
return "Double <=";
}
@@ -158,11 +244,32 @@
Operator.GREATER );
}
- public boolean evaluate(final Object object1,
+ public boolean evaluate(final Extractor extractor,
+ final Object object1,
+ final FieldValue object2) {
+ // TODO: we are not handling delta right now... maybe we should
+ return extractor.getDoubleValue( object1 ) > object2.getDoubleValue();
+ }
+
+ public boolean evaluate(final FieldValue object1,
+ final Extractor extractor,
final Object object2) {
- return ((Number) object1).doubleValue() > ((Number) object2).doubleValue();
+ // TODO: we are not handling delta right now... maybe we should
+ return object1.getDoubleValue() > extractor.getDoubleValue( object2 );
}
+ public boolean evaluateCachedRight(VariableContextEntry context,
+ Object left) {
+ // TODO: we are not handling delta right now... maybe we should
+ return context.declaration.getExtractor().getDoubleValue( left ) > ((DoubleVariableContextEntry) context).right;
+ }
+
+ public boolean evaluateCachedLeft(VariableContextEntry context,
+ Object right) {
+ // TODO: we are not handling delta right now... maybe we should
+ return ((DoubleVariableContextEntry) context).left > context.extractor.getDoubleValue( right );
+ }
+
public String toString() {
return "Double >";
}
@@ -180,11 +287,32 @@
Operator.GREATER_OR_EQUAL );
}
- public boolean evaluate(final Object object1,
+ public boolean evaluate(final Extractor extractor,
+ final Object object1,
+ final FieldValue object2) {
+ // TODO: we are not handling delta right now... maybe we should
+ return extractor.getDoubleValue( object1 ) >= object2.getDoubleValue();
+ }
+
+ public boolean evaluate(final FieldValue object1,
+ final Extractor extractor,
final Object object2) {
- return ((Number) object1).doubleValue() >= ((Number) object2).doubleValue();
+ // TODO: we are not handling delta right now... maybe we should
+ return object1.getDoubleValue() >= extractor.getDoubleValue( object2 );
}
+ public boolean evaluateCachedRight(VariableContextEntry context,
+ Object left) {
+ // TODO: we are not handling delta right now... maybe we should
+ return context.declaration.getExtractor().getDoubleValue( left ) >= ((DoubleVariableContextEntry) context).right;
+ }
+
+ public boolean evaluateCachedLeft(VariableContextEntry context,
+ Object right) {
+ // TODO: we are not handling delta right now... maybe we should
+ return ((DoubleVariableContextEntry) context).left >= context.extractor.getDoubleValue( right );
+ }
+
public String toString() {
return "Double >=";
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/FactTemplateFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/FactTemplateFactory.java 2006-10-18 22:06:58 UTC (rev 6902)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/FactTemplateFactory.java 2006-10-18 22:13:06 UTC (rev 6903)
@@ -18,13 +18,11 @@
import org.drools.base.BaseEvaluator;
import org.drools.base.ValueType;
-import org.drools.base.evaluators.DoubleFactory.DoubleEqualEvaluator;
-import org.drools.base.evaluators.DoubleFactory.DoubleGreaterEvaluator;
-import org.drools.base.evaluators.DoubleFactory.DoubleGreaterOrEqualEvaluator;
-import org.drools.base.evaluators.DoubleFactory.DoubleLessEvaluator;
-import org.drools.base.evaluators.DoubleFactory.DoubleLessOrEqualEvaluator;
-import org.drools.base.evaluators.DoubleFactory.DoubleNotEqualEvaluator;
+import org.drools.rule.VariableConstraint.ObjectVariableContextEntry;
+import org.drools.rule.VariableConstraint.VariableContextEntry;
import org.drools.spi.Evaluator;
+import org.drools.spi.Extractor;
+import org.drools.spi.FieldValue;
/**
* This is the misc "bucket" evaluator factory for objects.
@@ -33,13 +31,17 @@
*
* @author Michael Neale
*/
-public class FactTemplateFactory implements EvaluatorFactory {
- private static EvaluatorFactory INSTANCE = new FactTemplateFactory();
-
+public class FactTemplateFactory
+ implements
+ EvaluatorFactory {
+
+ private static final long serialVersionUID = 1384322764502834134L;
+ private static EvaluatorFactory INSTANCE = new FactTemplateFactory();
+
private FactTemplateFactory() {
-
+
}
-
+
public static EvaluatorFactory getInstance() {
if ( INSTANCE == null ) {
INSTANCE = new FactTemplateFactory();
@@ -52,9 +54,9 @@
return FactTemplateEqualEvaluator.INSTANCE;
} else if ( operator == Operator.NOT_EQUAL ) {
return FactTemplateNotEqualEvaluator.INSTANCE;
- } else {
+ } else {
throw new RuntimeException( "Operator '" + operator + "' does not exist for FactTemplateEvaluator" );
- }
+ }
}
static class FactTemplateEqualEvaluator extends BaseEvaluator {
@@ -69,14 +71,46 @@
Operator.EQUAL );
}
- public boolean evaluate(final Object object1,
+ public boolean evaluate(final Extractor extractor,
+ final Object object1,
+ final FieldValue object2) {
+ Object value1 = extractor.getValue( object1 );
+ Object value2 = object2.getValue();
+ if ( value1 == null ) {
+ return value2 == null;
+ }
+ return value1.equals( value2 );
+ }
+
+ public boolean evaluate(final FieldValue object1,
+ final Extractor extractor,
final Object object2) {
- if ( object1 == null ) {
- return object2 == null;
+ Object value1 = object1.getValue();
+ Object value2 = extractor.getValue( object2 );
+ if ( value1 == null ) {
+ return value2 == null;
}
- return object1.equals( object2 );
+ return value1.equals( value2 );
}
+ public boolean evaluateCachedRight(VariableContextEntry context,
+ Object left) {
+ Object value = context.declaration.getExtractor().getValue( left );
+ if ( value == null ) {
+ return ((ObjectVariableContextEntry) context).right == null;
+ }
+ return value.equals( ((ObjectVariableContextEntry) context).right );
+ }
+
+ public boolean evaluateCachedLeft(VariableContextEntry context,
+ Object right) {
+ Object value = context.extractor.getValue( right );
+ if ( ((ObjectVariableContextEntry) context).left == null ) {
+ return value == null;
+ }
+ return ((ObjectVariableContextEntry) context).left.equals( value );
+ }
+
public String toString() {
return "FactTemplate ==";
}
@@ -94,15 +128,46 @@
Operator.NOT_EQUAL );
}
- public boolean evaluate(final Object object1,
+ public boolean evaluate(final Extractor extractor,
+ final Object object1,
+ final FieldValue object2) {
+ Object value1 = extractor.getValue( object1 );
+ Object value2 = object2.getValue();
+ if ( value1 == null ) {
+ return value2 != null;
+ }
+ return !value1.equals( value2 );
+ }
+
+ public boolean evaluate(final FieldValue object1,
+ final Extractor extractor,
final Object object2) {
- if ( object1 == null ) {
- return !(object2 == null);
+ Object value1 = object1.getValue();
+ Object value2 = extractor.getValue( object2 );
+ if ( value1 == null ) {
+ return value2 != null;
}
+ return !value1.equals( value2 );
+ }
- return !object1.equals( object2 );
+ public boolean evaluateCachedRight(VariableContextEntry context,
+ Object left) {
+ Object value = context.declaration.getExtractor().getValue( left );
+ if ( value == null ) {
+ return ((ObjectVariableContextEntry) context).right != null;
+ }
+ return !value.equals( ((ObjectVariableContextEntry) context).right );
}
+ public boolean evaluateCachedLeft(VariableContextEntry context,
+ Object right) {
+ Object value = context.extractor.getValue( right );
+ if ( ((ObjectVariableContextEntry) context).left == null ) {
+ return value != null;
+ }
+ return !((ObjectVariableContextEntry) context).left.equals( value );
+ }
+
public String toString() {
return "FactTemplate !=";
}
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 2006-10-18 22:06:58 UTC (rev 6902)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/FloatFactory.java 2006-10-18 22:13:06 UTC (rev 6903)
@@ -18,21 +18,23 @@
import org.drools.base.BaseEvaluator;
import org.drools.base.ValueType;
-import org.drools.base.evaluators.ShortFactory.ShortEqualEvaluator;
-import org.drools.base.evaluators.ShortFactory.ShortGreaterEvaluator;
-import org.drools.base.evaluators.ShortFactory.ShortGreaterOrEqualEvaluator;
-import org.drools.base.evaluators.ShortFactory.ShortLessEvaluator;
-import org.drools.base.evaluators.ShortFactory.ShortLessOrEqualEvaluator;
-import org.drools.base.evaluators.ShortFactory.ShortNotEqualEvaluator;
+import org.drools.rule.VariableConstraint.DoubleVariableContextEntry;
+import org.drools.rule.VariableConstraint.VariableContextEntry;
import org.drools.spi.Evaluator;
+import org.drools.spi.Extractor;
+import org.drools.spi.FieldValue;
-public class FloatFactory implements EvaluatorFactory {
- private static EvaluatorFactory INSTANCE = new FloatFactory();
-
+public class FloatFactory
+ implements
+ EvaluatorFactory {
+
+ private static final long serialVersionUID = -4254964760901343619L;
+ private static EvaluatorFactory INSTANCE = new FloatFactory();
+
private FloatFactory() {
-
+
}
-
+
public static EvaluatorFactory getInstance() {
if ( INSTANCE == null ) {
INSTANCE = new FloatFactory();
@@ -53,16 +55,13 @@
return FloatGreaterEvaluator.INSTANCE;
} else if ( operator == Operator.GREATER_OR_EQUAL ) {
return FloatGreaterOrEqualEvaluator.INSTANCE;
- } else {
+ } else {
throw new RuntimeException( "Operator '" + operator + "' does not exist for FloatEvaluator" );
- }
+ }
}
+ static class FloatEqualEvaluator extends BaseEvaluator {
- static class FloatEqualEvaluator extends BaseEvaluator {
- /**
- *
- */
private static final long serialVersionUID = 320;
public final static Evaluator INSTANCE = new FloatEqualEvaluator();
@@ -71,14 +70,32 @@
Operator.EQUAL );
}
- public boolean evaluate(final Object object1,
+ public boolean evaluate(final Extractor extractor,
+ final Object object1,
+ final FieldValue object2) {
+ // TODO: we are not handling delta right now... maybe we should
+ return extractor.getFloatValue( object1 ) == object2.getFloatValue();
+ }
+
+ public boolean evaluate(final FieldValue object1,
+ final Extractor extractor,
final Object object2) {
- if ( object1 == null ) {
- return object2 == null;
- }
- return ((Number) object1).equals( object2 );
+ // TODO: we are not handling delta right now... maybe we should
+ return object1.getFloatValue() == extractor.getFloatValue( object2 );
}
+ public boolean evaluateCachedRight(VariableContextEntry context,
+ Object left) {
+ // TODO: we are not handling delta right now... maybe we should
+ return context.declaration.getExtractor().getFloatValue( left ) == ((DoubleVariableContextEntry) context).right;
+ }
+
+ public boolean evaluateCachedLeft(VariableContextEntry context,
+ Object right) {
+ // TODO: we are not handling delta right now... maybe we should
+ return ((DoubleVariableContextEntry) context).left == context.extractor.getFloatValue( right );
+ }
+
public String toString() {
return "Float ==";
}
@@ -96,14 +113,32 @@
Operator.NOT_EQUAL );
}
- public boolean evaluate(final Object object1,
+ public boolean evaluate(final Extractor extractor,
+ final Object object1,
+ final FieldValue object2) {
+ // TODO: we are not handling delta right now... maybe we should
+ return extractor.getFloatValue( object1 ) != object2.getFloatValue();
+ }
+
+ public boolean evaluate(final FieldValue object1,
+ final Extractor extractor,
final Object object2) {
- if ( object1 == null ) {
- return object2 != null;
- }
- return !((Number) object1).equals( object2 );
+ // TODO: we are not handling delta right now... maybe we should
+ return object1.getFloatValue() != extractor.getFloatValue( object2 );
}
+ public boolean evaluateCachedRight(VariableContextEntry context,
+ Object left) {
+ // TODO: we are not handling delta right now... maybe we should
+ return context.declaration.getExtractor().getFloatValue( left ) != ((DoubleVariableContextEntry) context).right;
+ }
+
+ public boolean evaluateCachedLeft(VariableContextEntry context,
+ Object right) {
+ // TODO: we are not handling delta right now... maybe we should
+ return ((DoubleVariableContextEntry) context).left != context.extractor.getFloatValue( right );
+ }
+
public String toString() {
return "Float !=";
}
@@ -121,11 +156,32 @@
Operator.LESS );
}
- public boolean evaluate(final Object object1,
+ public boolean evaluate(final Extractor extractor,
+ final Object object1,
+ final FieldValue object2) {
+ // TODO: we are not handling delta right now... maybe we should
+ return extractor.getFloatValue( object1 ) < object2.getFloatValue();
+ }
+
+ public boolean evaluate(final FieldValue object1,
+ final Extractor extractor,
final Object object2) {
- return ((Number) object1).floatValue() < ((Number) object2).floatValue();
+ // TODO: we are not handling delta right now... maybe we should
+ return object1.getFloatValue() < extractor.getFloatValue( object2 );
}
+ public boolean evaluateCachedRight(VariableContextEntry context,
+ Object left) {
+ // TODO: we are not handling delta right now... maybe we should
+ return context.declaration.getExtractor().getFloatValue( left ) < ((DoubleVariableContextEntry) context).right;
+ }
+
+ public boolean evaluateCachedLeft(VariableContextEntry context,
+ Object right) {
+ // TODO: we are not handling delta right now... maybe we should
+ return ((DoubleVariableContextEntry) context).left < context.extractor.getFloatValue( right );
+ }
+
public String toString() {
return "Float <";
}
@@ -143,11 +199,32 @@
Operator.LESS_OR_EQUAL );
}
- public boolean evaluate(final Object object1,
+ public boolean evaluate(final Extractor extractor,
+ final Object object1,
+ final FieldValue object2) {
+ // TODO: we are not handling delta right now... maybe we should
+ return extractor.getFloatValue( object1 ) <= object2.getFloatValue();
+ }
+
+ public boolean evaluate(final FieldValue object1,
+ final Extractor extractor,
final Object object2) {
- return ((Number) object1).floatValue() <= ((Number) object2).floatValue();
+ // TODO: we are not handling delta right now... maybe we should
+ return object1.getFloatValue() <= extractor.getFloatValue( object2 );
}
+ public boolean evaluateCachedRight(VariableContextEntry context,
+ Object left) {
+ // TODO: we are not handling delta right now... maybe we should
+ return context.declaration.getExtractor().getFloatValue( left ) <= ((DoubleVariableContextEntry) context).right;
+ }
+
+ public boolean evaluateCachedLeft(VariableContextEntry context,
+ Object right) {
+ // TODO: we are not handling delta right now... maybe we should
+ return ((DoubleVariableContextEntry) context).left <= context.extractor.getFloatValue( right );
+ }
+
public String toString() {
return "Float <=";
}
@@ -165,11 +242,32 @@
Operator.GREATER );
}
- public boolean evaluate(final Object object1,
+ public boolean evaluate(final Extractor extractor,
+ final Object object1,
+ final FieldValue object2) {
+ // TODO: we are not handling delta right now... maybe we should
+ return extractor.getFloatValue( object1 ) > object2.getFloatValue();
+ }
+
+ public boolean evaluate(final FieldValue object1,
+ final Extractor extractor,
final Object object2) {
- return ((Number) object1).floatValue() > ((Number) object2).floatValue();
+ // TODO: we are not handling delta right now... maybe we should
+ return object1.getFloatValue() > extractor.getFloatValue( object2 );
}
+ public boolean evaluateCachedRight(VariableContextEntry context,
+ Object left) {
+ // TODO: we are not handling delta right now... maybe we should
+ return context.declaration.getExtractor().getFloatValue( left ) > ((DoubleVariableContextEntry) context).right;
+ }
+
+ public boolean evaluateCachedLeft(VariableContextEntry context,
+ Object right) {
+ // TODO: we are not handling delta right now... maybe we should
+ return ((DoubleVariableContextEntry) context).left > context.extractor.getFloatValue( right );
+ }
+
public String toString() {
return "Float >";
}
@@ -187,11 +285,32 @@
Operator.GREATER_OR_EQUAL );
}
- public boolean evaluate(final Object object1,
+ public boolean evaluate(final Extractor extractor,
+ final Object object1,
+ final FieldValue object2) {
+ // TODO: we are not handling delta right now... maybe we should
+ return extractor.getFloatValue( object1 ) >= object2.getFloatValue();
+ }
+
+ public boolean evaluate(final FieldValue object1,
+ final Extractor extractor,
final Object object2) {
- return ((Number) object1).floatValue() >= ((Number) object2).floatValue();
+ // TODO: we are not handling delta right now... maybe we should
+ return object1.getFloatValue() >= extractor.getFloatValue( object2 );
}
+ public boolean evaluateCachedRight(VariableContextEntry context,
+ Object left) {
+ // TODO: we are not handling delta right now... maybe we should
+ return context.declaration.getExtractor().getFloatValue( left ) >= ((DoubleVariableContextEntry) context).right;
+ }
+
+ public boolean evaluateCachedLeft(VariableContextEntry context,
+ Object right) {
+ // TODO: we are not handling delta right now... maybe we should
+ return ((DoubleVariableContextEntry) context).left >= context.extractor.getFloatValue( right );
+ }
+
public String toString() {
return "Float >=";
}
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 2006-10-18 22:06:58 UTC (rev 6902)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/IntegerFactory.java 2006-10-18 22:13:06 UTC (rev 6903)
@@ -18,21 +18,23 @@
import org.drools.base.BaseEvaluator;
import org.drools.base.ValueType;
-import org.drools.base.evaluators.ShortFactory.ShortEqualEvaluator;
-import org.drools.base.evaluators.ShortFactory.ShortGreaterEvaluator;
-import org.drools.base.evaluators.ShortFactory.ShortGreaterOrEqualEvaluator;
-import org.drools.base.evaluators.ShortFactory.ShortLessEvaluator;
-import org.drools.base.evaluators.ShortFactory.ShortLessOrEqualEvaluator;
-import org.drools.base.evaluators.ShortFactory.ShortNotEqualEvaluator;
+import org.drools.rule.VariableConstraint.LongVariableContextEntry;
+import org.drools.rule.VariableConstraint.VariableContextEntry;
import org.drools.spi.Evaluator;
+import org.drools.spi.Extractor;
+import org.drools.spi.FieldValue;
-public class IntegerFactory implements EvaluatorFactory {
+public class IntegerFactory
+ implements
+ EvaluatorFactory {
+
+ private static final long serialVersionUID = -6863552870087722275L;
private static EvaluatorFactory INSTANCE = new IntegerFactory();
-
+
private IntegerFactory() {
-
+
}
-
+
public static EvaluatorFactory getInstance() {
if ( INSTANCE == null ) {
INSTANCE = new IntegerFactory();
@@ -53,9 +55,9 @@
return IntegerGreaterEvaluator.INSTANCE;
} else if ( operator == Operator.GREATER_OR_EQUAL ) {
return IntegerGreaterOrEqualEvaluator.INSTANCE;
- } else {
+ } else {
throw new RuntimeException( "Operator '" + operator + "' does not exist for IntegerEvaluator" );
- }
+ }
}
static class IntegerEqualEvaluator extends BaseEvaluator {
@@ -70,17 +72,32 @@
Operator.EQUAL );
}
- public boolean evaluate(final Object object1,
- final Object object2) {
- if ( object1 == null ) {
- return object2 == null;
- }
- return object1.equals( object2 );
+ public boolean evaluate(final Extractor extractor,
+ final Object object1,
+ final FieldValue object2) {
+ return extractor.getIntValue( object1 ) == object2.getIntValue();
}
+ public boolean evaluate(final FieldValue object1,
+ final Extractor extractor,
+ final Object object2) {
+ return extractor.getIntValue( object2 ) == object1.getIntValue();
+ }
+
+ public boolean evaluateCachedRight(VariableContextEntry context,
+ Object left) {
+ return context.declaration.getExtractor().getIntValue( left ) == ((LongVariableContextEntry) context).right;
+ }
+
+ public boolean evaluateCachedLeft(VariableContextEntry context,
+ Object object2) {
+ return context.extractor.getIntValue( object2 ) == ((LongVariableContextEntry) context).left;
+ }
+
public String toString() {
return "Integer ==";
}
+
}
static class IntegerNotEqualEvaluator extends BaseEvaluator {
@@ -95,14 +112,28 @@
Operator.NOT_EQUAL );
}
- public boolean evaluate(final Object object1,
- final Object object2) {
- if ( object1 == null ) {
- return (object2 != null);
- }
- return !object1.equals( object2 );
+ public boolean evaluate(final Extractor extractor,
+ final Object object1,
+ final FieldValue object2) {
+ return extractor.getIntValue( object1 ) != object2.getIntValue();
}
+ public boolean evaluate(final FieldValue object1,
+ final Extractor extractor,
+ final Object object2) {
+ return extractor.getIntValue( object2 ) != object1.getIntValue();
+ }
+
+ public boolean evaluateCachedRight(VariableContextEntry context,
+ Object left) {
+ return context.declaration.getExtractor().getIntValue( left ) != ((LongVariableContextEntry) context).right;
+ }
+
+ public boolean evaluateCachedLeft(VariableContextEntry context,
+ Object object2) {
+ return context.extractor.getIntValue( object2 ) != ((LongVariableContextEntry) context).left;
+ }
+
public String toString() {
return "Integer !=";
}
@@ -120,11 +151,28 @@
Operator.LESS );
}
- public boolean evaluate(final Object object1,
+ public boolean evaluate(final Extractor extractor,
+ final Object object1,
+ final FieldValue object2) {
+ return extractor.getIntValue( object1 ) < object2.getIntValue();
+ }
+
+ public boolean evaluate(final FieldValue object1,
+ final Extractor extractor,
final Object object2) {
- return ((Number) object1).intValue() < ((Number) object2).intValue();
+ return object1.getIntValue() < extractor.getIntValue( object2 );
}
+ public boolean evaluateCachedRight(VariableContextEntry context,
+ Object left) {
+ return context.declaration.getExtractor().getIntValue( left ) < ((LongVariableContextEntry) context).right;
+ }
+
+ public boolean evaluateCachedLeft(VariableContextEntry context,
+ Object right) {
+ return ((LongVariableContextEntry) context).left < context.extractor.getIntValue( right );
+ }
+
public String toString() {
return "Integer <";
}
@@ -142,11 +190,28 @@
Operator.LESS_OR_EQUAL );
}
- public boolean evaluate(final Object object1,
+ public boolean evaluate(final Extractor extractor,
+ final Object object1,
+ final FieldValue object2) {
+ return extractor.getIntValue( object1 ) <= object2.getIntValue();
+ }
+
+ public boolean evaluate(final FieldValue object1,
+ final Extractor extractor,
final Object object2) {
- return ((Number) object1).intValue() <= ((Number) object2).intValue();
+ return object1.getIntValue() <= extractor.getIntValue( object2 );
}
+ public boolean evaluateCachedRight(VariableContextEntry context,
+ Object left) {
+ return context.declaration.getExtractor().getIntValue( left ) <= ((LongVariableContextEntry) context).right;
+ }
+
+ public boolean evaluateCachedLeft(VariableContextEntry context,
+ Object right) {
+ return ((LongVariableContextEntry) context).left <= context.extractor.getIntValue( right );
+ }
+
public String toString() {
return "Integer <=";
}
@@ -164,11 +229,28 @@
Operator.GREATER );
}
- public boolean evaluate(final Object object1,
+ public boolean evaluate(final Extractor extractor,
+ final Object object1,
+ final FieldValue object2) {
+ return extractor.getIntValue( object1 ) > object2.getIntValue();
+ }
+
+ public boolean evaluate(final FieldValue object1,
+ final Extractor extractor,
final Object object2) {
- return ((Number) object1).intValue() > ((Number) object2).intValue();
+ return object1.getIntValue() > extractor.getIntValue( object2 );
}
+ public boolean evaluateCachedRight(VariableContextEntry context,
+ Object left) {
+ return context.declaration.getExtractor().getIntValue( left ) > ((LongVariableContextEntry) context).right;
+ }
+
+ public boolean evaluateCachedLeft(VariableContextEntry context,
+ Object right) {
+ return ((LongVariableContextEntry) context).left > context.extractor.getIntValue( right );
+ }
+
public String toString() {
return "Integer >";
}
@@ -186,11 +268,28 @@
Operator.GREATER_OR_EQUAL );
}
- public boolean evaluate(final Object object1,
+ public boolean evaluate(final Extractor extractor,
+ final Object object1,
+ final FieldValue object2) {
+ return extractor.getIntValue( object1 ) >= object2.getIntValue();
+ }
+
+ public boolean evaluate(final FieldValue object1,
+ final Extractor extractor,
final Object object2) {
- return ((Number) object1).intValue() >= ((Number) object2).intValue();
+ return object1.getIntValue() >= extractor.getIntValue( object2 );
}
+ public boolean evaluateCachedRight(VariableContextEntry context,
+ Object left) {
+ return context.declaration.getExtractor().getIntValue( left ) >= ((LongVariableContextEntry) context).right;
+ }
+
+ public boolean evaluateCachedLeft(VariableContextEntry context,
+ Object right) {
+ return ((LongVariableContextEntry) context).left >= context.extractor.getIntValue( right );
+ }
+
public String toString() {
return "Integer >=";
}
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 2006-10-18 22:06:58 UTC (rev 6902)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/LongFactory.java 2006-10-18 22:13:06 UTC (rev 6903)
@@ -18,21 +18,23 @@
import org.drools.base.BaseEvaluator;
import org.drools.base.ValueType;
-import org.drools.base.evaluators.ShortFactory.ShortEqualEvaluator;
-import org.drools.base.evaluators.ShortFactory.ShortGreaterEvaluator;
-import org.drools.base.evaluators.ShortFactory.ShortGreaterOrEqualEvaluator;
-import org.drools.base.evaluators.ShortFactory.ShortLessEvaluator;
-import org.drools.base.evaluators.ShortFactory.ShortLessOrEqualEvaluator;
-import org.drools.base.evaluators.ShortFactory.ShortNotEqualEvaluator;
+import org.drools.rule.VariableConstraint.LongVariableContextEntry;
+import org.drools.rule.VariableConstraint.VariableContextEntry;
import org.drools.spi.Evaluator;
+import org.drools.spi.Extractor;
+import org.drools.spi.FieldValue;
-public class LongFactory implements EvaluatorFactory {
- private static EvaluatorFactory INSTANCE = new LongFactory();
+public class LongFactory
+ implements
+ EvaluatorFactory {
+ private static final long serialVersionUID = 4184811148799115566L;
+ private static EvaluatorFactory INSTANCE = new LongFactory();
+
private LongFactory() {
-
+
}
-
+
public static EvaluatorFactory getInstance() {
if ( INSTANCE == null ) {
INSTANCE = new LongFactory();
@@ -53,12 +55,11 @@
return LongGreaterEvaluator.INSTANCE;
} else if ( operator == Operator.GREATER_OR_EQUAL ) {
return LongGreaterOrEqualEvaluator.INSTANCE;
- } else {
+ } else {
throw new RuntimeException( "Operator '" + operator + "' does not exist for LongEvaluator" );
- }
+ }
}
-
static class LongEqualEvaluator extends BaseEvaluator {
/**
*
@@ -71,14 +72,28 @@
Operator.EQUAL );
}
- public boolean evaluate(final Object object1,
+ public boolean evaluate(final Extractor extractor,
+ final Object object1,
+ final FieldValue object2) {
+ return extractor.getLongValue( object1 ) == object2.getLongValue();
+ }
+
+ public boolean evaluate(final FieldValue object1,
+ final Extractor extractor,
final Object object2) {
- if ( object1 == null ) {
- return object2 == null;
- }
- return ((Number) object1).equals( object2 );
+ return object1.getLongValue() == extractor.getLongValue( object2 );
}
+ public boolean evaluateCachedRight(VariableContextEntry context,
+ Object left) {
+ return context.declaration.getExtractor().getLongValue( left ) == ((LongVariableContextEntry) context).right;
+ }
+
+ public boolean evaluateCachedLeft(VariableContextEntry context,
+ Object right) {
+ return ((LongVariableContextEntry) context).left == context.extractor.getLongValue( right );
+ }
+
public String toString() {
return "Long ==";
}
@@ -96,14 +111,28 @@
Operator.NOT_EQUAL );
}
- public boolean evaluate(final Object object1,
+ public boolean evaluate(final Extractor extractor,
+ final Object object1,
+ final FieldValue object2) {
+ return extractor.getLongValue( object1 ) != object2.getLongValue();
+ }
+
+ public boolean evaluate(final FieldValue object1,
+ final Extractor extractor,
final Object object2) {
- if ( object1 == null ) {
- return object2 != null;
- }
- return !((Number) object1).equals( object2 );
+ return object1.getLongValue() != extractor.getLongValue( object2 );
}
+ public boolean evaluateCachedRight(VariableContextEntry context,
+ Object left) {
+ return context.declaration.getExtractor().getLongValue( left ) != ((LongVariableContextEntry) context).right;
+ }
+
+ public boolean evaluateCachedLeft(VariableContextEntry context,
+ Object right) {
+ return ((LongVariableContextEntry) context).left != context.extractor.getLongValue( right );
+ }
+
public String toString() {
return "Long !=";
}
@@ -121,11 +150,28 @@
Operator.LESS );
}
- public boolean evaluate(final Object object1,
+ public boolean evaluate(final Extractor extractor,
+ final Object object1,
+ final FieldValue object2) {
+ return extractor.getLongValue( object1 ) < object2.getLongValue();
+ }
+
+ public boolean evaluate(final FieldValue object1,
+ final Extractor extractor,
final Object object2) {
- return ((Number) object1).longValue() < ((Number) object2).longValue();
+ return object1.getLongValue() < extractor.getLongValue( object2 );
}
+ public boolean evaluateCachedRight(VariableContextEntry context,
+ Object left) {
+ return context.declaration.getExtractor().getLongValue( left ) < ((LongVariableContextEntry) context).right;
+ }
+
+ public boolean evaluateCachedLeft(VariableContextEntry context,
+ Object right) {
+ return ((LongVariableContextEntry) context).left < context.extractor.getLongValue( right );
+ }
+
public String toString() {
return "Long <";
}
@@ -143,11 +189,28 @@
Operator.LESS_OR_EQUAL );
}
- public boolean evaluate(final Object object1,
+ public boolean evaluate(final Extractor extractor,
+ final Object object1,
+ final FieldValue object2) {
+ return extractor.getLongValue( object1 ) <= object2.getLongValue();
+ }
+
+ public boolean evaluate(final FieldValue object1,
+ final Extractor extractor,
final Object object2) {
- return ((Number) object1).longValue() <= ((Number) object2).longValue();
+ return object1.getLongValue() <= extractor.getLongValue( object2 );
}
+ public boolean evaluateCachedRight(VariableContextEntry context,
+ Object left) {
+ return context.declaration.getExtractor().getLongValue( left ) <= ((LongVariableContextEntry) context).right;
+ }
+
+ public boolean evaluateCachedLeft(VariableContextEntry context,
+ Object right) {
+ return ((LongVariableContextEntry) context).left <= context.extractor.getLongValue( right );
+ }
+
public String toString() {
return "Long <=";
}
@@ -165,11 +228,28 @@
Operator.GREATER );
}
- public boolean evaluate(final Object object1,
+ public boolean evaluate(final Extractor extractor,
+ final Object object1,
+ final FieldValue object2) {
+ return extractor.getLongValue( object1 ) > object2.getLongValue();
+ }
+
+ public boolean evaluate(final FieldValue object1,
+ final Extractor extractor,
final Object object2) {
- return ((Number) object1).longValue() > ((Number) object2).longValue();
+ return object1.getLongValue() > extractor.getLongValue( object2 );
}
+ public boolean evaluateCachedRight(VariableContextEntry context,
+ Object left) {
+ return context.declaration.getExtractor().getLongValue( left ) > ((LongVariableContextEntry) context).right;
+ }
+
+ public boolean evaluateCachedLeft(VariableContextEntry context,
+ Object right) {
+ return ((LongVariableContextEntry) context).left > context.extractor.getLongValue( right );
+ }
+
public String toString() {
return "Long >";
}
@@ -187,11 +267,28 @@
Operator.GREATER_OR_EQUAL );
}
- public boolean evaluate(final Object object1,
+ public boolean evaluate(final Extractor extractor,
+ final Object object1,
+ final FieldValue object2) {
+ return extractor.getLongValue( object1 ) >= object2.getLongValue();
+ }
+
+ public boolean evaluate(final FieldValue object1,
+ final Extractor extractor,
final Object object2) {
- return ((Number) object1).longValue() >= ((Number) object2).longValue();
+ return object1.getLongValue() >= extractor.getLongValue( object2 );
}
+ public boolean evaluateCachedRight(VariableContextEntry context,
+ Object left) {
+ return context.declaration.getExtractor().getLongValue( left ) >= ((LongVariableContextEntry) context).right;
+ }
+
+ public boolean evaluateCachedLeft(VariableContextEntry context,
+ Object right) {
+ return ((LongVariableContextEntry) context).left >= context.extractor.getLongValue( right );
+ }
+
public String toString() {
return "Long >=";
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/ObjectFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/ObjectFactory.java 2006-10-18 22:06:58 UTC (rev 6902)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/ObjectFactory.java 2006-10-18 22:13:06 UTC (rev 6903)
@@ -20,19 +20,11 @@
import org.drools.base.BaseEvaluator;
import org.drools.base.ValueType;
-import org.drools.base.evaluators.IntegerFactory.IntegerEqualEvaluator;
-import org.drools.base.evaluators.IntegerFactory.IntegerGreaterEvaluator;
-import org.drools.base.evaluators.IntegerFactory.IntegerGreaterOrEqualEvaluator;
-import org.drools.base.evaluators.IntegerFactory.IntegerLessEvaluator;
-import org.drools.base.evaluators.IntegerFactory.IntegerLessOrEqualEvaluator;
-import org.drools.base.evaluators.IntegerFactory.IntegerNotEqualEvaluator;
-import org.drools.base.evaluators.ShortFactory.ShortEqualEvaluator;
-import org.drools.base.evaluators.ShortFactory.ShortGreaterEvaluator;
-import org.drools.base.evaluators.ShortFactory.ShortGreaterOrEqualEvaluator;
-import org.drools.base.evaluators.ShortFactory.ShortLessEvaluator;
-import org.drools.base.evaluators.ShortFactory.ShortLessOrEqualEvaluator;
-import org.drools.base.evaluators.ShortFactory.ShortNotEqualEvaluator;
+import org.drools.rule.VariableConstraint.ObjectVariableContextEntry;
+import org.drools.rule.VariableConstraint.VariableContextEntry;
import org.drools.spi.Evaluator;
+import org.drools.spi.Extractor;
+import org.drools.spi.FieldValue;
/**
* This is the misc "bucket" evaluator factory for objects.
@@ -45,20 +37,24 @@
*
* @author Michael Neale
*/
-public class ObjectFactory implements EvaluatorFactory {
+public class ObjectFactory
+ implements
+ EvaluatorFactory {
+
+ private static final long serialVersionUID = -8547142029512452551L;
private static EvaluatorFactory INSTANCE = new ObjectFactory();
-
+
private ObjectFactory() {
-
+
}
-
+
public static EvaluatorFactory getInstance() {
if ( INSTANCE == null ) {
INSTANCE = new ObjectFactory();
}
return INSTANCE;
}
-
+
public Evaluator getEvaluator(final Operator operator) {
if ( operator == Operator.EQUAL ) {
return ObjectEqualEvaluator.INSTANCE;
@@ -76,11 +72,10 @@
return ObjectContainsEvaluator.INSTANCE;
} else if ( operator == Operator.EXCLUDES ) {
return ObjectExcludesEvaluator.INSTANCE;
- } else {
+ } else {
throw new RuntimeException( "Operator '" + operator + "' does not exist for ShortEvaluator" );
- }
+ }
}
-
static class ObjectEqualEvaluator extends BaseEvaluator {
/**
@@ -94,17 +89,50 @@
Operator.EQUAL );
}
- public boolean evaluate(final Object object1,
+ public boolean evaluate(final Extractor extractor,
+ final Object object1,
+ final FieldValue object2) {
+ Object value1 = extractor.getValue( object1 );
+ Object value2 = object2.getValue();
+ if ( value1 == null ) {
+ return value2 == null;
+ }
+ return value1.equals( value2 );
+ }
+
+ public boolean evaluate(final FieldValue object1,
+ final Extractor extractor,
final Object object2) {
- if ( object1 == null ) {
- return object2 == null;
+ Object value1 = object1.getValue();
+ Object value2 = extractor.getValue( object2 );
+ if ( value1 == null ) {
+ return value2 == null;
}
- return object1.equals( object2 );
+ return value1.equals( value2 );
}
+ public boolean evaluateCachedRight(VariableContextEntry context,
+ Object left) {
+ Object value = context.declaration.getExtractor().getValue( left );
+ if ( value == null ) {
+ return ((ObjectVariableContextEntry) context).right == null;
+ }
+ return value.equals( ((ObjectVariableContextEntry) context).right );
+ }
+
+ public boolean evaluateCachedLeft(VariableContextEntry context,
+ Object right) {
+ Object value = context.extractor.getValue( right );
+ if ( ((ObjectVariableContextEntry) context).left == null ) {
+ return value == null;
+ }
+ return ((ObjectVariableContextEntry) context).left.equals( value );
+ }
+
public String toString() {
return "Object ==";
}
+
}
static class ObjectNotEqualEvaluator extends BaseEvaluator {
@@ -119,23 +147,52 @@
Operator.NOT_EQUAL );
}
- public boolean evaluate(final Object object1,
+ public boolean evaluate(final Extractor extractor,
+ final Object object1,
+ final FieldValue object2) {
+ Object value1 = extractor.getValue( object1 );
+ Object value2 = object2.getValue();
+ if ( value1 == null ) {
+ return value2 != null;
+ }
+ return !value1.equals( value2 );
+ }
+
+ public boolean evaluate(final FieldValue object1,
+ final Extractor extractor,
final Object object2) {
- if ( object1 == null ) {
- return !(object2 == null);
+ Object value1 = object1.getValue();
+ Object value2 = extractor.getValue( object2 );
+ if ( value1 == null ) {
+ return value2 != null;
}
- return !object1.equals( object2 );
+ return !value1.equals( value2 );
}
+ public boolean evaluateCachedRight(VariableContextEntry context,
+ Object left) {
+ Object value = context.declaration.getExtractor().getValue( left );
+ if ( value == null ) {
+ return ((ObjectVariableContextEntry) context).right != null;
+ }
+ return !value.equals( ((ObjectVariableContextEntry) context).right );
+ }
+
+ public boolean evaluateCachedLeft(VariableContextEntry context,
+ Object right) {
+ Object value = context.extractor.getValue( right );
+ if ( ((ObjectVariableContextEntry) context).left == null ) {
+ return value != null;
+ }
+ return !((ObjectVariableContextEntry) context).left.equals( value );
+ }
+
public String toString() {
return "Object !=";
}
}
static class ObjectLessEvaluator extends BaseEvaluator {
- /**
- *
- */
private static final long serialVersionUID = 320;
public final static Evaluator INSTANCE = new ObjectLessEvaluator();
@@ -144,13 +201,32 @@
Operator.LESS );
}
- public boolean evaluate(final Object object1,
+ public boolean evaluate(final Extractor extractor,
+ final Object object1,
+ final FieldValue object2) {
+ final Comparable comp = (Comparable) extractor.getValue( object1 );
+ return comp.compareTo( object2.getValue() ) < 0;
+ }
+
+ public boolean evaluate(final FieldValue object1,
+ final Extractor extractor,
final Object object2) {
- final Comparable comp = (Comparable) object1;
- final int val = comp.compareTo( object2 );
- return val < 0;
+ final Comparable comp = (Comparable) object1.getValue();
+ return comp.compareTo( extractor.getValue( object2 ) ) < 0;
}
+ public boolean evaluateCachedRight(VariableContextEntry context,
+ Object left) {
+ final Comparable comp = (Comparable) context.declaration.getExtractor().getValue( left );
+ return comp.compareTo( ((ObjectVariableContextEntry) context).right ) < 0;
+ }
+
+ public boolean evaluateCachedLeft(VariableContextEntry context,
+ Object right) {
+ final Comparable comp = (Comparable) ((ObjectVariableContextEntry) context).left;
+ return comp.compareTo( context.extractor.getValue( right ) ) < 0;
+ }
+
public String toString() {
return "Object <";
}
@@ -168,12 +244,32 @@
Operator.LESS_OR_EQUAL );
}
- public boolean evaluate(final Object object1,
+ public boolean evaluate(final Extractor extractor,
+ final Object object1,
+ final FieldValue object2) {
+ final Comparable comp = (Comparable) extractor.getValue( object1 );
+ return comp.compareTo( object2.getValue() ) <= 0;
+ }
+
+ public boolean evaluate(final FieldValue object1,
+ final Extractor extractor,
final Object object2) {
- final Comparable comp = (Comparable) object1;
- return comp.compareTo( object2 ) <= 0;
+ final Comparable comp = (Comparable) object1.getValue();
+ return comp.compareTo( extractor.getValue( object2 ) ) <= 0;
}
+ public boolean evaluateCachedRight(VariableContextEntry context,
+ Object left) {
+ final Comparable comp = (Comparable) context.declaration.getExtractor().getValue( left );
+ return comp.compareTo( ((ObjectVariableContextEntry) context).right ) <= 0;
+ }
+
+ public boolean evaluateCachedLeft(VariableContextEntry context,
+ Object right) {
+ final Comparable comp = (Comparable) ((ObjectVariableContextEntry) context).left;
+ return comp.compareTo( context.extractor.getValue( right ) ) <= 0;
+ }
+
public String toString() {
return "Object <=";
}
@@ -191,12 +287,32 @@
Operator.GREATER );
}
- public boolean evaluate(final Object object1,
+ public boolean evaluate(final Extractor extractor,
+ final Object object1,
+ final FieldValue object2) {
+ final Comparable comp = (Comparable) extractor.getValue( object1 );
+ return comp.compareTo( object2.getValue() ) >= 0;
+ }
+
+ public boolean evaluate(final FieldValue object1,
+ final Extractor extractor,
final Object object2) {
- final Comparable comp = (Comparable) object1;
- return comp.compareTo( object2 ) > 0;
+ final Comparable comp = (Comparable) object1.getValue();
+ return comp.compareTo( extractor.getValue( object2 ) ) >= 0;
}
+ public boolean evaluateCachedRight(VariableContextEntry context,
+ Object left) {
+ final Comparable comp = (Comparable) context.declaration.getExtractor().getValue( left );
+ return comp.compareTo( ((ObjectVariableContextEntry) context).right ) >= 0;
+ }
+
+ public boolean evaluateCachedLeft(VariableContextEntry context,
+ Object right) {
+ final Comparable comp = (Comparable) ((ObjectVariableContextEntry) context).left;
+ return comp.compareTo( context.extractor.getValue( right ) ) >= 0;
+ }
+
public String toString() {
return "Object >";
}
@@ -214,12 +330,32 @@
Operator.GREATER_OR_EQUAL );
}
- public boolean evaluate(final Object object1,
+ public boolean evaluate(final Extractor extractor,
+ final Object object1,
+ final FieldValue object2) {
+ final Comparable comp = (Comparable) extractor.getValue( object1 );
+ return comp.compareTo( object2.getValue() ) >= 0;
+ }
+
+ public boolean evaluate(final FieldValue object1,
+ final Extractor extractor,
final Object object2) {
- final Comparable comp = (Comparable) object1;
- return comp.compareTo( object2 ) >= 0;
+ final Comparable comp = (Comparable) object1.getValue();
+ return comp.compareTo( extractor.getValue( object2 ) ) >= 0;
}
+ public boolean evaluateCachedRight(VariableContextEntry context,
+ Object left) {
+ final Comparable comp = (Comparable) context.declaration.getExtractor().getValue( left );
+ return comp.compareTo( ((ObjectVariableContextEntry) context).right ) >= 0;
+ }
+
+ public boolean evaluateCachedLeft(VariableContextEntry context,
+ Object right) {
+ final Comparable comp = (Comparable) ((ObjectVariableContextEntry) context).left;
+ return comp.compareTo( context.extractor.getValue( right ) ) >= 0;
+ }
+
public String toString() {
return "Object >=";
}
@@ -237,15 +373,36 @@
Operator.CONTAINS );
}
- public boolean evaluate(final Object object1,
+ public boolean evaluate(final Extractor extractor,
+ final Object object1,
+ final FieldValue object2) {
+ Object value = object2.getValue();
+ final Collection col = (Collection) extractor.getValue( object1 );
+ return col.contains( value );
+ }
+
+ public boolean evaluate(final FieldValue object1,
+ final Extractor extractor,
final Object object2) {
- if ( object2 == null ) {
- return false;
- }
- final Collection col = (Collection) object1;
- return col.contains( object2 );
+ Object value = extractor.getValue( object2);
+ final Collection col = (Collection) object1.getValue();
+ return col.contains( value );
}
+ public boolean evaluateCachedRight(VariableContextEntry context,
+ Object left) {
+ Object value = ((ObjectVariableContextEntry) context).right;
+ final Collection col = (Collection) context.declaration.getExtractor().getValue( left );
+ return col.contains( value );
+ }
+
+ public boolean evaluateCachedLeft(VariableContextEntry context,
+ Object right) {
+ Object value = context.extractor.getValue( right );
+ final Collection col = (Collection) ((ObjectVariableContextEntry) context).left;
+ return col.contains( value );
+ }
+
public String toString() {
return "Object contains";
}
@@ -263,15 +420,36 @@
Operator.EXCLUDES );
}
- public boolean evaluate(final Object object1,
+ public boolean evaluate(final Extractor extractor,
+ final Object object1,
+ final FieldValue object2) {
+ Object value = object2.getValue();
+ final Collection col = (Collection) extractor.getValue( object1 );
+ return !col.contains( value );
+ }
+
+ public boolean evaluate(final FieldValue object1,
+ final Extractor extractor,
final Object object2) {
- if ( object2 == null ) {
- return false;
- }
- final Collection col = (Collection) object1;
- return !col.contains( object2 );
+ Object value = extractor.getValue( object2);
+ final Collection col = (Collection) object1.getValue();
+ return !col.contains( value );
}
+ public boolean evaluateCachedRight(VariableContextEntry context,
+ Object left) {
+ Object value = ((ObjectVariableContextEntry) context).right;
+ final Collection col = (Collection) context.declaration.getExtractor().getValue( left );
+ return !col.contains( value );
+ }
+
+ public boolean evaluateCachedLeft(VariableContextEntry context,
+ Object right) {
+ Object value = context.extractor.getValue( right );
+ final Collection col = (Collection) ((ObjectVariableContextEntry) context).left;
+ return !col.contains( value );
+ }
+
public String toString() {
return "Object excludes";
}
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 2006-10-18 22:06:58 UTC (rev 6902)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/ShortFactory.java 2006-10-18 22:13:06 UTC (rev 6903)
@@ -18,15 +18,15 @@
import org.drools.base.BaseEvaluator;
import org.drools.base.ValueType;
-import org.drools.base.evaluators.DoubleFactory.DoubleEqualEvaluator;
-import org.drools.base.evaluators.DoubleFactory.DoubleGreaterEvaluator;
-import org.drools.base.evaluators.DoubleFactory.DoubleGreaterOrEqualEvaluator;
-import org.drools.base.evaluators.DoubleFactory.DoubleLessEvaluator;
-import org.drools.base.evaluators.DoubleFactory.DoubleLessOrEqualEvaluator;
-import org.drools.base.evaluators.DoubleFactory.DoubleNotEqualEvaluator;
+import org.drools.rule.VariableConstraint.LongVariableContextEntry;
+import org.drools.rule.VariableConstraint.VariableContextEntry;
import org.drools.spi.Evaluator;
+import org.drools.spi.Extractor;
+import org.drools.spi.FieldValue;
public class ShortFactory implements EvaluatorFactory {
+
+ private static final long serialVersionUID = -1295210800055648796L;
private static EvaluatorFactory INSTANCE = new ShortFactory();
private ShortFactory() {
@@ -70,14 +70,28 @@
Operator.EQUAL );
}
- public boolean evaluate(final Object object1,
+ public boolean evaluate(final Extractor extractor,
+ final Object object1,
+ final FieldValue object2) {
+ return extractor.getShortValue( object1 ) == object2.getShortValue();
+ }
+
+ public boolean evaluate(final FieldValue object1,
+ final Extractor extractor,
final Object object2) {
- if ( object1 == null ) {
- return object2 == null;
- }
- return ((Number) object1).equals( object2 );
+ return object1.getShortValue() == extractor.getShortValue( object2 );
}
+ public boolean evaluateCachedRight(VariableContextEntry context,
+ Object left) {
+ return context.declaration.getExtractor().getShortValue( left ) == ((LongVariableContextEntry) context).right;
+ }
+
+ public boolean evaluateCachedLeft(VariableContextEntry context,
+ Object right) {
+ return ((LongVariableContextEntry) context).left == context.extractor.getShortValue( right );
+ }
+
public String toString() {
return "Short ==";
}
@@ -95,14 +109,28 @@
Operator.NOT_EQUAL );
}
- public boolean evaluate(final Object object1,
+ public boolean evaluate(final Extractor extractor,
+ final Object object1,
+ final FieldValue object2) {
+ return extractor.getShortValue( object1 ) != object2.getShortValue();
+ }
+
+ public boolean evaluate(final FieldValue object1,
+ final Extractor extractor,
final Object object2) {
- if ( object1 == null ) {
- return !(object2 == null);
- }
- return !((Number) object1).equals( object2 );
+ return object1.getShortValue() != extractor.getShortValue( object2 );
}
+ public boolean evaluateCachedRight(VariableContextEntry context,
+ Object left) {
+ return context.declaration.getExtractor().getShortValue( left ) != ((LongVariableContextEntry) context).right;
+ }
+
+ public boolean evaluateCachedLeft(VariableContextEntry context,
+ Object right) {
+ return ((LongVariableContextEntry) context).left != context.extractor.getShortValue( right );
+ }
+
public String toString() {
return "Short !=";
}
@@ -120,11 +148,28 @@
Operator.LESS );
}
- public boolean evaluate(final Object object1,
+ public boolean evaluate(final Extractor extractor,
+ final Object object1,
+ final FieldValue object2) {
+ return extractor.getShortValue( object1 ) < object2.getShortValue();
+ }
+
+ public boolean evaluate(final FieldValue object1,
+ final Extractor extractor,
final Object object2) {
- return ((Number) object1).shortValue() < ((Number) object2).shortValue();
+ return object1.getShortValue() < extractor.getShortValue( object2 );
}
+ public boolean evaluateCachedRight(VariableContextEntry context,
+ Object left) {
+ return context.declaration.getExtractor().getShortValue( left ) < ((LongVariableContextEntry) context).right;
+ }
+
+ public boolean evaluateCachedLeft(VariableContextEntry context,
+ Object right) {
+ return ((LongVariableContextEntry) context).left < context.extractor.getShortValue( right );
+ }
+
public String toString() {
return "Short <";
}
@@ -142,11 +187,28 @@
Operator.LESS_OR_EQUAL );
}
- public boolean evaluate(final Object object1,
+ public boolean evaluate(final Extractor extractor,
+ final Object object1,
+ final FieldValue object2) {
+ return extractor.getShortValue( object1 ) <= object2.getShortValue();
+ }
+
+ public boolean evaluate(final FieldValue object1,
+ final Extractor extractor,
final Object object2) {
- return ((Number) object1).shortValue() <= ((Number) object2).shortValue();
+ return object1.getShortValue() <= extractor.getShortValue( object2 );
}
+ public boolean evaluateCachedRight(VariableContextEntry context,
+ Object left) {
+ return context.declaration.getExtractor().getShortValue( left ) <= ((LongVariableContextEntry) context).right;
+ }
+
+ public boolean evaluateCachedLeft(VariableContextEntry context,
+ Object right) {
+ return ((LongVariableContextEntry) context).left <= context.extractor.getShortValue( right );
+ }
+
public String toString() {
return "Boolean <=";
}
@@ -164,11 +226,28 @@
Operator.GREATER );
}
- public boolean evaluate(final Object object1,
+ public boolean evaluate(final Extractor extractor,
+ final Object object1,
+ final FieldValue object2) {
+ return extractor.getShortValue( object1 ) > object2.getShortValue();
+ }
+
+ public boolean evaluate(final FieldValue object1,
+ final Extractor extractor,
final Object object2) {
- return ((Number) object1).shortValue() > ((Number) object2).shortValue();
+ return object1.getShortValue() > extractor.getShortValue( object2 );
}
+ public boolean evaluateCachedRight(VariableContextEntry context,
+ Object left) {
+ return context.declaration.getExtractor().getShortValue( left ) > ((LongVariableContextEntry) context).right;
+ }
+
+ public boolean evaluateCachedLeft(VariableContextEntry context,
+ Object right) {
+ return ((LongVariableContextEntry) context).left > context.extractor.getShortValue( right );
+ }
+
public String toString() {
return "Short >";
}
@@ -186,11 +265,28 @@
Operator.GREATER_OR_EQUAL );
}
- public boolean evaluate(final Object object1,
+ public boolean evaluate(final Extractor extractor,
+ final Object object1,
+ final FieldValue object2) {
+ return extractor.getShortValue( object1 ) >= object2.getShortValue();
+ }
+
+ public boolean evaluate(final FieldValue object1,
+ final Extractor extractor,
final Object object2) {
- return ((Number) object1).shortValue() >= ((Number) object2).shortValue();
+ return object1.getShortValue() >= extractor.getShortValue( object2 );
}
+ public boolean evaluateCachedRight(VariableContextEntry context,
+ Object left) {
+ return context.declaration.getExtractor().getShortValue( left ) >= ((LongVariableContextEntry) context).right;
+ }
+
+ public boolean evaluateCachedLeft(VariableContextEntry context,
+ Object right) {
+ return ((LongVariableContextEntry) context).left >= context.extractor.getShortValue( right );
+ }
+
public String toString() {
return "Short >=";
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/StringFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/StringFactory.java 2006-10-18 22:06:58 UTC (rev 6902)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/StringFactory.java 2006-10-18 22:13:06 UTC (rev 6903)
@@ -18,13 +18,11 @@
import org.drools.base.BaseEvaluator;
import org.drools.base.ValueType;
-import org.drools.base.evaluators.DoubleFactory.DoubleEqualEvaluator;
-import org.drools.base.evaluators.DoubleFactory.DoubleGreaterEvaluator;
-import org.drools.base.evaluators.DoubleFactory.DoubleGreaterOrEqualEvaluator;
-import org.drools.base.evaluators.DoubleFactory.DoubleLessEvaluator;
-import org.drools.base.evaluators.DoubleFactory.DoubleLessOrEqualEvaluator;
-import org.drools.base.evaluators.DoubleFactory.DoubleNotEqualEvaluator;
+import org.drools.rule.VariableConstraint.ObjectVariableContextEntry;
+import org.drools.rule.VariableConstraint.VariableContextEntry;
import org.drools.spi.Evaluator;
+import org.drools.spi.Extractor;
+import org.drools.spi.FieldValue;
/**
* This is the misc "bucket" evaluator factory for objects.
@@ -33,13 +31,17 @@
*
* @author Michael Neale
*/
-public class StringFactory implements EvaluatorFactory {
- private static EvaluatorFactory INSTANCE = new StringFactory();
-
+public class StringFactory
+ implements
+ EvaluatorFactory {
+
+ private static final long serialVersionUID = -1761752249672590658L;
+ private static EvaluatorFactory INSTANCE = new StringFactory();
+
private StringFactory() {
-
+
}
-
+
public static EvaluatorFactory getInstance() {
if ( INSTANCE == null ) {
INSTANCE = new StringFactory();
@@ -54,9 +56,9 @@
return StringNotEqualEvaluator.INSTANCE;
} else if ( operator == Operator.MATCHES ) {
return StringMatchesEvaluator.INSTANCE;
- } else {
+ } else {
throw new RuntimeException( "Operator '" + operator + "' does not exist for StringEvaluator" );
- }
+ }
}
static class StringEqualEvaluator extends BaseEvaluator {
@@ -71,14 +73,46 @@
Operator.EQUAL );
}
- public boolean evaluate(final Object object1,
+ public boolean evaluate(final Extractor extractor,
+ final Object object1,
+ final FieldValue object2) {
+ Object value1 = extractor.getValue( object1 );
+ Object value2 = object2.getValue();
+ if ( value1 == null ) {
+ return value2 == null;
+ }
+ return value1.equals( value2 );
+ }
+
+ public boolean evaluate(final FieldValue object1,
+ final Extractor extractor,
final Object object2) {
- if ( object1 == null ) {
- return object2 == null;
+ Object value1 = object1.getValue();
+ Object value2 = extractor.getValue( object2 );
+ if ( value1 == null ) {
+ return value2 == null;
}
- return object1.equals( object2 );
+ return value1.equals( value2 );
}
+ public boolean evaluateCachedRight(VariableContextEntry context,
+ Object left) {
+ Object value = context.declaration.getExtractor().getValue( left );
+ if ( value == null ) {
+ return ((ObjectVariableContextEntry) context).right == null;
+ }
+ return value.equals( ((ObjectVariableContextEntry) context).right );
+ }
+
+ public boolean evaluateCachedLeft(VariableContextEntry context,
+ Object right) {
+ Object value = context.extractor.getValue( right );
+ if ( ((ObjectVariableContextEntry) context).left == null ) {
+ return value == null;
+ }
+ return ((ObjectVariableContextEntry) context).left.equals( value );
+ }
+
public String toString() {
return "String ==";
}
@@ -96,15 +130,46 @@
Operator.NOT_EQUAL );
}
- public boolean evaluate(final Object object1,
+ public boolean evaluate(final Extractor extractor,
+ final Object object1,
+ final FieldValue object2) {
+ Object value1 = extractor.getValue( object1 );
+ Object value2 = object2.getValue();
+ if ( value1 == null ) {
+ return value2 != null;
+ }
+ return !value1.equals( value2 );
+ }
+
+ public boolean evaluate(final FieldValue object1,
+ final Extractor extractor,
final Object object2) {
- if ( object1 == null ) {
- return !(object2 == null);
+ Object value1 = object1.getValue();
+ Object value2 = extractor.getValue( object2 );
+ if ( value1 == null ) {
+ return value2 != null;
}
+ return !value1.equals( value2 );
+ }
- return !object1.equals( object2 );
+ public boolean evaluateCachedRight(VariableContextEntry context,
+ Object left) {
+ Object value = context.declaration.getExtractor().getValue( left );
+ if ( value == null ) {
+ return ((ObjectVariableContextEntry) context).right != null;
+ }
+ return value.equals( ((ObjectVariableContextEntry) context).right );
}
+ public boolean evaluateCachedLeft(VariableContextEntry context,
+ Object right) {
+ Object value = context.extractor.getValue( right );
+ if ( ((ObjectVariableContextEntry) context).left == null ) {
+ return value != null;
+ }
+ return !((ObjectVariableContextEntry) context).left.equals( value );
+ }
+
public String toString() {
return "String !=";
}
@@ -122,20 +187,44 @@
Operator.MATCHES );
}
- public boolean evaluate(final Object object1,
+ public boolean evaluate(final Extractor extractor,
+ final Object object1,
+ final FieldValue object2) {
+ String value1 = (String) extractor.getValue( object1 );
+ String value2 = (String) object2.getValue();
+ if ( value1 == null ) {
+ return false;
+ }
+ return value1.matches( value2 );
+ }
+
+ public boolean evaluate(final FieldValue object1,
+ final Extractor extractor,
final Object object2) {
- final String pattern = (String) object2;
- final String target = (String) object1;
+ String value1 = (String) object1.getValue();
+ String value2 = (String) extractor.getValue( object2 );
+ if ( value1 == null ) {
+ return false;
+ }
+ return value1.matches( value2 );
+ }
- if ( object1 == null ) {
+ public boolean evaluateCachedRight(VariableContextEntry context,
+ Object left) {
+ String value = (String) context.declaration.getExtractor().getValue( left );
+ if ( value == null ) {
return false;
}
+ return value.matches( (String) ((ObjectVariableContextEntry) context).right );
+ }
- //TODO: possibly use a WeakHashMap cache of regex expressions
- //downside is could cause a lot of hashing if the patterns are dynamic
- //if the patterns are static, then it will not be a problem. Perhaps compiler can recognise patterns
- //in the input string using /pattern/ etc.. and precompile it, in which case object2 will be a Pattern.
- return target.matches( pattern );
+ public boolean evaluateCachedLeft(VariableContextEntry context,
+ Object right) {
+ if ( ((ObjectVariableContextEntry) context).left == null ) {
+ return false;
+ }
+ String value = (String) context.extractor.getValue( right );
+ return ((String) ((ObjectVariableContextEntry) context).left).matches( value );
}
public String toString() {
Added: 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 2006-10-18 22:06:58 UTC (rev 6902)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/extractors/BaseBooleanClassFieldExtractor.java 2006-10-18 22:13:06 UTC (rev 6903)
@@ -0,0 +1,72 @@
+/*
+ * Copyright 2005 JBoss Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.drools.base.extractors;
+
+import org.drools.RuntimeDroolsException;
+import org.drools.base.BaseClassFieldExtractor;
+
+/**
+ * A Base class for primitive boolean class field
+ * extractors. This class centralizes type conversions.
+ *
+ * @author etirelli
+ */
+public abstract class BaseBooleanClassFieldExtractor extends BaseClassFieldExtractor {
+
+ private static final long serialVersionUID = 9104214567753008212L;
+
+ public BaseBooleanClassFieldExtractor(Class clazz,
+ String fieldName) {
+ super( clazz,
+ fieldName );
+ }
+
+ public Object getValue(Object object) {
+ return getBooleanValue( object ) ? Boolean.TRUE : Boolean.FALSE;
+ }
+
+ public abstract boolean getBooleanValue(Object object);
+
+ public byte getByteValue(Object object) {
+ throw new RuntimeDroolsException("Conversion to byte not supported from boolean");
+ }
+
+ public char getCharValue(Object object) {
+ throw new RuntimeDroolsException("Conversion to char not supported from boolean");
+ }
+
+ public double getDoubleValue(Object object) {
+ throw new RuntimeDroolsException("Conversion to double not supported from boolean");
+ }
+
+ public float getFloatValue(Object object) {
+ throw new RuntimeDroolsException("Conversion to float not supported from boolean");
+ }
+
+ public int getIntValue(Object object) {
+ throw new RuntimeDroolsException("Conversion to int not supported from boolean");
+ }
+
+ public long getLongValue(Object object) {
+ throw new RuntimeDroolsException("Conversion to long not supported from boolean");
+ }
+
+ public short getShortValue(Object object) {
+ throw new RuntimeDroolsException("Conversion to short not supported from boolean");
+ }
+
+}
Property changes on: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/extractors/BaseBooleanClassFieldExtractor.java
___________________________________________________________________
Name: svn:executable
+ *
Name: svn:keywords
+ id author date revision
Name: svn:eol-style
+ native
Added: 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 2006-10-18 22:06:58 UTC (rev 6902)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/extractors/BaseByteClassFieldExtractor.java 2006-10-18 22:13:06 UTC (rev 6903)
@@ -0,0 +1,72 @@
+/*
+ * Copyright 2005 JBoss Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.drools.base.extractors;
+
+import org.drools.RuntimeDroolsException;
+import org.drools.base.BaseClassFieldExtractor;
+
+/**
+ * A Base class for primitive byte class field
+ * extractors. This class centralizes type conversions.
+ *
+ * @author etirelli
+ */
+public abstract class BaseByteClassFieldExtractor extends BaseClassFieldExtractor {
+
+ private static final long serialVersionUID = 2031113412868487706L;
+
+ public BaseByteClassFieldExtractor(Class clazz,
+ String fieldName) {
+ super( clazz,
+ fieldName );
+ }
+
+ public Object getValue(Object object) {
+ return new Long( getByteValue( object ) );
+ }
+
+ public boolean getBooleanValue(Object object) {
+ throw new RuntimeDroolsException("Conversion to boolean not supported from byte");
+ }
+
+ public abstract byte getByteValue(Object object);
+
+ public char getCharValue(Object object) {
+ throw new RuntimeDroolsException("Conversion to char not supported from byte");
+ }
+
+ public double getDoubleValue(Object object) {
+ return getByteValue( object );
+ }
+
+ public float getFloatValue(Object object) {
+ return getByteValue( object );
+ }
+
+ public int getIntValue(Object object) {
+ return getByteValue( object );
+ }
+
+ public long getLongValue(Object object) {
+ return getByteValue( object );
+ }
+
+ public short getShortValue(Object object) {
+ return getByteValue( object );
+ }
+
+}
Property changes on: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/extractors/BaseByteClassFieldExtractor.java
___________________________________________________________________
Name: svn:executable
+ *
Name: svn:keywords
+ id author date revision
Name: svn:eol-style
+ native
Added: 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 2006-10-18 22:06:58 UTC (rev 6902)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/extractors/BaseCharClassFieldExtractor.java 2006-10-18 22:13:06 UTC (rev 6903)
@@ -0,0 +1,50 @@
+package org.drools.base.extractors;
+
+import org.drools.RuntimeDroolsException;
+import org.drools.base.BaseClassFieldExtractor;
+
+public abstract class BaseCharClassFieldExtractor extends BaseClassFieldExtractor {
+
+ private static final long serialVersionUID = 91214567753008212L;
+
+ public BaseCharClassFieldExtractor(Class clazz,
+ String fieldName) {
+ super( clazz,
+ fieldName );
+ }
+
+ public Object getValue(Object object) {
+ return new Long( getCharValue( object ) );
+ }
+
+ public boolean getBooleanValue(Object object) {
+ throw new RuntimeDroolsException("Conversion to boolean not supported from char");
+ }
+
+ public byte getByteValue(Object object) {
+ throw new RuntimeDroolsException("Conversion to byte not supported from char");
+ }
+
+ public abstract char getCharValue(Object object);
+
+ public double getDoubleValue(Object object) {
+ throw new RuntimeDroolsException("Conversion to double not supported from char");
+ }
+
+ public float getFloatValue(Object object) {
+ throw new RuntimeDroolsException("Conversion to float not supported from char");
+ }
+
+ public int getIntValue(Object object) {
+ throw new RuntimeDroolsException("Conversion to int not supported from char");
+ }
+
+ public long getLongValue(Object object) {
+ throw new RuntimeDroolsException("Conversion to long not supported from char");
+ }
+
+ public short getShortValue(Object object) {
+ throw new RuntimeDroolsException("Conversion to short not supported from char");
+ }
+
+}
Property changes on: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/extractors/BaseCharClassFieldExtractor.java
___________________________________________________________________
Name: svn:executable
+ *
Name: svn:keywords
+ id author date revision
Name: svn:eol-style
+ native
Added: 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 2006-10-18 22:06:58 UTC (rev 6902)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/extractors/BaseDoubleClassFieldExtractor.java 2006-10-18 22:13:06 UTC (rev 6903)
@@ -0,0 +1,51 @@
+package org.drools.base.extractors;
+
+import org.drools.RuntimeDroolsException;
+import org.drools.base.BaseClassFieldExtractor;
+
+public abstract class BaseDoubleClassFieldExtractor extends BaseClassFieldExtractor {
+
+ private static final long serialVersionUID = 20311112843487706L;
+
+ public BaseDoubleClassFieldExtractor(Class clazz,
+ String fieldName) {
+ super( clazz,
+ fieldName );
+ }
+
+ public Object getValue(Object object) {
+ return new Double( getDoubleValue( object ) );
+ }
+
+ public boolean getBooleanValue(Object object) {
+ throw new RuntimeDroolsException("Conversion to boolean not supported from double");
+ }
+
+ public byte getByteValue(Object object) {
+ return (byte) getDoubleValue( object );
+
+ }
+
+ public char getCharValue(Object object) {
+ throw new RuntimeDroolsException("Conversion to char not supported from double");
+ }
+
+ public abstract double getDoubleValue(Object object);
+
+ public float getFloatValue(Object object) {
+ return (float) getDoubleValue( object );
+ }
+
+ public int getIntValue(Object object) {
+ return (int) getDoubleValue( object );
+ }
+
+ public long getLongValue(Object object) {
+ return (long) getDoubleValue( object );
+ }
+
+ public short getShortValue(Object object) {
+ return (short) getDoubleValue( object );
+ }
+
+}
Property changes on: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/extractors/BaseDoubleClassFieldExtractor.java
___________________________________________________________________
Name: svn:executable
+ *
Name: svn:keywords
+ id author date revision
Name: svn:eol-style
+ native
Added: 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 2006-10-18 22:06:58 UTC (rev 6902)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/extractors/BaseFloatClassFieldExtractor.java 2006-10-18 22:13:06 UTC (rev 6903)
@@ -0,0 +1,51 @@
+package org.drools.base.extractors;
+
+import org.drools.RuntimeDroolsException;
+import org.drools.base.BaseClassFieldExtractor;
+
+public abstract class BaseFloatClassFieldExtractor extends BaseClassFieldExtractor {
+
+ private static final long serialVersionUID = 20311112843487706L;
+
+ public BaseFloatClassFieldExtractor(Class clazz,
+ String fieldName) {
+ super( clazz,
+ fieldName );
+ }
+
+ public Object getValue(Object object) {
+ return new Float( getFloatValue( object ) );
+ }
+
+ public boolean getBooleanValue(Object object) {
+ throw new RuntimeDroolsException("Conversion to boolean not supported from float");
+ }
+
+ public byte getByteValue(Object object) {
+ return (byte) getFloatValue( object );
+
+ }
+
+ public char getCharValue(Object object) {
+ throw new RuntimeDroolsException("Conversion to char not supported from float");
+ }
+
+ public double getDoubleValue(Object object) {
+ return getFloatValue( object );
+ }
+
+ public abstract float getFloatValue(Object object);
+
+ public int getIntValue(Object object) {
+ return (int) getFloatValue( object );
+ }
+
+ public long getLongValue(Object object) {
+ return (long) getFloatValue( object );
+ }
+
+ public short getShortValue(Object object) {
+ return (short) getFloatValue( object );
+ }
+
+}
Property changes on: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/extractors/BaseFloatClassFieldExtractor.java
___________________________________________________________________
Name: svn:executable
+ *
Name: svn:keywords
+ id author date revision
Name: svn:eol-style
+ native
Added: 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 2006-10-18 22:06:58 UTC (rev 6902)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/extractors/BaseIntClassFieldExtractor.java 2006-10-18 22:13:06 UTC (rev 6903)
@@ -0,0 +1,52 @@
+package org.drools.base.extractors;
+
+import org.drools.RuntimeDroolsException;
+import org.drools.base.BaseClassFieldExtractor;
+
+public abstract class BaseIntClassFieldExtractor extends BaseClassFieldExtractor {
+
+
+ private static final long serialVersionUID = 203112843487706L;
+
+ public BaseIntClassFieldExtractor(Class clazz,
+ String fieldName) {
+ super( clazz,
+ fieldName );
+ }
+
+ public Object getValue(Object object) {
+ return new Long( getIntValue( object ) );
+ }
+
+ public boolean getBooleanValue(Object object) {
+ throw new RuntimeDroolsException("Conversion to boolean not supported from int");
+ }
+
+ public byte getByteValue(Object object) {
+ return (byte) getIntValue( object );
+
+ }
+
+ public char getCharValue(Object object) {
+ throw new RuntimeDroolsException("Conversion to char not supported from int");
+ }
+
+ public double getDoubleValue(Object object) {
+ return getIntValue( object );
+ }
+
+ public float getFloatValue(Object object) {
+ return getIntValue( object );
+ }
+
+ public abstract int getIntValue(Object object);
+
+ public long getLongValue(Object object) {
+ return getIntValue( object );
+ }
+
+ public short getShortValue(Object object) {
+ return (short) getIntValue( object );
+ }
+
+}
Property changes on: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/extractors/BaseIntClassFieldExtractor.java
___________________________________________________________________
Name: svn:executable
+ *
Name: svn:keywords
+ id author date revision
Name: svn:eol-style
+ native
Added: 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 2006-10-18 22:06:58 UTC (rev 6902)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/extractors/BaseLongClassFieldExtractors.java 2006-10-18 22:13:06 UTC (rev 6903)
@@ -0,0 +1,51 @@
+package org.drools.base.extractors;
+
+import org.drools.RuntimeDroolsException;
+import org.drools.base.BaseClassFieldExtractor;
+
+public abstract class BaseLongClassFieldExtractors extends BaseClassFieldExtractor {
+
+ private static final long serialVersionUID = 2031113412843487706L;
+
+ public BaseLongClassFieldExtractors(Class clazz,
+ String fieldName) {
+ super( clazz,
+ fieldName );
+ }
+
+ public Object getValue(Object object) {
+ return new Long( getLongValue( object ) );
+ }
+
+ public boolean getBooleanValue(Object object) {
+ throw new RuntimeDroolsException("Conversion to boolean not supported from long");
+ }
+
+ public byte getByteValue(Object object) {
+ return (byte) getLongValue( object );
+
+ }
+
+ public char getCharValue(Object object) {
+ throw new RuntimeDroolsException("Conversion to char not supported from long");
+ }
+
+ public double getDoubleValue(Object object) {
+ return getLongValue( object );
+ }
+
+ public float getFloatValue(Object object) {
+ return getLongValue( object );
+ }
+
+ public int getIntValue(Object object) {
+ return (int) getLongValue( object );
+ }
+
+ public abstract long getLongValue(Object object);
+
+ public short getShortValue(Object object) {
+ return (short) getLongValue( object );
+ }
+
+}
Property changes on: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/extractors/BaseLongClassFieldExtractors.java
___________________________________________________________________
Name: svn:executable
+ *
Name: svn:keywords
+ id author date revision
Name: svn:eol-style
+ native
Added: 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 2006-10-18 22:06:58 UTC (rev 6902)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/extractors/BaseObjectClassFieldExtractor.java 2006-10-18 22:13:06 UTC (rev 6903)
@@ -0,0 +1,98 @@
+package org.drools.base.extractors;
+
+import org.drools.RuntimeDroolsException;
+import org.drools.base.BaseClassFieldExtractor;
+
+public abstract class BaseObjectClassFieldExtractor extends BaseClassFieldExtractor {
+
+ private static final long serialVersionUID = 91214567753008212L;
+
+ public BaseObjectClassFieldExtractor(Class clazz,
+ String fieldName) {
+ super( clazz,
+ fieldName );
+ }
+
+ public abstract Object getValue(Object object);
+
+ public boolean getBooleanValue(Object object) {
+ // this can be improved by generating specific
+ // bytecode generation in the subclass, avoiding the if instanceof
+ Object value = getValue( object );
+ if( value instanceof Boolean ) {
+ return ((Boolean) value).booleanValue();
+ }
+ throw new RuntimeDroolsException("Conversion to boolean not supported from "+value.getClass().getName());
+ }
+
+ public byte getByteValue(Object object) {
+ // this can be improved by generating specific
+ // bytecode generation in the subclass, avoiding the if instanceof
+ Object value = getValue( object );
+ if( value instanceof Number ) {
+ return ((Number) value).byteValue();
+ }
+ throw new RuntimeDroolsException("Conversion to byte not supported from "+value.getClass().getName());
+ }
+
+ public char getCharValue(Object object) {
+ // this can be improved by generating specific
+ // bytecode generation in the subclass, avoiding the if instanceof
+ Object value = getValue( object );
+ if( value instanceof Character ) {
+ return ((Character) value).charValue();
+ }
+ throw new RuntimeDroolsException("Conversion to char not supported from "+value.getClass().getName());
+ }
+
+ public double getDoubleValue(Object object) {
+ // this can be improved by generating specific
+ // bytecode generation in the subclass, avoiding the if instanceof
+ Object value = getValue( object );
+ if( value instanceof Number ) {
+ return ((Number) value).doubleValue();
+ }
+ throw new RuntimeDroolsException("Conversion to double not supported from "+value.getClass().getName());
+ }
+
+ public float getFloatValue(Object object) {
+ // this can be improved by generating specific
+ // bytecode generation in the subclass, avoiding the if instanceof
+ Object value = getValue( object );
+ if( value instanceof Number ) {
+ return ((Number) value).floatValue();
+ }
+ throw new RuntimeDroolsException("Conversion to float not supported from "+value.getClass().getName());
+ }
+
+ public int getIntValue(Object object) {
+ // this can be improved by generating specific
+ // bytecode generation in the subclass, avoiding the if instanceof
+ Object value = getValue( object );
+ if( value instanceof Number ) {
+ return ((Number) value).intValue();
+ }
+ throw new RuntimeDroolsException("Conversion to int not supported from "+value.getClass().getName());
+ }
+
+ public long getLongValue(Object object) {
+ // this can be improved by generating specific
+ // bytecode generation in the subclass, avoiding the if instanceof
+ Object value = getValue( object );
+ if( value instanceof Number ) {
+ return ((Number) value).longValue();
+ }
+ throw new RuntimeDroolsException("Conversion to long not supported from "+value.getClass().getName());
+ }
+
+ public short getShortValue(Object object) {
+ // this can be improved by generating specific
+ // bytecode generation in the subclass, avoiding the if instanceof
+ Object value = getValue( object );
+ if( value instanceof Number ) {
+ return ((Number) value).shortValue();
+ }
+ throw new RuntimeDroolsException("Conversion to short not supported from "+value.getClass().getName());
+ }
+
+}
Property changes on: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/extractors/BaseObjectClassFieldExtractor.java
___________________________________________________________________
Name: svn:executable
+ *
Name: svn:keywords
+ id author date revision
Name: svn:eol-style
+ native
Added: 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 2006-10-18 22:06:58 UTC (rev 6902)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/extractors/BaseShortClassFieldExtractor.java 2006-10-18 22:13:06 UTC (rev 6903)
@@ -0,0 +1,51 @@
+package org.drools.base.extractors;
+
+import org.drools.RuntimeDroolsException;
+import org.drools.base.BaseClassFieldExtractor;
+
+public abstract class BaseShortClassFieldExtractor extends BaseClassFieldExtractor {
+
+ private static final long serialVersionUID = 2031113412843487706L;
+
+ public BaseShortClassFieldExtractor(Class clazz,
+ String fieldName) {
+ super( clazz,
+ fieldName );
+ }
+
+ public Object getValue(Object object) {
+ return new Long( getShortValue( object ) );
+ }
+
+ public boolean getBooleanValue(Object object) {
+ throw new RuntimeDroolsException("Conversion to boolean not supported from short");
+ }
+
+ public byte getByteValue(Object object) {
+ return (byte) getShortValue( object );
+
+ }
+
+ public char getCharValue(Object object) {
+ throw new RuntimeDroolsException("Conversion to char not supported from short");
+ }
+
+ public double getDoubleValue(Object object) {
+ return getShortValue( object );
+ }
+
+ public float getFloatValue(Object object) {
+ return getShortValue( object );
+ }
+
+ public int getIntValue(Object object) {
+ return getShortValue( object );
+ }
+
+ public long getLongValue(Object object) {
+ return getShortValue( object );
+ }
+
+ public abstract short getShortValue(Object object);
+
+}
Property changes on: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/extractors/BaseShortClassFieldExtractor.java
___________________________________________________________________
Name: svn:executable
+ *
Name: svn:keywords
+ id author date revision
Name: svn:eol-style
+ native
Added: 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 2006-10-18 22:06:58 UTC (rev 6902)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/field/BooleanFieldImpl.java 2006-10-18 22:13:06 UTC (rev 6903)
@@ -0,0 +1,93 @@
+/*
+ * Copyright 2005 JBoss Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.drools.base.field;
+
+import org.drools.RuntimeDroolsException;
+import org.drools.spi.FieldValue;
+
+/**
+ * @author etirelli
+ *
+ */
+public class BooleanFieldImpl
+ implements
+ FieldValue {
+
+ private static final long serialVersionUID = 320;
+ private boolean value;
+
+ public BooleanFieldImpl(final boolean value) {
+ this.value = value;
+ }
+
+ public Object getValue() {
+ return this.value ? Boolean.TRUE : Boolean.FALSE;
+ }
+
+ public String toString() {
+ return this.value ? Boolean.TRUE.toString() : Boolean.FALSE.toString();
+ }
+
+ public boolean getBooleanValue() {
+ return this.value;
+ }
+
+ public byte getByteValue() {
+ throw new RuntimeDroolsException( "Conversion to byte not supported for type boolean");
+ }
+
+ public char getCharValue() {
+ throw new RuntimeDroolsException( "Conversion to char not supported for type boolean");
+ }
+
+ public double getDoubleValue() {
+ throw new RuntimeDroolsException( "Conversion to double not supported for type boolean");
+ }
+
+ public float getFloatValue() {
+ throw new RuntimeDroolsException( "Conversion to float not supported for type boolean");
+ }
+
+ public int getIntValue() {
+ throw new RuntimeDroolsException( "Conversion to int not supported for type boolean");
+ }
+
+ public long getLongValue() {
+ throw new RuntimeDroolsException( "Conversion to long not supported for type boolean");
+ }
+
+ public short getShortValue() {
+ throw new RuntimeDroolsException( "Conversion to short not supported for type boolean");
+ }
+
+ public boolean equals(final Object object) {
+ if ( this == object ) {
+ return true;
+ }
+ if ( object == null || !(object instanceof BooleanFieldImpl) ) {
+ return false;
+ }
+ final BooleanFieldImpl other = (BooleanFieldImpl) object;
+
+ return this.value == other.value;
+ }
+
+ public int hashCode() {
+ return this.value ? 1 : 0;
+ }
+
+}
Property changes on: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/field/BooleanFieldImpl.java
___________________________________________________________________
Name: svn:executable
+ *
Name: svn:keywords
+ id author date revision
Name: svn:eol-style
+ native
Added: 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 2006-10-18 22:06:58 UTC (rev 6902)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/field/DoubleFieldImpl.java 2006-10-18 22:13:06 UTC (rev 6903)
@@ -0,0 +1,73 @@
+package org.drools.base.field;
+
+import org.drools.RuntimeDroolsException;
+import org.drools.spi.FieldValue;
+
+public class DoubleFieldImpl
+ implements
+ FieldValue {
+
+ private static final long serialVersionUID = 320;
+ private double value;
+
+ public DoubleFieldImpl(final double value) {
+ this.value = value;
+ }
+
+ public Object getValue() {
+ return new Double(this.value);
+ }
+
+ public String toString() {
+ return String.valueOf( this.value );
+ }
+
+ public boolean getBooleanValue() {
+ throw new RuntimeDroolsException( "Conversion to boolean not supported for type double");
+ }
+
+ public byte getByteValue() {
+ return (byte) this.value;
+ }
+
+ public char getCharValue() {
+ return (char) this.value;
+ }
+
+ public double getDoubleValue() {
+ return (double) this.value;
+ }
+
+ public float getFloatValue() {
+ return (float) this.value;
+ }
+
+ public int getIntValue() {
+ return (int) this.value;
+ }
+
+ public long getLongValue() {
+ return (long) this.value;
+ }
+
+ public short getShortValue() {
+ return (short) this.value;
+ }
+
+ public boolean equals(final Object object) {
+ if ( this == object ) {
+ return true;
+ }
+ if ( object == null || !(object instanceof DoubleFieldImpl) ) {
+ return false;
+ }
+ final DoubleFieldImpl other = (DoubleFieldImpl) object;
+
+ return this.value == other.value;
+ }
+
+ public int hashCode() {
+ return (int) this.value;
+ }
+
+}
Property changes on: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/field/DoubleFieldImpl.java
___________________________________________________________________
Name: svn:executable
+ *
Name: svn:keywords
+ id author date revision
Name: svn:eol-style
+ native
Added: 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 2006-10-18 22:06:58 UTC (rev 6902)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/field/LongFieldImpl.java 2006-10-18 22:13:06 UTC (rev 6903)
@@ -0,0 +1,72 @@
+package org.drools.base.field;
+
+import org.drools.RuntimeDroolsException;
+import org.drools.spi.FieldValue;
+
+public class LongFieldImpl
+ implements
+ FieldValue {
+
+ private static final long serialVersionUID = 320;
+ private long value;
+
+ public LongFieldImpl(final long value) {
+ this.value = value;
+ }
+
+ public Object getValue() {
+ return new Long(this.value);
+ }
+
+ public String toString() {
+ return String.valueOf( this.value );
+ }
+
+ public boolean getBooleanValue() {
+ throw new RuntimeDroolsException( "Conversion to boolean not supported for type long");
+ }
+
+ public byte getByteValue() {
+ return (byte) this.value;
+ }
+
+ public char getCharValue() {
+ return (char) this.value;
+ }
+
+ public double getDoubleValue() {
+ return (double) this.value;
+ }
+
+ public float getFloatValue() {
+ return (float) this.value;
+ }
+
+ public int getIntValue() {
+ return (int) this.value;
+ }
+
+ public long getLongValue() {
+ return (long) this.value;
+ }
+
+ public short getShortValue() {
+ return (short) this.value;
+ }
+
+ public boolean equals(final Object object) {
+ if ( this == object ) {
+ return true;
+ }
+ if ( object == null || !(object instanceof LongFieldImpl) ) {
+ return false;
+ }
+ final LongFieldImpl other = (LongFieldImpl) object;
+
+ return this.value == other.value;
+ }
+
+ public int hashCode() {
+ return (int) this.value;
+ }
+}
Property changes on: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/field/LongFieldImpl.java
___________________________________________________________________
Name: svn:executable
+ *
Name: svn:keywords
+ id author date revision
Name: svn:eol-style
+ native
Added: 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 2006-10-18 22:06:58 UTC (rev 6902)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/field/ObjectFieldImpl.java 2006-10-18 22:13:06 UTC (rev 6903)
@@ -0,0 +1,116 @@
+package org.drools.base.field;
+
+/*
+ * Copyright 2005 JBoss Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import org.drools.RuntimeDroolsException;
+import org.drools.spi.FieldValue;
+
+public class ObjectFieldImpl
+ implements
+ FieldValue {
+
+ private static final long serialVersionUID = 320;
+ private Object value;
+
+ public ObjectFieldImpl(final Object value) {
+ this.value = value;
+ }
+
+ public Object getValue() {
+ return this.value;
+ }
+
+ public String toString() {
+ return this.value.toString();
+ }
+
+ public boolean getBooleanValue() {
+ if( this.value instanceof Boolean ) {
+ return ((Boolean)this.value).booleanValue();
+ }
+ throw new RuntimeDroolsException("Conversion to boolean not supported for type: "+this.value.getClass());
+ }
+
+ public byte getByteValue() {
+ if( this.value instanceof Number ) {
+ return ((Number)this.value).byteValue();
+ }
+ throw new RuntimeDroolsException("Conversion to byte not supported for type: "+this.value.getClass());
+ }
+
+ public char getCharValue() {
+ if( this.value instanceof Character ) {
+ return ((Character)this.value).charValue();
+ }
+ throw new RuntimeDroolsException("Conversion to char not supported for type: "+this.value.getClass());
+ }
+
+ public double getDoubleValue() {
+ if( this.value instanceof Number ) {
+ return ((Number)this.value).doubleValue();
+ }
+ throw new RuntimeDroolsException("Conversion to double not supported for type: "+this.value.getClass());
+ }
+
+ public float getFloatValue() {
+ if( this.value instanceof Number ) {
+ return ((Number)this.value).floatValue();
+ }
+ throw new RuntimeDroolsException("Conversion to float not supported for type: "+this.value.getClass());
+ }
+
+ public int getIntValue() {
+ if( this.value instanceof Number ) {
+ return ((Number)this.value).intValue();
+ }
+ throw new RuntimeDroolsException("Conversion to int not supported for type: "+this.value.getClass());
+ }
+
+ public long getLongValue() {
+ if( this.value instanceof Number ) {
+ return ((Number)this.value).longValue();
+ }
+ throw new RuntimeDroolsException("Conversion to long not supported for type: "+this.value.getClass());
+ }
+
+ public short getShortValue() {
+ if( this.value instanceof Number ) {
+ return ((Number)this.value).shortValue();
+ }
+ throw new RuntimeDroolsException("Conversion to short not supported for type: "+this.value.getClass());
+ }
+
+ public boolean equals(final Object object) {
+ if ( this == object ) {
+ return true;
+ }
+ if ( object == null || !(object instanceof ObjectFieldImpl) ) {
+ return false;
+ }
+ final ObjectFieldImpl other = (ObjectFieldImpl) object;
+
+ return (((this.value == null) && (other.value == null)) || ((this.value != null) && (this.value.equals( other.value ))));
+ }
+
+ public int hashCode() {
+ if ( this.value != null ) {
+ return this.value.hashCode();
+ } else {
+ return 0;
+ }
+ }
+}
\ No newline at end of file
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 2006-10-18 22:06:58 UTC (rev 6902)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/facttemplates/FactTemplateFieldExtractor.java 2006-10-18 22:13:06 UTC (rev 6903)
@@ -33,4 +33,44 @@
public Class getExtractToClass() {
return Fact.class;//this.factTemplate.getFieldTemplate( fieldIndex ).getValueType().getClass();
}
+
+
+ public boolean getBooleanValue(Object object) {
+ return ((Boolean)((Fact) object).getFieldValue( this.fieldIndex )).booleanValue();
+ }
+
+
+ public byte getByteValue(Object object) {
+ return ((Number)((Fact) object).getFieldValue( this.fieldIndex )).byteValue();
+ }
+
+
+ public char getCharValue(Object object) {
+ return ((Character)((Fact) object).getFieldValue( this.fieldIndex )).charValue();
+ }
+
+
+ public double getDoubleValue(Object object) {
+ return ((Number)((Fact) object).getFieldValue( this.fieldIndex )).doubleValue();
+ }
+
+
+ public float getFloatValue(Object object) {
+ return ((Number)((Fact) object).getFieldValue( this.fieldIndex )).floatValue();
+ }
+
+
+ public int getIntValue(Object object) {
+ return ((Number)((Fact) object).getFieldValue( this.fieldIndex )).intValue();
+ }
+
+
+ public long getLongValue(Object object) {
+ return ((Number)((Fact) object).getFieldValue( this.fieldIndex )).longValue();
+ }
+
+
+ public short getShortValue(Object object) {
+ return ((Number)((Fact) object).getFieldValue( this.fieldIndex )).shortValue();
+ }
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/CompositeObjectSinkAdapter.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/CompositeObjectSinkAdapter.java 2006-10-18 22:06:58 UTC (rev 6902)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/CompositeObjectSinkAdapter.java 2006-10-18 22:13:06 UTC (rev 6903)
@@ -6,14 +6,14 @@
import org.drools.base.evaluators.Operator;
import org.drools.common.InternalFactHandle;
import org.drools.common.InternalWorkingMemory;
+import org.drools.examples.manners.Context;
import org.drools.rule.LiteralConstraint;
+import org.drools.spi.AlphaNodeFieldConstraint;
import org.drools.spi.Evaluator;
-import org.drools.spi.AlphaNodeFieldConstraint;
import org.drools.spi.FieldExtractor;
import org.drools.spi.PropagationContext;
import org.drools.util.Iterator;
import org.drools.util.LinkedList;
-import org.drools.util.LinkedListEntry;
import org.drools.util.LinkedListNode;
import org.drools.util.ObjectHashMap;
import org.drools.util.ObjectHashMap.ObjectEntry;
@@ -53,7 +53,7 @@
if ( !fieldIndex.isHashed() ) {
hashSinks( fieldIndex );
}
- Object value = literalConstraint.getField();
+ Object value = literalConstraint.getField().getValue();
// no need to check, we know the sink does not exist
hashedSinkMap.put( new HashKey( index,
value ),
@@ -86,7 +86,7 @@
if ( fieldConstraint.getClass() == LiteralConstraint.class ) {
LiteralConstraint literalConstraint = (LiteralConstraint) fieldConstraint;
Evaluator evaluator = literalConstraint.getEvaluator();
- Object value = literalConstraint.getField();
+ Object value = literalConstraint.getField().getValue();
if ( evaluator.getOperator() == Operator.EQUAL ) {
int index = literalConstraint.getFieldExtractor().getIndex();
@@ -135,7 +135,7 @@
LiteralConstraint literalConstraint = (LiteralConstraint) fieldConstraint;
Evaluator evaluator = literalConstraint.getEvaluator();
if ( evaluator.getOperator() == Operator.EQUAL && index == literalConstraint.getFieldExtractor().getIndex() ) {
- Object value = literalConstraint.getField();
+ Object value = literalConstraint.getField().getValue();
list.add( sink );
hashedSinkMap.put( new HashKey( index,
value ),
@@ -245,6 +245,7 @@
PropagationContext context,
InternalWorkingMemory workingMemory) {
Object object = handle.getObject();
+
if ( this.hashedFieldIndexes != null ) {
// Iterate the FieldIndexes to see if any are hashed
for ( FieldIndex fieldIndex = (FieldIndex) this.hashedFieldIndexes.getFirst(); fieldIndex != null && fieldIndex.isHashed(); fieldIndex = (FieldIndex) fieldIndex.getNext() ) {
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/LiteralConstraint.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/LiteralConstraint.java 2006-10-18 22:06:58 UTC (rev 6902)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/LiteralConstraint.java 2006-10-18 22:13:06 UTC (rev 6903)
@@ -16,15 +16,11 @@
* limitations under the License.
*/
-import org.drools.WorkingMemory;
-import org.drools.common.InternalFactHandle;
import org.drools.common.InternalWorkingMemory;
-import org.drools.reteoo.ReteTuple;
-import org.drools.spi.Evaluator;
import org.drools.spi.AlphaNodeFieldConstraint;
+import org.drools.spi.Evaluator;
import org.drools.spi.FieldExtractor;
import org.drools.spi.FieldValue;
-import org.drools.spi.Tuple;
public class LiteralConstraint
implements
@@ -58,7 +54,7 @@
return this.restriction.getEvaluator();
}
- public Object getField() {
+ public FieldValue getField() {
return this.restriction.getField();
}
@@ -81,7 +77,8 @@
public boolean isAllowed(final Object object,
final InternalWorkingMemory workingMemory) {
- return this.restriction.isAllowed( this.extractor.getValue( object ),
+ return this.restriction.isAllowed( this.extractor,
+ object,
workingMemory );
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/LiteralRestriction.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/LiteralRestriction.java 2006-10-18 22:06:58 UTC (rev 6902)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/LiteralRestriction.java 2006-10-18 22:13:06 UTC (rev 6903)
@@ -21,6 +21,7 @@
import org.drools.reteoo.ReteTuple;
import org.drools.rule.VariableConstraint.VariableContextEntry;
import org.drools.spi.Evaluator;
+import org.drools.spi.Extractor;
import org.drools.spi.FieldValue;
import org.drools.spi.Restriction;
import org.drools.spi.Tuple;
@@ -34,7 +35,7 @@
*/
private static final long serialVersionUID = 320;
- private final Object field;
+ private final FieldValue field;
private final Evaluator evaluator;
@@ -42,7 +43,7 @@
public LiteralRestriction(final FieldValue field,
final Evaluator evaluator) {
- this.field = field.getValue();
+ this.field = field;
this.evaluator = evaluator;
}
@@ -50,13 +51,14 @@
return this.evaluator;
}
- public Object getField() {
+ public FieldValue getField() {
return this.field;
}
- public boolean isAllowed(Object object,
+ public boolean isAllowed(Extractor extractor,
+ Object object,
InternalWorkingMemory workingMemoiry) {
- return this.evaluator.evaluate( object, field );
+ return this.evaluator.evaluate( extractor, object, field );
}
public boolean isAllowedCachedLeft(ContextEntry context, Object object) {
@@ -86,7 +88,7 @@
final int PRIME = 31;
int result = 1;
result = PRIME * result + this.evaluator.hashCode();
- result = PRIME * result + this.field.hashCode();
+ result = PRIME * result + this.field.getValue().hashCode();
return result;
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/ReturnValueConstraint.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/ReturnValueConstraint.java 2006-10-18 22:06:58 UTC (rev 6902)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/ReturnValueConstraint.java 2006-10-18 22:13:06 UTC (rev 6903)
@@ -78,7 +78,8 @@
public boolean isAllowed(final Object object,
final Tuple tuple,
final WorkingMemory workingMemory) {
- return this.restriction.isAllowed( this.fieldExtractor.getValue( object ),
+ return this.restriction.isAllowed( this.fieldExtractor,
+ object,
tuple,
workingMemory );
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/ReturnValueRestriction.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/ReturnValueRestriction.java 2006-10-18 22:06:58 UTC (rev 6902)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/ReturnValueRestriction.java 2006-10-18 22:13:06 UTC (rev 6903)
@@ -21,6 +21,7 @@
import org.drools.RuntimeDroolsException;
import org.drools.WorkingMemory;
import org.drools.spi.Evaluator;
+import org.drools.spi.Extractor;
import org.drools.spi.Restriction;
import org.drools.spi.ReturnValueExpression;
import org.drools.spi.Tuple;
@@ -89,11 +90,13 @@
return this.evaluator;
}
- public boolean isAllowed(final Object object,
+ public boolean isAllowed(final Extractor extractor,
+ final Object object,
final Tuple tuple,
final WorkingMemory workingMemory) {
try {
- return this.evaluator.evaluate( object,
+ return this.evaluator.evaluate( extractor,
+ object,
this.expression.evaluate( tuple,
this.requiredDeclarations,
workingMemory ) );
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 2006-10-18 22:06:58 UTC (rev 6902)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/VariableConstraint.java 2006-10-18 22:13:06 UTC (rev 6903)
@@ -34,6 +34,11 @@
private final FieldExtractor fieldExtractor;
private final VariableRestriction restriction;
+ private static final byte TYPE_BOOLEAN = 0;
+ private static final byte TYPE_FLOAT = 1;
+ private static final byte TYPE_INTEGER = 2;
+ private static final byte TYPE_OBJECT = 3;
+
public VariableConstraint(final FieldExtractor fieldExtractor,
final Declaration declaration,
final Evaluator evaluator) {
@@ -63,7 +68,7 @@
public boolean isAllowedCachedLeft(ContextEntry context,
Object object) {
return this.restriction.isAllowedCachedLeft( context,
- this.fieldExtractor.getValue( object ) );
+ object );
}
public boolean isAllowedCachedRight(ReteTuple tuple,
@@ -77,8 +82,22 @@
}
public ContextEntry getContextEntry() {
- return new VariableContextEntry( this.fieldExtractor,
- this.restriction.getRequiredDeclarations()[0] );
+ Class classType = this.fieldExtractor.getValueType().getClassType();
+ if ( classType.isPrimitive() ) {
+ if ( classType == Boolean.TYPE ) {
+ return new BooleanVariableContextEntry( this.fieldExtractor,
+ this.restriction.getRequiredDeclarations()[0] );
+ } else if ( (classType == Double.TYPE) || (classType == Float.TYPE) ) {
+ return new DoubleVariableContextEntry( this.fieldExtractor,
+ this.restriction.getRequiredDeclarations()[0] );
+ } else {
+ return new LongVariableContextEntry( this.fieldExtractor,
+ this.restriction.getRequiredDeclarations()[0] );
+ }
+ } else {
+ return new ObjectVariableContextEntry( this.fieldExtractor,
+ this.restriction.getRequiredDeclarations()[0] );
+ }
}
public int hashCode() {
@@ -103,16 +122,13 @@
return this.fieldExtractor.equals( other.fieldExtractor ) && this.restriction.equals( other.restriction );
}
- public static class VariableContextEntry
+ public static abstract class VariableContextEntry
implements
ContextEntry {
- public Object left;
- public Object right;
+ public FieldExtractor extractor;
+ public Declaration declaration;
+ private ContextEntry entry;
- private FieldExtractor extractor;
- private Declaration declaration;
- private ContextEntry entry;
-
public VariableContextEntry(FieldExtractor extractor,
Declaration declaration) {
this.extractor = extractor;
@@ -126,15 +142,82 @@
public void setNext(ContextEntry entry) {
this.entry = entry;
}
+ }
+ public static class ObjectVariableContextEntry extends VariableContextEntry {
+ public Object left;
+ public Object right;
+
+ public ObjectVariableContextEntry(FieldExtractor extractor,
+ Declaration declaration) {
+ super( extractor,
+ declaration );
+ }
+
public void updateFromTuple(ReteTuple tuple) {
- this.left = this.declaration.getValue( tuple.get( this.declaration ).getObject() );
+ this.left = this.declaration.getExtractor().getValue( tuple.get( this.declaration ).getObject() );
}
public void updateFromFactHandle(InternalFactHandle handle) {
this.right = this.extractor.getValue( handle.getObject() );
+ }
+ }
+ public static class LongVariableContextEntry extends VariableContextEntry {
+ public long left;
+ public long right;
+
+ public LongVariableContextEntry(FieldExtractor extractor,
+ Declaration declaration) {
+ super( extractor,
+ declaration );
}
+
+ public void updateFromTuple(ReteTuple tuple) {
+ this.left = this.declaration.getExtractor().getLongValue( tuple.get( this.declaration ).getObject() );
+ }
+
+ public void updateFromFactHandle(InternalFactHandle handle) {
+ this.right = this.extractor.getLongValue( handle.getObject() );
+ }
}
+ public static class DoubleVariableContextEntry extends VariableContextEntry {
+ public double left;
+ public double right;
+
+ public DoubleVariableContextEntry(FieldExtractor extractor,
+ Declaration declaration) {
+ super( extractor,
+ declaration );
+ }
+
+ public void updateFromTuple(ReteTuple tuple) {
+ this.left = this.declaration.getExtractor().getDoubleValue( tuple.get( this.declaration ).getObject() );
+ }
+
+ public void updateFromFactHandle(InternalFactHandle handle) {
+ this.right = this.extractor.getDoubleValue( handle.getObject() );
+ }
+ }
+
+ public static class BooleanVariableContextEntry extends VariableContextEntry {
+ public boolean left;
+ public boolean right;
+
+ public BooleanVariableContextEntry(FieldExtractor extractor,
+ Declaration declaration) {
+ super( extractor,
+ declaration );
+ }
+
+ public void updateFromTuple(ReteTuple tuple) {
+ this.left = this.declaration.getExtractor().getBooleanValue( tuple.get( this.declaration ).getObject() );
+ }
+
+ public void updateFromFactHandle(InternalFactHandle handle) {
+ this.right = this.extractor.getBooleanValue( handle.getObject() );
+ }
+ }
+
}
\ No newline at end of file
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 2006-10-18 22:06:58 UTC (rev 6902)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/VariableRestriction.java 2006-10-18 22:13:06 UTC (rev 6903)
@@ -18,13 +18,12 @@
import java.util.Arrays;
-import org.drools.WorkingMemory;
import org.drools.common.InternalWorkingMemory;
import org.drools.reteoo.ReteTuple;
import org.drools.rule.VariableConstraint.VariableContextEntry;
import org.drools.spi.Evaluator;
+import org.drools.spi.Extractor;
import org.drools.spi.Restriction;
-import org.drools.spi.Tuple;
public class VariableRestriction
implements
@@ -57,11 +56,19 @@
}
public boolean isAllowedCachedLeft(ContextEntry context, Object object) {
- return this.evaluator.evaluate( ((VariableContextEntry) context).left, object );
+// return this.evaluator.evaluate( ((VariableContextEntry) context).left,
+// ((VariableContextEntry) context).extractor,
+// object );
+ return this.evaluator.evaluateCachedLeft( (VariableContextEntry) context,
+ object );
}
public boolean isAllowedCachedRight(ReteTuple tuple, ContextEntry context) {
- return this.evaluator.evaluate( this.declaration.getValue( tuple.get( this.declaration ).getObject() ), ((VariableContextEntry) context).right );
+// return this.evaluator.evaluate( this.declaration.getExtractor(),
+// tuple.get( this.declaration ).getObject(),
+// ((VariableContextEntry) context).right );
+ return this.evaluator.evaluateCachedRight((VariableContextEntry) context,
+ tuple.get( this.declaration ).getObject());
}
public String toString() {
@@ -95,7 +102,8 @@
other.requiredDeclarations );
}
- public boolean isAllowed(Object object,
+ public boolean isAllowed(Extractor extractor,
+ Object object,
InternalWorkingMemory workingMemoiry) {
throw new UnsupportedOperationException("does not support method call isAllowed(Object object, InternalWorkingMemory workingMemoiry)" );
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/ColumnExtractor.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/ColumnExtractor.java 2006-10-18 22:06:58 UTC (rev 6902)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/ColumnExtractor.java 2006-10-18 22:13:06 UTC (rev 6903)
@@ -1,5 +1,6 @@
package org.drools.spi;
+import org.drools.RuntimeDroolsException;
import org.drools.base.ClassObjectType;
import org.drools.base.ValueType;
import org.drools.facttemplates.Fact;
@@ -45,14 +46,70 @@
public Class getExtractToClass() {
// @todo : this is a bit nasty, but does the trick
if ( objectType.getClass() == ClassObjectType.class ) {
- return ( ( ClassObjectType ) objectType ).getClassType();
+ return ((ClassObjectType) objectType).getClassType();
} else {
return Fact.class;
- }
+ }
}
public ValueType getValueType() {
return objectType.getValueType();
}
+ public boolean getBooleanValue(Object object) {
+ if( this.objectType.getValueType().isBoolean() ) {
+ return ((Boolean)object).booleanValue();
+ }
+ throw new RuntimeDroolsException("Conversion to boolean not supported for type: "+object.getClass());
+ }
+
+ public byte getByteValue(Object object) {
+ if( this.objectType.getValueType().isNumber() ) {
+ return ((Number)object).byteValue();
+ }
+ throw new RuntimeDroolsException("Conversion to byte not supported for type: "+object.getClass());
+ }
+
+ public char getCharValue(Object object) {
+ if( this.objectType.getValueType().isChar() ) {
+ return ((Character)object).charValue();
+ }
+ throw new RuntimeDroolsException("Conversion to char not supported for type: "+object.getClass());
+ }
+
+ public double getDoubleValue(Object object) {
+ if( this.objectType.getValueType().isNumber() ) {
+ return ((Number)object).doubleValue();
+ }
+ throw new RuntimeDroolsException("Conversion to double not supported for type: "+object.getClass());
+ }
+
+ public float getFloatValue(Object object) {
+ if( this.objectType.getValueType().isNumber() ) {
+ return ((Number)object).floatValue();
+ }
+ throw new RuntimeDroolsException("Conversion to float not supported for type: "+object.getClass());
+ }
+
+ public int getIntValue(Object object) {
+ if( this.objectType.getValueType().isNumber() ) {
+ return ((Number)object).intValue();
+ }
+ throw new RuntimeDroolsException("Conversion to int not supported for type: "+object.getClass());
+ }
+
+ public long getLongValue(Object object) {
+ if( this.objectType.getValueType().isNumber() ) {
+ return ((Number)object).longValue();
+ }
+ throw new RuntimeDroolsException("Conversion to long not supported for type: "+object.getClass());
+ }
+
+ public short getShortValue(Object object) {
+ if( this.objectType.getValueType().isNumber() ) {
+ return ((Number)object).shortValue();
+ }
+ throw new RuntimeDroolsException("Conversion to short not supported for type: "+object.getClass());
+ }
+
}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/Evaluator.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/Evaluator.java 2006-10-18 22:06:58 UTC (rev 6902)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/Evaluator.java 2006-10-18 22:13:06 UTC (rev 6903)
@@ -20,53 +20,54 @@
import org.drools.base.ValueType;
import org.drools.base.evaluators.Operator;
+import org.drools.rule.VariableConstraint.VariableContextEntry;
public interface Evaluator
extends
Serializable {
-// // Operators
-// public static final int EQUAL = 1;
-// public static final int NOT_EQUAL = 10;
-// public static final int LESS = 20;
-// public static final int LESS_OR_EQUAL = 30;
-// public static final int GREATER = 40;
-// public static final int GREATER_OR_EQUAL = 50;
-// public static final int CONTAINS = 60;
-// public static final int MATCHES = 70;
-// public static final int EXCLUDES = 80;
-//
-// // Types
-// public static final int CHAR_TYPE = 100;
-// public static final int BYTE_TYPE = 110;
-// public static final int SHORT_TYPE = 120;
-// public static final int INTEGER_TYPE = 130;
-// public static final int LONG_TYPE = 140;
-// public static final int FLOAT_TYPE = 150;
-// public static final int DOUBLE_TYPE = 160;
-// public static final int BOOLEAN_TYPE = 170;
-// public static final int STRING_TYPE = 180;
-// public static final int DATE_TYPE = 190;
-// public static final int ARRAY_TYPE = 200;
-// public static final int OBJECT_TYPE = 210;
-// public static final int NULL_TYPE = 300;
public ValueType getValueType();
public Operator getOperator();
/**
- * This method will apply the evaluator on the objects.
+ * This method will extract the value from the object1 using the
+ * extractor and compare it with the object2.
*
- * Typically, they follow this form:
- * Fact(object1 operator object2)
+ * @param extractor
+ * The extractor used to get the source value from the object
+ * @param object1
+ * The source object to evaluate
+ * @param object2
+ * The actual value to compare to
+ *
+ * @return Returns true if evaluation is successfull. false otherwise.
+ */
+ public boolean evaluate(Extractor extractor,
+ Object object1,
+ FieldValue value);
+
+ /**
+ * This method will extract the value from the object2 using the
+ * extractor and compare it with the object1.
*
- * Where operator selects the appropraite concrete evaluator, and object1, and object2
- * are parameters to this method.
- *
- * So Person(age < 42) will have object1==age field (of the Person fact object)
- * and "42" will be the object2 value.
+ * @param object1
+ * The actual value to compare to
+ * @param extractor
+ * The extractor used to get the source value from the object
+ * @param object2
+ * The source object to evaluate
+ *
+ * @return Returns true if evaluation is successfull. false otherwise.
*/
- public boolean evaluate(Object object1,
+ public boolean evaluate(FieldValue object1,
+ Extractor extractor,
Object object2);
+ public boolean evaluateCachedLeft(VariableContextEntry context,
+ Object object1);
+
+ public boolean evaluateCachedRight(VariableContextEntry context,
+ Object object2);
+
}
\ 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 2006-10-18 22:06:58 UTC (rev 6902)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/Extractor.java 2006-10-18 22:13:06 UTC (rev 6903)
@@ -23,10 +23,27 @@
public interface Extractor
extends
Serializable {
-
+
public Object getValue(Object object);
+ public char getCharValue(Object object);
+
+ public int getIntValue(Object object);
+
+ public byte getByteValue(Object object);
+
+ public short getShortValue(Object object);
+
+ public long getLongValue(Object object);
+
+ public float getFloatValue(Object object);
+
+ public double getDoubleValue(Object object);
+
+ public boolean getBooleanValue(Object object);
+
public ValueType getValueType();
-
+
public Class getExtractToClass();
+
}
\ No newline at end of file
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 2006-10-18 22:06:58 UTC (rev 6902)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/FieldValue.java 2006-10-18 22:13:06 UTC (rev 6903)
@@ -22,6 +22,23 @@
extends
Serializable {
- Object getValue();
+ public Object getValue();
+ public char getCharValue();
+
+ public int getIntValue();
+
+ public byte getByteValue();
+
+ public short getShortValue();
+
+ public long getLongValue();
+
+ public float getFloatValue();
+
+ public double getDoubleValue();
+
+ public boolean getBooleanValue();
+
+
}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/Restriction.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/Restriction.java 2006-10-18 22:06:58 UTC (rev 6902)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/Restriction.java 2006-10-18 22:13:06 UTC (rev 6903)
@@ -12,7 +12,7 @@
public interface Restriction extends Serializable {
Declaration[] getRequiredDeclarations();
- public boolean isAllowed(Object object, InternalWorkingMemory workingMemoiry);
+ public boolean isAllowed(Extractor extractor, Object object, InternalWorkingMemory workingMemoiry);
public boolean isAllowedCachedLeft(ContextEntry context, Object object);
Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/ClassFieldExtractorFactoryTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/ClassFieldExtractorFactoryTest.java 2006-10-18 22:06:58 UTC (rev 6902)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/ClassFieldExtractorFactoryTest.java 2006-10-18 22:13:06 UTC (rev 6903)
@@ -25,7 +25,7 @@
import org.drools.util.asm.TestInterface;
import org.drools.util.asm.TestInterfaceImpl;
-public class ClassFieldExtractorFactoryTest extends TestCase {
+public abstract class ClassFieldExtractorFactoryTest extends TestCase {
public void testIt() throws Exception {
FieldExtractor ex = ClassFieldExtractorFactory.getClassFieldExtractor( TestBean.class,
@@ -67,5 +67,5 @@
assertEquals( "hola",
ex.getValue( new BeanInherit() ) );
}
-
+
}
\ No newline at end of file
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 2006-10-18 22:06:58 UTC (rev 6902)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/TestBean.java 2006-10-18 22:13:06 UTC (rev 6903)
@@ -1,5 +1,8 @@
package org.drools.base;
+import java.util.Collections;
+import java.util.List;
+
/*
* Copyright 2005 JBoss Inc
*
@@ -17,9 +20,19 @@
*/
public class TestBean {
- private final String name = "michael";
- private final int age = 42;
+ private final String name = "michael";
+ private final int age = 42;
+ private final boolean booleanAttr = true;
+ private final byte byteAttr = 1;
+ private final char charAttr = 'a';
+ private final short shortAttr = 3;
+ private final int intAttr = 4;
+ private final long longAttr = 5;
+ private final float floatAttr = 6.0f;
+ private final double doubleAttr = 7.0;
+ private final List listAttr = Collections.EMPTY_LIST;
+
public String getName() {
return this.name;
}
@@ -27,4 +40,40 @@
public int getAge() {
return this.age;
}
+
+ public boolean isBooleanAttr() {
+ return booleanAttr;
+ }
+
+ public byte getByteAttr() {
+ return byteAttr;
+ }
+
+ public char getCharAttr() {
+ return charAttr;
+ }
+
+ public double getDoubleAttr() {
+ return doubleAttr;
+ }
+
+ public float getFloatAttr() {
+ return floatAttr;
+ }
+
+ public int getIntAttr() {
+ return intAttr;
+ }
+
+ public List getListAttr() {
+ return listAttr;
+ }
+
+ public long getLongAttr() {
+ return longAttr;
+ }
+
+ public short getShortAttr() {
+ return shortAttr;
+ }
}
\ No newline at end of file
Added: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/ValueTypeTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/ValueTypeTest.java 2006-10-18 22:06:58 UTC (rev 6902)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/ValueTypeTest.java 2006-10-18 22:13:06 UTC (rev 6903)
@@ -0,0 +1,37 @@
+package org.drools.base;
+
+import junit.framework.Assert;
+import junit.framework.TestCase;
+
+public class ValueTypeTest extends TestCase {
+
+ protected void setUp() throws Exception {
+ super.setUp();
+ }
+
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ }
+
+ public void testIsBoolean() {
+ Assert.assertTrue(ValueType.BOOLEAN_TYPE.isBoolean());
+ Assert.assertTrue(ValueType.PBOOLEAN_TYPE.isBoolean());
+ }
+
+ public void testIsNumber() {
+ Assert.assertTrue(ValueType.PBYTE_TYPE.isNumber());
+ Assert.assertTrue(ValueType.PSHORT_TYPE.isNumber());
+ Assert.assertTrue(ValueType.PINTEGER_TYPE.isNumber());
+ Assert.assertTrue(ValueType.PLONG_TYPE.isNumber());
+ Assert.assertTrue(ValueType.PFLOAT_TYPE.isNumber());
+ Assert.assertTrue(ValueType.PDOUBLE_TYPE.isNumber());
+ Assert.assertTrue(ValueType.BYTE_TYPE.isNumber());
+ Assert.assertTrue(ValueType.SHORT_TYPE.isNumber());
+ Assert.assertTrue(ValueType.INTEGER_TYPE.isNumber());
+ Assert.assertTrue(ValueType.LONG_TYPE.isNumber());
+ Assert.assertTrue(ValueType.FLOAT_TYPE.isNumber());
+ Assert.assertTrue(ValueType.DOUBLE_TYPE.isNumber());
+
+ }
+
+}
Property changes on: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/ValueTypeTest.java
___________________________________________________________________
Name: svn:executable
+ *
Name: svn:keywords
+ id author date revision
Name: svn:eol-style
+ native
Added: 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 2006-10-18 22:06:58 UTC (rev 6902)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/BooleanClassFieldExtractorTest.java 2006-10-18 22:13:06 UTC (rev 6903)
@@ -0,0 +1,96 @@
+package org.drools.base.extractors;
+
+import junit.framework.Assert;
+
+import org.drools.base.ClassFieldExtractorFactory;
+import org.drools.base.TestBean;
+import org.drools.spi.Extractor;
+
+public class BooleanClassFieldExtractorTest extends ClassFieldExtractorsBaseTest {
+ Extractor extractor = ClassFieldExtractorFactory.getClassFieldExtractor( TestBean.class, "booleanAttr" );
+ TestBean bean = new TestBean();
+
+ protected void setUp() throws Exception {
+ super.setUp();
+ }
+
+ public void testGetBooleanValue() {
+ try {
+ Assert.assertTrue( this.extractor.getBooleanValue( bean ) );
+ } catch (Exception e) {
+ fail("Should not throw exception");
+ }
+ }
+
+ public void testGetByteValue() {
+ try {
+ this.extractor.getByteValue( bean );
+ fail("Should have throw an exception");
+ } catch (Exception e) {
+ // success
+ }
+ }
+
+ public void testGetCharValue() {
+ try {
+ this.extractor.getCharValue( bean );
+ fail("Should have throw an exception");
+ } catch (Exception e) {
+ // success
+ }
+ }
+
+ public void testGetDoubleValue() {
+ try {
+ this.extractor.getDoubleValue( bean );
+ fail("Should have throw an exception");
+ } catch (Exception e) {
+ // success
+ }
+ }
+
+ public void testGetFloatValue() {
+ try {
+ this.extractor.getFloatValue( bean );
+ fail("Should have throw an exception");
+ } catch (Exception e) {
+ // success
+ }
+ }
+
+ public void testGetIntValue() {
+ try {
+ this.extractor.getIntValue( bean );
+ fail("Should have throw an exception");
+ } catch (Exception e) {
+ // success
+ }
+ }
+
+ public void testGetLongValue() {
+ try {
+ this.extractor.getLongValue( bean );
+ fail("Should have throw an exception");
+ } catch (Exception e) {
+ // success
+ }
+ }
+
+ public void testGetShortValue() {
+ try {
+ this.extractor.getShortValue( bean );
+ fail("Should have throw an exception");
+ } catch (Exception e) {
+ // success
+ }
+ }
+
+ public void testGetValue() {
+ try {
+ Assert.assertSame( Boolean.TRUE, this.extractor.getValue( bean ) );
+ } catch (Exception e) {
+ fail("Should not throw an exception");
+ }
+ }
+
+}
Property changes on: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/BooleanClassFieldExtractorTest.java
___________________________________________________________________
Name: svn:executable
+ *
Name: svn:keywords
+ id author date revision
Name: svn:eol-style
+ native
Added: 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 2006-10-18 22:06:58 UTC (rev 6902)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/ByteClassFieldExtractorTest.java 2006-10-18 22:13:06 UTC (rev 6903)
@@ -0,0 +1,92 @@
+package org.drools.base.extractors;
+
+import junit.framework.Assert;
+
+import org.drools.base.ClassFieldExtractorFactory;
+import org.drools.base.TestBean;
+import org.drools.spi.Extractor;
+
+public class ByteClassFieldExtractorTest extends ClassFieldExtractorsBaseTest {
+ Extractor extractor = ClassFieldExtractorFactory.getClassFieldExtractor( TestBean.class, "byteAttr" );
+ TestBean bean = new TestBean();
+
+ protected void setUp() throws Exception {
+ super.setUp();
+ }
+
+ public void testGetBooleanValue() {
+ try {
+ this.extractor.getBooleanValue( bean );
+ fail("Should have throw an exception");
+ } catch (Exception e) {
+ // success
+ }
+ }
+
+ public void testGetByteValue() {
+ try {
+ Assert.assertEquals( 1, this.extractor.getByteValue( bean ));
+ } catch (Exception e) {
+ fail("Should not throw an exception");
+ }
+ }
+
+ public void testGetCharValue() {
+ try {
+ this.extractor.getCharValue( bean );
+ fail("Should have throw an exception");
+ } catch (Exception e) {
+ // success
+ }
+ }
+
+ public void testGetDoubleValue() {
+ try {
+ Assert.assertEquals( 1.0, this.extractor.getDoubleValue( bean ), 0.01);
+ } catch (Exception e) {
+ fail("Should not throw an exception");
+ }
+ }
+
+ public void testGetFloatValue() {
+ try {
+ Assert.assertEquals( 1.0f, this.extractor.getFloatValue( bean ), 0.01);
+ } catch (Exception e) {
+ fail("Should not throw an exception");
+ }
+ }
+
+ public void testGetIntValue() {
+ try {
+ Assert.assertEquals( 1, this.extractor.getIntValue( bean ));
+ } catch (Exception e) {
+ fail("Should not throw an exception");
+ }
+ }
+
+ public void testGetLongValue() {
+ try {
+ Assert.assertEquals( 1, this.extractor.getLongValue( bean ));
+ } catch (Exception e) {
+ fail("Should not throw an exception");
+ }
+ }
+
+ public void testGetShortValue() {
+ try {
+ Assert.assertEquals( 1, this.extractor.getShortValue( bean ));
+ } catch (Exception e) {
+ fail("Should not throw an exception");
+ }
+ }
+
+ public void testGetValue() {
+ try {
+ Assert.assertEquals( new Byte((byte)1), this.extractor.getValue( bean ) );
+ Assert.assertTrue( this.extractor.getValue( bean ) instanceof Byte );
+ } catch (Exception e) {
+ fail("Should not throw an exception");
+ }
+ }
+
+}
Property changes on: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/ByteClassFieldExtractorTest.java
___________________________________________________________________
Name: svn:executable
+ *
Name: svn:keywords
+ id author date revision
Name: svn:eol-style
+ native
Added: 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 2006-10-18 22:06:58 UTC (rev 6902)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/CharClassFieldExtractorTest.java 2006-10-18 22:13:06 UTC (rev 6903)
@@ -0,0 +1,96 @@
+package org.drools.base.extractors;
+
+import junit.framework.Assert;
+
+import org.drools.base.ClassFieldExtractorFactory;
+import org.drools.base.TestBean;
+import org.drools.spi.Extractor;
+
+public class CharClassFieldExtractorTest extends ClassFieldExtractorsBaseTest {
+ Extractor extractor = ClassFieldExtractorFactory.getClassFieldExtractor( TestBean.class, "charAttr" );
+ TestBean bean = new TestBean();
+
+ protected void setUp() throws Exception {
+ super.setUp();
+ }
+
+ public void testGetBooleanValue() {
+ try {
+ this.extractor.getBooleanValue( bean );
+ fail("Should have throw an exception");
+ } catch (Exception e) {
+ // success
+ }
+ }
+
+ public void testGetByteValue() {
+ try {
+ this.extractor.getByteValue( bean );
+ fail("Should have throw an exception");
+ } catch (Exception e) {
+ // success
+ }
+ }
+
+ public void testGetCharValue() {
+ try {
+ Assert.assertEquals( 'a', this.extractor.getCharValue( bean ) );
+ } catch (Exception e) {
+ fail("Should not throw exception");
+ }
+ }
+
+ public void testGetDoubleValue() {
+ try {
+ this.extractor.getDoubleValue( bean );
+ fail("Should have throw an exception");
+ } catch (Exception e) {
+ // success
+ }
+ }
+
+ public void testGetFloatValue() {
+ try {
+ this.extractor.getFloatValue( bean );
+ fail("Should have throw an exception");
+ } catch (Exception e) {
+ // success
+ }
+ }
+
+ public void testGetIntValue() {
+ try {
+ this.extractor.getIntValue( bean );
+ fail("Should have throw an exception");
+ } catch (Exception e) {
+ // success
+ }
+ }
+
+ public void testGetLongValue() {
+ try {
+ this.extractor.getLongValue( bean );
+ fail("Should have throw an exception");
+ } catch (Exception e) {
+ // success
+ }
+ }
+
+ public void testGetShortValue() {
+ try {
+ this.extractor.getShortValue( bean );
+ fail("Should have throw an exception");
+ } catch (Exception e) {
+ // success
+ }
+ }
+
+ public void testGetValue() {
+ try {
+ Assert.assertEquals( new Character('a'), this.extractor.getValue( bean ) );
+ Assert.assertTrue( this.extractor.getValue( bean ) instanceof Character );
+ } catch (Exception e) {
+ fail("Should not throw an exception");
+ }
+ }
+}
Property changes on: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/CharClassFieldExtractorTest.java
___________________________________________________________________
Name: svn:executable
+ *
Name: svn:keywords
+ id author date revision
Name: svn:eol-style
+ native
Added: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/ClassFieldExtractorsBaseTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/ClassFieldExtractorsBaseTest.java 2006-10-18 22:06:58 UTC (rev 6902)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/ClassFieldExtractorsBaseTest.java 2006-10-18 22:13:06 UTC (rev 6903)
@@ -0,0 +1,26 @@
+package org.drools.base.extractors;
+
+import junit.framework.TestCase;
+
+public abstract class ClassFieldExtractorsBaseTest extends TestCase {
+
+ public abstract void testGetBooleanValue();
+
+ public abstract void testGetByteValue();
+
+ public abstract void testGetCharValue();
+
+ public abstract void testGetShortValue();
+
+ public abstract void testGetIntValue();
+
+ public abstract void testGetLongValue();
+
+ public abstract void testGetFloatValue();
+
+ public abstract void testGetDoubleValue();
+
+ public abstract void testGetValue();
+
+
+}
Property changes on: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/ClassFieldExtractorsBaseTest.java
___________________________________________________________________
Name: svn:executable
+ *
Name: svn:keywords
+ id author date revision
Name: svn:eol-style
+ native
Added: 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 2006-10-18 22:06:58 UTC (rev 6902)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/DoubleClassFieldExtractorTest.java 2006-10-18 22:13:06 UTC (rev 6903)
@@ -0,0 +1,93 @@
+package org.drools.base.extractors;
+
+import junit.framework.Assert;
+
+import org.drools.base.ClassFieldExtractorFactory;
+import org.drools.base.TestBean;
+import org.drools.spi.Extractor;
+
+public class DoubleClassFieldExtractorTest extends ClassFieldExtractorsBaseTest {
+ private static final double VALUE = 7;
+
+ Extractor extractor = ClassFieldExtractorFactory.getClassFieldExtractor( TestBean.class, "doubleAttr" );
+ TestBean bean = new TestBean();
+
+ protected void setUp() throws Exception {
+ super.setUp();
+ }
+
+ public void testGetBooleanValue() {
+ try {
+ this.extractor.getBooleanValue( bean );
+ fail("Should have throw an exception");
+ } catch (Exception e) {
+ // success
+ }
+ }
+
+ public void testGetByteValue() {
+ try {
+ Assert.assertEquals( (byte) VALUE, this.extractor.getByteValue( bean ));
+ } catch (Exception e) {
+ fail("Should not throw an exception");
+ }
+ }
+
+ public void testGetCharValue() {
+ try {
+ this.extractor.getCharValue( bean );
+ fail("Should have throw an exception");
+ } catch (Exception e) {
+ // success
+ }
+ }
+
+ public void testGetDoubleValue() {
+ try {
+ Assert.assertEquals( VALUE, this.extractor.getDoubleValue( bean ), 0.01);
+ } catch (Exception e) {
+ fail("Should not throw an exception");
+ }
+ }
+
+ public void testGetFloatValue() {
+ try {
+ Assert.assertEquals( VALUE, this.extractor.getFloatValue( bean ), 0.01);
+ } catch (Exception e) {
+ fail("Should not throw an exception");
+ }
+ }
+
+ public void testGetIntValue() {
+ try {
+ Assert.assertEquals( (int) VALUE, this.extractor.getIntValue( bean ));
+ } catch (Exception e) {
+ fail("Should not throw an exception");
+ }
+ }
+
+ public void testGetLongValue() {
+ try {
+ Assert.assertEquals( (long) VALUE, this.extractor.getLongValue( bean ));
+ } catch (Exception e) {
+ fail("Should not throw an exception");
+ }
+ }
+
+ public void testGetShortValue() {
+ try {
+ Assert.assertEquals( (short) VALUE, this.extractor.getShortValue( bean ));
+ } catch (Exception e) {
+ fail("Should not throw an exception");
+ }
+ }
+
+ public void testGetValue() {
+ try {
+ Assert.assertEquals( new Double((double)VALUE), this.extractor.getValue( bean ) );
+ Assert.assertTrue( this.extractor.getValue( bean ) instanceof Double );
+ } catch (Exception e) {
+ fail("Should not throw an exception");
+ }
+ }
+}
Property changes on: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/DoubleClassFieldExtractorTest.java
___________________________________________________________________
Name: svn:executable
+ *
Name: svn:keywords
+ id author date revision
Name: svn:eol-style
+ native
Added: 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 2006-10-18 22:06:58 UTC (rev 6902)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/FloatClassFieldExtractorTest.java 2006-10-18 22:13:06 UTC (rev 6903)
@@ -0,0 +1,93 @@
+package org.drools.base.extractors;
+
+import junit.framework.Assert;
+
+import org.drools.base.ClassFieldExtractorFactory;
+import org.drools.base.TestBean;
+import org.drools.spi.Extractor;
+
+public class FloatClassFieldExtractorTest extends ClassFieldExtractorsBaseTest {
+ private static final float VALUE = 6;
+
+ Extractor extractor = ClassFieldExtractorFactory.getClassFieldExtractor( TestBean.class, "floatAttr" );
+ TestBean bean = new TestBean();
+
+ protected void setUp() throws Exception {
+ super.setUp();
+ }
+
+ public void testGetBooleanValue() {
+ try {
+ this.extractor.getBooleanValue( bean );
+ fail("Should have throw an exception");
+ } catch (Exception e) {
+ // success
+ }
+ }
+
+ public void testGetByteValue() {
+ try {
+ Assert.assertEquals( (byte) VALUE, this.extractor.getByteValue( bean ));
+ } catch (Exception e) {
+ fail("Should not throw an exception");
+ }
+ }
+
+ public void testGetCharValue() {
+ try {
+ this.extractor.getCharValue( bean );
+ fail("Should have throw an exception");
+ } catch (Exception e) {
+ // success
+ }
+ }
+
+ public void testGetDoubleValue() {
+ try {
+ Assert.assertEquals( VALUE, this.extractor.getDoubleValue( bean ), 0.01);
+ } catch (Exception e) {
+ fail("Should not throw an exception");
+ }
+ }
+
+ public void testGetFloatValue() {
+ try {
+ Assert.assertEquals( VALUE, this.extractor.getFloatValue( bean ), 0.01);
+ } catch (Exception e) {
+ fail("Should not throw an exception");
+ }
+ }
+
+ public void testGetIntValue() {
+ try {
+ Assert.assertEquals( (int) VALUE, this.extractor.getIntValue( bean ));
+ } catch (Exception e) {
+ fail("Should not throw an exception");
+ }
+ }
+
+ public void testGetLongValue() {
+ try {
+ Assert.assertEquals( (long) VALUE, this.extractor.getLongValue( bean ));
+ } catch (Exception e) {
+ fail("Should not throw an exception");
+ }
+ }
+
+ public void testGetShortValue() {
+ try {
+ Assert.assertEquals( (short) VALUE, this.extractor.getShortValue( bean ));
+ } catch (Exception e) {
+ fail("Should not throw an exception");
+ }
+ }
+
+ public void testGetValue() {
+ try {
+ Assert.assertEquals( new Float((float)VALUE), this.extractor.getValue( bean ) );
+ Assert.assertTrue( this.extractor.getValue( bean ) instanceof Float );
+ } catch (Exception e) {
+ fail("Should not throw an exception");
+ }
+ }
+}
Property changes on: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/FloatClassFieldExtractorTest.java
___________________________________________________________________
Name: svn:executable
+ *
Name: svn:keywords
+ id author date revision
Name: svn:eol-style
+ native
Added: 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 2006-10-18 22:06:58 UTC (rev 6902)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/IntClassFieldExtractorTest.java 2006-10-18 22:13:06 UTC (rev 6903)
@@ -0,0 +1,94 @@
+package org.drools.base.extractors;
+
+import junit.framework.Assert;
+
+import org.drools.base.ClassFieldExtractorFactory;
+import org.drools.base.TestBean;
+import org.drools.spi.Extractor;
+
+public class IntClassFieldExtractorTest extends ClassFieldExtractorsBaseTest {
+ private static final int VALUE = 4;
+
+ Extractor extractor = ClassFieldExtractorFactory.getClassFieldExtractor( TestBean.class, "intAttr" );
+ TestBean bean = new TestBean();
+
+ protected void setUp() throws Exception {
+ super.setUp();
+ }
+
+ public void testGetBooleanValue() {
+ try {
+ this.extractor.getBooleanValue( bean );
+ fail("Should have throw an exception");
+ } catch (Exception e) {
+ // success
+ }
+ }
+
+ public void testGetByteValue() {
+ try {
+ Assert.assertEquals( VALUE, this.extractor.getByteValue( bean ));
+ } catch (Exception e) {
+ fail("Should not throw an exception");
+ }
+ }
+
+ public void testGetCharValue() {
+ try {
+ this.extractor.getCharValue( bean );
+ fail("Should have throw an exception");
+ } catch (Exception e) {
+ // success
+ }
+ }
+
+ public void testGetDoubleValue() {
+ try {
+ Assert.assertEquals( VALUE, this.extractor.getDoubleValue( bean ), 0.01);
+ } catch (Exception e) {
+ fail("Should not throw an exception");
+ }
+ }
+
+ public void testGetFloatValue() {
+ try {
+ Assert.assertEquals( VALUE, this.extractor.getFloatValue( bean ), 0.01);
+ } catch (Exception e) {
+ fail("Should not throw an exception");
+ }
+ }
+
+ public void testGetIntValue() {
+ try {
+ Assert.assertEquals( VALUE, this.extractor.getIntValue( bean ));
+ } catch (Exception e) {
+ fail("Should not throw an exception");
+ }
+ }
+
+ public void testGetLongValue() {
+ try {
+ Assert.assertEquals( VALUE, this.extractor.getLongValue( bean ));
+ } catch (Exception e) {
+ fail("Should not throw an exception");
+ }
+ }
+
+ public void testGetShortValue() {
+ try {
+ Assert.assertEquals( VALUE, this.extractor.getShortValue( bean ));
+ } catch (Exception e) {
+ fail("Should not throw an exception");
+ }
+ }
+
+ public void testGetValue() {
+ try {
+ Assert.assertEquals( new Integer((int)VALUE), this.extractor.getValue( bean ) );
+ Assert.assertTrue( this.extractor.getValue( bean ) instanceof Integer );
+ } catch (Exception e) {
+ fail("Should not throw an exception");
+ }
+ }
+
+}
Property changes on: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/IntClassFieldExtractorTest.java
___________________________________________________________________
Name: svn:executable
+ *
Name: svn:keywords
+ id author date revision
Name: svn:eol-style
+ native
Added: 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 2006-10-18 22:06:58 UTC (rev 6902)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/LongClassFieldExtractorTest.java 2006-10-18 22:13:06 UTC (rev 6903)
@@ -0,0 +1,93 @@
+package org.drools.base.extractors;
+
+import junit.framework.Assert;
+
+import org.drools.base.ClassFieldExtractorFactory;
+import org.drools.base.TestBean;
+import org.drools.spi.Extractor;
+
+public class LongClassFieldExtractorTest extends ClassFieldExtractorsBaseTest {
+ private static final long VALUE = 5;
+
+ Extractor extractor = ClassFieldExtractorFactory.getClassFieldExtractor( TestBean.class, "longAttr" );
+ TestBean bean = new TestBean();
+
+ protected void setUp() throws Exception {
+ super.setUp();
+ }
+
+ public void testGetBooleanValue() {
+ try {
+ this.extractor.getBooleanValue( bean );
+ fail("Should have throw an exception");
+ } catch (Exception e) {
+ // success
+ }
+ }
+
+ public void testGetByteValue() {
+ try {
+ Assert.assertEquals( VALUE, this.extractor.getByteValue( bean ));
+ } catch (Exception e) {
+ fail("Should not throw an exception");
+ }
+ }
+
+ public void testGetCharValue() {
+ try {
+ this.extractor.getCharValue( bean );
+ fail("Should have throw an exception");
+ } catch (Exception e) {
+ // success
+ }
+ }
+
+ public void testGetDoubleValue() {
+ try {
+ Assert.assertEquals( VALUE, this.extractor.getDoubleValue( bean ), 0.01);
+ } catch (Exception e) {
+ fail("Should not throw an exception");
+ }
+ }
+
+ public void testGetFloatValue() {
+ try {
+ Assert.assertEquals( VALUE, this.extractor.getFloatValue( bean ), 0.01);
+ } catch (Exception e) {
+ fail("Should not throw an exception");
+ }
+ }
+
+ public void testGetIntValue() {
+ try {
+ Assert.assertEquals( VALUE, this.extractor.getIntValue( bean ));
+ } catch (Exception e) {
+ fail("Should not throw an exception");
+ }
+ }
+
+ public void testGetLongValue() {
+ try {
+ Assert.assertEquals( VALUE, this.extractor.getLongValue( bean ));
+ } catch (Exception e) {
+ fail("Should not throw an exception");
+ }
+ }
+
+ public void testGetShortValue() {
+ try {
+ Assert.assertEquals( VALUE, this.extractor.getShortValue( bean ));
+ } catch (Exception e) {
+ fail("Should not throw an exception");
+ }
+ }
+
+ public void testGetValue() {
+ try {
+ Assert.assertEquals( new Long((short)VALUE), this.extractor.getValue( bean ) );
+ Assert.assertTrue( this.extractor.getValue( bean ) instanceof Long );
+ } catch (Exception e) {
+ fail("Should not throw an exception");
+ }
+ }
+}
Property changes on: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/LongClassFieldExtractorTest.java
___________________________________________________________________
Name: svn:executable
+ *
Name: svn:keywords
+ id author date revision
Name: svn:eol-style
+ native
Added: 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 2006-10-18 22:06:58 UTC (rev 6902)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/ObjectClassFieldExtractorTest.java 2006-10-18 22:13:06 UTC (rev 6903)
@@ -0,0 +1,100 @@
+package org.drools.base.extractors;
+
+import java.util.Collections;
+import java.util.List;
+
+import junit.framework.Assert;
+
+import org.drools.base.ClassFieldExtractorFactory;
+import org.drools.base.TestBean;
+import org.drools.spi.Extractor;
+
+public class ObjectClassFieldExtractorTest extends ClassFieldExtractorsBaseTest {
+ Extractor extractor = ClassFieldExtractorFactory.getClassFieldExtractor( TestBean.class, "listAttr" );
+ TestBean bean = new TestBean();
+
+ protected void setUp() throws Exception {
+ super.setUp();
+ }
+
+ public void testGetBooleanValue() {
+ try {
+ this.extractor.getBooleanValue( bean );
+ fail("Should have throw an exception");
+ } catch (Exception e) {
+ // success
+ }
+ }
+
+ public void testGetByteValue() {
+ try {
+ this.extractor.getByteValue( bean );
+ fail("Should have throw an exception");
+ } catch (Exception e) {
+ // success
+ }
+ }
+
+ public void testGetCharValue() {
+ try {
+ this.extractor.getCharValue( bean );
+ fail("Should have throw an exception");
+ } catch (Exception e) {
+ // success
+ }
+ }
+
+ public void testGetDoubleValue() {
+ try {
+ this.extractor.getDoubleValue( bean );
+ fail("Should have throw an exception");
+ } catch (Exception e) {
+ // success
+ }
+ }
+
+ public void testGetFloatValue() {
+ try {
+ this.extractor.getFloatValue( bean );
+ fail("Should have throw an exception");
+ } catch (Exception e) {
+ // success
+ }
+ }
+
+ public void testGetIntValue() {
+ try {
+ this.extractor.getIntValue( bean );
+ fail("Should have throw an exception");
+ } catch (Exception e) {
+ // success
+ }
+ }
+
+ public void testGetLongValue() {
+ try {
+ this.extractor.getLongValue( bean );
+ fail("Should have throw an exception");
+ } catch (Exception e) {
+ // success
+ }
+ }
+
+ public void testGetShortValue() {
+ try {
+ this.extractor.getShortValue( bean );
+ fail("Should have throw an exception");
+ } catch (Exception e) {
+ // success
+ }
+ }
+
+ public void testGetValue() {
+ try {
+ Assert.assertEquals( Collections.EMPTY_LIST, this.extractor.getValue( bean ) );
+ Assert.assertTrue( this.extractor.getValue( bean ) instanceof List );
+ } catch (Exception e) {
+ fail("Should not throw an exception");
+ }
+ }
+}
Property changes on: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/ObjectClassFieldExtractorTest.java
___________________________________________________________________
Name: svn:executable
+ *
Name: svn:keywords
+ id author date revision
Name: svn:eol-style
+ native
Added: 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 2006-10-18 22:06:58 UTC (rev 6902)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/ShortClassFieldExtractorTest.java 2006-10-18 22:13:06 UTC (rev 6903)
@@ -0,0 +1,93 @@
+package org.drools.base.extractors;
+
+import junit.framework.Assert;
+
+import org.drools.base.ClassFieldExtractorFactory;
+import org.drools.base.TestBean;
+import org.drools.spi.Extractor;
+
+public class ShortClassFieldExtractorTest extends ClassFieldExtractorsBaseTest {
+ private static final short VALUE = 3;
+
+ Extractor extractor = ClassFieldExtractorFactory.getClassFieldExtractor( TestBean.class, "shortAttr" );
+ TestBean bean = new TestBean();
+
+ protected void setUp() throws Exception {
+ super.setUp();
+ }
+
+ public void testGetBooleanValue() {
+ try {
+ this.extractor.getBooleanValue( bean );
+ fail("Should have throw an exception");
+ } catch (Exception e) {
+ // success
+ }
+ }
+
+ public void testGetByteValue() {
+ try {
+ Assert.assertEquals( VALUE, this.extractor.getByteValue( bean ));
+ } catch (Exception e) {
+ fail("Should not throw an exception");
+ }
+ }
+
+ public void testGetCharValue() {
+ try {
+ this.extractor.getCharValue( bean );
+ fail("Should have throw an exception");
+ } catch (Exception e) {
+ // success
+ }
+ }
+
+ public void testGetDoubleValue() {
+ try {
+ Assert.assertEquals( VALUE, this.extractor.getDoubleValue( bean ), 0.01);
+ } catch (Exception e) {
+ fail("Should not throw an exception");
+ }
+ }
+
+ public void testGetFloatValue() {
+ try {
+ Assert.assertEquals( VALUE, this.extractor.getFloatValue( bean ), 0.01);
+ } catch (Exception e) {
+ fail("Should not throw an exception");
+ }
+ }
+
+ public void testGetIntValue() {
+ try {
+ Assert.assertEquals( VALUE, this.extractor.getIntValue( bean ));
+ } catch (Exception e) {
+ fail("Should not throw an exception");
+ }
+ }
+
+ public void testGetLongValue() {
+ try {
+ Assert.assertEquals( VALUE, this.extractor.getLongValue( bean ));
+ } catch (Exception e) {
+ fail("Should not throw an exception");
+ }
+ }
+
+ public void testGetShortValue() {
+ try {
+ Assert.assertEquals( VALUE, this.extractor.getShortValue( bean ));
+ } catch (Exception e) {
+ fail("Should not throw an exception");
+ }
+ }
+
+ public void testGetValue() {
+ try {
+ Assert.assertEquals( new Short((short)VALUE), this.extractor.getValue( bean ) );
+ Assert.assertTrue( this.extractor.getValue( bean ) instanceof Short );
+ } catch (Exception e) {
+ fail("Should not throw an exception");
+ }
+ }
+}
Property changes on: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/ShortClassFieldExtractorTest.java
___________________________________________________________________
Name: svn:executable
+ *
Name: svn:keywords
+ id author date revision
Name: svn:eol-style
+ native
Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/examples/manners/BaseMannersTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/examples/manners/BaseMannersTest.java 2006-10-18 22:06:58 UTC (rev 6902)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/examples/manners/BaseMannersTest.java 2006-10-18 22:13:06 UTC (rev 6903)
@@ -38,8 +38,8 @@
import org.drools.base.ShadowProxyFactory;
import org.drools.base.ValueType;
import org.drools.base.evaluators.Operator;
-import org.drools.common.InternalWorkingMemory;
-import org.drools.reteoo.MemoryVisitor;
+import org.drools.base.field.BooleanFieldImpl;
+import org.drools.base.field.LongFieldImpl;
import org.drools.rule.Column;
import org.drools.rule.Declaration;
import org.drools.rule.InvalidRuleException;
@@ -48,15 +48,14 @@
import org.drools.rule.Package;
import org.drools.rule.Rule;
import org.drools.rule.VariableConstraint;
+import org.drools.spi.AlphaNodeFieldConstraint;
import org.drools.spi.BetaNodeFieldConstraint;
import org.drools.spi.Consequence;
import org.drools.spi.ConsequenceException;
import org.drools.spi.Evaluator;
-import org.drools.spi.AlphaNodeFieldConstraint;
import org.drools.spi.FieldExtractor;
import org.drools.spi.FieldValue;
import org.drools.spi.KnowledgeHelper;
-import org.drools.spi.MockField;
import org.drools.spi.Tuple;
public abstract class BaseMannersTest extends TestCase {
@@ -84,9 +83,9 @@
private Evaluator objectEqualEvaluator;
private Evaluator objectNotEqualEvaluator;
private Evaluator integerEqualEvaluator;
- private Evaluator integerNotEqualEvaluator;
+ //private Evaluator integerNotEqualEvaluator;
private Evaluator booleanEqualEvaluator;
- private Evaluator booleanNotEqualEvaluator;
+ //private Evaluator booleanNotEqualEvaluator;
protected void setUp() throws Exception {
Class shadow = ShadowProxyFactory.getProxy( Context.class );
@@ -117,12 +116,12 @@
this.chosenType = new ClassObjectType( Chosen.class,
shadow );
- this.integerEqualEvaluator = ValueType.INTEGER_TYPE.getEvaluator( Operator.EQUAL );
- this.integerNotEqualEvaluator = ValueType.INTEGER_TYPE.getEvaluator( Operator.NOT_EQUAL );
+ this.integerEqualEvaluator = ValueType.PINTEGER_TYPE.getEvaluator( Operator.EQUAL );
+ //this.integerNotEqualEvaluator = ValueType.INTEGER_TYPE.getEvaluator( Operator.NOT_EQUAL );
this.objectEqualEvaluator = ValueType.OBJECT_TYPE.getEvaluator( Operator.EQUAL );
this.objectNotEqualEvaluator = ValueType.OBJECT_TYPE.getEvaluator( Operator.NOT_EQUAL );
- this.booleanEqualEvaluator = ValueType.BOOLEAN_TYPE.getEvaluator( Operator.EQUAL );
- this.booleanNotEqualEvaluator = ValueType.BOOLEAN_TYPE.getEvaluator( Operator.NOT_EQUAL );
+ this.booleanEqualEvaluator = ValueType.PBOOLEAN_TYPE.getEvaluator( Operator.EQUAL );
+ //this.booleanNotEqualEvaluator = ValueType.BOOLEAN_TYPE.getEvaluator( Operator.NOT_EQUAL );
this.pkg = new Package( "Miss Manners" );
this.pkg.addRule( getAssignFirstSeatRule() );
@@ -220,22 +219,22 @@
String guestName = guest.getName();
Seating seating = new Seating( count.getValue(),
- new Integer(0),
+ 0,
true,
- new Integer(1),
+ 1,
guestName,
- new Integer(1),
+ 1,
guestName );
drools.assertObject( seating );
Path path = new Path( count.getValue(),
- new Integer(1),
+ 1,
guestName );
drools.assertObject( path );
- count.setValue( new Integer(count.getValue().intValue() + 1) );
+ count.setValue( count.getValue() );
drools.modifyObject( tuple.get( countDeclaration ),
count );
@@ -333,7 +332,7 @@
seatingColumn.addConstraint( getLiteralConstraint( seatingColumn,
"pathDone",
- new Boolean( true ),
+ true,
this.booleanEqualEvaluator ) );
setFieldDeclaration( seatingColumn,
@@ -481,8 +480,8 @@
Context context = (Context) drools.get( contextDeclaration );
Count count = (Count) drools.get( countDeclaration );
- Integer seatId = ((Integer) drools.get( seatingIdDeclaration ));
- Integer seatingRightSeat = ((Integer) drools.get( seatingRightSeatDeclaration ));
+ int seatId = seatingIdDeclaration.getExtractor().getIntValue( tuple.get( seatingIdDeclaration ).getObject() );
+ int seatingRightSeat = seatingRightSeatDeclaration.getExtractor().getIntValue( tuple.get( seatingRightSeatDeclaration ).getObject() );
String leftGuestName = (String) drools.get( leftGuestNameDeclaration );
String rightGuestName = (String) drools.get( seatingRightGuestNameDeclaration );
@@ -493,12 +492,12 @@
false,
seatingRightSeat,
rightGuestName,
- new Integer(seatingRightSeat.intValue() + 1),
+ seatingRightSeat + 1,
leftGuestName );
drools.assertObject( seating );
Path path = new Path( count.getValue(),
- new Integer(seatingRightSeat.intValue() + 1),
+ seatingRightSeat + 1,
leftGuestName );
drools.assertObject( path );
@@ -508,7 +507,7 @@
rightGuestHobby );
drools.assertObject( chosen );
- count.setValue( new Integer(count.getValue().intValue() + 1) );
+ count.setValue( count.getValue() + 1 );
// if ( count.getValue() == 5 ) {
// drools.retractObject( tuple.getFactHandleForDeclaration( countDeclaration ) );
@@ -594,7 +593,7 @@
seatingColumn.addConstraint( getLiteralConstraint( seatingColumn,
"pathDone",
- new Boolean( false ),
+ false,
this.booleanEqualEvaluator ) );
rule.addPattern( seatingColumn );
@@ -657,8 +656,8 @@
Rule rule = drools.getRule();
Tuple tuple = drools.getTuple();
- Integer id = ((Integer) drools.get( seatingIdDeclaration ));
- Integer seat = ((Integer) drools.get( pathSeatDeclaration ));
+ int id = seatingIdDeclaration.getExtractor().getIntValue( tuple.get( seatingIdDeclaration ).getObject() );
+ int seat = pathSeatDeclaration.getExtractor().getIntValue( tuple.get( pathSeatDeclaration ).getObject() );
String guestName = (String) drools.get( pathGuestNameDeclaration );
Path path = new Path( id,
@@ -728,7 +727,7 @@
seatingColumn.addConstraint( getLiteralConstraint( seatingColumn,
"pathDone",
- new Boolean( false ),
+ false,
this.booleanEqualEvaluator ) );
rule.addPattern( seatingColumn );
@@ -1030,7 +1029,7 @@
if ( !"seat".equals( st.nextToken() ) ) {
throw new IOException( "expected 'seat' in: " + line );
}
- list.add( new LastSeat( new Integer( st.nextToken() ) ) );
+ list.add( new LastSeat( Integer.parseInt( st.nextToken() ) ) );
}
if ( "context".equals( type ) ) {
@@ -1109,20 +1108,36 @@
private AlphaNodeFieldConstraint getLiteralConstraint(final Column column,
final String fieldName,
- final Object fieldValue,
+ final int fieldValue,
final Evaluator evaluator) throws IntrospectionException {
final Class clazz = ((ClassObjectType) column.getObjectType()).getClassType();
final FieldExtractor extractor = new ClassFieldExtractor( clazz,
fieldName );
- final FieldValue field = new MockField( fieldValue );
+ final FieldValue field = new LongFieldImpl( fieldValue );
return new LiteralConstraint( extractor,
evaluator,
field );
}
+ private AlphaNodeFieldConstraint getLiteralConstraint(final Column column,
+ final String fieldName,
+ final boolean fieldValue,
+ final Evaluator evaluator) throws IntrospectionException {
+ final Class clazz = ((ClassObjectType) column.getObjectType()).getClassType();
+
+ final FieldExtractor extractor = new ClassFieldExtractor( clazz,
+ fieldName );
+
+ final FieldValue field = new BooleanFieldImpl( fieldValue );
+
+ return new LiteralConstraint( extractor,
+ evaluator,
+ field );
+ }
+
private void setFieldDeclaration(final Column column,
final String fieldName,
final String identifier) throws IntrospectionException {
Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/examples/manners/Chosen.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/examples/manners/Chosen.java 2006-10-18 22:06:58 UTC (rev 6902)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/examples/manners/Chosen.java 2006-10-18 22:13:06 UTC (rev 6903)
@@ -26,7 +26,7 @@
*/
private static final long serialVersionUID = -169447202790860427L;
- private Integer id;
+ private int id;
private String guestName;
@@ -36,7 +36,7 @@
}
- public Chosen(final Integer id,
+ public Chosen(final int id,
final String guestName,
final Hobby hobby) {
this.id = id;
@@ -44,7 +44,7 @@
this.hobby = hobby;
}
- public Integer getId() {
+ public int getId() {
return this.id;
}
Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/examples/manners/Context.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/examples/manners/Context.java 2006-10-18 22:06:58 UTC (rev 6902)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/examples/manners/Context.java 2006-10-18 22:13:06 UTC (rev 6903)
@@ -25,15 +25,15 @@
*
*/
private static final long serialVersionUID = -5876473269153584875L;
- public static final Integer START_UP = new Integer(0);
- public static final Integer ASSIGN_SEATS = new Integer(1);
- public static final Integer MAKE_PATH = new Integer(2);
- public static final Integer CHECK_DONE = new Integer(3);
- public static final Integer PRINT_RESULTS = new Integer(4);
+ public static final int START_UP = 0;
+ public static final int ASSIGN_SEATS = 1;
+ public static final int MAKE_PATH = 2;
+ public static final int CHECK_DONE = 3;
+ public static final int PRINT_RESULTS = 4;
public static final String[] stateStrings = {"START_UP", "ASSIGN_SEATS", "MAKE_PATH", "CHECK_DONE", "PRINT_RESULTS"};
- private Integer state;
+ private int state;
public Context() {
}
@@ -46,24 +46,24 @@
}
}
- public Context(final Integer state) {
+ public Context(final int state) {
this.state = state;
}
- public void setState(final Integer state) {
+ public void setState(final int state) {
this.state = state;
}
- public boolean isState(final Integer state) {
+ public boolean isState(final int state) {
return this.state == state;
}
- public Integer getState() {
+ public int getState() {
return this.state;
}
public String getStringValue() {
- return Context.stateStrings[this.state.intValue()];
+ return Context.stateStrings[this.state];
}
public String toString() {
Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/examples/manners/Count.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/examples/manners/Count.java 2006-10-18 22:06:58 UTC (rev 6902)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/examples/manners/Count.java 2006-10-18 22:13:06 UTC (rev 6903)
@@ -16,21 +16,21 @@
package org.drools.examples.manners;
public class Count {
- private Integer value;
+ private int value;
public Count() {
}
- public Count(final Integer value) {
+ public Count(final int value) {
super();
this.value = value;
}
- public Integer getValue() {
+ public int getValue() {
return this.value;
}
- public void setValue(final Integer value) {
+ public void setValue(final int value) {
this.value = value;
}
@@ -51,7 +51,7 @@
}
public int hashCode() {
- return this.value.intValue();
+ return this.value;
}
}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/examples/manners/Hobby.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/examples/manners/Hobby.java 2006-10-18 22:06:58 UTC (rev 6902)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/examples/manners/Hobby.java 2006-10-18 22:13:06 UTC (rev 6903)
@@ -24,21 +24,21 @@
public static final String[] hobbyStrings = new String[]{Hobby.stringH1, Hobby.stringH2, Hobby.stringH3, Hobby.stringH4, Hobby.stringH5};
- public static final Hobby H1 = new Hobby( new Integer(1) );
- public static final Hobby H2 = new Hobby( new Integer(2) );
- public static final Hobby H3 = new Hobby( new Integer(3) );
- public static final Hobby H4 = new Hobby( new Integer(4) );
- public static final Hobby H5 = new Hobby( new Integer(5) );
+ public static final Hobby H1 = new Hobby( 1 );
+ public static final Hobby H2 = new Hobby( 2 );
+ public static final Hobby H3 = new Hobby( 3 );
+ public static final Hobby H4 = new Hobby( 4 );
+ public static final Hobby H5 = new Hobby( 5 );
private String hobbyStr;
- private Integer hobbyIndex;
+ private int hobbyIndex;
public Hobby() {
}
- private Hobby(final Integer hobby) {
- this.hobbyIndex = new Integer(hobby.intValue() - 1);
- this.hobbyStr = Hobby.hobbyStrings[this.hobbyIndex.intValue()];
+ private Hobby(final int hobby) {
+ this.hobbyIndex = hobby - 1;
+ this.hobbyStr = Hobby.hobbyStrings[this.hobbyIndex];
}
public String getHobby() {
@@ -70,7 +70,7 @@
}
public int hashCode() {
- return this.hobbyIndex.intValue();
+ return this.hobbyIndex;
}
}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/examples/manners/LastSeat.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/examples/manners/LastSeat.java 2006-10-18 22:06:58 UTC (rev 6902)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/examples/manners/LastSeat.java 2006-10-18 22:13:06 UTC (rev 6903)
@@ -24,16 +24,16 @@
*
*/
private static final long serialVersionUID = -3331801742327121724L;
- private Integer seat;
+ private int seat;
public LastSeat() {
}
- public LastSeat(final Integer seat) {
+ public LastSeat(final int seat) {
this.seat = seat;
}
- public Integer getSeat() {
+ public int getSeat() {
return this.seat;
}
Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/examples/manners/Path.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/examples/manners/Path.java 2006-10-18 22:06:58 UTC (rev 6902)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/examples/manners/Path.java 2006-10-18 22:13:06 UTC (rev 6903)
@@ -16,22 +16,22 @@
package org.drools.examples.manners;
public class Path {
- private Integer id;
+ private int id;
private String guestName;
- private Integer seat;
+ private int seat;
public Path() {
}
- public Path(final Integer id,
- final Integer seat,
+ public Path(final int id,
+ final int seat,
final String guestName) {
this.id = id;
this.seat = seat;
this.guestName = guestName;
}
- public Integer getSeat() {
+ public int getSeat() {
return this.seat;
}
@@ -39,7 +39,7 @@
return this.guestName;
}
- public Integer getId() {
+ public int getId() {
return this.id;
}
Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/examples/manners/ReteooMannersTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/examples/manners/ReteooMannersTest.java 2006-10-18 22:06:58 UTC (rev 6902)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/examples/manners/ReteooMannersTest.java 2006-10-18 22:13:06 UTC (rev 6903)
@@ -73,7 +73,7 @@
workingMemory.assertObject( object );
}
- workingMemory.assertObject( new Count( new Integer(1) ) );
+ workingMemory.assertObject( new Count( 1 ) );
final long start = System.currentTimeMillis();
workingMemory.fireAllRules();
Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/examples/manners/Seating.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/examples/manners/Seating.java 2006-10-18 22:06:58 UTC (rev 6902)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/examples/manners/Seating.java 2006-10-18 22:13:06 UTC (rev 6903)
@@ -25,9 +25,9 @@
*/
private static final long serialVersionUID = -21267542036195318L;
- private Integer id, pid;
+ private int id, pid;
- private Integer leftSeat, rightSeat;
+ private int leftSeat, rightSeat;
private String leftGuestName, rightGuestName;
@@ -36,12 +36,12 @@
public Seating() {
}
- public Seating(final Integer id,
- final Integer pid,
+ public Seating(final int id,
+ final int pid,
final boolean pathDone,
- final Integer leftSeat,
+ final int leftSeat,
final String leftGuestName,
- final Integer rightSeat,
+ final int rightSeat,
final String rightGuestName) {
super();
this.id = id;
@@ -61,7 +61,7 @@
this.pathDone = pathDone;
}
- public Integer getId() {
+ public int getId() {
return this.id;
}
@@ -69,11 +69,11 @@
return this.leftGuestName;
}
- public Integer getLeftSeat() {
+ public int getLeftSeat() {
return this.leftSeat;
}
- public Integer getPid() {
+ public int getPid() {
return this.pid;
}
@@ -81,7 +81,7 @@
return this.rightGuestName;
}
- public Integer getRightSeat() {
+ public int getRightSeat() {
return this.rightSeat;
}
Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/examples/manners/Sex.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/examples/manners/Sex.java 2006-10-18 22:06:58 UTC (rev 6902)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/examples/manners/Sex.java 2006-10-18 22:13:06 UTC (rev 6903)
@@ -16,24 +16,24 @@
package org.drools.examples.manners;
public class Sex {
- public static final Sex M = new Sex( new Integer(0) );
- public static final Sex F = new Sex( new Integer(1) );
+ public static final Sex M = new Sex( 0 );
+ public static final Sex F = new Sex( 1 );
public static final String stringM = "m";
public static final String stringF = "f";
public static final String[] sexList = new String[]{Sex.stringM, Sex.stringF};
- private Integer sex;
+ private int sex;
public Sex() {
}
- private Sex(final Integer sex) {
+ private Sex(final int sex) {
this.sex = sex;
}
public String getSex() {
- return Sex.sexList[this.sex.intValue()];
+ return Sex.sexList[this.sex];
}
public final static Sex resolve(final String sex) {
@@ -55,7 +55,7 @@
}
public int hashCode() {
- return this.sex.intValue();
+ return this.sex;
}
}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/rule/FieldConstraintTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/rule/FieldConstraintTest.java 2006-10-18 22:06:58 UTC (rev 6902)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/rule/FieldConstraintTest.java 2006-10-18 22:13:06 UTC (rev 6903)
@@ -29,6 +29,7 @@
import org.drools.base.ValueType;
import org.drools.base.evaluators.Operator;
import org.drools.common.InternalFactHandle;
+import org.drools.common.InternalWorkingMemory;
import org.drools.reteoo.InstrumentedReteTuple;
import org.drools.reteoo.ReteooRuleBase;
import org.drools.spi.Evaluator;
@@ -60,7 +61,7 @@
*/
public void testLiteralConstraint() throws IntrospectionException {
final ReteooRuleBase ruleBase = (ReteooRuleBase) RuleBaseFactory.newRuleBase();
- final WorkingMemory workingMemory = ruleBase.newWorkingMemory();
+ final InternalWorkingMemory workingMemory = (InternalWorkingMemory) ruleBase.newWorkingMemory();
final ClassFieldExtractor extractor = new ClassFieldExtractor( Cheese.class,
"type" );
@@ -80,7 +81,6 @@
// check constraint
assertTrue( constraint.isAllowed( cheddarHandle.getObject(),
- null,
workingMemory ) );
final Cheese stilton = new Cheese( "stilton",
@@ -90,7 +90,6 @@
// check constraint
assertFalse( constraint.isAllowed( stiltonHandle.getObject(),
- null,
workingMemory ) );
}
@@ -98,6 +97,51 @@
* <pre>
*
*
+ * Cheese( price == 5 )
+ *
+ *
+ * </pre>
+ *
+ * @throws IntrospectionException
+ */
+ public void testPrimitiveLiteralConstraint() throws IntrospectionException {
+ final ReteooRuleBase ruleBase = (ReteooRuleBase) RuleBaseFactory.newRuleBase();
+ final InternalWorkingMemory workingMemory = (InternalWorkingMemory) ruleBase.newWorkingMemory();
+
+ final ClassFieldExtractor extractor = new ClassFieldExtractor( Cheese.class,
+ "price" );
+
+ final FieldValue field = new MockField( new Integer(5) );
+
+ Evaluator evaluator = ValueType.PINTEGER_TYPE.getEvaluator( Operator.EQUAL );
+
+ final LiteralConstraint constraint = new LiteralConstraint( extractor,
+ evaluator,
+ field );
+
+ final Cheese cheddar = new Cheese( "cheddar",
+ 5 );
+
+ final InternalFactHandle cheddarHandle = (InternalFactHandle) workingMemory.assertObject( cheddar );
+
+ // check constraint
+ assertTrue( constraint.isAllowed( cheddarHandle.getObject(),
+ workingMemory ) );
+
+ final Cheese stilton = new Cheese( "stilton",
+ 10 );
+
+ final InternalFactHandle stiltonHandle = (InternalFactHandle) workingMemory.assertObject( stilton );
+
+ // check constraint
+ assertFalse( constraint.isAllowed( stiltonHandle.getObject(),
+ workingMemory ) );
+ }
+
+ /**
+ * <pre>
+ *
+ *
* (Cheese (price ?price1 )
* (Cheese (price ?price2&:(= ?price2 (* 2 ?price1) )
*
More information about the jboss-svn-commits
mailing list