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

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Tue May 22 03:04:17 EDT 2007


Author: mark.proctor at jboss.com
Date: 2007-05-22 03:04:17 -0400 (Tue, 22 May 2007)
New Revision: 12056

Added:
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELDialect.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MVELTest.java
   labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_mvel.drl
Modified:
   labs/jbossrules/trunk/drools-compiler/.classpath
   labs/jbossrules/trunk/drools-compiler/.project
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/PackageBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/Dialect.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/RuleBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELConsequenceBuilder.java
   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/main/java/org/drools/rule/builder/dialect/mvel/MVELPredicateBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELReturnValueBuilder.java
Log:
JBRULES-713 Make Dialects Pluggeable
JBRULES-708 Full MVEL integration

Modified: labs/jbossrules/trunk/drools-compiler/.classpath
===================================================================
--- labs/jbossrules/trunk/drools-compiler/.classpath	2007-05-22 07:04:06 UTC (rev 12055)
+++ labs/jbossrules/trunk/drools-compiler/.classpath	2007-05-22 07:04:17 UTC (rev 12056)
@@ -1,18 +1,18 @@
 <classpath>
   <classpathentry kind="src" path="src/main/java"/>
-  <classpathentry kind="src" path="src/main/resources"/>
+  <classpathentry kind="src" path="src/main/resources" excluding="**/*.java"/>
   <classpathentry kind="src" path="src/test/java" output="target/test-classes"/>
-  <classpathentry kind="src" path="src/test/resources" output="target/test-classes"/>
+  <classpathentry kind="src" path="src/test/resources" output="target/test-classes" excluding="**/*.java"/>
   <classpathentry kind="output" path="target/classes"/>
   <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+  <classpathentry kind="src" path="/drools-core"/>
+  <classpathentry kind="var" path="M2_REPO/xstream/xstream/1.1.3/xstream-1.1.3.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/eclipse/jdt/core/3.2.1.v_677_R32x/core-3.2.1.v_677_R32x.jar"/>
   <classpathentry kind="var" path="M2_REPO/xml-apis/xml-apis/1.0.b2/xml-apis-1.0.b2.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/mvel/mvel14/1.2beta16/mvel14-1.2beta16.jar"/>
-  <classpathentry kind="src" path="/drools-core"/>
+  <classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/janino/janino/2.5.7/janino-2.5.7.jar"/>
+  <classpathentry kind="var" path="M2_REPO/xerces/xercesImpl/2.4.0/xercesImpl-2.4.0.jar"/>
   <classpathentry kind="var" path="M2_REPO/xpp3/xpp3/1.1.3.4.O/xpp3-1.1.3.4.O.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/eclipse/jdt/core/3.2.1.v_677_R32x/core-3.2.1.v_677_R32x.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/mvel/mvel14/1.2beta18/mvel14-1.2beta18.jar"/>
   <classpathentry kind="var" path="M2_REPO/org/antlr/antlr/3.0b7/antlr-3.0b7.jar"/>
-  <classpathentry kind="var" path="M2_REPO/xerces/xercesImpl/2.4.0/xercesImpl-2.4.0.jar"/>
-  <classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar"/>
-  <classpathentry kind="var" path="M2_REPO/xstream/xstream/1.1.3/xstream-1.1.3.jar"/>
-  <classpathentry kind="var" path="M2_REPO/janino/janino/2.5.6/janino-2.5.6.jar"/>
 </classpath>
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-compiler/.project
===================================================================
--- labs/jbossrules/trunk/drools-compiler/.project	2007-05-22 07:04:06 UTC (rev 12055)
+++ labs/jbossrules/trunk/drools-compiler/.project	2007-05-22 07:04:17 UTC (rev 12056)
@@ -7,7 +7,6 @@
   <buildSpec>
     <buildCommand>
       <name>org.eclipse.jdt.core.javabuilder</name>
-      <arguments/>
     </buildCommand>
   </buildSpec>
   <natures>

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/PackageBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/PackageBuilder.java	2007-05-22 07:04:06 UTC (rev 12055)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/PackageBuilder.java	2007-05-22 07:04:17 UTC (rev 12056)
@@ -47,6 +47,7 @@
 import org.drools.rule.builder.RuleBuildContext;
 import org.drools.rule.builder.RuleBuilder;
 import org.drools.rule.builder.dialect.java.JavaDialect;
+import org.drools.rule.builder.dialect.mvel.MVELDialect;
 import org.drools.xml.XmlPackageReader;
 import org.xml.sax.SAXException;
 
@@ -125,7 +126,12 @@
                                       new JavaDialect( pkg,
                                                        configuration,
                                                        getTypeResolver(),
-                                                       this.classFieldExtractorCache ) );            
+                                                       this.classFieldExtractorCache ) );    
+            this.dialects.addDialect( "mvel",
+                                      new MVELDialect( pkg,
+                                                       configuration,
+                                                       getTypeResolver(),
+                                                       this.classFieldExtractorCache ) );             
             this.dialect = this.dialects.getDialect( "java" ); // TODO this should from the package
             
         } else {
@@ -135,6 +141,11 @@
                                                        configuration,
                                                        getTypeResolver(),
                                                        this.classFieldExtractorCache ) ); 
+            this.dialects.addDialect( "mvel",
+                                      new MVELDialect( pkg,
+                                                       configuration,
+                                                       getTypeResolver(),
+                                                       this.classFieldExtractorCache ) );             
             this.dialects.addDialect( "default", this.dialects.getDialect( configuration.getDialect() ) );     
             this.dialect = this.dialects.getDialect( configuration.getDialect() );
         }

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/Dialect.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/Dialect.java	2007-05-22 07:04:06 UTC (rev 12055)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/Dialect.java	2007-05-22 07:04:17 UTC (rev 12056)
@@ -18,6 +18,8 @@
 
     ClassFieldExtractorCache getClassFieldExtractorCache();    
     
+    PatternBuilder getPatternBuilder();    
+    
     ConditionalElementBuilder getEvalBuilder();
 
     AccumulateBuilder getAccumulateBuilder();

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/RuleBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/RuleBuilder.java	2007-05-22 07:04:06 UTC (rev 12055)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/RuleBuilder.java	2007-05-22 07:04:17 UTC (rev 12056)
@@ -65,7 +65,10 @@
             context.getDialect().getConsequenceBuilder().build( context,
                                                                 ruleDescr );
         }
-        context.getDialect().getRuleClassBuilder().buildRule( context,
-                                                              ruleDescr );
+        RuleClassBuilder classBuilder = context.getDialect().getRuleClassBuilder();
+        if ( classBuilder != null ) {
+            classBuilder.buildRule( context,
+                                    ruleDescr );
+        }
     }
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELConsequenceBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELConsequenceBuilder.java	2007-05-22 07:04:06 UTC (rev 12055)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELConsequenceBuilder.java	2007-05-22 07:04:17 UTC (rev 12056)
@@ -1,6 +1,7 @@
 package org.drools.rule.builder.dialect.mvel;
 
 import java.io.Serializable;
+import java.util.HashMap;
 
 import org.drools.base.mvel.DroolsMVELFactory;
 import org.drools.base.mvel.MVELConsequence;
@@ -8,6 +9,7 @@
 import org.drools.rule.builder.RuleBuildContext;
 import org.drools.rule.builder.ConsequenceBuilder;
 import org.mvel.MVEL;
+import org.mvel.integration.impl.MapVariableResolverFactory;
 
 public class MVELConsequenceBuilder
     implements
@@ -18,9 +20,7 @@
         // pushing consequence LHS into the stack for variable resolution
         context.getBuildStack().push( context.getRule().getLhs() );
 
-        final DroolsMVELFactory factory = new DroolsMVELFactory();
-        factory.setPreviousDeclarationMap( context.getDeclarationResolver().getDeclarations() );
-        factory.setGlobalsMap( context.getPkg().getGlobals() );
+        final DroolsMVELFactory factory = new DroolsMVELFactory(context.getDeclarationResolver().getDeclarations(), null,  context.getPkg().getGlobals() );
 
         final Serializable expr = MVEL.compileExpression( (String) ruleDescr.getConsequence() );
 

Added: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELDialect.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELDialect.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELDialect.java	2007-05-22 07:04:17 UTC (rev 12056)
@@ -0,0 +1,211 @@
+package org.drools.rule.builder.dialect.mvel;
+
+import java.nio.channels.UnsupportedAddressTypeException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.drools.base.ClassFieldExtractorCache;
+import org.drools.base.TypeResolver;
+import org.drools.compiler.PackageBuilderConfiguration;
+import org.drools.lang.descr.AccumulateDescr;
+import org.drools.lang.descr.AndDescr;
+import org.drools.lang.descr.BaseDescr;
+import org.drools.lang.descr.CollectDescr;
+import org.drools.lang.descr.EvalDescr;
+import org.drools.lang.descr.ExistsDescr;
+import org.drools.lang.descr.ForallDescr;
+import org.drools.lang.descr.FromDescr;
+import org.drools.lang.descr.FunctionDescr;
+import org.drools.lang.descr.NotDescr;
+import org.drools.lang.descr.OrDescr;
+import org.drools.lang.descr.PatternDescr;
+import org.drools.lang.descr.RuleDescr;
+import org.drools.rule.Package;
+import org.drools.rule.builder.AccumulateBuilder;
+import org.drools.rule.builder.CollectBuilder;
+import org.drools.rule.builder.ConditionalElementBuilder;
+import org.drools.rule.builder.ConsequenceBuilder;
+import org.drools.rule.builder.Dialect;
+import org.drools.rule.builder.ForallBuilder;
+import org.drools.rule.builder.FromBuilder;
+import org.drools.rule.builder.GroupElementBuilder;
+import org.drools.rule.builder.PatternBuilder;
+import org.drools.rule.builder.PredicateBuilder;
+import org.drools.rule.builder.ReturnValueBuilder;
+import org.drools.rule.builder.RuleBuildContext;
+import org.drools.rule.builder.RuleClassBuilder;
+import org.drools.rule.builder.dialect.java.DeclarationTypeFixer;
+import org.drools.rule.builder.dialect.java.JavaAccumulateBuilder;
+import org.drools.rule.builder.dialect.java.JavaConsequenceBuilder;
+import org.drools.rule.builder.dialect.java.JavaEvalBuilder;
+import org.drools.rule.builder.dialect.java.JavaExprAnalyzer;
+import org.drools.rule.builder.dialect.java.JavaFunctionBuilder;
+import org.drools.rule.builder.dialect.java.JavaPredicateBuilder;
+import org.drools.rule.builder.dialect.java.JavaReturnValueBuilder;
+import org.drools.rule.builder.dialect.java.JavaRuleClassBuilder;
+import org.drools.rule.builder.dialect.java.KnowledgeHelperFixer;
+
+public class MVELDialect
+    implements
+    Dialect {
+
+    private final PatternBuilder           pattern     = new PatternBuilder( this );
+    //private final JavaAccumulateBuilder    accumulate   = new JavaAccumulateBuilder();
+    private final MVELEvalBuilder          eval        = new MVELEvalBuilder();
+    private final MVELPredicateBuilder     predicate    = new MVELPredicateBuilder();
+    private final MVELReturnValueBuilder   returnValue  = new MVELReturnValueBuilder();
+    private final MVELConsequenceBuilder   consequence = new MVELConsequenceBuilder();
+    //private final JavaRuleClassBuilder     rule         = new JavaRuleClassBuilder();
+    private final MVELFromBuilder          from        = new MVELFromBuilder();
+
+    private List                           results;
+    //private final JavaFunctionBuilder      function     = new JavaFunctionBuilder();
+
+    private Package                        pkg;
+    private PackageBuilderConfiguration    configuration;
+    private final TypeResolver             typeResolver;
+    private final ClassFieldExtractorCache classFieldExtractorCache;
+
+    public void addFunction(FunctionDescr functionDescr,
+                            TypeResolver typeResolver) {
+        throw new UnsupportedOperationException( "MVEL does not support functions" );
+
+    }
+
+    // a map of registered builders
+    private Map builders;
+
+    public MVELDialect(final Package pkg,
+                       final PackageBuilderConfiguration configuration,
+                       final TypeResolver typeResolver,
+                       final ClassFieldExtractorCache classFieldExtractorCache) {
+        this.pkg = pkg;
+        this.configuration = configuration;
+        //loadCompiler();
+
+        this.typeResolver = typeResolver;
+        this.classFieldExtractorCache = classFieldExtractorCache;
+
+        if ( pkg != null ) {
+            init( pkg );
+        }
+
+        initBuilder();
+    }
+
+    public void initBuilder() {
+        // statically adding all builders to the map
+        // but in the future we can move that to a configuration
+        // if we want to
+        this.builders = new HashMap();
+
+        final GroupElementBuilder gebuilder = new GroupElementBuilder();
+
+        this.builders.put( AndDescr.class,
+                           gebuilder );
+
+        this.builders.put( OrDescr.class,
+                           gebuilder );
+
+        this.builders.put( NotDescr.class,
+                           gebuilder );
+
+        this.builders.put( ExistsDescr.class,
+                           gebuilder );
+
+        this.builders.put( PatternDescr.class,
+                           getPatternBuilder() );
+
+        this.builders.put( FromDescr.class,
+                           getFromBuilder() );
+
+//        this.builders.put( AccumulateDescr.class,
+//                           getAccumulateBuilder() );
+
+        this.builders.put( EvalDescr.class,
+                           getEvalBuilder() );
+    }
+
+    public void init(Package pkg) {
+        this.pkg = pkg;
+        this.results = new ArrayList();
+
+    }
+
+    public void init(RuleDescr ruleDescr) {
+    }
+
+    public void addRule(RuleBuildContext context) {
+        
+    }
+
+    public void compileAll() {
+    }
+
+    public List[] getBlockIdentifiers(RuleBuildContext context,
+                                      BaseDescr descr,
+                                      String text) {
+        return null;
+    }
+
+    public Object getBuilder(final Class clazz) {
+        return this.builders.get( clazz );
+    }
+
+    public Map getBuilders() {
+        return this.builders;
+    }
+
+    public ClassFieldExtractorCache getClassFieldExtractorCache() {
+        return this.classFieldExtractorCache;
+    }
+
+    public PatternBuilder getPatternBuilder() {
+        return this.pattern;
+    }
+
+    public AccumulateBuilder getAccumulateBuilder() {
+        throw new UnsupportedOperationException("MVEL does not yet support accumuate");
+    }
+
+    public ConsequenceBuilder getConsequenceBuilder() {
+        return this.consequence;
+    }
+
+    public ConditionalElementBuilder getEvalBuilder() {
+        return this.eval;
+    }
+
+    public List[] getExpressionIdentifiers(RuleBuildContext context,
+                                           BaseDescr descr,
+                                           Object content) {
+        return null;
+    }
+
+    public FromBuilder getFromBuilder() {
+        return this.from;
+    }
+
+    public PredicateBuilder getPredicateBuilder() {
+        return this.predicate;
+    }
+
+    public List getResults() {
+        return null;
+    }
+
+    public ReturnValueBuilder getReturnValueBuilder() {
+        return this.returnValue;
+    }
+
+    public RuleClassBuilder getRuleClassBuilder() {
+        return null;
+    }
+
+    public TypeResolver getTypeResolver() {
+        return this.typeResolver;
+    }
+
+}

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-05-22 07:04:06 UTC (rev 12055)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELEvalBuilder.java	2007-05-22 07:04:17 UTC (rev 12056)
@@ -62,9 +62,7 @@
         //            declarations[i] = (Declaration) context.getDeclarationResolver().getDeclaration( (String) usedIdentifiers[0].get( i ) );
         //        }
 
-        final DroolsMVELFactory factory = new DroolsMVELFactory();
-        factory.setPreviousDeclarationMap( context.getDeclarationResolver().getDeclarations() );
-        factory.setGlobalsMap( context.getPkg().getGlobals() );
+        final DroolsMVELFactory factory = new DroolsMVELFactory(context.getDeclarationResolver().getDeclarations(), null,  context.getPkg().getGlobals() );
 
         final Serializable expr = MVEL.compileExpression( (String) evalDescr.getContent() );
         final EvalCondition eval = new EvalCondition( declarations );

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-05-22 07:04:06 UTC (rev 12055)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELFromBuilder.java	2007-05-22 07:04:17 UTC (rev 12056)
@@ -66,9 +66,7 @@
         try {
             //            JFDIParser parser = createParser( utils,
             //                                              accessor.toString() );
-            final DroolsMVELFactory factory = new DroolsMVELFactory();
-            factory.setPreviousDeclarationMap( context.getDeclarationResolver().getDeclarations() );
-            factory.setGlobalsMap( context.getPkg().getGlobals() );
+            final DroolsMVELFactory factory = new DroolsMVELFactory(context.getDeclarationResolver().getDeclarations(), null,  context.getPkg().getGlobals() );
 
             //parser.setValueHandlerFactory( factory );
             final Serializable compiled = MVEL.compileExpression( accessor.toString() );

Modified: 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	2007-05-22 07:04:06 UTC (rev 12055)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELPredicateBuilder.java	2007-05-22 07:04:17 UTC (rev 12056)
@@ -55,24 +55,22 @@
         //            declarations[i] = (Declaration) context.getDeclarationResolver().getDeclaration( (String) usedIdentifiers[0].get( i ) );
         //        }
 
-        final DroolsMVELFactory factory = new DroolsMVELFactory();
+        //final DroolsMVELFactory factory = new DroolsMVELFactory();
 
-        Map map = new HashMap();
+        Map previousMap = new HashMap();
         for ( int i = 0, length = previousDeclarations.length; i < length; i++ ) {
-            map.put( previousDeclarations[i].getIdentifier(),
+            previousMap.put( previousDeclarations[i].getIdentifier(),
                      previousDeclarations[i] );
         }
-        factory.setPreviousDeclarationMap( map );
 
-        map = new HashMap();
+        Map localMap = new HashMap();
         for ( int i = 0, length = localDeclarations.length; i < length; i++ ) {
-            map.put( localDeclarations[i].getIdentifier(),
+            localMap.put( localDeclarations[i].getIdentifier(),
                      localDeclarations[i] );
         }
-        factory.setLocalDeclarationMap( map );
+        
+        final DroolsMVELFactory factory = new DroolsMVELFactory(previousMap, localMap,  context.getPkg().getGlobals() );
 
-        factory.setGlobalsMap( context.getPkg().getGlobals() );
-
         final Serializable expr = MVEL.compileExpression( (String) predicateDescr.getContent() );
         predicate.setPredicateExpression( new MVELPredicateExpression( expr,
                                                                        factory ) );

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELReturnValueBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELReturnValueBuilder.java	2007-05-22 07:04:06 UTC (rev 12055)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELReturnValueBuilder.java	2007-05-22 07:04:17 UTC (rev 12056)
@@ -47,67 +47,24 @@
                       final Declaration[] localDeclarations,
                       final ReturnValueRestriction returnValueRestriction,
                       final ReturnValueRestrictionDescr returnValueRestrictionDescr) {
-        final DroolsMVELFactory factory = new DroolsMVELFactory();
 
-        Map map = new HashMap();
+        Map previousMap = new HashMap();
         for ( int i = 0, length = previousDeclarations.length; i < length; i++ ) {
-            map.put( previousDeclarations[i].getIdentifier(),
+            previousMap.put( previousDeclarations[i].getIdentifier(),
                      previousDeclarations[i] );
         }
-        factory.setPreviousDeclarationMap( map );
 
-        map = new HashMap();
+        Map localMap = new HashMap();
         for ( int i = 0, length = localDeclarations.length; i < length; i++ ) {
-            map.put( localDeclarations[i].getIdentifier(),
+            localMap.put( localDeclarations[i].getIdentifier(),
                      localDeclarations[i] );
         }
-        factory.setLocalDeclarationMap( map );
+        
+        final DroolsMVELFactory factory = new DroolsMVELFactory(previousMap, localMap,  context.getPkg().getGlobals() );
 
-        factory.setGlobalsMap( context.getPkg().getGlobals() );
-
         final Serializable expr = MVEL.compileExpression( (String) returnValueRestrictionDescr.getContent() );
         returnValueRestriction.setReturnValueExpression( new MVELReturnValueExpression( expr,
                                                                                         factory ) );
     }
 
-    public void build(final RuleBuildContext context,
-                      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 ) );
-        //        }
-
-        final 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() );
-
-        final Serializable expr = MVEL.compileExpression( (String) predicateDescr.getContent() );
-        predicate.setPredicateExpression( new MVELPredicateExpression( expr,
-                                                                       factory ) );
-    }
-
 }

Added: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MVELTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MVELTest.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MVELTest.java	2007-05-22 07:04:17 UTC (rev 12056)
@@ -0,0 +1,66 @@
+package org.drools.integrationtests;
+
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.drools.Cheese;
+import org.drools.RuleBase;
+import org.drools.RuleBaseFactory;
+import org.drools.WorkingMemory;
+import org.drools.compiler.DrlParser;
+import org.drools.compiler.DroolsParserException;
+import org.drools.compiler.PackageBuilder;
+import org.drools.integrationtests.helloworld.Message;
+import org.drools.lang.descr.PackageDescr;
+import org.drools.rule.Package;
+
+import junit.framework.Assert;
+import junit.framework.TestCase;
+
+public class MVELTest extends TestCase {
+    public void testHelloWorld() throws Exception {
+
+        // read in the source
+        final Reader reader = new InputStreamReader( getClass().getResourceAsStream( "test_mvel.drl" ) );
+        final RuleBase ruleBase = loadRuleBase( reader );
+
+        final WorkingMemory workingMemory = ruleBase.newStatefulSession();
+
+        final List list = new ArrayList();
+        workingMemory.setGlobal( "list",
+                                 list );
+
+        workingMemory.assertObject( new Cheese("stilton", 10) );
+        workingMemory.fireAllRules();
+        assertEquals( new Integer(30), list.get(0));
+    }
+
+    private RuleBase loadRuleBase(final Reader reader) throws IOException,
+                                                      DroolsParserException,
+                                                      Exception {
+        final DrlParser parser = new DrlParser();
+        final PackageDescr packageDescr = parser.parse( reader );
+        if ( parser.hasErrors() ) {
+            Assert.fail( "Error messages in parser, need to sort this our (or else collect error messages)" );
+        }
+        // pre build the package
+        final PackageBuilder builder = new PackageBuilder();
+        builder.addPackage( packageDescr );
+        final Package pkg = builder.getPackage();
+
+        // add the package to a rulebase
+        final RuleBase ruleBase = getRuleBase();
+        ruleBase.addPackage( pkg );
+        // load up the rulebase
+        return ruleBase;
+    }
+
+    protected RuleBase getRuleBase() throws Exception {
+
+        return RuleBaseFactory.newRuleBase( RuleBase.RETEOO,
+                                            null );
+    }
+}

Added: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_mvel.drl
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_mvel.drl	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_mvel.drl	2007-05-22 07:04:17 UTC (rev 12056)
@@ -0,0 +1,18 @@
+package org.drools.test;
+
+import org.drools.Cheese;
+
+global java.util.List list;
+
+rule "Throw Eval Exception"
+	dialect "mvel"
+    when
+//        $c : Cheese(type == "stilton", (price == (new Integer(5) + 5)), price == (new Integer(5) + 5) )
+        $c : Cheese(type == "stilton" )
+        eval( $c.price == 10 )
+    then
+	long a = new java.math.BigInteger( 10 );
+    b = a + 10;
+	System.out.println("hello");
+	list.add( b + $c.price);
+end  
\ No newline at end of file




More information about the jboss-svn-commits mailing list