[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