[jboss-svn-commits] JBL Code SVN: r9830 - in labs/jbossrules/trunk/drools-compiler/src: main/java/org/drools/rule/builder/dialect/mvel and 1 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Tue Feb 27 21:20:49 EST 2007
Author: mark.proctor at jboss.com
Date: 2007-02-27 21:20:49 -0500 (Tue, 27 Feb 2007)
New Revision: 9830
Added:
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELReturnValueBuilder.java
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELReturnValueBuilderTest.java
Modified:
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/ReturnValueRestrictionDescr.java
Log:
JBRULES-708 MVEL Integration
-ReturnValue now works
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/ReturnValueRestrictionDescr.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/ReturnValueRestrictionDescr.java 2007-02-28 00:17:44 UTC (rev 9829)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/ReturnValueRestrictionDescr.java 2007-02-28 02:20:49 UTC (rev 9830)
@@ -20,7 +20,7 @@
/**
*
*/
- private static final long serialVersionUID = 478782161375380651L;
+ private static final long serialVersionUID = 320L;
private String evaluator;
private String text;
private String[] declarations;
Added: 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 (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELReturnValueBuilder.java 2007-02-28 02:20:49 UTC (rev 9830)
@@ -0,0 +1,121 @@
+/*
+ * Copyright 2006 JBoss Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.drools.rule.builder.dialect.mvel;
+
+import java.io.Serializable;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.antlr.stringtemplate.StringTemplate;
+import org.drools.base.mvel.DroolsMVELFactory;
+import org.drools.base.mvel.MVELEvalExpression;
+import org.drools.base.mvel.MVELPredicateExpression;
+import org.drools.base.mvel.MVELReturnValueExpression;
+import org.drools.lang.descr.BaseDescr;
+import org.drools.lang.descr.EvalDescr;
+import org.drools.lang.descr.PredicateDescr;
+import org.drools.lang.descr.ReturnValueRestrictionDescr;
+import org.drools.rule.ConditionalElement;
+import org.drools.rule.Declaration;
+import org.drools.rule.EvalCondition;
+import org.drools.rule.PredicateConstraint;
+import org.drools.rule.ReturnValueRestriction;
+import org.drools.rule.builder.BuildContext;
+import org.drools.rule.builder.ColumnBuilder;
+import org.drools.rule.builder.ConditionalElementBuilder;
+import org.drools.rule.builder.PredicateBuilder;
+import org.drools.rule.builder.ReturnValueBuilder;
+import org.drools.rule.builder.dialect.java.BuildUtils;
+import org.drools.spi.BetaNodeFieldConstraint;
+import org.drools.spi.DeclarationScopeResolver;
+import org.mvel.MVEL;
+
+/**
+ * @author etirelli
+ *
+ */
+public class MVELReturnValueBuilder
+ implements
+ ReturnValueBuilder {
+
+ public void build(final BuildContext context,
+ final BuildUtils utils,
+ final List[] usedIdentifiers,
+ final Declaration[] previousDeclarations,
+ final Declaration[] localDeclarations,
+ final ReturnValueRestriction returnValueRestriction,
+ final ReturnValueRestrictionDescr returnValueRestrictionDescr) {
+ 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() );
+
+ Serializable expr = MVEL.compileExpression( returnValueRestrictionDescr.getText() );
+ returnValueRestriction.setReturnValueExpression( new MVELReturnValueExpression(expr,factory) );
+ }
+
+ public void build(final BuildContext context,
+ final BuildUtils utils,
+ 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 ) );
+// }
+
+ 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() );
+
+ Serializable expr = MVEL.compileExpression( predicateDescr.getText() );
+ predicate.setPredicateExpression( new MVELPredicateExpression(expr,factory) );
+ }
+
+}
Added: 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 (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELReturnValueBuilderTest.java 2007-02-28 02:20:49 UTC (rev 9830)
@@ -0,0 +1,169 @@
+package org.drools.rule.builder.dialect.mvel;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import junit.framework.TestCase;
+
+import org.drools.Cheese;
+import org.drools.RuleBase;
+import org.drools.RuleBaseFactory;
+import org.drools.WorkingMemory;
+import org.drools.base.ClassFieldExtractor;
+import org.drools.base.ClassObjectType;
+import org.drools.base.ValueType;
+import org.drools.base.evaluators.Operator;
+import org.drools.common.InternalFactHandle;
+import org.drools.common.InternalWorkingMemory;
+import org.drools.lang.descr.EvalDescr;
+import org.drools.lang.descr.ReturnValueRestrictionDescr;
+import org.drools.lang.descr.RuleDescr;
+import org.drools.reteoo.ReteTuple;
+import org.drools.rule.Column;
+import org.drools.rule.Declaration;
+import org.drools.rule.EvalCondition;
+import org.drools.rule.Package;
+import org.drools.rule.PredicateConstraint;
+import org.drools.rule.ReturnValueConstraint;
+import org.drools.rule.ReturnValueRestriction;
+import org.drools.rule.PredicateConstraint.PredicateContextEntry;
+import org.drools.rule.builder.BuildContext;
+import org.drools.rule.builder.dialect.java.BuildUtils;
+import org.drools.rule.builder.dialect.java.DeclarationTypeFixer;
+import org.drools.rule.builder.dialect.java.JavaExprAnalyzer;
+import org.drools.rule.builder.dialect.java.JavaPredicateBuilder;
+import org.drools.rule.builder.dialect.java.KnowledgeHelperFixer;
+import org.drools.rule.builder.dialect.mvel.MVELEvalBuilder;
+import org.drools.spi.DeclarationScopeResolver;
+import org.drools.spi.FieldExtractor;
+
+public class MVELReturnValueBuilderTest extends TestCase {
+
+ public void setUp() {
+ }
+
+ public void testSimpleExpression() {
+ Package pkg = new Package( "pkg1" );
+ RuleDescr ruleDescr = new RuleDescr( "rule 1" );
+
+ InstrumentedBuildContent context = new InstrumentedBuildContent( pkg,
+ ruleDescr );
+ InstrumentedDeclarationScopeResolver declarationResolver = new InstrumentedDeclarationScopeResolver();
+ final FieldExtractor extractor = new ClassFieldExtractor( Cheese.class,
+ "price" );
+ Column columnA = new Column( 0,
+ new ClassObjectType( int.class ) );
+
+ Column columnB = new Column( 1,
+ new ClassObjectType( int.class ) );
+
+ Declaration a = new Declaration( "a",
+ extractor,
+ columnA );
+ Declaration b = new Declaration( "b",
+ extractor,
+ columnB );
+
+ Map map = new HashMap();
+ map.put( "a",
+ a );
+ map.put( "b",
+ b );
+ declarationResolver.setDeclarations( map );
+ context.setDeclarationResolver( declarationResolver );
+
+ ReturnValueRestrictionDescr returnValueDescr = new ReturnValueRestrictionDescr("=");
+ returnValueDescr.setText( "a + b" );
+
+ MVELReturnValueBuilder builder = new MVELReturnValueBuilder();
+
+ List[] usedIdentifiers = new ArrayList[2];
+ List list = new ArrayList();
+ usedIdentifiers[1] = list;
+
+ Declaration[] previousDeclarations = new Declaration[]{a, b};
+ Declaration[] localDeclarations = new Declaration[]{};
+
+ final ReturnValueRestriction returnValue = new ReturnValueRestriction(extractor,
+ previousDeclarations,
+ localDeclarations,
+ ValueType.PINTEGER_TYPE.getEvaluator( Operator.EQUAL ) );
+
+ BuildUtils utils = new BuildUtils( new KnowledgeHelperFixer(),
+ new DeclarationTypeFixer(),
+ new JavaExprAnalyzer(),
+ null,
+ null,
+ null );
+
+ builder.build( context,
+ utils,
+ usedIdentifiers,
+ previousDeclarations,
+ localDeclarations,
+ returnValue,
+ returnValueDescr );
+
+ RuleBase ruleBase = RuleBaseFactory.newRuleBase();
+ InternalWorkingMemory wm = (InternalWorkingMemory) ruleBase.newWorkingMemory();
+
+ Cheese stilton = new Cheese( "stilton",
+ 10 );
+
+ Cheese cheddar = new Cheese( "cheddar",
+ 10 );
+ InternalFactHandle f0 = (InternalFactHandle) wm.assertObject( cheddar );
+ ReteTuple tuple = new ReteTuple( f0 );
+
+ InternalFactHandle f1 = (InternalFactHandle) wm.assertObject( stilton );
+ tuple = new ReteTuple( tuple, f1 );
+
+ PredicateContextEntry predicateContext = new PredicateContextEntry();
+ predicateContext.leftTuple = tuple;
+
+ Cheese brie = new Cheese( "brie",
+ 20 );
+ assertTrue( returnValue.isAllowed( extractor, brie, tuple, wm ) );
+
+ brie.setPrice( 18 );
+ assertFalse( returnValue.isAllowed( extractor, brie, tuple, wm ) );
+ }
+
+ public static class InstrumentedDeclarationScopeResolver extends DeclarationScopeResolver {
+ private Map declarations;
+
+ public InstrumentedDeclarationScopeResolver() {
+ super( null );
+ }
+
+ public void setDeclarations(Map map) {
+ this.declarations = map;
+ }
+
+ public Map getDeclarations() {
+ return this.declarations;
+ }
+ }
+
+ public static class InstrumentedBuildContent extends BuildContext {
+ private DeclarationScopeResolver declarationScopeResolver;
+
+ public InstrumentedBuildContent(Package pkg,
+ RuleDescr ruleDescr) {
+ super( pkg,
+ ruleDescr );
+ }
+
+ public void setDeclarationResolver(DeclarationScopeResolver declarationScopeResolver) {
+ this.declarationScopeResolver = declarationScopeResolver;
+ }
+
+ public DeclarationScopeResolver getDeclarationResolver() {
+ return this.declarationScopeResolver;
+ }
+
+ }
+
+}
More information about the jboss-svn-commits
mailing list