[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