[jboss-svn-commits] JBL Code SVN: r13515 - in labs/jbossrules/trunk/drools-compiler/src: main/java/org/drools/rule/builder and 7 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Sat Jul 14 19:55:04 EDT 2007
Author: mark.proctor at jboss.com
Date: 2007-07-14 19:55:03 -0400 (Sat, 14 Jul 2007)
New Revision: 13515
Added:
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/Dialect.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/DialectConfiguration.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaDialectConfiguration.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELDialectConfiguration.java
Removed:
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/Dialect.java
Modified:
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/DialectRegistry.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/PackageBuilder.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/PackageBuilderConfiguration.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/RuleBuildContext.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/JavaAnalysisResult.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/mvel/MVELAccumulateBuilder.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELAnalysisResult.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELConsequenceBuilder.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELDialect.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELEvalBuilder.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELFromBuilder.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELPredicateBuilder.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELReturnValueBuilder.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELSalienceBuilder.java
labs/jbossrules/trunk/drools-compiler/src/main/resources/META-INF/drools.default.packagebuilder.conf
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/compiler/Java5Test.java
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/compiler/PackageBuilderConfigurationTest.java
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/compiler/PackageBuilderTest.java
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/java/JavaAccumulateBuilderTest.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/InstrumentedBuildContent.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
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELSalienceBuilderTest.java
Log:
JBRULES-1010 pluggeable Dialect Configuration.
Copied: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/Dialect.java (from rev 13482, labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/Dialect.java)
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/Dialect.java (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/Dialect.java 2007-07-14 23:55:03 UTC (rev 13515)
@@ -0,0 +1,119 @@
+package org.drools.compiler;
+
+import java.util.List;
+import java.util.Map;
+
+import org.drools.base.ClassFieldExtractorCache;
+import org.drools.base.TypeResolver;
+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.builder.AccumulateBuilder;
+import org.drools.rule.builder.ConsequenceBuilder;
+import org.drools.rule.builder.FromBuilder;
+import org.drools.rule.builder.PatternBuilder;
+import org.drools.rule.builder.PredicateBuilder;
+import org.drools.rule.builder.QueryBuilder;
+import org.drools.rule.builder.ReturnValueBuilder;
+import org.drools.rule.builder.RuleBuildContext;
+import org.drools.rule.builder.RuleClassBuilder;
+import org.drools.rule.builder.RuleConditionBuilder;
+import org.drools.rule.builder.SalienceBuilder;
+
+public interface Dialect {
+ void init(PackageBuilder builder);
+
+ // this is needed because some dialects use other dialects
+ // to build complex expressions. Example: java dialect uses MVEL
+ // to execute complex expressions
+ String getExpressionDialectName();
+
+ Map getBuilders();
+
+ TypeResolver getTypeResolver();
+
+ ClassFieldExtractorCache getClassFieldExtractorCache();
+
+ SalienceBuilder getSalienceBuilder();
+
+ PatternBuilder getPatternBuilder();
+
+ QueryBuilder getQueryBuilder();
+
+ RuleConditionBuilder getEvalBuilder();
+
+ AccumulateBuilder getAccumulateBuilder();
+
+ PredicateBuilder getPredicateBuilder();
+
+ ReturnValueBuilder getReturnValueBuilder();
+
+ ConsequenceBuilder getConsequenceBuilder();
+
+ RuleClassBuilder getRuleClassBuilder();
+
+ FromBuilder getFromBuilder();
+
+ RuleConditionBuilder getBuilder(Class clazz);
+
+ AnalysisResult analyzeExpression(final RuleBuildContext context,
+ final BaseDescr descr,
+ final Object content);
+
+ AnalysisResult analyzeBlock(final RuleBuildContext context,
+ final BaseDescr descr,
+ final String text);
+
+ void compileAll();
+
+ void addRule(final RuleBuildContext context);
+
+ void addFunction(final FunctionDescr functionDescr,
+ TypeResolver typeResolver);
+
+ public void addImport(String importEntry);
+
+ public void addStaticImport(String importEntry);
+
+ List getResults();
+
+ void init(Package pkg);
+
+ void init(RuleDescr ruleDescr);
+
+ /**
+ * An interface with the results from the expression/block analysis
+ *
+ * @author etirelli
+ */
+ public static interface AnalysisResult {
+
+ /**
+ * Returns the list<String> of all used identifiers
+ * @return
+ */
+ public List getIdentifiers();
+
+ /**
+ * Returns the array of lists<String> of bound identifiers
+ * @return
+ */
+ public List[] getBoundIdentifiers();
+
+ /**
+ * Returns the list<String> of not bounded identifiers
+ * @return
+ */
+ public List getNotBoundedIdentifiers();
+
+ /**
+ * Returns the list<String> of declared local variables
+ *
+ * @return
+ */
+ public List getLocalVariables();
+
+ }
+
+}
Added: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/DialectConfiguration.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/DialectConfiguration.java (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/DialectConfiguration.java 2007-07-14 23:55:03 UTC (rev 13515)
@@ -0,0 +1,10 @@
+package org.drools.compiler;
+
+public interface DialectConfiguration {
+
+ public void init(PackageBuilderConfiguration configuration);
+
+ public Dialect getDialect();
+
+ public PackageBuilderConfiguration getPackageBuilderConfiguration();
+}
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/DialectRegistry.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/DialectRegistry.java 2007-07-14 23:52:32 UTC (rev 13514)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/DialectRegistry.java 2007-07-14 23:55:03 UTC (rev 13515)
@@ -6,7 +6,6 @@
import java.util.List;
import java.util.Map;
-import org.drools.rule.builder.Dialect;
public class DialectRegistry {
private Map map;
@@ -15,20 +14,27 @@
this.map = new HashMap();
}
- public void addDialect(final String name,
- final Dialect dialect) {
+ public void addDialectConfiguration(final String name,
+ final DialectConfiguration dialect) {
this.map.put( name,
dialect );
}
- public Dialect getDialect(final String name) {
- return (Dialect) this.map.get( name );
+ public DialectConfiguration getDialectConfiguration(final String name) {
+ return (DialectConfiguration) this.map.get( name );
}
+ public void initAll(PackageBuilder builder) {
+ for ( Iterator it = this.map.values().iterator(); it.hasNext(); ) {
+ DialectConfiguration dialect = ( DialectConfiguration ) it.next();
+ dialect.getDialect().init( builder );
+ }
+ }
+
public void compileAll() {
for ( Iterator it = this.map.values().iterator(); it.hasNext(); ) {
- Dialect dialect = ( Dialect ) it.next();
- dialect.compileAll();
+ DialectConfiguration dialect = ( DialectConfiguration ) it.next();
+ dialect.getDialect().compileAll();
}
}
@@ -41,23 +47,26 @@
list = new ArrayList();
}
for ( Iterator it = this.map.values().iterator(); it.hasNext(); ) {
- Dialect dialect = ( Dialect ) it.next();
- list.addAll( dialect.getResults() );
+ DialectConfiguration dialect = ( DialectConfiguration ) it.next();
+ List results = dialect.getDialect().getResults();
+ if ( results != null ) {
+ list.addAll( results );
+ }
}
return list;
}
public void addImport(String importEntry) {
for ( Iterator it = this.map.values().iterator(); it.hasNext(); ) {
- Dialect dialect = ( Dialect ) it.next();
- dialect.addImport( importEntry );
+ DialectConfiguration dialect = ( DialectConfiguration ) it.next();
+ dialect.getDialect().addImport( importEntry );
}
}
public void addStaticImport(String staticImportEntry) {
for ( Iterator it = this.map.values().iterator(); it.hasNext(); ) {
- Dialect dialect = ( Dialect ) it.next();
- dialect.addStaticImport( staticImportEntry );
+ DialectConfiguration dialect = ( DialectConfiguration ) it.next();
+ dialect.getDialect().addStaticImport( staticImportEntry );
}
}
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/PackageBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/PackageBuilder.java 2007-07-14 23:52:32 UTC (rev 13514)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/PackageBuilder.java 2007-07-14 23:55:03 UTC (rev 13515)
@@ -44,7 +44,6 @@
import org.drools.lang.descr.RuleDescr;
import org.drools.rule.Package;
import org.drools.rule.Rule;
-import org.drools.rule.builder.Dialect;
import org.drools.rule.builder.RuleBuildContext;
import org.drools.rule.builder.RuleBuilder;
import org.drools.ruleflow.common.core.Process;
@@ -72,7 +71,7 @@
private Dialect dialect;
- private DialectRegistry dialects;
+// private DialectRegistry dialects;
private ProcessBuilder processBuilder;
@@ -126,9 +125,13 @@
this.typeResolver = new ClassTypeResolver( new ArrayList(),
this.configuration.getClassLoader() );
}
+ this.configuration.getDialectRegistry().initAll( this );
+ if ( this.pkg != null ) {
+ initDialectPackage( pkg );
+ }
+
+ this.dialect = this.configuration.getDefaultDialect();
- this.dialects = configuration.buildDialectRegistry( this );
- this.dialect = this.dialects.getDialect( configuration.getDefaultDialect() );
}
/**
@@ -226,18 +229,15 @@
// The Package does not have a default dialect, so set it
if ( dialectName == null && this.dialect == null ) {
- dialectName = configuration.getDefaultDialect();
- this.dialect = this.dialects.getDialect( dialectName );
+ this.dialect = this.configuration.getDefaultDialect();
}
if ( dialectName != null ) {
- this.dialect = this.dialects.getDialect( dialectName );
+ this.dialect = this.configuration.getDialectRegistry().getDialectConfiguration( dialectName ).getDialect();
} else if ( this.dialect == null ) {
- this.dialect = this.dialects.getDialect( configuration.getDefaultDialect() );
+ this.dialect = this.configuration.getDefaultDialect();
}
-
-
-
+
if ( this.pkg != null ) {
// mergePackage( packageDescr ) ;
mergePackage( this.pkg,
@@ -273,8 +273,8 @@
}
}
- this.dialects.compileAll();
- this.results = this.dialects.addResults( this.results );
+ this.configuration.getDialectRegistry().compileAll();
+ this.results = this.configuration.getDialectRegistry().addResults( this.results );
}
private void validatePackageName(final PackageDescr packageDescr) {
@@ -308,16 +308,21 @@
final Package pkg = new Package( packageDescr.getName(),
this.configuration.getClassLoader() );
- for ( Iterator it = this.dialects.iterator(); it.hasNext(); ) {
- Dialect dialect = ( Dialect ) it.next();
- dialect.init( pkg );
- }
+ initDialectPackage( pkg );
mergePackage( pkg,
packageDescr );
return pkg;
}
+
+ private void initDialectPackage(Package pkg) {
+ for ( Iterator it = this.configuration.getDialectRegistry().iterator(); it.hasNext(); ) {
+ Dialect dialect = (( DialectConfiguration ) it.next()).getDialect();
+ dialect.init( pkg );
+ }
+
+ }
private void mergePackage(final Package pkg,
final PackageDescr packageDescr) {
@@ -332,12 +337,12 @@
String importEntry = ((ImportDescr) it.next()).getTarget();
pkg.addImport( importEntry );
this.typeResolver.addImport( importEntry );
- this.dialects.addImport( importEntry );
+ this.configuration.getDialectRegistry().addImport( importEntry );
}
for ( final Iterator it = packageDescr.getFunctionImports().iterator(); it.hasNext(); ) {
String importEntry = ((FunctionImportDescr) it.next()).getTarget();
- this.dialects.addStaticImport( importEntry );
+ this.configuration.getDialectRegistry().addStaticImport( importEntry );
pkg.addStaticImport( importEntry );
}
@@ -399,7 +404,7 @@
RuleBuildContext context = new RuleBuildContext( this.configuration,
pkg,
ruleDescr,
- this.dialects,
+ this.configuration.getDialectRegistry(),
this.dialect );
this.builder.build( context );
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/PackageBuilderConfiguration.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/PackageBuilderConfiguration.java 2007-07-14 23:52:32 UTC (rev 13514)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/PackageBuilderConfiguration.java 2007-07-14 23:55:03 UTC (rev 13515)
@@ -27,7 +27,6 @@
import org.drools.RuntimeDroolsException;
import org.drools.base.accumulators.AccumulateFunction;
-import org.drools.rule.builder.Dialect;
import org.drools.util.ChainedProperties;
/**
@@ -44,22 +43,18 @@
* system property "drools.compiler.lnglevel". Valid values are 1.4, 1.5 and 1.6.
*/
public class PackageBuilderConfiguration {
- public static final int ECLIPSE = 0;
- public static final int JANINO = 1;
- public static final String[] LANGUAGE_LEVELS = new String[]{"1.4", "1.5", "1.6"};
private static final String ACCUMULATE_FUNCTION_PREFIX = "drools.accumulate.function.";
private Map dialects;
+
+ private DialectRegistry dialectRegistry;
private String defaultDialect;
- private int compiler;
-
private ClassLoader classLoader;
- private String languageLevel;
private ChainedProperties chainedProperties;
@@ -105,41 +100,24 @@
if ( properties != null ) {
this.chainedProperties.addProperties( properties );
- }
+ }
- setJavaLanguageLevel( getDefaultLanguageLevel() );
-
- setCompiler( getDefaultCompiler() );
-
this.dialects = new HashMap();
this.chainedProperties.mapStartsWith( this.dialects,
- "drools.dialect" );
+ "drools.dialect",
+ false );
setDefaultDialect( (String) this.dialects.remove( "drools.dialect.default" ) );
+
+ this.dialectRegistry = buildDialectRegistry( );
buildAccumulateFunctionsMap();
}
-
- public int getCompiler() {
- return this.compiler;
+
+ public ChainedProperties getChainedProperties() {
+ return this.chainedProperties;
}
- public String getJavaLanguageLevel() {
- return this.languageLevel;
- }
-
- /**
- * You cannot set language level below 1.5, as we need static imports, 1.5 is now the default.
- * @param level
- */
- public void setJavaLanguageLevel(final String languageLevel) {
- if ( Arrays.binarySearch( LANGUAGE_LEVELS,
- languageLevel ) < 0 ) {
- throw new RuntimeDroolsException( "value '" + languageLevel + "' is not a valid language level" );
- }
- this.languageLevel = languageLevel;
- }
-
- public DialectRegistry buildDialectRegistry(PackageBuilder packageBuilder) {
+ public DialectRegistry buildDialectRegistry() {
DialectRegistry registry = new DialectRegistry();
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
for ( Iterator it = this.dialects.entrySet().iterator(); it.hasNext(); ) {
@@ -149,40 +127,37 @@
String dialectClass = (String) entry.getValue();
try {
Class cls = classLoader.loadClass( dialectClass );
- Constructor cons = cls.getConstructor( new Class[]{PackageBuilder.class} );
- registry.addDialect( dialectName,
- (Dialect) cons.newInstance( new Object[]{packageBuilder} ) );
+ DialectConfiguration dialectConf = ( DialectConfiguration ) cls.newInstance();
+ dialectConf.init( this );
+ registry.addDialectConfiguration( dialectName,
+ dialectConf );
} catch ( Exception e ) {
- throw new RuntimeDroolsException( "Unable to load dialect '" + dialectClass + ":" + dialectName + "'" );
+ throw new RuntimeDroolsException( "Unable to load dialect '" + dialectClass + ":" + dialectName + "'", e );
}
}
return registry;
}
+
+ public DialectRegistry getDialectRegistry() {
+ return this.dialectRegistry;
+ }
- public String getDefaultDialect() {
- return this.defaultDialect;
+ public Dialect getDefaultDialect() {
+ return this.dialectRegistry.getDialectConfiguration( this.defaultDialect ).getDialect();
}
public void setDefaultDialect(String defaultDialect) {
this.defaultDialect = defaultDialect;
}
-
- /**
- * Set the compiler to be used when building the rules semantic code blocks.
- * This overrides the default, and even what was set as a system property.
- */
- public void setCompiler(final int compiler) {
- switch ( compiler ) {
- case PackageBuilderConfiguration.ECLIPSE :
- this.compiler = PackageBuilderConfiguration.ECLIPSE;
- break;
- case PackageBuilderConfiguration.JANINO :
- this.compiler = PackageBuilderConfiguration.JANINO;
- break;
- default :
- throw new RuntimeDroolsException( "value '" + compiler + "' is not a valid compiler" );
- }
+
+ public DialectConfiguration getDialectConfiguration(String name) {
+ return ( DialectConfiguration ) this.dialectRegistry.getDialectConfiguration( name );
}
+
+ public void setDialectConfiguration(String name, DialectConfiguration configuration) {
+ this.dialects.put( name,
+ configuration );
+ }
public ClassLoader getClassLoader() {
return this.classLoader;
@@ -195,59 +170,12 @@
}
}
- /**
- * This will attempt to read the System property to work out what default to set.
- * This should only be done once when the class is loaded. After that point, you will have
- * to programmatically override it.
- */
- private int getDefaultCompiler() {
- try {
- final String prop = this.chainedProperties.getProperty( "drools.compiler",
- "ECLIPSE" );
- if ( prop.equals( "ECLIPSE".intern() ) ) {
- return PackageBuilderConfiguration.ECLIPSE;
- } else if ( prop.equals( "JANINO" ) ) {
- return PackageBuilderConfiguration.JANINO;
- } else {
- System.err.println( "Drools config: unable to use the drools.compiler property. Using default. It was set to:" + prop );
- return PackageBuilderConfiguration.ECLIPSE;
- }
- } catch ( final SecurityException e ) {
- System.err.println( "Drools config: unable to read the drools.compiler property. Using default." );
- return PackageBuilderConfiguration.ECLIPSE;
- }
- }
-
- private String getDefaultLanguageLevel() {
- String level = this.chainedProperties.getProperty( "drools.compiler.lnglevel",
- null );
-
- if ( level == null ) {
- String version = System.getProperty( "java.version" );
- if ( version.startsWith( "1.4" ) ) {
- level = "1.4";
- } else if ( version.startsWith( "1.5" ) ) {
- level = "1.5";
- } else if ( version.startsWith( "1.6" ) ) {
- level = "1.6";
- } else {
- level = "1.4";
- }
- }
-
- if ( Arrays.binarySearch( LANGUAGE_LEVELS,
- level ) < 0 ) {
- throw new RuntimeDroolsException( "value '" + level + "' is not a valid language level" );
- }
-
- return level;
- }
-
private void buildAccumulateFunctionsMap() {
this.accumulateFunctions = new HashMap();
Map temp = new HashMap();
this.chainedProperties.mapStartsWith( temp,
- ACCUMULATE_FUNCTION_PREFIX );
+ ACCUMULATE_FUNCTION_PREFIX,
+ true );
for ( Iterator it = temp.entrySet().iterator(); it.hasNext(); ) {
Map.Entry entry = (Map.Entry) it.next();
String identifier = ((String) entry.getKey()).trim().substring( ACCUMULATE_FUNCTION_PREFIX.length() );
Deleted: 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-07-14 23:52:32 UTC (rev 13514)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/Dialect.java 2007-07-14 23:55:03 UTC (rev 13515)
@@ -1,106 +0,0 @@
-package org.drools.rule.builder;
-
-import java.util.List;
-import java.util.Map;
-
-import org.drools.base.ClassFieldExtractorCache;
-import org.drools.base.TypeResolver;
-import org.drools.lang.descr.BaseDescr;
-import org.drools.lang.descr.FunctionDescr;
-import org.drools.lang.descr.RuleDescr;
-import org.drools.rule.Package;
-
-public interface Dialect {
- // this is needed because some dialects use other dialects
- // to build complex expressions. Example: java dialect uses MVEL
- // to execute complex expressions
- String getExpressionDialectName();
-
- Map getBuilders();
-
- TypeResolver getTypeResolver();
-
- ClassFieldExtractorCache getClassFieldExtractorCache();
-
- SalienceBuilder getSalienceBuilder();
-
- PatternBuilder getPatternBuilder();
-
- QueryBuilder getQueryBuilder();
-
- RuleConditionBuilder getEvalBuilder();
-
- AccumulateBuilder getAccumulateBuilder();
-
- PredicateBuilder getPredicateBuilder();
-
- ReturnValueBuilder getReturnValueBuilder();
-
- ConsequenceBuilder getConsequenceBuilder();
-
- RuleClassBuilder getRuleClassBuilder();
-
- FromBuilder getFromBuilder();
-
- RuleConditionBuilder getBuilder(Class clazz);
-
- AnalysisResult analyzeExpression(final RuleBuildContext context,
- final BaseDescr descr,
- final Object content);
-
- AnalysisResult analyzeBlock(final RuleBuildContext context,
- final BaseDescr descr,
- final String text);
-
- void compileAll();
-
- void addRule(final RuleBuildContext context);
-
- void addFunction(final FunctionDescr functionDescr,
- TypeResolver typeResolver);
-
- public void addImport(String importEntry);
-
- public void addStaticImport(String importEntry);
-
- List getResults();
-
- void init(Package pkg);
-
- void init(RuleDescr ruleDescr);
-
- /**
- * An interface with the results from the expression/block analysis
- *
- * @author etirelli
- */
- public static interface AnalysisResult {
-
- /**
- * Returns the list<String> of all used identifiers
- * @return
- */
- public List getIdentifiers();
-
- /**
- * Returns the array of lists<String> of bound identifiers
- * @return
- */
- public List[] getBoundIdentifiers();
-
- /**
- * Returns the list<String> of not bounded identifiers
- * @return
- */
- public List getNotBoundedIdentifiers();
-
- /**
- * Returns the list<String> of declared local variables
- *
- * @return
- */
- public List getLocalVariables();
-
- }
-
-}
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-07-14 23:52:32 UTC (rev 13514)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/PatternBuilder.java 2007-07-14 23:55:03 UTC (rev 13515)
@@ -25,6 +25,7 @@
import org.drools.base.FieldFactory;
import org.drools.base.ValueType;
import org.drools.base.evaluators.Operator;
+import org.drools.compiler.Dialect;
import org.drools.compiler.RuleError;
import org.drools.facttemplates.FactTemplate;
import org.drools.facttemplates.FactTemplateFieldExtractor;
Modified: 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/RuleBuildContext.java 2007-07-14 23:52:32 UTC (rev 13514)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/RuleBuildContext.java 2007-07-14 23:55:03 UTC (rev 13515)
@@ -25,6 +25,8 @@
import java.util.Stack;
import org.drools.base.evaluators.DateFactory;
+import org.drools.compiler.Dialect;
+import org.drools.compiler.DialectConfiguration;
import org.drools.compiler.DialectRegistry;
import org.drools.compiler.PackageBuilderConfiguration;
import org.drools.lang.descr.AttributeDescr;
@@ -119,7 +121,7 @@
ruleDescr.getAttributes() );
this.dialectRegistry = dialectRegistry;
- this.dialect = (this.rule.getDialect() != null) ? this.dialectRegistry.getDialect( this.rule.getDialect() ) : defaultDialect;
+ this.dialect = (this.rule.getDialect() != null) ? this.dialectRegistry.getDialectConfiguration( this.rule.getDialect() ).getDialect() : defaultDialect;
getDialect().init( ruleDescr );
}
@@ -136,7 +138,7 @@
}
public Dialect getDialect(String dialectName) {
- return (Dialect) this.dialectRegistry.getDialect( dialectName );
+ return ( (DialectConfiguration) this.dialectRegistry.getDialectConfiguration( dialectName ) ).getDialect();
}
/**
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-07-14 23:52:32 UTC (rev 13514)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaAccumulateBuilder.java 2007-07-14 23:55:03 UTC (rev 13515)
@@ -25,6 +25,7 @@
import org.drools.base.accumulators.AccumulateFunction;
import org.drools.base.accumulators.JavaAccumulatorFunctionExecutor;
+import org.drools.compiler.Dialect;
import org.drools.lang.descr.AccumulateDescr;
import org.drools.lang.descr.BaseDescr;
import org.drools.lang.descr.PatternDescr;
@@ -33,7 +34,6 @@
import org.drools.rule.Pattern;
import org.drools.rule.RuleConditionElement;
import org.drools.rule.builder.AccumulateBuilder;
-import org.drools.rule.builder.Dialect;
import org.drools.rule.builder.PatternBuilder;
import org.drools.rule.builder.RuleBuildContext;
import org.drools.rule.builder.dialect.java.parser.JavaLocalDeclarationDescr;
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaAnalysisResult.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaAnalysisResult.java 2007-07-14 23:52:32 UTC (rev 13514)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaAnalysisResult.java 2007-07-14 23:55:03 UTC (rev 13515)
@@ -22,7 +22,7 @@
import java.util.List;
import java.util.Map;
-import org.drools.rule.builder.Dialect.AnalysisResult;
+import org.drools.compiler.Dialect.AnalysisResult;
import org.drools.rule.builder.dialect.java.parser.JavaLocalDeclarationDescr;
/**
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-07-14 23:52:32 UTC (rev 13514)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaConsequenceBuilder.java 2007-07-14 23:55:03 UTC (rev 13515)
@@ -20,11 +20,11 @@
import java.util.List;
import java.util.Map;
+import org.drools.compiler.Dialect;
import org.drools.compiler.RuleError;
import org.drools.lang.descr.RuleDescr;
import org.drools.rule.Declaration;
import org.drools.rule.builder.ConsequenceBuilder;
-import org.drools.rule.builder.Dialect;
import org.drools.rule.builder.RuleBuildContext;
import org.drools.spi.PatternExtractor;
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-07-14 23:52:32 UTC (rev 13514)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaDialect.java 2007-07-14 23:55:03 UTC (rev 13515)
@@ -17,6 +17,7 @@
import org.drools.commons.jci.problems.CompilationProblem;
import org.drools.commons.jci.readers.MemoryResourceReader;
import org.drools.commons.jci.readers.ResourceReader;
+import org.drools.compiler.Dialect;
import org.drools.compiler.PackageBuilder;
import org.drools.compiler.PackageBuilderConfiguration;
import org.drools.compiler.RuleError;
@@ -44,7 +45,6 @@
import org.drools.rule.builder.AccumulateBuilder;
import org.drools.rule.builder.CollectBuilder;
import org.drools.rule.builder.ConsequenceBuilder;
-import org.drools.rule.builder.Dialect;
import org.drools.rule.builder.ForallBuilder;
import org.drools.rule.builder.FromBuilder;
import org.drools.rule.builder.FunctionBuilder;
@@ -79,11 +79,11 @@
private final JavaFunctionBuilder function = new JavaFunctionBuilder();
//
- private final KnowledgeHelperFixer knowledgeHelperFixer;
- private final DeclarationTypeFixer typeFixer;
- private final JavaExprAnalyzer analyzer;
+ private KnowledgeHelperFixer knowledgeHelperFixer;
+ private DeclarationTypeFixer typeFixer;
+ private JavaExprAnalyzer analyzer;
- private PackageBuilderConfiguration configuration;
+ private JavaDialectConfiguration configuration;
private Package pkg;
private JavaCompiler compiler;
@@ -96,15 +96,19 @@
// the class name for the rule
private String ruleClass;
- private final TypeResolver typeResolver;
- private final ClassFieldExtractorCache classFieldExtractorCache;
+ private TypeResolver typeResolver;
+ private ClassFieldExtractorCache classFieldExtractorCache;
// a map of registered builders
private Map builders;
- public JavaDialect(final PackageBuilder builder) {
+ public JavaDialect() {
+
+ }
+
+ public void init(PackageBuilder builder) {
this.pkg = builder.getPackage();
- this.configuration = builder.getPackageBuilderConfiguration();
+ this.configuration = (JavaDialectConfiguration) builder.getPackageBuilderConfiguration().getDialectConfiguration( "java" );
this.typeResolver = builder.getTypeResolver();
this.classFieldExtractorCache = builder.getClassFieldExtractorCache();
@@ -471,11 +475,11 @@
private void loadCompiler() {
switch ( this.configuration.getCompiler() ) {
- case PackageBuilderConfiguration.JANINO : {
+ case JavaDialectConfiguration.JANINO : {
this.compiler = JavaCompilerFactory.getInstance().createCompiler( "janino" );
break;
}
- case PackageBuilderConfiguration.ECLIPSE :
+ case JavaDialectConfiguration.ECLIPSE :
default : {
this.compiler = JavaCompilerFactory.getInstance().createCompiler( "eclipse" );
JavaCompilerSettings settings = this.compiler.createDefaultSettings();
Added: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaDialectConfiguration.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaDialectConfiguration.java (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaDialectConfiguration.java 2007-07-14 23:55:03 UTC (rev 13515)
@@ -0,0 +1,134 @@
+package org.drools.rule.builder.dialect.java;
+
+import java.util.Arrays;
+import java.util.Properties;
+
+import org.drools.RuntimeDroolsException;
+import org.drools.compiler.Dialect;
+import org.drools.compiler.DialectConfiguration;
+import org.drools.compiler.PackageBuilder;
+import org.drools.compiler.PackageBuilderConfiguration;
+
+public class JavaDialectConfiguration
+ implements
+ DialectConfiguration {
+ public static final int ECLIPSE = 0;
+ public static final int JANINO = 1;
+
+ public static final String[] LANGUAGE_LEVELS = new String[]{"1.4", "1.5", "1.6"};
+
+ private String languageLevel;
+
+ private PackageBuilderConfiguration conf;
+
+ private int compiler;
+
+ private JavaDialect dialect;
+
+ public JavaDialectConfiguration() {
+ }
+
+ public void init(final PackageBuilderConfiguration conf) {
+ this.conf = conf;
+
+ setCompiler( getDefaultCompiler() );
+ setJavaLanguageLevel( getDefaultLanguageLevel() );
+ }
+
+ public PackageBuilderConfiguration getPackageBuilderConfiguration() {
+ return this.conf;
+ }
+
+ public Dialect getDialect() {
+ if ( this.dialect == null ) {
+ this.dialect = new JavaDialect();
+ }
+ return this.dialect;
+ }
+
+ public String getJavaLanguageLevel() {
+ return this.languageLevel;
+ }
+
+ /**
+ * You cannot set language level below 1.5, as we need static imports, 1.5 is now the default.
+ * @param level
+ */
+ public void setJavaLanguageLevel(final String languageLevel) {
+ if ( Arrays.binarySearch( LANGUAGE_LEVELS,
+ languageLevel ) < 0 ) {
+ throw new RuntimeDroolsException( "value '" + languageLevel + "' is not a valid language level" );
+ }
+ this.languageLevel = languageLevel;
+ }
+
+ /**
+ * Set the compiler to be used when building the rules semantic code blocks.
+ * This overrides the default, and even what was set as a system property.
+ */
+ public void setCompiler(final int compiler) {
+ switch ( compiler ) {
+ case JavaDialectConfiguration.ECLIPSE :
+ this.compiler = JavaDialectConfiguration.ECLIPSE;
+ break;
+ case JavaDialectConfiguration.JANINO :
+ this.compiler = JavaDialectConfiguration.JANINO;
+ break;
+ default :
+ throw new RuntimeDroolsException( "value '" + compiler + "' is not a valid compiler" );
+ }
+ }
+
+ public int getCompiler() {
+ return this.compiler;
+ }
+
+ /**
+ * This will attempt to read the System property to work out what default to set.
+ * This should only be done once when the class is loaded. After that point, you will have
+ * to programmatically override it.
+ */
+ private int getDefaultCompiler() {
+ try {
+ final String prop = this.conf.getChainedProperties().getProperty( "drools.dialect.java.compiler",
+ "ECLIPSE" );
+ if ( prop.equals( "ECLIPSE".intern() ) ) {
+ return JavaDialectConfiguration.ECLIPSE;
+ } else if ( prop.equals( "JANINO" ) ) {
+ return JavaDialectConfiguration.JANINO;
+ } else {
+ System.err.println( "Drools config: unable to use the drools.compiler property. Using default. It was set to:" + prop );
+ return JavaDialectConfiguration.ECLIPSE;
+ }
+ } catch ( final SecurityException e ) {
+ System.err.println( "Drools config: unable to read the drools.compiler property. Using default." );
+ return JavaDialectConfiguration.ECLIPSE;
+ }
+ }
+
+ private String getDefaultLanguageLevel() {
+ String level = this.conf.getChainedProperties().getProperty( "drools.dialect.java.compiler.lnglevel",
+ null );
+
+ if ( level == null ) {
+ String version = System.getProperty( "java.version" );
+ if ( version.startsWith( "1.4" ) ) {
+ level = "1.4";
+ } else if ( version.startsWith( "1.5" ) ) {
+ level = "1.5";
+ } else if ( version.startsWith( "1.6" ) ) {
+ level = "1.6";
+ } else {
+ level = "1.4";
+ }
+ }
+
+ if ( Arrays.binarySearch( LANGUAGE_LEVELS,
+ level ) < 0 ) {
+ throw new RuntimeDroolsException( "value '" + level + "' is not a valid language level" );
+ }
+
+ return level;
+ }
+
+}
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-07-14 23:52:32 UTC (rev 13514)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaEvalBuilder.java 2007-07-14 23:55:03 UTC (rev 13515)
@@ -19,13 +19,13 @@
import java.util.List;
import java.util.Map;
+import org.drools.compiler.Dialect;
import org.drools.lang.descr.BaseDescr;
import org.drools.lang.descr.EvalDescr;
import org.drools.rule.Declaration;
import org.drools.rule.EvalCondition;
import org.drools.rule.Pattern;
import org.drools.rule.RuleConditionElement;
-import org.drools.rule.builder.Dialect;
import org.drools.rule.builder.RuleBuildContext;
import org.drools.rule.builder.RuleConditionBuilder;
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELAccumulateBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELAccumulateBuilder.java 2007-07-14 23:52:32 UTC (rev 13514)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELAccumulateBuilder.java 2007-07-14 23:55:03 UTC (rev 13515)
@@ -24,6 +24,7 @@
import org.drools.base.accumulators.MVELAccumulatorFunctionExecutor;
import org.drools.base.mvel.DroolsMVELFactory;
import org.drools.base.mvel.MVELAccumulator;
+import org.drools.compiler.Dialect;
import org.drools.lang.descr.AccumulateDescr;
import org.drools.lang.descr.BaseDescr;
import org.drools.lang.descr.PatternDescr;
@@ -32,7 +33,6 @@
import org.drools.rule.Pattern;
import org.drools.rule.RuleConditionElement;
import org.drools.rule.builder.AccumulateBuilder;
-import org.drools.rule.builder.Dialect;
import org.drools.rule.builder.PatternBuilder;
import org.drools.rule.builder.RuleBuildContext;
import org.drools.spi.Accumulator;
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELAnalysisResult.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELAnalysisResult.java 2007-07-14 23:52:32 UTC (rev 13514)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELAnalysisResult.java 2007-07-14 23:55:03 UTC (rev 13515)
@@ -21,7 +21,7 @@
import java.util.List;
import java.util.Map;
-import org.drools.rule.builder.Dialect.AnalysisResult;
+import org.drools.compiler.Dialect.AnalysisResult;
/**
* An analysis result implementation for the MVEL dialect
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-07-14 23:52:32 UTC (rev 13514)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELConsequenceBuilder.java 2007-07-14 23:55:03 UTC (rev 13515)
@@ -7,9 +7,9 @@
import org.drools.base.mvel.DroolsMVELFactory;
import org.drools.base.mvel.DroolsMVELKnowledgeHelper;
import org.drools.base.mvel.MVELConsequence;
+import org.drools.compiler.Dialect;
import org.drools.compiler.RuleError;
import org.drools.rule.builder.ConsequenceBuilder;
-import org.drools.rule.builder.Dialect;
import org.drools.rule.builder.RuleBuildContext;
import org.drools.spi.KnowledgeHelper;
import org.mvel.ASTNode;
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELDialect.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELDialect.java 2007-07-14 23:52:32 UTC (rev 13514)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELDialect.java 2007-07-14 23:55:03 UTC (rev 13515)
@@ -14,6 +14,7 @@
import org.drools.base.TypeResolver;
import org.drools.base.mvel.DroolsMVELFactory;
import org.drools.base.mvel.DroolsMVELKnowledgeHelper;
+import org.drools.compiler.Dialect;
import org.drools.compiler.ImportError;
import org.drools.compiler.PackageBuilder;
import org.drools.compiler.PackageBuilderConfiguration;
@@ -34,7 +35,6 @@
import org.drools.rule.Package;
import org.drools.rule.builder.AccumulateBuilder;
import org.drools.rule.builder.ConsequenceBuilder;
-import org.drools.rule.builder.Dialect;
import org.drools.rule.builder.FromBuilder;
import org.drools.rule.builder.GroupElementBuilder;
import org.drools.rule.builder.PatternBuilder;
@@ -61,35 +61,35 @@
implements
Dialect {
- private final static String EXPRESSION_DIALECT_NAME = "MVEL";
+ private final static String EXPRESSION_DIALECT_NAME = "MVEL";
- private final PatternBuilder pattern = new PatternBuilder();
- private final QueryBuilder query = new QueryBuilder();
- private final MVELAccumulateBuilder accumulate = new MVELAccumulateBuilder();
- private final SalienceBuilder salience = new MVELSalienceBuilder();
- private final MVELEvalBuilder eval = new MVELEvalBuilder();
- private final MVELPredicateBuilder predicate = new MVELPredicateBuilder();
- private final MVELReturnValueBuilder returnValue = new MVELReturnValueBuilder();
- private final MVELConsequenceBuilder consequence = new MVELConsequenceBuilder();
+ private final PatternBuilder pattern = new PatternBuilder();
+ private final QueryBuilder query = new QueryBuilder();
+ private final MVELAccumulateBuilder accumulate = new MVELAccumulateBuilder();
+ private final SalienceBuilder salience = new MVELSalienceBuilder();
+ private final MVELEvalBuilder eval = new MVELEvalBuilder();
+ private final MVELPredicateBuilder predicate = new MVELPredicateBuilder();
+ private final MVELReturnValueBuilder returnValue = new MVELReturnValueBuilder();
+ private final MVELConsequenceBuilder consequence = new MVELConsequenceBuilder();
//private final JavaRuleClassBuilder rule = new JavaRuleClassBuilder();
- private final MVELFromBuilder from = new MVELFromBuilder();
+ private final MVELFromBuilder from = new MVELFromBuilder();
- private final Map interceptors;
+ private Map interceptors;
- private List results;
+ private List results;
//private final JavaFunctionBuilder function = new JavaFunctionBuilder();
- private Package pkg;
- private PackageBuilderConfiguration configuration;
- private final TypeResolver typeResolver;
- private final ClassFieldExtractorCache classFieldExtractorCache;
- private final MVELExprAnalyzer analyzer;
+ private Package pkg;
+ private MVELDialectConfiguration configuration;
+ private TypeResolver typeResolver;
+ private ClassFieldExtractorCache classFieldExtractorCache;
+ private MVELExprAnalyzer analyzer;
- private final StaticMethodImportResolverFactory staticImportFactory;
- private final ClassImportResolverFactory importFactory;
-
- private boolean strictMode;
+ private StaticMethodImportResolverFactory staticImportFactory;
+ private ClassImportResolverFactory importFactory;
+ private boolean strictMode;
+
public void addFunction(FunctionDescr functionDescr,
TypeResolver typeResolver) {
throw new UnsupportedOperationException( "MVEL does not support functions" );
@@ -99,14 +99,17 @@
// a map of registered builders
private Map builders;
- public MVELDialect(final PackageBuilder builder) {
+ public MVELDialect() {
+ }
+
+ public void init(PackageBuilder builder) {
AbstractParser.setLanguageLevel( 4 );
this.pkg = builder.getPackage();
- this.configuration = builder.getPackageBuilderConfiguration();
+ this.configuration = (MVELDialectConfiguration) builder.getPackageBuilderConfiguration().getDialectConfiguration( "mvel" );
this.typeResolver = builder.getTypeResolver();
this.classFieldExtractorCache = builder.getClassFieldExtractorCache();
- this.strictMode = true;
+ this.strictMode = this.configuration.isStrict();
this.analyzer = new MVELExprAnalyzer();
@@ -205,7 +208,7 @@
index + 1 );
try {
- Class cls = configuration.getClassLoader().loadClass( className );
+ Class cls = this.configuration.getPackageBuilderConfiguration().getClassLoader().loadClass( className );
Method[] methods = cls.getDeclaredMethods();
for ( int i = 0; i < methods.length; i++ ) {
if ( methods[i].equals( "methodName" ) ) {
@@ -226,7 +229,7 @@
public ClassImportResolverFactory getClassImportResolverFactory() {
return this.importFactory;
}
-
+
public boolean isStrictMode() {
return strictMode;
}
@@ -309,7 +312,7 @@
null );
//this.configuration.get
-
+
parserContext.setStrictTypeEnforcement( strictMode );
if ( interceptors != null ) {
parserContext.setInterceptors( interceptors );
@@ -331,24 +334,23 @@
(Class) globalTypes.get( identifier ) );
}
-
- Map mvelVars = ((MVELAnalysisResult)analysis).getMvelVariables();
+ Map mvelVars = ((MVELAnalysisResult) analysis).getMvelVariables();
if ( mvelVars != null ) {
for ( Iterator it = mvelVars.entrySet().iterator(); it.hasNext(); ) {
Entry entry = (Entry) it.next();
- parserContext.addInput( (String)entry.getKey(),
+ parserContext.addInput( (String) entry.getKey(),
(Class) entry.getValue() );
- }
+ }
}
-
+
if ( outerDeclarations != null ) {
for ( Iterator it = outerDeclarations.entrySet().iterator(); it.hasNext(); ) {
Entry entry = (Entry) it.next();
- parserContext.addInput( (String)entry.getKey(),
+ parserContext.addInput( (String) entry.getKey(),
((Declaration) entry.getValue()).getExtractor().getExtractToClass() );
}
}
-
+
parserContext.addInput( "drools",
KnowledgeHelper.class );
Added: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELDialectConfiguration.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELDialectConfiguration.java (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELDialectConfiguration.java 2007-07-14 23:55:03 UTC (rev 13515)
@@ -0,0 +1,48 @@
+package org.drools.rule.builder.dialect.mvel;
+
+import org.drools.compiler.Dialect;
+import org.drools.compiler.DialectConfiguration;
+import org.drools.compiler.PackageBuilder;
+import org.drools.compiler.PackageBuilderConfiguration;
+
+public class MVELDialectConfiguration
+ implements
+ DialectConfiguration {
+
+ private MVELDialect dialect;
+ private PackageBuilderConfiguration conf;
+
+ private boolean strict;
+
+ public Dialect getDialect() {
+ if ( this.dialect == null ) {
+ this.dialect = new MVELDialect();
+ }
+ return this.dialect;
+ }
+
+ public void init(PackageBuilderConfiguration conf) {
+ this.conf = conf;
+ setStrict( getStrict() );
+ }
+
+ public PackageBuilderConfiguration getPackageBuilderConfiguration() {
+ return this.conf;
+ }
+
+ public void setStrict(boolean strict) {
+ this.strict = strict;
+ }
+
+ public boolean isStrict() {
+ return this.strict;
+ }
+
+ private boolean getStrict() {
+ final String prop = this.conf.getChainedProperties().getProperty( "drools.dialect.mvel.strict",
+ "true" );
+ return Boolean.valueOf( prop ).booleanValue();
+
+ }
+
+}
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-07-14 23:52:32 UTC (rev 13514)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELEvalBuilder.java 2007-07-14 23:55:03 UTC (rev 13515)
@@ -23,6 +23,7 @@
import org.drools.base.mvel.DroolsMVELFactory;
import org.drools.base.mvel.MVELEvalExpression;
+import org.drools.compiler.Dialect;
import org.drools.compiler.RuleError;
import org.drools.lang.descr.BaseDescr;
import org.drools.lang.descr.EvalDescr;
@@ -30,7 +31,6 @@
import org.drools.rule.EvalCondition;
import org.drools.rule.Pattern;
import org.drools.rule.RuleConditionElement;
-import org.drools.rule.builder.Dialect;
import org.drools.rule.builder.RuleBuildContext;
import org.drools.rule.builder.RuleConditionBuilder;
import org.drools.spi.DeclarationScopeResolver;
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-07-14 23:52:32 UTC (rev 13514)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELFromBuilder.java 2007-07-14 23:55:03 UTC (rev 13515)
@@ -20,6 +20,7 @@
import org.drools.base.dataproviders.MVELDataProvider;
import org.drools.base.mvel.DroolsMVELFactory;
+import org.drools.compiler.Dialect;
import org.drools.compiler.RuleError;
import org.drools.lang.descr.AccessorDescr;
import org.drools.lang.descr.BaseDescr;
@@ -27,7 +28,6 @@
import org.drools.rule.From;
import org.drools.rule.Pattern;
import org.drools.rule.RuleConditionElement;
-import org.drools.rule.builder.Dialect;
import org.drools.rule.builder.FromBuilder;
import org.drools.rule.builder.RuleBuildContext;
import org.drools.spi.DataProvider;
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-07-14 23:52:32 UTC (rev 13514)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELPredicateBuilder.java 2007-07-14 23:55:03 UTC (rev 13515)
@@ -23,11 +23,11 @@
import org.drools.base.mvel.DroolsMVELFactory;
import org.drools.base.mvel.MVELPredicateExpression;
+import org.drools.compiler.Dialect;
import org.drools.compiler.RuleError;
import org.drools.lang.descr.PredicateDescr;
import org.drools.rule.Declaration;
import org.drools.rule.PredicateConstraint;
-import org.drools.rule.builder.Dialect;
import org.drools.rule.builder.PredicateBuilder;
import org.drools.rule.builder.RuleBuildContext;
import org.mvel.ExpressionCompiler;
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-07-14 23:52:32 UTC (rev 13514)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELReturnValueBuilder.java 2007-07-14 23:55:03 UTC (rev 13515)
@@ -23,10 +23,10 @@
import org.drools.base.mvel.DroolsMVELFactory;
import org.drools.base.mvel.MVELReturnValueExpression;
+import org.drools.compiler.Dialect;
import org.drools.lang.descr.ReturnValueRestrictionDescr;
import org.drools.rule.Declaration;
import org.drools.rule.ReturnValueRestriction;
-import org.drools.rule.builder.Dialect;
import org.drools.rule.builder.ReturnValueBuilder;
import org.drools.rule.builder.RuleBuildContext;
import org.mvel.ExpressionCompiler;
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELSalienceBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELSalienceBuilder.java 2007-07-14 23:52:32 UTC (rev 13514)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELSalienceBuilder.java 2007-07-14 23:55:03 UTC (rev 13515)
@@ -4,8 +4,8 @@
import org.drools.base.mvel.DroolsMVELFactory;
import org.drools.base.mvel.MVELSalienceExpression;
+import org.drools.compiler.Dialect;
import org.drools.compiler.RuleError;
-import org.drools.rule.builder.Dialect;
import org.drools.rule.builder.RuleBuildContext;
import org.drools.rule.builder.SalienceBuilder;
import org.mvel.ExpressionCompiler;
Modified: labs/jbossrules/trunk/drools-compiler/src/main/resources/META-INF/drools.default.packagebuilder.conf
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/resources/META-INF/drools.default.packagebuilder.conf 2007-07-14 23:52:32 UTC (rev 13514)
+++ labs/jbossrules/trunk/drools-compiler/src/main/resources/META-INF/drools.default.packagebuilder.conf 2007-07-14 23:55:03 UTC (rev 13515)
@@ -1,7 +1,10 @@
drools.dialect.default = java
-drools.dialect.java = org.drools.rule.builder.dialect.java.JavaDialect
-drools.dialect.mvel = org.drools.rule.builder.dialect.mvel.MVELDialect
-drools.compiler = ECLIPSE
+drools.dialect.java = org.drools.rule.builder.dialect.java.JavaDialectConfiguration
+drools.dialect.java.compiler = ECLIPSE
+
+drools.dialect.mvel = org.drools.rule.builder.dialect.mvel.MVELDialectConfiguration
+drools.dialect.mvel.strict = true
+
drools.accumulate.function.average = org.drools.base.accumulators.AverageAccumulateFunction
drools.accumulate.function.max = org.drools.base.accumulators.MaxAccumulateFunction
drools.accumulate.function.min = org.drools.base.accumulators.MinAccumulateFunction
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/compiler/Java5Test.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/compiler/Java5Test.java 2007-07-14 23:52:32 UTC (rev 13514)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/compiler/Java5Test.java 2007-07-14 23:55:03 UTC (rev 13515)
@@ -3,6 +3,7 @@
import java.io.InputStreamReader;
import org.drools.DroolsTestCase;
+import org.drools.rule.builder.dialect.java.JavaDialectConfiguration;
public class Java5Test extends DroolsTestCase {
@@ -15,16 +16,19 @@
return;
}
final PackageBuilderConfiguration conf = new PackageBuilderConfiguration();
- conf.setCompiler( PackageBuilderConfiguration.ECLIPSE );
- conf.setJavaLanguageLevel( "1.5" );
- final PackageBuilder builder = new PackageBuilder( conf );
+ JavaDialectConfiguration javaConf = ( JavaDialectConfiguration ) conf.getDialectConfiguration( "java" );
+ javaConf.setCompiler( JavaDialectConfiguration.ECLIPSE );
+ javaConf.setJavaLanguageLevel( "1.5" );
+
+ final PackageBuilder builder = new PackageBuilder( );
builder.addPackageFromDrl( new InputStreamReader( this.getClass().getResourceAsStream( "java5_rule.drl" ) ) );
assertFalse( builder.hasErrors() );
}
public void testJava14Defaults() throws Exception {
final PackageBuilderConfiguration conf = new PackageBuilderConfiguration();
- conf.setCompiler( PackageBuilderConfiguration.JANINO );
+ JavaDialectConfiguration javaConf = ( JavaDialectConfiguration ) conf.getDialectConfiguration( "java" );
+ javaConf.setCompiler( JavaDialectConfiguration.JANINO );
final PackageBuilder builder = new PackageBuilder( conf );
builder.addPackageFromDrl( new InputStreamReader( this.getClass().getResourceAsStream( "java5_rule.drl" ) ) );
assertTrue( builder.hasErrors() );
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/compiler/PackageBuilderConfigurationTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/compiler/PackageBuilderConfigurationTest.java 2007-07-14 23:52:32 UTC (rev 13514)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/compiler/PackageBuilderConfigurationTest.java 2007-07-14 23:55:03 UTC (rev 13515)
@@ -1,84 +1,366 @@
package org.drools.compiler;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
import java.util.Properties;
+import org.drools.EventManager;
+import org.drools.WorkingMemory;
+import org.drools.base.ClassFieldExtractorCache;
+import org.drools.base.TypeResolver;
+import org.drools.lang.descr.AndDescr;
+import org.drools.lang.descr.AttributeDescr;
+import org.drools.lang.descr.BaseDescr;
+import org.drools.lang.descr.EvalDescr;
+import org.drools.lang.descr.FunctionDescr;
+import org.drools.lang.descr.FunctionImportDescr;
+import org.drools.lang.descr.ImportDescr;
+import org.drools.lang.descr.PackageDescr;
+import org.drools.lang.descr.RuleDescr;
+import org.drools.rule.Declaration;
+import org.drools.rule.Package;
+import org.drools.rule.Pattern;
+import org.drools.rule.Rule;
+import org.drools.rule.RuleConditionElement;
+import org.drools.rule.builder.AccumulateBuilder;
+import org.drools.rule.builder.ConsequenceBuilder;
+import org.drools.rule.builder.FromBuilder;
+import org.drools.rule.builder.GroupElementBuilder;
+import org.drools.rule.builder.PatternBuilder;
+import org.drools.rule.builder.PredicateBuilder;
+import org.drools.rule.builder.QueryBuilder;
+import org.drools.rule.builder.ReturnValueBuilder;
+import org.drools.rule.builder.RuleBuildContext;
+import org.drools.rule.builder.RuleClassBuilder;
+import org.drools.rule.builder.RuleConditionBuilder;
+import org.drools.rule.builder.SalienceBuilder;
+import org.drools.rule.builder.dialect.java.JavaDialect;
+import org.drools.rule.builder.dialect.java.JavaDialectConfiguration;
+import org.drools.rule.builder.dialect.mvel.MVELDialect;
+import org.drools.spi.EvalExpression;
+import org.drools.spi.Tuple;
+
import junit.framework.TestCase;
public class PackageBuilderConfigurationTest extends TestCase {
public void testSystemProperties() {
PackageBuilderConfiguration cfg = new PackageBuilderConfiguration();
- assertEquals( PackageBuilderConfiguration.ECLIPSE,
- cfg.getCompiler() );
+ JavaDialectConfiguration javaConf = ( JavaDialectConfiguration ) cfg.getDialectConfiguration( "java" );
+ assertEquals( JavaDialectConfiguration.ECLIPSE,
+ javaConf.getCompiler() );
- System.setProperty( "drools.compiler",
+ System.setProperty( "drools.dialect.java.compiler",
"JANINO" );
cfg = new PackageBuilderConfiguration();
- assertEquals( PackageBuilderConfiguration.JANINO,
- cfg.getCompiler() );
+ javaConf = ( JavaDialectConfiguration ) cfg.getDialectConfiguration( "java" );
+ assertEquals( JavaDialectConfiguration.JANINO,
+ javaConf.getCompiler() );
- final PackageBuilderConfiguration cfg2 = new PackageBuilderConfiguration();
- assertEquals( cfg.getCompiler(),
- cfg2.getCompiler() );
+ PackageBuilderConfiguration cfg2 = new PackageBuilderConfiguration();
+ JavaDialectConfiguration javaConf2 = ( JavaDialectConfiguration ) cfg2.getDialectConfiguration( "java" );
+ assertEquals( javaConf.getCompiler(),
+ javaConf2.getCompiler() );
- System.setProperty( "drools.compiler",
+ System.setProperty( "drools.dialect.java.compiler",
"ECLIPSE" );
cfg = new PackageBuilderConfiguration();
- assertEquals( PackageBuilderConfiguration.ECLIPSE,
- cfg.getCompiler() );
+ javaConf = ( JavaDialectConfiguration ) cfg.getDialectConfiguration( "java" );
+ assertEquals( JavaDialectConfiguration.ECLIPSE,
+ javaConf.getCompiler() );
- cfg2.setCompiler( PackageBuilderConfiguration.ECLIPSE );
- assertEquals( PackageBuilderConfiguration.ECLIPSE,
- cfg2.getCompiler() );
+ javaConf2.setCompiler( JavaDialectConfiguration.ECLIPSE );
+ assertEquals( JavaDialectConfiguration.ECLIPSE,
+ javaConf2.getCompiler() );
- cfg2.setCompiler( PackageBuilderConfiguration.JANINO );
- assertEquals( PackageBuilderConfiguration.JANINO,
- cfg2.getCompiler() );
+ javaConf2.setCompiler( JavaDialectConfiguration.JANINO );
+ assertEquals( JavaDialectConfiguration.JANINO,
+ javaConf2.getCompiler() );
final PackageBuilderConfiguration cfg3 = new PackageBuilderConfiguration();
-
- assertEquals( cfg.getCompiler(),
- cfg3.getCompiler() );
+ JavaDialectConfiguration javaConf3 = ( JavaDialectConfiguration ) cfg3.getDialectConfiguration( "java" );
+ assertEquals( javaConf.getCompiler(),
+ javaConf3.getCompiler() );
- System.getProperties().remove( "drools.compiler" );
+ System.getProperties().remove( "drools.dialect.java.compiler" );
}
public void testProgrammaticProperties() {
PackageBuilderConfiguration cfg = new PackageBuilderConfiguration();
- assertEquals( "java",
- cfg.getDefaultDialect() );
+ assertTrue( cfg.getDefaultDialect() instanceof JavaDialect );
Properties properties = new Properties();
properties.setProperty( "drools.dialect.default",
- "tea" );
+ "mvel" );
PackageBuilderConfiguration cfg1 = new PackageBuilderConfiguration( properties );
- assertEquals( "tea",
- cfg1.getDefaultDialect() );
+ assertTrue( cfg1.getDefaultDialect() instanceof MVELDialect );
final PackageBuilderConfiguration cfg2 = new PackageBuilderConfiguration(properties);
- assertEquals( cfg1.getDefaultDialect(),
- cfg2.getDefaultDialect() );
+ assertEquals( cfg1.getDefaultDialect().getClass(),
+ cfg2.getDefaultDialect().getClass() );
+ }
+
+ public void testMockDialect() {
+ Package pkg = new Package("org.pkg1");
- properties = new Properties();
- properties.setProperty( "drools.dialect.default",
- "coke" );
- PackageBuilderConfiguration cfg3 = new PackageBuilderConfiguration( properties );
- assertEquals( "coke",
- cfg3.getDefaultDialect() );
+ PackageBuilderConfiguration cfg1 = new PackageBuilderConfiguration();
+ MockDialectConfiguration mockConf = new MockDialectConfiguration();
+ cfg1.getDialectRegistry().addDialectConfiguration( "mock", mockConf );
+ cfg1.setDefaultDialect( "mock" );
+
+ PackageBuilder builder = new PackageBuilder( pkg,
+ cfg1 );
+
+ MockDialect mockDialect2 = ( MockDialect ) builder.getPackageBuilderConfiguration().getDefaultDialect();
+ assertSame( mockConf.getDialect(), mockDialect2);
+
+ assertSame(builder, mockDialect2.getPackageBuilder() );
+ assertSame(pkg, mockDialect2.getPkg() );
+ assertNull( mockDialect2.getRuleDescr() );
+
+
+ RuleDescr ruleDescr = new RuleDescr("test rule");
+ ruleDescr.addAttribute( new AttributeDescr("dialect", "mock") );
+ ruleDescr.setLhs( new AndDescr() );
+ EvalDescr evalDescr = new EvalDescr();
+ ruleDescr.getLhs().addDescr( evalDescr );
- cfg2.setDefaultDialect( "orange" );
- assertEquals( "orange",
- cfg2.getDefaultDialect() );
+ PackageDescr pkgDescr = new PackageDescr("org.pkg1");
+ pkgDescr.addImport( new ImportDescr("java.util.HashMap") );
+ FunctionImportDescr functionImportDescr = new FunctionImportDescr();
+ functionImportDescr.setTarget( "System.out.println" );
+ pkgDescr.addFunctionImport( functionImportDescr );
+
+ pkgDescr.addRule( ruleDescr );
+
+ builder.addPackage( pkgDescr );
+
+ assertSame( ruleDescr, mockDialect2.getRuleDescr() );
+ assertTrue( mockDialect2.getImport().contains( "java.util.HashMap" ) );
+ assertTrue( mockDialect2.getStaticImport().contains( "System.out.println" ) );
+ assertEquals( "eval was built", evalDescr.getContent() );
+ assertEquals( "consequence was built", ruleDescr.getConsequence() );
+ assertTrue( mockDialect2.isCompileAll() );
+
+ assertNotNull( pkg.getRule( "test rule" ) );
+
+ }
+
+ public static class MockDialectConfiguration implements DialectConfiguration {
+ private MockDialect dialect = new MockDialect();
+ private PackageBuilderConfiguration conf;
- cfg2.setDefaultDialect( "lemonade" );
- assertEquals( "lemonade",
- cfg2.getDefaultDialect() );
+ public Dialect getDialect() {
+ return this.dialect;
+ }
- final PackageBuilderConfiguration cfg4 = new PackageBuilderConfiguration();
+ public PackageBuilderConfiguration getPackageBuilderConfiguration() {
+ return this.conf;
+ }
- assertEquals( cfg.getDefaultDialect(),
- cfg4.getDefaultDialect() );
+ public void init(PackageBuilderConfiguration configuration) {
+ this.conf = configuration;
+ }
}
+
+ public static class MockDialect implements Dialect {
+ private PackageBuilder builder;
+ private Package pkg;
+ private RuleDescr ruleDescr;
+ private Rule rule;
+
+ private List imports = new ArrayList();
+ private List staticImports = new ArrayList();
+
+ private boolean compileAll = false;
+
+ public void init(PackageBuilder builder) {
+ this.builder = builder;
+
+ }
+
+ public void init(Package pkg) {
+ this.pkg = pkg;
+ }
+
+ public void init(RuleDescr ruleDescr) {
+ this.ruleDescr = ruleDescr;
+ }
+
+
+ public PackageBuilder getPackageBuilder() {
+ return builder;
+ }
+
+ public Package getPkg() {
+ return pkg;
+ }
+
+ public RuleDescr getRuleDescr() {
+ return ruleDescr;
+ }
+
+ public void addFunction(FunctionDescr functionDescr,
+ TypeResolver typeResolver) {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void addImport(String importEntry) {
+ this.imports.add( importEntry );
+ }
+
+ public List getImport() {
+ return this.imports;
+ }
+
+ public void addStaticImport(String importEntry) {
+ this.imports.add( importEntry );
+ }
+
+ public List getStaticImport() {
+ return this.imports;
+ }
+
+ public void addRule(RuleBuildContext context) {
+ this.rule = context.getRule();
+ }
+
+ public Rule getRule() {
+ return this.rule;
+ }
+
+ public AnalysisResult analyzeBlock(RuleBuildContext context,
+ BaseDescr descr,
+ String text) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public AnalysisResult analyzeExpression(RuleBuildContext context,
+ BaseDescr descr,
+ Object content) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public void compileAll() {
+ this.compileAll = true;
+ }
+
+ public boolean isCompileAll() {
+ return this.compileAll;
+ }
+
+ public AccumulateBuilder getAccumulateBuilder() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public RuleConditionBuilder getBuilder(Class clazz) {
+ if ( clazz == EvalDescr.class ) {
+ return getEvalBuilder();
+ } else if ( clazz == AndDescr.class ) {
+ return new GroupElementBuilder();
+ } else {
+ throw new RuntimeException( "clazz " + clazz + " is not yet configured " );
+ }
+ }
+
+ public Map getBuilders() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public ClassFieldExtractorCache getClassFieldExtractorCache() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public ConsequenceBuilder getConsequenceBuilder() {
+ return new MockConsequenceBuilder();
+ }
+
+ public RuleConditionBuilder getEvalBuilder() {
+ return new MockEvalBuilder();
+ }
+
+ public String getExpressionDialectName() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public FromBuilder getFromBuilder() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public PatternBuilder getPatternBuilder() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public PredicateBuilder getPredicateBuilder() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public QueryBuilder getQueryBuilder() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public List getResults() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public ReturnValueBuilder getReturnValueBuilder() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public RuleClassBuilder getRuleClassBuilder() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public SalienceBuilder getSalienceBuilder() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public TypeResolver getTypeResolver() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+ }
+
+ public static class MockEvalBuilder implements RuleConditionBuilder {
+
+ public RuleConditionElement build(RuleBuildContext context,
+ BaseDescr descr) {
+ EvalDescr evalDescr = ( EvalDescr ) descr;
+ evalDescr.setContent( "eval was built" );
+ return null;
+ }
+
+ public RuleConditionElement build(RuleBuildContext context,
+ BaseDescr descr,
+ Pattern prefixPattern) {
+ return null;
+ }
+
+ }
+
+ public static class MockConsequenceBuilder implements ConsequenceBuilder {
+
+ public void build(RuleBuildContext context) {
+ context.getRuleDescr().setConsequence( "consequence was built" );
+ }
+
+ }
}
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/compiler/PackageBuilderTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/compiler/PackageBuilderTest.java 2007-07-14 23:52:32 UTC (rev 13514)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/compiler/PackageBuilderTest.java 2007-07-14 23:55:03 UTC (rev 13515)
@@ -81,6 +81,7 @@
import org.drools.rule.ReturnValueConstraint;
import org.drools.rule.Rule;
import org.drools.rule.builder.dialect.java.JavaDialect;
+import org.drools.rule.builder.dialect.java.JavaDialectConfiguration;
import org.drools.ruleflow.common.core.Process;
import org.drools.ruleflow.core.impl.RuleFlowProcessImpl;
import org.drools.spi.Activation;
@@ -1010,7 +1011,8 @@
// test JANINO with property settings
PackageBuilderConfiguration conf = new PackageBuilderConfiguration();
- conf.setCompiler( PackageBuilderConfiguration.JANINO );
+ JavaDialectConfiguration javaConf = ( JavaDialectConfiguration ) conf.getDialectConfiguration( "java" );
+ javaConf.setCompiler( JavaDialectConfiguration.JANINO );
builder = new PackageBuilder( conf );
dialect = (JavaDialect) dialectField.get( builder );
compiler = (JavaCompiler) compilerField.get( dialect );
@@ -1019,7 +1021,8 @@
// test eclipse jdt core with property settings and default source level
conf = new PackageBuilderConfiguration();
- conf.setCompiler( PackageBuilderConfiguration.ECLIPSE );
+ javaConf = ( JavaDialectConfiguration ) conf.getDialectConfiguration( "java" );
+ javaConf.setCompiler( JavaDialectConfiguration.ECLIPSE );
builder = new PackageBuilder( conf );
dialect = (JavaDialect) dialectField.get( builder );
compiler = (JavaCompiler) compilerField.get( dialect );
@@ -1241,7 +1244,8 @@
public void testJaninoWithStaticImports() throws Exception {
PackageBuilderConfiguration cfg = new PackageBuilderConfiguration();
- cfg.setCompiler( PackageBuilderConfiguration.JANINO );
+ JavaDialectConfiguration javaConf = ( JavaDialectConfiguration ) cfg.getDialectConfiguration( "java" );
+ javaConf.setCompiler( JavaDialectConfiguration.JANINO );
PackageBuilder bldr = new PackageBuilder(cfg);
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java 2007-07-14 23:52:32 UTC (rev 13514)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java 2007-07-14 23:55:03 UTC (rev 13515)
@@ -94,6 +94,7 @@
import org.drools.rule.InvalidRulePackage;
import org.drools.rule.Package;
import org.drools.rule.Rule;
+import org.drools.rule.builder.dialect.java.JavaDialectConfiguration;
import org.drools.xml.XmlDumper;
/** Run all the tests with the ReteOO engine implementation */
@@ -642,7 +643,9 @@
public void testJaninoEval() throws Exception {
final PackageBuilderConfiguration config = new PackageBuilderConfiguration();
- config.setCompiler( PackageBuilderConfiguration.JANINO );
+ JavaDialectConfiguration javaConf = ( JavaDialectConfiguration ) config.getDialectConfiguration( "java" );
+ javaConf.setCompiler( JavaDialectConfiguration.JANINO );
+
final PackageBuilder builder = new PackageBuilder( config );
builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "eval_rule_test.drl" ) ) );
final Package pkg = builder.getPackage();
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/java/JavaAccumulateBuilderTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/java/JavaAccumulateBuilderTest.java 2007-07-14 23:52:32 UTC (rev 13514)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/java/JavaAccumulateBuilderTest.java 2007-07-14 23:55:03 UTC (rev 13515)
@@ -4,6 +4,7 @@
import junit.framework.TestCase;
+import org.drools.compiler.Dialect;
import org.drools.compiler.DialectRegistry;
import org.drools.compiler.PackageBuilder;
import org.drools.compiler.PackageBuilderConfiguration;
@@ -13,7 +14,6 @@
import org.drools.lang.descr.PatternDescr;
import org.drools.lang.descr.RuleDescr;
import org.drools.rule.Accumulate;
-import org.drools.rule.builder.Dialect;
import org.drools.rule.builder.RuleBuildContext;
public class JavaAccumulateBuilderTest extends TestCase {
@@ -43,13 +43,13 @@
accumDescr.setResultCode( "new Integer( x )" );
org.drools.rule.Package pkg = new org.drools.rule.Package( "org.drools" );
- PackageBuilder pkgBuilder = new PackageBuilder( pkg );
- DialectRegistry registry = new DialectRegistry();
- Dialect java = new JavaDialect(pkgBuilder);
- registry.addDialect( "java", java );
+ final PackageBuilder pkgBulider = new PackageBuilder(pkg);
+ final PackageBuilderConfiguration conf = pkgBulider.getPackageBuilderConfiguration();
+ Dialect dialect = pkgBulider.getPackageBuilderConfiguration().getDialectRegistry().getDialectConfiguration( "java" ).getDialect();
+
+
RuleDescr ruleDescr = new RuleDescr("test rule");
- PackageBuilderConfiguration conf = new PackageBuilderConfiguration();
- RuleBuildContext context = new RuleBuildContext( conf, pkg, ruleDescr, registry, java);
+ RuleBuildContext context = new RuleBuildContext( conf, pkg, ruleDescr, conf.getDialectRegistry(), dialect);
Accumulate accumulate = (Accumulate) builder.build( context, accumDescr );
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-07-14 23:52:32 UTC (rev 13514)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/java/RuleBuilderTest.java 2007-07-14 23:55:03 UTC (rev 13515)
@@ -27,6 +27,7 @@
import org.drools.base.ClassTypeResolver;
import org.drools.base.TypeResolver;
+import org.drools.compiler.Dialect;
import org.drools.compiler.DialectRegistry;
import org.drools.compiler.DrlParser;
import org.drools.compiler.PackageBuilder;
@@ -84,14 +85,13 @@
typeResolver.addImport( pkgDescr.getName() + ".*" );
typeResolver.addImport( "java.lang.*" );
- final RuleBuilder builder = new RuleBuilder( );
+ final RuleBuilder builder = new RuleBuilder( );
- JavaDialect dialect = new JavaDialect( new PackageBuilder(pkg) ) ;
- DialectRegistry registry = new DialectRegistry();
- registry.addDialect( "java", dialect );
+ final PackageBuilder pkgBulider = new PackageBuilder(pkg);
+ final PackageBuilderConfiguration conf = pkgBulider.getPackageBuilderConfiguration();
+ Dialect dialect = pkgBulider.getPackageBuilderConfiguration().getDialectRegistry().getDialectConfiguration( "java" ).getDialect();
- final PackageBuilderConfiguration conf = new PackageBuilderConfiguration();
- RuleBuildContext context = new RuleBuildContext(conf, pkg, ruleDescr, registry, dialect);
+ RuleBuildContext context = new RuleBuildContext(conf, pkg, ruleDescr, conf.getDialectRegistry(), dialect);
builder.build( context );
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/InstrumentedBuildContent.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/InstrumentedBuildContent.java 2007-07-14 23:52:32 UTC (rev 13514)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/InstrumentedBuildContent.java 2007-07-14 23:55:03 UTC (rev 13515)
@@ -3,11 +3,11 @@
*/
package org.drools.rule.builder.dialect.mvel;
+import org.drools.compiler.Dialect;
import org.drools.compiler.DialectRegistry;
import org.drools.compiler.PackageBuilderConfiguration;
import org.drools.lang.descr.RuleDescr;
import org.drools.rule.Package;
-import org.drools.rule.builder.Dialect;
import org.drools.rule.builder.RuleBuildContext;
import org.drools.spi.DeclarationScopeResolver;
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-07-14 23:52:32 UTC (rev 13514)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELConsequenceBuilderTest.java 2007-07-14 23:55:03 UTC (rev 13515)
@@ -2,6 +2,7 @@
import java.util.HashMap;
import java.util.Map;
+import java.util.Properties;
import junit.framework.TestCase;
@@ -14,6 +15,7 @@
import org.drools.common.AgendaItem;
import org.drools.common.InternalFactHandle;
import org.drools.common.PropagationContextImpl;
+import org.drools.compiler.DialectConfiguration;
import org.drools.compiler.DialectRegistry;
import org.drools.compiler.PackageBuilder;
import org.drools.compiler.PackageBuilderConfiguration;
@@ -35,16 +37,14 @@
final RuleDescr ruleDescr = new RuleDescr( "rule 1" );
ruleDescr.setConsequence( "modify (cheese) {price = 5 }; retract (cheese)" );
- MVELDialect mvelDialect = new MVELDialect( new PackageBuilder( pkg ) );
- DialectRegistry registry = new DialectRegistry();
- registry.addDialect( "mvel",
- mvelDialect );
- final PackageBuilderConfiguration conf = new PackageBuilderConfiguration();
+ PackageBuilder pkgBuilder = new PackageBuilder( pkg );
+ final PackageBuilderConfiguration conf = pkgBuilder.getPackageBuilderConfiguration();
+ MVELDialect mvelDialect = ( MVELDialect ) ( (DialectConfiguration) conf.getDialectConfiguration( "mvel" ) ).getDialect();
final InstrumentedBuildContent context = new InstrumentedBuildContent( conf,
pkg,
ruleDescr,
- registry,
+ conf.getDialectRegistry(),
mvelDialect );
final InstrumentedDeclarationScopeResolver declarationResolver = new InstrumentedDeclarationScopeResolver();
@@ -100,16 +100,17 @@
final RuleDescr ruleDescr = new RuleDescr( "rule 1" );
ruleDescr.setConsequence( "if (cheese.price == 10) { cheese.price = 5; }" );
- MVELDialect mvelDialect = new MVELDialect( new PackageBuilder( pkg ) );
- DialectRegistry registry = new DialectRegistry();
- registry.addDialect( "default",
- mvelDialect );
+ Properties properties = new Properties();
+ properties.setProperty( "drools.dialect.default",
+ "mvel" );
+ PackageBuilderConfiguration cfg1 = new PackageBuilderConfiguration( properties );
+ MVELDialect mvelDialect = ( MVELDialect) cfg1.getDefaultDialect();
final PackageBuilderConfiguration conf = new PackageBuilderConfiguration();
final InstrumentedBuildContent context = new InstrumentedBuildContent( conf,
pkg,
ruleDescr,
- registry,
+ conf.getDialectRegistry(),
mvelDialect );
final InstrumentedDeclarationScopeResolver declarationResolver = new InstrumentedDeclarationScopeResolver();
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-07-14 23:52:32 UTC (rev 13514)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELEvalBuilderTest.java 2007-07-14 23:55:03 UTC (rev 13515)
@@ -12,6 +12,7 @@
import org.drools.base.ClassFieldExtractorCache;
import org.drools.base.ClassObjectType;
import org.drools.common.InternalFactHandle;
+import org.drools.compiler.DialectConfiguration;
import org.drools.compiler.DialectRegistry;
import org.drools.compiler.PackageBuilder;
import org.drools.compiler.PackageBuilderConfiguration;
@@ -32,17 +33,15 @@
public void testSimpleExpression() {
final Package pkg = new Package( "pkg1" );
final RuleDescr ruleDescr = new RuleDescr( "rule 1" );
+
+ PackageBuilder pkgBuilder = new PackageBuilder( pkg );
+ final PackageBuilderConfiguration conf = pkgBuilder.getPackageBuilderConfiguration();
+ MVELDialect mvelDialect = ( MVELDialect ) ( (DialectConfiguration) conf.getDialectConfiguration( "mvel" ) ).getDialect();
- MVELDialect mvelDialect = new MVELDialect( new PackageBuilder( pkg ) );
- DialectRegistry registry = new DialectRegistry();
- registry.addDialect( "mvel",
- mvelDialect );
- final PackageBuilderConfiguration conf = new PackageBuilderConfiguration();
-
final InstrumentedBuildContent context = new InstrumentedBuildContent( conf,
pkg,
ruleDescr,
- registry,
+ conf.getDialectRegistry(),
mvelDialect );
final InstrumentedDeclarationScopeResolver declarationResolver = new InstrumentedDeclarationScopeResolver();
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-07-14 23:52:32 UTC (rev 13514)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELPredicateBuilderTest.java 2007-07-14 23:55:03 UTC (rev 13515)
@@ -14,6 +14,7 @@
import org.drools.base.ClassObjectType;
import org.drools.common.InternalFactHandle;
import org.drools.common.InternalWorkingMemory;
+import org.drools.compiler.DialectConfiguration;
import org.drools.compiler.DialectRegistry;
import org.drools.compiler.PackageBuilder;
import org.drools.compiler.PackageBuilderConfiguration;
@@ -36,16 +37,14 @@
final Package pkg = new Package( "pkg1" );
final RuleDescr ruleDescr = new RuleDescr( "rule 1" );
- MVELDialect mvelDialect = new MVELDialect( new PackageBuilder( pkg ) );
- DialectRegistry registry = new DialectRegistry();
- registry.addDialect( "mvel",
- mvelDialect );
- final PackageBuilderConfiguration conf = new PackageBuilderConfiguration();
+ PackageBuilder pkgBuilder = new PackageBuilder( pkg );
+ final PackageBuilderConfiguration conf = pkgBuilder.getPackageBuilderConfiguration();
+ MVELDialect mvelDialect = ( MVELDialect ) ( (DialectConfiguration) conf.getDialectConfiguration( "mvel" ) ).getDialect();
final InstrumentedBuildContent context = new InstrumentedBuildContent( conf,
pkg,
ruleDescr,
- registry,
+ conf.getDialectRegistry(),
mvelDialect );
final InstrumentedDeclarationScopeResolver declarationResolver = new InstrumentedDeclarationScopeResolver();
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-07-14 23:52:32 UTC (rev 13514)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELReturnValueBuilderTest.java 2007-07-14 23:55:03 UTC (rev 13515)
@@ -16,6 +16,7 @@
import org.drools.base.evaluators.Operator;
import org.drools.common.InternalFactHandle;
import org.drools.common.InternalWorkingMemory;
+import org.drools.compiler.DialectConfiguration;
import org.drools.compiler.DialectRegistry;
import org.drools.compiler.PackageBuilder;
import org.drools.compiler.PackageBuilderConfiguration;
@@ -38,16 +39,14 @@
final Package pkg = new Package( "pkg1" );
final RuleDescr ruleDescr = new RuleDescr( "rule 1" );
- MVELDialect mvelDialect = new MVELDialect( new PackageBuilder( pkg ) );
- DialectRegistry registry = new DialectRegistry();
- registry.addDialect( "mvel",
- mvelDialect );
- final PackageBuilderConfiguration conf = new PackageBuilderConfiguration();
+ PackageBuilder pkgBuilder = new PackageBuilder( pkg );
+ final PackageBuilderConfiguration conf = pkgBuilder.getPackageBuilderConfiguration();
+ MVELDialect mvelDialect = ( MVELDialect ) ( (DialectConfiguration) conf.getDialectConfiguration( "mvel" ) ).getDialect();
final InstrumentedBuildContent context = new InstrumentedBuildContent( conf,
pkg,
ruleDescr,
- registry,
+ conf.getDialectRegistry(),
mvelDialect );
final InstrumentedDeclarationScopeResolver declarationResolver = new InstrumentedDeclarationScopeResolver();
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELSalienceBuilderTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELSalienceBuilderTest.java 2007-07-14 23:52:32 UTC (rev 13514)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELSalienceBuilderTest.java 2007-07-14 23:55:03 UTC (rev 13515)
@@ -11,6 +11,7 @@
import org.drools.WorkingMemory;
import org.drools.base.ClassObjectType;
import org.drools.common.InternalFactHandle;
+import org.drools.compiler.DialectConfiguration;
import org.drools.compiler.DialectRegistry;
import org.drools.compiler.PackageBuilder;
import org.drools.compiler.PackageBuilderConfiguration;
@@ -30,16 +31,14 @@
ruleDescr.setSalience( "p.age + 20" );
ruleDescr.setConsequence( "" );
- MVELDialect mvelDialect = new MVELDialect( new PackageBuilder( pkg ) );
- DialectRegistry registry = new DialectRegistry();
- registry.addDialect( "mvel",
- mvelDialect );
- final PackageBuilderConfiguration conf = new PackageBuilderConfiguration();
+ PackageBuilder pkgBuilder = new PackageBuilder( pkg );
+ final PackageBuilderConfiguration conf = pkgBuilder.getPackageBuilderConfiguration();
+ MVELDialect mvelDialect = ( MVELDialect ) ( (DialectConfiguration) conf.getDialectConfiguration( "mvel" ) ).getDialect();
final InstrumentedBuildContent context = new InstrumentedBuildContent( conf,
pkg,
ruleDescr,
- registry,
+ conf.getDialectRegistry(),
mvelDialect );
final InstrumentedDeclarationScopeResolver declarationResolver = new InstrumentedDeclarationScopeResolver();
More information about the jboss-svn-commits
mailing list