[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