[jboss-svn-commits] JBL Code SVN: r9820 - in labs/jbossrules/trunk/drools-compiler/src: test/java/org/drools and 2 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Tue Feb 27 15:20:09 EST 2007


Author: mark.proctor at jboss.com
Date: 2007-02-27 15:20:08 -0500 (Tue, 27 Feb 2007)
New Revision: 9820

Added:
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELPredicateBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELPredicateBuilderTest.java
Removed:
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/dialect/
Modified:
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELEvalBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELFromBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELEvalBuilderTest.java
Log:
JBRULES-708 MVEL Integration
-Predicate now works

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELEvalBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELEvalBuilder.java	2007-02-27 19:11:01 UTC (rev 9819)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELEvalBuilder.java	2007-02-27 20:20:08 UTC (rev 9820)
@@ -20,8 +20,8 @@
 import java.util.List;
 
 import org.antlr.stringtemplate.StringTemplate;
-import org.drools.base.DroolsMVELFactory;
-import org.drools.base.MVEL.MVELEvalExpression;
+import org.drools.base.mvel.DroolsMVELFactory;
+import org.drools.base.mvel.MVELEvalExpression;
 import org.drools.lang.descr.BaseDescr;
 import org.drools.lang.descr.EvalDescr;
 import org.drools.rule.ConditionalElement;
@@ -70,7 +70,7 @@
 //        }
 
         DroolsMVELFactory factory = new DroolsMVELFactory( );
-        factory.setDeclarationMap( context.getDeclarationResolver().getDeclarations() );
+        factory.setPreviousDeclarationMap( context.getDeclarationResolver().getDeclarations() );
         factory.setGlobalsMap( context.getPkg().getGlobals() );        
         
         Serializable expr = MVEL.compileExpression( evalDescr.getText() );       

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELFromBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELFromBuilder.java	2007-02-27 19:11:01 UTC (rev 9819)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELFromBuilder.java	2007-02-27 20:20:08 UTC (rev 9820)
@@ -18,8 +18,8 @@
 
 import java.io.Serializable;
 
-import org.drools.base.DroolsMVELFactory;
 import org.drools.base.dataproviders.MVELDataProvider;
+import org.drools.base.mvel.DroolsMVELFactory;
 import org.drools.compiler.RuleError;
 import org.drools.lang.descr.AccessorDescr;
 import org.drools.lang.descr.BaseDescr;
@@ -69,7 +69,7 @@
 //            JFDIParser parser = createParser( utils,
 //                                              accessor.toString() );
             DroolsMVELFactory factory = new DroolsMVELFactory( );
-            factory.setDeclarationMap( context.getDeclarationResolver().getDeclarations() );
+            factory.setPreviousDeclarationMap( context.getDeclarationResolver().getDeclarations() );
             factory.setGlobalsMap( context.getPkg().getGlobals() );
             
             //parser.setValueHandlerFactory( factory );

Added: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELPredicateBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELPredicateBuilder.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELPredicateBuilder.java	2007-02-27 20:20:08 UTC (rev 9820)
@@ -0,0 +1,90 @@
+/*
+ * Copyright 2006 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.rule.builder.dialect.mvel;
+
+import java.io.Serializable;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.antlr.stringtemplate.StringTemplate;
+import org.drools.base.mvel.DroolsMVELFactory;
+import org.drools.base.mvel.MVELEvalExpression;
+import org.drools.base.mvel.MVELPredicateExpression;
+import org.drools.lang.descr.BaseDescr;
+import org.drools.lang.descr.EvalDescr;
+import org.drools.lang.descr.PredicateDescr;
+import org.drools.rule.ConditionalElement;
+import org.drools.rule.Declaration;
+import org.drools.rule.EvalCondition;
+import org.drools.rule.PredicateConstraint;
+import org.drools.rule.builder.BuildContext;
+import org.drools.rule.builder.ColumnBuilder;
+import org.drools.rule.builder.ConditionalElementBuilder;
+import org.drools.rule.builder.PredicateBuilder;
+import org.drools.rule.builder.dialect.java.BuildUtils;
+import org.drools.spi.BetaNodeFieldConstraint;
+import org.drools.spi.DeclarationScopeResolver;
+import org.mvel.MVEL;
+
+/**
+ * @author etirelli
+ *
+ */
+public class MVELPredicateBuilder
+    implements
+    PredicateBuilder {
+
+    public void build(final BuildContext context,
+                      final BuildUtils utils,
+                      final List[] usedIdentifiers,
+                      final Declaration[] previousDeclarations,
+                      final Declaration[] localDeclarations,
+                      final PredicateConstraint predicate,
+                      final PredicateDescr predicateDescr) {
+
+        //final Declaration[] declarations = new Declaration[0];
+//        final List[] usedIdentifiers = utils.getUsedIdentifiers( context,
+//                                                                 evalDescr,
+//                                                                 evalDescr.getText() );
+//
+//        final Declaration[] declarations = new Declaration[usedIdentifiers[0].size()];
+//        for ( int i = 0, size = usedIdentifiers[0].size(); i < size; i++ ) {
+//            declarations[i] = (Declaration) context.getDeclarationResolver().getDeclaration( (String) usedIdentifiers[0].get( i ) );
+//        }
+        
+        DroolsMVELFactory factory = new DroolsMVELFactory( );
+        
+        Map map = new HashMap();
+        for ( int i = 0, length = previousDeclarations.length; i < length; i++ ) {
+            map.put( previousDeclarations[i].getIdentifier(), previousDeclarations[i] );
+        }        
+        factory.setPreviousDeclarationMap( map );
+        
+        map = new HashMap();
+        for ( int i = 0, length = localDeclarations.length; i < length; i++ ) {
+            map.put( localDeclarations[i].getIdentifier(), localDeclarations[i] );
+        }                
+        factory.setLocalDeclarationMap( map );
+        
+        factory.setGlobalsMap( context.getPkg().getGlobals() );        
+        
+        Serializable expr = MVEL.compileExpression( predicateDescr.getText() );
+        predicate.setPredicateExpression( new MVELPredicateExpression(expr,factory) );        
+    }
+    
+}

Copied: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel (from rev 9790, labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/dialect/mvel)

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELEvalBuilderTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/dialect/mvel/MVELEvalBuilderTest.java	2007-02-27 01:21:45 UTC (rev 9790)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELEvalBuilderTest.java	2007-02-27 20:20:08 UTC (rev 9820)
@@ -1,4 +1,4 @@
-package org.drools.dialect.mvel;
+package org.drools.rule.builder.dialect.mvel;
 
 import java.util.HashMap;
 import java.util.Map;

Added: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELPredicateBuilderTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELPredicateBuilderTest.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELPredicateBuilderTest.java	2007-02-27 20:20:08 UTC (rev 9820)
@@ -0,0 +1,163 @@
+package org.drools.rule.builder.dialect.mvel;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import junit.framework.TestCase;
+
+import org.drools.Cheese;
+import org.drools.RuleBase;
+import org.drools.RuleBaseFactory;
+import org.drools.WorkingMemory;
+import org.drools.base.ClassFieldExtractor;
+import org.drools.base.ClassObjectType;
+import org.drools.common.InternalFactHandle;
+import org.drools.common.InternalWorkingMemory;
+import org.drools.lang.descr.EvalDescr;
+import org.drools.lang.descr.PredicateDescr;
+import org.drools.lang.descr.RuleDescr;
+import org.drools.reteoo.ReteTuple;
+import org.drools.rule.Column;
+import org.drools.rule.Declaration;
+import org.drools.rule.EvalCondition;
+import org.drools.rule.Package;
+import org.drools.rule.PredicateConstraint;
+import org.drools.rule.PredicateConstraint.PredicateContextEntry;
+import org.drools.rule.builder.BuildContext;
+import org.drools.rule.builder.dialect.java.BuildUtils;
+import org.drools.rule.builder.dialect.java.DeclarationTypeFixer;
+import org.drools.rule.builder.dialect.java.JavaExprAnalyzer;
+import org.drools.rule.builder.dialect.java.JavaPredicateBuilder;
+import org.drools.rule.builder.dialect.java.KnowledgeHelperFixer;
+import org.drools.rule.builder.dialect.mvel.MVELEvalBuilder;
+import org.drools.spi.DeclarationScopeResolver;
+import org.drools.spi.FieldExtractor;
+
+public class MVELPredicateBuilderTest extends TestCase {
+
+    public void setUp() {
+    }
+
+    public void testSimpleExpression() {
+        Package pkg = new Package( "pkg1" );
+        RuleDescr ruleDescr = new RuleDescr( "rule 1" );
+
+        InstrumentedBuildContent context = new InstrumentedBuildContent( pkg,
+                                                                         ruleDescr );
+        InstrumentedDeclarationScopeResolver declarationResolver = new InstrumentedDeclarationScopeResolver();
+        final FieldExtractor extractor = new ClassFieldExtractor( Cheese.class,
+                                                                  "price" );
+        Column columnA = new Column( 0,
+                                     new ClassObjectType( int.class ) );
+
+        Column columnB = new Column( 1,
+                                     new ClassObjectType( int.class ) );
+
+        Declaration a = new Declaration( "a",
+                                         extractor,
+                                         columnA );
+        Declaration b = new Declaration( "b",
+                                         extractor,
+                                         columnB );
+
+        Map map = new HashMap();
+        map.put( "a",
+                 a );
+        map.put( "b",
+                 b );
+        declarationResolver.setDeclarations( map );
+        context.setDeclarationResolver( declarationResolver );
+
+        PredicateDescr predicateDescr = new PredicateDescr();
+        predicateDescr.setText( "a == b" );
+
+        MVELPredicateBuilder builder = new MVELPredicateBuilder();
+
+        List[] usedIdentifiers = new ArrayList[2];
+        List list = new ArrayList();
+        usedIdentifiers[1] = list;
+
+        Declaration[] previousDeclarations = new Declaration[]{a};
+        Declaration[] localDeclarations = new Declaration[]{b};
+
+        final PredicateConstraint predicate = new PredicateConstraint( null,
+                                                                       localDeclarations );
+
+        BuildUtils utils = new BuildUtils( new KnowledgeHelperFixer(),
+                                           new DeclarationTypeFixer(),
+                                           new JavaExprAnalyzer(),
+                                           null,
+                                           null,
+                                           null );
+
+        builder.build( context,
+                       utils,
+                       usedIdentifiers,
+                       previousDeclarations,
+                       localDeclarations,
+                       predicate,
+                       predicateDescr );
+
+        RuleBase ruleBase = RuleBaseFactory.newRuleBase();
+        InternalWorkingMemory wm = (InternalWorkingMemory) ruleBase.newWorkingMemory();
+
+        Cheese stilton = new Cheese( "stilton",
+                                     10 );
+
+        Cheese cheddar = new Cheese( "cheddar",
+                                     10 );
+        InternalFactHandle f0 = (InternalFactHandle) wm.assertObject( cheddar );
+        ReteTuple tuple = new ReteTuple( f0 );
+
+        PredicateContextEntry predicateContext = new PredicateContextEntry();
+        predicateContext.leftTuple = tuple;
+
+        assertTrue( predicate.isAllowedCachedLeft( predicateContext,
+                                                   stilton ) );
+
+        cheddar.setPrice( 9 );
+        wm.modifyObject( f0,
+                         cheddar );
+
+        assertFalse( predicate.isAllowedCachedLeft( predicateContext,
+                                                    stilton ) );
+    }
+
+    public static class InstrumentedDeclarationScopeResolver extends DeclarationScopeResolver {
+        private Map declarations;
+
+        public InstrumentedDeclarationScopeResolver() {
+            super( null );
+        }
+
+        public void setDeclarations(Map map) {
+            this.declarations = map;
+        }
+
+        public Map getDeclarations() {
+            return this.declarations;
+        }
+    }
+
+    public static class InstrumentedBuildContent extends BuildContext {
+        private DeclarationScopeResolver declarationScopeResolver;
+
+        public InstrumentedBuildContent(Package pkg,
+                                        RuleDescr ruleDescr) {
+            super( pkg,
+                   ruleDescr );
+        }
+
+        public void setDeclarationResolver(DeclarationScopeResolver declarationScopeResolver) {
+            this.declarationScopeResolver = declarationScopeResolver;
+        }
+
+        public DeclarationScopeResolver getDeclarationResolver() {
+            return this.declarationScopeResolver;
+        }
+
+    }
+
+}




More information about the jboss-svn-commits mailing list