[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