[jboss-svn-commits] JBL Code SVN: r12156 - 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
Fri May 25 20:11:43 EDT 2007
Author: mark.proctor at jboss.com
Date: 2007-05-25 20:11:43 -0400 (Fri, 25 May 2007)
New Revision: 12156
Added:
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/SalienceBuilder.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELSalienceBuilder.java
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELSalienceBuilderTest.java
labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_salienceExpressionRule.drl
labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_salienceIntegerRule.drl
Removed:
labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/salience_rule_test.drl
Modified:
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/RuleDescr.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/RuleBuildContext.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/java/JavaDialect.java
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/compiler/PackageBuilderTest.java
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ExecutionFlowControlTest.java
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/java/RuleBuilderTest.java
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELConsequenceBuilderTest.java
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELEvalBuilderTest.java
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELPredicateBuilderTest.java
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELReturnValueBuilderTest.java
Log:
JBRULES-875 Dynamic salience
-MVEL is now integrated for dynamic salience expressions
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/RuleDescr.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/RuleDescr.java 2007-05-25 22:39:33 UTC (rev 12155)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/RuleDescr.java 2007-05-26 00:11:43 UTC (rev 12156)
@@ -34,6 +34,7 @@
private int consequencePattern;
private int offset;
private List attributes = Collections.EMPTY_LIST;
+ private String salience;
private String className;
@@ -50,8 +51,16 @@
public String getName() {
return this.name;
+ }
+
+ public String getSalience() {
+ return salience;
}
+ public void setSalience(String salience) {
+ this.salience = salience;
+ }
+
public String getClassName() {
return this.className;
}
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-25 22:39:33 UTC (rev 12155)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/Dialect.java 2007-05-26 00:11:43 UTC (rev 12156)
@@ -18,6 +18,8 @@
ClassFieldExtractorCache getClassFieldExtractorCache();
+ SalienceBuilder getSalienceBuilder();
+
PatternBuilder getPatternBuilder();
ConditionalElementBuilder getEvalBuilder();
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-05-25 22:39:33 UTC (rev 12155)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/RuleBuildContext.java 2007-05-26 00:11:43 UTC (rev 12156)
@@ -24,6 +24,7 @@
import java.util.Map;
import java.util.Stack;
+import org.drools.base.SalienceInteger;
import org.drools.base.evaluators.DateFactory;
import org.drools.compiler.DialectRegistry;
import org.drools.lang.descr.AttributeDescr;
@@ -33,6 +34,7 @@
import org.drools.rule.Query;
import org.drools.rule.Rule;
import org.drools.spi.DeclarationScopeResolver;
+import org.drools.spi.Salience;
/**
* A context for the current build
@@ -77,7 +79,7 @@
// a simple counter for generated names
private int counter;
-
+
private Dialect dialect;
/**
@@ -87,7 +89,7 @@
final RuleDescr ruleDescr,
final DialectRegistry registry) {
this.pkg = pkg;
-
+
this.methods = new ArrayList();
this.invokers = new HashMap();
this.invokerLookups = new HashMap();
@@ -103,18 +105,18 @@
} else {
this.rule = new Rule( ruleDescr.getName() );
}
-
+
// Assign attributes
setAttributes( this.rule,
+ ruleDescr,
ruleDescr.getAttributes() );
-
-
- String dialectName = ( this.rule.getDialect() != null ) ? this.rule.getDialect() : "default";
+
+ String dialectName = (this.rule.getDialect() != null) ? this.rule.getDialect() : "default";
this.dialect = registry.getDialect( dialectName );
-
+
this.dialect.init( ruleDescr );
}
-
+
public Dialect getDialect() {
return this.dialect;
}
@@ -250,13 +252,18 @@
* @param attributes
*/
public static void setAttributes(final Rule rule,
- final List attributes) {
+ final RuleDescr ruleDescr,
+ final List attributes) {
for ( final Iterator it = attributes.iterator(); it.hasNext(); ) {
final AttributeDescr attributeDescr = (AttributeDescr) it.next();
final String name = attributeDescr.getName();
if ( name.equals( "salience" ) ) {
- rule.setSalience( Integer.parseInt( attributeDescr.getValue() ) );
+ try {
+ ruleDescr.setSalience( attributeDescr.getValue() );
+ } catch ( Exception e ) {
+
+ }
} else if ( name.equals( "no-loop" ) ) {
if ( attributeDescr.getValue() == null ) {
rule.setNoLoop( true );
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-25 22:39:33 UTC (rev 12155)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/RuleBuilder.java 2007-05-26 00:11:43 UTC (rev 12156)
@@ -17,9 +17,11 @@
*/
import org.drools.RuntimeDroolsException;
+import org.drools.base.SalienceInteger;
import org.drools.lang.descr.QueryDescr;
import org.drools.lang.descr.RuleDescr;
import org.drools.rule.GroupElement;
+import org.drools.spi.Salience;
/**
* This builds the rule structure from an AST.
@@ -57,6 +59,19 @@
context.getDialect().getConsequenceBuilder().build( context );
}
+
+ String salienceText = context.getRuleDescr().getSalience();
+
+ try {
+ // First see if its an Integer
+ if ( salienceText != null && !salienceText.equals( "" )) {
+ Salience salience = new SalienceInteger( Integer.parseInt( salienceText ) );
+ context.getRule().setSalience( salience );
+ }
+ } catch (Exception e) {
+ // It wasn't an integer, so build as an expression
+ context.getDialect().getSalienceBuilder().build( context );
+ }
RuleClassBuilder classBuilder = context.getDialect().getRuleClassBuilder();
if ( classBuilder != null ) {
Added: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/SalienceBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/SalienceBuilder.java (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/SalienceBuilder.java 2007-05-26 00:11:43 UTC (rev 12156)
@@ -0,0 +1,5 @@
+package org.drools.rule.builder;
+
+public interface SalienceBuilder {
+ public void build(final RuleBuildContext context);
+}
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-25 22:39:33 UTC (rev 12155)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaDialect.java 2007-05-26 00:11:43 UTC (rev 12156)
@@ -55,7 +55,9 @@
import org.drools.rule.builder.ReturnValueBuilder;
import org.drools.rule.builder.RuleBuildContext;
import org.drools.rule.builder.RuleClassBuilder;
+import org.drools.rule.builder.SalienceBuilder;
import org.drools.rule.builder.dialect.mvel.MVELFromBuilder;
+import org.drools.rule.builder.dialect.mvel.MVELSalienceBuilder;
import org.eclipse.jdt.internal.compiler.impl.CompilerOptions;
public class JavaDialect
@@ -64,6 +66,7 @@
// builders
private final PatternBuilder pattern = new PatternBuilder( this );
+ private final SalienceBuilder salience = new MVELSalienceBuilder();
private final JavaAccumulateBuilder accumulate = new JavaAccumulateBuilder();
private final JavaEvalBuilder eval = new JavaEvalBuilder();
private final JavaPredicateBuilder predicate = new JavaPredicateBuilder();
@@ -122,7 +125,7 @@
// statically adding all builders to the map
// but in the future we can move that to a configuration
// if we want to
- this.builders = new HashMap();
+ this.builders = new HashMap();
this.builders.put( CollectDescr.class,
new CollectBuilder() );
@@ -263,6 +266,10 @@
public PatternBuilder getPatternBuilder() {
return this.pattern;
}
+
+ public SalienceBuilder getSalienceBuilder() {
+ return this.salience;
+ }
public AccumulateBuilder getAccumulateBuilder() {
return this.accumulate;
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-25 22:39:33 UTC (rev 12155)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELDialect.java 2007-05-26 00:11:43 UTC (rev 12156)
@@ -38,6 +38,7 @@
import org.drools.rule.builder.ReturnValueBuilder;
import org.drools.rule.builder.RuleBuildContext;
import org.drools.rule.builder.RuleClassBuilder;
+import org.drools.rule.builder.SalienceBuilder;
import org.drools.rule.builder.dialect.java.DeclarationTypeFixer;
import org.drools.rule.builder.dialect.java.JavaAccumulateBuilder;
import org.drools.rule.builder.dialect.java.JavaConsequenceBuilder;
@@ -55,9 +56,10 @@
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 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();
@@ -70,8 +72,8 @@
private final TypeResolver typeResolver;
private final ClassFieldExtractorCache classFieldExtractorCache;
- private final MVELExprAnalyzer analyzer;
-
+ private final MVELExprAnalyzer analyzer;
+
public void addFunction(FunctionDescr functionDescr,
TypeResolver typeResolver) {
throw new UnsupportedOperationException( "MVEL does not support functions" );
@@ -93,7 +95,7 @@
this.classFieldExtractorCache = classFieldExtractorCache;
this.analyzer = new MVELExprAnalyzer();
-
+
if ( pkg != null ) {
init( pkg );
}
@@ -127,8 +129,8 @@
this.builders.put( FromDescr.class,
getFromBuilder() );
-// this.builders.put( AccumulateDescr.class,
-// getAccumulateBuilder() );
+ // this.builders.put( AccumulateDescr.class,
+ // getAccumulateBuilder() );
this.builders.put( EvalDescr.class,
getEvalBuilder() );
@@ -144,12 +146,12 @@
}
public void addRule(RuleBuildContext context) {
-
+
}
public void compileAll() {
}
-
+
public List[] getExpressionIdentifiers(RuleBuildContext context,
BaseDescr descr,
Object content) {
@@ -163,8 +165,8 @@
null,
"Unable to determine the used declarations" ) );
}
- return usedIdentifiers;
- }
+ return usedIdentifiers;
+ }
public List[] getBlockIdentifiers(RuleBuildContext context,
BaseDescr descr,
@@ -179,7 +181,7 @@
null,
"Unable to determine the used declarations" ) );
}
- return usedIdentifiers;
+ return usedIdentifiers;
}
public Object getBuilder(final Class clazz) {
@@ -199,7 +201,7 @@
}
public AccumulateBuilder getAccumulateBuilder() {
- throw new UnsupportedOperationException("MVEL does not yet support accumuate");
+ throw new UnsupportedOperationException( "MVEL does not yet support accumuate" );
}
public ConsequenceBuilder getConsequenceBuilder() {
@@ -218,6 +220,10 @@
return this.predicate;
}
+ public SalienceBuilder getSalienceBuilder() {
+ return this.salience;
+ }
+
public List getResults() {
return null;
}
Added: 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 (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELSalienceBuilder.java 2007-05-26 00:11:43 UTC (rev 12156)
@@ -0,0 +1,27 @@
+package org.drools.rule.builder.dialect.mvel;
+
+import java.io.Serializable;
+
+import org.drools.base.mvel.DroolsMVELFactory;
+import org.drools.base.mvel.MVELConsequence;
+import org.drools.base.mvel.MVELSalienceExpression;
+import org.drools.rule.builder.RuleBuildContext;
+import org.drools.rule.builder.SalienceBuilder;
+import org.mvel.MVEL;
+
+public class MVELSalienceBuilder implements SalienceBuilder {
+
+ public void build(RuleBuildContext context) {
+ // pushing consequence LHS into the stack for variable resolution
+ context.getBuildStack().push( context.getRule().getLhs() );
+
+ final DroolsMVELFactory factory = new DroolsMVELFactory(context.getDeclarationResolver().getDeclarations(), null, context.getPkg().getGlobals());
+
+ final Serializable expr = MVEL.compileExpression( (String) context.getRuleDescr().getSalience() );
+
+ MVELSalienceExpression salience = new MVELSalienceExpression(expr, factory);
+
+ context.getRule().setSalience( salience );
+ }
+
+}
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-05-25 22:39:33 UTC (rev 12155)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/compiler/PackageBuilderTest.java 2007-05-26 00:11:43 UTC (rev 12156)
@@ -162,6 +162,7 @@
final Tuple tuple = new MockTuple( new HashMap() );
final Activation activation = new MockActivation( rule,
+ 0,
rule.getLhs(),
tuple );
@@ -240,6 +241,7 @@
final Tuple tuple = new MockTuple( new HashMap() );
final Activation activation = new MockActivation( newRule,
+ 0,
newRule.getLhs(),
tuple );
@@ -1122,13 +1124,16 @@
implements
Activation {
private Rule rule;
+ private int salience;
private final GroupElement subrule;
private Tuple tuple;
public MockActivation(final Rule rule,
+ int salience,
final GroupElement subrule,
final Tuple tuple) {
this.rule = rule;
+ this.salience = salience;
this.tuple = tuple;
this.subrule = subrule;
}
@@ -1136,6 +1141,10 @@
public Rule getRule() {
return this.rule;
}
+
+ public int getSalience() {
+ return this.salience;
+ }
public Tuple getTuple() {
return this.tuple;
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ExecutionFlowControlTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ExecutionFlowControlTest.java 2007-05-25 22:39:33 UTC (rev 12155)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ExecutionFlowControlTest.java 2007-05-26 00:11:43 UTC (rev 12156)
@@ -49,9 +49,9 @@
config );
}
- public void testSalience() throws Exception {
+ public void testSalienceInteger() throws Exception {
final PackageBuilder builder = new PackageBuilder();
- builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "salience_rule_test.drl" ) ) );
+ builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_salienceIntegerRule.drl" ) ) );
final Package pkg = builder.getPackage();
final RuleBase ruleBase = getRuleBase();
@@ -77,9 +77,44 @@
Assert.assertEquals( "Rule 2 should have been fired second",
"Rule 2",
list.get( 1 ) );
-
}
+
+ public void testSalienceExpression() throws Exception {
+ final PackageBuilder builder = new PackageBuilder();
+ builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_salienceExpressionRule.drl" ) ) );
+ final Package pkg = builder.getPackage();
+ final RuleBase ruleBase = getRuleBase();
+ ruleBase.addPackage( pkg );
+ final WorkingMemory workingMemory = ruleBase.newStatefulSession();
+
+ final List list = new ArrayList();
+ workingMemory.setGlobal( "list",
+ list );
+
+ final PersonInterface person10 = new Person( "bob",
+ "cheese",
+ 10);
+ workingMemory.assertObject( person10 );
+
+ final PersonInterface person20 = new Person( "mic",
+ "cheese",
+ 20);
+ workingMemory.assertObject( person20 );
+
+ workingMemory.fireAllRules();
+
+ Assert.assertEquals( "Two rules should have been fired",
+ 2,
+ list.size() );
+ Assert.assertEquals( "Rule 3 should have been fired first",
+ "Rule 3",
+ list.get( 0 ) );
+ Assert.assertEquals( "Rule 2 should have been fired second",
+ "Rule 2",
+ list.get( 1 ) );
+ }
+
public void testNoLoop() throws Exception {
final PackageBuilder builder = new PackageBuilder();
builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "no-loop.drl" ) ) );
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-05-25 22:39:33 UTC (rev 12155)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/java/RuleBuilderTest.java 2007-05-26 00:11:43 UTC (rev 12156)
@@ -138,9 +138,9 @@
attributes.add( new AttributeDescr( "ruleflow-group",
"mygroup" ) );
- RuleBuildContext.setAttributes( rule, attributes );
+ RuleBuildContext.setAttributes( rule, null, attributes );
- assertTrue( rule.getNoLoop() );
+ assertTrue( rule.isNoLoop() );
assertFalse( rule.isEffective() );
assertEquals( "mygroup",
rule.getRuleFlowGroup() );
@@ -153,7 +153,7 @@
rule = new Rule( "myrule" );
- RuleBuildContext.setAttributes( rule, attributes );
+ RuleBuildContext.setAttributes( rule, null, attributes );
final Field eff = rule.getClass().getDeclaredField( "dateEffective" );
eff.setAccessible( true );
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-05-25 22:39:33 UTC (rev 12155)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELConsequenceBuilderTest.java 2007-05-26 00:11:43 UTC (rev 12156)
@@ -38,12 +38,12 @@
final RuleDescr ruleDescr = new RuleDescr( "rule 1" );
ruleDescr.setConsequence( "cheese.setPrice( 5 );" );
- DialectRegistry registry = new DialectRegistry();
+ DialectRegistry registry = new DialectRegistry();
registry.addDialect( "default",
- new JavaDialect( pkg,
- new PackageBuilderConfiguration(),
- new ClassTypeResolver(),
- new ClassFieldExtractorCache() ) );
+ new MVELDialect( pkg,
+ new PackageBuilderConfiguration(),
+ new ClassTypeResolver(),
+ new ClassFieldExtractorCache() ) );
final InstrumentedBuildContent context = new InstrumentedBuildContent( pkg,
ruleDescr,
registry );
@@ -53,13 +53,13 @@
final ObjectType cheeseObjeectType = new ClassObjectType( Cheese.class );
final Pattern pattern = new Pattern( 0,
- cheeseObjeectType );
+ cheeseObjeectType );
final PatternExtractor extractor = new PatternExtractor( cheeseObjeectType );
final Declaration declaration = new Declaration( "cheese",
- extractor,
- pattern );
+ extractor,
+ pattern );
final Map map = new HashMap();
map.put( "cheese",
declaration );
@@ -73,24 +73,25 @@
final WorkingMemory wm = ruleBase.newStatefulSession();
final Cheese cheddar = new Cheese( "cheddar",
- 10 );
+ 10 );
final InternalFactHandle f0 = (InternalFactHandle) wm.assertObject( cheddar );
final ReteTuple tuple = new ReteTuple( f0 );
final AgendaItem item = new AgendaItem( 0,
- tuple,
- null,
- context.getRule(),
- null );
+ tuple,
+ 10,
+ null,
+ context.getRule(),
+ null );
final DefaultKnowledgeHelper kbHelper = new DefaultKnowledgeHelper( item,
- wm );
+ wm );
context.getRule().getConsequence().evaluate( kbHelper,
wm );
assertEquals( 5,
cheddar.getPrice() );
}
-
+
/**
* Just like MVEL command line, we can allow expressions to span lines, with optional ";"
* seperating expressions. If its needed a ";" can be thrown in, but if not, a new line is fine.
@@ -100,20 +101,23 @@
* @throws Exception
*/
public void testLineSpanOptionalSemis() throws Exception {
-
+
String simpleEx = "foo\nbar\nbaz";
MVELConsequenceBuilder cons = new MVELConsequenceBuilder();
- assertEquals("foo;\nbar;\nbaz", cons.delimitExpressions(simpleEx));
-
+ assertEquals( "foo;\nbar;\nbaz",
+ cons.delimitExpressions( simpleEx ) );
+
String ex = "foo (\n bar \n)\nbar;\nyeah;\nman\nbaby";
- assertEquals("foo (\n bar \n);\nbar;\nyeah;\nman;\nbaby", cons.delimitExpressions(ex));
+ assertEquals( "foo (\n bar \n);\nbar;\nyeah;\nman;\nbaby",
+ cons.delimitExpressions( ex ) );
ex = "foo {\n bar \n}\nbar; \nyeah;\nman\nbaby";
- assertEquals("foo {\n bar \n};\nbar; \nyeah;\nman;\nbaby", cons.delimitExpressions(ex));
+ assertEquals( "foo {\n bar \n};\nbar; \nyeah;\nman;\nbaby",
+ cons.delimitExpressions( ex ) );
ex = "foo [\n bar \n]\nbar; x\nyeah();\nman[42]\nbaby;ca chiga;\nend";
- assertEquals("foo [\n bar \n];\nbar; x;\nyeah();\nman[42];\nbaby;ca chiga;\nend", cons.delimitExpressions(ex));
+ assertEquals( "foo [\n bar \n];\nbar; x;\nyeah();\nman[42];\nbaby;ca chiga;\nend",
+ cons.delimitExpressions( ex ) );
-
}
}
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-05-25 22:39:33 UTC (rev 12155)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELEvalBuilderTest.java 2007-05-26 00:11:43 UTC (rev 12156)
@@ -38,16 +38,16 @@
final Package pkg = new Package( "pkg1" );
final RuleDescr ruleDescr = new RuleDescr( "rule 1" );
- DialectRegistry registry = new DialectRegistry();
+ DialectRegistry registry = new DialectRegistry();
registry.addDialect( "default",
- new JavaDialect( pkg,
- new PackageBuilderConfiguration(),
- new ClassTypeResolver(),
- new ClassFieldExtractorCache() ) );
+ new MVELDialect( pkg,
+ new PackageBuilderConfiguration(),
+ new ClassTypeResolver(),
+ new ClassFieldExtractorCache() ) );
final InstrumentedBuildContent context = new InstrumentedBuildContent( pkg,
ruleDescr,
registry );
-
+
final InstrumentedDeclarationScopeResolver declarationResolver = new InstrumentedDeclarationScopeResolver();
final FieldExtractor extractor = new ClassFieldExtractor( Cheese.class,
"price" );
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-05-25 22:39:33 UTC (rev 12155)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELPredicateBuilderTest.java 2007-05-26 00:11:43 UTC (rev 12156)
@@ -43,7 +43,7 @@
DialectRegistry registry = new DialectRegistry();
registry.addDialect( "default",
- new JavaDialect( pkg,
+ new MVELDialect( pkg,
new PackageBuilderConfiguration(),
new ClassTypeResolver(),
new ClassFieldExtractorCache() ) );
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-05-25 22:39:33 UTC (rev 12155)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELReturnValueBuilderTest.java 2007-05-26 00:11:43 UTC (rev 12156)
@@ -45,12 +45,12 @@
final Package pkg = new Package( "pkg1" );
final RuleDescr ruleDescr = new RuleDescr( "rule 1" );
- DialectRegistry registry = new DialectRegistry();
+ DialectRegistry registry = new DialectRegistry();
registry.addDialect( "default",
- new JavaDialect( pkg,
- new PackageBuilderConfiguration(),
- new ClassTypeResolver(),
- new ClassFieldExtractorCache() ) );
+ new MVELDialect( pkg,
+ new PackageBuilderConfiguration(),
+ new ClassTypeResolver(),
+ new ClassFieldExtractorCache() ) );
final InstrumentedBuildContent context = new InstrumentedBuildContent( pkg,
ruleDescr,
registry );
Added: 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 (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELSalienceBuilderTest.java 2007-05-26 00:11:43 UTC (rev 12156)
@@ -0,0 +1,97 @@
+package org.drools.rule.builder.dialect.mvel;
+
+import java.io.Serializable;
+import java.util.HashMap;
+import java.util.Map;
+
+import junit.framework.TestCase;
+
+import org.drools.Cheese;
+import org.drools.Person;
+import org.drools.RuleBase;
+import org.drools.RuleBaseFactory;
+import org.drools.StatefulSession;
+import org.drools.WorkingMemory;
+import org.drools.base.ClassFieldExtractorCache;
+import org.drools.base.ClassObjectType;
+import org.drools.base.ClassTypeResolver;
+import org.drools.base.DefaultKnowledgeHelper;
+import org.drools.base.mvel.DroolsMVELFactory;
+import org.drools.base.mvel.MVELSalienceExpression;
+import org.drools.common.AgendaItem;
+import org.drools.common.InternalFactHandle;
+import org.drools.compiler.DialectRegistry;
+import org.drools.compiler.PackageBuilderConfiguration;
+import org.drools.lang.descr.RuleDescr;
+import org.drools.reteoo.ReteTuple;
+import org.drools.rule.Declaration;
+import org.drools.rule.Package;
+import org.drools.rule.Pattern;
+import org.drools.rule.builder.SalienceBuilder;
+import org.drools.rule.builder.dialect.java.JavaDialect;
+import org.drools.spi.ObjectType;
+import org.drools.spi.PatternExtractor;
+import org.mvel.MVEL;
+
+public class MVELSalienceBuilderTest extends TestCase {
+ public void test1() {
+// StatefulSession session = RuleBaseFactory.newRuleBase().newStatefulSession();
+//
+// InternalFactHandle handle = ( InternalFactHandle ) session.assertObject( new Person("mark", 31) );
+// ReteTuple tuple = new ReteTuple(handle);
+//
+// final Serializable expr = MVEL.compileExpression( "p.age * 2" );
+//
+// final DroolsMVELFactory factory = new DroolsMVELFactory();
+// factory.setPreviousDeclarationMap( context.getDeclarationResolver().getDeclarations() );
+// factory.setGlobalsMap( context.getPkg().getGlobals() );
+//
+// new MVELExpressionSalience(expr);
+
+ final Package pkg = new Package( "pkg1" );
+ final RuleDescr ruleDescr = new RuleDescr( "rule 1" );
+ ruleDescr.setSalience( "p.age + 20" );
+ ruleDescr.setConsequence( "" );
+
+ DialectRegistry registry = new DialectRegistry();
+ registry.addDialect( "default",
+ new MVELDialect( pkg,
+ new PackageBuilderConfiguration(),
+ new ClassTypeResolver(),
+ new ClassFieldExtractorCache() ) );
+ final InstrumentedBuildContent context = new InstrumentedBuildContent( pkg,
+ ruleDescr,
+ registry );
+
+ final InstrumentedDeclarationScopeResolver declarationResolver = new InstrumentedDeclarationScopeResolver();
+
+ final ObjectType personObjeectType = new ClassObjectType( Person.class );
+
+ final Pattern pattern = new Pattern( 0,
+ personObjeectType );
+
+ final PatternExtractor extractor = new PatternExtractor( personObjeectType );
+
+ final Declaration declaration = new Declaration( "p",
+ extractor,
+ pattern );
+ final Map map = new HashMap();
+ map.put( "p",
+ declaration );
+ declarationResolver.setDeclarations( map );
+ context.setDeclarationResolver( declarationResolver );
+
+ final RuleBase ruleBase = RuleBaseFactory.newRuleBase();
+ final WorkingMemory wm = ruleBase.newStatefulSession();
+
+ final Person p = new Person("mark", "", 31);
+ final InternalFactHandle f0 = (InternalFactHandle) wm.assertObject( p );
+ final ReteTuple tuple = new ReteTuple( f0 );
+
+ SalienceBuilder salienceBuilder = new MVELSalienceBuilder();
+ salienceBuilder.build( context );
+
+ assertEquals( 51, context.getRule().getSalience().getValue( tuple, wm ) );
+
+ }
+}
Deleted: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/salience_rule_test.drl
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/salience_rule_test.drl 2007-05-25 22:39:33 UTC (rev 12155)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/salience_rule_test.drl 2007-05-26 00:11:43 UTC (rev 12156)
@@ -1,34 +0,0 @@
-package org.drools.test
-
-import org.drools.Person
-
-global java.util.List list
-
-# this rule shall never fire, since person will be retracted
-# by rule 2 that has a higher salience and will fire before rule 1
-rule "Salience rule 1"
- when
- Person( )
- then
- list.add( "Rule 1" );
-end
-
-# this rule shall fire second, since rule 3 has higher salience
-rule "Salience rule 2"
- salience 10
- when
- person: Person( )
- then
- list.add( "Rule 2" );
- retract(person);
-end
-
-# this rule shall fire first since it has the higher salience
-rule "Salience rule 3"
- salience 20
- when
- Person( )
- then
- list.add( "Rule 3" );
-end
-
Added: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_salienceExpressionRule.drl
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_salienceExpressionRule.drl (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_salienceExpressionRule.drl 2007-05-26 00:11:43 UTC (rev 12156)
@@ -0,0 +1,35 @@
+package org.drools.test
+
+import org.drools.Person
+
+global java.util.List list
+
+# this rule shall never fire, since person will be retracted
+# by rule 2 that has a higher salience and will fire before rule 1
+rule "Salience rule 1"
+ when
+ Person( )
+ then
+ list.add( "Rule 1" );
+end
+
+# this rule shall fire second, since rule 3 has higher salience
+rule "Salience rule 2"
+ salience (p.age * 2)
+ when
+ p : Person( name == "bob" )
+ then
+ list.add( "Rule 2" );
+ retract( p );
+end
+
+# this rule shall fire first since it has the higher salience
+rule "Salience rule 3"
+ salience (p.age * 2)
+ when
+ p : Person( name == "mic")
+ then
+ list.add( "Rule 3" );
+ retract( p );
+end
+
Copied: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_salienceIntegerRule.drl (from rev 12153, labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/salience_rule_test.drl)
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_salienceIntegerRule.drl (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_salienceIntegerRule.drl 2007-05-26 00:11:43 UTC (rev 12156)
@@ -0,0 +1,34 @@
+package org.drools.test
+
+import org.drools.Person
+
+global java.util.List list
+
+# this rule shall never fire, since person will be retracted
+# by rule 2 that has a higher salience and will fire before rule 1
+rule "Salience rule 1"
+ when
+ Person( )
+ then
+ list.add( "Rule 1" );
+end
+
+# this rule shall fire second, since rule 3 has higher salience
+rule "Salience rule 2"
+ salience 10
+ when
+ person: Person( )
+ then
+ list.add( "Rule 2" );
+ retract(person);
+end
+
+# this rule shall fire first since it has the higher salience
+rule "Salience rule 3"
+ salience 20
+ when
+ Person( )
+ then
+ list.add( "Rule 3" );
+end
+
More information about the jboss-svn-commits
mailing list