[jboss-svn-commits] JBL Code SVN: r25993 - in labs/jbossrules/trunk: drools-compiler/src/test/java/org/drools/integrationtests and 5 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu Apr 9 12:05:19 EDT 2009


Author: tirelli
Date: 2009-04-09 12:05:19 -0400 (Thu, 09 Apr 2009)
New Revision: 25993

Added:
   labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_FromWithOr.drl
Modified:
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/Address.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/Person.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/FirstOrderLogicTest.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/dataproviders/MVELDataProvider.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/From.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/GroupElement.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/DataProvider.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/FromNodeTest.java
Log:
JBRULES-1664: From pattern source was not being clonned during logic transformation step.

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/Address.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/Address.java	2009-04-09 13:54:42 UTC (rev 25992)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/Address.java	2009-04-09 16:05:19 UTC (rev 25993)
@@ -8,6 +8,7 @@
     
     private String street;
     private String suburb;
+    private String zipCode;
 
     public Address() {
 
@@ -30,4 +31,12 @@
         this.suburb = suburb;
     }
 
+    public String getZipCode() {
+        return zipCode;
+    }
+
+    public void setZipCode(String zipCode) {
+        this.zipCode = zipCode;
+    }
+    
 }

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/Person.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/Person.java	2009-04-09 13:54:42 UTC (rev 25992)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/Person.java	2009-04-09 16:05:19 UTC (rev 25993)
@@ -29,7 +29,7 @@
 
     private Cheese            cheese;
 
-    private List              addresses = new ArrayList();
+    private List<Address>   addresses = new ArrayList<Address>();
 
 //    public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
 //        name    = (String)in.readObject();
@@ -58,14 +58,6 @@
 //        out.writeObject(addresses);
 //    }
 
-    public List getAddresses() {
-        return addresses;
-    }
-
-    public void setAddresses(List addresses) {
-        this.addresses = addresses;
-    }
-
     public Person() {
 
     }
@@ -83,6 +75,18 @@
               0 );
     }
 
+    public List<Address> getAddresses() {
+        return addresses;
+    }
+
+    public void setAddresses(List<Address> addresses) {
+        this.addresses = addresses;
+    }
+    
+    public void addAddress( Address address ) {
+        this.addresses.add( address );
+    }
+
     public Person(final String name,
                   final String likes) {
         this( name,

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/FirstOrderLogicTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/FirstOrderLogicTest.java	2009-04-09 13:54:42 UTC (rev 25992)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/FirstOrderLogicTest.java	2009-04-09 16:05:19 UTC (rev 25993)
@@ -10,9 +10,12 @@
 import junit.framework.Assert;
 import junit.framework.TestCase;
 
+import org.drools.Address;
 import org.drools.Cheese;
 import org.drools.Cheesery;
 import org.drools.FactHandle;
+import org.drools.KnowledgeBase;
+import org.drools.KnowledgeBaseFactory;
 import org.drools.Order;
 import org.drools.OrderItem;
 import org.drools.Person;
@@ -24,12 +27,17 @@
 import org.drools.State;
 import org.drools.StatefulSession;
 import org.drools.WorkingMemory;
+import org.drools.builder.KnowledgeBuilder;
+import org.drools.builder.KnowledgeBuilderFactory;
+import org.drools.builder.ResourceType;
 import org.drools.compiler.DrlParser;
 import org.drools.compiler.DroolsParserException;
 import org.drools.compiler.PackageBuilder;
+import org.drools.io.ResourceFactory;
 import org.drools.lang.descr.PackageDescr;
 import org.drools.rule.Package;
 import org.drools.rule.Rule;
+import org.drools.runtime.StatefulKnowledgeSession;
 
 public class FirstOrderLogicTest extends TestCase {
     protected RuleBase getRuleBase() throws Exception {
@@ -1059,4 +1067,44 @@
                              results.get( 1 ) );
     }
 
+    public void testFromWithOr() throws Exception {
+        KnowledgeBuilder builder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+        builder.add( ResourceFactory.newInputStreamResource( getClass().getResourceAsStream( "test_FromWithOr.drl" ) ),
+                     ResourceType.DRL );
+        
+        if( builder.hasErrors() ) {
+            System.out.println( builder.getErrors() );
+        }
+        assertFalse( builder.hasErrors() );
+        
+        KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+        kbase.addKnowledgePackages( builder.getKnowledgePackages() );
+
+        final StatefulKnowledgeSession session = kbase.newStatefulKnowledgeSession();
+
+        final List<Address> results = new ArrayList<Address>();
+        session.setGlobal( "results",
+                                 results );
+
+        Address a1 = new Address();
+        a1.setZipCode("12345");
+        Address a2 = new Address();
+        a2.setZipCode("54321");
+        Address a3 = new Address();
+        a3.setZipCode("99999");
+        
+        Person p = new Person();
+        p.addAddress(a1);
+        p.addAddress(a2);
+        p.addAddress(a3);
+        
+        session.insert( p);
+        session.fireAllRules();   
+        
+        assertEquals( 2, results.size() );
+        assertTrue( results.contains( a1 ) );
+        assertTrue( results.contains( a2 ) );
+
+    }
+
 }

Added: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_FromWithOr.drl
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_FromWithOr.drl	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_FromWithOr.drl	2009-04-09 16:05:19 UTC (rev 25993)
@@ -0,0 +1,17 @@
+package org.drools
+
+global java.util.List results
+ 
+rule "Hello World"
+when
+  $p  : Person( add:addresses )
+  $a1 : Address( zipCode == "99999") from add
+  and
+  ( 
+    $a2 : Address( zipCode == "12345") from add
+    or 
+    $a2 : Address( zipCode == "54321") from add
+  )
+then
+    results.add( $a2 );
+end
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/dataproviders/MVELDataProvider.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/dataproviders/MVELDataProvider.java	2009-04-09 13:54:42 UTC (rev 25992)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/dataproviders/MVELDataProvider.java	2009-04-09 16:05:19 UTC (rev 25993)
@@ -103,4 +103,11 @@
             return Collections.singletonList( result ).iterator();
         }
     }
+    
+    public DataProvider clone() {
+        // not sure this is safe, but at this point we don't have a classloader
+        // reference to compile a new copy of the data provider. My require
+        // refactory later.
+        return this;
+    }
 }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/From.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/From.java	2009-04-09 13:54:42 UTC (rev 25992)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/From.java	2009-04-09 16:05:19 UTC (rev 25993)
@@ -45,8 +45,7 @@
     }
 
     public Object clone() {
-        // TODO Auto-generated method stub
-        return null;
+        return new From( this.dataProvider.clone() );
     }
 
     public Map getInnerDeclarations() {

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	2009-04-09 13:54:42 UTC (rev 25992)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/GroupElement.java	2009-04-09 16:05:19 UTC (rev 25993)
@@ -160,7 +160,7 @@
         if ( this.isAnd() || this.isOr() || this.isExists() ) {
 
             // if parent is of the same type as current node,
-            // then merge this childs with parent childs
+            // then merge this children with parent children
             if ( parent.getType() == this.getType() ) {
 
                 // we must keep the order so, save index

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/DataProvider.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/DataProvider.java	2009-04-09 13:54:42 UTC (rev 25992)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/DataProvider.java	2009-04-09 16:05:19 UTC (rev 25993)
@@ -6,7 +6,7 @@
 import org.drools.rule.Declaration;
 import org.drools.WorkingMemory;
 
-public interface DataProvider extends Serializable {
+public interface DataProvider extends Serializable, Cloneable {
 
     public Declaration[] getRequiredDeclarations();
     
@@ -17,4 +17,6 @@
                                PropagationContext ctx,
                                Object providerContext);
 
+    public DataProvider clone();
+
 }

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/FromNodeTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/FromNodeTest.java	2009-04-09 13:54:42 UTC (rev 25992)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/FromNodeTest.java	2009-04-09 16:05:19 UTC (rev 25993)
@@ -340,6 +340,8 @@
         implements
         DataProvider {
 
+        private static final long serialVersionUID = -6003158511821491524L;
+        
         private Collection collection;
 
         public Declaration[] getRequiredDeclarations() {
@@ -360,6 +362,10 @@
         public Object createContext() {
             return null;
         }
+        
+        public DataProvider clone() {
+            return this;
+        }
     }
 
     public static class Person {




More information about the jboss-svn-commits mailing list