[jboss-svn-commits] JBL Code SVN: r17197 - labs/jbossrules/branches/temporal_rete/drools-core/src/main/java/org/drools/base/evaluators.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Wed Dec 12 07:25:26 EST 2007
Author: tirelli
Date: 2007-12-12 07:25:25 -0500 (Wed, 12 Dec 2007)
New Revision: 17197
Modified:
labs/jbossrules/branches/temporal_rete/drools-core/src/main/java/org/drools/base/evaluators/AfterEvaluatorDefinition.java
Log:
JBRULES-1374: fixing 'not after' evaluator
Modified: labs/jbossrules/branches/temporal_rete/drools-core/src/main/java/org/drools/base/evaluators/AfterEvaluatorDefinition.java
===================================================================
--- labs/jbossrules/branches/temporal_rete/drools-core/src/main/java/org/drools/base/evaluators/AfterEvaluatorDefinition.java 2007-12-12 10:19:02 UTC (rev 17196)
+++ labs/jbossrules/branches/temporal_rete/drools-core/src/main/java/org/drools/base/evaluators/AfterEvaluatorDefinition.java 2007-12-12 12:25:25 UTC (rev 17197)
@@ -87,15 +87,9 @@
String key = isNegated + ":" + parameterText;
Evaluator eval = this.cache.get( key );
if ( eval == null ) {
- if ( isNegated ) {
- eval = new NotAfterEvaluator( type,
- isNegated,
- parameterText );
- } else {
- eval = new AfterEvaluator( type,
- isNegated,
- parameterText );
- }
+ eval = new AfterEvaluator( type,
+ isNegated,
+ parameterText );
this.cache.put( key,
eval );
}
@@ -168,7 +162,7 @@
return false;
}
long dist = ((EventFactHandle) ((ObjectVariableContextEntry) context).right).getStartTimestamp() - ((EventFactHandle) left).getEndTimestamp();
- return dist >= this.initRange && dist <= this.finalRange;
+ return this.getOperator().isNegated() ^ ( dist >= this.initRange && dist <= this.finalRange );
}
public boolean evaluateCachedLeft(InternalWorkingMemory workingMemory,
@@ -180,7 +174,7 @@
}
long dist = ((EventFactHandle) right).getStartTimestamp() - ((EventFactHandle) ((ObjectVariableContextEntry) context).left).getEndTimestamp();
- return dist >= this.initRange && dist <= this.finalRange;
+ return this.getOperator().isNegated() ^ ( dist >= this.initRange && dist <= this.finalRange );
}
public boolean evaluate(InternalWorkingMemory workingMemory,
@@ -193,11 +187,11 @@
return false;
}
long dist = ((EventFactHandle) object1).getStartTimestamp() - ((EventFactHandle) object2).getEndTimestamp();
- return dist >= this.initRange && dist <= this.finalRange;
+ return this.getOperator().isNegated() ^ ( dist >= this.initRange && dist <= this.finalRange );
}
public String toString() {
- return "after[" + initRange + ", " + finalRange + "]";
+ return this.getOperator().toString()+ "[" + initRange + ", " + finalRange + "]";
}
/* (non-Javadoc)
@@ -259,131 +253,4 @@
}
- /**
- * Implements the 'after' evaluator itself
- */
- public static class NotAfterEvaluator extends BaseEvaluator {
- private static final long serialVersionUID = -4833205637340977934L;
-
- private long initRange;
- private long finalRange;
-
- public NotAfterEvaluator(final ValueType type,
- final boolean isNegated,
- final String parameters) {
- super( type,
- isNegated ? NOT_AFTER : AFTER );
- this.parseParameters( parameters );
- }
-
- @Override
- public Object prepareObject(InternalFactHandle handle) {
- return handle;
- }
-
- public boolean evaluate(InternalWorkingMemory workingMemory,
- final Extractor extractor,
- final Object object1,
- final FieldValue object2) {
- throw new RuntimeDroolsException( "The 'after' operator can only be used to compare one event to another, and never to compare to literal constraints." );
- }
-
- public boolean evaluateCachedRight(InternalWorkingMemory workingMemory,
- final VariableContextEntry context,
- final Object left) {
- if ( context.rightNull ) {
- return false;
- }
- long dist = ((EventFactHandle) ((ObjectVariableContextEntry) context).right).getStartTimestamp() - ((EventFactHandle) left).getEndTimestamp();
- return dist < this.initRange || dist > this.finalRange;
- }
-
- public boolean evaluateCachedLeft(InternalWorkingMemory workingMemory,
- final VariableContextEntry context,
- final Object right) {
- if ( context.extractor.isNullValue( workingMemory,
- right ) ) {
- return false;
- }
- long dist = ((EventFactHandle) right).getStartTimestamp() - ((EventFactHandle) ((ObjectVariableContextEntry) context).left).getEndTimestamp();
-
- return dist < this.initRange || dist > this.finalRange;
- }
-
- public boolean evaluate(InternalWorkingMemory workingMemory,
- final Extractor extractor1,
- final Object object1,
- final Extractor extractor2,
- final Object object2) {
- if ( extractor1.isNullValue( workingMemory,
- object1 ) ) {
- return false;
- }
- long dist = ((EventFactHandle) object1).getStartTimestamp() - ((EventFactHandle) object2).getEndTimestamp();
- return dist < this.initRange || dist > this.finalRange;
- }
-
- public String toString() {
- return "not after[" + initRange + ", " + finalRange + "]";
- }
-
- /* (non-Javadoc)
- * @see java.lang.Object#hashCode()
- */
- @Override
- public int hashCode() {
- final int PRIME = 31;
- int result = super.hashCode();
- result = PRIME * result + (int) (finalRange ^ (finalRange >>> 32));
- result = PRIME * result + (int) (initRange ^ (initRange >>> 32));
- return result;
- }
-
- /* (non-Javadoc)
- * @see java.lang.Object#equals(java.lang.Object)
- */
- @Override
- public boolean equals(Object obj) {
- if ( this == obj ) return true;
- if ( !super.equals( obj ) ) return false;
- if ( getClass() != obj.getClass() ) return false;
- final NotAfterEvaluator other = (NotAfterEvaluator) obj;
- return finalRange == other.finalRange && initRange == other.initRange;
- }
-
- /**
- * This methods tries to parse the string of parameters to customize
- * the evaluator.
- *
- * @param parameters
- */
- private void parseParameters(String parameters) {
- if ( parameters == null || parameters.trim().length() == 0 ) {
- // open bounded range
- this.initRange = 1;
- this.finalRange = Long.MAX_VALUE;
- return;
- }
-
- try {
- String[] ranges = parameters.split( "," );
- if ( ranges.length == 1 ) {
- // deterministic point in time
- this.initRange = Long.parseLong( ranges[0] );
- this.finalRange = this.initRange;
- } else if ( ranges.length == 2 ) {
- // regular range
- this.initRange = Long.parseLong( ranges[0] );
- this.finalRange = Long.parseLong( ranges[1] );
- } else {
- throw new RuntimeDroolsException( "[Not After Evaluator]: Not possible to parse parameters: '" + parameters + "'" );
- }
- } catch ( NumberFormatException e ) {
- throw new RuntimeDroolsException( "[Not After Evaluator]: Not possible to parse parameters: '" + parameters + "'",
- e );
- }
- }
-
- }
-
}
More information about the jboss-svn-commits
mailing list