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

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed Apr 25 14:15:53 EDT 2007


Author: mark.proctor at jboss.com
Date: 2007-04-25 14:15:52 -0400 (Wed, 25 Apr 2007)
New Revision: 11331

Modified:
   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/java/JavaDialect.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/java/RuleBuilderTest.java
Log:
JBRULES-713 Make Dialects Pluggeable
-RuleBuilder is now stateless all state is held in RuleBuildContext and JavaDialect

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-04-25 17:37:34 UTC (rev 11330)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/PackageBuilder.java	2007-04-25 18:15:52 UTC (rev 11331)
@@ -44,6 +44,7 @@
 import org.drools.rule.Package;
 import org.drools.rule.Rule;
 import org.drools.rule.builder.Dialect;
+import org.drools.rule.builder.RuleBuildContext;
 import org.drools.rule.builder.RuleBuilder;
 import org.drools.rule.builder.dialect.java.JavaDialect;
 import org.drools.xml.XmlPackageReader;
@@ -206,9 +207,7 @@
             this.pkg = newPackage( packageDescr );
         }
 
-        this.builder = new RuleBuilder( getTypeResolver(),
-                                        this.classFieldExtractorCache,
-                                        this.dialect );
+        this.builder = new RuleBuilder( );
 
         // only try to compile if there are no parse errors
         if ( !hasErrors() ) {
@@ -337,19 +336,17 @@
 
     private void addRule(final RuleDescr ruleDescr) {
         this.dialect.init( ruleDescr );
+        
+        RuleBuildContext context = new RuleBuildContext( pkg,
+                                                         ruleDescr );        
+        context.setDialect( this.dialect );
+        this.builder.build( context );
+                
+        this.results.addAll( context.getErrors() );       
 
-        this.builder.build( this.pkg,
-                            ruleDescr );
+        this.dialect.addRule( context );
 
-        this.results.addAll( this.builder.getErrors() );
-
-        final Rule rule = this.builder.getRule();
-
-        this.dialect.addRule( this.builder,
-                                       rule,
-                                       ruleDescr );
-
-        this.pkg.addRule( rule );
+        this.pkg.addRule( context.getRule() );
     }
 
     /**

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-04-25 17:37:34 UTC (rev 11330)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/Dialect.java	2007-04-25 18:15:52 UTC (rev 11331)
@@ -44,9 +44,7 @@
 
     void compileAll();
 
-    void addRule(final RuleBuilder builder,
-                          final Rule rule,
-                          final RuleDescr ruleDescr);
+    void addRule(final RuleBuildContext context);
 
     void addFunction(final FunctionDescr functionDescr,
                      TypeResolver typeResolver);

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-04-25 17:37:34 UTC (rev 11330)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/RuleBuilder.java	2007-04-25 18:15:52 UTC (rev 11331)
@@ -17,33 +17,17 @@
  */
 
 import java.util.Calendar;
-import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
-import java.util.Map;
 
-import org.codehaus.jfdi.interpreter.TypeResolver;
 import org.drools.RuntimeDroolsException;
-import org.drools.base.ClassFieldExtractorCache;
 import org.drools.base.evaluators.DateFactory;
-import org.drools.lang.descr.AccumulateDescr;
-import org.drools.lang.descr.AndDescr;
 import org.drools.lang.descr.AttributeDescr;
-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.NotDescr;
-import org.drools.lang.descr.OrDescr;
 import org.drools.lang.descr.QueryDescr;
 import org.drools.lang.descr.RuleDescr;
 import org.drools.rule.GroupElement;
 import org.drools.rule.Package;
 import org.drools.rule.Rule;
-import org.drools.rule.builder.dialect.java.DeclarationTypeFixer;
-import org.drools.rule.builder.dialect.java.JavaExprAnalyzer;
-import org.drools.rule.builder.dialect.java.KnowledgeHelperFixer;
 
 /**
  * This builds the rule structure from an AST.
@@ -52,75 +36,28 @@
  */
 public class RuleBuilder {
 
-    // the current build context
-    private RuleBuildContext context;
-
-    private Dialect      dialect;
-
     // Constructor
-    public RuleBuilder(final TypeResolver typeResolver,
-                       final ClassFieldExtractorCache cache,
-                       final Dialect dialect) {
-
-        this.dialect = dialect;
+    public RuleBuilder() {
     }
 
-    public Map getInvokers() {
-        return (this.context == null) ? null : this.context.getInvokers();
-    }
-
-    public Map getDescrLookups() {
-        return (this.context == null) ? null : this.context.getDescrLookups();
-    }
-
-//    public String getRuleClass() {
-//        return (this.context == null) ? null : this.context.getRuleClass();
-//    }
-
-    public Map getInvokerLookups() {
-        return (this.context == null) ? null : this.context.getInvokerLookups();
-    }
-
-    public List getErrors() {
-        return (this.context == null) ? null : this.context.getErrors();
-    }
-
-    public Rule getRule() {
-        if ( this.context == null ) {
-            return null;
-        }
-        if ( !this.context.getErrors().isEmpty() ) {
-            this.context.getRule().setSemanticallyValid( false );
-        }
-        return this.context.getRule();
-    }
-
-    public Package getPackage() {
-        return this.context.getPkg();
-    }
-
     /**
      * Build the give rule into the 
      * @param pkg
      * @param ruleDescr
      * @return
      */
-    public synchronized Rule build(final Package pkg,
-                                   final RuleDescr ruleDescr) {
-        this.context = new RuleBuildContext( pkg,
-                                         ruleDescr );
+    public void build(final RuleBuildContext context) {
+        RuleDescr ruleDescr = context.getRuleDescr();
 
         // Assign attributes
-        setAttributes( this.context.getRule(),
+        setAttributes( context.getRule(),
                        ruleDescr.getAttributes() );
-        
-        this.context.setDialect( this.dialect );
 
-        final ConditionalElementBuilder builder = ( ConditionalElementBuilder ) context.getDialect().getBuilder( ruleDescr.getLhs().getClass() );
+        final ConditionalElementBuilder builder = (ConditionalElementBuilder) context.getDialect().getBuilder( ruleDescr.getLhs().getClass() );
         if ( builder != null ) {
-            final GroupElement ce = (GroupElement) builder.build( this.context,
+            final GroupElement ce = (GroupElement) builder.build( context,
                                                                   ruleDescr.getLhs() );
-            this.context.getRule().setLhs( ce );
+            context.getRule().setLhs( ce );
         } else {
             throw new RuntimeDroolsException( "BUG: builder not found for descriptor class " + ruleDescr.getLhs().getClass() );
         }
@@ -130,13 +67,11 @@
         if ( !(ruleDescr instanceof QueryDescr) ) {
             // do not build the consequence if we have a query
 
-            this.dialect.getConsequenceBuilder().build( this.context,
-                                                        ruleDescr );
+            context.getDialect().getConsequenceBuilder().build( context,
+                                                                ruleDescr );
         }
-        this.dialect.getRuleClassBuilder().buildRule( this.context,
-                                                      ruleDescr );
-
-        return this.context.getRule();
+        context.getDialect().getRuleClassBuilder().buildRule( context,
+                                                              ruleDescr );
     }
 
     /**

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-04-25 17:37:34 UTC (rev 11330)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaDialect.java	2007-04-25 18:15:52 UTC (rev 11331)
@@ -407,13 +407,14 @@
      * This will add the rule for compiling later on.
      * It will not actually call the compiler
      */
-    public void addRule(final RuleBuilder builder,
-                        final Rule rule,
-                        final RuleDescr ruleDescr) {
+    public void addRule(final RuleBuildContext context) {
         // return if there is no ruleclass name;       
         if ( this.ruleClass == null ) {
             return;
         }
+        
+        Rule rule = context.getRule();
+        RuleDescr ruleDescr = context.getRuleDescr();     
 
         // The compilation result is for th entire rule, so difficult to associate with any descr
         addClassCompileTask( this.pkg.getName() + "." + ruleDescr.getClassName(),
@@ -424,20 +425,20 @@
                                                    rule,
                                                    "Rule Compilation error" ) );
 
-        for ( final Iterator it = builder.getInvokers().keySet().iterator(); it.hasNext(); ) {
+        for ( final Iterator it = context.getInvokers().keySet().iterator(); it.hasNext(); ) {
             final String className = (String) it.next();
 
             // Check if an invoker - returnvalue, predicate, eval or consequence has been associated
             // If so we add it to the PackageCompilationData as it will get wired up on compilation
-            final Object invoker = builder.getInvokerLookups().get( className );
+            final Object invoker = context.getInvokerLookups().get( className );
             if ( invoker != null ) {
                 this.pkg.getPackageCompilationData().putInvoker( className,
                                                                  invoker );
             }
-            final String text = (String) builder.getInvokers().get( className );
+            final String text = (String) context.getInvokers().get( className );
 
             //System.out.println( className + ":\n" + text );
-            final BaseDescr descr = (BaseDescr) builder.getDescrLookups().get( className );
+            final BaseDescr descr = (BaseDescr) context.getDescrLookups().get( className );
             addClassCompileTask( className,
                                  descr,
                                  text,

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/java/RuleBuilderTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/java/RuleBuilderTest.java	2007-04-25 17:37:34 UTC (rev 11330)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/java/RuleBuilderTest.java	2007-04-25 18:15:52 UTC (rev 11331)
@@ -36,6 +36,7 @@
 import org.drools.rule.GroupElement;
 import org.drools.rule.Package;
 import org.drools.rule.Rule;
+import org.drools.rule.builder.RuleBuildContext;
 import org.drools.rule.builder.RuleBuilder;
 
 /**
@@ -81,21 +82,20 @@
         typeResolver.addImport( pkgDescr.getName() + ".*" );
         typeResolver.addImport( "java.lang.*" );
 
-        final RuleBuilder builder = new RuleBuilder( typeResolver,
-                                                     new ClassFieldExtractorCache(),
-                                                     new JavaDialect( null,
-                                                                      new PackageBuilderConfiguration(),
-                                                                      typeResolver,
-                                                                      new ClassFieldExtractorCache() ) );
+        final RuleBuilder builder = new RuleBuilder( );        
+        RuleBuildContext context = new RuleBuildContext(pkg, ruleDescr);
+        JavaDialect dialect =  new JavaDialect( null,
+                                                new PackageBuilderConfiguration(),
+                                                typeResolver,
+                                                new ClassFieldExtractorCache() ) ;        
+        context.setDialect( dialect );
+        builder.build( context );
 
-        builder.build( pkg,
-                       ruleDescr );
+        Assert.assertTrue( context.getErrors().toString(),
+                           context.getErrors().isEmpty() );
 
-        Assert.assertTrue( builder.getErrors().toString(),
-                           builder.getErrors().isEmpty() );
+        final Rule rule = context.getRule();
 
-        final Rule rule = builder.getRule();
-
         assertEquals( "There should be 2 rule level declarations",
                       2,
                       rule.getDeclarations().length );
@@ -120,12 +120,8 @@
     }
 
     public void testBuildAttributes() throws Exception {
-        final RuleBuilder builder = new RuleBuilder( null,
-                                                     null,
-                                                     new JavaDialect( null,
-                                                                      new PackageBuilderConfiguration(),
-                                                                      null,
-                                                                      null ) );
+        final RuleBuilder builder = new RuleBuilder( );        
+
         Rule rule = new Rule( "myrule" );
         List attributes = new ArrayList();
 




More information about the jboss-svn-commits mailing list