[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