[jboss-svn-commits] JBL Code SVN: r24122 - in labs/jbossrules/trunk/drools-core/src: test/java/org/drools/base and 1 other directory.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu Nov 27 10:24:11 EST 2008


Author: tirelli
Date: 2008-11-27 10:24:11 -0500 (Thu, 27 Nov 2008)
New Revision: 24122

Modified:
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/AfterEvaluatorDefinition.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/TemporalEvaluatorFactoryTest.java
Log:
JBRULES-1873: fixing 'after' evaluator and improving javadocs

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/AfterEvaluatorDefinition.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/AfterEvaluatorDefinition.java	2008-11-27 15:05:10 UTC (rev 24121)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/AfterEvaluatorDefinition.java	2008-11-27 15:24:11 UTC (rev 24122)
@@ -58,17 +58,26 @@
  * 
  * <ul><li>If two values are defined (like in the example bellow), the interval starts on the
  * first value and finishes on the second.</li>
- * <li>If only one value is defined, it is assumed that it is the finish value and the default
- * initial value is 1ms.</li>
+ * <li>If only one value is defined, we have two cases. If the value is negative, then the interval
+ * starts on the value and finishes on -1ms. If the value is positive, then the interval starts on 
+ * +1ms and finishes on the value.</li>
  * <li>If no value is defined, it is assumed that the initial value is 1ms and the final value
  * is the positive infinity.</li></ul>
  * 
- * <p><b>NOTE:</b> it is allowed to define negative distances for this operator. The only 
- * requirement is that the initial distance in the interval must always be lower than the 
- * final distance. Example:</p>
+ * <p><b>NOTE:</b> it is allowed to define negative distances for this operator. Example:</p>
  * 
  * <pre>$eventA : EventA( this after[ -3m30s, -2m ] $eventB )</pre>
  *
+ * <p><b>NOTE:</b> if the initial value is greater than the finish value, the engine automatically
+ * reverse them, as there is no reason to have the initial value greater than the finish value. Example: 
+ * the following two patterns are considered to have the same semantics:</p>
+ * 
+ * <pre>
+ * $eventA : EventA( this after[ -3m30s, -2m ] $eventB )
+ * $eventA : EventA( this after[ -2m, -3m30s ] $eventB )
+ * </pre>
+ * 
+ *
  * @author etirelli
  */
 public class AfterEvaluatorDefinition
@@ -323,12 +332,23 @@
                 this.finalRange = Long.MAX_VALUE;
                 return;
             } else if( parameters.length == 1 ) {
-                // up to that value
-                this.initRange = 1;
-                this.finalRange = parameters[0].longValue();
+                if( parameters[0].longValue() >= 0 ) {
+                    // up to that value
+                    this.initRange = 1;
+                    this.finalRange = parameters[0].longValue();
+                } else {
+                    // from that value up to now
+                    this.initRange = parameters[0].longValue();
+                    this.finalRange = -1;
+                }
             } else if( parameters.length == 2 ) {
-                this.initRange = parameters[0].longValue();
-                this.finalRange = parameters[1].longValue();
+                if( parameters[0].longValue() <= parameters[1].longValue() ) {
+                    this.initRange = parameters[0].longValue();
+                    this.finalRange = parameters[1].longValue();
+                } else {
+                    this.initRange = parameters[1].longValue();
+                    this.finalRange = parameters[0].longValue();
+                }
             } else {
                 throw new RuntimeDroolsException( "[After Evaluator]: Not possible to have more than 2 parameters: '" + paramText + "'" );
             }

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/TemporalEvaluatorFactoryTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/TemporalEvaluatorFactoryTest.java	2008-11-27 15:05:10 UTC (rev 24121)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/TemporalEvaluatorFactoryTest.java	2008-11-27 15:24:11 UTC (rev 24122)
@@ -67,18 +67,66 @@
                                                      5,
                                                      2 );
 
-        final Object[][] data = {{drool, "after", foo, Boolean.TRUE}, {drool, "after", bar, Boolean.FALSE}, {bar, "after", foo, Boolean.TRUE}, {bar, "after", drool, Boolean.FALSE}, {foo, "after", drool, Boolean.FALSE},
-                {foo, "after", bar, Boolean.FALSE}, {foo, "not after", bar, Boolean.TRUE}, {foo, "not after", drool, Boolean.TRUE}, {bar, "not after", drool, Boolean.TRUE}, {bar, "not after", foo, Boolean.FALSE},
-                {drool, "not after", foo, Boolean.FALSE}, {drool, "not after", bar, Boolean.TRUE}, {bar, "after[1]", foo, Boolean.TRUE}, {bar, "after[0]", foo, Boolean.FALSE}, {bar, "after[-3]", drool, Boolean.TRUE},
-                {bar, "after[-4]", drool, Boolean.FALSE}, {drool, "after[2]", foo, Boolean.TRUE}, {drool, "after[1]", foo, Boolean.FALSE}, {drool, "after[-2]", bar, Boolean.TRUE}, {drool, "after[-3]", bar, Boolean.FALSE},
-                {foo, "after[-6]", drool, Boolean.TRUE}, {foo, "after[-7]", drool, Boolean.FALSE}, {foo, "after[-6]", bar, Boolean.TRUE}, {foo, "after[-7]", bar, Boolean.FALSE}, {bar, "not after[1]", foo, Boolean.FALSE},
-                {bar, "not after[0]", foo, Boolean.TRUE}, {bar, "not after[-3]", drool, Boolean.FALSE}, {bar, "not after[-4]", drool, Boolean.TRUE}, {drool, "not after[2]", foo, Boolean.FALSE}, {drool, "not after[1]", foo, Boolean.TRUE},
-                {drool, "not after[-2]", bar, Boolean.FALSE}, {drool, "not after[-3]", bar, Boolean.TRUE}, {foo, "not after[-6]", drool, Boolean.FALSE}, {foo, "not after[-7]", drool, Boolean.TRUE}, {foo, "not after[-6]", bar, Boolean.FALSE},
-                {foo, "not after[-7]", bar, Boolean.TRUE}, {drool, "after[1,4]", foo, Boolean.TRUE}, {drool, "after[3,6]", foo, Boolean.FALSE}, {drool, "after[-3,1]", bar, Boolean.TRUE}, {drool, "after[-1,3]", bar, Boolean.FALSE},
-                {bar, "after[1,5]", foo, Boolean.TRUE}, {bar, "after[2,5]", foo, Boolean.FALSE}, {bar, "after[-3,0]", drool, Boolean.TRUE}, {bar, "after[-2,1]", drool, Boolean.FALSE}, {foo, "after[-7,-3]", bar, Boolean.TRUE},
-                {foo, "after[-5,-1]", bar, Boolean.FALSE}, {foo, "after[-6,-5]", drool, Boolean.TRUE}, {foo, "after[-5,-4]", drool, Boolean.FALSE}, {drool, "not after[1,4]", foo, Boolean.FALSE}, {drool, "not after[3,6]", foo, Boolean.TRUE},
-                {drool, "not after[-3,1]", bar, Boolean.FALSE}, {drool, "not after[-1,3]", bar, Boolean.TRUE}, {bar, "not after[1,5]", foo, Boolean.FALSE}, {bar, "not after[2,5]", foo, Boolean.TRUE}, {bar, "not after[-3,0]", drool, Boolean.FALSE},
-                {bar, "not after[-2,1]", drool, Boolean.TRUE}, {foo, "not after[-7,-3]", bar, Boolean.FALSE}, {foo, "not after[-5,-1]", bar, Boolean.TRUE}, {foo, "not after[-6,-5]", drool, Boolean.FALSE},
+        final Object[][] data = {
+                {drool, "after", foo, Boolean.TRUE}, 
+                {drool, "after", bar, Boolean.FALSE}, 
+                {bar, "after", foo, Boolean.TRUE}, 
+                {bar, "after", drool, Boolean.FALSE}, 
+                {foo, "after", drool, Boolean.FALSE},
+                {foo, "after", bar, Boolean.FALSE}, 
+                {foo, "not after", bar, Boolean.TRUE}, 
+                {foo, "not after", drool, Boolean.TRUE}, 
+                {bar, "not after", drool, Boolean.TRUE}, 
+                {bar, "not after", foo, Boolean.FALSE},
+                {drool, "not after", foo, Boolean.FALSE}, 
+                {drool, "not after", bar, Boolean.TRUE}, 
+                {bar, "after[1]", foo, Boolean.TRUE}, 
+                {bar, "after[0]", foo, Boolean.FALSE}, 
+                {bar, "after[-3]", drool, Boolean.TRUE},
+                {bar, "after[-4]", drool, Boolean.TRUE}, 
+                {drool, "after[2]", foo, Boolean.TRUE}, 
+                {drool, "after[1]", foo, Boolean.FALSE}, 
+                {drool, "after[-2]", bar, Boolean.TRUE}, 
+                {drool, "after[-3]", bar, Boolean.TRUE},
+                {foo, "after[-6]", drool, Boolean.TRUE}, 
+                {foo, "after[-7]", drool, Boolean.TRUE}, 
+                {foo, "after[-6]", bar, Boolean.TRUE}, 
+                {foo, "after[-7]", bar, Boolean.TRUE}, 
+                {bar, "not after[1]", foo, Boolean.FALSE},
+                {bar, "not after[0]", foo, Boolean.TRUE}, 
+                {bar, "not after[-3]", drool, Boolean.FALSE}, 
+                {bar, "not after[-4]", drool, Boolean.FALSE}, 
+                {drool, "not after[2]", foo, Boolean.FALSE}, 
+                {drool, "not after[1]", foo, Boolean.TRUE},
+                {drool, "not after[-2]", bar, Boolean.FALSE}, 
+                {drool, "not after[-3]", bar, Boolean.FALSE}, 
+                {foo, "not after[-6]", drool, Boolean.FALSE}, 
+                {foo, "not after[-7]", drool, Boolean.FALSE}, 
+                {foo, "not after[-6]", bar, Boolean.FALSE},
+                {foo, "not after[-7]", bar, Boolean.FALSE}, 
+                {drool, "after[1,4]", foo, Boolean.TRUE}, 
+                {drool, "after[3,6]", foo, Boolean.FALSE}, 
+                {drool, "after[-3,1]", bar, Boolean.TRUE},
+                {drool, "after[-1,3]", bar, Boolean.FALSE},
+                {bar, "after[1,5]", foo, Boolean.TRUE}, 
+                {bar, "after[2,5]", foo, Boolean.FALSE}, 
+                {bar, "after[-3,0]", drool, Boolean.TRUE}, 
+                {bar, "after[-2,1]", drool, Boolean.FALSE}, 
+                {foo, "after[-7,-3]", bar, Boolean.TRUE},
+                {foo, "after[-5,-1]", bar, Boolean.FALSE}, 
+                {foo, "after[-6,-5]", drool, Boolean.TRUE},
+                {foo, "after[-5,-4]", drool, Boolean.FALSE}, 
+                {drool, "not after[1,4]", foo, Boolean.FALSE}, 
+                {drool, "not after[3,6]", foo, Boolean.TRUE},
+                {drool, "not after[-3,1]", bar, Boolean.FALSE}, 
+                {drool, "not after[-1,3]", bar, Boolean.TRUE}, 
+                {bar, "not after[1,5]", foo, Boolean.FALSE}, 
+                {bar, "not after[2,5]", foo, Boolean.TRUE}, 
+                {bar, "not after[-3,0]", drool, Boolean.FALSE},
+                {bar, "not after[-2,1]", drool, Boolean.TRUE}, 
+                {foo, "not after[-7,-3]", bar, Boolean.FALSE}, 
+                {foo, "not after[-5,-1]", bar, Boolean.TRUE}, 
+                {foo, "not after[-6,-5]", drool, Boolean.FALSE},
                 {foo, "not after[-5,-4]", drool, Boolean.TRUE},};
 
         runEvaluatorTest( data,




More information about the jboss-svn-commits mailing list