[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