[jboss-svn-commits] JBL Code SVN: r34125 - in labs/jbossrules/trunk: drools-compiler and 3 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Fri Jul 23 01:18:42 EDT 2010
Author: mark.proctor at jboss.com
Date: 2010-07-23 01:18:41 -0400 (Fri, 23 Jul 2010)
New Revision: 34125
Added:
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/DroolsEventList.java
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/DroolsEventListTest.java
Modified:
labs/jbossrules/trunk/drools-compiler/pom.xml
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooWorkingMemory.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/rule/impl/RowAdapter.java
labs/jbossrules/trunk/pom.xml
Log:
JBRULES-2514 Open Live Querries
-Added unit test for Glazed Lists
Modified: labs/jbossrules/trunk/drools-compiler/pom.xml
===================================================================
--- labs/jbossrules/trunk/drools-compiler/pom.xml 2010-07-23 03:59:03 UTC (rev 34124)
+++ labs/jbossrules/trunk/drools-compiler/pom.xml 2010-07-23 05:18:41 UTC (rev 34125)
@@ -83,7 +83,13 @@
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-xjc</artifactId>
<scope>provided</scope>
- </dependency>
+ </dependency>
+
+ <dependency>
+ <groupId>net.java.dev.glazedlists</groupId>
+ <artifactId>glazedlists_java15</artifactId>
+ <scope>test</scope>
+ </dependency>
</dependencies>
<profiles>
<profile>
Added: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/DroolsEventList.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/DroolsEventList.java (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/DroolsEventList.java 2010-07-23 05:18:41 UTC (rev 34125)
@@ -0,0 +1,67 @@
+package org.drools.integrationtests;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedHashSet;
+import java.util.LinkedList;
+import java.util.List;
+
+import org.drools.runtime.rule.Row;
+import org.drools.runtime.rule.ViewChangedEventListener;
+
+import ca.odell.glazedlists.AbstractEventList;
+
+public class DroolsEventList extends AbstractEventList<Row> implements ViewChangedEventListener {
+ List<Row> data = new ArrayList<Row>();
+
+
+ @Override
+ public Row get(int index) {
+ return this.data.get( index );
+ }
+
+ @Override
+ public int size() {
+ return this.data.size();
+ }
+
+ public void dispose() {
+
+ }
+
+ public void rowAdded(Row row) {
+ int index = size();
+ // create the change event
+ updates.beginEvent();
+ updates.elementInserted(index, row);
+ // do the actual add
+ boolean result = data.add(row);
+ // fire the event
+ updates.commitEvent();
+
+ }
+
+ public void rowRemoved(Row row) {
+ int index = this.data.indexOf( row );
+ // create the change event
+ updates.beginEvent();
+ // do the actual remove
+ Row removed = data.remove( index );
+ updates.elementDeleted(index, removed);
+
+ updates.commitEvent();
+
+ }
+
+ public void rowUpdated(Row row) {
+ int index = this.data.indexOf( row );
+ // create the change event
+ updates.beginEvent();
+ // fire the event
+ updates.elementUpdated(index, row, row);
+ updates.commitEvent();
+
+ }
+
+}
Added: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/DroolsEventListTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/DroolsEventListTest.java (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/DroolsEventListTest.java 2010-07-23 05:18:41 UTC (rev 34125)
@@ -0,0 +1,140 @@
+package org.drools.integrationtests;
+
+import java.util.Comparator;
+
+import junit.framework.TestCase;
+
+import org.drools.Cheese;
+import org.drools.KnowledgeBase;
+import org.drools.KnowledgeBaseFactory;
+import org.drools.RuleBase;
+import org.drools.RuleBaseConfiguration;
+import org.drools.RuleBaseFactory;
+import org.drools.builder.KnowledgeBuilder;
+import org.drools.builder.KnowledgeBuilderFactory;
+import org.drools.builder.ResourceType;
+import org.drools.io.ResourceFactory;
+import org.drools.runtime.StatefulKnowledgeSession;
+import org.drools.runtime.rule.LiveQuery;
+import org.drools.runtime.rule.Row;
+
+import ca.odell.glazedlists.SortedList;
+
+public class DroolsEventListTest extends TestCase {
+ protected RuleBase getRuleBase() throws Exception {
+
+ RuleBaseConfiguration config = new RuleBaseConfiguration();
+ config.setMultithreadEvaluation( false );
+ return RuleBaseFactory.newRuleBase( RuleBase.RETEOO,
+ config );
+ }
+
+ public void testOpenQuery() throws Exception {
+ String str = "";
+ str += "package org.drools.test \n";
+ str += "import org.drools.Cheese \n";
+ str += "query cheeses(String $type1, String $type2) \n";
+ str += " stilton : Cheese(type == $type1, $price : price) \n";
+ str += " cheddar : Cheese(type == $type2, price == stilton.price) \n";
+ str += "end\n";
+
+ KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+ kbuilder.add( ResourceFactory.newByteArrayResource( str.getBytes() ),
+ ResourceType.DRL );
+
+ if ( kbuilder.hasErrors() ) {
+ fail( kbuilder.getErrors().toString() );
+ }
+
+ KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+ kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
+
+ StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+ Cheese stilton1 = new Cheese( "stilton",
+ 1 );
+ Cheese cheddar1 = new Cheese( "cheddar",
+ 1 );
+ Cheese stilton2 = new Cheese( "stilton",
+ 2 );
+ Cheese cheddar2 = new Cheese( "cheddar",
+ 2 );
+ Cheese stilton3 = new Cheese( "stilton",
+ 3 );
+ Cheese cheddar3 = new Cheese( "cheddar",
+ 3 );
+
+ org.drools.runtime.rule.FactHandle s1Fh = ksession.insert( stilton1 );
+ org.drools.runtime.rule.FactHandle s2Fh = ksession.insert( stilton2 );
+ org.drools.runtime.rule.FactHandle s3Fh = ksession.insert( stilton3 );
+ org.drools.runtime.rule.FactHandle c1Fh = ksession.insert( cheddar1 );
+ org.drools.runtime.rule.FactHandle c2Fh = ksession.insert( cheddar2 );
+ org.drools.runtime.rule.FactHandle c3Fh = ksession.insert( cheddar3 );
+
+ DroolsEventList list = new DroolsEventList();
+ // Open the LiveQuery
+ LiveQuery query = ksession.openLiveQuery( "cheeses", new Object[] { "cheddar", "stilton" } , list );
+
+ SortedList<Row> sorted = new SortedList<Row>( list, new Comparator<Row>() {
+
+ public int compare(Row r1,
+ Row r2) {
+ Cheese c1 = ( Cheese ) r1.get( "stilton" );
+ Cheese c2 = ( Cheese ) r2.get( "stilton" );
+ return c1.getPrice() - c2.getPrice();
+ }
+ });
+
+
+ assertEquals( 3, sorted.size() );
+ assertEquals( 1, ((Cheese)sorted.get( 0 ).get( "stilton" )).getPrice() );
+ assertEquals( 2, ((Cheese)sorted.get( 1 ).get( "stilton" )).getPrice() );
+ assertEquals( 3, ((Cheese)sorted.get( 2 ).get( "stilton" )).getPrice() );
+
+ // alter the price to remove the last row
+ stilton3.setPrice( 4 );
+ ksession.update( s3Fh, stilton3 );
+
+ assertEquals( 2, sorted.size() );
+ assertEquals( 1, ((Cheese)sorted.get( 0 ).get( "stilton" )).getPrice() );
+ assertEquals( 2, ((Cheese)sorted.get( 1 ).get( "stilton" )).getPrice() );
+
+ // alter the price to put the last row back in
+ stilton3.setPrice( 3 );
+ ksession.update( s3Fh, stilton3 );
+
+ assertEquals( 3, sorted.size() );
+ assertEquals( 1, ((Cheese)sorted.get( 0 ).get( "stilton" )).getPrice() );
+ assertEquals( 2, ((Cheese)sorted.get( 1 ).get( "stilton" )).getPrice() );
+ assertEquals( 3, ((Cheese)sorted.get( 2 ).get( "stilton" )).getPrice() );
+
+ // alter the price to remove the middle row
+ stilton2.setPrice( 4 );
+ ksession.update( s2Fh, stilton2 );
+
+ assertEquals( 2, sorted.size() );
+ assertEquals( 1, ((Cheese)sorted.get( 0 ).get( "stilton" )).getPrice() );
+ assertEquals( 3, ((Cheese)sorted.get( 1 ).get( "stilton" )).getPrice() );
+
+ // alter the price to add the previous middle rows to the end
+ cheddar2.setPrice( 4 );
+ ksession.update( c2Fh, cheddar2 );
+
+ assertEquals( 3, sorted.size() );
+ assertEquals( 1, ((Cheese)sorted.get( 0 ).get( "stilton" )).getPrice() );
+ assertEquals( 3, ((Cheese)sorted.get( 1 ).get( "stilton" )).getPrice() );
+ assertEquals( 4, ((Cheese)sorted.get( 2 ).get( "stilton" )).getPrice() );
+
+ // Check a standard retract
+ ksession.retract( s1Fh );
+ assertEquals( 2, sorted.size() );
+ assertEquals( 3, ((Cheese)sorted.get( 0 ).get( "stilton" )).getPrice() );
+ assertEquals( 4, ((Cheese)sorted.get( 1 ).get( "stilton" )).getPrice() );
+
+ // Close the query, we should get removed events for each row
+ query.close();
+
+ assertEquals( 0, sorted.size() );
+
+ }
+
+}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooWorkingMemory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooWorkingMemory.java 2010-07-23 03:59:03 UTC (rev 34124)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooWorkingMemory.java 2010-07-23 05:18:41 UTC (rev 34125)
@@ -221,18 +221,6 @@
queryObject ) );
return new LiveQueryImpl( this, handle );
-
-// this.handleFactory.destroyFactHandle( handle );
-//
-// Declaration[] declarations = new Declaration[0];
-// if ( queryObject.getQuery() != null ) {
-// // this is null when there are no query results, thus the query object is never set
-// declarations = queryObject.getQuery().getDeclarations();
-// }
-//
-// return new QueryResults( ((DefaultQueryResultsCollector) queryObject.getQueryResultCollector()).getResults(),
-// declarations,
-// this );
} finally {
this.lock.unlock();
this.ruleBase.readUnlock();
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/rule/impl/RowAdapter.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/rule/impl/RowAdapter.java 2010-07-23 03:59:03 UTC (rev 34124)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/rule/impl/RowAdapter.java 2010-07-23 05:18:41 UTC (rev 34125)
@@ -86,4 +86,16 @@
return false;
return true;
}
+
+ public String toString() {
+ StringBuilder sbuilder = new StringBuilder();
+ for ( int i = 0, length = this.factHandles.length -1; i < length; i++ ) {
+ sbuilder.append( this.factHandles[i].getObject().toString() );
+ if ( i < length - 1 ) {
+ sbuilder.append( ", " );
+ }
+ }
+
+ return "Row[" + sbuilder.toString() +"]";
+ }
}
\ No newline at end of file
Modified: labs/jbossrules/trunk/pom.xml
===================================================================
--- labs/jbossrules/trunk/pom.xml 2010-07-23 03:59:03 UTC (rev 34124)
+++ labs/jbossrules/trunk/pom.xml 2010-07-23 05:18:41 UTC (rev 34125)
@@ -1733,6 +1733,12 @@
<version>1.4</version>
</dependency>
+ <dependency>
+ <groupId>net.java.dev.glazedlists</groupId>
+ <artifactId>glazedlists_java15</artifactId>
+ <version>1.8.0</version>
+ </dependency>
+
<dependency>
<groupId>com.google.collections</groupId>
<artifactId>google-collections</artifactId>
More information about the jboss-svn-commits
mailing list