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

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Mon May 28 17:15:26 EDT 2007


Author: mark.proctor at jboss.com
Date: 2007-05-28 17:15:26 -0400 (Mon, 28 May 2007)
New Revision: 12187

Modified:
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/DialectRegistry.java
   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/dialect/java/JavaDialect.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/MVELDialect.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
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELSalienceBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_mvel.drl
Log:
JBRULES-708 MVEL Integration
-Trying to get imports and static imports to work.

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/DialectRegistry.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/DialectRegistry.java	2007-05-28 20:47:42 UTC (rev 12186)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/DialectRegistry.java	2007-05-28 21:15:26 UTC (rev 12187)
@@ -1,6 +1,7 @@
 package org.drools.compiler;
 
 import java.util.HashMap;
+import java.util.Iterator;
 import java.util.Map;
 
 import org.drools.rule.builder.Dialect;
@@ -22,4 +23,18 @@
         return (Dialect) this.map.get( name );
     }
 
+    public void addImport(String importEntry) {
+        for ( Iterator it = this.map.values().iterator(); it.hasNext(); ) {
+            Dialect dialect = ( Dialect ) it.next();
+            dialect.addImport( importEntry );
+        }
+    }
+    
+    public void addStaticImport(String staticImportEntry) {
+        for ( Iterator it = this.map.values().iterator(); it.hasNext(); ) {
+            Dialect dialect = ( Dialect ) it.next();
+            dialect.addStaticImport( staticImportEntry );
+        }        
+    }
+    
 }

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-28 20:47:42 UTC (rev 12186)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/PackageBuilder.java	2007-05-28 21:15:26 UTC (rev 12187)
@@ -288,11 +288,14 @@
         for ( final Iterator it = imports.iterator(); it.hasNext(); ) {
             String importEntry = ((ImportDescr) it.next()).getTarget();
             pkg.addImport( importEntry );
+            this.dialects.addImport( importEntry );
             this.typeResolver.addImport( importEntry );
         }
 
         for ( final Iterator it = packageDescr.getFunctionImports().iterator(); it.hasNext(); ) {
-            pkg.addStaticImport( ((FunctionImportDescr) it.next()).getTarget() );
+            String importEntry =  ((FunctionImportDescr) it.next()).getTarget();
+            this.dialects.addImport( importEntry );
+            pkg.addStaticImport( importEntry );
         }
         
         ((ClassTypeResolver)this.typeResolver).setClassLoader( pkg.getPackageCompilationData().getClassLoader() );

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-28 20:47:42 UTC (rev 12186)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/Dialect.java	2007-05-28 21:15:26 UTC (rev 12187)
@@ -1,5 +1,6 @@
 package org.drools.rule.builder;
 
+import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
@@ -52,6 +53,10 @@
 
     void addFunction(final FunctionDescr functionDescr,
                      TypeResolver typeResolver);
+    
+    public void addImport(String importEntry);
+    
+    public void addStaticImport(String importEntry);
 
     List getResults();
 

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaDialect.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaDialect.java	2007-05-28 20:47:42 UTC (rev 12186)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaDialect.java	2007-05-28 21:15:26 UTC (rev 12187)
@@ -491,6 +491,14 @@
             }
         }
     }
+    
+    public void addImport(String importEntry) {
+        // we don't need to do anything here
+    }
+    
+    public void addStaticImport(String staticImportEntry) {
+        // we don't need to do anything here
+    }    
 
     public List getResults() {
         return this.results;

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-28 20:47:42 UTC (rev 12186)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELConsequenceBuilder.java	2007-05-28 21:15:26 UTC (rev 12187)
@@ -17,10 +17,12 @@
         // pushing consequence LHS into the stack for variable resolution
         context.getBuildStack().push( context.getRule().getLhs() );
 
+        //factory.setNextFactory( ((MVELDialect)context.getDialect()).getStaticMethodImportResolverFactory() );
+        
         final DroolsMVELFactory factory = new DroolsMVELFactory(context.getDeclarationResolver().getDeclarations(), null,  context.getPkg().getGlobals() );
+        factory.setNextFactory( ((MVELDialect)context.getDialect()).getClassImportResolverFactory() );
 
         final Serializable expr = MVEL.compileExpression( delimitExpressions( (String) context.getRuleDescr().getConsequence()) );
-        //final Serializable expr = MVEL.compileExpression( (String) ruleDescr.getConsequence() );
 
         context.getRule().setConsequence( new MVELConsequence( expr,
                                                                factory ) );

Modified: 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	2007-05-28 20:47:42 UTC (rev 12186)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELDialect.java	2007-05-28 21:15:26 UTC (rev 12187)
@@ -1,5 +1,6 @@
 package org.drools.rule.builder.dialect.mvel;
 
+import java.lang.reflect.Method;
 import java.nio.channels.UnsupportedAddressTypeException;
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -50,30 +51,34 @@
 import org.drools.rule.builder.dialect.java.JavaReturnValueBuilder;
 import org.drools.rule.builder.dialect.java.JavaRuleClassBuilder;
 import org.drools.rule.builder.dialect.java.KnowledgeHelperFixer;
+import org.mvel.integration.impl.ClassImportResolverFactory;
+import org.mvel.integration.impl.StaticMethodImportResolverFactory;
 
 public class MVELDialect
     implements
     Dialect {
 
-    private final PatternBuilder           pattern     = new PatternBuilder( this );
+    private final PatternBuilder                    pattern     = new PatternBuilder( this );
     //private final JavaAccumulateBuilder    accumulate   = new JavaAccumulateBuilder();
-    private final SalienceBuilder          salience    = new MVELSalienceBuilder();
-    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 SalienceBuilder                   salience    = new MVELSalienceBuilder();
+    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 final MVELFromBuilder                   from        = new MVELFromBuilder();
 
-    private List                           results;
+    private List                                    results;
     //private final JavaFunctionBuilder      function     = new JavaFunctionBuilder();
 
-    private Package                        pkg;
-    private PackageBuilderConfiguration    configuration;
-    private final TypeResolver             typeResolver;
-    private final ClassFieldExtractorCache classFieldExtractorCache;
+    private Package                                 pkg;
+    private PackageBuilderConfiguration             configuration;
+    private final TypeResolver                      typeResolver;
+    private final ClassFieldExtractorCache          classFieldExtractorCache;
+    private final MVELExprAnalyzer                  analyzer;
 
-    private final MVELExprAnalyzer         analyzer;
+    private final StaticMethodImportResolverFactory staticImportFactory;
+    private final ClassImportResolverFactory        importFactory;
 
     public void addFunction(FunctionDescr functionDescr,
                             TypeResolver typeResolver) {
@@ -89,7 +94,7 @@
         this.configuration = builder.getPackageBuilderConfiguration();
         this.typeResolver = builder.getTypeResolver();
         this.classFieldExtractorCache = builder.getClassFieldExtractorCache();
-        
+
         this.analyzer = new MVELExprAnalyzer();
 
         if ( pkg != null ) {
@@ -97,6 +102,10 @@
         }
 
         initBuilder();
+
+        this.importFactory = new ClassImportResolverFactory();
+        this.staticImportFactory = new StaticMethodImportResolverFactory();
+        this.importFactory.setNextFactory( this.staticImportFactory );
     }
 
     public void initBuilder() {
@@ -145,6 +154,44 @@
 
     }
 
+    public void addImport(String importEntry) {
+        try {
+            Class cls = this.configuration.getClassLoader().loadClass( importEntry );
+            this.importFactory.addClass( cls );
+        } catch ( ClassNotFoundException e ) {
+            // @todo: add MVEL error
+            this.results.add( null );
+        }
+    }
+
+    public void addStaticImport(String staticImportEntry) {                
+        int index = staticImportEntry.lastIndexOf( '.' );
+        String className = staticImportEntry.substring( 0, index );
+        String methodName = staticImportEntry.substring( 0, index + 1 );
+        
+        try {
+            Class cls = this.configuration.getClassLoader().loadClass( className );
+            Method[] methods = cls.getDeclaredMethods();
+            for ( int i = 0; i < methods.length; i++ ) {
+                if ( methods[i].equals( "methodName" ) ) {
+                    this.staticImportFactory.createVariable( methodName, methods[i] );
+                    break;
+                }
+            }
+        } catch ( ClassNotFoundException e ) {
+            // @todo: add MVEL error
+            this.results.add( null );
+        }        
+    }
+    
+    public StaticMethodImportResolverFactory getStaticMethodImportResolverFactory() {
+        return this.staticImportFactory;
+    }
+    
+    public ClassImportResolverFactory getClassImportResolverFactory() {
+        return this.importFactory;
+    }
+
     public void compileAll() {
     }
 

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-28 20:47:42 UTC (rev 12186)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELEvalBuilder.java	2007-05-28 21:15:26 UTC (rev 12187)
@@ -56,17 +56,8 @@
         // it must be an EvalDescr
         final EvalDescr evalDescr = (EvalDescr) descr;
 
-        //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(context.getDeclarationResolver().getDeclarations(), null,  context.getPkg().getGlobals() );
+        factory.setNextFactory( ((MVELDialect)context.getDialect()).getClassImportResolverFactory() );        
 
         final List[] usedIdentifiers = context.getDialect().getExpressionIdentifiers( context,
                                                                                       evalDescr,

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-28 20:47:42 UTC (rev 12186)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELFromBuilder.java	2007-05-28 21:15:26 UTC (rev 12187)
@@ -64,9 +64,8 @@
         final AccessorDescr accessor = (AccessorDescr) fromDescr.getDataSource();
         DataProvider dataProvider = null;
         try {
-            //            JFDIParser parser = createParser( utils,
-            //                                              accessor.toString() );
             final DroolsMVELFactory factory = new DroolsMVELFactory(context.getDeclarationResolver().getDeclarations(), null,  context.getPkg().getGlobals() );
+            factory.setNextFactory( ((MVELDialect)context.getDialect()).getClassImportResolverFactory() );            
 
             //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-28 20:47:42 UTC (rev 12186)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELPredicateBuilder.java	2007-05-28 21:15:26 UTC (rev 12187)
@@ -44,19 +44,6 @@
                       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 previousMap = new HashMap();
         for ( int i = 0, length = previousDeclarations.length; i < length; i++ ) {
             previousMap.put( previousDeclarations[i].getIdentifier(),
@@ -72,6 +59,7 @@
         final DroolsMVELFactory factory = new DroolsMVELFactory( previousMap,
                                                                  localMap,
                                                                  context.getPkg().getGlobals() );
+        factory.setNextFactory( ((MVELDialect)context.getDialect()).getClassImportResolverFactory() );        
 
         final Serializable expr = MVEL.compileExpression( (String) predicateDescr.getContent() );
         predicate.setPredicateExpression( new MVELPredicateExpression( expr,

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-28 20:47:42 UTC (rev 12186)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELReturnValueBuilder.java	2007-05-28 21:15:26 UTC (rev 12187)
@@ -61,6 +61,7 @@
         }             
         
         final DroolsMVELFactory factory = new DroolsMVELFactory(previousMap, localMap,  context.getPkg().getGlobals() );
+        factory.setNextFactory( ((MVELDialect)context.getDialect()).getClassImportResolverFactory() );
 
         final Serializable expr = MVEL.compileExpression( (String) returnValueRestrictionDescr.getContent() );
         returnValueRestriction.setReturnValueExpression( new MVELReturnValueExpression( expr,

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELSalienceBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELSalienceBuilder.java	2007-05-28 20:47:42 UTC (rev 12186)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELSalienceBuilder.java	2007-05-28 21:15:26 UTC (rev 12187)
@@ -16,6 +16,8 @@
         context.getBuildStack().push( context.getRule().getLhs() );
         
         final DroolsMVELFactory factory = new DroolsMVELFactory(context.getDeclarationResolver().getDeclarations(), null, context.getPkg().getGlobals());
+        factory.setNextFactory( ((MVELDialect)context.getDialect()).getClassImportResolverFactory() );        
+        
 
         final Serializable expr = MVEL.compileExpression( (String) context.getRuleDescr().getSalience() );
 

Modified: 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	2007-05-28 20:47:42 UTC (rev 12186)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_mvel.drl	2007-05-28 21:15:26 UTC (rev 12187)
@@ -10,11 +10,18 @@
         $c : Cheese(type == "stilton", price == (new Integer( 5 ) + 5 ), eval(price == (new Integer( 5 ) + 5 ) ) )
         eval( $c.price == 10 && list == empty)
     then
-    	#we have optional ";"
-        a = new java.math.BigInteger( "10" ) 
-        b = new java.math.BigInteger( "10" )
+        Cheese cheese = new Cheese("cheddar", 15);
+        a = new java.math.BigInteger( "10" );
+        b = new java.math.BigInteger( "10" );
+        c = a + b; //look ma, optional ';' - ooh ahh....
+        list.add( c + $c.price);
 
-		#use ";" to seperate on the one line        
-        c = a + b; list.add( c + $c.price)
+//    	#we have optional ";"
+//        a = new java.math.BigInteger( "10" ) 
+//        b = new java.math.BigInteger( "10" )
+//
+//		#use ";" to seperate on the one line        
+//      c = a + b; list.add( c + $c.price)
         
+
 end
\ No newline at end of file




More information about the jboss-svn-commits mailing list