[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