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

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Mon May 28 19:48:26 EDT 2007


Author: michael.neale at jboss.com
Date: 2007-05-28 19:48:26 -0400 (Mon, 28 May 2007)
New Revision: 12191

Modified:
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/compiler/PackageBuilderTest.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ExecutionFlowControlTest.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractRuleBase.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Package.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/common/core/IProcess.java
Log:
JBRULES-877 RuleFlow in package

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/compiler/PackageBuilderTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/compiler/PackageBuilderTest.java	2007-05-28 23:16:22 UTC (rev 12190)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/compiler/PackageBuilderTest.java	2007-05-28 23:48:26 UTC (rev 12191)
@@ -19,6 +19,7 @@
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
+import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.io.ObjectInput;
 import java.io.ObjectInputStream;
@@ -73,6 +74,8 @@
 import org.drools.rule.PredicateConstraint;
 import org.drools.rule.ReturnValueConstraint;
 import org.drools.rule.Rule;
+import org.drools.ruleflow.common.core.IProcess;
+import org.drools.ruleflow.core.impl.RuleFlowProcess;
 import org.drools.spi.Activation;
 import org.drools.spi.AgendaGroup;
 import org.drools.spi.CompiledInvoker;
@@ -1119,7 +1122,110 @@
 
         return rule;
     }
+    
+    public void testRuleFlow() throws Exception {
+        PackageBuilder builder = new PackageBuilder();
+        
+        InputStream in = this.getClass().getResourceAsStream( "/org/drools/integrationtests/ruleflow.rf" );
+        assertNotNull(in);
+        
+        builder.addPackage( new PackageDescr("ya") );
+        
+        builder.addRuleFlow( new InputStreamReader(in) );
+        Package pkg = builder.getPackage();
+        assertNotNull(pkg);
+        
+        Map flows = pkg.getRuleFlows();
+        assertNotNull(flows);
+        assertEquals(1, flows.size());
+        
+        assertTrue(flows.containsKey( "0" ));
+        
+        IProcess p = (IProcess) flows.get( "0" );
+        assertTrue( p instanceof RuleFlowProcess );
+        
+        
+        //now serialization
+        ByteArrayOutputStream data = new ByteArrayOutputStream();
+        ObjectOutputStream out = new ObjectOutputStream(data);
+        out.writeObject( pkg );
+        
+        ObjectInputStream objIn = new ObjectInputStream(new ByteArrayInputStream(data.toByteArray()));
+        Package pkg2 = (Package) objIn.readObject();
+        assertNotNull(pkg2);
+        
+        flows = pkg2.getRuleFlows();
+        assertNotNull(flows);
+        assertEquals(1, flows.size());
+        assertTrue(flows.containsKey( "0" ));
+        p = (IProcess) flows.get( "0" );
+        assertTrue( p instanceof RuleFlowProcess );
+        
+        
+        
+        
+        
+    }
+    
+    public void testPackageRuleFlows() throws Exception {
+        Package pkg = new Package("boo");
+        IProcess rf = new MockRuleFlow("1");
+        pkg.addRuleFlow( rf );
+        assertTrue(pkg.getRuleFlows().containsKey( "1" ));
+        assertSame(rf, pkg.getRuleFlows().get( "1" ));
+        
+        IProcess rf2 = new MockRuleFlow("2");
+        pkg.addRuleFlow( rf2 );
+        assertTrue(pkg.getRuleFlows().containsKey( "1" ));
+        assertSame(rf, pkg.getRuleFlows().get( "1" ));
+        assertTrue(pkg.getRuleFlows().containsKey( "2" ));
+        assertSame(rf2, pkg.getRuleFlows().get( "2" ));
+        
+        pkg.removeRuleFlow( "1" );
+        assertTrue(pkg.getRuleFlows().containsKey( "2" ));
+        assertSame(rf2, pkg.getRuleFlows().get( "2" ));
+        assertFalse(pkg.getRuleFlows().containsKey( "1" ));
+        
+    }
+    
+    class MockRuleFlow implements IProcess {
 
+        private String id;
+
+        MockRuleFlow(String id) {
+            this.id = id;
+        }
+        
+        public String getId() {
+            return id;
+        }
+
+        public String getName() {
+            return null;
+        }
+
+        public String getType() {
+            return null;
+        }
+
+        public String getVersion() {
+            return null;
+        }
+
+        public void setId(String id) {
+        }
+
+        public void setName(String name) {
+        }
+
+        public void setType(String type) {
+        }
+
+        public void setVersion(String version) {
+        }
+        
+    }
+
     class MockActivation
         implements
         Activation {

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ExecutionFlowControlTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ExecutionFlowControlTest.java	2007-05-28 23:16:22 UTC (rev 12190)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ExecutionFlowControlTest.java	2007-05-28 23:48:26 UTC (rev 12191)
@@ -586,7 +586,44 @@
         assertEquals( IProcessInstance.STATE_COMPLETED,
                       processInstance.getState() );
     }
+    
+    public void testRuleFlowInPackage() throws Exception {
+        final PackageBuilder builder = new PackageBuilder();
+        builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "ruleflow.drl" ) ) );
+        builder.addRuleFlow( new InputStreamReader( getClass().getResourceAsStream( "ruleflow.rf" ) ) );
+        final Package pkg = builder.getPackage();
 
+        final RuleBase ruleBase = getRuleBase();
+        ruleBase.addPackage( pkg );
+
+        final WorkingMemory workingMemory = ruleBase.newStatefulSession();
+        final List list = new ArrayList();
+        workingMemory.setGlobal( "list",
+                                 list );
+
+        workingMemory.fireAllRules();
+        assertEquals( 0,
+                      list.size() );
+
+        final IProcessInstance processInstance = workingMemory.startProcess( "0" );
+        assertEquals( IProcessInstance.STATE_ACTIVE,
+                      processInstance.getState() );
+        workingMemory.fireAllRules();
+        assertEquals( 4,
+                      list.size() );
+        assertEquals( "Rule1",
+                      list.get( 0 ) );
+        assertEquals( "Rule3",
+                      list.get( 1 ) );
+        assertEquals( "Rule2",
+                      list.get( 2 ) );
+        assertEquals( "Rule4",
+                      list.get( 3 ) );
+        assertEquals( IProcessInstance.STATE_COMPLETED,
+                      processInstance.getState() );
+        
+    }
+
     private RuleBase loadRuleBase(final Reader reader) throws IOException,
                                                       DroolsParserException,
                                                       Exception {

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractRuleBase.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractRuleBase.java	2007-05-28 23:16:22 UTC (rev 12190)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractRuleBase.java	2007-05-28 23:48:26 UTC (rev 12191)
@@ -24,13 +24,14 @@
 import java.io.ObjectInput;
 import java.io.ObjectOutput;
 import java.io.ObjectOutputStream;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
-import java.util.WeakHashMap;
+import java.util.Map.Entry;
 
 import org.drools.FactException;
 import org.drools.PackageIntegrationException;
@@ -293,6 +294,15 @@
                 addRule( rules[i] );
             }
 
+            //and now the rule flows
+            if (newPkg.getRuleFlows() != Collections.EMPTY_MAP) { 
+                Map flows = newPkg.getRuleFlows();
+                for ( Iterator iter = flows.entrySet().iterator(); iter.hasNext(); ) {
+                    Entry flow = (Entry) iter.next();
+                    this.processes.put( flow.getKey(), flow.getValue() );
+                }
+            }
+            
             this.packageClassLoader.addClassLoader( newPkg.getPackageCompilationData().getClassLoader() );
 
         } finally {

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Package.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Package.java	2007-05-28 23:16:22 UTC (rev 12190)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Package.java	2007-05-28 23:48:26 UTC (rev 12191)
@@ -33,6 +33,8 @@
 
 import org.drools.common.ObjectInputStreamWithLoader;
 import org.drools.facttemplates.FactTemplate;
+import org.drools.ruleflow.common.core.IProcess;
+import org.drools.ruleflow.core.impl.RuleFlowProcess;
 import org.drools.util.StringUtils;
 
 /**
@@ -76,6 +78,8 @@
 
     private Map                    factTemplates;
 
+    private Map                    ruleFlows;
+    
     // @todo: add attributes to Package
     //private Map                   attributes;
 
@@ -122,6 +126,7 @@
         this.imports = new ArrayList( 1 );
         this.staticImports = Collections.EMPTY_LIST;
         this.rules = new LinkedHashMap();
+        this.ruleFlows = Collections.EMPTY_MAP;
         this.globals = Collections.EMPTY_MAP;
         this.factTemplates = Collections.EMPTY_MAP;
         this.functions = Collections.EMPTY_LIST;
@@ -139,7 +144,8 @@
         stream.writeObject( this.imports );
         stream.writeObject( this.staticImports );
         stream.writeObject( this.globals );
-
+        stream.writeObject( this.ruleFlows );
+        
         // Rules must be restored by an ObjectInputStream that can resolve using a given ClassLoader to handle seaprately by storing as
         // a byte[]
         final ByteArrayOutputStream bos = new ByteArrayOutputStream();
@@ -162,7 +168,8 @@
         this.imports = (List) stream.readObject();
         this.staticImports = (List) stream.readObject();
         this.globals = (Map) stream.readObject();
-
+        this.ruleFlows = (Map) stream.readObject();
+        
         // Return the rules stored as a byte[]
         final byte[] bytes = (byte[]) stream.readObject();
 
@@ -278,6 +285,36 @@
                         rule );
         rule.setLoadOrder( this.rules.size() );
     }
+    
+    /**
+     * Add a rule flow to this package.
+     */
+    public void addRuleFlow(IProcess process) {
+        if (this.ruleFlows == Collections.EMPTY_MAP) {
+            this.ruleFlows = new HashMap();
+        }
+        this.ruleFlows.put(process.getId(), process );
+    }
+    
+    /**
+     * Get the rule flows for this package. The key is the ruleflow id.
+     * It will be Collections.EMPTY_MAP if none have been added.
+     */
+    public Map getRuleFlows() {
+        return this.ruleFlows;
+    }
+    
+    
+    /**
+     * Rule flows can be removed by ID. 
+     */
+    public void removeRuleFlow(String id) {
+        if (!this.ruleFlows.containsKey( id )) {
+            throw new IllegalArgumentException("The rule flow with id [" + id + "] is not part of this package.");
+        }
+        this.ruleFlows.remove( id );
+    }
+    
 
     public void removeRule(final Rule rule) {
         this.rules.remove( rule.getName() );

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/common/core/IProcess.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/common/core/IProcess.java	2007-05-28 23:16:22 UTC (rev 12190)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/common/core/IProcess.java	2007-05-28 23:48:26 UTC (rev 12191)
@@ -1,5 +1,7 @@
 package org.drools.ruleflow.common.core;
 
+import java.io.Serializable;
+
 /*
  * Copyright 2005 JBoss Inc
  * 
@@ -25,7 +27,7 @@
  * 
  * @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
  */
-public interface IProcess {
+public interface IProcess extends Serializable {
 
     /**
      * Sets the id of this process.




More information about the jboss-svn-commits mailing list