[jboss-svn-commits] JBL Code SVN: r11329 - in labs/jbossrules/trunk/drools-compiler/src: main/java/org/drools/compiler and 6 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Wed Apr 25 13:14:03 EDT 2007
Author: mark.proctor at jboss.com
Date: 2007-04-25 13:14:03 -0400 (Wed, 25 Apr 2007)
New Revision: 11329
Added:
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/RuleBuildContext.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/DialectSession.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaDialectSession.java
Removed:
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/BuildContext.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/BuildUtils.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/util/
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/AccumulateBuilder.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/CollectBuilder.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/ConditionalElementBuilder.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/ConsequenceBuilder.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/ForallBuilder.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/FromBuilder.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/GroupElementBuilder.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/PatternBuilder.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/PredicateBuilder.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/ReturnValueBuilder.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/RuleClassBuilder.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/DeclarationTypeFixer.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaAccumulateBuilder.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaConsequenceBuilder.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/java/JavaEvalBuilder.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaPredicateBuilder.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
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
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/lang/RuleParserTest.java
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/mvel/MVELConsequenceBuilderTest.java
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELEvalBuilderTest.java
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELPredicateBuilderTest.java
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELReturnValueBuilderTest.java
Log:
JBRULES-713 Make Dialects Pluggeable
-BuildUtils is now gone, moved into 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:13:42 UTC (rev 11328)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/PackageBuilder.java 2007-04-25 17:14:03 UTC (rev 11329)
@@ -50,9 +50,9 @@
import org.xml.sax.SAXException;
/**
- * This is the main compiler class for parsing and compiling rules and assembling or merging them into a
- * binary Package instance.
- * This can be done by merging into existing binary packages, or totally from source.
+ * This is the main compiler class for parsing and compiling rules and
+ * assembling or merging them into a binary Package instance. This can be done
+ * by merging into existing binary packages, or totally from source.
*/
public class PackageBuilder {
@@ -64,7 +64,7 @@
private TypeResolver typeResolver;
- private ClassFieldExtractorCache classFieldExtractorCache;
+ private ClassFieldExtractorCache classFieldExtractorCache;
private RuleBuilder builder;
@@ -73,7 +73,7 @@
private DialectRegistry dialects;
/**
- * Use this when package is starting from scratch.
+ * Use this when package is starting from scratch.
*/
public PackageBuilder() {
this( null,
@@ -94,9 +94,13 @@
}
/**
- * This allows you to pass in a pre existing package, and a configuration (for instance to set the classloader).
- * @param pkg A pre existing package (can be null if none exists)
- * @param configuration Optional configuration for this builder.
+ * This allows you to pass in a pre existing package, and a configuration
+ * (for instance to set the classloader).
+ *
+ * @param pkg
+ * A pre existing package (can be null if none exists)
+ * @param configuration
+ * Optional configuration for this builder.
*/
public PackageBuilder(final Package pkg,
PackageBuilderConfiguration configuration) {
@@ -108,17 +112,30 @@
this.results = new ArrayList();
this.pkg = pkg;
this.classFieldExtractorCache = new ClassFieldExtractorCache();
+
+
+ if ( this.pkg != null ) {
+ this.typeResolver = new ClassTypeResolver( this.pkg.getImports(),
+ this.pkg.getPackageCompilationData().getClassLoader() );
+ // make an automatic import for the current package
+ this.typeResolver.addImport( this.pkg.getName() + ".*" );
+ } else {
+ this.typeResolver = new ClassTypeResolver( new ArrayList(), configuration.getClassLoader() );
+ }
this.dialects = new DialectRegistry();
this.dialects.addDialect( "java",
new JavaDialect( pkg,
- configuration ) );
+ configuration,
+ getTypeResolver(),
+ this.classFieldExtractorCache ) );
this.dialect = this.dialects.getDialect( "java" );
}
/**
* Load a rule package from DRL source.
+ *
* @param reader
* @throws DroolsParserException
* @throws IOException
@@ -133,6 +150,7 @@
/**
* Load a rule package from XML source.
+ *
* @param reader
* @throws DroolsParserException
* @throws IOException
@@ -153,8 +171,11 @@
/**
* Load a rule package from DRL source using the supplied DSL configuration.
- * @param source The source of the rules.
- * @param dsl The source of the domain specific language configuration.
+ *
+ * @param source
+ * The source of the rules.
+ * @param dsl
+ * The source of the domain specific language configuration.
* @throws DroolsParserException
* @throws IOException
*/
@@ -168,10 +189,9 @@
addPackage( pkg );
}
- /**
- * This adds a package from a Descr/AST
- * This will also trigger a compile, if there are any generated classes to compile
- * of course.
+ /**
+ * This adds a package from a Descr/AST This will also trigger a compile, if
+ * there are any generated classes to compile of course.
*/
public void addPackage(final PackageDescr packageDescr) {
@@ -179,7 +199,7 @@
validateUniqueRuleNames( packageDescr );
if ( this.pkg != null ) {
- //mergePackage( packageDescr ) ;
+ // mergePackage( packageDescr ) ;
mergePackage( this.pkg,
packageDescr );
} else {
@@ -187,21 +207,21 @@
}
this.builder = new RuleBuilder( getTypeResolver(),
- this.classFieldExtractorCache,
- this.dialect );
+ this.classFieldExtractorCache,
+ this.dialect );
- //only try to compile if there are no parse errors
+ // only try to compile if there are no parse errors
if ( !hasErrors() ) {
for ( final Iterator it = packageDescr.getFactTemplates().iterator(); it.hasNext(); ) {
addFactTemplate( (FactTemplateDescr) it.next() );
}
- //iterate and compile
+ // iterate and compile
for ( final Iterator it = packageDescr.getFunctions().iterator(); it.hasNext(); ) {
addFunction( (FunctionDescr) it.next() );
}
- //iterate and compile
+ // iterate and compile
for ( final Iterator it = packageDescr.getRules().iterator(); it.hasNext(); ) {
addRule( (RuleDescr) it.next() );
}
@@ -213,7 +233,7 @@
}
private void validatePackageName(final PackageDescr packageDescr) {
- if (this.pkg != null) {
+ if ( this.pkg != null ) {
return;
}
if ( packageDescr.getName() == null || "".equals( packageDescr.getName() ) ) {
@@ -250,18 +270,25 @@
private void mergePackage(final Package pkg,
final PackageDescr packageDescr) {
+
+ // make sure we have initialised this typeResolver with "default" imports
+ if ( this.typeResolver.getImports().isEmpty() ) {
+ this.typeResolver.addImport( pkg.getName() + ".*" );
+ }
+
final List imports = packageDescr.getImports();
for ( final Iterator it = imports.iterator(); it.hasNext(); ) {
- pkg.addImport( ((ImportDescr) it.next()).getTarget() );
+ String importEntry = ((ImportDescr) it.next()).getTarget();
+ pkg.addImport( importEntry );
+ this.typeResolver.addImport( importEntry );
}
for ( final Iterator it = packageDescr.getFunctionImports().iterator(); it.hasNext(); ) {
pkg.addStaticImport( ((FunctionImportDescr) it.next()).getTarget() );
}
+
+ ((ClassTypeResolver)this.typeResolver).setClassLoader( pkg.getPackageCompilationData().getClassLoader() );
- final TypeResolver typeResolver = new ClassTypeResolver( pkg.getImports(),
- pkg.getPackageCompilationData().getClassLoader() );
-
final List globals = packageDescr.getGlobals();
for ( final Iterator it = globals.iterator(); it.hasNext(); ) {
final GlobalDescr global = (GlobalDescr) it.next();
@@ -312,13 +339,13 @@
this.dialect.init( ruleDescr );
this.builder.build( this.pkg,
- ruleDescr );
+ ruleDescr );
this.results.addAll( this.builder.getErrors() );
final Rule rule = this.builder.getRule();
- this.dialect.addRuleSemantics( this.builder,
+ this.dialect.addRule( this.builder,
rule,
ruleDescr );
@@ -326,23 +353,18 @@
}
/**
- * @return a Type resolver, lazily.
- * If one does not exist yet, it will be initialised.
+ * @return a Type resolver, lazily. If one does not exist yet, it will be
+ * initialised.
*/
private TypeResolver getTypeResolver() {
- if ( this.typeResolver == null ) {
- this.typeResolver = new ClassTypeResolver( this.pkg.getImports(),
- this.pkg.getPackageCompilationData().getClassLoader() );
- // make an automatic import for the current package
- this.typeResolver.addImport( this.pkg.getName() + ".*" );
- }
return this.typeResolver;
}
/**
- * @return The compiled package. The package may contain errors, which you can report on
- * by calling getErrors or printErrors. If you try to add an invalid package (or rule)
- * to a RuleBase, you will get a runtime exception.
+ * @return The compiled package. The package may contain errors, which you
+ * can report on by calling getErrors or printErrors. If you try to
+ * add an invalid package (or rule) to a RuleBase, you will get a
+ * runtime exception.
*
* Compiled packages are serializable.
*/
@@ -354,21 +376,24 @@
return this.pkg;
}
- /** This will return true if there were errors in the package building and compiling phase */
+ /**
+ * This will return true if there were errors in the package building and
+ * compiling phase
+ */
public boolean hasErrors() {
return this.results.size() > 0;
}
/**
- * @return A list of Error objects that resulted from building and compiling the package.
+ * @return A list of Error objects that resulted from building and compiling
+ * the package.
*/
public DroolsError[] getErrors() {
return (DroolsError[]) this.results.toArray( new DroolsError[this.results.size()] );
}
/**
- * This will pretty print the errors (from getErrors())
- * into lines.
+ * This will pretty print the errors (from getErrors()) into lines.
*/
public String printErrors() {
final StringBuffer buf = new StringBuffer();
@@ -379,14 +404,12 @@
}
return buf.toString();
}
-
-
+
/**
- * Reset the error list.
- * This is useful when incrementally building packages.
- * Care should be used when building this, if you
- * clear this when there were errors on items that a rule depends on
- * (eg functions), then you will get spurious errors which will not be that helpful.
+ * Reset the error list. This is useful when incrementally building
+ * packages. Care should be used when building this, if you clear this when
+ * there were errors on items that a rule depends on (eg functions), then
+ * you will get spurious errors which will not be that helpful.
*/
protected void resetErrors() {
this.results.clear();
@@ -402,20 +425,21 @@
}
/**
- * This is the super of the error handlers.
- * Each error handler knows how to report a compile error of its type, should it happen.
- * This is needed, as the compiling is done as one
- * hit at the end, and we need to be able to work out what rule/ast element
- * caused the error.
+ * This is the super of the error handlers. Each error handler knows how to
+ * report a compile error of its type, should it happen. This is needed, as
+ * the compiling is done as one hit at the end, and we need to be able to
+ * work out what rule/ast element caused the error.
*
- * An error handler it created for each class task that is queued to be compiled.
- * This doesn't mean an error has occurred, it just means it *may* occur
- * in the future and we need to be able to map it back to the AST element
- * that originally spawned the code to be compiled.
+ * An error handler it created for each class task that is queued to be
+ * compiled. This doesn't mean an error has occurred, it just means it *may*
+ * occur in the future and we need to be able to map it back to the AST
+ * element that originally spawned the code to be compiled.
*/
public abstract static class ErrorHandler {
private final List errors = new ArrayList();
+
protected String message;
+
private boolean inError = false;
/** This needes to be checked if there is infact an error */
@@ -430,16 +454,15 @@
/**
*
- * @return A DroolsError object populated as appropriate,
- * should the unthinkable happen and this need to be reported.
+ * @return A DroolsError object populated as appropriate, should the
+ * unthinkable happen and this need to be reported.
*/
public abstract DroolsError getError();
/**
- * We must use an error of JCI problem objects.
- * If there are no problems, null is returned.
- * These errors are placed in the DroolsError instances.
- * Its not 1 to 1 with reported errors.
+ * We must use an error of JCI problem objects. If there are no
+ * problems, null is returned. These errors are placed in the
+ * DroolsError instances. Its not 1 to 1 with reported errors.
*/
protected CompilationProblem[] collectCompilerProblems() {
if ( this.errors.size() == 0 ) {
@@ -455,6 +478,7 @@
public static class RuleErrorHandler extends ErrorHandler {
private BaseDescr descr;
+
private Rule rule;
public RuleErrorHandler(final BaseDescr ruleDescr,
@@ -475,8 +499,7 @@
}
/**
- * There isn't much point in reporting invoker errors, as
- * they are no help.
+ * There isn't much point in reporting invoker errors, as they are no help.
*/
public static class RuleInvokerErrorHandler extends RuleErrorHandler {
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/AccumulateBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/AccumulateBuilder.java 2007-04-25 17:13:42 UTC (rev 11328)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/AccumulateBuilder.java 2007-04-25 17:14:03 UTC (rev 11329)
@@ -2,16 +2,13 @@
import org.drools.lang.descr.BaseDescr;
import org.drools.rule.ConditionalElement;
-import org.drools.rule.builder.dialect.java.BuildUtils;
public interface AccumulateBuilder {
/* (non-Javadoc)
* @see org.drools.semantics.java.builder.ConditionalElementBuilder#build(org.drools.semantics.java.builder.BuildContext, org.drools.semantics.java.builder.BuildUtils, org.drools.semantics.java.builder.PatternBuilder, org.drools.lang.descr.BaseDescr)
*/
- public ConditionalElement build(BuildContext context,
- BuildUtils utils,
- PatternBuilder patternBuilder,
+ public ConditionalElement build(RuleBuildContext context,
BaseDescr descr);
}
\ No newline at end of file
Deleted: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/BuildContext.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/BuildContext.java 2007-04-25 17:13:42 UTC (rev 11328)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/BuildContext.java 2007-04-25 17:14:03 UTC (rev 11329)
@@ -1,236 +0,0 @@
-/*
- * Copyright 2006 JBoss Inc
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.drools.rule.builder;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Stack;
-
-import org.drools.lang.descr.QueryDescr;
-import org.drools.lang.descr.RuleDescr;
-import org.drools.rule.Package;
-import org.drools.rule.Query;
-import org.drools.rule.Rule;
-import org.drools.spi.DeclarationScopeResolver;
-
-/**
- * A context for the current build
- *
- * @author etirelli
- */
-public class BuildContext {
-
- // current package
- private Package pkg;
-
- // current rule
- private Rule rule;
-
- // a stack for the rule building used
- // for declarations resolution
- private Stack buildStack;
-
- // current Rule descriptor
- private RuleDescr ruleDescr;
-
- // available declarationResolver
- private DeclarationScopeResolver declarationResolver;
-
- // a simple counter for patterns
- private int patternId = -1;
-
- // errors found when building the current context
- private List errors;
-
- // the class name for the rule
- private String ruleClass;
-
- // list of generated methods
- private List methods;
-
- // map<String invokerClassName, String invokerCode> of generated invokers
- private Map invokers;
-
- // map<String invokerClassName, ConditionalElement ce> of generated invoker lookups
- private Map invokerLookups;
-
- // map<String invokerClassName, BaseDescr descr> of descriptor lookups
- private Map descrLookups;
-
- // a simple counter for generated names
- private int counter;
-
- /**
- * Default constructor
- */
- public BuildContext(final Package pkg,
- final RuleDescr ruleDescr) {
- this.pkg = pkg;
-
- this.methods = new ArrayList();
- this.invokers = new HashMap();
- this.invokerLookups = new HashMap();
- this.descrLookups = new HashMap();
- this.errors = new ArrayList();
- this.buildStack = new Stack();
- this.declarationResolver = new DeclarationScopeResolver( new Map[]{this.pkg.getGlobals()},
- this.buildStack );
- this.ruleDescr = ruleDescr;
-
- if ( ruleDescr instanceof QueryDescr ) {
- this.rule = new Query( ruleDescr.getName() );
- } else {
- this.rule = new Rule( ruleDescr.getName() );
- }
-
- }
-
- /**
- * Returns the list of errors found while building the current context
- * @return
- */
- public List getErrors() {
- return this.errors;
- }
-
- /**
- * Returns the current package being built
- * @return
- */
- public Package getPkg() {
- return this.pkg;
- }
-
- /**
- * Returns the current Rule being built
- * @return
- */
- public Rule getRule() {
- return this.rule;
- }
-
- /**
- * Returns the current RuleDescriptor
- * @return
- */
- public RuleDescr getRuleDescr() {
- return this.ruleDescr;
- }
-
- /**
- * Returns the available declarationResolver instance
- * @return
- */
- public DeclarationScopeResolver getDeclarationResolver() {
- return this.declarationResolver;
- }
-
- /**
- * Sets the available declarationResolver instance
- * @param declarationResolver
- */
- public void setDeclarationResolver(final DeclarationScopeResolver variables) {
- this.declarationResolver = variables;
- }
-
- /**
- * Returns the Map<String invokerClassName, BaseDescr descr> of descriptor lookups
- * @return
- */
- public Map getDescrLookups() {
- return this.descrLookups;
- }
-
- public void setDescrLookups(final Map descrLookups) {
- this.descrLookups = descrLookups;
- }
-
- /**
- * Returns the Map<String invokerClassName, ConditionalElement ce> of generated invoker lookups
- * @return
- */
- public Map getInvokerLookups() {
- return this.invokerLookups;
- }
-
- public void setInvokerLookups(final Map invokerLookups) {
- this.invokerLookups = invokerLookups;
- }
-
- /**
- * Returns the Map<String invokerClassName, String invokerCode> of generated invokers
- * @return
- */
- public Map getInvokers() {
- return this.invokers;
- }
-
- public void setInvokers(final Map invokers) {
- this.invokers = invokers;
- }
-
- /**
- * Returns the list of generated methods
- * @return
- */
- public List getMethods() {
- return this.methods;
- }
-
- public void setMethods(final List methods) {
- this.methods = methods;
- }
-
- /**
- * Returns current counter value for generated method names
- * @return
- */
- public int getCurrentId() {
- return this.counter;
- }
-
- public int getNextId() {
- return this.counter++;
- }
-
- public int getPatternId() {
- return this.patternId;
- }
-
- public int getNextPatternId() {
- return ++this.patternId;
- }
-
- public void setPatternId(final int patternId) {
- this.patternId = patternId;
- }
-
- public String getRuleClass() {
- return this.ruleClass;
- }
-
- public void setRuleClass(final String ruleClass) {
- this.ruleClass = ruleClass;
- }
-
- public Stack getBuildStack() {
- return this.buildStack;
- }
-
-}
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/CollectBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/CollectBuilder.java 2007-04-25 17:13:42 UTC (rev 11328)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/CollectBuilder.java 2007-04-25 17:14:03 UTC (rev 11329)
@@ -18,10 +18,10 @@
import org.drools.lang.descr.BaseDescr;
import org.drools.lang.descr.CollectDescr;
+import org.drools.lang.descr.PatternDescr;
import org.drools.rule.Collect;
import org.drools.rule.Pattern;
import org.drools.rule.ConditionalElement;
-import org.drools.rule.builder.dialect.java.BuildUtils;
/**
* @author etirelli
@@ -34,15 +34,12 @@
/* (non-Javadoc)
* @see org.drools.semantics.java.builder.ConditionalElementBuilder#build(org.drools.semantics.java.builder.BuildContext, org.drools.semantics.java.builder.BuildUtils, org.drools.semantics.java.builder.PatternBuilder, org.drools.lang.descr.BaseDescr)
*/
- public ConditionalElement build(final BuildContext context,
- final BuildUtils utils,
- final PatternBuilder patternBuilder,
+ public ConditionalElement build(final RuleBuildContext context,
final BaseDescr descr) {
final CollectDescr collectDescr = (CollectDescr) descr;
-
+ final PatternBuilder patternBuilder = (PatternBuilder) context.getDialect().getBuilder( PatternDescr.class );
final Pattern sourcePattern = patternBuilder.build( context,
- utils,
collectDescr.getSourcePattern() );
if ( sourcePattern == null ) {
@@ -50,7 +47,6 @@
}
final Pattern resultPattern = patternBuilder.build( context,
- utils,
collectDescr.getResultPattern() );
final String className = "collect" + context.getNextId();
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/ConditionalElementBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/ConditionalElementBuilder.java 2007-04-25 17:13:42 UTC (rev 11328)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/ConditionalElementBuilder.java 2007-04-25 17:14:03 UTC (rev 11329)
@@ -18,7 +18,6 @@
import org.drools.lang.descr.BaseDescr;
import org.drools.rule.ConditionalElement;
-import org.drools.rule.builder.dialect.java.BuildUtils;
/**
* An interface to define classes capable of building
@@ -28,9 +27,7 @@
*/
public interface ConditionalElementBuilder {
- public ConditionalElement build(final BuildContext context,
- final BuildUtils utils,
- final PatternBuilder patternBuilder,
+ public ConditionalElement build(final RuleBuildContext context,
final BaseDescr descr);
}
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/ConsequenceBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/ConsequenceBuilder.java 2007-04-25 17:13:42 UTC (rev 11328)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/ConsequenceBuilder.java 2007-04-25 17:14:03 UTC (rev 11329)
@@ -1,12 +1,10 @@
package org.drools.rule.builder;
import org.drools.lang.descr.RuleDescr;
-import org.drools.rule.builder.dialect.java.BuildUtils;
public interface ConsequenceBuilder {
- public void build(final BuildContext context,
- final BuildUtils utils,
+ public void build(final RuleBuildContext context,
final RuleDescr ruleDescr);
}
\ No newline at end of file
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:13:42 UTC (rev 11328)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/Dialect.java 2007-04-25 17:14:03 UTC (rev 11329)
@@ -1,14 +1,23 @@
package org.drools.rule.builder;
import java.util.List;
+import java.util.Map;
import org.codehaus.jfdi.interpreter.TypeResolver;
+import org.drools.base.ClassFieldExtractorCache;
+import org.drools.lang.descr.BaseDescr;
import org.drools.lang.descr.FunctionDescr;
import org.drools.lang.descr.RuleDescr;
import org.drools.rule.Package;
import org.drools.rule.Rule;
public interface Dialect {
+ Map getBuilders();
+
+ TypeResolver getTypeResolver();
+
+ ClassFieldExtractorCache getClassFieldExtractorCache();
+
ConditionalElementBuilder getEvalBuilder();
AccumulateBuilder getAccumulateBuilder();
@@ -22,10 +31,20 @@
RuleClassBuilder getRuleClassBuilder();
FromBuilder getFromBuilder();
+
+ Object getBuilder(Class clazz);
+ List[] getExpressionIdentifiers(final RuleBuildContext context,
+ final BaseDescr descr,
+ final Object content);
+
+ List[] getBlockIdentifiers(final RuleBuildContext context,
+ final BaseDescr descr,
+ final String text);
+
void compileAll();
- void addRuleSemantics(final RuleBuilder builder,
+ void addRule(final RuleBuilder builder,
final Rule rule,
final RuleDescr ruleDescr);
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/ForallBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/ForallBuilder.java 2007-04-25 17:13:42 UTC (rev 11328)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/ForallBuilder.java 2007-04-25 17:14:03 UTC (rev 11329)
@@ -24,7 +24,6 @@
import org.drools.rule.Pattern;
import org.drools.rule.ConditionalElement;
import org.drools.rule.Forall;
-import org.drools.rule.builder.dialect.java.BuildUtils;
/**
* @author etirelli
@@ -37,15 +36,13 @@
/* (non-Javadoc)
* @see org.drools.semantics.java.builder.ConditionalElementBuilder#build(org.drools.semantics.java.builder.BuildContext, org.drools.semantics.java.builder.BuildUtils, org.drools.semantics.java.builder.PatternBuilder, org.drools.lang.descr.BaseDescr)
*/
- public ConditionalElement build(final BuildContext context,
- final BuildUtils utils,
- final PatternBuilder patternBuilder,
+ public ConditionalElement build(final RuleBuildContext context,
final BaseDescr descr) {
final ForallDescr forallDescr = (ForallDescr) descr;
+ final PatternBuilder patternBuilder = (PatternBuilder) context.getDialect().getBuilder( PatternDescr.class );
final Pattern basePattern = patternBuilder.build( context,
- utils,
- forallDescr.getBasePattern() );
+ forallDescr.getBasePattern() );
if ( basePattern == null ) {
return null;
@@ -59,8 +56,7 @@
for ( final Iterator it = forallDescr.getRemainingPatterns().iterator(); it.hasNext(); ) {
final Pattern anotherPattern = patternBuilder.build( context,
- utils,
- (PatternDescr) it.next() );
+ (PatternDescr) it.next() );
forall.addRemainingPattern( anotherPattern );
}
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/FromBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/FromBuilder.java 2007-04-25 17:13:42 UTC (rev 11328)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/FromBuilder.java 2007-04-25 17:14:03 UTC (rev 11329)
@@ -2,16 +2,13 @@
import org.drools.lang.descr.BaseDescr;
import org.drools.rule.ConditionalElement;
-import org.drools.rule.builder.dialect.java.BuildUtils;
public interface FromBuilder {
/**
* @inheritDoc
*/
- public ConditionalElement build(final BuildContext context,
- final BuildUtils utils,
- final PatternBuilder patternBuilder,
+ public ConditionalElement build(final RuleBuildContext context,
final BaseDescr descr);
}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/GroupElementBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/GroupElementBuilder.java 2007-04-25 17:13:42 UTC (rev 11328)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/GroupElementBuilder.java 2007-04-25 17:14:03 UTC (rev 11329)
@@ -30,7 +30,6 @@
import org.drools.rule.ConditionalElement;
import org.drools.rule.GroupElement;
import org.drools.rule.GroupElementFactory;
-import org.drools.rule.builder.dialect.java.BuildUtils;
/**
* @author etirelli
@@ -43,9 +42,7 @@
/* (non-Javadoc)
* @see org.drools.semantics.java.builder.ConditionalElementBuilder#build(org.drools.semantics.java.builder.BuildContext, org.drools.semantics.java.builder.BuildUtils, org.drools.semantics.java.builder.PatternBuilder, org.drools.lang.descr.BaseDescr)
*/
- public ConditionalElement build(final BuildContext context,
- final BuildUtils utils,
- final PatternBuilder patternBuilder,
+ public ConditionalElement build(final RuleBuildContext context,
final BaseDescr descr) {
final ConditionalElementDescr cedescr = (ConditionalElementDescr) descr;
@@ -58,20 +55,21 @@
final BaseDescr child = (BaseDescr) it.next();
// gets corresponding builder
- final ConditionalElementBuilder cebuilder = utils.getBuilder( child.getClass() );
+ //final ConditionalElementBuilder cebuilder = ( ConditionalElementBuilder ) utils.getBuilder( child.getClass() );
+ final Object builder = context.getDialect().getBuilder( child.getClass() );
- if ( cebuilder != null ) {
- final ConditionalElement ce = cebuilder.build( context,
- utils,
- patternBuilder,
- child );
+ if ( builder instanceof ConditionalElementBuilder ) {
+ ConditionalElementBuilder ceBuilder = (ConditionalElementBuilder) builder;
+ final ConditionalElement ce = ceBuilder.build( context,
+ child );
if ( ce != null ) {
ge.addChild( ce );
}
- } else if ( child instanceof PatternDescr ) {
+ } else if ( builder instanceof PatternBuilder ) {
+ final PatternBuilder patternBuilder = (PatternBuilder) context.getDialect().getBuilder( child.getClass() );
+
final Pattern pattern = patternBuilder.build( context,
- utils,
- (PatternDescr) child );
+ (PatternDescr) child );
// in case there is a problem with the pattern building,
// builder will return null. Ex: ClassNotFound for the pattern type
if ( pattern != null ) {
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/PatternBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/PatternBuilder.java 2007-04-25 17:13:42 UTC (rev 11328)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/PatternBuilder.java 2007-04-25 17:14:03 UTC (rev 11329)
@@ -53,7 +53,6 @@
import org.drools.rule.ReturnValueRestriction;
import org.drools.rule.VariableConstraint;
import org.drools.rule.VariableRestriction;
-import org.drools.rule.builder.dialect.java.BuildUtils;
import org.drools.spi.Evaluator;
import org.drools.spi.FieldExtractor;
import org.drools.spi.FieldValue;
@@ -82,9 +81,8 @@
* @param patternDescr
* @return
*/
- public Pattern build(final BuildContext context,
- final BuildUtils utils,
- final PatternDescr patternDescr) {
+ public Pattern build(final RuleBuildContext context,
+ final PatternDescr patternDescr) {
if ( patternDescr.getObjectType() == null || patternDescr.getObjectType().equals( "" ) ) {
context.getErrors().add( new RuleError( context.getRule(),
@@ -102,7 +100,7 @@
objectType = new FactTemplateObjectType( factTemplate );
} else {
try {
- final Class userProvidedClass = utils.getTypeResolver().resolveType( patternDescr.getObjectType() );
+ final Class userProvidedClass = context.getDialect().getTypeResolver().resolveType( patternDescr.getObjectType() );
final String shadowProxyName = ShadowProxyFactory.getProxyClassNameForClass( userProvidedClass );
Class shadowClass = null;
try {
@@ -141,14 +139,14 @@
}
pattern = new Pattern( context.getNextPatternId(),
- 0, // offset is 0 by default
- objectType,
- patternDescr.getIdentifier() );
+ 0, // offset is 0 by default
+ objectType,
+ patternDescr.getIdentifier() );
} else {
pattern = new Pattern( context.getNextPatternId(),
- 0, // offset is 0 by default
- objectType,
- null );
+ 0, // offset is 0 by default
+ objectType,
+ null );
}
// adding the newly created pattern to the build stack
// this is necessary in case of local declaration usage
@@ -158,17 +156,14 @@
final Object object = it.next();
if ( object instanceof FieldBindingDescr ) {
build( context,
- utils,
pattern,
(FieldBindingDescr) object );
} else if ( object instanceof FieldConstraintDescr ) {
build( context,
- utils,
pattern,
(FieldConstraintDescr) object );
} else if ( object instanceof PredicateDescr ) {
build( context,
- utils,
pattern,
(PredicateDescr) object );
}
@@ -178,13 +173,11 @@
return pattern;
}
- private void build(final BuildContext context,
- final BuildUtils utils,
+ private void build(final RuleBuildContext context,
final Pattern pattern,
final FieldConstraintDescr fieldConstraintDescr) {
final FieldExtractor extractor = getFieldExtractor( context,
- utils,
fieldConstraintDescr,
pattern.getObjectType(),
fieldConstraintDescr.getFieldName(),
@@ -198,7 +191,6 @@
final Object object = fieldConstraintDescr.getRestrictions().get( 0 );
final Restriction restriction = buildRestriction( context,
- utils,
pattern,
extractor,
fieldConstraintDescr,
@@ -210,13 +202,13 @@
if ( object instanceof LiteralRestrictionDescr ) {
pattern.addConstraint( new LiteralConstraint( extractor,
- (LiteralRestriction) restriction ) );
+ (LiteralRestriction) restriction ) );
} else if ( object instanceof VariableRestrictionDescr ) {
pattern.addConstraint( new VariableConstraint( extractor,
- (VariableRestriction) restriction ) );
+ (VariableRestriction) restriction ) );
} else if ( object instanceof ReturnValueRestrictionDescr ) {
pattern.addConstraint( new ReturnValueConstraint( extractor,
- (ReturnValueRestriction) restriction ) );
+ (ReturnValueRestriction) restriction ) );
}
return;
@@ -255,7 +247,6 @@
// Are we are at the first operator? if so treat differently
if ( previousList == null ) {
restriction = buildRestriction( context,
- utils,
pattern,
extractor,
fieldConstraintDescr,
@@ -267,7 +258,6 @@
}
} else {
restriction = buildRestriction( context,
- utils,
pattern,
extractor,
fieldConstraintDescr,
@@ -297,8 +287,7 @@
currentRestriction = (RestrictionDescr) object;
}
- final Restriction restriction = buildRestriction( context,
- utils,
+ final Restriction restriction = buildRestriction( context,
pattern,
extractor,
fieldConstraintDescr,
@@ -328,11 +317,10 @@
}
pattern.addConstraint( new MultiRestrictionFieldConstraint( extractor,
- restrictions ) );
+ restrictions ) );
}
- private void build(final BuildContext context,
- final BuildUtils utils,
+ private void build(final RuleBuildContext context,
final Pattern pattern,
final FieldBindingDescr fieldBindingDescr) {
@@ -346,7 +334,6 @@
}
final FieldExtractor extractor = getFieldExtractor( context,
- utils,
fieldBindingDescr,
pattern.getObjectType(),
fieldBindingDescr.getFieldName(),
@@ -356,11 +343,10 @@
}
pattern.addDeclaration( fieldBindingDescr.getIdentifier(),
- extractor );
+ extractor );
}
- private void build(final BuildContext context,
- final BuildUtils utils,
+ private void build(final RuleBuildContext context,
final Pattern pattern,
final PredicateDescr predicateDescr) {
@@ -368,9 +354,9 @@
// where first list is from rule local variables
// second list is from global variables
// and third is for unbound variables
- final List[] usedIdentifiers = utils.getUsedIdentifiers( context,
- predicateDescr,
- predicateDescr.getContent() );
+ final List[] usedIdentifiers = context.getDialect().getExpressionIdentifiers( context,
+ predicateDescr,
+ predicateDescr.getContent() );
final List tupleDeclarations = new ArrayList();
final List factDeclarations = new ArrayList();
for ( int i = 0, size = usedIdentifiers[0].size(); i < size; i++ ) {
@@ -383,7 +369,6 @@
}
final int NOT_BOUND_INDEX = usedIdentifiers.length - 1;
this.createImplicitBindings( context,
- utils,
pattern,
usedIdentifiers[NOT_BOUND_INDEX],
factDeclarations );
@@ -401,7 +386,6 @@
final PredicateBuilder builder = this.dialect.getPredicateBuilder();
builder.build( context,
- utils,
usedIdentifiers,
previousDeclarations,
localDeclarations,
@@ -418,8 +402,7 @@
* @param NOT_BOUND_INDEX
* @param factDeclarations
*/
- private void createImplicitBindings(final BuildContext context,
- final BuildUtils utils,
+ private void createImplicitBindings(final RuleBuildContext context,
final Pattern pattern,
final List unboundIdentifiers,
final List factDeclarations) {
@@ -427,10 +410,9 @@
for ( int i = 0, size = unboundIdentifiers.size(); i < size; i++ ) {
final String identifier = (String) unboundIdentifiers.get( i );
final FieldBindingDescr implicitBinding = new FieldBindingDescr( identifier,
- identifier );
+ identifier );
final FieldExtractor extractor = getFieldExtractor( context,
- utils,
implicitBinding,
pattern.getObjectType(),
implicitBinding.getFieldName(),
@@ -446,8 +428,7 @@
}
}
- private Restriction buildRestriction(final BuildContext context,
- final BuildUtils utils,
+ private Restriction buildRestriction(final RuleBuildContext context,
final Pattern pattern,
final FieldExtractor extractor,
final FieldConstraintDescr fieldConstraintDescr,
@@ -455,7 +436,6 @@
Restriction restriction = null;
if ( restrictionDescr instanceof LiteralRestrictionDescr ) {
restriction = buildRestriction( context,
- utils,
extractor,
fieldConstraintDescr,
(LiteralRestrictionDescr) restrictionDescr );
@@ -466,7 +446,6 @@
(VariableRestrictionDescr) restrictionDescr );
} else if ( restrictionDescr instanceof ReturnValueRestrictionDescr ) {
restriction = buildRestriction( context,
- utils,
pattern,
extractor,
fieldConstraintDescr,
@@ -477,7 +456,7 @@
return restriction;
}
- private VariableRestriction buildRestriction(final BuildContext context,
+ private VariableRestriction buildRestriction(final RuleBuildContext context,
final FieldExtractor extractor,
final FieldConstraintDescr fieldConstraintDescr,
final VariableRestrictionDescr variableRestrictionDescr) {
@@ -517,8 +496,7 @@
evaluator );
}
- private LiteralRestriction buildRestriction(final BuildContext context,
- final BuildUtils utils,
+ private LiteralRestriction buildRestriction(final RuleBuildContext context,
final FieldExtractor extractor,
final FieldConstraintDescr fieldConstraintDescr,
final LiteralRestrictionDescr literalRestrictionDescr) {
@@ -529,7 +507,7 @@
lastDot );
final String fieldName = literalRestrictionDescr.getText().substring( lastDot + 1 );
try {
- final Class staticClass = utils.getTypeResolver().resolveType( className );
+ final Class staticClass = context.getDialect().getTypeResolver().resolveType( className );
field = FieldFactory.getFieldValue( staticClass.getField( fieldName ).get( null ),
extractor.getValueType() );
} catch ( final ClassNotFoundException e ) {
@@ -569,15 +547,14 @@
extractor );
}
- private ReturnValueRestriction buildRestriction(final BuildContext context,
- final BuildUtils utils,
+ private ReturnValueRestriction buildRestriction(final RuleBuildContext context,
final Pattern pattern,
final FieldExtractor extractor,
final FieldConstraintDescr fieldConstraintDescr,
final ReturnValueRestrictionDescr returnValueRestrictionDescr) {
- final List[] usedIdentifiers = utils.getUsedIdentifiers( context,
- returnValueRestrictionDescr,
- returnValueRestrictionDescr.getContent() );
+ final List[] usedIdentifiers = context.getDialect().getExpressionIdentifiers( context,
+ returnValueRestrictionDescr,
+ returnValueRestrictionDescr.getContent() );
final List tupleDeclarations = new ArrayList();
final List factDeclarations = new ArrayList();
@@ -591,8 +568,7 @@
}
final int NOT_BOUND_INDEX = usedIdentifiers.length - 1;
- this.createImplicitBindings( context,
- utils,
+ createImplicitBindings( context,
pattern,
usedIdentifiers[NOT_BOUND_INDEX],
factDeclarations );
@@ -617,7 +593,6 @@
final ReturnValueBuilder builder = this.dialect.getReturnValueBuilder();
builder.build( context,
- utils,
usedIdentifiers,
previousDeclarations,
localDeclarations,
@@ -627,8 +602,7 @@
return returnValueRestriction;
}
- private FieldExtractor getFieldExtractor(final BuildContext context,
- final BuildUtils utils,
+ private FieldExtractor getFieldExtractor(final RuleBuildContext context,
final BaseDescr descr,
final ObjectType objectType,
final String fieldName,
@@ -643,7 +617,7 @@
} else {
try {
ClassLoader classloader = context.getPkg().getPackageCompilationData().getClassLoader();
- extractor = utils.getClassFieldExtractorCache().getExtractor( ((ClassObjectType) objectType).getClassType(),
+ extractor = context.getDialect().getClassFieldExtractorCache().getExtractor( ((ClassObjectType) objectType).getClassType(),
fieldName,
classloader );
} catch ( final RuntimeDroolsException e ) {
@@ -659,7 +633,7 @@
return extractor;
}
- private Evaluator getEvaluator(final BuildContext context,
+ private Evaluator getEvaluator(final RuleBuildContext context,
final BaseDescr descr,
final ValueType valueType,
final String evaluatorString) {
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/PredicateBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/PredicateBuilder.java 2007-04-25 17:13:42 UTC (rev 11328)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/PredicateBuilder.java 2007-04-25 17:14:03 UTC (rev 11329)
@@ -5,11 +5,9 @@
import org.drools.lang.descr.PredicateDescr;
import org.drools.rule.Declaration;
import org.drools.rule.PredicateConstraint;
-import org.drools.rule.builder.dialect.java.BuildUtils;
public interface PredicateBuilder {
- public void build(final BuildContext context,
- final BuildUtils utils,
+ public void build(final RuleBuildContext context,
final List[] usedIdentifiers,
final Declaration[] previousDeclarations,
final Declaration[] localDeclarations,
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/ReturnValueBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/ReturnValueBuilder.java 2007-04-25 17:13:42 UTC (rev 11328)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/ReturnValueBuilder.java 2007-04-25 17:14:03 UTC (rev 11329)
@@ -5,11 +5,9 @@
import org.drools.lang.descr.ReturnValueRestrictionDescr;
import org.drools.rule.Declaration;
import org.drools.rule.ReturnValueRestriction;
-import org.drools.rule.builder.dialect.java.BuildUtils;
public interface ReturnValueBuilder {
- public void build(final BuildContext context,
- final BuildUtils utils,
+ public void build(final RuleBuildContext context,
final List[] usedIdentifiers,
final Declaration[] previousDeclarations,
final Declaration[] localDeclarations,
Copied: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/RuleBuildContext.java (from rev 11296, labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/BuildContext.java)
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/RuleBuildContext.java (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/RuleBuildContext.java 2007-04-25 17:14:03 UTC (rev 11329)
@@ -0,0 +1,245 @@
+/*
+ * Copyright 2006 JBoss Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.drools.rule.builder;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Stack;
+
+import org.drools.lang.descr.QueryDescr;
+import org.drools.lang.descr.RuleDescr;
+import org.drools.rule.Package;
+import org.drools.rule.Query;
+import org.drools.rule.Rule;
+import org.drools.spi.DeclarationScopeResolver;
+
+/**
+ * A context for the current build
+ *
+ * @author etirelli
+ */
+public class RuleBuildContext {
+
+ // current package
+ private Package pkg;
+
+ // current rule
+ private Rule rule;
+
+ // a stack for the rule building used
+ // for declarations resolution
+ private Stack buildStack;
+
+ // current Rule descriptor
+ private RuleDescr ruleDescr;
+
+ // available declarationResolver
+ private DeclarationScopeResolver declarationResolver;
+
+ // a simple counter for patterns
+ private int patternId = -1;
+
+ // errors found when building the current context
+ private List errors;
+
+ // the class name for the rule
+ private String ruleClass;
+
+ // list of generated methods
+ private List methods;
+
+ // map<String invokerClassName, String invokerCode> of generated invokers
+ private Map invokers;
+
+ // map<String invokerClassName, ConditionalElement ce> of generated invoker lookups
+ private Map invokerLookups;
+
+ // map<String invokerClassName, BaseDescr descr> of descriptor lookups
+ private Map descrLookups;
+
+ // a simple counter for generated names
+ private int counter;
+
+ private Dialect dialect;
+
+ /**
+ * Default constructor
+ */
+ public RuleBuildContext(final Package pkg,
+ final RuleDescr ruleDescr) {
+ this.pkg = pkg;
+
+ this.methods = new ArrayList();
+ this.invokers = new HashMap();
+ this.invokerLookups = new HashMap();
+ this.descrLookups = new HashMap();
+ this.errors = new ArrayList();
+ this.buildStack = new Stack();
+ this.declarationResolver = new DeclarationScopeResolver( new Map[]{this.pkg.getGlobals()},
+ this.buildStack );
+ this.ruleDescr = ruleDescr;
+
+ if ( ruleDescr instanceof QueryDescr ) {
+ this.rule = new Query( ruleDescr.getName() );
+ } else {
+ this.rule = new Rule( ruleDescr.getName() );
+ }
+ }
+
+ public void setDialect(Dialect dialect) {
+ this.dialect = dialect;
+ }
+
+ public Dialect getDialect() {
+ return this.dialect;
+ }
+
+ /**
+ * Returns the list of errors found while building the current context
+ * @return
+ */
+ public List getErrors() {
+ return this.errors;
+ }
+
+ /**
+ * Returns the current package being built
+ * @return
+ */
+ public Package getPkg() {
+ return this.pkg;
+ }
+
+ /**
+ * Returns the current Rule being built
+ * @return
+ */
+ public Rule getRule() {
+ return this.rule;
+ }
+
+ /**
+ * Returns the current RuleDescriptor
+ * @return
+ */
+ public RuleDescr getRuleDescr() {
+ return this.ruleDescr;
+ }
+
+ /**
+ * Returns the available declarationResolver instance
+ * @return
+ */
+ public DeclarationScopeResolver getDeclarationResolver() {
+ return this.declarationResolver;
+ }
+
+ /**
+ * Sets the available declarationResolver instance
+ * @param declarationResolver
+ */
+ public void setDeclarationResolver(final DeclarationScopeResolver variables) {
+ this.declarationResolver = variables;
+ }
+
+ /**
+ * Returns the Map<String invokerClassName, BaseDescr descr> of descriptor lookups
+ * @return
+ */
+ public Map getDescrLookups() {
+ return this.descrLookups;
+ }
+
+ public void setDescrLookups(final Map descrLookups) {
+ this.descrLookups = descrLookups;
+ }
+
+ /**
+ * Returns the Map<String invokerClassName, ConditionalElement ce> of generated invoker lookups
+ * @return
+ */
+ public Map getInvokerLookups() {
+ return this.invokerLookups;
+ }
+
+ public void setInvokerLookups(final Map invokerLookups) {
+ this.invokerLookups = invokerLookups;
+ }
+
+ /**
+ * Returns the Map<String invokerClassName, String invokerCode> of generated invokers
+ * @return
+ */
+ public Map getInvokers() {
+ return this.invokers;
+ }
+
+ public void setInvokers(final Map invokers) {
+ this.invokers = invokers;
+ }
+
+ /**
+ * Returns the list of generated methods
+ * @return
+ */
+ public List getMethods() {
+ return this.methods;
+ }
+
+ public void setMethods(final List methods) {
+ this.methods = methods;
+ }
+
+ /**
+ * Returns current counter value for generated method names
+ * @return
+ */
+ public int getCurrentId() {
+ return this.counter;
+ }
+
+ public int getNextId() {
+ return this.counter++;
+ }
+
+ public int getPatternId() {
+ return this.patternId;
+ }
+
+ public int getNextPatternId() {
+ return ++this.patternId;
+ }
+
+ public void setPatternId(final int patternId) {
+ this.patternId = patternId;
+ }
+
+ public String getRuleClass() {
+ return this.ruleClass;
+ }
+
+ public void setRuleClass(final String ruleClass) {
+ this.ruleClass = ruleClass;
+ }
+
+ public Stack getBuildStack() {
+ return this.buildStack;
+ }
+
+}
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:13:42 UTC (rev 11328)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/RuleBuilder.java 2007-04-25 17:14:03 UTC (rev 11329)
@@ -41,7 +41,6 @@
import org.drools.rule.GroupElement;
import org.drools.rule.Package;
import org.drools.rule.Rule;
-import org.drools.rule.builder.dialect.java.BuildUtils;
import org.drools.rule.builder.dialect.java.DeclarationTypeFixer;
import org.drools.rule.builder.dialect.java.JavaExprAnalyzer;
import org.drools.rule.builder.dialect.java.KnowledgeHelperFixer;
@@ -54,74 +53,16 @@
public class RuleBuilder {
// the current build context
- private BuildContext context;
+ private RuleBuildContext context;
- // the current build utils
- private BuildUtils utils;
+ private Dialect dialect;
- // a map of registered builders
- private Map builders;
-
- // the builder for patterns
- private PatternBuilder patternBuilder;
-
- // the builder for the consequence
- private ConsequenceBuilder consequenceBuilder;
-
- // the builder for the rule class
- private RuleClassBuilder classBuilder;
-
- private Dialect dialect;
-
// Constructor
public RuleBuilder(final TypeResolver typeResolver,
final ClassFieldExtractorCache cache,
final 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();
-
- this.builders.put( CollectDescr.class,
- new CollectBuilder() );
-
- this.builders.put( ForallDescr.class,
- new ForallBuilder() );
- 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 );
-
- // dialect specific
- this.patternBuilder = new PatternBuilder( this.dialect );
-
- this.builders.put( FromDescr.class,
- this.dialect.getFromBuilder() );
-
- this.builders.put( AccumulateDescr.class,
- this.dialect.getAccumulateBuilder() );
-
- this.builders.put( EvalDescr.class,
- this.dialect.getEvalBuilder() );
-
- this.consequenceBuilder = this.dialect.getConsequenceBuilder();
-
- this.classBuilder = this.dialect.getRuleClassBuilder();
-
- this.utils = new BuildUtils( new KnowledgeHelperFixer(),
- new DeclarationTypeFixer(),
- new JavaExprAnalyzer(),
- typeResolver,
- cache,
- this.builders );
}
public Map getInvokers() {
@@ -166,19 +107,19 @@
*/
public synchronized Rule build(final Package pkg,
final RuleDescr ruleDescr) {
- this.context = new BuildContext( pkg,
+ this.context = new RuleBuildContext( pkg,
ruleDescr );
// Assign attributes
setAttributes( this.context.getRule(),
ruleDescr.getAttributes() );
+
+ this.context.setDialect( this.dialect );
- final ConditionalElementBuilder builder = this.utils.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,
- this.utils,
- this.patternBuilder,
- ruleDescr.getLhs() );
+ ruleDescr.getLhs() );
this.context.getRule().setLhs( ce );
} else {
throw new RuntimeDroolsException( "BUG: builder not found for descriptor class " + ruleDescr.getLhs().getClass() );
@@ -188,13 +129,12 @@
// generate the main rule from the previously generated s.
if ( !(ruleDescr instanceof QueryDescr) ) {
// do not build the consequence if we have a query
- this.consequenceBuilder.build( this.context,
- this.utils,
- ruleDescr );
+
+ this.dialect.getConsequenceBuilder().build( this.context,
+ ruleDescr );
}
- this.classBuilder.buildRule( this.context,
- this.utils,
- ruleDescr );
+ this.dialect.getRuleClassBuilder().buildRule( this.context,
+ ruleDescr );
return this.context.getRule();
}
Modified: 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 2007-04-25 17:13:42 UTC (rev 11328)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/RuleClassBuilder.java 2007-04-25 17:14:03 UTC (rev 11329)
@@ -1,12 +1,10 @@
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,
+ public void buildRule(final RuleBuildContext context,
final RuleDescr ruleDescr);
}
\ No newline at end of file
Deleted: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/BuildUtils.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/BuildUtils.java 2007-04-25 17:13:42 UTC (rev 11328)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/BuildUtils.java 2007-04-25 17:14:03 UTC (rev 11329)
@@ -1,219 +0,0 @@
-/*
- * Copyright 2006 JBoss Inc
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.drools.rule.builder.dialect.java;
-
-import java.io.InputStreamReader;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import org.antlr.stringtemplate.StringTemplate;
-import org.antlr.stringtemplate.StringTemplateGroup;
-import org.antlr.stringtemplate.language.AngleBracketTemplateLexer;
-import org.codehaus.jfdi.interpreter.TypeResolver;
-import org.drools.base.ClassFieldExtractorCache;
-import org.drools.compiler.RuleError;
-import org.drools.lang.descr.BaseDescr;
-import org.drools.rule.Declaration;
-import org.drools.rule.builder.BuildContext;
-import org.drools.rule.builder.ConditionalElementBuilder;
-
-/**
- * A holder class for utility functions
- *
- * @author etirelli
- */
-public class BuildUtils {
-
- // the string template groups
- private final StringTemplateGroup ruleGroup = new StringTemplateGroup( new InputStreamReader( BuildUtils.class.getResourceAsStream( "javaRule.stg" ) ),
- AngleBracketTemplateLexer.class );
-
- private final StringTemplateGroup invokerGroup = new StringTemplateGroup( new InputStreamReader( BuildUtils.class.getResourceAsStream( "javaInvokers.stg" ) ),
- AngleBracketTemplateLexer.class );
-
- private final KnowledgeHelperFixer knowledgeHelperFixer;
-
- private final DeclarationTypeFixer typeFixer;
-
- private final JavaExprAnalyzer analyzer;
-
- private final TypeResolver typeResolver;
-
- private final ClassFieldExtractorCache classFieldExtractorCache;
-
- private final Map builders;
-
- public BuildUtils(final KnowledgeHelperFixer knowledgeHelperFixer,
- final DeclarationTypeFixer typeFixer,
- final JavaExprAnalyzer analyzer,
- final TypeResolver typeResolver,
- final ClassFieldExtractorCache classFieldExtractorCache,
- final Map builders) {
- this.knowledgeHelperFixer = knowledgeHelperFixer;
- this.typeFixer = typeFixer;
- this.analyzer = analyzer;
- this.typeResolver = typeResolver;
- this.classFieldExtractorCache = classFieldExtractorCache;
- this.builders = builders;
- }
-
- public List[] getUsedIdentifiers(final BuildContext context,
- final BaseDescr descr,
- final Object content) {
- List[] usedIdentifiers = null;
- try {
- usedIdentifiers = this.analyzer.analyzeExpression( (String) content,
- new Set[]{context.getDeclarationResolver().getDeclarations().keySet(), context.getPkg().getGlobals().keySet()} );
- } catch ( final Exception e ) {
- context.getErrors().add( new RuleError( context.getRule(),
- descr,
- null,
- "Unable to determine the used declarations" ) );
- }
- return usedIdentifiers;
- }
-
- public List[] getUsedCIdentifiers(final BuildContext context,
- final BaseDescr descr,
- final String text) {
- List[] usedIdentifiers = null;
- try {
- usedIdentifiers = this.analyzer.analyzeBlock( text,
- new Set[]{context.getDeclarationResolver().getDeclarations().keySet(), context.getPkg().getGlobals().keySet()} );
- } catch ( final Exception e ) {
- context.getErrors().add( new RuleError( context.getRule(),
- descr,
- null,
- "Unable to determine the used declarations" ) );
- }
- return usedIdentifiers;
- }
-
- /**
- * Sets usual string template attributes:
- *
- * <li> list of declarations and declaration types</li>
- * <li> list of globals and global types</li>
- *
- * @param context the current build context
- * @param st the string template whose attributes will be set
- * @param declarations array of declarations to set
- * @param globals array of globals to set
- */
- public void setStringTemplateAttributes(final BuildContext context,
- final StringTemplate st,
- final Declaration[] declarations,
- final String[] globals ) {
- final String[] declarationTypes = new String[declarations.length];
- for ( int i = 0, size = declarations.length; i < size; i++ ) {
- declarationTypes[i] = this.typeFixer.fix( declarations[i] );
- }
-
- final List globalTypes = new ArrayList( globals.length );
- for ( int i = 0, length = globals.length; i < length; i++ ) {
- globalTypes.add( ((Class) context.getPkg().getGlobals().get( globals[i] )).getName().replace( '$',
- '.' ) );
- }
-
- st.setAttribute( "declarations",
- declarations );
- st.setAttribute( "declarationTypes",
- declarationTypes );
-
- st.setAttribute( "globals",
- globals );
- st.setAttribute( "globalTypes",
- globalTypes );
- }
-
- /**
- * Upper case the first letter of "name"
- *
- * @param name
- * @return
- */
- public String ucFirst(final String name) {
- return name.toUpperCase().charAt( 0 ) + name.substring( 1 );
- }
-
- /**
- * Returns the string template group of invokers
- * @return
- */
- public StringTemplateGroup getInvokerGroup() {
- return this.invokerGroup;
- }
-
- /**
- * Returns the string template group of actual rule templates
- * @return
- */
- public StringTemplateGroup getRuleGroup() {
- return this.ruleGroup;
- }
-
- /**
- * Returns the Knowledge Helper Fixer
- * @return
- */
- public KnowledgeHelperFixer getKnowledgeHelperFixer() {
- return this.knowledgeHelperFixer;
- }
-
- /**
- * Returns the current type resolver instance
- * @return
- */
- public TypeResolver getTypeResolver() {
- return this.typeResolver;
- }
-
- /**
- * Returns the cache of field extractors
- * @return
- */
- public ClassFieldExtractorCache getClassFieldExtractorCache() {
- return this.classFieldExtractorCache;
- }
-
- /**
- * Returns a map<Class, ConditionalElementBuilder> of builders
- * @return
- */
- public Map getBuilders() {
- return this.builders;
- }
-
- /**
- * Returns the builder for the given descriptor class
- * @param descr
- * @return
- */
- public ConditionalElementBuilder getBuilder(final Class descr) {
- return (ConditionalElementBuilder) this.builders.get( descr );
- }
-
- /**
- * @return the typeFixer
- */
- public DeclarationTypeFixer getTypeFixer() {
- return this.typeFixer;
- }
-
-}
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/DeclarationTypeFixer.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/DeclarationTypeFixer.java 2007-04-25 17:13:42 UTC (rev 11328)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/DeclarationTypeFixer.java 2007-04-25 17:14:03 UTC (rev 11329)
@@ -16,10 +16,9 @@
final Class classType = declaration.getExtractor().getExtractToClass();
if ( classType.isArray() ) {
return classType.getComponentType().getName().concat( "[]" );
- } else {
- // Does this replacement usefull in the declaration type ??
- return classType.getName().replace( '$',
- '.' );
- }
+ };
+ // Does this replacement usefull in the declaration type ??
+ return classType.getName().replace( '$',
+ '.' );
}
}
Added: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/DialectSession.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/DialectSession.java (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/DialectSession.java 2007-04-25 17:14:03 UTC (rev 11329)
@@ -0,0 +1,5 @@
+package org.drools.rule.builder.dialect.java;
+
+public class DialectSession {
+
+}
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaAccumulateBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaAccumulateBuilder.java 2007-04-25 17:13:42 UTC (rev 11328)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaAccumulateBuilder.java 2007-04-25 17:14:03 UTC (rev 11329)
@@ -23,14 +23,16 @@
import org.drools.base.ClassObjectType;
import org.drools.lang.descr.AccumulateDescr;
import org.drools.lang.descr.BaseDescr;
+import org.drools.lang.descr.PatternDescr;
import org.drools.rule.Accumulate;
import org.drools.rule.Pattern;
import org.drools.rule.ConditionalElement;
import org.drools.rule.Declaration;
import org.drools.rule.builder.AccumulateBuilder;
-import org.drools.rule.builder.BuildContext;
+import org.drools.rule.builder.RuleBuildContext;
import org.drools.rule.builder.PatternBuilder;
import org.drools.rule.builder.ConditionalElementBuilder;
+import org.drools.util.StringUtils;
/**
* @author etirelli
@@ -47,37 +49,35 @@
/* (non-Javadoc)
* @see org.drools.semantics.java.builder.AccumulateBuilder#build(org.drools.semantics.java.builder.BuildContext, org.drools.semantics.java.builder.BuildUtils, org.drools.semantics.java.builder.PatternBuilder, org.drools.lang.descr.BaseDescr)
*/
- public ConditionalElement build(final BuildContext context,
- final BuildUtils utils,
- final PatternBuilder patternBuilder,
+ public ConditionalElement build(final RuleBuildContext context,
final BaseDescr descr) {
final AccumulateDescr accumDescr = (AccumulateDescr) descr;
+ final PatternBuilder patternBuilder = (PatternBuilder) context.getDialect().getBuilder( PatternDescr.class );
+
final Pattern sourcePattern = patternBuilder.build( context,
- utils,
- accumDescr.getSourcePattern() );
+ accumDescr.getSourcePattern() );
if ( sourcePattern == null ) {
return null;
}
final Pattern resultPattern = patternBuilder.build( context,
- utils,
- accumDescr.getResultPattern() );
+ accumDescr.getResultPattern() );
final String className = "accumulate" + context.getNextId();
accumDescr.setClassMethodName( className );
- final List[] usedIdentifiers1 = utils.getUsedCIdentifiers( context,
- accumDescr,
- accumDescr.getInitCode() );
- final List[] usedIdentifiers2 = utils.getUsedCIdentifiers( context,
- accumDescr,
- accumDescr.getActionCode() );
- final List[] usedIdentifiers3 = utils.getUsedIdentifiers( context,
- accumDescr,
- accumDescr.getResultCode() );
+ final List[] usedIdentifiers1 = context.getDialect().getBlockIdentifiers( context,
+ accumDescr,
+ accumDescr.getInitCode() );
+ final List[] usedIdentifiers2 = context.getDialect().getBlockIdentifiers( context,
+ accumDescr,
+ accumDescr.getActionCode() );
+ final List[] usedIdentifiers3 = context.getDialect().getExpressionIdentifiers( context,
+ accumDescr,
+ accumDescr.getResultCode() );
final List requiredDeclarations = new ArrayList( usedIdentifiers1[0] );
requiredDeclarations.addAll( usedIdentifiers2[0] );
@@ -95,13 +95,15 @@
final String[] globals = (String[]) requiredGlobals.toArray( new String[requiredGlobals.size()] );
- StringTemplate st = utils.getRuleGroup().getInstanceOf( "accumulateMethod" );
+ JavaDialect dialect = (JavaDialect) context.getDialect();
- utils.setStringTemplateAttributes( context,
- st,
- declarations,
- globals );
+ StringTemplate st = dialect.getRuleGroup().getInstanceOf( "accumulateMethod" );
+ dialect.setStringTemplateAttributes( context,
+ st,
+ declarations,
+ globals );
+
st.setAttribute( "innerDeclarations",
sourceDeclArr );
st.setAttribute( "methodName",
@@ -130,30 +132,30 @@
context.getMethods().add( st.toString() );
- st = utils.getInvokerGroup().getInstanceOf( "accumulateInvoker" );
+ st = dialect.getInvokerGroup().getInstanceOf( "accumulateInvoker" );
st.setAttribute( "package",
context.getPkg().getName() );
st.setAttribute( "ruleClassName",
- utils.ucFirst( context.getRuleDescr().getClassName() ) );
+ StringUtils.ucFirst( context.getRuleDescr().getClassName() ) );
st.setAttribute( "invokerClassName",
- context.getRuleDescr().getClassName() + utils.ucFirst( className ) + "Invoker" );
+ context.getRuleDescr().getClassName() + StringUtils.ucFirst( className ) + "Invoker" );
st.setAttribute( "methodName",
className );
- utils.setStringTemplateAttributes( context,
- st,
- declarations,
- (String[]) requiredGlobals.toArray( new String[requiredGlobals.size()] ) );
+ dialect.setStringTemplateAttributes( context,
+ st,
+ declarations,
+ (String[]) requiredGlobals.toArray( new String[requiredGlobals.size()] ) );
st.setAttribute( "hashCode",
actionCode.hashCode() );
final Accumulate accumulate = new Accumulate( sourcePattern,
- resultPattern,
- declarations,
- sourceDeclArr );
- final String invokerClassName = context.getPkg().getName() + "." + context.getRuleDescr().getClassName() + utils.ucFirst( className ) + "Invoker";
+ resultPattern,
+ declarations,
+ sourceDeclArr );
+ final String invokerClassName = context.getPkg().getName() + "." + context.getRuleDescr().getClassName() + StringUtils.ucFirst( className ) + "Invoker";
context.getInvokers().put( invokerClassName,
st.toString() );
context.getInvokerLookups().put( invokerClassName,
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaConsequenceBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaConsequenceBuilder.java 2007-04-25 17:13:42 UTC (rev 11328)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaConsequenceBuilder.java 2007-04-25 17:14:03 UTC (rev 11329)
@@ -24,9 +24,10 @@
import org.drools.RuntimeDroolsException;
import org.drools.lang.descr.RuleDescr;
import org.drools.rule.Declaration;
-import org.drools.rule.builder.BuildContext;
+import org.drools.rule.builder.RuleBuildContext;
import org.drools.rule.builder.ConsequenceBuilder;
import org.drools.spi.PatternExtractor;
+import org.drools.util.StringUtils;
/**
* @author etirelli
@@ -39,8 +40,7 @@
/* (non-Javadoc)
* @see org.drools.semantics.java.builder.ConsequenceBuilder#buildConsequence(org.drools.semantics.java.builder.BuildContext, org.drools.semantics.java.builder.BuildUtils, org.drools.lang.descr.RuleDescr)
*/
- public void build(final BuildContext context,
- final BuildUtils utils,
+ public void build(final RuleBuildContext context,
final RuleDescr ruleDescr) {
// pushing consequence LHS into the stack for variable resolution
@@ -50,14 +50,16 @@
// generate Invoker
final String className = "consequence";
- StringTemplate st = utils.getRuleGroup().getInstanceOf( "consequenceMethod" );
+ JavaDialect dialect = (JavaDialect) context.getDialect();
+ StringTemplate st = dialect.getRuleGroup().getInstanceOf( "consequenceMethod" );
+
st.setAttribute( "methodName",
className );
- final List[] usedIdentifiers = utils.getUsedCIdentifiers( context,
- ruleDescr,
- (String) ruleDescr.getConsequence() );
+ final List[] usedIdentifiers = context.getDialect().getBlockIdentifiers( context,
+ ruleDescr,
+ (String) ruleDescr.getConsequence() );
final Declaration[] declarations = new Declaration[usedIdentifiers[0].size()];
@@ -65,43 +67,44 @@
declarations[i] = context.getDeclarationResolver().getDeclaration( (String) usedIdentifiers[0].get( i ) );
}
- utils.setStringTemplateAttributes( context,
- st,
- declarations,
- (String[]) usedIdentifiers[1].toArray( new String[usedIdentifiers[1].size()] ) );
+ dialect.setStringTemplateAttributes( context,
+ st,
+ declarations,
+ (String[]) usedIdentifiers[1].toArray( new String[usedIdentifiers[1].size()] ) );
st.setAttribute( "text",
- utils.getKnowledgeHelperFixer().fix( (String) ruleDescr.getConsequence() ) );
+ ((JavaDialect) context.getDialect()).getKnowledgeHelperFixer().fix( (String) ruleDescr.getConsequence() ) );
context.getMethods().add( st.toString() );
- st = utils.getInvokerGroup().getInstanceOf( "consequenceInvoker" );
+ st = dialect.getInvokerGroup().getInstanceOf( "consequenceInvoker" );
st.setAttribute( "package",
context.getPkg().getName() );
st.setAttribute( "ruleClassName",
- utils.ucFirst( context.getRuleDescr().getClassName() ) );
+ StringUtils.ucFirst( context.getRuleDescr().getClassName() ) );
st.setAttribute( "invokerClassName",
- ruleDescr.getClassName() + utils.ucFirst( className ) + "Invoker" );
+ ruleDescr.getClassName() + StringUtils.ucFirst( className ) + "Invoker" );
st.setAttribute( "methodName",
className );
- utils.setStringTemplateAttributes( context,
- st,
- declarations,
- (String[]) usedIdentifiers[1].toArray( new String[usedIdentifiers[1].size()] ) );
+ dialect.setStringTemplateAttributes( context,
+ st,
+ declarations,
+ (String[]) usedIdentifiers[1].toArray( new String[usedIdentifiers[1].size()] ) );
// Must use the rule declarations, so we use the same order as used in the generated invoker
final List list = Arrays.asList( context.getRule().getDeclarations() );
//final int[] indexes = new int[declarations.length];
- final List indexes = new ArrayList(declarations.length);
+ final List indexes = new ArrayList( declarations.length );
// have to user a String[] as boolean[] is broken in stringtemplate
final String[] notPatterns = new String[declarations.length];
for ( int i = 0, length = declarations.length; i < length; i++ ) {
- indexes.add( i, new Integer( list.indexOf( declarations[i] ) ) );
+ indexes.add( i,
+ new Integer( list.indexOf( declarations[i] ) ) );
notPatterns[i] = (declarations[i].getExtractor() instanceof PatternExtractor) ? null : "true";
- if ( ((Integer)indexes.get(i)).intValue() == -1 ) {
+ if ( ((Integer) indexes.get( i )).intValue() == -1 ) {
// some defensive code, this should never happen
throw new RuntimeDroolsException( "Unable to find declaration in list while generating the consequence invoker" );
}
@@ -116,7 +119,7 @@
st.setAttribute( "text",
ruleDescr.getConsequence() );
- final String invokerClassName = context.getPkg().getName() + "." + ruleDescr.getClassName() + utils.ucFirst( className ) + "Invoker";
+ final String invokerClassName = context.getPkg().getName() + "." + ruleDescr.getClassName() + StringUtils.ucFirst( className ) + "Invoker";
context.getInvokers().put( invokerClassName,
st.toString() );
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:13:42 UTC (rev 11328)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaDialect.java 2007-04-25 17:14:03 UTC (rev 11329)
@@ -1,12 +1,17 @@
package org.drools.rule.builder.dialect.java;
+import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
+import java.util.Set;
+import org.antlr.stringtemplate.StringTemplate;
+import org.antlr.stringtemplate.StringTemplateGroup;
+import org.antlr.stringtemplate.language.AngleBracketTemplateLexer;
import org.apache.commons.jci.compilers.CompilationResult;
import org.apache.commons.jci.compilers.EclipseJavaCompiler;
import org.apache.commons.jci.compilers.EclipseJavaCompilerSettings;
@@ -17,7 +22,9 @@
import org.apache.commons.jci.readers.ResourceReader;
import org.codehaus.jfdi.interpreter.TypeResolver;
import org.drools.RuntimeDroolsException;
+import org.drools.base.ClassFieldExtractorCache;
import org.drools.compiler.PackageBuilderConfiguration;
+import org.drools.compiler.RuleError;
import org.drools.compiler.PackageBuilder.ErrorHandler;
import org.drools.compiler.PackageBuilder.FunctionErrorHandler;
import org.drools.compiler.PackageBuilder.RuleErrorHandler;
@@ -33,13 +40,15 @@
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.Declaration;
import org.drools.rule.LineMappings;
import org.drools.rule.Package;
import org.drools.rule.Rule;
import org.drools.rule.builder.AccumulateBuilder;
+import org.drools.rule.builder.RuleBuildContext;
import org.drools.rule.builder.CollectBuilder;
-import org.drools.rule.builder.PatternBuilder;
import org.drools.rule.builder.ConditionalElementBuilder;
import org.drools.rule.builder.ConsequenceBuilder;
import org.drools.rule.builder.Dialect;
@@ -47,6 +56,7 @@
import org.drools.rule.builder.FromBuilder;
import org.drools.rule.builder.FunctionBuilder;
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.RuleBuilder;
@@ -58,46 +68,58 @@
implements
Dialect {
- private final JavaAccumulateBuilder accumulate = new JavaAccumulateBuilder();
- private final JavaConsequenceBuilder consequence = new JavaConsequenceBuilder();
- private final JavaEvalBuilder eval = new JavaEvalBuilder();
- private final JavaPredicateBuilder predicate = new JavaPredicateBuilder();
- private final JavaReturnValueBuilder returnValue = new JavaReturnValueBuilder();
- private final JavaRuleClassBuilder rule = new JavaRuleClassBuilder();
- private final MVELFromBuilder from = new MVELFromBuilder();
+ // the string template groups
+ private final StringTemplateGroup ruleGroup = new StringTemplateGroup( new InputStreamReader( JavaDialect.class.getResourceAsStream( "javaRule.stg" ) ),
+ AngleBracketTemplateLexer.class );
- private Package pkg;
- private JavaCompiler compiler;
- private List generatedClassList;
- private PackageBuilderConfiguration configuration;
+ private final StringTemplateGroup invokerGroup = new StringTemplateGroup( new InputStreamReader( JavaDialect.class.getResourceAsStream( "javaInvokers.stg" ) ),
+ AngleBracketTemplateLexer.class );
- private MemoryResourceReader src;
- private PackageStore packageStoreWrapper;
+ // builders
+ private final PatternBuilder pattern = new PatternBuilder( this );
+ private final JavaAccumulateBuilder accumulate = new JavaAccumulateBuilder();
+ private final JavaEvalBuilder eval = new JavaEvalBuilder();
+ private final JavaPredicateBuilder predicate = new JavaPredicateBuilder();
+ private final JavaReturnValueBuilder returnValue = new JavaReturnValueBuilder();
+ private final JavaConsequenceBuilder consequence = new JavaConsequenceBuilder();
+ private final JavaRuleClassBuilder rule = new JavaRuleClassBuilder();
+ private final MVELFromBuilder from = new MVELFromBuilder();
- private Map lineMappings;
+ //
+ private final KnowledgeHelperFixer knowledgeHelperFixer;
+ private final DeclarationTypeFixer typeFixer;
+ private final JavaExprAnalyzer analyzer;
- private Map errorHandlers;
+ private PackageBuilderConfiguration configuration;
- private List results;
+ private Package pkg;
+ private JavaCompiler compiler;
+ private List generatedClassList;
+ private MemoryResourceReader src;
+ private PackageStore packageStoreWrapper;
+ private Map lineMappings;
+ private Map errorHandlers;
+ private List results;
+ private final TypeResolver typeResolver;
+ private final ClassFieldExtractorCache classFieldExtractorCache;
// a map of registered builders
- private Map builders;
+ private Map builders;
- // the builder for patterns
- private PatternBuilder patternBuilder;
-
- // the builder for the consequence
- private ConsequenceBuilder consequenceBuilder;
-
- // the builder for the rule class
- private RuleClassBuilder classBuilder;
-
public JavaDialect(final Package pkg,
- final PackageBuilderConfiguration configuration) {
+ final PackageBuilderConfiguration configuration,
+ final TypeResolver typeResolver,
+ final ClassFieldExtractorCache classFieldExtractorCache) {
this.pkg = pkg;
this.configuration = configuration;
loadCompiler();
+ this.typeResolver = typeResolver;
+ this.classFieldExtractorCache = classFieldExtractorCache;
+ this.knowledgeHelperFixer = new KnowledgeHelperFixer();
+ this.typeFixer = new DeclarationTypeFixer();
+ this.analyzer = new JavaExprAnalyzer();
+
if ( pkg != null ) {
init( pkg );
}
@@ -112,35 +134,40 @@
this.builders = new HashMap();
this.builders.put( CollectDescr.class,
- new CollectBuilder() );
+ new CollectBuilder() );
this.builders.put( ForallDescr.class,
- new ForallBuilder() );
+ new ForallBuilder() );
+
final GroupElementBuilder gebuilder = new GroupElementBuilder();
+
this.builders.put( AndDescr.class,
- gebuilder );
+ gebuilder );
+
this.builders.put( OrDescr.class,
- gebuilder );
+ gebuilder );
+
this.builders.put( NotDescr.class,
- gebuilder );
+ gebuilder );
+
this.builders.put( ExistsDescr.class,
- gebuilder );
+ gebuilder );
- // dialect specific
- this.patternBuilder = new PatternBuilder( this );
+ this.builders.put( PatternDescr.class,
+ getPatternBuilder() );
this.builders.put( FromDescr.class,
- getFromBuilder() );
+ getFromBuilder() );
this.builders.put( AccumulateDescr.class,
- getAccumulateBuilder() );
+ getAccumulateBuilder() );
this.builders.put( EvalDescr.class,
- getEvalBuilder() );
+ getEvalBuilder() );
+ }
- this.consequenceBuilder = getConsequenceBuilder();
-
- this.classBuilder = getRuleClassBuilder();
+ public Map getBuilders() {
+ return this.builders;
}
public void init(final Package pkg) {
@@ -170,14 +197,81 @@
ruleDescr.setClassName( ucFirst( ruleClassName ) );
}
+ public List[] getExpressionIdentifiers(final RuleBuildContext context,
+ final BaseDescr descr,
+ final Object content) {
+ List[] usedIdentifiers = null;
+ try {
+ usedIdentifiers = this.analyzer.analyzeExpression( (String) content,
+ new Set[]{context.getDeclarationResolver().getDeclarations().keySet(), context.getPkg().getGlobals().keySet()} );
+ } catch ( final Exception e ) {
+ context.getErrors().add( new RuleError( context.getRule(),
+ descr,
+ null,
+ "Unable to determine the used declarations" ) );
+ }
+ return usedIdentifiers;
+ }
+
+ public List[] getBlockIdentifiers(final RuleBuildContext context,
+ final BaseDescr descr,
+ final String text) {
+ List[] usedIdentifiers = null;
+ try {
+ usedIdentifiers = this.analyzer.analyzeBlock( text,
+ new Set[]{context.getDeclarationResolver().getDeclarations().keySet(), context.getPkg().getGlobals().keySet()} );
+ } catch ( final Exception e ) {
+ context.getErrors().add( new RuleError( context.getRule(),
+ descr,
+ null,
+ "Unable to determine the used declarations" ) );
+ }
+ return usedIdentifiers;
+ }
+
+ /**
+ * Returns the current type resolver instance
+ * @return
+ */
+ public TypeResolver getTypeResolver() {
+ return this.typeResolver;
+ }
+
+ /**
+ * Returns the cache of field extractors
+ * @return
+ */
+ public ClassFieldExtractorCache getClassFieldExtractorCache() {
+ return this.classFieldExtractorCache;
+ }
+
+ /**
+ * Returns the Knowledge Helper Fixer
+ * @return
+ */
+ public KnowledgeHelperFixer getKnowledgeHelperFixer() {
+ return this.knowledgeHelperFixer;
+ }
+
+ /**
+ * @return the typeFixer
+ */
+ public DeclarationTypeFixer getTypeFixer() {
+ return this.typeFixer;
+ }
+
+ public Object getBuilder(Class clazz) {
+ return this.builders.get( clazz );
+ }
+
+ public PatternBuilder getPatternBuilder() {
+ return this.pattern;
+ }
+
public AccumulateBuilder getAccumulateBuilder() {
return this.accumulate;
}
- public ConsequenceBuilder getConsequenceBuilder() {
- return this.consequence;
- }
-
public ConditionalElementBuilder getEvalBuilder() {
return this.eval;
}
@@ -190,6 +284,10 @@
return this.returnValue;
}
+ public ConsequenceBuilder getConsequenceBuilder() {
+ return this.consequence;
+ }
+
public RuleClassBuilder getRuleClassBuilder() {
return this.rule;
}
@@ -199,6 +297,59 @@
}
/**
+ * Sets usual string template attributes:
+ *
+ * <li> list of declarations and declaration types</li>
+ * <li> list of globals and global types</li>
+ *
+ * @param context the current build context
+ * @param st the string template whose attributes will be set
+ * @param declarations array of declarations to set
+ * @param globals array of globals to set
+ */
+ public void setStringTemplateAttributes(final RuleBuildContext context,
+ final StringTemplate st,
+ final Declaration[] declarations,
+ final String[] globals) {
+ final String[] declarationTypes = new String[declarations.length];
+ for ( int i = 0, size = declarations.length; i < size; i++ ) {
+ declarationTypes[i] = ((JavaDialect) context.getDialect()).getTypeFixer().fix( declarations[i] );
+ }
+
+ final List globalTypes = new ArrayList( globals.length );
+ for ( int i = 0, length = globals.length; i < length; i++ ) {
+ globalTypes.add( ((Class) context.getPkg().getGlobals().get( globals[i] )).getName().replace( '$',
+ '.' ) );
+ }
+
+ st.setAttribute( "declarations",
+ declarations );
+ st.setAttribute( "declarationTypes",
+ declarationTypes );
+
+ st.setAttribute( "globals",
+ globals );
+ st.setAttribute( "globalTypes",
+ globalTypes );
+ }
+
+ /**
+ * Returns the string template group of invokers
+ * @return
+ */
+ public StringTemplateGroup getInvokerGroup() {
+ return this.invokerGroup;
+ }
+
+ /**
+ * Returns the string template group of actual rule templates
+ * @return
+ */
+ public StringTemplateGroup getRuleGroup() {
+ return this.ruleGroup;
+ }
+
+ /**
* This actually triggers the compiling of all the resources.
* Errors are mapped back to the element that originally generated the semantic
* code.
@@ -245,12 +396,12 @@
}
/**
- * This will setup the semantic components of the rule for compiling later on.
+ * This will add the rule for compiling later on.
* It will not actually call the compiler
*/
- public void addRuleSemantics(final RuleBuilder builder,
- final Rule rule,
- final RuleDescr ruleDescr) {
+ public void addRule(final RuleBuilder builder,
+ final Rule rule,
+ final RuleDescr ruleDescr) {
// return if there is no ruleclass name;
if ( builder.getRuleClass() == null ) {
return;
Added: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaDialectSession.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaDialectSession.java (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaDialectSession.java 2007-04-25 17:14:03 UTC (rev 11329)
@@ -0,0 +1,5 @@
+package org.drools.rule.builder.dialect.java;
+
+public class JavaDialectSession {
+
+}
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaEvalBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaEvalBuilder.java 2007-04-25 17:13:42 UTC (rev 11328)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaEvalBuilder.java 2007-04-25 17:14:03 UTC (rev 11329)
@@ -24,9 +24,10 @@
import org.drools.rule.ConditionalElement;
import org.drools.rule.Declaration;
import org.drools.rule.EvalCondition;
-import org.drools.rule.builder.BuildContext;
+import org.drools.rule.builder.RuleBuildContext;
import org.drools.rule.builder.PatternBuilder;
import org.drools.rule.builder.ConditionalElementBuilder;
+import org.drools.util.StringUtils;
/**
* @author etirelli
@@ -46,9 +47,7 @@
*
* @return the Eval Conditional Element
*/
- public ConditionalElement build(final BuildContext context,
- final BuildUtils utils,
- final PatternBuilder patternBuilder,
+ public ConditionalElement build(final RuleBuildContext context,
final BaseDescr descr) {
// it must be an EvalDescr
final EvalDescr evalDescr = (EvalDescr) descr;
@@ -57,9 +56,9 @@
evalDescr.setClassMethodName( className );
- final List[] usedIdentifiers = utils.getUsedIdentifiers( context,
- evalDescr,
- evalDescr.getContent() );
+ final List[] usedIdentifiers = context.getDialect().getExpressionIdentifiers( context,
+ evalDescr,
+ evalDescr.getContent() );
final Declaration[] declarations = new Declaration[usedIdentifiers[0].size()];
for ( int i = 0, size = usedIdentifiers[0].size(); i < size; i++ ) {
@@ -68,13 +67,15 @@
final EvalCondition eval = new EvalCondition( declarations );
- StringTemplate st = utils.getRuleGroup().getInstanceOf( "evalMethod" );
+ JavaDialect dialect = (JavaDialect) context.getDialect();
- utils.setStringTemplateAttributes( context,
- st,
- declarations,
- (String[]) usedIdentifiers[1].toArray( new String[usedIdentifiers[1].size()] ) );
+ StringTemplate st = dialect.getRuleGroup().getInstanceOf( "evalMethod" );
+ dialect.setStringTemplateAttributes( context,
+ st,
+ declarations,
+ (String[]) usedIdentifiers[1].toArray( new String[usedIdentifiers[1].size()] ) );
+
st.setAttribute( "methodName",
className );
@@ -84,26 +85,26 @@
context.getMethods().add( st.toString() );
- st = utils.getInvokerGroup().getInstanceOf( "evalInvoker" );
+ st = dialect.getInvokerGroup().getInstanceOf( "evalInvoker" );
st.setAttribute( "package",
context.getPkg().getName() );
st.setAttribute( "ruleClassName",
- utils.ucFirst( context.getRuleDescr().getClassName() ) );
+ StringUtils.ucFirst( context.getRuleDescr().getClassName() ) );
st.setAttribute( "invokerClassName",
- context.getRuleDescr().getClassName() + utils.ucFirst( className ) + "Invoker" );
+ context.getRuleDescr().getClassName() + StringUtils.ucFirst( className ) + "Invoker" );
st.setAttribute( "methodName",
className );
- utils.setStringTemplateAttributes( context,
- st,
- declarations,
- (String[]) usedIdentifiers[1].toArray( new String[usedIdentifiers[1].size()] ) );
+ dialect.setStringTemplateAttributes( context,
+ st,
+ declarations,
+ (String[]) usedIdentifiers[1].toArray( new String[usedIdentifiers[1].size()] ) );
st.setAttribute( "hashCode",
evalText.hashCode() );
- final String invokerClassName = context.getPkg().getName() + "." + context.getRuleDescr().getClassName() + utils.ucFirst( className ) + "Invoker";
+ final String invokerClassName = context.getPkg().getName() + "." + context.getRuleDescr().getClassName() + StringUtils.ucFirst( className ) + "Invoker";
context.getInvokers().put( invokerClassName,
st.toString() );
context.getInvokerLookups().put( invokerClassName,
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaPredicateBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaPredicateBuilder.java 2007-04-25 17:13:42 UTC (rev 11328)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaPredicateBuilder.java 2007-04-25 17:14:03 UTC (rev 11329)
@@ -6,15 +6,15 @@
import org.drools.lang.descr.PredicateDescr;
import org.drools.rule.Declaration;
import org.drools.rule.PredicateConstraint;
-import org.drools.rule.builder.BuildContext;
+import org.drools.rule.builder.RuleBuildContext;
import org.drools.rule.builder.PredicateBuilder;
+import org.drools.util.StringUtils;
public class JavaPredicateBuilder
implements
PredicateBuilder {
- public void build(final BuildContext context,
- final BuildUtils utils,
+ public void build(final RuleBuildContext context,
final List[] usedIdentifiers,
final Declaration[] previousDeclarations,
final Declaration[] localDeclarations,
@@ -24,17 +24,19 @@
// generate Invoker
final String className = "predicate" + context.getNextId();
predicateDescr.setClassMethodName( className );
+
+ JavaDialect dialect = (JavaDialect) context.getDialect();
- StringTemplate st = utils.getRuleGroup().getInstanceOf( "predicateMethod" );
+ StringTemplate st = dialect.getRuleGroup().getInstanceOf( "predicateMethod" );
- utils.setStringTemplateAttributes( context,
+ dialect.setStringTemplateAttributes( context,
st,
previousDeclarations,
(String[]) usedIdentifiers[1].toArray( new String[usedIdentifiers[1].size()] ) );
final String[] localDeclarationTypes = new String[localDeclarations.length];
for ( int i = 0, size = localDeclarations.length; i < size; i++ ) {
- localDeclarationTypes[i] = utils.getTypeFixer().fix( localDeclarations[i] );
+ localDeclarationTypes[i] = ( (JavaDialect) context.getDialect()).getTypeFixer().fix( localDeclarations[i] );
}
st.setAttribute( "localDeclarations",
@@ -52,18 +54,18 @@
context.getMethods().add( st.toString() );
- st = utils.getInvokerGroup().getInstanceOf( "predicateInvoker" );
+ st = dialect.getInvokerGroup().getInstanceOf( "predicateInvoker" );
st.setAttribute( "package",
context.getPkg().getName() );
st.setAttribute( "ruleClassName",
- utils.ucFirst( context.getRuleDescr().getClassName() ) );
+ StringUtils.ucFirst( context.getRuleDescr().getClassName() ) );
st.setAttribute( "invokerClassName",
- context.getRuleDescr().getClassName() + utils.ucFirst( className ) + "Invoker" );
+ context.getRuleDescr().getClassName() + StringUtils.ucFirst( className ) + "Invoker" );
st.setAttribute( "methodName",
className );
- utils.setStringTemplateAttributes( context,
+ dialect.setStringTemplateAttributes( context,
st,
previousDeclarations,
(String[]) usedIdentifiers[1].toArray( new String[usedIdentifiers[1].size()] ) );
@@ -76,7 +78,7 @@
st.setAttribute( "hashCode",
predicateText.hashCode() );
- final String invokerClassName = context.getPkg().getName() + "." + context.getRuleDescr().getClassName() + utils.ucFirst( className ) + "Invoker";
+ final String invokerClassName = context.getPkg().getName() + "." + context.getRuleDescr().getClassName() + StringUtils.ucFirst( className ) + "Invoker";
context.getInvokers().put( invokerClassName,
st.toString() );
context.getInvokerLookups().put( invokerClassName,
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-04-25 17:13:42 UTC (rev 11328)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaReturnValueBuilder.java 2007-04-25 17:14:03 UTC (rev 11329)
@@ -6,14 +6,14 @@
import org.drools.lang.descr.ReturnValueRestrictionDescr;
import org.drools.rule.Declaration;
import org.drools.rule.ReturnValueRestriction;
-import org.drools.rule.builder.BuildContext;
+import org.drools.rule.builder.RuleBuildContext;
import org.drools.rule.builder.ReturnValueBuilder;
+import org.drools.util.StringUtils;
public class JavaReturnValueBuilder
implements
ReturnValueBuilder {
- public void build(final BuildContext context,
- final BuildUtils utils,
+ public void build(final RuleBuildContext context,
final List[] usedIdentifiers,
final Declaration[] previousDeclarations,
final Declaration[] localDeclarations,
@@ -22,16 +22,18 @@
final String className = "returnValue" + context.getNextId();
returnValueRestrictionDescr.setClassMethodName( className );
- StringTemplate st = utils.getRuleGroup().getInstanceOf( "returnValueMethod" );
+ JavaDialect dialect = (JavaDialect) context.getDialect();
- utils.setStringTemplateAttributes( context,
- st,
- previousDeclarations,
- (String[]) usedIdentifiers[1].toArray( new String[usedIdentifiers[1].size()] ) );
+ StringTemplate st = dialect.getRuleGroup().getInstanceOf( "returnValueMethod" );
+ dialect.setStringTemplateAttributes( context,
+ st,
+ previousDeclarations,
+ (String[]) usedIdentifiers[1].toArray( new String[usedIdentifiers[1].size()] ) );
+
final String[] localDeclarationTypes = new String[localDeclarations.length];
for ( int i = 0, size = localDeclarations.length; i < size; i++ ) {
- localDeclarationTypes[i] = utils.getTypeFixer().fix( localDeclarations[i] );
+ localDeclarationTypes[i] = ((JavaDialect) context.getDialect()).getTypeFixer().fix( localDeclarations[i] );
}
st.setAttribute( "localDeclarations",
@@ -48,21 +50,21 @@
context.getMethods().add( st.toString() );
- st = utils.getInvokerGroup().getInstanceOf( "returnValueInvoker" );
+ st = dialect.getInvokerGroup().getInstanceOf( "returnValueInvoker" );
st.setAttribute( "package",
context.getPkg().getName() );
st.setAttribute( "ruleClassName",
- utils.ucFirst( context.getRuleDescr().getClassName() ) );
+ StringUtils.ucFirst( context.getRuleDescr().getClassName() ) );
st.setAttribute( "invokerClassName",
- context.getRuleDescr().getClassName() + utils.ucFirst( className ) + "Invoker" );
+ context.getRuleDescr().getClassName() + StringUtils.ucFirst( className ) + "Invoker" );
st.setAttribute( "methodName",
className );
- utils.setStringTemplateAttributes( context,
- st,
- previousDeclarations,
- (String[]) usedIdentifiers[1].toArray( new String[usedIdentifiers[1].size()] ) );
+ dialect.setStringTemplateAttributes( context,
+ st,
+ previousDeclarations,
+ (String[]) usedIdentifiers[1].toArray( new String[usedIdentifiers[1].size()] ) );
st.setAttribute( "localDeclarations",
localDeclarations );
@@ -72,7 +74,7 @@
st.setAttribute( "hashCode",
returnValueText.hashCode() );
- final String invokerClassName = context.getPkg().getName() + "." + context.getRuleDescr().getClassName() + utils.ucFirst( className ) + "Invoker";
+ final String invokerClassName = context.getPkg().getName() + "." + context.getRuleDescr().getClassName() + StringUtils.ucFirst( className ) + "Invoker";
context.getInvokers().put( invokerClassName,
st.toString() );
context.getInvokerLookups().put( invokerClassName,
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-04-25 17:13:42 UTC (rev 11328)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaRuleClassBuilder.java 2007-04-25 17:14:03 UTC (rev 11329)
@@ -19,8 +19,9 @@
import java.util.Iterator;
import org.drools.lang.descr.RuleDescr;
-import org.drools.rule.builder.BuildContext;
+import org.drools.rule.builder.RuleBuildContext;
import org.drools.rule.builder.RuleClassBuilder;
+import org.drools.util.StringUtils;
/**
* @author etirelli
@@ -33,8 +34,7 @@
/* (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,
+ public void buildRule(final RuleBuildContext context,
final RuleDescr ruleDescr) {
// If there is no compiled code, return
if ( context.getMethods().isEmpty() ) {
@@ -54,7 +54,7 @@
buffer.append( "import static " + it.next() + ";" + lineSeparator );
}
- buffer.append( "public class " + utils.ucFirst( ruleDescr.getClassName() ) + " {" + lineSeparator );
+ buffer.append( "public class " + StringUtils.ucFirst( ruleDescr.getClassName() ) + " {" + lineSeparator );
buffer.append( " private static final long serialVersionUID = 320L;" + lineSeparator );
for ( int i = 0, size = context.getMethods().size() - 1; i < size; i++ ) {
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-04-25 17:13:42 UTC (rev 11328)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELConsequenceBuilder.java 2007-04-25 17:14:03 UTC (rev 11329)
@@ -5,17 +5,15 @@
import org.drools.base.mvel.DroolsMVELFactory;
import org.drools.base.mvel.MVELConsequence;
import org.drools.lang.descr.RuleDescr;
-import org.drools.rule.builder.BuildContext;
+import org.drools.rule.builder.RuleBuildContext;
import org.drools.rule.builder.ConsequenceBuilder;
-import org.drools.rule.builder.dialect.java.BuildUtils;
import org.mvel.MVEL;
public class MVELConsequenceBuilder
implements
ConsequenceBuilder {
- public void build(final BuildContext context,
- final BuildUtils utils,
+ public void build(final RuleBuildContext context,
final RuleDescr ruleDescr) {
// pushing consequence LHS into the stack for variable resolution
context.getBuildStack().push( context.getRule().getLhs() );
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-04-25 17:13:42 UTC (rev 11328)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELEvalBuilder.java 2007-04-25 17:14:03 UTC (rev 11329)
@@ -24,10 +24,9 @@
import org.drools.rule.ConditionalElement;
import org.drools.rule.Declaration;
import org.drools.rule.EvalCondition;
-import org.drools.rule.builder.BuildContext;
+import org.drools.rule.builder.RuleBuildContext;
import org.drools.rule.builder.PatternBuilder;
import org.drools.rule.builder.ConditionalElementBuilder;
-import org.drools.rule.builder.dialect.java.BuildUtils;
import org.mvel.MVEL;
/**
@@ -48,9 +47,7 @@
*
* @return the Eval Conditional Element
*/
- public ConditionalElement build(final BuildContext context,
- final BuildUtils utils,
- final PatternBuilder patternBuilder,
+ public ConditionalElement build(final RuleBuildContext context,
final BaseDescr descr) {
// it must be an EvalDescr
final EvalDescr evalDescr = (EvalDescr) descr;
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-04-25 17:13:42 UTC (rev 11328)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELFromBuilder.java 2007-04-25 17:14:03 UTC (rev 11329)
@@ -24,14 +24,14 @@
import org.drools.lang.descr.AccessorDescr;
import org.drools.lang.descr.BaseDescr;
import org.drools.lang.descr.FromDescr;
+import org.drools.lang.descr.PatternDescr;
import org.drools.rule.Pattern;
import org.drools.rule.ConditionalElement;
import org.drools.rule.From;
-import org.drools.rule.builder.BuildContext;
+import org.drools.rule.builder.RuleBuildContext;
import org.drools.rule.builder.PatternBuilder;
import org.drools.rule.builder.ConditionalElementBuilder;
import org.drools.rule.builder.FromBuilder;
-import org.drools.rule.builder.dialect.java.BuildUtils;
import org.drools.spi.DataProvider;
import org.mvel.MVEL;
@@ -48,14 +48,13 @@
/* (non-Javadoc)
* @see org.drools.dialect.mvel.FromBuilder#build(org.drools.semantics.java.builder.BuildContext, org.drools.semantics.java.builder.BuildUtils, org.drools.semantics.java.builder.PatternBuilder, org.drools.lang.descr.BaseDescr)
*/
- public ConditionalElement build(final BuildContext context,
- final BuildUtils utils,
- final PatternBuilder patternBuilder,
+ public ConditionalElement build(final RuleBuildContext context,
final BaseDescr descr) {
final FromDescr fromDescr = (FromDescr) descr;
+ final PatternBuilder patternBuilder = (PatternBuilder) context.getDialect().getBuilder( PatternDescr.class );
+
final Pattern pattern = patternBuilder.build( context,
- utils,
fromDescr.getReturnedPattern() );
if ( pattern == null ) {
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-04-25 17:13:42 UTC (rev 11328)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELPredicateBuilder.java 2007-04-25 17:14:03 UTC (rev 11329)
@@ -26,9 +26,8 @@
import org.drools.lang.descr.PredicateDescr;
import org.drools.rule.Declaration;
import org.drools.rule.PredicateConstraint;
-import org.drools.rule.builder.BuildContext;
+import org.drools.rule.builder.RuleBuildContext;
import org.drools.rule.builder.PredicateBuilder;
-import org.drools.rule.builder.dialect.java.BuildUtils;
import org.mvel.MVEL;
/**
@@ -39,8 +38,7 @@
implements
PredicateBuilder {
- public void build(final BuildContext context,
- final BuildUtils utils,
+ public void build(final RuleBuildContext context,
final List[] usedIdentifiers,
final Declaration[] previousDeclarations,
final Declaration[] localDeclarations,
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-04-25 17:13:42 UTC (rev 11328)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELReturnValueBuilder.java 2007-04-25 17:14:03 UTC (rev 11329)
@@ -29,9 +29,8 @@
import org.drools.rule.Declaration;
import org.drools.rule.PredicateConstraint;
import org.drools.rule.ReturnValueRestriction;
-import org.drools.rule.builder.BuildContext;
+import org.drools.rule.builder.RuleBuildContext;
import org.drools.rule.builder.ReturnValueBuilder;
-import org.drools.rule.builder.dialect.java.BuildUtils;
import org.mvel.MVEL;
/**
@@ -42,8 +41,7 @@
implements
ReturnValueBuilder {
- public void build(final BuildContext context,
- final BuildUtils utils,
+ public void build(final RuleBuildContext context,
final List[] usedIdentifiers,
final Declaration[] previousDeclarations,
final Declaration[] localDeclarations,
@@ -72,8 +70,7 @@
factory ) );
}
- public void build(final BuildContext context,
- final BuildUtils utils,
+ public void build(final RuleBuildContext context,
final List[] usedIdentifiers,
final Declaration[] previousDeclarations,
final Declaration[] localDeclarations,
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/lang/RuleParserTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/lang/RuleParserTest.java 2007-04-25 17:13:42 UTC (rev 11328)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/lang/RuleParserTest.java 2007-04-25 17:14:03 UTC (rev 11329)
@@ -592,107 +592,105 @@
accessor.toString() );
}
- // public void testFrom() throws Exception {
- // final RuleDescr rule = parseResource( "from.drl" ).rule();
- //
- // if(parser.hasErrors()) {
- // System.err.println(parser.getErrorMessages());
- // }
- // assertFalse(parser.hasErrors());
- //
- // assertNotNull( rule );
- //
- // assertEquals( "using_from",
- // rule.getName() );
- //
- // assertEquals(9, rule.getLhs().getDescrs().size());
- //
- // FromDescr from = (FromDescr) rule.getLhs().getDescrs().get(0);
- //
- // assertEquals(3, from.getLine());
- //
- // assertEquals("Foo", from.getReturnedPattern().getObjectType());
- // assertTrue(from.getDataSource() instanceof FieldAccessDescr);
- // assertEquals("baz", ((FieldAccessDescr) from.getDataSource()).getFieldName());
- // assertEquals("bar", ((FieldAccessDescr) from.getDataSource()).getVariableName());
- //
- //
- // ArgumentValueDescr arg = null;
- //
- // from = (FromDescr) rule.getLhs().getDescrs().get(1);
- // assertEquals("Foo", from.getReturnedPattern().getObjectType());
- // assertEquals(0, from.getReturnedPattern().getDescrs().size());
- // FieldAccessDescr fieldAccess = ( FieldAccessDescr ) from.getDataSource();
- // arg = ( ArgumentValueDescr ) fieldAccess.getArgument();
- // assertEquals(ArgumentValueDescr.STRING, arg.getType() );
- //
- // from = (FromDescr) rule.getLhs().getDescrs().get(2);
- // fieldAccess = ( FieldAccessDescr ) from.getDataSource();
- // arg = ( ArgumentValueDescr ) fieldAccess.getArgument();
- // assertEquals(ArgumentValueDescr.VARIABLE, arg.getType() );
- //
- // from = (FromDescr) rule.getLhs().getDescrs().get(3);
- // fieldAccess = ( FieldAccessDescr ) from.getDataSource();
- // arg = ( ArgumentValueDescr ) fieldAccess.getArgument();
- // assertEquals(ArgumentValueDescr.INTEGRAL, arg.getType() );
- //
- // from = (FromDescr) rule.getLhs().getDescrs().get(4);
- // assertEquals("Whee", from.getReturnedColumn().getObjectType());
- // assertEquals(1, from.getReturnedColumn().getDescrs().size());
- // assertTrue(from.getDataSource() instanceof FunctionCallDescr);
- // assertEquals("whee", ((FunctionCallDescr) from.getDataSource()).getName());
- // assertEquals(1, ((FunctionCallDescr) from.getDataSource()).getArguments().size());
- // arg = ( (ArgumentValueDescr )((FunctionCallDescr) from.getDataSource()).getArguments().get(0));
- // assertEquals("y", arg.getValue());
- // assertEquals(ArgumentValueDescr.STRING, arg.getType());
- //
- // assertEquals(7, from.getLine());
- // assertEquals(7, from.getReturnedColumn().getLine());
- //
- // from = (FromDescr) rule.getLhs().getDescrs().get(5);
- // assertEquals("Foo", from.getReturnedColumn().getObjectType());
- // assertEquals(1, from.getReturnedColumn().getDescrs().size());
- // assertEquals("f", from.getReturnedColumn().getIdentifier());
- // assertTrue(from.getDataSource() instanceof MethodAccessDescr);
- // assertEquals("bar", ((MethodAccessDescr) from.getDataSource()).getVariableName());
- // assertEquals("la", ((MethodAccessDescr) from.getDataSource()).getMethodName());
- // assertEquals(1, ((MethodAccessDescr) from.getDataSource()).getArguments().size());
- // arg = (ArgumentValueDescr) ((MethodAccessDescr) from.getDataSource()).getArguments().get(0);
- //
- //
- // assertEquals("x", arg.getValue());
- // assertEquals(ArgumentValueDescr.VARIABLE, arg.getType());
- //
- // assertEqualsIgnoreWhitespace("whee();", ( String ) rule.getConsequence());
- //
- // from = (FromDescr) rule.getLhs().getDescrs().get(6);
- // assertEquals("wa", ((FunctionCallDescr)from.getDataSource()).getName());
- //
- // from = (FromDescr) rule.getLhs().getDescrs().get(7);
- // MethodAccessDescr meth = (MethodAccessDescr)from.getDataSource();
- // assertEquals("wa", meth.getMethodName());
- // assertEquals("la", meth.getVariableName());
- //
- // arg = (ArgumentValueDescr) meth.getArguments().get(0);
- // assertEquals("42", arg.getValue());
- // assertEquals(ArgumentValueDescr.INTEGRAL, arg.getType());
- //
- // arg = (ArgumentValueDescr) meth.getArguments().get(1);
- // assertEquals("42.42", arg.getValue());
- // assertEquals(ArgumentValueDescr.DECIMAL, arg.getType());
- //
- // arg = (ArgumentValueDescr) meth.getArguments().get(2);
- // assertEquals("false", arg.getValue());
- // assertEquals(ArgumentValueDescr.BOOLEAN, arg.getType());
- //
- // arg = (ArgumentValueDescr) meth.getArguments().get(3);
- // assertEquals("null", arg.getValue());
- // assertEquals(ArgumentValueDescr.NULL, arg.getType());
- //
- //
- //
- // assertEquals("Bam", ((PatternDescr)rule.getLhs().getDescrs().get(8)).getObjectType());
- // }
+// public void testFrom() throws Exception {
+// final RuleDescr rule = parseResource( "from.drl" ).rule();
+//
+// if(parser.hasErrors()) {
+// System.err.println(parser.getErrorMessages());
+// }
+// assertFalse(parser.hasErrors());
+//
+// assertNotNull( rule );
+//
+// assertEquals( "using_from",
+// rule.getName() );
+//
+// assertEquals(9, rule.getLhs().getDescrs().size());
+//
+// FromDescr from = (FromDescr) rule.getLhs().getDescrs().get(0);
+//
+// assertEquals(3, from.getLine());
+//
+// assertEquals("Foo", from.getReturnedPattern().getObjectType());
+// assertTrue(from.getDataSource() instanceof FieldAccessDescr);
+// assertEquals("baz", ((FieldAccessDescr) from.getDataSource()).getFieldName());
+// assertEquals("bar", ((FieldAccessDescr) from.getDataSource()).getVariableName());
+//
+//
+// ArgumentValueDescr arg = null;
+//
+// from = (FromDescr) rule.getLhs().getDescrs().get(1);
+// assertEquals("Foo", from.getReturnedPattern().getObjectType());
+// assertEquals(0, from.getReturnedPattern().getDescrs().size());
+// FieldAccessDescr fieldAccess = ( FieldAccessDescr ) from.getDataSource();
+// arg = ( ArgumentValueDescr ) fieldAccess.getArgument();
+// assertEquals(ArgumentValueDescr.STRING, arg.getType() );
+//
+// from = (FromDescr) rule.getLhs().getDescrs().get(2);
+// fieldAccess = ( FieldAccessDescr ) from.getDataSource();
+// arg = ( ArgumentValueDescr ) fieldAccess.getArgument();
+// assertEquals(ArgumentValueDescr.VARIABLE, arg.getType() );
+//
+// from = (FromDescr) rule.getLhs().getDescrs().get(3);
+// fieldAccess = ( FieldAccessDescr ) from.getDataSource();
+// arg = ( ArgumentValueDescr ) fieldAccess.getArgument();
+// assertEquals(ArgumentValueDescr.INTEGRAL, arg.getType() );
+//
+// from = (FromDescr) rule.getLhs().getDescrs().get(4);
+// assertEquals("Whee", from.getReturnedColumn().getObjectType());
+// assertEquals(1, from.getReturnedColumn().getDescrs().size());
+// assertTrue(from.getDataSource() instanceof FunctionCallDescr);
+// assertEquals("whee", ((FunctionCallDescr) from.getDataSource()).getName());
+// assertEquals(1, ((FunctionCallDescr) from.getDataSource()).getArguments().size());
+// arg = ( (ArgumentValueDescr )((FunctionCallDescr) from.getDataSource()).getArguments().get(0));
+// assertEquals("y", arg.getValue());
+// assertEquals(ArgumentValueDescr.STRING, arg.getType());
+//
+// assertEquals(7, from.getLine());
+// assertEquals(7, from.getReturnedColumn().getLine());
+//
+// from = (FromDescr) rule.getLhs().getDescrs().get(5);
+// assertEquals("Foo", from.getReturnedColumn().getObjectType());
+// assertEquals(1, from.getReturnedColumn().getDescrs().size());
+// assertEquals("f", from.getReturnedColumn().getIdentifier());
+// assertTrue(from.getDataSource() instanceof MethodAccessDescr);
+// assertEquals("bar", ((MethodAccessDescr) from.getDataSource()).getVariableName());
+// assertEquals("la", ((MethodAccessDescr) from.getDataSource()).getMethodName());
+// assertEquals(1, ((MethodAccessDescr) from.getDataSource()).getArguments().size());
+// arg = (ArgumentValueDescr) ((MethodAccessDescr) from.getDataSource()).getArguments().get(0);
+//
+//
+// assertEquals("x", arg.getValue());
+// assertEquals(ArgumentValueDescr.VARIABLE, arg.getType());
+//
+// assertEqualsIgnoreWhitespace("whee();", ( String ) rule.getConsequence());
+//
+// from = (FromDescr) rule.getLhs().getDescrs().get(6);
+// assertEquals("wa", ((FunctionCallDescr)from.getDataSource()).getName());
+//
+// from = (FromDescr) rule.getLhs().getDescrs().get(7);
+// MethodAccessDescr meth = (MethodAccessDescr)from.getDataSource();
+// assertEquals("wa", meth.getMethodName());
+// assertEquals("la", meth.getVariableName());
+//
+// arg = (ArgumentValueDescr) meth.getArguments().get(0);
+// assertEquals("42", arg.getValue());
+// assertEquals(ArgumentValueDescr.INTEGRAL, arg.getType());
+//
+// arg = (ArgumentValueDescr) meth.getArguments().get(1);
+// assertEquals("42.42", arg.getValue());
+// assertEquals(ArgumentValueDescr.DECIMAL, arg.getType());
+//
+// arg = (ArgumentValueDescr) meth.getArguments().get(2);
+// assertEquals("false", arg.getValue());
+// assertEquals(ArgumentValueDescr.BOOLEAN, arg.getType());
+//
+// arg = (ArgumentValueDescr) meth.getArguments().get(3);
+// assertEquals("null", arg.getValue());
+// assertEquals(ArgumentValueDescr.NULL, arg.getType());
+//
+// assertEquals("Bam", ((PatternDescr)rule.getLhs().getDescrs().get(8)).getObjectType());
+// }
public void testSimpleRule() throws Exception {
final RuleDescr rule = parseResource( "simple_rule.drl" ).rule();
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:13:42 UTC (rev 11328)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/java/RuleBuilderTest.java 2007-04-25 17:14:03 UTC (rev 11329)
@@ -61,74 +61,71 @@
/**
* Test method for {@link org.drools.rule.builder.RuleBuilder#build(org.drools.rule.Package, org.drools.lang.descr.RuleDescr)}.
*/
- public void testBuild() {
- try {
- final DrlParser parser = new DrlParser();
- final PackageDescr pkgDescr = parser.parse( new InputStreamReader( getClass().getResourceAsStream( "nestedConditionalElements.drl" ) ) );
+ public void testBuild() throws Exception {
+ final DrlParser parser = new DrlParser();
+ final PackageDescr pkgDescr = parser.parse( new InputStreamReader( getClass().getResourceAsStream( "nestedConditionalElements.drl" ) ) );
- // just checking there is no parsing errors
- Assert.assertFalse( parser.getErrors().toString(),
- parser.hasErrors() );
+ // just checking there is no parsing errors
+ Assert.assertFalse( parser.getErrors().toString(),
+ parser.hasErrors() );
- final Package pkg = new Package( "org.drools" );
+ final Package pkg = new Package( "org.drools" );
- final RuleDescr ruleDescr = (RuleDescr) pkgDescr.getRules().get( 0 );
- final String ruleClassName = "RuleClassName.java";
- ruleDescr.setClassName( ruleClassName );
+ final RuleDescr ruleDescr = (RuleDescr) pkgDescr.getRules().get( 0 );
+ final String ruleClassName = "RuleClassName.java";
+ ruleDescr.setClassName( ruleClassName );
- final TypeResolver typeResolver = new ClassTypeResolver( new ArrayList(),
- this.getClass().getClassLoader() );
- // make an automatic import for the current package
- typeResolver.addImport( pkgDescr.getName() + ".*" );
- typeResolver.addImport( "java.lang.*" );
+ final TypeResolver typeResolver = new ClassTypeResolver( new ArrayList(),
+ this.getClass().getClassLoader() );
+ // make an automatic import for the current package
+ typeResolver.addImport( pkgDescr.getName() + ".*" );
+ typeResolver.addImport( "java.lang.*" );
- final RuleBuilder builder = new RuleBuilder( typeResolver,
- new ClassFieldExtractorCache(),
- new JavaDialect( null,
- new PackageBuilderConfiguration() ) );
+ final RuleBuilder builder = new RuleBuilder( typeResolver,
+ new ClassFieldExtractorCache(),
+ new JavaDialect( null,
+ new PackageBuilderConfiguration(),
+ typeResolver,
+ new ClassFieldExtractorCache() ) );
- builder.build( pkg,
- ruleDescr );
+ builder.build( pkg,
+ ruleDescr );
- Assert.assertTrue( builder.getErrors().toString(),
- builder.getErrors().isEmpty() );
+ Assert.assertTrue( builder.getErrors().toString(),
+ builder.getErrors().isEmpty() );
- final Rule rule = builder.getRule();
+ final Rule rule = builder.getRule();
- assertEquals( "There should be 2 rule level declarations",
- 2,
- rule.getDeclarations().length );
+ assertEquals( "There should be 2 rule level declarations",
+ 2,
+ rule.getDeclarations().length );
- // second GE should be a not
- final GroupElement not = (GroupElement) rule.getLhs().getChildren().get( 1 );
- assertTrue( not.isNot() );
- // not has no outer declarations
- assertTrue( not.getOuterDeclarations().isEmpty() );
- assertEquals( 1,
- not.getInnerDeclarations().size() );
- assertTrue( not.getInnerDeclarations().keySet().contains( "$state" ) );
+ // second GE should be a not
+ final GroupElement not = (GroupElement) rule.getLhs().getChildren().get( 1 );
+ assertTrue( not.isNot() );
+ // not has no outer declarations
+ assertTrue( not.getOuterDeclarations().isEmpty() );
+ assertEquals( 1,
+ not.getInnerDeclarations().size() );
+ assertTrue( not.getInnerDeclarations().keySet().contains( "$state" ) );
- // second not
- final GroupElement not2 = (GroupElement) ((GroupElement) not.getChildren().get( 0 )).getChildren().get( 1 );
- assertTrue( not2.isNot() );
- // not has no outer declarations
- assertTrue( not2.getOuterDeclarations().isEmpty() );
- assertEquals( 1,
- not2.getInnerDeclarations().size() );
- assertTrue( not2.getInnerDeclarations().keySet().contains( "$likes" ) );
-
- } catch ( final Exception e ) {
- e.printStackTrace();
- fail( "This test is not supposed to throw any exception: " + e.getMessage() );
- }
-
+ // second not
+ final GroupElement not2 = (GroupElement) ((GroupElement) not.getChildren().get( 0 )).getChildren().get( 1 );
+ assertTrue( not2.isNot() );
+ // not has no outer declarations
+ assertTrue( not2.getOuterDeclarations().isEmpty() );
+ assertEquals( 1,
+ not2.getInnerDeclarations().size() );
+ assertTrue( not2.getInnerDeclarations().keySet().contains( "$likes" ) );
}
public void testBuildAttributes() throws Exception {
final RuleBuilder builder = new RuleBuilder( null,
- null,
- new JavaDialect( null,
- new PackageBuilderConfiguration() ) );
+ null,
+ new JavaDialect( null,
+ new PackageBuilderConfiguration(),
+ null,
+ null ) );
Rule rule = new Rule( "myrule" );
List attributes = new ArrayList();
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELConsequenceBuilderTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELConsequenceBuilderTest.java 2007-04-25 17:13:42 UTC (rev 11328)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELConsequenceBuilderTest.java 2007-04-25 17:14:03 UTC (rev 11329)
@@ -18,7 +18,7 @@
import org.drools.rule.Pattern;
import org.drools.rule.Declaration;
import org.drools.rule.Package;
-import org.drools.rule.builder.BuildContext;
+import org.drools.rule.builder.RuleBuildContext;
import org.drools.spi.PatternExtractor;
import org.drools.spi.DeclarationScopeResolver;
import org.drools.spi.ObjectType;
@@ -56,7 +56,6 @@
final MVELConsequenceBuilder builder = new MVELConsequenceBuilder();
builder.build( context,
- null,
ruleDescr );
final RuleBase ruleBase = RuleBaseFactory.newRuleBase();
@@ -97,7 +96,7 @@
}
}
- public static class InstrumentedBuildContent extends BuildContext {
+ public static class InstrumentedBuildContent extends RuleBuildContext {
private DeclarationScopeResolver declarationScopeResolver;
public InstrumentedBuildContent(final Package pkg,
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELEvalBuilderTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELEvalBuilderTest.java 2007-04-25 17:13:42 UTC (rev 11328)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELEvalBuilderTest.java 2007-04-25 17:14:03 UTC (rev 11329)
@@ -19,7 +19,7 @@
import org.drools.rule.Declaration;
import org.drools.rule.EvalCondition;
import org.drools.rule.Package;
-import org.drools.rule.builder.BuildContext;
+import org.drools.rule.builder.RuleBuildContext;
import org.drools.rule.builder.dialect.mvel.MVELEvalBuilder;
import org.drools.spi.DeclarationScopeResolver;
import org.drools.spi.FieldExtractor;
@@ -34,15 +34,15 @@
final RuleDescr ruleDescr = new RuleDescr( "rule 1" );
final InstrumentedBuildContent context = new InstrumentedBuildContent( pkg,
- ruleDescr );
+ ruleDescr );
final InstrumentedDeclarationScopeResolver declarationResolver = new InstrumentedDeclarationScopeResolver();
final FieldExtractor extractor = new ClassFieldExtractor( Cheese.class,
"price" );
final Pattern pattern = new Pattern( 0,
- new ClassObjectType( int.class ) );
+ new ClassObjectType( int.class ) );
final Declaration declaration = new Declaration( "a",
- extractor,
- pattern );
+ extractor,
+ pattern );
final Map map = new HashMap();
map.put( "a",
declaration );
@@ -54,15 +54,13 @@
final MVELEvalBuilder builder = new MVELEvalBuilder();
final EvalCondition eval = (EvalCondition) builder.build( context,
- null,
- null,
- evalDescr );
+ evalDescr );
final RuleBase ruleBase = RuleBaseFactory.newRuleBase();
final WorkingMemory wm = ruleBase.newStatefulSession();
final Cheese cheddar = new Cheese( "cheddar",
- 10 );
+ 10 );
final InternalFactHandle f0 = (InternalFactHandle) wm.assertObject( cheddar );
final ReteTuple tuple = new ReteTuple( f0 );
@@ -92,7 +90,7 @@
}
}
- public static class InstrumentedBuildContent extends BuildContext {
+ public static class InstrumentedBuildContent extends RuleBuildContext {
private DeclarationScopeResolver declarationScopeResolver;
public InstrumentedBuildContent(final Package pkg,
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELPredicateBuilderTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELPredicateBuilderTest.java 2007-04-25 17:13:42 UTC (rev 11328)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELPredicateBuilderTest.java 2007-04-25 17:14:03 UTC (rev 11329)
@@ -22,8 +22,7 @@
import org.drools.rule.Package;
import org.drools.rule.PredicateConstraint;
import org.drools.rule.PredicateConstraint.PredicateContextEntry;
-import org.drools.rule.builder.BuildContext;
-import org.drools.rule.builder.dialect.java.BuildUtils;
+import org.drools.rule.builder.RuleBuildContext;
import org.drools.rule.builder.dialect.java.DeclarationTypeFixer;
import org.drools.rule.builder.dialect.java.JavaExprAnalyzer;
import org.drools.rule.builder.dialect.java.KnowledgeHelperFixer;
@@ -40,22 +39,22 @@
final RuleDescr ruleDescr = new RuleDescr( "rule 1" );
final InstrumentedBuildContent context = new InstrumentedBuildContent( pkg,
- ruleDescr );
+ ruleDescr );
final InstrumentedDeclarationScopeResolver declarationResolver = new InstrumentedDeclarationScopeResolver();
final FieldExtractor extractor = new ClassFieldExtractor( Cheese.class,
"price" );
final Pattern patternA = new Pattern( 0,
- new ClassObjectType( int.class ) );
+ new ClassObjectType( int.class ) );
final Pattern patternB = new Pattern( 1,
- new ClassObjectType( int.class ) );
+ new ClassObjectType( int.class ) );
final Declaration a = new Declaration( "a",
- extractor,
- patternA );
+ extractor,
+ patternA );
final Declaration b = new Declaration( "b",
- extractor,
- patternB );
+ extractor,
+ patternB );
final Map map = new HashMap();
map.put( "a",
@@ -80,15 +79,7 @@
final PredicateConstraint predicate = new PredicateConstraint( null,
localDeclarations );
- final BuildUtils utils = new BuildUtils( new KnowledgeHelperFixer(),
- new DeclarationTypeFixer(),
- new JavaExprAnalyzer(),
- null,
- null,
- null );
-
builder.build( context,
- utils,
usedIdentifiers,
previousDeclarations,
localDeclarations,
@@ -99,10 +90,10 @@
final InternalWorkingMemory wm = (InternalWorkingMemory) ruleBase.newStatefulSession();
final Cheese stilton = new Cheese( "stilton",
- 10 );
+ 10 );
final Cheese cheddar = new Cheese( "cheddar",
- 10 );
+ 10 );
final InternalFactHandle f0 = (InternalFactHandle) wm.assertObject( cheddar );
final ReteTuple tuple = new ReteTuple( f0 );
@@ -136,7 +127,7 @@
}
}
- public static class InstrumentedBuildContent extends BuildContext {
+ public static class InstrumentedBuildContent extends RuleBuildContext {
private DeclarationScopeResolver declarationScopeResolver;
public InstrumentedBuildContent(final Package pkg,
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELReturnValueBuilderTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELReturnValueBuilderTest.java 2007-04-25 17:13:42 UTC (rev 11328)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELReturnValueBuilderTest.java 2007-04-25 17:14:03 UTC (rev 11329)
@@ -24,8 +24,7 @@
import org.drools.rule.Package;
import org.drools.rule.ReturnValueRestriction;
import org.drools.rule.PredicateConstraint.PredicateContextEntry;
-import org.drools.rule.builder.BuildContext;
-import org.drools.rule.builder.dialect.java.BuildUtils;
+import org.drools.rule.builder.RuleBuildContext;
import org.drools.rule.builder.dialect.java.DeclarationTypeFixer;
import org.drools.rule.builder.dialect.java.JavaExprAnalyzer;
import org.drools.rule.builder.dialect.java.KnowledgeHelperFixer;
@@ -42,22 +41,22 @@
final RuleDescr ruleDescr = new RuleDescr( "rule 1" );
final InstrumentedBuildContent context = new InstrumentedBuildContent( pkg,
- ruleDescr );
+ ruleDescr );
final InstrumentedDeclarationScopeResolver declarationResolver = new InstrumentedDeclarationScopeResolver();
final FieldExtractor extractor = new ClassFieldExtractor( Cheese.class,
"price" );
final Pattern patternA = new Pattern( 0,
- new ClassObjectType( int.class ) );
+ new ClassObjectType( int.class ) );
final Pattern patternB = new Pattern( 1,
- new ClassObjectType( int.class ) );
+ new ClassObjectType( int.class ) );
final Declaration a = new Declaration( "a",
- extractor,
- patternA );
+ extractor,
+ patternA );
final Declaration b = new Declaration( "b",
- extractor,
- patternB );
+ extractor,
+ patternB );
final Map map = new HashMap();
map.put( "a",
@@ -86,15 +85,7 @@
requiredGlobals,
ValueType.PINTEGER_TYPE.getEvaluator( Operator.EQUAL ) );
- final BuildUtils utils = new BuildUtils( new KnowledgeHelperFixer(),
- new DeclarationTypeFixer(),
- new JavaExprAnalyzer(),
- null,
- null,
- null );
-
builder.build( context,
- utils,
usedIdentifiers,
previousDeclarations,
localDeclarations,
@@ -105,10 +96,10 @@
final InternalWorkingMemory wm = (InternalWorkingMemory) ruleBase.newStatefulSession();
final Cheese stilton = new Cheese( "stilton",
- 10 );
+ 10 );
final Cheese cheddar = new Cheese( "cheddar",
- 10 );
+ 10 );
final InternalFactHandle f0 = (InternalFactHandle) wm.assertObject( cheddar );
ReteTuple tuple = new ReteTuple( f0 );
@@ -120,7 +111,7 @@
predicateContext.leftTuple = tuple;
final Cheese brie = new Cheese( "brie",
- 20 );
+ 20 );
assertTrue( returnValue.isAllowed( extractor,
brie,
tuple,
@@ -149,7 +140,7 @@
}
}
- public static class InstrumentedBuildContent extends BuildContext {
+ public static class InstrumentedBuildContent extends RuleBuildContext {
private DeclarationScopeResolver declarationScopeResolver;
public InstrumentedBuildContent(final Package pkg,
More information about the jboss-svn-commits
mailing list