[jboss-svn-commits] JBL Code SVN: r23192 - in labs/jbossrules/branches/drools-api-refactor-20080929: drools-compiler/src/test/java/org/drools/integrationtests and 4 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Mon Sep 29 16:15:48 EDT 2008


Author: mark.proctor at jboss.com
Date: 2008-09-29 16:15:48 -0400 (Mon, 29 Sep 2008)
New Revision: 23192

Added:
   labs/jbossrules/branches/drools-api-refactor-20080929/drools-api/src/main/java/org/drools/ClassObjectFilter.java
   labs/jbossrules/branches/drools-api-refactor-20080929/drools-api/src/main/java/org/drools/ObjectFilter.java
Removed:
   labs/jbossrules/branches/drools-api-refactor-20080929/drools-core/src/main/java/org/drools/ObjectFilter.java
   labs/jbossrules/branches/drools-api-refactor-20080929/drools-core/src/main/java/org/drools/base/ClassObjectFilter.java
Modified:
   labs/jbossrules/branches/drools-api-refactor-20080929/drools-api/src/main/java/org/drools/KnowledgeBase.java
   labs/jbossrules/branches/drools-api-refactor-20080929/drools-api/src/main/java/org/drools/StatefulKnowledgeSession.java
   labs/jbossrules/branches/drools-api-refactor-20080929/drools-api/src/main/java/org/drools/StatefulRuleSession.java
   labs/jbossrules/branches/drools-api-refactor-20080929/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java
   labs/jbossrules/branches/drools-api-refactor-20080929/drools-compiler/src/test/java/org/drools/integrationtests/StatefulSessionTest.java
   labs/jbossrules/branches/drools-api-refactor-20080929/drools-compiler/src/test/java/org/drools/integrationtests/TruthMaintenanceTest.java
   labs/jbossrules/branches/drools-api-refactor-20080929/drools-core/pom.xml
   labs/jbossrules/branches/drools-api-refactor-20080929/drools-core/src/main/java/org/drools/impl/KnowledgeBaseImpl.java
   labs/jbossrules/branches/drools-api-refactor-20080929/drools-core/src/main/java/org/drools/impl/StatefulKnowledgeSessionImpl.java
Log:
JBRULES-1734 Drools API
-able to get facthandles and objects now
-first unit test for TruthMaintenanceTest now works.

Copied: labs/jbossrules/branches/drools-api-refactor-20080929/drools-api/src/main/java/org/drools/ClassObjectFilter.java (from rev 23151, labs/jbossrules/branches/drools-api-refactor-20080929/drools-core/src/main/java/org/drools/base/ClassObjectFilter.java)
===================================================================
--- labs/jbossrules/branches/drools-api-refactor-20080929/drools-api/src/main/java/org/drools/ClassObjectFilter.java	                        (rev 0)
+++ labs/jbossrules/branches/drools-api-refactor-20080929/drools-api/src/main/java/org/drools/ClassObjectFilter.java	2008-09-29 20:15:48 UTC (rev 23192)
@@ -0,0 +1,29 @@
+package org.drools;
+
+
+/**
+ * Filters Objects by Class, only accepting Classes of the specified type
+ * @author mproctor
+ *
+ */
+public class ClassObjectFilter implements ObjectFilter {
+    private Class clazz;
+    
+    /** 
+     * The Allowed Class type
+     * @param clazz
+     */
+    public ClassObjectFilter(Class clazz) {
+        this.clazz = clazz;
+    }
+
+    /**
+     * Returning true means the Iterator accepts, and thus returns, the current Object's Class type.
+     * @param object
+     * @return
+     */    
+    public boolean accept(Object object) {
+        return this.clazz.isAssignableFrom( object.getClass() );
+    }
+    
+}


Property changes on: labs/jbossrules/branches/drools-api-refactor-20080929/drools-api/src/main/java/org/drools/ClassObjectFilter.java
___________________________________________________________________
Name: svn:mergeinfo
   + 

Modified: labs/jbossrules/branches/drools-api-refactor-20080929/drools-api/src/main/java/org/drools/KnowledgeBase.java
===================================================================
--- labs/jbossrules/branches/drools-api-refactor-20080929/drools-api/src/main/java/org/drools/KnowledgeBase.java	2008-09-29 17:47:05 UTC (rev 23191)
+++ labs/jbossrules/branches/drools-api-refactor-20080929/drools-api/src/main/java/org/drools/KnowledgeBase.java	2008-09-29 20:15:48 UTC (rev 23192)
@@ -5,7 +5,16 @@
 import org.drools.knowledge.definitions.KnowledgePackage;
 
 public interface KnowledgeBase {    
+    void addKnowledgePackage(KnowledgePackage knowledgePackage);
+    
     void addKnowledgePackages(Collection<KnowledgePackage> knowledgePackage);
     
+    Collection<KnowledgePackage> getKnowledgePackages();
+    
     StatefulKnowledgeSession newStatefulKnowledgeSession();
+
+    void removeRule(String packageName,
+                    String ruleName);
+    
+    
 }

Copied: labs/jbossrules/branches/drools-api-refactor-20080929/drools-api/src/main/java/org/drools/ObjectFilter.java (from rev 23151, labs/jbossrules/branches/drools-api-refactor-20080929/drools-core/src/main/java/org/drools/ObjectFilter.java)
===================================================================
--- labs/jbossrules/branches/drools-api-refactor-20080929/drools-api/src/main/java/org/drools/ObjectFilter.java	                        (rev 0)
+++ labs/jbossrules/branches/drools-api-refactor-20080929/drools-api/src/main/java/org/drools/ObjectFilter.java	2008-09-29 20:15:48 UTC (rev 23192)
@@ -0,0 +1,16 @@
+package org.drools;
+
+/**
+ * ObjectFilter is used with WorkingMemories to filter out instances during Iteration
+ * @author mproctor
+ *
+ */
+public interface ObjectFilter {
+    
+    /**
+     * Returning true means the Iterator accepts, and thus returns, the current Object.
+     * @param object
+     * @return
+     */
+    boolean accept(Object object);
+}


Property changes on: labs/jbossrules/branches/drools-api-refactor-20080929/drools-api/src/main/java/org/drools/ObjectFilter.java
___________________________________________________________________
Name: svn:mergeinfo
   + 

Modified: labs/jbossrules/branches/drools-api-refactor-20080929/drools-api/src/main/java/org/drools/StatefulKnowledgeSession.java
===================================================================
--- labs/jbossrules/branches/drools-api-refactor-20080929/drools-api/src/main/java/org/drools/StatefulKnowledgeSession.java	2008-09-29 17:47:05 UTC (rev 23191)
+++ labs/jbossrules/branches/drools-api-refactor-20080929/drools-api/src/main/java/org/drools/StatefulKnowledgeSession.java	2008-09-29 20:15:48 UTC (rev 23192)
@@ -5,4 +5,6 @@
     void setGlobal(String identifier,
                    Object object);
 
+    KnowledgeBase getKnowledgeBase();
+
 }

Modified: labs/jbossrules/branches/drools-api-refactor-20080929/drools-api/src/main/java/org/drools/StatefulRuleSession.java
===================================================================
--- labs/jbossrules/branches/drools-api-refactor-20080929/drools-api/src/main/java/org/drools/StatefulRuleSession.java	2008-09-29 17:47:05 UTC (rev 23191)
+++ labs/jbossrules/branches/drools-api-refactor-20080929/drools-api/src/main/java/org/drools/StatefulRuleSession.java	2008-09-29 20:15:48 UTC (rev 23192)
@@ -1,14 +1,16 @@
 package org.drools;
 
+import java.util.Collection;
+import java.util.Iterator;
 import java.util.concurrent.Future;
 
 import org.drools.time.SessionClock;
 
 public interface StatefulRuleSession {
-    FactHandle insertObject(Object object);
-    void retractObject(FactHandle factHandle);
-    void updateObject(FactHandle factHandle);
-    void updateObject(FactHandle factHandle, Object object);
+    FactHandle insert(Object object);
+    void retract(FactHandle factHandle);
+    void update(FactHandle factHandle);
+    void update(FactHandle factHandle, Object object);
     
     void fireAllRules();
     
@@ -26,4 +28,12 @@
     Future<Object> asyncInsert( Iterable iterable );  
     
     Future<?> asyncFireAllRules();    
+    
+    Collection<?> getObjects();
+
+    Collection<?> getObjects(ObjectFilter filter);
+
+    Collection<? extends FactHandle> getFactHandles();
+
+    Collection<? extends FactHandle> getFactHandles(ObjectFilter filter);    
 }

Modified: labs/jbossrules/branches/drools-api-refactor-20080929/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java
===================================================================
--- labs/jbossrules/branches/drools-api-refactor-20080929/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java	2008-09-29 17:47:05 UTC (rev 23191)
+++ labs/jbossrules/branches/drools-api-refactor-20080929/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java	2008-09-29 20:15:48 UTC (rev 23192)
@@ -42,6 +42,7 @@
 import org.drools.CheeseEqual;
 import org.drools.Cheesery;
 import org.drools.Child;
+import org.drools.ClassObjectFilter;
 import org.drools.DomainObjectHolder;
 import org.drools.FactA;
 import org.drools.FactB;
@@ -81,7 +82,6 @@
 import org.drools.Cheesery.Maturity;
 import org.drools.audit.WorkingMemoryFileLogger;
 import org.drools.audit.WorkingMemoryInMemoryLogger;
-import org.drools.base.ClassObjectFilter;
 import org.drools.common.AbstractWorkingMemory;
 import org.drools.common.InternalFactHandle;
 import org.drools.compiler.DescrBuildError;

Modified: labs/jbossrules/branches/drools-api-refactor-20080929/drools-compiler/src/test/java/org/drools/integrationtests/StatefulSessionTest.java
===================================================================
--- labs/jbossrules/branches/drools-api-refactor-20080929/drools-compiler/src/test/java/org/drools/integrationtests/StatefulSessionTest.java	2008-09-29 17:47:05 UTC (rev 23191)
+++ labs/jbossrules/branches/drools-api-refactor-20080929/drools-compiler/src/test/java/org/drools/integrationtests/StatefulSessionTest.java	2008-09-29 20:15:48 UTC (rev 23192)
@@ -13,9 +13,7 @@
 import org.drools.FactHandle;
 import org.drools.KnowledgeBase;
 import org.drools.KnowledgeBaseFactory;
-import org.drools.RuleBase;
 import org.drools.RuleBaseConfiguration;
-import org.drools.RuleBaseFactory;
 import org.drools.StatefulKnowledgeSession;
 import org.drools.builder.KnowledgeBuilder;
 import org.drools.builder.KnowledgeBuilderFactory;

Modified: labs/jbossrules/branches/drools-api-refactor-20080929/drools-compiler/src/test/java/org/drools/integrationtests/TruthMaintenanceTest.java
===================================================================
--- labs/jbossrules/branches/drools-api-refactor-20080929/drools-compiler/src/test/java/org/drools/integrationtests/TruthMaintenanceTest.java	2008-09-29 17:47:05 UTC (rev 23191)
+++ labs/jbossrules/branches/drools-api-refactor-20080929/drools-compiler/src/test/java/org/drools/integrationtests/TruthMaintenanceTest.java	2008-09-29 20:15:48 UTC (rev 23192)
@@ -3,14 +3,20 @@
 import junit.framework.TestCase;
 import org.drools.Cheese;
 import org.drools.CheeseEqual;
+import org.drools.ClassObjectFilter;
 import org.drools.FactHandle;
+import org.drools.KnowledgeBase;
+import org.drools.KnowledgeBaseConfiguration;
+import org.drools.KnowledgeBaseFactory;
 import org.drools.Person;
 import org.drools.RuleBase;
 import org.drools.RuleBaseConfiguration;
 import org.drools.RuleBaseFactory;
 import org.drools.Sensor;
+import org.drools.StatefulKnowledgeSession;
 import org.drools.WorkingMemory;
-import org.drools.base.ClassObjectFilter;
+import org.drools.builder.KnowledgeBuilder;
+import org.drools.builder.KnowledgeBuilderFactory;
 import org.drools.common.InternalWorkingMemory;
 import org.drools.common.TruthMaintenanceSystem;
 import org.drools.compiler.PackageBuilder;
@@ -19,12 +25,14 @@
 import org.drools.event.ObjectRetractedEvent;
 import org.drools.event.ObjectUpdatedEvent;
 import org.drools.event.WorkingMemoryEventListener;
+import org.drools.knowledge.definitions.KnowledgePackage;
 import org.drools.rule.Package;
 import org.drools.util.ObjectHashMap;
 
 import java.io.InputStreamReader;
 import java.io.Reader;
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.List;
 
 public class TruthMaintenanceTest extends TestCase {
@@ -40,29 +48,23 @@
                                             config );
     }
     
+    protected KnowledgeBase getKnowledgeBase() throws Exception {
+        return KnowledgeBaseFactory.newKnowledgeBase();
+    }
+    
+    protected KnowledgeBase getKnowledgeBase(KnowledgeBaseConfiguration config) throws Exception {
+        return KnowledgeBaseFactory.newKnowledgeBase( config );
+    }    
+    
     public void testLogicalInsertionsDynamicRule() throws Exception {
-        PackageBuilder builder = new PackageBuilder();
-        builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_LogicalInsertionsDynamicRule.drl" ) ) );
-        final Package pkg = builder.getPackage();
+        KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+        kbuilder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_LogicalInsertionsDynamicRule.drl" ) ) );
+        
+        Collection<KnowledgePackage> kpkgs = kbuilder.getKnowledgePackages();
+        KnowledgeBase kbase = getKnowledgeBase();
+        kbase.addKnowledgePackages( kpkgs );        
+        StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
 
-        org.drools.reteoo.ReteooRuleBase reteooRuleBase = null;
-        // org.drools.leaps.LeapsRuleBase leapsRuleBase = null;
-        RuleBase ruleBase = getRuleBase();
-        if ( ruleBase instanceof org.drools.reteoo.ReteooRuleBase ) {
-            reteooRuleBase = (org.drools.reteoo.ReteooRuleBase) ruleBase;
-            // } else if ( ruleBase instanceof org.drools.leaps.LeapsRuleBase )
-            // {
-            // leapsRuleBase = (org.drools.leaps.LeapsRuleBase) ruleBase;
-        }
-        ruleBase.addPackage( pkg );
-//        ruleBase    = SerializationHelper.serializeObject(ruleBase);
-        final WorkingMemory workingMemory = ruleBase.newStatefulSession();
-
-        // workingMemory.addEventListener(new
-        // org.drools.event.DebugAgendaEventListener());
-        // workingMemory.addEventListener(new
-        // org.drools.event.DebugWorkingMemoryEventListener());
-
         final Cheese c1 = new Cheese( "a",
                                       1 );
         final Cheese c2 = new Cheese( "b",
@@ -71,13 +73,13 @@
                                       3 );
         List list;
 
-        workingMemory.insert( c1 );
-        final FactHandle h = workingMemory.insert( c2 );
-        workingMemory.insert( c3 );
-        workingMemory.fireAllRules();
+        ksession.insert( c1 );
+        final FactHandle h = ksession.insert( c2 );
+        ksession.insert( c3 );
+        ksession.fireAllRules();
 
-        // Check logical Insertions where made for c2 and c3
-        list = IteratorToList.convert( workingMemory.iterateObjects( new ClassObjectFilter( Person.class) ) );
+        // Check logical Insertions where made for c2 and c3        
+        list = new ArrayList( ksession.getObjects( new ClassObjectFilter( Person.class) ) );
         assertEquals( 2,
                       list.size() );
         assertFalse( list.contains( new Person( c1.getType() ) ) );
@@ -86,18 +88,18 @@
 
         // this rule will make a logical assertion for c1 too
         final Reader reader = new InputStreamReader( getClass().getResourceAsStream( "test_LogicalInsertionsDynamicRule2.drl" ) );
-        builder = new PackageBuilder();
-        builder.addPackageFromDrl( reader );
-        final Package pkg2 = builder.getPackage();
-        ruleBase.addPackage( pkg2 );
-        ruleBase    = SerializationHelper.serializeObject(ruleBase);
+        kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+        kbuilder.addPackageFromDrl( reader );
+        Collection<KnowledgePackage> kpkgs2 = kbuilder.getKnowledgePackages();
+        kbase.addKnowledgePackages( kpkgs2 );
+        kbase    = SerializationHelper.serializeObject( kbase );
 
-        workingMemory.fireAllRules();
+        ksession.fireAllRules();
 
-        ruleBase    = workingMemory.getRuleBase();
-
+        kbase    = ksession.getKnowledgeBase();
+        
         // check all now have just one logical assertion each
-        list = IteratorToList.convert( workingMemory.iterateObjects( new ClassObjectFilter( Person.class) ) );
+        list = new ArrayList( ksession.getObjects( new ClassObjectFilter( Person.class) ) );
         assertEquals( 3,
                       list.size() );
         assertTrue( list.contains( new Person( c1.getType() ) ) );
@@ -105,35 +107,33 @@
         assertTrue( list.contains( new Person( c3.getType() ) ) );
 
         // check the packages are correctly populated
+        KnowledgePackage[] pkgs = ( KnowledgePackage[] ) kbase.getKnowledgePackages().toArray( new KnowledgePackage[] {} );
         assertEquals( "org.drools.test",
-                      ruleBase.getPackages()[0].getName() );
+                      pkgs[0].getName() );
         assertEquals( "org.drools.test2",
-                      ruleBase.getPackages()[1].getName() );
+                      pkgs[1].getName() );
         assertEquals( "rule1",
-                      ruleBase.getPackages()[0].getRules()[0].getName() );
+                      pkgs[0].getRules().iterator().next().getName() );
         assertEquals( "rule2",
-                      ruleBase.getPackages()[1].getRules()[0].getName() );
+                      pkgs[1].getRules().iterator().next().getName() );
 
         // now remove the first rule
-        if ( reteooRuleBase != null ) {
-            reteooRuleBase.removeRule( ruleBase.getPackages()[0].getName(),
-                                       ruleBase.getPackages()[0].getRules()[0].getName() );
-            // } else if ( leapsRuleBase != null ) {
-            // leapsRuleBase.removeRule( ruleBase.getPackages()[0].getName(),
-            // ruleBase.getPackages()[0].getRules()[0].getName() );
-        }
+        kbase.removeRule( pkgs[0].getName(),
+                          pkgs[0].getRules().iterator().next().getName() );
+        pkgs = ( KnowledgePackage[] ) kbase.getKnowledgePackages().toArray( new KnowledgePackage[] {} );
 
         // Check the rule was correctly remove
         assertEquals( 0,
-                      ruleBase.getPackages()[0].getRules().length );
+                      pkgs[0].getRules().size() );
         assertEquals( 1,
-                      ruleBase.getPackages()[1].getRules().length );
+                      pkgs[1].getRules().size() );
         assertEquals( "org.drools.test2",
-                      ruleBase.getPackages()[1].getName() );
+                      pkgs[1].getName() );
         assertEquals( "rule2",
-                      ruleBase.getPackages()[1].getRules()[0].getName() );
+                      pkgs[1].getRules().iterator().next().getName() );
 
-        list = IteratorToList.convert( workingMemory.iterateObjects( new ClassObjectFilter( Person.class) ) );
+        
+        list = new ArrayList( ksession.getObjects( new ClassObjectFilter( Person.class) ) );
         assertEquals( "removal of the rule should result in retraction of c3's logical assertion",
                       2,
                       list.size() );
@@ -145,9 +145,9 @@
                      list.contains( new Person( c3.getType() ) ) );
 
         c2.setPrice( 3 );
-        workingMemory.update( h,
-                                    c2 );
-        list = IteratorToList.convert( workingMemory.iterateObjects( new ClassObjectFilter( Person.class) ) );
+        ksession.update( h,
+                         c2 );
+        list = new ArrayList( ksession.getObjects( new ClassObjectFilter( Person.class) ) );
         assertEquals( "c2 now has a higher price, its logical assertion should  be cancelled",
                       1,
                       list.size() );
@@ -156,19 +156,16 @@
         assertTrue( "The logical assertion  for c1 should exist",
                     list.contains( new Person( c1.getType() ) ) );
 
-        if ( reteooRuleBase != null ) {
-            reteooRuleBase.removeRule( ruleBase.getPackages()[1].getName(),
-                                       ruleBase.getPackages()[1].getRules()[0].getName() );
-            // } else if ( leapsRuleBase != null ) {
-            // leapsRuleBase.removeRule( ruleBase.getPackages()[1].getName(),
-            // ruleBase.getPackages()[1].getRules()[0].getName() );
-        }
-        ruleBase    = SerializationHelper.serializeObject(ruleBase);
+        pkgs = ( KnowledgePackage[] ) kbase.getKnowledgePackages().toArray( new KnowledgePackage[] {} );
+            kbase.removeRule( pkgs[1].getName(),
+                              pkgs[1].getRules().iterator().next().getName() );
+        kbase    = SerializationHelper.serializeObject( kbase );
+        pkgs = ( KnowledgePackage[] ) kbase.getKnowledgePackages().toArray( new KnowledgePackage[] {} );
         assertEquals( 0,
-                      ruleBase.getPackages()[0].getRules().length );
+                      pkgs[0].getRules().size() );
         assertEquals( 0,
-                      ruleBase.getPackages()[1].getRules().length );
-        list = IteratorToList.convert( workingMemory.iterateObjects( new ClassObjectFilter( Person.class) ) );
+                      pkgs[1].getRules().size() );
+        list = new ArrayList( ksession.getObjects( new ClassObjectFilter( Person.class) ) );
         assertEquals( 0,
                       list.size() );
     }

Modified: labs/jbossrules/branches/drools-api-refactor-20080929/drools-core/pom.xml
===================================================================
--- labs/jbossrules/branches/drools-api-refactor-20080929/drools-core/pom.xml	2008-09-29 17:47:05 UTC (rev 23191)
+++ labs/jbossrules/branches/drools-api-refactor-20080929/drools-core/pom.xml	2008-09-29 20:15:48 UTC (rev 23192)
@@ -25,11 +25,10 @@
       <artifactId>mvel</artifactId>
     </dependency> 
 
-    <!--dependency>
-      <groupId>milyn</groupId>
-      <artifactId>milyn-smooks-javabean</artifactId>
-      <version>1.0.1</version>
-    </dependency-->         
+    <dependency>
+      <groupId>org.drools</groupId>
+      <artifactId>drools-api</artifactId>
+    </dependency>         
     
   </dependencies>
   

Deleted: labs/jbossrules/branches/drools-api-refactor-20080929/drools-core/src/main/java/org/drools/ObjectFilter.java
===================================================================
--- labs/jbossrules/branches/drools-api-refactor-20080929/drools-core/src/main/java/org/drools/ObjectFilter.java	2008-09-29 17:47:05 UTC (rev 23191)
+++ labs/jbossrules/branches/drools-api-refactor-20080929/drools-core/src/main/java/org/drools/ObjectFilter.java	2008-09-29 20:15:48 UTC (rev 23192)
@@ -1,16 +0,0 @@
-package org.drools;
-
-/**
- * ObjectFilter is used with WorkingMemories to filter out instances during Iteration
- * @author mproctor
- *
- */
-public interface ObjectFilter {
-    
-    /**
-     * Returning true means the Iterator accepts, and thus returns, the current Object.
-     * @param object
-     * @return
-     */
-    boolean accept(Object object);
-}

Deleted: labs/jbossrules/branches/drools-api-refactor-20080929/drools-core/src/main/java/org/drools/base/ClassObjectFilter.java
===================================================================
--- labs/jbossrules/branches/drools-api-refactor-20080929/drools-core/src/main/java/org/drools/base/ClassObjectFilter.java	2008-09-29 17:47:05 UTC (rev 23191)
+++ labs/jbossrules/branches/drools-api-refactor-20080929/drools-core/src/main/java/org/drools/base/ClassObjectFilter.java	2008-09-29 20:15:48 UTC (rev 23192)
@@ -1,30 +0,0 @@
-package org.drools.base;
-
-import org.drools.ObjectFilter;
-
-/**
- * Filters Objects by Class, only accepting Classes of the specified type
- * @author mproctor
- *
- */
-public class ClassObjectFilter implements ObjectFilter {
-    private Class clazz;
-    
-    /** 
-     * The Allowed Class type
-     * @param clazz
-     */
-    public ClassObjectFilter(Class clazz) {
-        this.clazz = clazz;
-    }
-
-    /**
-     * Returning true means the Iterator accepts, and thus returns, the current Object's Class type.
-     * @param object
-     * @return
-     */    
-    public boolean accept(Object object) {
-        return this.clazz.isAssignableFrom( object.getClass() );
-    }
-    
-}

Modified: labs/jbossrules/branches/drools-api-refactor-20080929/drools-core/src/main/java/org/drools/impl/KnowledgeBaseImpl.java
===================================================================
--- labs/jbossrules/branches/drools-api-refactor-20080929/drools-core/src/main/java/org/drools/impl/KnowledgeBaseImpl.java	2008-09-29 17:47:05 UTC (rev 23191)
+++ labs/jbossrules/branches/drools-api-refactor-20080929/drools-core/src/main/java/org/drools/impl/KnowledgeBaseImpl.java	2008-09-29 20:15:48 UTC (rev 23192)
@@ -4,7 +4,9 @@
 import java.io.IOException;
 import java.io.ObjectInput;
 import java.io.ObjectOutput;
+import java.util.ArrayList;
 import java.util.Collection;
+import java.util.List;
 
 import org.drools.KnowledgeBase;
 import org.drools.RuleBase;
@@ -13,6 +15,7 @@
 import org.drools.knowledge.definitions.impl.KnowledgePackageImp;
 import org.drools.reteoo.ReteooRuleBase;
 import org.drools.reteoo.ReteooStatefulSession;
+import org.drools.rule.Package;
 
 public class KnowledgeBaseImpl
     implements
@@ -47,10 +50,23 @@
             ruleBase.addPackage( ((KnowledgePackageImp) knowledgePackage).pkg );
         }
     }
+    
+    public Collection<KnowledgePackage> getKnowledgePackages() {
+        Package[] pkgs = ruleBase.getPackages();
+        List< KnowledgePackage > list = new ArrayList< KnowledgePackage >( pkgs.length );
+        for ( Package pkg : pkgs ) {
+            list.add( new KnowledgePackageImp( pkg ) );
+        }
+        return list;
+    }    
 
     public StatefulKnowledgeSession newStatefulKnowledgeSession() {
         ReteooStatefulSession session = (ReteooStatefulSession) this.ruleBase.newStatefulSession();
-        return new StatefulKnowledgeSessionImpl( session );
+        return new StatefulKnowledgeSessionImpl( session , this );
     }
 
+    public void removeRule(String packageName,
+                           String ruleName) {
+        this.ruleBase.removeRule( packageName, ruleName );
+    }
 }

Modified: labs/jbossrules/branches/drools-api-refactor-20080929/drools-core/src/main/java/org/drools/impl/StatefulKnowledgeSessionImpl.java
===================================================================
--- labs/jbossrules/branches/drools-api-refactor-20080929/drools-core/src/main/java/org/drools/impl/StatefulKnowledgeSessionImpl.java	2008-09-29 17:47:05 UTC (rev 23191)
+++ labs/jbossrules/branches/drools-api-refactor-20080929/drools-core/src/main/java/org/drools/impl/StatefulKnowledgeSessionImpl.java	2008-09-29 20:15:48 UTC (rev 23192)
@@ -1,12 +1,16 @@
 package org.drools.impl;
 
 import java.util.Collection;
+import java.util.Iterator;
 import java.util.Map;
 import java.util.concurrent.Future;
 
 import org.drools.FactHandle;
+import org.drools.KnowledgeBase;
+import org.drools.ObjectFilter;
 import org.drools.StatefulKnowledgeSession;
 import org.drools.common.InternalFactHandle;
+import org.drools.common.ObjectStore;
 import org.drools.concurrent.FutureAdapter;
 import org.drools.process.instance.ProcessInstance;
 import org.drools.process.instance.WorkItemManager;
@@ -17,10 +21,16 @@
     implements
     StatefulKnowledgeSession {
     public ReteooStatefulSession session;
+    public KnowledgeBaseImpl kbase;
 
-    public StatefulKnowledgeSessionImpl(ReteooStatefulSession session) {
+    public StatefulKnowledgeSessionImpl(ReteooStatefulSession session, KnowledgeBaseImpl kbase) {
         this.session = session;
+        this.kbase = kbase;
     }
+    
+    public KnowledgeBase getKnowledgeBase() {
+        return kbase;
+    }
 
     public void fireAllRules() {
         this.session.fireAllRules();
@@ -34,22 +44,22 @@
         this.session.halt();
     }
 
-    public FactHandle insertObject(Object object) {
+    public FactHandle insert(Object object) {
         return this.session.insert( object );
     }
 
-    public void retractObject(FactHandle factHandle) {
+    public void retract(FactHandle factHandle) {
         this.session.retract( factHandle );
 
     }
 
-    public void updateObject(FactHandle factHandle) {
+    public void update(FactHandle factHandle) {
         this.session.update( factHandle,
                              ((InternalFactHandle) factHandle).getObject() );
     }
 
-    public void updateObject(FactHandle factHandle,
-                             Object object) {
+    public void update(FactHandle factHandle,
+                       Object object) {
         this.session.update( factHandle,
                              object );
     }
@@ -75,10 +85,11 @@
         return this.session.startProcess( processId,
                                           parameters );
     }
-    
+
     public void setGlobal(String identifier,
                           Object object) {
-        this.session.setGlobal( identifier, object );
+        this.session.setGlobal( identifier,
+                                object );
     }
 
     public Future<Object> asyncInsert(Object object) {
@@ -88,12 +99,156 @@
     public Future<Object> asyncInsert(Object[] array) {
         return new FutureAdapter( this.session.asyncInsert( array ) );
     }
-    
+
     public Future<Object> asyncInsert(Iterable iterable) {
         return new FutureAdapter( this.session.asyncInsert( iterable ) );
-    }    
+    }
 
-    public Future<?> asyncFireAllRules() {
+    public Future< ? > asyncFireAllRules() {
         return new FutureAdapter( this.session.asyncFireAllRules() );
     }
+
+    public Collection< ? extends FactHandle> getFactHandles() {
+        return new ObjectStoreWrapper( session.getObjectStore(),
+                                       null,
+                                       ObjectStoreWrapper.FACT_HANDLE );
+    }
+
+    public Collection< ? extends FactHandle> getFactHandles(ObjectFilter filter) {
+        return new ObjectStoreWrapper( session.getObjectStore(),
+                                       filter,
+                                       ObjectStoreWrapper.FACT_HANDLE );
+    }
+
+    public Collection< ? > getObjects() {
+        return new ObjectStoreWrapper( session.getObjectStore(),
+                                       null,
+                                       ObjectStoreWrapper.OBJECT );
+    }
+
+    public Collection< ? > getObjects(ObjectFilter filter) {
+        return new ObjectStoreWrapper( session.getObjectStore(),
+                                       filter,
+                                       ObjectStoreWrapper.OBJECT );
+    }
+
+    public static abstract class AbstractImmutableCollection
+        implements
+        Collection {
+
+        public boolean add(Object o) {
+            throw new UnsupportedOperationException( "This is an immmutable Collection" );
+        }
+
+        public boolean addAll(Collection c) {
+            throw new UnsupportedOperationException( "This is an immmutable Collection" );
+        }
+
+        public void clear() {
+            throw new UnsupportedOperationException( "This is an immmutable Collection" );
+        }
+
+        public boolean remove(Object o) {
+            throw new UnsupportedOperationException( "This is an immmutable Collection" );
+        }
+
+        public boolean removeAll(Collection c) {
+            throw new UnsupportedOperationException( "This is an immmutable Collection" );
+        }
+
+        public boolean retainAll(Collection c) {
+            throw new UnsupportedOperationException( "This is an immmutable Collection" );
+        }
+    }
+
+    public static class ObjectStoreWrapper extends AbstractImmutableCollection {
+        public ObjectStore      store;
+        public ObjectFilter     filter;
+        public int              type;           // 0 == object, 1 == facthandle
+        public static final int OBJECT      = 0;
+        public static final int FACT_HANDLE = 1;
+
+        public ObjectStoreWrapper(ObjectStore store,
+                                  ObjectFilter filter,
+                                  int type) {
+            this.store = store;
+            this.filter = filter;
+            this.type = type;
+        }
+
+        public boolean contains(Object object) {
+            if ( object instanceof FactHandle ) {
+                return this.store.getObjectForHandle( (InternalFactHandle) object ) != null;
+            } else {
+                return this.store.getHandleForObject( object ) != null;
+            }
+        }
+
+        public boolean containsAll(Collection c) {
+            for ( Object object : c ) {
+                if ( !contains( object ) ) {
+                    return false;
+                }
+            }
+            return true;
+        }
+
+        public boolean isEmpty() {
+            if ( this.filter == null ) {
+                return this.store.isEmpty();
+            }
+                                  
+            return size() == 0;
+        }
+        
+        public int size() {
+            if ( this.filter == null ) {
+                return this.store.size();
+            }
+            
+            int i = 0;
+            for ( Iterator it = iterator(); it.hasNext(); ) {
+                it.next();
+                i++;
+            }  
+            
+            return i;
+        }        
+
+        public Iterator< ? > iterator() {
+            Iterator it = null;
+            if ( type == OBJECT ) {
+                if ( filter != null ) {
+                    it = store.iterateObjects( filter );
+                } else {
+                    it = store.iterateObjects();
+                }
+            } else {
+                if ( filter != null ) {
+                    it = store.iterateFactHandles( filter );
+                } else {
+                    it = store.iterateFactHandles();
+                }
+            }
+            return it;
+        }
+
+        public Object[] toArray() {
+            return toArray( new Object[size()] );
+        }
+
+        public Object[] toArray(Object[] array) {
+            if ( array == null || array.length != size() ) {
+                array = new Object[size()];
+            }
+
+            int i = 0;
+            for ( Iterator it = iterator(); it.hasNext(); ) {
+                array[i++] = it.next();
+            }
+
+            return array;
+        }
+    }
+
 }




More information about the jboss-svn-commits mailing list