[jboss-svn-commits] JBL Code SVN: r17090 - in labs/jbossrules/branches/temporal_rete/drools-compiler/src: main/java/org/drools/lang and 7 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Fri Dec 7 09:11:17 EST 2007


Author: tirelli
Date: 2007-12-07 09:11:16 -0500 (Fri, 07 Dec 2007)
New Revision: 17090

Modified:
   labs/jbossrules/branches/temporal_rete/drools-compiler/src/main/java/org/drools/compiler/PackageBuilderConfiguration.java
   labs/jbossrules/branches/temporal_rete/drools-compiler/src/main/java/org/drools/lang/MVELDumper.java
   labs/jbossrules/branches/temporal_rete/drools-compiler/src/main/java/org/drools/rule/builder/PatternBuilder.java
   labs/jbossrules/branches/temporal_rete/drools-compiler/src/main/java/org/drools/rule/builder/QueryBuilder.java
   labs/jbossrules/branches/temporal_rete/drools-compiler/src/main/java/org/drools/rule/builder/RuleBuildContext.java
   labs/jbossrules/branches/temporal_rete/drools-compiler/src/main/resources/META-INF/drools.default.packagebuilder.conf
   labs/jbossrules/branches/temporal_rete/drools-compiler/src/main/resources/org/drools/lang/DRL.g
   labs/jbossrules/branches/temporal_rete/drools-compiler/src/test/java/org/drools/integrationtests/CepEspTest.java
   labs/jbossrules/branches/temporal_rete/drools-compiler/src/test/java/org/drools/integrationtests/MVELTest.java
   labs/jbossrules/branches/temporal_rete/drools-compiler/src/test/java/org/drools/integrationtests/eventgenerator/SimpleEventGenerator.java
   labs/jbossrules/branches/temporal_rete/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELPredicateBuilderTest.java
   labs/jbossrules/branches/temporal_rete/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELReturnValueBuilderTest.java
   labs/jbossrules/branches/temporal_rete/drools-compiler/src/test/resources/org/drools/integrationtests/test_CEP_SimpleTimeWindow.drl
Log:
JBRULES-1356: adding support to pluggable evaluators in core

Modified: labs/jbossrules/branches/temporal_rete/drools-compiler/src/main/java/org/drools/compiler/PackageBuilderConfiguration.java
===================================================================
--- labs/jbossrules/branches/temporal_rete/drools-compiler/src/main/java/org/drools/compiler/PackageBuilderConfiguration.java	2007-12-07 14:10:27 UTC (rev 17089)
+++ labs/jbossrules/branches/temporal_rete/drools-compiler/src/main/java/org/drools/compiler/PackageBuilderConfiguration.java	2007-12-07 14:11:16 UTC (rev 17090)
@@ -25,6 +25,8 @@
 
 import org.drools.RuntimeDroolsException;
 import org.drools.base.accumulators.AccumulateFunction;
+import org.drools.base.evaluators.EvaluatorDefinition;
+import org.drools.base.evaluators.EvaluatorDefinitionRegistry;
 import org.drools.util.ChainedProperties;
 
 /**
@@ -38,6 +40,7 @@
  * 
  * drools.dialect.default = <String>
  * drools.accumulate.function.<function name> = <qualified class>
+ * drools.evaluator.<ident> = <qualified class>
  * 
  * default dialect is java.
  * Available preconfigured Accumulate functions are:
@@ -51,6 +54,8 @@
 
     private static final String ACCUMULATE_FUNCTION_PREFIX = "drools.accumulate.function.";
     
+    private static final String EVALUATOR_DEFINITION_PREFIX = "drools.evaluator.";
+    
     private Map                 dialectConfigurations;
 
     private String              defaultDialect;
@@ -59,7 +64,9 @@
 
     private ChainedProperties   chainedProperties;
 
-    private Map                 accumulateFunctions;
+    private Map<String, String> accumulateFunctions;
+    
+    private EvaluatorDefinitionRegistry   evaluatorDefinitionRegistry;
 
     /**
      * Constructor that sets the parent class loader for the package being built/compiled
@@ -117,6 +124,8 @@
         buildDialectConfigurationMap();
 
         buildAccumulateFunctionsMap();
+        
+        buildEvaluatorRegistry();
     }
 
     public ChainedProperties getChainedProperties() {
@@ -199,7 +208,7 @@
     }
 
     private void buildAccumulateFunctionsMap() {
-        this.accumulateFunctions = new HashMap();
+        this.accumulateFunctions = new HashMap<String, String>();
         Map temp = new HashMap();
         this.chainedProperties.mapStartsWith( temp,
                                               ACCUMULATE_FUNCTION_PREFIX,
@@ -208,11 +217,11 @@
             Map.Entry entry = (Map.Entry) it.next();
             String identifier = ((String) entry.getKey()).trim().substring( ACCUMULATE_FUNCTION_PREFIX.length() );
             this.accumulateFunctions.put( identifier,
-                                          entry.getValue() );
+                                          (String) entry.getValue() );
         }
     }
 
-    public Map getAccumulateFunctionsMap() {
+    public Map<String, String> getAccumulateFunctionsMap() {
         return Collections.unmodifiableMap( this.accumulateFunctions );
     }
 
@@ -229,7 +238,7 @@
     }
 
     public AccumulateFunction getAccumulateFunction(String identifier) {
-        String className = (String) this.accumulateFunctions.get( identifier );
+        String className = this.accumulateFunctions.get( identifier );
         if ( className == null ) {
             throw new RuntimeDroolsException( "No accumulator function found for identifier: " + identifier );
         }
@@ -240,12 +249,59 @@
             throw new RuntimeDroolsException( "Error loading accumulator function for identifier " + identifier + ". Class " + className + " not found",
                                               e );
         } catch ( InstantiationException e ) {
-            throw new RuntimeDroolsException( "Error loading accumulator function for identifier " + identifier + ". Class " + className + " not found",
+            throw new RuntimeDroolsException( "Error loading accumulator function for identifier " + identifier + ". Instantiation failed for class " + className,
                                               e );
         } catch ( IllegalAccessException e ) {
-            throw new RuntimeDroolsException( "Error loading accumulator function for identifier " + identifier + ". Class " + className + " not found",
+            throw new RuntimeDroolsException( "Error loading accumulator function for identifier " + identifier + ". Illegal access to class " + className,
                                               e );
         }
     }
 
+    private void buildEvaluatorRegistry() {
+        this.evaluatorDefinitionRegistry = new EvaluatorDefinitionRegistry( this.classLoader );
+        Map temp = new HashMap();
+        this.chainedProperties.mapStartsWith( temp,
+                                              EVALUATOR_DEFINITION_PREFIX,
+                                              true );
+        for ( Iterator it = temp.values().iterator(); it.hasNext(); ) {
+            String className = (String) it.next();
+            this.evaluatorDefinitionRegistry.addEvaluatorDefinition( className );
+        }
+    }
+
+    /**
+     * Returns the evaluator registry for this package builder configuration
+     * @return
+     */
+    public EvaluatorDefinitionRegistry getEvaluatorRegistry() {
+        return this.evaluatorDefinitionRegistry;
+    }
+
+    /**
+     * Adds an evaluator definition class to the registry using the
+     * evaluator class name. The class will be loaded and the corresponting
+     * evaluator ID will be added to the registry. In case there exists
+     * an implementation for that ID already, the new implementation will
+     * replace the previous one.
+     * 
+     * @param className the name of the class for the implementation definition.
+     *                  The class must implement the EvaluatorDefinition interface.
+     * 
+     */
+    public void addEvaluatorDefinition( String className ) {
+        this.evaluatorDefinitionRegistry.addEvaluatorDefinition( className );
+    }
+
+    /**
+     * Adds an evaluator definition class to the registry. In case there exists
+     * an implementation for that evaluator ID already, the new implementation will
+     * replace the previous one.
+     * 
+     * @param def the evaluator definition to be added.
+     * 
+     */
+    public void addEvaluatorDefinition( EvaluatorDefinition def ) {
+        this.evaluatorDefinitionRegistry.addEvaluatorDefinition( def );
+    }
+
 }
\ No newline at end of file

Modified: labs/jbossrules/branches/temporal_rete/drools-compiler/src/main/java/org/drools/lang/MVELDumper.java
===================================================================
--- labs/jbossrules/branches/temporal_rete/drools-compiler/src/main/java/org/drools/lang/MVELDumper.java	2007-12-07 14:10:27 UTC (rev 17089)
+++ labs/jbossrules/branches/temporal_rete/drools-compiler/src/main/java/org/drools/lang/MVELDumper.java	2007-12-07 14:11:16 UTC (rev 17090)
@@ -118,31 +118,31 @@
                                       boolean isNegated,
                                       String value) {
         Operator op = Operator.determineOperator( evaluator, isNegated );
-        if( op == Operator.MEMBEROF ) {
+        if( op == Operator.determineOperator( "memberOf", false ) ) {
             evaluator = "contains";
             return evaluatorPrefix( evaluator ) + 
                    value + " " + 
                    evaluator( evaluator ) + " " + 
                    this.fieldName + evaluatorSufix( evaluator );
-        } else if(op == Operator.NOTMEMBEROF) {
+        } else if(op == Operator.determineOperator( "memberOf", true )) {
             evaluator = "not contains";
             return evaluatorPrefix( evaluator ) + 
                    value + " " + 
                    evaluator( evaluator ) + " " + 
                    this.fieldName + evaluatorSufix( evaluator );
-        } else if(op == Operator.EXCLUDES) {
+        } else if(op == Operator.determineOperator( "excludes", false ) ) {
             evaluator = "not contains";
             return evaluatorPrefix( evaluator ) + 
                    this.fieldName + " " + 
                    evaluator( evaluator ) + " " + 
                    value + evaluatorSufix( evaluator );
-        } else if(op == Operator.MATCHES) {
+        } else if(op == Operator.determineOperator( "matches", false )) {
             evaluator = "~=";
             return evaluatorPrefix( evaluator ) + 
                    this.fieldName + " " + 
                    evaluator( evaluator ) + " " + 
                    value.replaceAll( "\\\\", "\\\\\\\\" ) + evaluatorSufix( evaluator );
-        } else if(op == Operator.NOT_MATCHES) {
+        } else if(op == Operator.determineOperator( "matches", true )) {
             evaluator = "not ~=";
             return evaluatorPrefix( evaluator ) + 
                    this.fieldName + " " + 

Modified: labs/jbossrules/branches/temporal_rete/drools-compiler/src/main/java/org/drools/rule/builder/PatternBuilder.java
===================================================================
--- labs/jbossrules/branches/temporal_rete/drools-compiler/src/main/java/org/drools/rule/builder/PatternBuilder.java	2007-12-07 14:10:27 UTC (rev 17089)
+++ labs/jbossrules/branches/temporal_rete/drools-compiler/src/main/java/org/drools/rule/builder/PatternBuilder.java	2007-12-07 14:11:16 UTC (rev 17090)
@@ -24,7 +24,7 @@
 import org.drools.base.ClassObjectType;
 import org.drools.base.FieldFactory;
 import org.drools.base.ValueType;
-import org.drools.base.evaluators.Operator;
+import org.drools.base.evaluators.EvaluatorDefinition;
 import org.drools.compiler.Dialect;
 import org.drools.compiler.RuleError;
 import org.drools.facttemplates.FactTemplate;
@@ -122,7 +122,8 @@
             try {
                 final Class userProvidedClass = context.getDialect().getTypeResolver().resolveType( patternDescr.getObjectType() );
                 final boolean isEvent = context.getPkg().isEvent( userProvidedClass );
-                objectType = new ClassObjectType( userProvidedClass, isEvent );
+                objectType = new ClassObjectType( userProvidedClass,
+                                                  isEvent );
             } catch ( final ClassNotFoundException e ) {
                 context.getErrors().add( new RuleError( context.getRule(),
                                                         patternDescr,
@@ -147,7 +148,7 @@
                                    0, // offset is 0 by default
                                    objectType,
                                    patternDescr.getIdentifier(),
-                                   patternDescr.isInternalFact());
+                                   patternDescr.isInternalFact() );
         } else {
             pattern = new Pattern( context.getNextPatternId(),
                                    0, // offset is 0 by default
@@ -274,7 +275,7 @@
                                                             fieldName,
                                                             false );
         if ( extractor == null ) {
-            if( fieldConstraintDescr.getFieldName().startsWith( "this." ) ) {
+            if ( fieldConstraintDescr.getFieldName().startsWith( "this." ) ) {
                 // it may still be MVEL special syntax, like map key syntax, so try eval
                 rewriteToEval( context,
                                pattern,
@@ -287,7 +288,7 @@
                 context.getErrors().add( new RuleError( context.getRule(),
                                                         fieldConstraintDescr,
                                                         null,
-                                                        "Unable to create Field Extractor for '" + fieldName + "' of '"+pattern.getObjectType().toString()+"' in rule '"+context.getRule().getName()+"'" ) );
+                                                        "Unable to create Field Extractor for '" + fieldName + "' of '" + pattern.getObjectType().toString() + "' in rule '" + context.getRule().getName() + "'" ) );
                 return;
             }
         }
@@ -320,7 +321,7 @@
             context.getErrors().add( new RuleError( context.getRule(),
                                                     fieldConstraintDescr,
                                                     null,
-                                                    "This is a bug: Unkown restriction type '" + restriction.getClass() + "' for pattern '"+pattern.getObjectType().toString()+"' in rule '"+context.getRule().getName()+"'" ) );
+                                                    "This is a bug: Unkown restriction type '" + restriction.getClass() + "' for pattern '" + pattern.getObjectType().toString() + "' in rule '" + context.getRule().getName() + "'" ) );
         }
 
         if ( container == null ) {
@@ -377,15 +378,15 @@
 
             } else {
                 restrictions[index] = buildRestriction( context,
-                                                          pattern,
-                                                          extractor,
-                                                          fieldConstraintDescr,
-                                                          restrictionDescr );
-                if( restrictions[index] == null ) {
+                                                        pattern,
+                                                        extractor,
+                                                        fieldConstraintDescr,
+                                                        restrictionDescr );
+                if ( restrictions[index] == null ) {
                     context.getErrors().add( new RuleError( context.getRule(),
                                                             fieldConstraintDescr,
                                                             null,
-                                                            "Unable to create restriction '" + restrictionDescr.toString() + "' for field '"+ fieldConstraintDescr.getFieldName() +"' in the rule '" + context.getRule().getName() + "'" ) );
+                                                            "Unable to create restriction '" + restrictionDescr.toString() + "' for field '" + fieldConstraintDescr.getFieldName() + "' in the rule '" + context.getRule().getName() + "'" ) );
                 }
                 index++;
             }
@@ -401,7 +402,8 @@
                 context.getErrors().add( new RuleError( context.getRule(),
                                                         fieldConstraintDescr,
                                                         null,
-                                                        "This is a bug: Impossible to create a composite restriction for connective: " + top.getConnective()+ "' for field '"+ fieldConstraintDescr.getFieldName() +"' in the rule '" + context.getRule().getName() + "'" ) );
+                                                        "This is a bug: Impossible to create a composite restriction for connective: " + top.getConnective() + "' for field '" + fieldConstraintDescr.getFieldName() + "' in the rule '"
+                                                                + context.getRule().getName() + "'" ) );
             }
 
             return composite;
@@ -411,7 +413,7 @@
         context.getErrors().add( new RuleError( context.getRule(),
                                                 fieldConstraintDescr,
                                                 null,
-                                                "This is a bug: trying to create a restriction for an empty restriction list for field '"+ fieldConstraintDescr.getFieldName() +"' in the rule '" + context.getRule().getName() + "'" ) );
+                                                "This is a bug: trying to create a restriction for an empty restriction list for field '" + fieldConstraintDescr.getFieldName() + "' in the rule '" + context.getRule().getName() + "'" ) );
         return null;
     }
 
@@ -700,8 +702,8 @@
                     }
                 }
             }
-            
-            if( implicit != null ) {
+
+            if ( implicit != null ) {
                 final Evaluator evaluator = getEvaluator( context,
                                                           qiRestrictionDescr,
                                                           extractor.getValueType(),
@@ -843,15 +845,26 @@
                                    final BaseDescr descr,
                                    final ValueType valueType,
                                    final String evaluatorString,
-                                   final boolean isNegated ) {
+                                   final boolean isNegated) {
 
-        final Evaluator evaluator = valueType.getEvaluator( Operator.determineOperator( evaluatorString, isNegated ) );
+        final EvaluatorDefinition def = context.getConfiguration().getEvaluatorRegistry().getEvaluatorDefinition( evaluatorString );
+        if ( def == null ) {
+            context.getErrors().add( new RuleError( context.getRule(),
+                                                    descr,
+                                                    null,
+                                                    "Unable to determine the Evaluator for  ID '" + evaluatorString + "'" ) );
+        }
 
+        final Evaluator evaluator = def.getEvaluator( valueType,
+                                                      evaluatorString,
+                                                      isNegated,
+                                                      null );
+
         if ( evaluator == null ) {
             context.getErrors().add( new RuleError( context.getRule(),
                                                     descr,
                                                     null,
-                                                    "Unable to determine the Evaluator for  '" + valueType + "' and '" + evaluatorString + "'" ) );
+                                                    "Evaluator '" + (isNegated ? "not " : "") + evaluatorString + "' does not support type '" + valueType ) );
         }
 
         return evaluator;

Modified: labs/jbossrules/branches/temporal_rete/drools-compiler/src/main/java/org/drools/rule/builder/QueryBuilder.java
===================================================================
--- labs/jbossrules/branches/temporal_rete/drools-compiler/src/main/java/org/drools/rule/builder/QueryBuilder.java	2007-12-07 14:10:27 UTC (rev 17089)
+++ labs/jbossrules/branches/temporal_rete/drools-compiler/src/main/java/org/drools/rule/builder/QueryBuilder.java	2007-12-07 14:11:16 UTC (rev 17090)
@@ -25,13 +25,16 @@
                                              objectType,
                                              null );
         ClassLoader classloader = context.getPkg().getPackageCompilationData().getClassLoader();
-        final FieldExtractor extractor = context.getDialect().getClassFieldExtractorCache().getExtractor(  DroolsQuery.class, "name",  classloader );        
+        final FieldExtractor extractor = context.getDialect().getClassFieldExtractorCache().getExtractor( DroolsQuery.class,
+                                                                                                          "name",
+                                                                                                          classloader );
 
         final FieldValue field = FieldFactory.getFieldValue( queryDescr.getName(),
                                                              ValueType.STRING_TYPE );
 
         final LiteralConstraint constraint = new LiteralConstraint( extractor,
-                                                                    ValueType.STRING_TYPE.getEvaluator( Operator.EQUAL ),
+                                                                    context.getConfiguration().getEvaluatorRegistry().getEvaluator( ValueType.STRING_TYPE,
+                                                                                                                                    Operator.EQUAL ),
                                                                     field );
         // adds appropriate constraint to the pattern
         pattern.addConstraint( constraint );
@@ -52,17 +55,17 @@
         String[] types = queryDescr.getParameterTypes();
         int i = 0;
         try {
-        for ( i = 0; i < params.length; i++ ) {
-            pattern.addDeclaration( params[i],
-                                    new ArrayExtractor( arrayExtractor,
-                                                        i,
-                                                        context.getDialect().getTypeResolver().resolveType( types[i] ) ) );
-        }
+            for ( i = 0; i < params.length; i++ ) {
+                pattern.addDeclaration( params[i],
+                                        new ArrayExtractor( arrayExtractor,
+                                                            i,
+                                                            context.getDialect().getTypeResolver().resolveType( types[i] ) ) );
+            }
         } catch ( ClassNotFoundException e ) {
             context.getErrors().add( new RuleError( context.getRule(),
                                                     queryDescr,
                                                     e,
-                                                    "Unable to resolve type '" + types[i] + " for parameter" + params[i] ) );            
+                                                    "Unable to resolve type '" + types[i] + " for parameter" + params[i] ) );
         }
         return pattern;
     }

Modified: labs/jbossrules/branches/temporal_rete/drools-compiler/src/main/java/org/drools/rule/builder/RuleBuildContext.java
===================================================================
--- labs/jbossrules/branches/temporal_rete/drools-compiler/src/main/java/org/drools/rule/builder/RuleBuildContext.java	2007-12-07 14:10:27 UTC (rev 17089)
+++ labs/jbossrules/branches/temporal_rete/drools-compiler/src/main/java/org/drools/rule/builder/RuleBuildContext.java	2007-12-07 14:11:16 UTC (rev 17090)
@@ -24,9 +24,7 @@
 import java.util.Map;
 import java.util.Stack;
 
-import org.drools.base.evaluators.DateFactory;
 import org.drools.compiler.Dialect;
-import org.drools.compiler.DialectConfiguration;
 import org.drools.compiler.DialectRegistry;
 import org.drools.compiler.PackageBuilderConfiguration;
 import org.drools.lang.descr.AttributeDescr;
@@ -36,6 +34,7 @@
 import org.drools.rule.Query;
 import org.drools.rule.Rule;
 import org.drools.spi.DeclarationScopeResolver;
+import org.drools.util.DateUtils;
 
 /**
  * A context for the current build
@@ -319,11 +318,11 @@
                 }
             } else if ( name.equals( "date-effective" ) ) {
                 final Calendar cal = Calendar.getInstance();
-                cal.setTime( DateFactory.parseDate( attributeDescr.getValue() ) );
+                cal.setTime( DateUtils.parseDate( attributeDescr.getValue() ) );
                 rule.setDateEffective( cal );
             } else if ( name.equals( "date-expires" ) ) {
                 final Calendar cal = Calendar.getInstance();
-                cal.setTime( DateFactory.parseDate( attributeDescr.getValue() ) );
+                cal.setTime( DateUtils.parseDate( attributeDescr.getValue() ) );
                 rule.setDateExpires( cal );
             } else if ( name.equals( "dialect" ) ) {
                 rule.setDialect( attributeDescr.getValue() );

Modified: labs/jbossrules/branches/temporal_rete/drools-compiler/src/main/resources/META-INF/drools.default.packagebuilder.conf
===================================================================
--- labs/jbossrules/branches/temporal_rete/drools-compiler/src/main/resources/META-INF/drools.default.packagebuilder.conf	2007-12-07 14:10:27 UTC (rev 17089)
+++ labs/jbossrules/branches/temporal_rete/drools-compiler/src/main/resources/META-INF/drools.default.packagebuilder.conf	2007-12-07 14:11:16 UTC (rev 17090)
@@ -10,3 +10,10 @@
 drools.accumulate.function.min = org.drools.base.accumulators.MinAccumulateFunction
 drools.accumulate.function.count = org.drools.base.accumulators.CountAccumulateFunction
 drools.accumulate.function.sum = org.drools.base.accumulators.SumAccumulateFunction
+
+drools.evaluator.after = org.drools.base.evaluators.AfterEvaluatorDefinition
+drools.evaluator.equality = org.drools.base.evaluators.EqualityEvaluatorsDefinition
+drools.evaluator.comparable = org.drools.base.evaluators.ComparableEvaluatorsDefinition
+drools.evaluator.set = org.drools.base.evaluators.SetEvaluatorsDefinition
+drools.evaluator.matches = org.drools.base.evaluators.MatchesEvaluatorsDefinition
+drools.evaluator.soundslike = org.drools.base.evaluators.SoundslikeEvaluatorsDefinition

Modified: labs/jbossrules/branches/temporal_rete/drools-compiler/src/main/resources/org/drools/lang/DRL.g
===================================================================
--- labs/jbossrules/branches/temporal_rete/drools-compiler/src/main/resources/org/drools/lang/DRL.g	2007-12-07 14:10:27 UTC (rev 17089)
+++ labs/jbossrules/branches/temporal_rete/drools-compiler/src/main/resources/org/drools/lang/DRL.g	2007-12-07 14:11:16 UTC (rev 17090)
@@ -231,6 +231,7 @@
 	|	r=rule { this.packageDescr.addRule( $r.rule ); }			
 	|	q=query	{ this.packageDescr.addRule( $q.query ); }
 	;
+	
 package_statement returns [String packageName]
 	@init{
 		$packageName = null;

Modified: labs/jbossrules/branches/temporal_rete/drools-compiler/src/test/java/org/drools/integrationtests/CepEspTest.java
===================================================================
--- labs/jbossrules/branches/temporal_rete/drools-compiler/src/test/java/org/drools/integrationtests/CepEspTest.java	2007-12-07 14:10:27 UTC (rev 17089)
+++ labs/jbossrules/branches/temporal_rete/drools-compiler/src/test/java/org/drools/integrationtests/CepEspTest.java	2007-12-07 14:11:16 UTC (rev 17090)
@@ -110,6 +110,64 @@
 
     }
 
+    public void FIXME_testTimeRelationalOperators() throws Exception {
+        // read in the source
+        final Reader reader = new InputStreamReader( getClass().getResourceAsStream( "test_CEP_TimeRelationalOperators.drl" ) );
+        final RuleBase ruleBase = loadRuleBase( reader );
+
+        final TemporalSession<SessionPseudoClock> wm = ruleBase.newTemporalSession( ClockType.PSEUDO_CLOCK );
+        final SessionPseudoClock clock = wm.getSessionClock();
+
+        clock.setStartupTime( 1000 );
+        final List results = new ArrayList();
+
+        wm.setGlobal( "results",
+                      results );
+
+        StockTick tick1 = new StockTick( 1,
+                                         "DROO",
+                                         50,
+                                         System.currentTimeMillis() );
+        StockTick tick2 = new StockTick( 2,
+                                         "ACME",
+                                         10,
+                                         System.currentTimeMillis() );
+        StockTick tick3 = new StockTick( 3,
+                                         "ACME",
+                                         10,
+                                         System.currentTimeMillis() );
+        StockTick tick4 = new StockTick( 4,
+                                         "DROO",
+                                         50,
+                                         System.currentTimeMillis() );
+
+        InternalFactHandle handle1 = (InternalFactHandle) wm.insert( tick1 );
+        clock.advanceTime( 4 );
+        InternalFactHandle handle2 = (InternalFactHandle) wm.insert( tick2 );
+        clock.advanceTime( 4 );
+        InternalFactHandle handle3 = (InternalFactHandle) wm.insert( tick3 );
+        clock.advanceTime( 4 );
+        InternalFactHandle handle4 = (InternalFactHandle) wm.insert( tick4 );
+
+        assertNotNull( handle1 );
+        assertNotNull( handle2 );
+        assertNotNull( handle3 );
+        assertNotNull( handle4 );
+
+        assertTrue( handle1.isEvent() );
+        assertTrue( handle2.isEvent() );
+        assertTrue( handle3.isEvent() );
+        assertTrue( handle4.isEvent() );
+
+        wm.fireAllRules();
+
+        assertEquals( 1,
+                      results.size() );
+        assertEquals( tick3,
+                      results.get( 0 ) );
+
+    }
+
     public void testSimpleTimeWindow() throws Exception {
         // read in the source
         final Reader reader = new InputStreamReader( getClass().getResourceAsStream( "test_CEP_SimpleTimeWindow.drl" ) );

Modified: labs/jbossrules/branches/temporal_rete/drools-compiler/src/test/java/org/drools/integrationtests/MVELTest.java
===================================================================
--- labs/jbossrules/branches/temporal_rete/drools-compiler/src/test/java/org/drools/integrationtests/MVELTest.java	2007-12-07 14:10:27 UTC (rev 17089)
+++ labs/jbossrules/branches/temporal_rete/drools-compiler/src/test/java/org/drools/integrationtests/MVELTest.java	2007-12-07 14:11:16 UTC (rev 17090)
@@ -19,13 +19,13 @@
 import org.drools.RuleBase;
 import org.drools.RuleBaseFactory;
 import org.drools.WorkingMemory;
-import org.drools.base.evaluators.DateFactory;
 import org.drools.common.DroolsObjectInputStream;
 import org.drools.compiler.DrlParser;
 import org.drools.compiler.DroolsParserException;
 import org.drools.compiler.PackageBuilder;
 import org.drools.lang.descr.PackageDescr;
 import org.drools.rule.Package;
+import org.drools.util.DateUtils;
 import org.mvel.MVEL;
 
 public class MVELTest extends TestCase {
@@ -67,7 +67,7 @@
 
         assertEquals( "hello world", list2.get(0));
 
-        Date dt = DateFactory.parseDate( "10-Jul-1974" );
+        Date dt = DateUtils.parseDate( "10-Jul-1974" );
         assertEquals(dt, c.getUsedBy());
 
 

Modified: labs/jbossrules/branches/temporal_rete/drools-compiler/src/test/java/org/drools/integrationtests/eventgenerator/SimpleEventGenerator.java
===================================================================
--- labs/jbossrules/branches/temporal_rete/drools-compiler/src/test/java/org/drools/integrationtests/eventgenerator/SimpleEventGenerator.java	2007-12-07 14:10:27 UTC (rev 17089)
+++ labs/jbossrules/branches/temporal_rete/drools-compiler/src/test/java/org/drools/integrationtests/eventgenerator/SimpleEventGenerator.java	2007-12-07 14:11:16 UTC (rev 17090)
@@ -231,7 +231,6 @@
 
 class EventGenerationTimeComparator implements Comparator<EventOccurrence>{
 
-	@Override
 	public int compare(EventOccurrence o1, EventOccurrence o2) {
 		return (int)(o1.getNextOccurrenceTime()-o2.getNextOccurrenceTime());
 	}

Modified: labs/jbossrules/branches/temporal_rete/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELPredicateBuilderTest.java
===================================================================
--- labs/jbossrules/branches/temporal_rete/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELPredicateBuilderTest.java	2007-12-07 14:10:27 UTC (rev 17089)
+++ labs/jbossrules/branches/temporal_rete/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELPredicateBuilderTest.java	2007-12-07 14:11:16 UTC (rev 17090)
@@ -14,7 +14,6 @@
 import org.drools.base.ClassObjectType;
 import org.drools.common.InternalFactHandle;
 import org.drools.common.InternalWorkingMemory;
-import org.drools.compiler.DialectConfiguration;
 import org.drools.compiler.PackageBuilder;
 import org.drools.compiler.PackageBuilderConfiguration;
 import org.drools.lang.descr.PredicateDescr;
@@ -105,20 +104,21 @@
         final Cheese cheddar = new Cheese( "cheddar",
                                            10 );
         final InternalFactHandle f0 = (InternalFactHandle) wm.insert( cheddar );
+        final InternalFactHandle f1 = (InternalFactHandle) wm.insert( stilton );
         final ReteTuple tuple = new ReteTuple( f0 );
 
         final PredicateContextEntry predicateContext = new PredicateContextEntry();
         predicateContext.leftTuple = tuple;
 
         assertTrue( predicate.isAllowedCachedLeft( predicateContext,
-                                                   stilton ) );
+                                                   f1 ) );
 
         cheddar.setPrice( 9 );
         wm.update( f0,
                    cheddar );
 
         assertFalse( predicate.isAllowedCachedLeft( predicateContext,
-                                                    stilton ) );
+                                                    f1 ) );
     }
 
 }

Modified: labs/jbossrules/branches/temporal_rete/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELReturnValueBuilderTest.java
===================================================================
--- labs/jbossrules/branches/temporal_rete/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELReturnValueBuilderTest.java	2007-12-07 14:10:27 UTC (rev 17089)
+++ labs/jbossrules/branches/temporal_rete/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELReturnValueBuilderTest.java	2007-12-07 14:11:16 UTC (rev 17090)
@@ -16,7 +16,6 @@
 import org.drools.base.evaluators.Operator;
 import org.drools.common.InternalFactHandle;
 import org.drools.common.InternalWorkingMemory;
-import org.drools.compiler.DialectConfiguration;
 import org.drools.compiler.PackageBuilder;
 import org.drools.compiler.PackageBuilderConfiguration;
 import org.drools.lang.descr.ReturnValueRestrictionDescr;
@@ -29,7 +28,7 @@
 import org.drools.spi.FieldExtractor;
 
 public class MVELReturnValueBuilderTest extends TestCase {
-    
+
     private ClassFieldExtractorCache cache;
 
     public void setUp() {
@@ -42,18 +41,19 @@
 
         PackageBuilder pkgBuilder = new PackageBuilder( pkg );
         final PackageBuilderConfiguration conf = pkgBuilder.getPackageBuilderConfiguration();
-        MVELDialect mvelDialect = ( MVELDialect ) pkgBuilder.getDialectRegistry().getDialect( "mvel" );
+        MVELDialect mvelDialect = (MVELDialect) pkgBuilder.getDialectRegistry().getDialect( "mvel" );
 
         final InstrumentedBuildContent context = new InstrumentedBuildContent( conf,
                                                                                pkg,
                                                                                ruleDescr,
                                                                                pkgBuilder.getDialectRegistry(),
                                                                                mvelDialect );
-        
+
         final InstrumentedDeclarationScopeResolver declarationResolver = new InstrumentedDeclarationScopeResolver();
-        final FieldExtractor extractor = cache.getExtractor( Cheese.class, "price",
-                                                                                getClass().getClassLoader() );
-        
+        final FieldExtractor extractor = cache.getExtractor( Cheese.class,
+                                                             "price",
+                                                             getClass().getClassLoader() );
+
         final Pattern patternA = new Pattern( 0,
                                               new ClassObjectType( int.class ) );
 
@@ -92,7 +92,8 @@
                                                                                previousDeclarations,
                                                                                localDeclarations,
                                                                                requiredGlobals,
-                                                                               ValueType.PINTEGER_TYPE.getEvaluator( Operator.EQUAL ) );
+                                                                               context.getConfiguration().getEvaluatorRegistry().getEvaluator( ValueType.PINTEGER_TYPE,
+                                                                                                                                               Operator.EQUAL ) );
 
         builder.build( context,
                        usedIdentifiers,
@@ -118,14 +119,17 @@
 
         final Cheese brie = new Cheese( "brie",
                                         20 );
+        final InternalFactHandle f2 = (InternalFactHandle) wm.insert( brie );
+
         assertTrue( returnValue.isAllowed( extractor,
-                                           brie,
+                                           f2,
                                            tuple,
                                            wm ) );
 
         brie.setPrice( 18 );
+        wm.update( f2, brie );
         assertFalse( returnValue.isAllowed( extractor,
-                                            brie,
+                                            f2,
                                             tuple,
                                             wm ) );
     }

Modified: labs/jbossrules/branches/temporal_rete/drools-compiler/src/test/resources/org/drools/integrationtests/test_CEP_SimpleTimeWindow.drl
===================================================================
--- labs/jbossrules/branches/temporal_rete/drools-compiler/src/test/resources/org/drools/integrationtests/test_CEP_SimpleTimeWindow.drl	2007-12-07 14:10:27 UTC (rev 17089)
+++ labs/jbossrules/branches/temporal_rete/drools-compiler/src/test/resources/org/drools/integrationtests/test_CEP_SimpleTimeWindow.drl	2007-12-07 14:11:16 UTC (rev 17090)
@@ -5,7 +5,6 @@
 global java.util.List results;
 
 rule "average over threshold"
-    //time-window 30 seconds
 when
     Number( $avg : intValue >= 50 ) from accumulate(
               OrderEvent( $amt : total ),




More information about the jboss-svn-commits mailing list