[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