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

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed Feb 28 21:36:54 EST 2007


Author: KrisVerlaenen
Date: 2007-02-28 21:36:54 -0500 (Wed, 28 Feb 2007)
New Revision: 9866

Added:
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/ProcessBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/ruleflow.drl
   labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/ruleflow.rf
   labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/ruleflowgroup.drl
Modified:
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/IntegrationCases.java
Log:
JBRULES-712: Rule Flow Compiler Implementation
 - first implementation of ruleflow in compiler

Added: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/ProcessBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/ProcessBuilder.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/ProcessBuilder.java	2007-03-01 02:36:54 UTC (rev 9866)
@@ -0,0 +1,63 @@
+package org.drools.compiler;
+/*
+ * Copyright 2005 JBoss Inc
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import java.io.Reader;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.drools.ruleflow.common.core.IProcess;
+import org.drools.ruleflow.core.IRuleFlowProcess;
+
+import com.thoughtworks.xstream.XStream;
+
+/**
+ * A ProcessBuilder can be used to build processes based on XML files
+ * containing a process definition.
+ * 
+ * @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
+ */
+public class ProcessBuilder {
+	
+	private List processes = new ArrayList();
+	
+	public IProcess[] getProcesses() {
+		return (IProcess[]) processes.toArray(new IProcess[processes.size()]);
+	}
+	
+	public void addProcess(IProcess process) {
+		processes.add(process);
+	}
+	
+	public void addProcessFromFile(final Reader reader) throws Exception {
+        XStream stream = new XStream();
+        stream.setMode(XStream.ID_REFERENCES);
+        
+        ClassLoader oldLoader = Thread.currentThread().getContextClassLoader();
+        ClassLoader newLoader = this.getClass().getClassLoader();
+        try {
+            Thread.currentThread().setContextClassLoader(newLoader);
+            IRuleFlowProcess process = (IRuleFlowProcess) stream.fromXML(reader);
+            addProcess(process);
+        } catch (Exception t) {
+            t.printStackTrace();
+            throw t;
+        } finally {
+            Thread.currentThread().setContextClassLoader(oldLoader);
+        }
+        reader.close();
+	}
+}

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/IntegrationCases.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/IntegrationCases.java	2007-03-01 02:32:55 UTC (rev 9865)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/IntegrationCases.java	2007-03-01 02:36:54 UTC (rev 9866)
@@ -70,6 +70,7 @@
 import org.drools.compiler.PackageBuilder;
 import org.drools.compiler.PackageBuilderConfiguration;
 import org.drools.compiler.ParserError;
+import org.drools.compiler.ProcessBuilder;
 import org.drools.compiler.RuleError;
 import org.drools.event.ActivationCancelledEvent;
 import org.drools.event.ActivationCreatedEvent;
@@ -85,6 +86,7 @@
 import org.drools.rule.InvalidRulePackage;
 import org.drools.rule.Package;
 import org.drools.rule.Rule;
+import org.drools.ruleflow.common.instance.IProcessInstance;
 import org.drools.spi.ActivationGroup;
 import org.drools.spi.AgendaGroup;
 import org.drools.xml.XmlDumper;
@@ -3964,7 +3966,60 @@
                       workingMemory.getObjects().size() );
 
     }
+    
+    public void testRuleFlow() throws Exception {
+        final PackageBuilder builder = new PackageBuilder();
+        builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "ruleflow.drl" ) ) );
+        final Package pkg = builder.getPackage();
+        ProcessBuilder processBuilder = new ProcessBuilder();
+        processBuilder.addProcessFromFile(new InputStreamReader( getClass().getResourceAsStream( "ruleflow.rf" ) ) );
 
+        final RuleBase ruleBase = getRuleBase();
+        ruleBase.addPackage( pkg );
+        ruleBase.addProcess( processBuilder.getProcesses()[0]);
+        
+        final WorkingMemory workingMemory = ruleBase.newWorkingMemory();
+        final List list = new ArrayList();
+        workingMemory.setGlobal( "list",
+                                 list );
+
+        workingMemory.fireAllRules();
+        assertEquals(0, list.size());
+        
+        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());
+    }
+
+    public void testRuleFlowGroup() throws Exception {
+        final PackageBuilder builder = new PackageBuilder();
+        builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "ruleflowgroup.drl" ) ) );
+        final Package pkg = builder.getPackage();
+
+        final RuleBase ruleBase = getRuleBase();
+        ruleBase.addPackage( pkg );
+        
+        final WorkingMemory workingMemory = ruleBase.newWorkingMemory();
+        final List list = new ArrayList();
+        workingMemory.setGlobal( "list",
+                                 list );
+
+        workingMemory.assertObject("Test");
+        workingMemory.fireAllRules();
+        assertEquals(0, list.size());
+
+        workingMemory.getAgenda().activateRuleFlowGroup("Group1");
+        workingMemory.fireAllRules();
+
+        assertEquals(1, list.size());
+    }
+
     public void testDuplicateVariableBinding() throws Exception {
         try {
             final PackageBuilder builder = new PackageBuilder();

Added: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/ruleflow.drl
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/ruleflow.drl	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/ruleflow.drl	2007-03-01 02:36:54 UTC (rev 9866)
@@ -0,0 +1,33 @@
+package com.sample
+ 
+import java.util.List;
+
+global List list
+
+rule "Rule1" ruleflow-group "flowgroup-1"
+	when
+		eval(true)
+	then
+		list.add("Rule1");
+end
+
+rule "Rule2" ruleflow-group "flowgroup-2"
+	when
+		eval(true)
+	then
+		list.add("Rule2");
+end
+
+rule "Rule3" ruleflow-group "flowgroup-3" salience 10
+	when
+		eval(true)
+	then
+		list.add("Rule3");
+end
+
+rule "Rule4" ruleflow-group "flowgroup-4" salience 20
+	when
+		eval(true)
+	then
+		list.add("Rule4");
+end
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/ruleflow.rf
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/ruleflow.rf	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/ruleflow.rf	2007-03-01 02:36:54 UTC (rev 9866)
@@ -0,0 +1,150 @@
+<org.drools.ruleflow.core.impl.RuleFlowProcess id="1">
+  <nodes id="2">
+    <entry>
+      <long>2</long>
+      <org.drools.ruleflow.core.impl.RuleSetNode id="3">
+        <ruleFlowGroup>flowgroup-1</ruleFlowGroup>
+        <id>2</id>
+        <name>RuleSet1</name>
+        <incomingConnections id="4">
+          <org.drools.ruleflow.core.impl.Connection id="5">
+            <type>1</type>
+            <from class="org.drools.ruleflow.core.impl.StartNode" id="6">
+              <id>1</id>
+              <name>Start</name>
+              <incomingConnections id="7"/>
+              <outgoingConnections id="8">
+                <org.drools.ruleflow.core.impl.Connection reference="5"/>
+              </outgoingConnections>
+            </from>
+            <to class="org.drools.ruleflow.core.impl.RuleSetNode" reference="3"/>
+          </org.drools.ruleflow.core.impl.Connection>
+        </incomingConnections>
+        <outgoingConnections id="9">
+          <org.drools.ruleflow.core.impl.Connection id="10">
+            <type>1</type>
+            <from class="org.drools.ruleflow.core.impl.RuleSetNode" reference="3"/>
+            <to class="org.drools.ruleflow.core.impl.Split" id="11">
+              <type>1</type>
+              <constraints id="12"/>
+              <id>5</id>
+              <name>Split</name>
+              <incomingConnections id="13">
+                <org.drools.ruleflow.core.impl.Connection reference="10"/>
+              </incomingConnections>
+              <outgoingConnections id="14">
+                <org.drools.ruleflow.core.impl.Connection id="15">
+                  <type>1</type>
+                  <from class="org.drools.ruleflow.core.impl.Split" reference="11"/>
+                  <to class="org.drools.ruleflow.core.impl.RuleSetNode" id="16">
+                    <ruleFlowGroup>flowgroup-2</ruleFlowGroup>
+                    <id>3</id>
+                    <name>RuleSet2</name>
+                    <incomingConnections id="17">
+                      <org.drools.ruleflow.core.impl.Connection reference="15"/>
+                    </incomingConnections>
+                    <outgoingConnections id="18">
+                      <org.drools.ruleflow.core.impl.Connection id="19">
+                        <type>1</type>
+                        <from class="org.drools.ruleflow.core.impl.RuleSetNode" reference="16"/>
+                        <to class="org.drools.ruleflow.core.impl.Join" id="20">
+                          <type>1</type>
+                          <id>6</id>
+                          <name>Join</name>
+                          <incomingConnections id="21">
+                            <org.drools.ruleflow.core.impl.Connection id="22">
+                              <type>1</type>
+                              <from class="org.drools.ruleflow.core.impl.RuleSetNode" id="23">
+                                <ruleFlowGroup>flowgroup-3</ruleFlowGroup>
+                                <id>4</id>
+                                <name>RuleSet3</name>
+                                <incomingConnections id="24">
+                                  <org.drools.ruleflow.core.impl.Connection id="25">
+                                    <type>1</type>
+                                    <from class="org.drools.ruleflow.core.impl.Split" reference="11"/>
+                                    <to class="org.drools.ruleflow.core.impl.RuleSetNode" reference="23"/>
+                                  </org.drools.ruleflow.core.impl.Connection>
+                                </incomingConnections>
+                                <outgoingConnections id="26">
+                                  <org.drools.ruleflow.core.impl.Connection reference="22"/>
+                                </outgoingConnections>
+                              </from>
+                              <to class="org.drools.ruleflow.core.impl.Join" reference="20"/>
+                            </org.drools.ruleflow.core.impl.Connection>
+                            <org.drools.ruleflow.core.impl.Connection reference="19"/>
+                          </incomingConnections>
+                          <outgoingConnections id="27">
+                            <org.drools.ruleflow.core.impl.Connection id="28">
+                              <type>1</type>
+                              <from class="org.drools.ruleflow.core.impl.Join" reference="20"/>
+                              <to class="org.drools.ruleflow.core.impl.RuleSetNode" id="29">
+                                <ruleFlowGroup>flowgroup-4</ruleFlowGroup>
+                                <id>7</id>
+                                <name>RuleSet4</name>
+                                <incomingConnections id="30">
+                                  <org.drools.ruleflow.core.impl.Connection reference="28"/>
+                                </incomingConnections>
+                                <outgoingConnections id="31">
+                                  <org.drools.ruleflow.core.impl.Connection id="32">
+                                    <type>1</type>
+                                    <from class="org.drools.ruleflow.core.impl.RuleSetNode" reference="29"/>
+                                    <to class="org.drools.ruleflow.core.impl.EndNode" id="33">
+                                      <id>8</id>
+                                      <name>End</name>
+                                      <incomingConnections id="34">
+                                        <org.drools.ruleflow.core.impl.Connection reference="32"/>
+                                      </incomingConnections>
+                                      <outgoingConnections id="35"/>
+                                    </to>
+                                  </org.drools.ruleflow.core.impl.Connection>
+                                </outgoingConnections>
+                              </to>
+                            </org.drools.ruleflow.core.impl.Connection>
+                          </outgoingConnections>
+                        </to>
+                      </org.drools.ruleflow.core.impl.Connection>
+                    </outgoingConnections>
+                  </to>
+                </org.drools.ruleflow.core.impl.Connection>
+                <org.drools.ruleflow.core.impl.Connection reference="25"/>
+              </outgoingConnections>
+            </to>
+          </org.drools.ruleflow.core.impl.Connection>
+        </outgoingConnections>
+      </org.drools.ruleflow.core.impl.RuleSetNode>
+    </entry>
+    <entry>
+      <long>4</long>
+      <org.drools.ruleflow.core.impl.RuleSetNode reference="23"/>
+    </entry>
+    <entry>
+      <long>8</long>
+      <org.drools.ruleflow.core.impl.EndNode reference="33"/>
+    </entry>
+    <entry>
+      <long>6</long>
+      <org.drools.ruleflow.core.impl.Join reference="20"/>
+    </entry>
+    <entry>
+      <long>1</long>
+      <org.drools.ruleflow.core.impl.StartNode reference="6"/>
+    </entry>
+    <entry>
+      <long>3</long>
+      <org.drools.ruleflow.core.impl.RuleSetNode reference="16"/>
+    </entry>
+    <entry>
+      <long>7</long>
+      <org.drools.ruleflow.core.impl.RuleSetNode reference="29"/>
+    </entry>
+    <entry>
+      <long>5</long>
+      <org.drools.ruleflow.core.impl.Split reference="11"/>
+    </entry>
+  </nodes>
+  <variables id="36"/>
+  <lastNodeId>8</lastNodeId>
+  <id>0</id>
+  <name>flow</name>
+  <type>Workflow</type>
+</org.drools.ruleflow.core.impl.RuleFlowProcess>
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/ruleflowgroup.drl
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/ruleflowgroup.drl	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/ruleflowgroup.drl	2007-03-01 02:36:54 UTC (rev 9866)
@@ -0,0 +1,12 @@
+package com.sample
+ 
+import java.util.List;
+
+global List list
+
+rule "Sample Rule" ruleflow-group "Group1"
+	when
+		s: String()
+	then
+		list.add(s);
+end
\ No newline at end of file




More information about the jboss-svn-commits mailing list