[jboss-svn-commits] JBL Code SVN: r17410 - in labs/jbossrules/trunk: drools-core/src/main/java/org/drools/rule and 1 other directory.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Wed Dec 26 16:22:28 EST 2007
Author: tirelli
Date: 2007-12-26 16:22:26 -0500 (Wed, 26 Dec 2007)
New Revision: 17410
Added:
labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_OrCE.drl
Modified:
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/GroupElement.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/LogicTransformer.java
Log:
JBRULES-1364: fixing OR transformation
Copied: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_OrCE.drl (from rev 17337, labs/jbossrules/branches/4.0.x/drools-compiler/src/test/resources/org/drools/integrationtests/test_OrCE.drl)
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_OrCE.drl (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_OrCE.drl 2007-12-26 21:22:26 UTC (rev 17410)
@@ -0,0 +1,20 @@
+package org.drools;
+
+global java.util.List results;
+
+rule "test or CE"
+when
+ $c : Cheese( type == "stilton" )
+ or
+ (
+ $c2 : Cheese( type == "brie" )
+ and
+ (
+ $p : Person( likes == "stilton" )
+ or
+ $p : Person( name == "bob" )
+ )
+ )
+then
+ results.add(" OK " );
+end
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/GroupElement.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/GroupElement.java 2007-12-26 21:19:51 UTC (rev 17409)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/GroupElement.java 2007-12-26 21:22:26 UTC (rev 17410)
@@ -127,12 +127,13 @@
this.children.addAll( group.getChildren() );
}
}
+
}
/**
* @param parent
*/
- private void pack(final GroupElement parent) {
+ public void pack(final GroupElement parent) {
if ( this.children.size() == 0 ) {
// if there is no child, just remove this node
parent.children.remove( this );
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/LogicTransformer.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/LogicTransformer.java 2007-12-26 21:19:51 UTC (rev 17409)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/LogicTransformer.java 2007-12-26 21:22:26 UTC (rev 17410)
@@ -191,21 +191,23 @@
boolean hasChildOr = false;
- // first we eliminicate any redundancy
+ // first we elimininate any redundancy
ce.pack();
- for ( final ListIterator it = ce.getChildren().listIterator(); it.hasNext(); ) {
- final Object object = it.next();
- if ( object instanceof GroupElement ) {
- final GroupElement child = (GroupElement) object;
+ Object[] children = (Object[]) ce.getChildren().toArray();
+ for ( int i = 0; i < children.length; i++ ) {
+ if ( children[i] instanceof GroupElement ) {
+ final GroupElement child = (GroupElement) children[i];
processTree( child );
-
- if ( child.isOr() ) {
+ if( ( child.isOr() || child.isAnd() ) && child.getType() == ce.getType() ) {
+ child.pack( ce );
+ } else if ( child.isOr() ) {
hasChildOr = true;
}
}
}
+
if ( hasChildOr ) {
applyOrTransformation( ce );
}
More information about the jboss-svn-commits
mailing list