[jboss-svn-commits] JBL Code SVN: r12187 - in labs/jbossrules/trunk/drools-compiler/src: main/java/org/drools/rule/builder and 3 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Mon May 28 17:15:26 EDT 2007
Author: mark.proctor at jboss.com
Date: 2007-05-28 17:15:26 -0400 (Mon, 28 May 2007)
New Revision: 12187
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/rule/builder/Dialect.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/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/test/resources/org/drools/integrationtests/test_mvel.drl
Log:
JBRULES-708 MVEL Integration
-Trying to get imports and static imports to work.
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-05-28 20:47:42 UTC (rev 12186)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/DialectRegistry.java 2007-05-28 21:15:26 UTC (rev 12187)
@@ -1,6 +1,7 @@
package org.drools.compiler;
import java.util.HashMap;
+import java.util.Iterator;
import java.util.Map;
import org.drools.rule.builder.Dialect;
@@ -22,4 +23,18 @@
return (Dialect) this.map.get( name );
}
+ public void addImport(String importEntry) {
+ for ( Iterator it = this.map.values().iterator(); it.hasNext(); ) {
+ Dialect dialect = ( Dialect ) it.next();
+ dialect.addImport( importEntry );
+ }
+ }
+
+ public void addStaticImport(String staticImportEntry) {
+ for ( Iterator it = this.map.values().iterator(); it.hasNext(); ) {
+ Dialect dialect = ( Dialect ) it.next();
+ dialect.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-05-28 20:47:42 UTC (rev 12186)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/PackageBuilder.java 2007-05-28 21:15:26 UTC (rev 12187)
@@ -288,11 +288,14 @@
for ( final Iterator it = imports.iterator(); it.hasNext(); ) {
String importEntry = ((ImportDescr) it.next()).getTarget();
pkg.addImport( importEntry );
+ this.dialects.addImport( importEntry );
this.typeResolver.addImport( importEntry );
}
for ( final Iterator it = packageDescr.getFunctionImports().iterator(); it.hasNext(); ) {
- pkg.addStaticImport( ((FunctionImportDescr) it.next()).getTarget() );
+ String importEntry = ((FunctionImportDescr) it.next()).getTarget();
+ this.dialects.addImport( importEntry );
+ pkg.addStaticImport( importEntry );
}
((ClassTypeResolver)this.typeResolver).setClassLoader( pkg.getPackageCompilationData().getClassLoader() );
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-05-28 20:47:42 UTC (rev 12186)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/Dialect.java 2007-05-28 21:15:26 UTC (rev 12187)
@@ -1,5 +1,6 @@
package org.drools.rule.builder;
+import java.util.Iterator;
import java.util.List;
import java.util.Map;
@@ -52,6 +53,10 @@
void addFunction(final FunctionDescr functionDescr,
TypeResolver typeResolver);
+
+ public void addImport(String importEntry);
+
+ public void addStaticImport(String importEntry);
List getResults();
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-05-28 20:47:42 UTC (rev 12186)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaDialect.java 2007-05-28 21:15:26 UTC (rev 12187)
@@ -491,6 +491,14 @@
}
}
}
+
+ public void addImport(String importEntry) {
+ // we don't need to do anything here
+ }
+
+ public void addStaticImport(String staticImportEntry) {
+ // we don't need to do anything here
+ }
public List getResults() {
return this.results;
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-05-28 20:47:42 UTC (rev 12186)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELConsequenceBuilder.java 2007-05-28 21:15:26 UTC (rev 12187)
@@ -17,10 +17,12 @@
// pushing consequence LHS into the stack for variable resolution
context.getBuildStack().push( context.getRule().getLhs() );
+ //factory.setNextFactory( ((MVELDialect)context.getDialect()).getStaticMethodImportResolverFactory() );
+
final DroolsMVELFactory factory = new DroolsMVELFactory(context.getDeclarationResolver().getDeclarations(), null, context.getPkg().getGlobals() );
+ factory.setNextFactory( ((MVELDialect)context.getDialect()).getClassImportResolverFactory() );
final Serializable expr = MVEL.compileExpression( delimitExpressions( (String) context.getRuleDescr().getConsequence()) );
- //final Serializable expr = MVEL.compileExpression( (String) ruleDescr.getConsequence() );
context.getRule().setConsequence( new MVELConsequence( expr,
factory ) );
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-05-28 20:47:42 UTC (rev 12186)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELDialect.java 2007-05-28 21:15:26 UTC (rev 12187)
@@ -1,5 +1,6 @@
package org.drools.rule.builder.dialect.mvel;
+import java.lang.reflect.Method;
import java.nio.channels.UnsupportedAddressTypeException;
import java.util.ArrayList;
import java.util.HashMap;
@@ -50,30 +51,34 @@
import org.drools.rule.builder.dialect.java.JavaReturnValueBuilder;
import org.drools.rule.builder.dialect.java.JavaRuleClassBuilder;
import org.drools.rule.builder.dialect.java.KnowledgeHelperFixer;
+import org.mvel.integration.impl.ClassImportResolverFactory;
+import org.mvel.integration.impl.StaticMethodImportResolverFactory;
public class MVELDialect
implements
Dialect {
- private final PatternBuilder pattern = new PatternBuilder( this );
+ private final PatternBuilder pattern = new PatternBuilder( this );
//private final JavaAccumulateBuilder accumulate = new JavaAccumulateBuilder();
- 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 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 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 Package pkg;
+ private PackageBuilderConfiguration configuration;
+ private final TypeResolver typeResolver;
+ private final ClassFieldExtractorCache classFieldExtractorCache;
+ private final MVELExprAnalyzer analyzer;
- private final MVELExprAnalyzer analyzer;
+ private final StaticMethodImportResolverFactory staticImportFactory;
+ private final ClassImportResolverFactory importFactory;
public void addFunction(FunctionDescr functionDescr,
TypeResolver typeResolver) {
@@ -89,7 +94,7 @@
this.configuration = builder.getPackageBuilderConfiguration();
this.typeResolver = builder.getTypeResolver();
this.classFieldExtractorCache = builder.getClassFieldExtractorCache();
-
+
this.analyzer = new MVELExprAnalyzer();
if ( pkg != null ) {
@@ -97,6 +102,10 @@
}
initBuilder();
+
+ this.importFactory = new ClassImportResolverFactory();
+ this.staticImportFactory = new StaticMethodImportResolverFactory();
+ this.importFactory.setNextFactory( this.staticImportFactory );
}
public void initBuilder() {
@@ -145,6 +154,44 @@
}
+ public void addImport(String importEntry) {
+ try {
+ Class cls = this.configuration.getClassLoader().loadClass( importEntry );
+ this.importFactory.addClass( cls );
+ } catch ( ClassNotFoundException e ) {
+ // @todo: add MVEL error
+ this.results.add( null );
+ }
+ }
+
+ public void addStaticImport(String staticImportEntry) {
+ int index = staticImportEntry.lastIndexOf( '.' );
+ String className = staticImportEntry.substring( 0, index );
+ String methodName = staticImportEntry.substring( 0, index + 1 );
+
+ try {
+ Class cls = this.configuration.getClassLoader().loadClass( className );
+ Method[] methods = cls.getDeclaredMethods();
+ for ( int i = 0; i < methods.length; i++ ) {
+ if ( methods[i].equals( "methodName" ) ) {
+ this.staticImportFactory.createVariable( methodName, methods[i] );
+ break;
+ }
+ }
+ } catch ( ClassNotFoundException e ) {
+ // @todo: add MVEL error
+ this.results.add( null );
+ }
+ }
+
+ public StaticMethodImportResolverFactory getStaticMethodImportResolverFactory() {
+ return this.staticImportFactory;
+ }
+
+ public ClassImportResolverFactory getClassImportResolverFactory() {
+ return this.importFactory;
+ }
+
public void compileAll() {
}
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-05-28 20:47:42 UTC (rev 12186)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELEvalBuilder.java 2007-05-28 21:15:26 UTC (rev 12187)
@@ -56,17 +56,8 @@
// it must be an EvalDescr
final EvalDescr evalDescr = (EvalDescr) descr;
- //final Declaration[] declarations = new Declaration[0];
- // final List[] usedIdentifiers = utils.getUsedIdentifiers( context,
- // evalDescr,
- // evalDescr.getText() );
- //
- // final Declaration[] declarations = new Declaration[usedIdentifiers[0].size()];
- // for ( int i = 0, size = usedIdentifiers[0].size(); i < size; i++ ) {
- // declarations[i] = (Declaration) context.getDeclarationResolver().getDeclaration( (String) usedIdentifiers[0].get( i ) );
- // }
-
final DroolsMVELFactory factory = new DroolsMVELFactory(context.getDeclarationResolver().getDeclarations(), null, context.getPkg().getGlobals() );
+ factory.setNextFactory( ((MVELDialect)context.getDialect()).getClassImportResolverFactory() );
final List[] usedIdentifiers = context.getDialect().getExpressionIdentifiers( context,
evalDescr,
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-05-28 20:47:42 UTC (rev 12186)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELFromBuilder.java 2007-05-28 21:15:26 UTC (rev 12187)
@@ -64,9 +64,8 @@
final AccessorDescr accessor = (AccessorDescr) fromDescr.getDataSource();
DataProvider dataProvider = null;
try {
- // JFDIParser parser = createParser( utils,
- // accessor.toString() );
final DroolsMVELFactory factory = new DroolsMVELFactory(context.getDeclarationResolver().getDeclarations(), null, context.getPkg().getGlobals() );
+ factory.setNextFactory( ((MVELDialect)context.getDialect()).getClassImportResolverFactory() );
//parser.setValueHandlerFactory( factory );
final Serializable compiled = MVEL.compileExpression( accessor.toString() );
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-05-28 20:47:42 UTC (rev 12186)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELPredicateBuilder.java 2007-05-28 21:15:26 UTC (rev 12187)
@@ -44,19 +44,6 @@
final Declaration[] localDeclarations,
final PredicateConstraint predicate,
final PredicateDescr predicateDescr) {
-
- //final Declaration[] declarations = new Declaration[0];
- // final List[] usedIdentifiers = utils.getUsedIdentifiers( context,
- // evalDescr,
- // evalDescr.getText() );
- //
- // final Declaration[] declarations = new Declaration[usedIdentifiers[0].size()];
- // for ( int i = 0, size = usedIdentifiers[0].size(); i < size; i++ ) {
- // declarations[i] = (Declaration) context.getDeclarationResolver().getDeclaration( (String) usedIdentifiers[0].get( i ) );
- // }
-
- //final DroolsMVELFactory factory = new DroolsMVELFactory();
-
Map previousMap = new HashMap();
for ( int i = 0, length = previousDeclarations.length; i < length; i++ ) {
previousMap.put( previousDeclarations[i].getIdentifier(),
@@ -72,6 +59,7 @@
final DroolsMVELFactory factory = new DroolsMVELFactory( previousMap,
localMap,
context.getPkg().getGlobals() );
+ factory.setNextFactory( ((MVELDialect)context.getDialect()).getClassImportResolverFactory() );
final Serializable expr = MVEL.compileExpression( (String) predicateDescr.getContent() );
predicate.setPredicateExpression( new MVELPredicateExpression( expr,
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-05-28 20:47:42 UTC (rev 12186)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELReturnValueBuilder.java 2007-05-28 21:15:26 UTC (rev 12187)
@@ -61,6 +61,7 @@
}
final DroolsMVELFactory factory = new DroolsMVELFactory(previousMap, localMap, context.getPkg().getGlobals() );
+ factory.setNextFactory( ((MVELDialect)context.getDialect()).getClassImportResolverFactory() );
final Serializable expr = MVEL.compileExpression( (String) returnValueRestrictionDescr.getContent() );
returnValueRestriction.setReturnValueExpression( new MVELReturnValueExpression( expr,
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-05-28 20:47:42 UTC (rev 12186)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELSalienceBuilder.java 2007-05-28 21:15:26 UTC (rev 12187)
@@ -16,6 +16,8 @@
context.getBuildStack().push( context.getRule().getLhs() );
final DroolsMVELFactory factory = new DroolsMVELFactory(context.getDeclarationResolver().getDeclarations(), null, context.getPkg().getGlobals());
+ factory.setNextFactory( ((MVELDialect)context.getDialect()).getClassImportResolverFactory() );
+
final Serializable expr = MVEL.compileExpression( (String) context.getRuleDescr().getSalience() );
Modified: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_mvel.drl
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_mvel.drl 2007-05-28 20:47:42 UTC (rev 12186)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_mvel.drl 2007-05-28 21:15:26 UTC (rev 12187)
@@ -10,11 +10,18 @@
$c : Cheese(type == "stilton", price == (new Integer( 5 ) + 5 ), eval(price == (new Integer( 5 ) + 5 ) ) )
eval( $c.price == 10 && list == empty)
then
- #we have optional ";"
- a = new java.math.BigInteger( "10" )
- b = new java.math.BigInteger( "10" )
+ Cheese cheese = new Cheese("cheddar", 15);
+ a = new java.math.BigInteger( "10" );
+ b = new java.math.BigInteger( "10" );
+ c = a + b; //look ma, optional ';' - ooh ahh....
+ list.add( c + $c.price);
- #use ";" to seperate on the one line
- c = a + b; list.add( c + $c.price)
+// #we have optional ";"
+// a = new java.math.BigInteger( "10" )
+// b = new java.math.BigInteger( "10" )
+//
+// #use ";" to seperate on the one line
+// c = a + b; list.add( c + $c.price)
+
end
\ No newline at end of file
More information about the jboss-svn-commits
mailing list