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

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed Feb 28 22:09:55 EST 2007


Author: mark.proctor at jboss.com
Date: 2007-02-28 22:09:55 -0500 (Wed, 28 Feb 2007)
New Revision: 9868

Added:
   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/RuleClassBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaDialect.java
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/ColumnBuilder.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/JavaReturnValueBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaRuleClassBuilder.java
Log:
JBRULES-713 Make Dialects Pluggeable
-Moved RuleBuilder and ColumnBuilder to use the new Dialect class

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-03-01 02:40:42 UTC (rev 9867)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/PackageBuilder.java	2007-03-01 03:09:55 UTC (rev 9868)
@@ -57,6 +57,7 @@
 import org.drools.rule.Rule;
 import org.drools.rule.builder.FunctionBuilder;
 import org.drools.rule.builder.RuleBuilder;
+import org.drools.rule.builder.dialect.java.JavaDialect;
 import org.drools.rule.builder.dialect.java.JavaFunctionBuilder;
 import org.drools.rule.builder.dialect.java.PackageStore;
 import org.drools.spi.FunctionResolver;
@@ -70,8 +71,6 @@
  * This can be done by merging into existing binary packages, or totally from source.
  */
 public class PackageBuilder {
-    private static final JavaCompiler   cachedJavaCompiler = null;
-
     private JavaCompiler                compiler;
     private Package                     pkg;
     private List                        results;
@@ -203,7 +202,8 @@
         }
 
         builder = new RuleBuilder( getTypeResolver(),
-                                   this.classFieldExtractorCache );
+                                   this.classFieldExtractorCache,
+                                   new JavaDialect() );
 
         //only try to compile if there are no parse errors
         if ( !hasErrors() ) {

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/ColumnBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/ColumnBuilder.java	2007-03-01 02:40:42 UTC (rev 9867)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/ColumnBuilder.java	2007-03-01 03:09:55 UTC (rev 9868)
@@ -19,6 +19,7 @@
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
 
 import org.antlr.stringtemplate.StringTemplate;
 import org.apache.commons.jci.utils.ClassUtils;
@@ -70,6 +71,12 @@
  */
 public class ColumnBuilder {
 
+    private Dialect dialect;
+
+    public ColumnBuilder(Dialect dialect) {
+        this.dialect = dialect;
+    }
+
     /**
      * Build a column for the given descriptor in the current 
      * context and using the given utils object
@@ -379,7 +386,7 @@
                                                                                  localDeclarations );
         column.addConstraint( predicateConstraint );
 
-        JavaPredicateBuilder builder = new JavaPredicateBuilder();
+        PredicateBuilder builder = (PredicateBuilder) dialect.getPredicateBuilder();
 
         builder.build( context,
                        utils,
@@ -545,7 +552,7 @@
                                                                                           localDeclarations,
                                                                                           evaluator );
 
-        JavaReturnValueBuilder builder = new JavaReturnValueBuilder();
+        ReturnValueBuilder builder = (ReturnValueBuilder) this.dialect.getReturnValueBuilder();
 
         builder.build( context,
                        utils,

Added: 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	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/Dialect.java	2007-03-01 03:09:55 UTC (rev 9868)
@@ -0,0 +1,20 @@
+package org.drools.rule.builder;
+
+import org.drools.reteoo.builder.EvalBuilder;
+
+public interface Dialect {
+    ConditionalElementBuilder getEvalBuilder();
+    
+    AccumulateBuilder getAccumulateBuilder();
+    
+    PredicateBuilder getPredicateBuilder();
+    
+    ReturnValueBuilder getReturnValueBuilder();
+    
+    ConsequenceBuilder getConsequenceBuilder();    
+    
+    RuleClassBuilder getRuleClassBuilder();
+    
+    FromBuilder getFromBuilder();
+    
+}

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-03-01 02:40:42 UTC (rev 9867)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/RuleBuilder.java	2007-03-01 03:09:55 UTC (rev 9868)
@@ -48,7 +48,7 @@
 import org.drools.rule.builder.dialect.java.JavaEvalBuilder;
 import org.drools.rule.builder.dialect.java.JavaExprAnalyzer;
 import org.drools.rule.builder.dialect.java.KnowledgeHelperFixer;
-import org.drools.rule.builder.dialect.java.RuleClassBuilder;
+import org.drools.rule.builder.dialect.java.JavaRuleClassBuilder;
 import org.drools.rule.builder.dialect.mvel.MVELFromBuilder;
 
 /**
@@ -75,23 +75,24 @@
 
     // the builder for the rule class
     private RuleClassBuilder   classBuilder;
+    
+    private Dialect dialect;
 
     // Constructor
     public RuleBuilder(final TypeResolver typeResolver,
-                       final ClassFieldExtractorCache cache) {
+                       final ClassFieldExtractorCache cache,
+                       Dialect dialect) {
 
+        this.dialect = dialect;
+        
         // 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();
-        builders.put( EvalDescr.class,
-                      new JavaEvalBuilder() );
-        builders.put( FromDescr.class,
-                      new MVELFromBuilder() );
+                
         builders.put( CollectDescr.class,
-                      new CollectBuilder() );
-        builders.put( AccumulateDescr.class,
-                      new JavaAccumulateBuilder() );
+                      new CollectBuilder() );        
+        
         builders.put( ForallDescr.class,
                       new ForallBuilder() );
         GroupElementBuilder gebuilder = new GroupElementBuilder();
@@ -102,20 +103,30 @@
         builders.put( NotDescr.class,
                       gebuilder );
         builders.put( ExistsDescr.class,
-                      gebuilder );
+                      gebuilder );               
+               
+        // dialect specific        
+        this.columnBuilder = new ColumnBuilder( this.dialect );
+        
+        builders.put( FromDescr.class,
+                      this.dialect.getFromBuilder() );
+        
+        builders.put( AccumulateDescr.class,
+                      this.dialect.getAccumulateBuilder() );
 
+        builders.put( EvalDescr.class,
+                      this.dialect.getEvalBuilder() );
+        
+        this.consequenceBuilder = (ConsequenceBuilder) this.dialect.getConsequenceBuilder();       
+
+        this.classBuilder = ( RuleClassBuilder) this.dialect.getRuleClassBuilder();
+                        
         this.utils = new BuildUtils( new KnowledgeHelperFixer(),
                                      new DeclarationTypeFixer(),
                                      new JavaExprAnalyzer(),
                                      typeResolver,
                                      cache,
-                                     builders );
-
-        this.columnBuilder = new ColumnBuilder();
-
-        this.consequenceBuilder = new JavaConsequenceBuilder();
-
-        this.classBuilder = new RuleClassBuilder();
+                                     builders );        
     }
 
     public Map getInvokers() {

Added: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/RuleClassBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/RuleClassBuilder.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/RuleClassBuilder.java	2007-03-01 03:09:55 UTC (rev 9868)
@@ -0,0 +1,12 @@
+package org.drools.rule.builder;
+
+import org.drools.lang.descr.RuleDescr;
+import org.drools.rule.builder.dialect.java.BuildUtils;
+
+public interface RuleClassBuilder {
+
+    public void buildRule(final BuildContext context,
+                          final BuildUtils utils,
+                          final RuleDescr ruleDescr);
+
+}
\ No newline at end of file

Added: 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	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaDialect.java	2007-03-01 03:09:55 UTC (rev 9868)
@@ -0,0 +1,56 @@
+package org.drools.rule.builder.dialect.java;
+
+import org.drools.reteoo.builder.EvalBuilder;
+import org.drools.rule.builder.AccumulateBuilder;
+import org.drools.rule.builder.ConditionalElementBuilder;
+import org.drools.rule.builder.ConsequenceBuilder;
+import org.drools.rule.builder.Dialect;
+import org.drools.rule.builder.FromBuilder;
+import org.drools.rule.builder.PredicateBuilder;
+import org.drools.rule.builder.ReturnValueBuilder;
+import org.drools.rule.builder.RuleBuilder;
+import org.drools.rule.builder.RuleClassBuilder;
+import org.drools.rule.builder.dialect.mvel.MVELFromBuilder;
+
+public class JavaDialect
+    implements
+    Dialect {
+
+    private JavaAccumulateBuilder accumulate = new JavaAccumulateBuilder();
+    private JavaConsequenceBuilder consequence = new JavaConsequenceBuilder();
+    private JavaEvalBuilder eval = new JavaEvalBuilder();
+    private JavaPredicateBuilder predicate = new JavaPredicateBuilder();
+    private JavaReturnValueBuilder returnValue = new JavaReturnValueBuilder();
+    private JavaRuleClassBuilder rule = new JavaRuleClassBuilder();
+    private MVELFromBuilder from = new MVELFromBuilder();
+    
+    
+    public AccumulateBuilder getAccumulateBuilder() {
+        return this.accumulate;
+    }
+
+    public ConsequenceBuilder getConsequenceBuilder() {
+        return this.consequence;
+    }
+
+    public ConditionalElementBuilder getEvalBuilder() {
+        return this.eval;
+    }
+
+    public PredicateBuilder getPredicateBuilder() {
+        return this.predicate;
+    }
+
+    public ReturnValueBuilder getReturnValueBuilder() {
+        return this.returnValue;
+    }
+
+    public RuleClassBuilder getRuleClassBuilder() {
+        return this.rule;
+    }
+    
+    public FromBuilder getFromBuilder() {
+        return this.from;
+    }
+
+}

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaReturnValueBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaReturnValueBuilder.java	2007-03-01 02:40:42 UTC (rev 9867)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaReturnValueBuilder.java	2007-03-01 03:09:55 UTC (rev 9868)
@@ -7,8 +7,9 @@
 import org.drools.rule.Declaration;
 import org.drools.rule.ReturnValueRestriction;
 import org.drools.rule.builder.BuildContext;
+import org.drools.rule.builder.ReturnValueBuilder;
 
-public class JavaReturnValueBuilder {
+public class JavaReturnValueBuilder implements ReturnValueBuilder {
     public void build(final BuildContext context,
                       final BuildUtils utils,
                       final List[] usedIdentifiers,

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaRuleClassBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaRuleClassBuilder.java	2007-03-01 02:40:42 UTC (rev 9867)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaRuleClassBuilder.java	2007-03-01 03:09:55 UTC (rev 9868)
@@ -20,13 +20,17 @@
 
 import org.drools.lang.descr.RuleDescr;
 import org.drools.rule.builder.BuildContext;
+import org.drools.rule.builder.RuleClassBuilder;
 
 /**
  * @author etirelli
  *
  */
-public class JavaRuleClassBuilder {
+public class JavaRuleClassBuilder implements RuleClassBuilder {
 
+    /* (non-Javadoc)
+     * @see org.drools.rule.builder.dialect.java.RuleClassBuilder#buildRule(org.drools.rule.builder.BuildContext, org.drools.rule.builder.dialect.java.BuildUtils, org.drools.lang.descr.RuleDescr)
+     */
     public void buildRule(final BuildContext context,
                            final BuildUtils utils,
                            final RuleDescr ruleDescr) {




More information about the jboss-svn-commits mailing list