[jboss-svn-commits] JBL Code SVN: r12056 - in labs/jbossrules/trunk/drools-compiler: src/main/java/org/drools/compiler and 4 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Tue May 22 03:04:17 EDT 2007
Author: mark.proctor at jboss.com
Date: 2007-05-22 03:04:17 -0400 (Tue, 22 May 2007)
New Revision: 12056
Added:
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELDialect.java
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MVELTest.java
labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_mvel.drl
Modified:
labs/jbossrules/trunk/drools-compiler/.classpath
labs/jbossrules/trunk/drools-compiler/.project
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/PackageBuilder.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/Dialect.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/RuleBuilder.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELConsequenceBuilder.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELEvalBuilder.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELFromBuilder.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELPredicateBuilder.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELReturnValueBuilder.java
Log:
JBRULES-713 Make Dialects Pluggeable
JBRULES-708 Full MVEL integration
Modified: labs/jbossrules/trunk/drools-compiler/.classpath
===================================================================
--- labs/jbossrules/trunk/drools-compiler/.classpath 2007-05-22 07:04:06 UTC (rev 12055)
+++ labs/jbossrules/trunk/drools-compiler/.classpath 2007-05-22 07:04:17 UTC (rev 12056)
@@ -1,18 +1,18 @@
<classpath>
<classpathentry kind="src" path="src/main/java"/>
- <classpathentry kind="src" path="src/main/resources"/>
+ <classpathentry kind="src" path="src/main/resources" excluding="**/*.java"/>
<classpathentry kind="src" path="src/test/java" output="target/test-classes"/>
- <classpathentry kind="src" path="src/test/resources" output="target/test-classes"/>
+ <classpathentry kind="src" path="src/test/resources" output="target/test-classes" excluding="**/*.java"/>
<classpathentry kind="output" path="target/classes"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+ <classpathentry kind="src" path="/drools-core"/>
+ <classpathentry kind="var" path="M2_REPO/xstream/xstream/1.1.3/xstream-1.1.3.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/eclipse/jdt/core/3.2.1.v_677_R32x/core-3.2.1.v_677_R32x.jar"/>
<classpathentry kind="var" path="M2_REPO/xml-apis/xml-apis/1.0.b2/xml-apis-1.0.b2.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/mvel/mvel14/1.2beta16/mvel14-1.2beta16.jar"/>
- <classpathentry kind="src" path="/drools-core"/>
+ <classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/janino/janino/2.5.7/janino-2.5.7.jar"/>
+ <classpathentry kind="var" path="M2_REPO/xerces/xercesImpl/2.4.0/xercesImpl-2.4.0.jar"/>
<classpathentry kind="var" path="M2_REPO/xpp3/xpp3/1.1.3.4.O/xpp3-1.1.3.4.O.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/eclipse/jdt/core/3.2.1.v_677_R32x/core-3.2.1.v_677_R32x.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/mvel/mvel14/1.2beta18/mvel14-1.2beta18.jar"/>
<classpathentry kind="var" path="M2_REPO/org/antlr/antlr/3.0b7/antlr-3.0b7.jar"/>
- <classpathentry kind="var" path="M2_REPO/xerces/xercesImpl/2.4.0/xercesImpl-2.4.0.jar"/>
- <classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar"/>
- <classpathentry kind="var" path="M2_REPO/xstream/xstream/1.1.3/xstream-1.1.3.jar"/>
- <classpathentry kind="var" path="M2_REPO/janino/janino/2.5.6/janino-2.5.6.jar"/>
</classpath>
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-compiler/.project
===================================================================
--- labs/jbossrules/trunk/drools-compiler/.project 2007-05-22 07:04:06 UTC (rev 12055)
+++ labs/jbossrules/trunk/drools-compiler/.project 2007-05-22 07:04:17 UTC (rev 12056)
@@ -7,7 +7,6 @@
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
- <arguments/>
</buildCommand>
</buildSpec>
<natures>
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-22 07:04:06 UTC (rev 12055)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/PackageBuilder.java 2007-05-22 07:04:17 UTC (rev 12056)
@@ -47,6 +47,7 @@
import org.drools.rule.builder.RuleBuildContext;
import org.drools.rule.builder.RuleBuilder;
import org.drools.rule.builder.dialect.java.JavaDialect;
+import org.drools.rule.builder.dialect.mvel.MVELDialect;
import org.drools.xml.XmlPackageReader;
import org.xml.sax.SAXException;
@@ -125,7 +126,12 @@
new JavaDialect( pkg,
configuration,
getTypeResolver(),
- this.classFieldExtractorCache ) );
+ this.classFieldExtractorCache ) );
+ this.dialects.addDialect( "mvel",
+ new MVELDialect( pkg,
+ configuration,
+ getTypeResolver(),
+ this.classFieldExtractorCache ) );
this.dialect = this.dialects.getDialect( "java" ); // TODO this should from the package
} else {
@@ -135,6 +141,11 @@
configuration,
getTypeResolver(),
this.classFieldExtractorCache ) );
+ this.dialects.addDialect( "mvel",
+ new MVELDialect( pkg,
+ configuration,
+ getTypeResolver(),
+ this.classFieldExtractorCache ) );
this.dialects.addDialect( "default", this.dialects.getDialect( configuration.getDialect() ) );
this.dialect = this.dialects.getDialect( configuration.getDialect() );
}
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-22 07:04:06 UTC (rev 12055)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/Dialect.java 2007-05-22 07:04:17 UTC (rev 12056)
@@ -18,6 +18,8 @@
ClassFieldExtractorCache getClassFieldExtractorCache();
+ PatternBuilder getPatternBuilder();
+
ConditionalElementBuilder getEvalBuilder();
AccumulateBuilder getAccumulateBuilder();
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/RuleBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/RuleBuilder.java 2007-05-22 07:04:06 UTC (rev 12055)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/RuleBuilder.java 2007-05-22 07:04:17 UTC (rev 12056)
@@ -65,7 +65,10 @@
context.getDialect().getConsequenceBuilder().build( context,
ruleDescr );
}
- context.getDialect().getRuleClassBuilder().buildRule( context,
- ruleDescr );
+ RuleClassBuilder classBuilder = context.getDialect().getRuleClassBuilder();
+ if ( classBuilder != null ) {
+ classBuilder.buildRule( context,
+ ruleDescr );
+ }
}
}
\ No newline at end of file
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-22 07:04:06 UTC (rev 12055)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELConsequenceBuilder.java 2007-05-22 07:04:17 UTC (rev 12056)
@@ -1,6 +1,7 @@
package org.drools.rule.builder.dialect.mvel;
import java.io.Serializable;
+import java.util.HashMap;
import org.drools.base.mvel.DroolsMVELFactory;
import org.drools.base.mvel.MVELConsequence;
@@ -8,6 +9,7 @@
import org.drools.rule.builder.RuleBuildContext;
import org.drools.rule.builder.ConsequenceBuilder;
import org.mvel.MVEL;
+import org.mvel.integration.impl.MapVariableResolverFactory;
public class MVELConsequenceBuilder
implements
@@ -18,9 +20,7 @@
// pushing consequence LHS into the stack for variable resolution
context.getBuildStack().push( context.getRule().getLhs() );
- final DroolsMVELFactory factory = new DroolsMVELFactory();
- factory.setPreviousDeclarationMap( context.getDeclarationResolver().getDeclarations() );
- factory.setGlobalsMap( context.getPkg().getGlobals() );
+ final DroolsMVELFactory factory = new DroolsMVELFactory(context.getDeclarationResolver().getDeclarations(), null, context.getPkg().getGlobals() );
final Serializable expr = MVEL.compileExpression( (String) ruleDescr.getConsequence() );
Added: 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 (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELDialect.java 2007-05-22 07:04:17 UTC (rev 12056)
@@ -0,0 +1,211 @@
+package org.drools.rule.builder.dialect.mvel;
+
+import java.nio.channels.UnsupportedAddressTypeException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.drools.base.ClassFieldExtractorCache;
+import org.drools.base.TypeResolver;
+import org.drools.compiler.PackageBuilderConfiguration;
+import org.drools.lang.descr.AccumulateDescr;
+import org.drools.lang.descr.AndDescr;
+import org.drools.lang.descr.BaseDescr;
+import org.drools.lang.descr.CollectDescr;
+import org.drools.lang.descr.EvalDescr;
+import org.drools.lang.descr.ExistsDescr;
+import org.drools.lang.descr.ForallDescr;
+import org.drools.lang.descr.FromDescr;
+import org.drools.lang.descr.FunctionDescr;
+import org.drools.lang.descr.NotDescr;
+import org.drools.lang.descr.OrDescr;
+import org.drools.lang.descr.PatternDescr;
+import org.drools.lang.descr.RuleDescr;
+import org.drools.rule.Package;
+import org.drools.rule.builder.AccumulateBuilder;
+import org.drools.rule.builder.CollectBuilder;
+import org.drools.rule.builder.ConditionalElementBuilder;
+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.GroupElementBuilder;
+import org.drools.rule.builder.PatternBuilder;
+import org.drools.rule.builder.PredicateBuilder;
+import org.drools.rule.builder.ReturnValueBuilder;
+import org.drools.rule.builder.RuleBuildContext;
+import org.drools.rule.builder.RuleClassBuilder;
+import org.drools.rule.builder.dialect.java.DeclarationTypeFixer;
+import org.drools.rule.builder.dialect.java.JavaAccumulateBuilder;
+import org.drools.rule.builder.dialect.java.JavaConsequenceBuilder;
+import org.drools.rule.builder.dialect.java.JavaEvalBuilder;
+import org.drools.rule.builder.dialect.java.JavaExprAnalyzer;
+import org.drools.rule.builder.dialect.java.JavaFunctionBuilder;
+import org.drools.rule.builder.dialect.java.JavaPredicateBuilder;
+import org.drools.rule.builder.dialect.java.JavaReturnValueBuilder;
+import org.drools.rule.builder.dialect.java.JavaRuleClassBuilder;
+import org.drools.rule.builder.dialect.java.KnowledgeHelperFixer;
+
+public class MVELDialect
+ implements
+ Dialect {
+
+ private final PatternBuilder pattern = new PatternBuilder( this );
+ //private final JavaAccumulateBuilder accumulate = new JavaAccumulateBuilder();
+ 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 List results;
+ //private final JavaFunctionBuilder function = new JavaFunctionBuilder();
+
+ private Package pkg;
+ private PackageBuilderConfiguration configuration;
+ private final TypeResolver typeResolver;
+ private final ClassFieldExtractorCache classFieldExtractorCache;
+
+ public void addFunction(FunctionDescr functionDescr,
+ TypeResolver typeResolver) {
+ throw new UnsupportedOperationException( "MVEL does not support functions" );
+
+ }
+
+ // a map of registered builders
+ private Map builders;
+
+ public MVELDialect(final Package pkg,
+ final PackageBuilderConfiguration configuration,
+ final TypeResolver typeResolver,
+ final ClassFieldExtractorCache classFieldExtractorCache) {
+ this.pkg = pkg;
+ this.configuration = configuration;
+ //loadCompiler();
+
+ this.typeResolver = typeResolver;
+ this.classFieldExtractorCache = classFieldExtractorCache;
+
+ if ( pkg != null ) {
+ init( pkg );
+ }
+
+ initBuilder();
+ }
+
+ public void initBuilder() {
+ // statically adding all builders to the map
+ // but in the future we can move that to a configuration
+ // if we want to
+ this.builders = new HashMap();
+
+ final GroupElementBuilder gebuilder = new GroupElementBuilder();
+
+ this.builders.put( AndDescr.class,
+ gebuilder );
+
+ this.builders.put( OrDescr.class,
+ gebuilder );
+
+ this.builders.put( NotDescr.class,
+ gebuilder );
+
+ this.builders.put( ExistsDescr.class,
+ gebuilder );
+
+ this.builders.put( PatternDescr.class,
+ getPatternBuilder() );
+
+ this.builders.put( FromDescr.class,
+ getFromBuilder() );
+
+// this.builders.put( AccumulateDescr.class,
+// getAccumulateBuilder() );
+
+ this.builders.put( EvalDescr.class,
+ getEvalBuilder() );
+ }
+
+ public void init(Package pkg) {
+ this.pkg = pkg;
+ this.results = new ArrayList();
+
+ }
+
+ public void init(RuleDescr ruleDescr) {
+ }
+
+ public void addRule(RuleBuildContext context) {
+
+ }
+
+ public void compileAll() {
+ }
+
+ public List[] getBlockIdentifiers(RuleBuildContext context,
+ BaseDescr descr,
+ String text) {
+ return null;
+ }
+
+ public Object getBuilder(final Class clazz) {
+ return this.builders.get( clazz );
+ }
+
+ public Map getBuilders() {
+ return this.builders;
+ }
+
+ public ClassFieldExtractorCache getClassFieldExtractorCache() {
+ return this.classFieldExtractorCache;
+ }
+
+ public PatternBuilder getPatternBuilder() {
+ return this.pattern;
+ }
+
+ public AccumulateBuilder getAccumulateBuilder() {
+ throw new UnsupportedOperationException("MVEL does not yet support accumuate");
+ }
+
+ public ConsequenceBuilder getConsequenceBuilder() {
+ return this.consequence;
+ }
+
+ public ConditionalElementBuilder getEvalBuilder() {
+ return this.eval;
+ }
+
+ public List[] getExpressionIdentifiers(RuleBuildContext context,
+ BaseDescr descr,
+ Object content) {
+ return null;
+ }
+
+ public FromBuilder getFromBuilder() {
+ return this.from;
+ }
+
+ public PredicateBuilder getPredicateBuilder() {
+ return this.predicate;
+ }
+
+ public List getResults() {
+ return null;
+ }
+
+ public ReturnValueBuilder getReturnValueBuilder() {
+ return this.returnValue;
+ }
+
+ public RuleClassBuilder getRuleClassBuilder() {
+ return null;
+ }
+
+ public TypeResolver getTypeResolver() {
+ return this.typeResolver;
+ }
+
+}
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-22 07:04:06 UTC (rev 12055)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELEvalBuilder.java 2007-05-22 07:04:17 UTC (rev 12056)
@@ -62,9 +62,7 @@
// declarations[i] = (Declaration) context.getDeclarationResolver().getDeclaration( (String) usedIdentifiers[0].get( i ) );
// }
- final DroolsMVELFactory factory = new DroolsMVELFactory();
- factory.setPreviousDeclarationMap( context.getDeclarationResolver().getDeclarations() );
- factory.setGlobalsMap( context.getPkg().getGlobals() );
+ final DroolsMVELFactory factory = new DroolsMVELFactory(context.getDeclarationResolver().getDeclarations(), null, context.getPkg().getGlobals() );
final Serializable expr = MVEL.compileExpression( (String) evalDescr.getContent() );
final EvalCondition eval = new EvalCondition( declarations );
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-22 07:04:06 UTC (rev 12055)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELFromBuilder.java 2007-05-22 07:04:17 UTC (rev 12056)
@@ -66,9 +66,7 @@
try {
// JFDIParser parser = createParser( utils,
// accessor.toString() );
- final DroolsMVELFactory factory = new DroolsMVELFactory();
- factory.setPreviousDeclarationMap( context.getDeclarationResolver().getDeclarations() );
- factory.setGlobalsMap( context.getPkg().getGlobals() );
+ final DroolsMVELFactory factory = new DroolsMVELFactory(context.getDeclarationResolver().getDeclarations(), null, context.getPkg().getGlobals() );
//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-22 07:04:06 UTC (rev 12055)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELPredicateBuilder.java 2007-05-22 07:04:17 UTC (rev 12056)
@@ -55,24 +55,22 @@
// declarations[i] = (Declaration) context.getDeclarationResolver().getDeclaration( (String) usedIdentifiers[0].get( i ) );
// }
- final DroolsMVELFactory factory = new DroolsMVELFactory();
+ //final DroolsMVELFactory factory = new DroolsMVELFactory();
- Map map = new HashMap();
+ Map previousMap = new HashMap();
for ( int i = 0, length = previousDeclarations.length; i < length; i++ ) {
- map.put( previousDeclarations[i].getIdentifier(),
+ previousMap.put( previousDeclarations[i].getIdentifier(),
previousDeclarations[i] );
}
- factory.setPreviousDeclarationMap( map );
- map = new HashMap();
+ Map localMap = new HashMap();
for ( int i = 0, length = localDeclarations.length; i < length; i++ ) {
- map.put( localDeclarations[i].getIdentifier(),
+ localMap.put( localDeclarations[i].getIdentifier(),
localDeclarations[i] );
}
- factory.setLocalDeclarationMap( map );
+
+ final DroolsMVELFactory factory = new DroolsMVELFactory(previousMap, localMap, context.getPkg().getGlobals() );
- factory.setGlobalsMap( context.getPkg().getGlobals() );
-
final Serializable expr = MVEL.compileExpression( (String) predicateDescr.getContent() );
predicate.setPredicateExpression( new MVELPredicateExpression( expr,
factory ) );
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-22 07:04:06 UTC (rev 12055)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELReturnValueBuilder.java 2007-05-22 07:04:17 UTC (rev 12056)
@@ -47,67 +47,24 @@
final Declaration[] localDeclarations,
final ReturnValueRestriction returnValueRestriction,
final ReturnValueRestrictionDescr returnValueRestrictionDescr) {
- final DroolsMVELFactory factory = new DroolsMVELFactory();
- Map map = new HashMap();
+ Map previousMap = new HashMap();
for ( int i = 0, length = previousDeclarations.length; i < length; i++ ) {
- map.put( previousDeclarations[i].getIdentifier(),
+ previousMap.put( previousDeclarations[i].getIdentifier(),
previousDeclarations[i] );
}
- factory.setPreviousDeclarationMap( map );
- map = new HashMap();
+ Map localMap = new HashMap();
for ( int i = 0, length = localDeclarations.length; i < length; i++ ) {
- map.put( localDeclarations[i].getIdentifier(),
+ localMap.put( localDeclarations[i].getIdentifier(),
localDeclarations[i] );
}
- factory.setLocalDeclarationMap( map );
+
+ final DroolsMVELFactory factory = new DroolsMVELFactory(previousMap, localMap, context.getPkg().getGlobals() );
- factory.setGlobalsMap( context.getPkg().getGlobals() );
-
final Serializable expr = MVEL.compileExpression( (String) returnValueRestrictionDescr.getContent() );
returnValueRestriction.setReturnValueExpression( new MVELReturnValueExpression( expr,
factory ) );
}
- public void build(final RuleBuildContext context,
- final List[] usedIdentifiers,
- final Declaration[] previousDeclarations,
- 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 map = new HashMap();
- for ( int i = 0, length = previousDeclarations.length; i < length; i++ ) {
- map.put( previousDeclarations[i].getIdentifier(),
- previousDeclarations[i] );
- }
- factory.setPreviousDeclarationMap( map );
-
- map = new HashMap();
- for ( int i = 0, length = localDeclarations.length; i < length; i++ ) {
- map.put( localDeclarations[i].getIdentifier(),
- localDeclarations[i] );
- }
- factory.setLocalDeclarationMap( map );
-
- factory.setGlobalsMap( context.getPkg().getGlobals() );
-
- final Serializable expr = MVEL.compileExpression( (String) predicateDescr.getContent() );
- predicate.setPredicateExpression( new MVELPredicateExpression( expr,
- factory ) );
- }
-
}
Added: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MVELTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MVELTest.java (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MVELTest.java 2007-05-22 07:04:17 UTC (rev 12056)
@@ -0,0 +1,66 @@
+package org.drools.integrationtests;
+
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.drools.Cheese;
+import org.drools.RuleBase;
+import org.drools.RuleBaseFactory;
+import org.drools.WorkingMemory;
+import org.drools.compiler.DrlParser;
+import org.drools.compiler.DroolsParserException;
+import org.drools.compiler.PackageBuilder;
+import org.drools.integrationtests.helloworld.Message;
+import org.drools.lang.descr.PackageDescr;
+import org.drools.rule.Package;
+
+import junit.framework.Assert;
+import junit.framework.TestCase;
+
+public class MVELTest extends TestCase {
+ public void testHelloWorld() throws Exception {
+
+ // read in the source
+ final Reader reader = new InputStreamReader( getClass().getResourceAsStream( "test_mvel.drl" ) );
+ final RuleBase ruleBase = loadRuleBase( reader );
+
+ final WorkingMemory workingMemory = ruleBase.newStatefulSession();
+
+ final List list = new ArrayList();
+ workingMemory.setGlobal( "list",
+ list );
+
+ workingMemory.assertObject( new Cheese("stilton", 10) );
+ workingMemory.fireAllRules();
+ assertEquals( new Integer(30), list.get(0));
+ }
+
+ private RuleBase loadRuleBase(final Reader reader) throws IOException,
+ DroolsParserException,
+ Exception {
+ final DrlParser parser = new DrlParser();
+ final PackageDescr packageDescr = parser.parse( reader );
+ if ( parser.hasErrors() ) {
+ Assert.fail( "Error messages in parser, need to sort this our (or else collect error messages)" );
+ }
+ // pre build the package
+ final PackageBuilder builder = new PackageBuilder();
+ builder.addPackage( packageDescr );
+ final Package pkg = builder.getPackage();
+
+ // add the package to a rulebase
+ final RuleBase ruleBase = getRuleBase();
+ ruleBase.addPackage( pkg );
+ // load up the rulebase
+ return ruleBase;
+ }
+
+ protected RuleBase getRuleBase() throws Exception {
+
+ return RuleBaseFactory.newRuleBase( RuleBase.RETEOO,
+ null );
+ }
+}
Added: 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 (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_mvel.drl 2007-05-22 07:04:17 UTC (rev 12056)
@@ -0,0 +1,18 @@
+package org.drools.test;
+
+import org.drools.Cheese;
+
+global java.util.List list;
+
+rule "Throw Eval Exception"
+ dialect "mvel"
+ when
+// $c : Cheese(type == "stilton", (price == (new Integer(5) + 5)), price == (new Integer(5) + 5) )
+ $c : Cheese(type == "stilton" )
+ eval( $c.price == 10 )
+ then
+ long a = new java.math.BigInteger( 10 );
+ b = a + 10;
+ System.out.println("hello");
+ list.add( b + $c.price);
+end
\ No newline at end of file
More information about the jboss-svn-commits
mailing list