[jboss-svn-commits] JBL Code SVN: r24737 - in labs/jbossrules/trunk: drools-compiler/src/main/java/org/drools/compiler and 14 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu Jan 15 11:35:24 EST 2009


Author: tirelli
Date: 2009-01-15 11:35:23 -0500 (Thu, 15 Jan 2009)
New Revision: 24737

Modified:
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/PackageBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DrlDumper.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/PackageDescr.java
   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/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/mvel/MVELDialect.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/XmlDumper.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/lang/RuleParserTest.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/lang/descr/PackageDescrTest.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/MVELSalienceBuilderTest.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/xml/rules/XmlPackageReaderTest.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/MVELCompilationUnit.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/PatternBuilder.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/Constraint.java
   labs/jbossrules/trunk/pom.xml
Log:
JBRULES-1918: upgrading to MVEL 2.0.6. Refactoring and fixing attribute parsing/compilation

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	2009-01-15 15:46:58 UTC (rev 24736)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/PackageBuilder.java	2009-01-15 16:35:23 UTC (rev 24737)
@@ -628,7 +628,7 @@
                     ruleDescr.setNamespace( this.defaultNamespace );
                 }
                 if ( isEmpty( ruleDescr.getDialect() ) ) {
-                    ruleDescr.setDialect( pkgRegistry.getDialect() );
+                    ruleDescr.addAttribute( new AttributeDescr( "dialect", pkgRegistry.getDialect() ) );
                 }
                 addRule( ruleDescr );
             }
@@ -1145,13 +1145,8 @@
     }
 
     private void addRule(final RuleDescr ruleDescr) {
-        // this.dialect.init( ruleDescr );
         ruleDescr.setResource( resource );
 
-        if ( ruleDescr instanceof QueryDescr ) {
-            // ruleDescr.getLhs().insertDescr( 0, baseDescr );
-        }
-
         PackageRegistry pkgRegistry = this.pkgRegistryMap.get( ruleDescr.getNamespace() );
 
         DialectCompiletimeRegistry ctr = pkgRegistry.getDialectCompiletimeRegistry();

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DrlDumper.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DrlDumper.java	2009-01-15 15:46:58 UTC (rev 24736)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DrlDumper.java	2009-01-15 16:35:23 UTC (rev 24737)
@@ -16,6 +16,7 @@
  * limitations under the License.
  */
 
+import java.util.Collection;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
@@ -322,7 +323,7 @@
 
         	final RuleDescr ruleDescr = (RuleDescr) ruleobj;
             String rule = "rule \"" + ruleDescr.getName() + "\" " + DrlDumper.eol;
-            final String attribute = processAttribute( ruleDescr.getAttributes() );
+            final String attribute = processAttribute( ruleDescr.getAttributes().values() );
             String lhs = "";
             if ( !ruleDescr.getLhs().getDescrs().isEmpty() ) {
                 lhs = "\t when" + DrlDumper.eol + processDescrList( ruleDescr.getLhs().getDescrs() ) + DrlDumper.eol;
@@ -453,11 +454,10 @@
         return functionList + DrlDumper.eol;
     }
 
-    private String processAttribute(final List attributes) {
+    private String processAttribute(final Collection<AttributeDescr> attributes) {
 
         String attributeList = "";
-        for ( final Iterator it = attributes.iterator(); it.hasNext(); ) {
-            final AttributeDescr attributeDescr = (AttributeDescr) it.next();
+        for ( final AttributeDescr attributeDescr : attributes) {
             visit( attributeDescr );
             attributeList += this.template;
         }

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/PackageDescr.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/PackageDescr.java	2009-01-15 15:46:58 UTC (rev 24736)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/PackageDescr.java	2009-01-15 16:35:23 UTC (rev 24737)
@@ -21,27 +21,28 @@
 import java.io.ObjectOutput;
 import java.util.ArrayList;
 import java.util.Collections;
-import java.util.Iterator;
 import java.util.List;
 
 import org.drools.rule.Namespaceable;
 
-public class PackageDescr extends BaseDescr implements Namespaceable {
+public class PackageDescr extends BaseDescr
+    implements
+    Namespaceable {
     /**
      *
      */
-    private static final long serialVersionUID = 400L;
-    private String      namespace;
-    private String      documentation;
+    private static final long          serialVersionUID = 400L;
+    private String                     namespace;
+    private String                     documentation;
 
-    private List              imports          = Collections.EMPTY_LIST;
-    private List              functionImports  = Collections.EMPTY_LIST;
-    private List              attributes       = Collections.EMPTY_LIST;
-    private List              globals          = Collections.EMPTY_LIST;
-    private List              factTemplates    = Collections.EMPTY_LIST;
-    private List              functions        = Collections.EMPTY_LIST;
-    private List              rules            = Collections.EMPTY_LIST;
-    private List<TypeDeclarationDescr> typeDeclarations     = Collections.emptyList();
+    private List<ImportDescr>          imports          = Collections.emptyList();
+    private List<FunctionImportDescr>  functionImports  = Collections.emptyList();
+    private List<AttributeDescr>       attributes       = Collections.emptyList();
+    private List<GlobalDescr>          globals          = Collections.emptyList();
+    private List<FactTemplateDescr>    factTemplates    = Collections.emptyList();
+    private List<FunctionDescr>        functions        = Collections.emptyList();
+    private List<RuleDescr>            rules            = Collections.emptyList();
+    private List<TypeDeclarationDescr> typeDeclarations = Collections.emptyList();
 
     public PackageDescr() {
     }
@@ -57,36 +58,38 @@
         this.documentation = documentation;
     }
 
-    public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
-        super.readExternal(in);
-        namespace    = (String)in.readUTF();
-        documentation   = (String)in.readUTF();
-        imports    = (List)in.readObject();
-        functionImports    = (List)in.readObject();
-        attributes    = (List)in.readObject();
-        globals    = (List)in.readObject();
-        factTemplates    = (List)in.readObject();
-        functions    = (List)in.readObject();
-        rules    = (List)in.readObject();
+    @SuppressWarnings("unchecked")
+    public void readExternal(ObjectInput in) throws IOException,
+                                            ClassNotFoundException {
+        super.readExternal( in );
+        namespace = (String) in.readUTF();
+        documentation = (String) in.readUTF();
+        imports = (List<ImportDescr>) in.readObject();
+        functionImports = (List<FunctionImportDescr>) in.readObject();
+        attributes = (List<AttributeDescr>) in.readObject();
+        globals = (List<GlobalDescr>) in.readObject();
+        factTemplates = (List<FactTemplateDescr>) in.readObject();
+        functions = (List<FunctionDescr>) in.readObject();
+        rules = (List<RuleDescr>) in.readObject();
     }
 
     public void writeExternal(ObjectOutput out) throws IOException {
-        super.writeExternal(out);
-        out.writeUTF(namespace);
-        out.writeUTF(documentation);
-        out.writeObject(imports);
-        out.writeObject(functionImports);
-        out.writeObject(attributes);
-        out.writeObject(globals);
-        out.writeObject(factTemplates);
-        out.writeObject(functions);
-        out.writeObject(rules);
-    }        
-    
+        super.writeExternal( out );
+        out.writeUTF( namespace );
+        out.writeUTF( documentation );
+        out.writeObject( imports );
+        out.writeObject( functionImports );
+        out.writeObject( attributes );
+        out.writeObject( globals );
+        out.writeObject( factTemplates );
+        out.writeObject( functions );
+        out.writeObject( rules );
+    }
+
     public String getNamespace() {
         return this.namespace;
     }
-    
+
     public void setNamespace(String namespace) {
         this.namespace = namespace;
     }
@@ -101,40 +104,40 @@
 
     public void addImport(final ImportDescr importEntry) {
         if ( this.imports == Collections.EMPTY_LIST ) {
-            this.imports = new ArrayList();
+            this.imports = new ArrayList<ImportDescr>();
         }
         this.imports.add( importEntry );
     }
 
-    public List getImports() {
+    public List<ImportDescr> getImports() {
         return this.imports;
     }
 
     public void addFunctionImport(final FunctionImportDescr importFunction) {
         if ( this.functionImports == Collections.EMPTY_LIST ) {
-            this.functionImports = new ArrayList();
+            this.functionImports = new ArrayList<FunctionImportDescr>();
         }
         this.functionImports.add( importFunction );
     }
 
-    public List getFunctionImports() {
+    public List<FunctionImportDescr> getFunctionImports() {
         return this.functionImports;
     }
 
     public void addGlobal(final GlobalDescr global) {
         if ( this.globals == Collections.EMPTY_LIST ) {
-            this.globals = new ArrayList();
+            this.globals = new ArrayList<GlobalDescr>();
         }
         this.globals.add( global );
     }
 
-    public List getGlobals() {
+    public List<GlobalDescr> getGlobals() {
         return this.globals;
     }
 
     public void addAttribute(final AttributeDescr attribute) {
         if ( this.attributes == Collections.EMPTY_LIST ) {
-            this.attributes = new ArrayList();
+            this.attributes = new ArrayList<AttributeDescr>();
         }
         this.attributes.add( attribute );
     }
@@ -145,18 +148,18 @@
 
     public void addFactTemplate(final FactTemplateDescr factTemplate) {
         if ( this.factTemplates == Collections.EMPTY_LIST ) {
-            this.factTemplates = new ArrayList( 1 );
+            this.factTemplates = new ArrayList<FactTemplateDescr>( 1 );
         }
         this.factTemplates.add( factTemplate );
     }
 
-    public List getFactTemplates() {
+    public List<FactTemplateDescr> getFactTemplates() {
         return this.factTemplates;
     }
 
     public void addFunction(final FunctionDescr function) {
         if ( this.functions == Collections.EMPTY_LIST ) {
-            this.functions = new ArrayList( 1 );
+            this.functions = new ArrayList<FunctionDescr>( 1 );
         }
         this.functions.add( function );
     }
@@ -167,19 +170,12 @@
 
     public void addRule(final RuleDescr rule) {
         if ( this.rules == Collections.EMPTY_LIST ) {
-            this.rules = new ArrayList( 1 );
+            this.rules = new ArrayList<RuleDescr>( 1 );
         }
-        for ( Iterator iter = attributes.iterator(); iter.hasNext(); ) {
-            AttributeDescr at = (AttributeDescr) iter.next();
-            boolean overridden = false;
-            //check for attr in rule
-            for ( Iterator iterator = rule.getAttributes().iterator(); iterator.hasNext(); ) {
-                AttributeDescr ruleAt = (AttributeDescr) iterator.next();
-                if (ruleAt.getName().equals( at.getName() )) {
-                    overridden = true;
-                }
-            }
-            if (!overridden) {
+        for ( final AttributeDescr at : attributes ) {
+            // check if rule overrides the attribute
+            if ( !rule.getAttributes().containsKey( at.getName() ) ) {
+                // if not, use default value
                 rule.addAttribute( at );
             }
         }
@@ -196,7 +192,7 @@
         }
         this.typeDeclarations.add( declaration );
     }
-    
+
     public List<TypeDeclarationDescr> getTypeDeclarations() {
         return this.typeDeclarations;
     }

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	2009-01-15 15:46:58 UTC (rev 24736)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/RuleDescr.java	2009-01-15 16:35:23 UTC (rev 24737)
@@ -19,10 +19,9 @@
 import java.io.IOException;
 import java.io.ObjectInput;
 import java.io.ObjectOutput;
-import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
-import java.util.List;
+import java.util.LinkedHashMap;
 import java.util.Map;
 
 import org.drools.io.Resource;
@@ -34,26 +33,24 @@
     Dialectable,
     Namespaceable {
 
-    private static final long    serialVersionUID = 400L;
-    private String               namespace;
-    private String               name;
-    private String 				 parentName;
-    private String               dialect;
-    private String               documentation;
-    private Map<String, String>  metaAttributes;
+    private static final long           serialVersionUID = 400L;
+    private String                      namespace;
+    private String                      name;
+    private String                      parentName;
+    private String                      documentation;
+    private Map<String, String>         metaAttributes;
+    private Map<String, AttributeDescr> attributes;
 
-    private AndDescr             lhs;
-    private Object               consequence;
-    private int                  consequenceLine;
-    private int                  consequencePattern;
-    private int                  offset;
-    private List<AttributeDescr> attributes       = Collections.EMPTY_LIST;
-    private String               salience;
+    private AndDescr                    lhs;
+    private Object                      consequence;
+    private int                         consequenceLine;
+    private int                         consequencePattern;
+    private int                         offset;
 
-    private String               className;
-    
-    private Resource             resource;
+    private String                      className;
 
+    private Resource                    resource;
+
     public RuleDescr() {
     }
 
@@ -66,26 +63,26 @@
                      final String documentation) {
         this.name = ruleName;
         this.documentation = documentation;
-        this.metaAttributes = new HashMap<String, String>();
+        this.metaAttributes = new LinkedHashMap<String, String>();
+        this.attributes = new LinkedHashMap<String, AttributeDescr>();
     }
 
+    @SuppressWarnings("unchecked")
     public void readExternal(ObjectInput in) throws IOException,
                                             ClassNotFoundException {
         super.readExternal( in );
         namespace = (String) in.readObject();
         name = (String) in.readObject();
         parentName = (String) in.readObject();
-        dialect = (String) in.readObject();
         documentation = (String) in.readObject();
         consequence = in.readObject();
         lhs = (AndDescr) in.readObject();
         consequenceLine = in.readInt();
         consequencePattern = in.readInt();
         offset = in.readInt();
-        attributes = (List<AttributeDescr>) in.readObject();
-        salience = (String) in.readObject();
+        attributes = (Map<String, AttributeDescr>) in.readObject();
         className = (String) in.readObject();
-        resource = ( Resource ) in.readObject();
+        resource = (Resource) in.readObject();
     }
 
     public void writeExternal(ObjectOutput out) throws IOException {
@@ -93,7 +90,6 @@
         out.writeObject( namespace );
         out.writeObject( name );
         out.writeObject( parentName );
-        out.writeObject( dialect );
         out.writeObject( documentation );
         out.writeObject( consequence );
         out.writeObject( lhs );
@@ -101,7 +97,6 @@
         out.writeInt( consequencePattern );
         out.writeInt( offset );
         out.writeObject( attributes );
-        out.writeObject( salience );
         out.writeObject( className );
         out.writeObject( resource );
     }
@@ -112,7 +107,7 @@
 
     public String getNamespace() {
         return this.namespace;
-    }        
+    }
 
     public Resource getResource() {
         return resource;
@@ -127,21 +122,15 @@
     }
 
     public String getDialect() {
-        return this.dialect;
+        AttributeDescr dialect = this.attributes.get( "dialect" );
+        return dialect != null ? dialect.getValue() : null;
     }
 
-    public void setDialect(String dialect) {
-        this.dialect = dialect;
-    }
-
     public String getSalience() {
-        return salience;
+        AttributeDescr salience = this.attributes.get( "salience" );
+        return salience != null ? salience.getValue() : null;
     }
 
-    public void setSalience(String salience) {
-        this.salience = salience;
-    }
-
     public String getClassName() {
         return this.className;
     }
@@ -181,33 +170,21 @@
      * Returns the attribute map
      * @return
      */
+    @SuppressWarnings("unchecked")
     public Map<String, String> getMetaAttributes() {
         return this.metaAttributes != null ? this.metaAttributes : Collections.EMPTY_MAP;
     }
 
-    public List<AttributeDescr> getAttributes() {
+    public Map<String, AttributeDescr> getAttributes() {
         return this.attributes;
     }
 
     public void addAttribute(final AttributeDescr attribute) {
         if ( attribute != null ) {
-            if ( this.attributes == Collections.EMPTY_LIST ) {
-                this.attributes = new ArrayList();
-            }
-
-            if ( "dialect".equals( attribute.getName() ) ) {
-                // set dialect specifically as its to drive the build process.
-                this.dialect = attribute.getValue();
-            }
-
-            this.attributes.add( attribute );
+            this.attributes.put( attribute.getName(), attribute );
         }
     }
 
-    public void setAttributes(final List<AttributeDescr> attributes) {
-        this.attributes = new ArrayList<AttributeDescr>( attributes );
-    }
-
     public AndDescr getLhs() {
         return this.lhs;
     }
@@ -247,25 +224,19 @@
     }
 
     public String getEnabled() {
-        String enabled = "true";
-        for( AttributeDescr attr : this.attributes ) {
-            if( "enabled".equals( attr.getName() ) ) {
-                enabled = attr.getValue();
-                break;
-            }
-        }
-        return enabled;
+        AttributeDescr enabled = this.attributes.get( "enabled" );
+        return enabled != null ? enabled.getValue() : null;
     }
 
-	public void setParentName(String parentName) {
-		this.parentName = parentName;
-	}
+    public void setParentName(String parentName) {
+        this.parentName = parentName;
+    }
 
-	public String getParentName() {
-		return parentName;
-	}
-	
-	public String toString() {
-	    return "[Rule name='" + this.name + "']";
-	}
+    public String getParentName() {
+        return parentName;
+    }
+
+    public String toString() {
+        return "[Rule name='" + this.name + "']";
+    }
 }
\ No newline at end of file

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	2009-01-15 15:46:58 UTC (rev 24736)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/RuleBuildContext.java	2009-01-15 16:35:23 UTC (rev 24737)
@@ -80,14 +80,8 @@
             this.rule = new Rule( ruleDescr.getName() );
         }        
         this.rule.setPackage( pkg.getName() );
+        this.rule.setDialect( ruleDescr.getDialect() );
         
-      
-
-        // Assign attributes
-        setAttributes( this.rule,
-                       ruleDescr,
-                       ruleDescr.getAttributes() );
-        
         init(pkgBuilder, pkg, ruleDescr, dialectCompiletimeRegistry, defaultDialect, this.rule );
         
         if ( this.rule.getDialect() == null ) {
@@ -150,70 +144,5 @@
         return this.buildStack;
     }
 
-    /**
-     * Sets rule Attributes
-     * 
-     * @param rule
-     * @param attributes
-     */
-    public static void setAttributes(final Rule rule,
-                                     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" ) ) {
-                try {
-                    ruleDescr.setSalience( attributeDescr.getValue() );
-                } catch ( Exception e ) {
-
-                }
-            } else if ( name.equals( "no-loop" ) ) {
-                if ( attributeDescr.getValue() == null ) {
-                    rule.setNoLoop( true );
-                } else {
-                    rule.setNoLoop( Boolean.valueOf( attributeDescr.getValue() ).booleanValue() );
-                }
-            } else if ( name.equals( "auto-focus" ) ) {
-                if ( attributeDescr.getValue() == null ) {
-                    rule.setAutoFocus( true );
-                } else {
-                    rule.setAutoFocus( Boolean.valueOf( attributeDescr.getValue() ).booleanValue() );
-                }
-            } else if ( name.equals( "agenda-group" ) ) {
-                rule.setAgendaGroup( attributeDescr.getValue() );
-            } else if ( name.equals( "activation-group" ) ) {
-                rule.setActivationGroup( attributeDescr.getValue() );
-            } else if ( name.equals( "ruleflow-group" ) ) {
-                rule.setRuleFlowGroup( attributeDescr.getValue() );
-            } else if ( name.equals( "lock-on-active" ) ) {
-                if ( attributeDescr.getValue() == null ) {
-                    rule.setLockOnActive( true );
-                } else {
-                    rule.setLockOnActive( Boolean.valueOf( attributeDescr.getValue() ).booleanValue() );
-                }
-            } else if ( name.equals( "duration" ) ) {
-                rule.setDuration( Long.parseLong( attributeDescr.getValue() ) );
-                rule.setAgendaGroup( "" );
-            } else if ( name.equals( "enabled" ) ) {
-                if ( attributeDescr.getValue() == null || "true".equalsIgnoreCase( attributeDescr.getValue() )  ) {
-                    rule.setEnabled( EnabledBoolean.ENABLED_TRUE );
-                } else if( "false".equalsIgnoreCase( attributeDescr.getValue() ) ) {
-                    rule.setEnabled( EnabledBoolean.ENABLED_FALSE );
-                }
-            } else if ( name.equals( "date-effective" ) ) {
-                final Calendar cal = Calendar.getInstance();
-                cal.setTime( DateUtils.parseDate( attributeDescr.getValue() ) );
-                rule.setDateEffective( cal );
-            } else if ( name.equals( "date-expires" ) ) {
-                final Calendar cal = Calendar.getInstance();
-                cal.setTime( DateUtils.parseDate( attributeDescr.getValue() ) );
-                rule.setDateExpires( cal );
-            } else if ( name.equals( "dialect" ) ) {
-                rule.setDialect( attributeDescr.getValue() );
-            }
-        }
-    }
-
 }

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	2009-01-15 15:46:58 UTC (rev 24736)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/RuleBuilder.java	2009-01-15 16:35:23 UTC (rev 24737)
@@ -16,14 +16,19 @@
  * limitations under the License.
  */
 
+import java.util.Calendar;
+
 import org.drools.RuntimeDroolsException;
 import org.drools.base.EnabledBoolean;
 import org.drools.base.SalienceInteger;
+import org.drools.lang.descr.AttributeDescr;
 import org.drools.lang.descr.QueryDescr;
 import org.drools.lang.descr.RuleDescr;
 import org.drools.rule.GroupElement;
 import org.drools.rule.Pattern;
+import org.drools.rule.Rule;
 import org.drools.spi.Salience;
+import org.drools.util.DateUtils;
 
 /**
  * This builds the rule structure from an AST.
@@ -44,28 +49,34 @@
      */
     public void build(final RuleBuildContext context) {
         RuleDescr ruleDescr = context.getRuleDescr();
-        
+
         //Query and get object instead of using String
-        if(null != ruleDescr.getParentName() && null != context.getPkg().getRule(ruleDescr.getParentName())){
-        	context.getRule().setParent(context.getPkg().getRule(ruleDescr.getParentName()));
+        if ( null != ruleDescr.getParentName() && null != context.getPkg().getRule( ruleDescr.getParentName() ) ) {
+            context.getRule().setParent( context.getPkg().getRule( ruleDescr.getParentName() ) );
         }
-        context.getRule().getMetaAttributes().putAll(ruleDescr.getMetaAttributes());
-        
+        // add all the rule's meta attributes
+        context.getRule().getMetaAttributes().putAll( ruleDescr.getMetaAttributes() );
+
         final RuleConditionBuilder builder = (RuleConditionBuilder) context.getDialect().getBuilder( ruleDescr.getLhs().getClass() );
         if ( builder != null ) {
             Pattern prefixPattern = null;
             if ( context.getRuleDescr() instanceof QueryDescr ) {
-                prefixPattern = context.getDialect().getQueryBuilder().build( context, ( QueryDescr ) context.getRuleDescr() );
+                prefixPattern = context.getDialect().getQueryBuilder().build( context,
+                                                                              (QueryDescr) context.getRuleDescr() );
             }
             final GroupElement ce = (GroupElement) builder.build( context,
                                                                   ruleDescr.getLhs(),
                                                                   prefixPattern );
-            
+
             context.getRule().setLhs( ce );
         } else {
             throw new RuntimeDroolsException( "BUG: builder not found for descriptor class " + ruleDescr.getLhs().getClass() );
         }
 
+        // build all the rule's attributes
+        // must be after building LHS because some attributes require bindings from the LHS
+        buildAttributes( context );
+
         // Build the consequence and generate it's invoker/s
         // generate the main rule from the previously generated s.
         if ( !(ruleDescr instanceof QueryDescr) ) {
@@ -73,31 +84,96 @@
 
             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 );
+
+    }
+
+    public void buildAttributes(final RuleBuildContext context) {
+        final Rule rule = context.getRule();
+        final RuleDescr ruleDescr = context.getRuleDescr();
+
+        for ( final AttributeDescr attributeDescr : ruleDescr.getAttributes().values() ) {
+            final String name = attributeDescr.getName();
+            if ( name.equals( "no-loop" ) ) {
+                rule.setNoLoop( getBooleanValue( attributeDescr,
+                                                 true ) );
+            } else if ( name.equals( "auto-focus" ) ) {
+                rule.setAutoFocus( getBooleanValue( attributeDescr,
+                                                    true ) );
+            } else if ( name.equals( "agenda-group" ) ) {
+                rule.setAgendaGroup( attributeDescr.getValue() );
+            } else if ( name.equals( "activation-group" ) ) {
+                rule.setActivationGroup( attributeDescr.getValue() );
+            } else if ( name.equals( "ruleflow-group" ) ) {
+                rule.setRuleFlowGroup( attributeDescr.getValue() );
+            } else if ( name.equals( "lock-on-active" ) ) {
+                rule.setLockOnActive( getBooleanValue( attributeDescr,
+                                                       true ) );
+            } else if ( name.equals( "duration" ) ) {
+                rule.setDuration( Long.parseLong( attributeDescr.getValue() ) );
+            } else if ( name.equals( "date-effective" ) ) {
+                final Calendar cal = Calendar.getInstance();
+                cal.setTime( DateUtils.parseDate( attributeDescr.getValue() ) );
+                rule.setDateEffective( cal );
+            } else if ( name.equals( "date-expires" ) ) {
+                final Calendar cal = Calendar.getInstance();
+                cal.setTime( DateUtils.parseDate( attributeDescr.getValue() ) );
+                rule.setDateExpires( cal );
             }
-        } catch (Exception e) {
-            // It wasn't an integer, so build as an expression
-            context.getDialect().getSalienceBuilder().build( context );    
-        }     
-        
-       
-        
+        }
+
+        buildSalience( context );
+
+        buildEnabled( context );
+
+        //        buildDuration( context );
+    }
+
+    private boolean getBooleanValue(final AttributeDescr attributeDescr,
+                                    final boolean defaultValue) {
+        return (attributeDescr.getValue() == null || "".equals( attributeDescr.getValue().trim() )) ? defaultValue : Boolean.valueOf( attributeDescr.getValue() ).booleanValue();
+    }
+
+    //    private void buildDuration(final RuleBuildContext context) {
+    //        String durationText = context.getRuleDescr().getDuration();
+    //        try {
+    //            // First see if its an Integer
+    //            if ( durationText != null && !durationText.equals( "" )) {
+    //                Duration duration = new DurationInteger( Integer.parseInt( durationText ) );
+    //                context.getRule().setDuration( duration );
+    //            }
+    //        } catch (Exception e) {
+    //            // It wasn't an integer, so build as an expression
+    //            context.getDialect().getDurationBuilder().build( context );    
+    //        }
+    //    }
+
+    private void buildEnabled(final RuleBuildContext context) {
         String enabledText = context.getRuleDescr().getEnabled();
-        if( "true".equalsIgnoreCase( enabledText.trim() ) || "false".equalsIgnoreCase( enabledText.trim() ) ) {
-            if( Boolean.parseBoolean( enabledText ) ) {
-                context.getRule().setEnabled( EnabledBoolean.ENABLED_TRUE );
+        if ( enabledText != null ) {
+            if ( "true".equalsIgnoreCase( enabledText.trim() ) || "false".equalsIgnoreCase( enabledText.trim() ) ) {
+                if ( Boolean.parseBoolean( enabledText ) ) {
+                    context.getRule().setEnabled( EnabledBoolean.ENABLED_TRUE );
+                } else {
+                    context.getRule().setEnabled( EnabledBoolean.ENABLED_FALSE );
+                }
             } else {
-                context.getRule().setEnabled( EnabledBoolean.ENABLED_FALSE );
+                context.getDialect().getEnabledBuilder().build( context );
             }
-        } else {
-            context.getDialect().getEnabledBuilder().build( context );
         }
     }
+
+    private void buildSalience(final RuleBuildContext context) {
+        String salienceText = context.getRuleDescr().getSalience();
+        if ( salienceText != null && !salienceText.equals( "" ) ) {
+            try {
+                // First check if it is an Integer
+                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 );
+            }
+        }
+    }
+
 }
\ No newline at end of file

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	2009-01-15 15:46:58 UTC (rev 24736)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELDialect.java	2009-01-15 16:35:23 UTC (rev 24737)
@@ -515,10 +515,6 @@
 
         ExpressionCompiler compiler = new ExpressionCompiler( text.trim() );
 
-        if ( MVELDebugHandler.isDebugMode() ) {
-            compiler.setDebugSymbols( true );
-        }
-
         synchronized ( COMPILER_LOCK ) {
             ClassLoader tempClassLoader = Thread.currentThread().getContextClassLoader();
 
@@ -681,6 +677,10 @@
         final ParserContext parserContext = new ParserContext( this.imports,
                                                                null,
                                                                name );
+        if ( MVELDebugHandler.isDebugMode() ) {
+            parserContext.setDebugSymbols( true );
+        }
+
         // getRuleDescr().getClassName() );
 
         for ( Iterator it = this.packageImports.values().iterator(); it.hasNext(); ) {

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/XmlDumper.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/XmlDumper.java	2009-01-15 15:46:58 UTC (rev 24736)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/XmlDumper.java	2009-01-15 16:35:23 UTC (rev 24737)
@@ -16,6 +16,7 @@
  * limitations under the License.
  */
 
+import java.util.Collection;
 import java.util.Collections;
 import java.util.Iterator;
 import java.util.List;
@@ -252,7 +253,7 @@
         for ( final Iterator iterator = rules.iterator(); iterator.hasNext(); ) {
             final RuleDescr ruleDescr = (RuleDescr) iterator.next();
             String rule = "<rule name=\"" + ruleDescr.getName() + "\">" + XmlDumper.eol;
-            final String attribute = processAttribute( ruleDescr.getAttributes() );
+            final String attribute = processAttribute( ruleDescr.getAttributes().values() );
             String lhs = "";
             if ( ruleDescr.getLhs().getDescrs() != Collections.EMPTY_LIST ) {
                 lhs = "<lhs>" + processDescrList( ruleDescr.getLhs().getDescrs() ) + "</lhs>";
@@ -315,11 +316,10 @@
         return functionList + XmlDumper.eol;
     }
 
-    private String processAttribute(final List attributes) {
+    private String processAttribute(final Collection<AttributeDescr> attributes ) {
 
         String attributeList = "";
-        for ( final Iterator iterator = attributes.iterator(); iterator.hasNext(); ) {
-            final AttributeDescr attributeDescr = (AttributeDescr) iterator.next();
+        for ( final AttributeDescr attributeDescr : attributes) {
             visit( attributeDescr );
             attributeList += this.template;
         }

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java	2009-01-15 15:46:58 UTC (rev 24736)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java	2009-01-15 16:35:23 UTC (rev 24737)
@@ -1579,14 +1579,14 @@
                       packageAttrs.size() );
 
         RuleDescr rule = (RuleDescr) desc.getRules().get( 0 );
-        List ruleAttrs = rule.getAttributes();
+        Map<String, AttributeDescr> ruleAttrs = rule.getAttributes();
         assertEquals( 1,
                       ruleAttrs.size() );
 
         assertEquals( "mvel",
-                      ((AttributeDescr) ruleAttrs.get( 0 )).getValue() );
+                      ((AttributeDescr) ruleAttrs.get( "dialect" )).getValue() );
         assertEquals( "dialect",
-                      ((AttributeDescr) ruleAttrs.get( 0 )).getName() );
+                      ((AttributeDescr) ruleAttrs.get( "dialect" )).getName() );
         RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( builder.getPackage() );
 
@@ -4475,11 +4475,6 @@
         assertEquals( 2, list.size() );
         assertEquals( "This is an update()", list.get( 0 ) );
         assertEquals( "This is an update($fact)", list.get( 1 ) );
-        
-        
-        
-        
-        
     }
 
     public void testRuleReplacement() throws Exception {

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/lang/RuleParserTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/lang/RuleParserTest.java	2009-01-15 15:46:58 UTC (rev 24736)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/lang/RuleParserTest.java	2009-01-15 16:35:23 UTC (rev 24737)
@@ -369,7 +369,7 @@
 		assertNotNull(rule);
 
 		assertEquals("rule1", rule.getName());
-		final AttributeDescr att = (AttributeDescr) rule.getAttributes().get(0);
+		final AttributeDescr att = (AttributeDescr) rule.getAttributes().get("no-loop");
 		assertEquals("false", att.getValue());
 		assertEquals("no-loop", att.getName());
 	}
@@ -381,7 +381,7 @@
 		assertNotNull(rule);
 
 		assertEquals("rule1", rule.getName());
-		final AttributeDescr att = (AttributeDescr) rule.getAttributes().get(0);
+		final AttributeDescr att = (AttributeDescr) rule.getAttributes().get("auto-focus");
 		assertEquals("true", att.getValue());
 		assertEquals("auto-focus", att.getName());
 	}
@@ -393,7 +393,7 @@
 		assertNotNull(rule);
 
 		assertEquals("rule1", rule.getName());
-		final AttributeDescr att = (AttributeDescr) rule.getAttributes().get(0);
+		final AttributeDescr att = (AttributeDescr) rule.getAttributes().get("ruleflow-group");
 		assertEquals("a group", att.getValue());
 		assertEquals("ruleflow-group", att.getName());
 	}
@@ -1769,30 +1769,30 @@
 		assertEquals("simple_rule", rule.getName());
 		assertEqualsIgnoreWhitespace("bar();", (String) rule.getConsequence());
 
-		final List attrs = rule.getAttributes();
+		final Map<String, AttributeDescr> attrs = rule.getAttributes();
 		assertEquals(6, attrs.size());
 
-		AttributeDescr at = (AttributeDescr) attrs.get(0);
+		AttributeDescr at = (AttributeDescr) attrs.get("salience");
 		assertEquals("salience", at.getName());
 		assertEquals("42", at.getValue());
 
-		at = (AttributeDescr) attrs.get(1);
+		at = (AttributeDescr) attrs.get("agenda-group");
 		assertEquals("agenda-group", at.getName());
 		assertEquals("my_group", at.getValue());
 
-		at = (AttributeDescr) attrs.get(2);
+		at = (AttributeDescr) attrs.get("no-loop");
 		assertEquals("no-loop", at.getName());
 		assertEquals("true", at.getValue());
 
-		at = (AttributeDescr) attrs.get(3);
+		at = (AttributeDescr) attrs.get("duration");
 		assertEquals("duration", at.getName());
 		assertEquals("42", at.getValue());
 
-		at = (AttributeDescr) attrs.get(4);
+		at = (AttributeDescr) attrs.get("activation-group");
 		assertEquals("activation-group", at.getName());
 		assertEquals("my_activation_group", at.getValue());
 
-		at = (AttributeDescr) attrs.get(5);
+		at = (AttributeDescr) attrs.get("lock-on-active");
 		assertEquals("lock-on-active", at.getName());
 		assertEquals("true", at.getValue());
 	}
@@ -1803,18 +1803,18 @@
 		assertEquals("simple_rule", rule.getName());
 		assertEqualsIgnoreWhitespace("bar();", (String) rule.getConsequence());
 
-		final List attrs = rule.getAttributes();
+		final Map<String, AttributeDescr> attrs = rule.getAttributes();
 		assertEquals(3, attrs.size());
 
-		AttributeDescr at = (AttributeDescr) attrs.get(0);
+		AttributeDescr at = (AttributeDescr) attrs.get("enabled");
 		assertEquals("enabled", at.getName());
 		assertEquals("( 1 + 1 == 2 )", at.getValue());
 
-		at = (AttributeDescr) attrs.get(1);
+		at = (AttributeDescr) attrs.get("salience");
 		assertEquals("salience", at.getName());
 		assertEquals("( 1+2 )", at.getValue());
 
-		at = (AttributeDescr) attrs.get(2);
+		at = (AttributeDescr) attrs.get("lock-on-active");
 		assertEquals("lock-on-active", at.getName());
 		assertEquals("true", at.getValue());
 	}
@@ -1825,30 +1825,30 @@
 		assertEquals("simple_rule", rule.getName());
 		assertEqualsIgnoreWhitespace("bar();", (String) rule.getConsequence());
 
-		final List attrs = rule.getAttributes();
+		final Map<String, AttributeDescr> attrs = rule.getAttributes();
 		assertEquals(6, attrs.size());
 
-		AttributeDescr at = (AttributeDescr) attrs.get(0);
+		AttributeDescr at = (AttributeDescr) attrs.get("salience");
 		assertEquals("salience", at.getName());
 		assertEquals("42", at.getValue());
 
-		at = (AttributeDescr) attrs.get(1);
+		at = (AttributeDescr) attrs.get("agenda-group");
 		assertEquals("agenda-group", at.getName());
 		assertEquals("my_group", at.getValue());
 
-		at = (AttributeDescr) attrs.get(2);
+		at = (AttributeDescr) attrs.get("no-loop");
 		assertEquals("no-loop", at.getName());
 		assertEquals("true", at.getValue());
 
-		at = (AttributeDescr) attrs.get(3);
+		at = (AttributeDescr) attrs.get("lock-on-active");
 		assertEquals("lock-on-active", at.getName());
 		assertEquals("true", at.getValue());
 
-		at = (AttributeDescr) attrs.get(4);
+		at = (AttributeDescr) attrs.get("duration");
 		assertEquals("duration", at.getName());
 		assertEquals("42", at.getValue());
 
-		at = (AttributeDescr) attrs.get(5);
+		at = (AttributeDescr) attrs.get("activation-group");
 		assertEquals("activation-group", at.getName());
 		assertEquals("my_activation_group", at.getValue());
 	}
@@ -1906,19 +1906,19 @@
 
 		RuleDescr rule = (RuleDescr) pkg.getRules().get(0);
 		assertEquals("bar", rule.getName());
-		at = (AttributeDescr) rule.getAttributes().get(0);
+		at = (AttributeDescr) rule.getAttributes().get("agenda-group");
 		assertEquals("agenda-group", at.getName());
 		assertEquals("x", at.getValue());
-		at = (AttributeDescr) rule.getAttributes().get(1);
+		at = (AttributeDescr) rule.getAttributes().get("dialect");
 		assertEquals("dialect", at.getName());
 		assertEquals("java", at.getValue());
 
 		rule = (RuleDescr) pkg.getRules().get(1);
 		assertEquals("baz", rule.getName());
-		at = (AttributeDescr) rule.getAttributes().get(0);
+		at = (AttributeDescr) rule.getAttributes().get("dialect");
 		assertEquals("dialect", at.getName());
 		assertEquals("mvel", at.getValue());
-		at = (AttributeDescr) rule.getAttributes().get(1);
+		at = (AttributeDescr) rule.getAttributes().get("agenda-group");
 		assertEquals("agenda-group", at.getName());
 		assertEquals("x", at.getValue());
 

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/lang/descr/PackageDescrTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/lang/descr/PackageDescrTest.java	2009-01-15 15:46:58 UTC (rev 24736)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/lang/descr/PackageDescrTest.java	2009-01-15 16:35:23 UTC (rev 24737)
@@ -1,6 +1,7 @@
 package org.drools.lang.descr;
 
 import java.util.List;
+import java.util.Map;
 
 import junit.framework.TestCase;
 
@@ -25,12 +26,10 @@
         assertEquals("default", ((AttributeDescr)pkgAts.get( 1 )).getValue());
         
         
-        List ruleAts = rule.getAttributes();
-        assertEquals("overridden", ((AttributeDescr)ruleAts.get( 0 )).getValue());
-        assertEquals("default", ((AttributeDescr)ruleAts.get( 1 )).getValue());
+        Map<String, AttributeDescr> ruleAts = rule.getAttributes();
+        assertEquals("overridden", ((AttributeDescr)ruleAts.get( "foo" )).getValue());
+        assertEquals("default", ((AttributeDescr)ruleAts.get( "foo2" )).getValue());
         
-        
-        
     }
     
 }

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	2009-01-15 15:46:58 UTC (rev 24736)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/java/RuleBuilderTest.java	2009-01-15 16:35:23 UTC (rev 24737)
@@ -17,16 +17,14 @@
 package org.drools.rule.builder.dialect.java;
 
 import java.io.InputStreamReader;
-import java.lang.reflect.Field;
-import java.util.ArrayList;
 import java.util.Calendar;
 import java.util.HashSet;
-import java.util.List;
 
 import junit.framework.Assert;
 import junit.framework.TestCase;
 
 import org.drools.base.ClassTypeResolver;
+import org.drools.base.EnabledBoolean;
 import org.drools.base.TypeResolver;
 import org.drools.compiler.Dialect;
 import org.drools.compiler.DialectCompiletimeRegistry;
@@ -39,15 +37,25 @@
 import org.drools.rule.GroupElement;
 import org.drools.rule.Package;
 import org.drools.rule.Rule;
-import org.drools.rule.TimeMachine;
 import org.drools.rule.builder.RuleBuildContext;
 import org.drools.rule.builder.RuleBuilder;
+import org.drools.util.DateUtils;
+import org.jmock.Expectations;
+import org.jmock.Mockery;
+import org.jmock.lib.legacy.ClassImposteriser;
 
 /**
  * @author etirelli
  *
  */
 public class RuleBuilderTest extends TestCase {
+    // mock factory
+    private Mockery mockery = new Mockery() {
+                                {
+                                    // need to set this to be able to mock concrete classes
+                                    setImposteriser( ClassImposteriser.INSTANCE );
+                                }
+                            };
 
     /* (non-Javadoc)
      * @see junit.framework.TestCase#setUp()
@@ -68,23 +76,22 @@
      */
     public void testBuild() throws Exception {
         final DrlParser parser = new DrlParser();
-        
+
         final PackageBuilder pkgBuilder = new PackageBuilder();
-        pkgBuilder.addPackage( new PackageDescr( "org.drools"  ) );
+        pkgBuilder.addPackage( new PackageDescr( "org.drools" ) );
         Package pkg = pkgBuilder.getPackage();
-        
+
         final PackageDescr pkgDescr = parser.parse( new InputStreamReader( getClass().getResourceAsStream( "nestedConditionalElements.drl" ) ) );
 
         // just checking there is no parsing errors
         Assert.assertFalse( parser.getErrors().toString(),
                             parser.hasErrors() );
 
-
-
         final RuleDescr ruleDescr = (RuleDescr) pkgDescr.getRules().get( 0 );
         final String ruleClassName = "RuleClassName.java";
         ruleDescr.setClassName( ruleClassName );
-        ruleDescr.addAttribute( new AttributeDescr("dialect", "java") );
+        ruleDescr.addAttribute( new AttributeDescr( "dialect",
+                                                    "java" ) );
 
         final TypeResolver typeResolver = new ClassTypeResolver( new HashSet(),
                                                                  this.getClass().getClassLoader() );
@@ -92,14 +99,18 @@
         typeResolver.addImport( pkgDescr.getName() + ".*" );
         typeResolver.addImport( "java.lang.*" );
 
-        final RuleBuilder builder = new RuleBuilder( );
+        final RuleBuilder builder = new RuleBuilder();
 
         final PackageBuilderConfiguration conf = pkgBuilder.getPackageBuilderConfiguration();
-        
-        DialectCompiletimeRegistry dialectRegistry = pkgBuilder.getPackageRegistry( pkg.getName() ).getDialectCompiletimeRegistry();        
+
+        DialectCompiletimeRegistry dialectRegistry = pkgBuilder.getPackageRegistry( pkg.getName() ).getDialectCompiletimeRegistry();
         Dialect dialect = dialectRegistry.getDialect( "java" );
 
-        RuleBuildContext context = new RuleBuildContext(pkgBuilder, ruleDescr, dialectRegistry, pkg, dialect);
+        RuleBuildContext context = new RuleBuildContext( pkgBuilder,
+                                                         ruleDescr,
+                                                         dialectRegistry,
+                                                         pkg,
+                                                         dialect );
 
         builder.build( context );
 
@@ -132,52 +143,67 @@
     }
 
     public void testBuildAttributes() throws Exception {
-        Rule rule = new Rule( "my rule" );
+        // creates mock objects
+        final RuleBuildContext context = mockery.mock( RuleBuildContext.class );
+        final Rule rule = mockery.mock( Rule.class );
 
-        List attributes = new ArrayList();
+        // creates input object
+        final RuleDescr ruleDescr = new RuleDescr( "my rule" );
+        ruleDescr.addAttribute( new AttributeDescr( "no-loop",
+                                                    "true" ) );
+        ruleDescr.addAttribute( new AttributeDescr( "auto-focus",
+                                                    "false" ) );
+        ruleDescr.addAttribute( new AttributeDescr( "agenda-group",
+                                                    "my agenda" ) );
+        ruleDescr.addAttribute( new AttributeDescr( "activation-group",
+                                                    "my activation" ) );
+        ruleDescr.addAttribute( new AttributeDescr( "ruleflow-group",
+                                                    "mygroup" ) );
+        ruleDescr.addAttribute( new AttributeDescr( "lock-on-active",
+                                                    "" ) );
+        ruleDescr.addAttribute( new AttributeDescr( "enabled",
+                                                    "false" ) );
+        ruleDescr.addAttribute( new AttributeDescr( "duration",
+                                                    "60" ) );
+        ruleDescr.addAttribute( new AttributeDescr( "date-effective",
+                                                    "10-Jul-1974" ) );
+        ruleDescr.addAttribute( new AttributeDescr( "date-expires",
+                                                    "10-Jul-2040" ) );
 
-        attributes.add( new AttributeDescr("dialect", "java") );
-        attributes.add( new AttributeDescr( "no-loop",
-                                            "true" ) );
-        attributes.add( new AttributeDescr( "enabled",
-                                            "false" ) );
-        attributes.add( new AttributeDescr( "ruleflow-group",
-                                            "mygroup" ) );
+        // creates expected results
+        final Calendar effective = Calendar.getInstance();
+        effective.setTime( DateUtils.parseDate( "10-Jul-1974" ) );
+        final Calendar expires = Calendar.getInstance();
+        expires.setTime( DateUtils.parseDate( "10-Jul-2040" ) );
 
-        RuleBuildContext.setAttributes( rule, null, attributes );
+        // defining expectations on the mock object
+        mockery.checking( new Expectations() {
+            {
+                // return values for the context
+                allowing( context ).getRule(); will( returnValue( rule ) );
+                allowing( context ).getRuleDescr(); will( returnValue( ruleDescr ) );
 
-        assertTrue( rule.isNoLoop() );
-        assertFalse( rule.isEffective(new TimeMachine(), null, null) );
-        assertEquals( "mygroup",
-                      rule.getRuleFlowGroup() );
+                // expected values for the rule object
+                oneOf( rule ).setNoLoop( true );
+                oneOf( rule ).setAutoFocus( false );
+                oneOf( rule ).setAgendaGroup( "my agenda" );
+                oneOf( rule ).setActivationGroup( "my activation" );
+                oneOf( rule ).setRuleFlowGroup( "mygroup" );
+                oneOf( rule ).setLockOnActive( true );
+                oneOf( rule ).setEnabled( EnabledBoolean.ENABLED_FALSE );
+                oneOf( rule ).setDuration( 60 );
+                oneOf( rule ).setDateEffective( effective );
+                oneOf( rule ).setDateExpires( expires );
+            }
+        } );
 
-        attributes = new ArrayList();
-        attributes.add( new AttributeDescr( "date-effective",
-                                            "10-Jul-1974" ) );
-        attributes.add( new AttributeDescr( "date-expires",
-                                            "10-Jul-2040" ) );
+        // calling the build method
+        RuleBuilder builder = new RuleBuilder();
+        builder.buildAttributes( context );
 
-        rule = new Rule( "myrule" );
+        // check expectations
+        mockery.assertIsSatisfied();
 
-        RuleBuildContext.setAttributes( rule, null, attributes );
-
-        final Field eff = rule.getClass().getDeclaredField( "dateEffective" );
-        eff.setAccessible( true );
-        final Calendar effectiveDate = (Calendar) eff.get( rule );
-        assertNotNull( effectiveDate );
-
-        assertEquals( 1974,
-                      effectiveDate.get( Calendar.YEAR ) );
-
-        final Field exp = rule.getClass().getDeclaredField( "dateExpires" );
-        exp.setAccessible( true );
-        final Calendar expiryDate = (Calendar) exp.get( rule );
-
-        assertEquals( 2040,
-                      expiryDate.get( Calendar.YEAR ) );
-
-        assertNotNull( expiryDate );
-
     }
 
 }

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	2009-01-15 15:46:58 UTC (rev 24736)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELConsequenceBuilderTest.java	2009-01-15 16:35:23 UTC (rev 24737)
@@ -293,13 +293,13 @@
         ExpressionCompiler compiler = new ExpressionCompiler( expr );
 
         ParserContext context = new ParserContext();
+        context.setDebugSymbols( true );
         context.addImport( "System",
                            System.class );
         context.setStrictTypeEnforcement( true );
         //context.setDebugSymbols( true );
         context.setSourceFile( "mysource" );
 
-        compiler.setDebugSymbols( true );
 
         Serializable compiledExpression = compiler.compile( context );
 

Modified: 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	2009-01-15 15:46:58 UTC (rev 24736)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELSalienceBuilderTest.java	2009-01-15 16:35:23 UTC (rev 24737)
@@ -15,6 +15,7 @@
 import org.drools.compiler.DialectCompiletimeRegistry;
 import org.drools.compiler.PackageBuilder;
 import org.drools.compiler.PackageBuilderConfiguration;
+import org.drools.lang.descr.AttributeDescr;
 import org.drools.lang.descr.RuleDescr;
 import org.drools.reteoo.LeftTuple;
 import org.drools.rule.Declaration;
@@ -25,14 +26,14 @@
 import org.drools.spi.PatternExtractor;
 
 public class MVELSalienceBuilderTest extends TestCase {
+    
     public void testSimpleExpression() {        
         final Package pkg = new Package( "pkg1" );
         final RuleDescr ruleDescr = new RuleDescr( "rule 1" );
-        ruleDescr.setSalience( "(p.age + 20)/2" );
+        ruleDescr.addAttribute( new AttributeDescr( "salience", "(p.age + 20)/2" ) );
         ruleDescr.setConsequence( "" );
 
         PackageBuilder pkgBuilder = new PackageBuilder( pkg );
-        final PackageBuilderConfiguration conf = pkgBuilder.getPackageBuilderConfiguration();
         DialectCompiletimeRegistry dialectRegistry = pkgBuilder.getPackageRegistry( pkg.getName() ).getDialectCompiletimeRegistry();
         MVELDialect mvelDialect = ( MVELDialect ) dialectRegistry.getDialect( "mvel" );
 

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/xml/rules/XmlPackageReaderTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/xml/rules/XmlPackageReaderTest.java	2009-01-15 15:46:58 UTC (rev 24736)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/xml/rules/XmlPackageReaderTest.java	2009-01-15 16:35:23 UTC (rev 24737)
@@ -405,7 +405,7 @@
 
         assertEquals( 4,
                       ruleDescr.getAttributes().size() );
-        final AttributeDescr attributeDescr = (AttributeDescr) ruleDescr.getAttributes().get( 0 );
+        final AttributeDescr attributeDescr = (AttributeDescr) ruleDescr.getAttributes().get( "salience" );
         assertEquals( "salience",
                       attributeDescr.getName() );
         assertEquals( "10",

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/MVELCompilationUnit.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/MVELCompilationUnit.java	2009-01-15 15:46:58 UTC (rev 24736)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/MVELCompilationUnit.java	2009-01-15 16:35:23 UTC (rev 24737)
@@ -343,7 +343,7 @@
         ExpressionCompiler compiler = new ExpressionCompiler( text.trim() );
 
         if ( MVELDebugHandler.isDebugMode() ) {
-            compiler.setDebugSymbols( true );
+            parserContext.setDebugSymbols( true );
         }
 
         synchronized ( COMPILER_LOCK ) {

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/PatternBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/PatternBuilder.java	2009-01-15 15:46:58 UTC (rev 24736)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/PatternBuilder.java	2009-01-15 16:35:23 UTC (rev 24737)
@@ -31,6 +31,7 @@
 import org.drools.reteoo.ObjectSource;
 import org.drools.reteoo.ObjectTypeNode;
 import org.drools.reteoo.PropagationQueuingNode;
+import org.drools.rule.Behavior;
 import org.drools.rule.Declaration;
 import org.drools.rule.EntryPoint;
 import org.drools.rule.InvalidPatternException;
@@ -73,9 +74,9 @@
         // Set pattern offset to the appropriate value
         pattern.setOffset( context.getCurrentPatternOffset() );
 
-        final List alphaConstraints = new LinkedList();
-        final List betaConstraints = new LinkedList();
-        final List behaviors = new LinkedList();
+        final List<Constraint> alphaConstraints = new LinkedList<Constraint>();
+        final List<Constraint> betaConstraints = new LinkedList<Constraint>();
+        final List<Behavior> behaviors = new LinkedList<Behavior>();
 
         this.createConstraints( context,
                                 utils,
@@ -125,26 +126,22 @@
         // last thing to do is increment the offset, since if the pattern has a source,
         // offset must be overriden
         context.incrementCurrentPatternOffset();
-        
-//        if( pattern.getObjectType().isEvent() ) {
-//            long delay = context.getTemporalDistance().getExpirationOffset( pattern );
-//        }
     }
 
     private void createConstraints(BuildContext context,
                                    BuildUtils utils,
                                    Pattern pattern,
-                                   List alphaConstraints,
-                                   List betaConstraints) {
+                                   List<Constraint> alphaConstraints,
+                                   List<Constraint> betaConstraints) {
 
-        final List constraints = pattern.getConstraints();
+        final List<?> constraints = pattern.getConstraints();
 
         // check if cross products for identity patterns should be disabled
         checkRemoveIdentities( context,
                                pattern,
                                betaConstraints );
 
-        for ( final Iterator it = constraints.iterator(); it.hasNext(); ) {
+        for ( final Iterator<?> it = constraints.iterator(); it.hasNext(); ) {
             final Object object = it.next();
             // Check if its a declaration
             if ( object instanceof Declaration ) {
@@ -200,7 +197,7 @@
     public void attachAlphaNodes(final BuildContext context,
                                  final BuildUtils utils,
                                  final Pattern pattern,
-                                 List alphaConstraints) throws InvalidPatternException {
+                                 List<Constraint> alphaConstraints) throws InvalidPatternException {
 
         // Drools Query ObjectTypeNode never has memory, but other ObjectTypeNode/AlphaNoesNodes may (if not in sequential), 
         //so need to preserve, so we can restore after this node is added. LeftMemory  and Terminal remain the same once set.
@@ -244,7 +241,7 @@
         context.setObjectSource( (ObjectSource) utils.attachNode( context,
                                                                   otn ) );
 
-        for ( final Iterator it = alphaConstraints.iterator(); it.hasNext(); ) {
+        for ( final Iterator<Constraint> it = alphaConstraints.iterator(); it.hasNext(); ) {
             final AlphaNodeFieldConstraint constraint = (AlphaNodeFieldConstraint) it.next();
 
             context.setObjectSource( (ObjectSource) utils.attachNode( context,
@@ -267,15 +264,14 @@
      */
     private void checkRemoveIdentities(final BuildContext context,
                                        final Pattern pattern,
-                                       final List betaConstraints) {
+                                       final List<Constraint> betaConstraints) {
         if ( context.getRuleBase().getConfiguration().isRemoveIdentities() && pattern.getObjectType().getClass() == ClassObjectType.class ) {
-            List patterns = null;
             // Check if this object type exists before
             // If it does we need stop instance equals cross product
-            final Class thisClass = ((ClassObjectType) pattern.getObjectType()).getClassType();
-            for ( final Iterator it = context.getObjectType().iterator(); it.hasNext(); ) {
-                final Pattern previousPattern = (Pattern) it.next();
-                final Class previousClass = ((ClassObjectType) previousPattern.getObjectType()).getClassType();
+            final Class<?> thisClass = ((ClassObjectType) pattern.getObjectType()).getClassType();
+            for ( final Iterator<Pattern> it = context.getObjectType().iterator(); it.hasNext(); ) {
+                final Pattern previousPattern = it.next();
+                final Class<?> previousClass = ((ClassObjectType) previousPattern.getObjectType()).getClassType();
                 if ( thisClass.isAssignableFrom( previousClass ) ) {
                     betaConstraints.add( new InstanceNotEqualsConstraint( previousPattern ) );
                 }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/Constraint.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/Constraint.java	2009-01-15 15:46:58 UTC (rev 24736)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/Constraint.java	2009-01-15 16:35:23 UTC (rev 24737)
@@ -1,10 +1,6 @@
 package org.drools.spi;
 
 import java.io.Externalizable;
-import java.io.IOException;
-import java.io.ObjectInput;
-import java.io.ObjectOutput;
-import java.io.Serializable;
 
 import org.drools.rule.Declaration;
 

Modified: labs/jbossrules/trunk/pom.xml
===================================================================
--- labs/jbossrules/trunk/pom.xml	2009-01-15 15:46:58 UTC (rev 24736)
+++ labs/jbossrules/trunk/pom.xml	2009-01-15 16:35:23 UTC (rev 24737)
@@ -13,7 +13,7 @@
     <url>http://www.jboss.com/products/rules</url>
 
     <properties>
-        <mvel.dep.version>2.0.5</mvel.dep.version>
+        <mvel.dep.version>2.0.6</mvel.dep.version>
     </properties>
 
 
@@ -735,9 +735,15 @@
         <dependency>
             <groupId>org.jmock</groupId>
             <artifactId>jmock</artifactId>
-            <version>2.5.0.1</version>
+            <version>2.5.1</version>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>org.jmock</groupId>
+            <artifactId>jmock-legacy</artifactId>
+            <version>2.5.1</version>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 
     <dependencyManagement>




More information about the jboss-svn-commits mailing list