[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