[jboss-svn-commits] JBL Code SVN: r11922 - in labs/jbossrules/trunk/drools-compiler/src: test/java/org/drools/integrationtests and 1 other directory.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Thu May 17 20:04:53 EDT 2007
Author: KrisVerlaenen
Date: 2007-05-17 20:04:52 -0400 (Thu, 17 May 2007)
New Revision: 11922
Modified:
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/ProcessBuilder.java
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ExecutionFlowControlTest.java
Log:
Added OR and XOR split to ruleflow
Modified: 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 2007-05-18 00:02:08 UTC (rev 11921)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/ProcessBuilder.java 2007-05-18 00:04:52 UTC (rev 11922)
@@ -17,11 +17,17 @@
*/
import java.io.Reader;
+import java.io.StringReader;
import java.util.ArrayList;
+import java.util.Iterator;
import java.util.List;
import org.drools.ruleflow.common.core.IProcess;
+import org.drools.ruleflow.core.IConnection;
+import org.drools.ruleflow.core.INode;
import org.drools.ruleflow.core.IRuleFlowProcess;
+import org.drools.ruleflow.core.ISplit;
+import org.drools.ruleflow.core.impl.RuleFlowProcess;
import com.thoughtworks.xstream.XStream;
@@ -32,6 +38,12 @@
* @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
*/
public class ProcessBuilder {
+
+ private PackageBuilder packageBuilder;
+
+ public ProcessBuilder(PackageBuilder packageBuilder) {
+ this.packageBuilder = packageBuilder;
+ }
private final List processes = new ArrayList();
@@ -41,6 +53,16 @@
public void addProcess(final IProcess process) {
this.processes.add( process );
+ // generate and add rule for process
+ String rules = generateRules( process );
+ System.out.println(rules);
+ if (rules != null && rules.length() != 0) {
+ try {
+ packageBuilder.addPackageFromDrl(new StringReader(rules));
+ } catch (Throwable t) {
+ // should never occur
+ }
+ }
}
public void addProcessFromFile(final Reader reader) throws Exception {
@@ -61,4 +83,35 @@
}
reader.close();
}
+
+ private String generateRules(final IProcess process) {
+ String result = "";
+ if (process instanceof RuleFlowProcess) {
+ RuleFlowProcess ruleFlow = (RuleFlowProcess) process;
+ INode[] nodes = ruleFlow.getNodes();
+ for (int i = 0; i < nodes.length; i++) {
+ if (nodes[i] instanceof ISplit) {
+ ISplit split = (ISplit) nodes[i];
+ if (split.getType() == ISplit.TYPE_XOR || split.getType() == ISplit.TYPE_OR) {
+ for (Iterator iterator = split.getOutgoingConnections().iterator(); iterator.hasNext(); ) {
+ IConnection connection = (IConnection) iterator.next();
+ result += createSplitRule(process, connection, split.getConstraint(connection).getConstraint());
+ }
+ }
+ }
+ }
+ }
+ return result;
+ }
+
+ private String createSplitRule(IProcess process, IConnection connection, String constraint) {
+ return
+ "rule \"RuleFlow-" + process.getId() + "-"
+ + connection.getFrom().getId() + "-" + connection.getTo().getId() + "\" \n" +
+ " ruleflow-group \"DROOLS_SYSTEM\" \n" +
+ " when \n" +
+ " " + constraint + "\n" +
+ " then \n" +
+ "end \n\n";
+ }
}
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-18 00:02:08 UTC (rev 11921)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ExecutionFlowControlTest.java 2007-05-18 00:04:52 UTC (rev 11922)
@@ -518,7 +518,7 @@
final PackageBuilder builder = new PackageBuilder();
builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "ruleflow.drl" ) ) );
final Package pkg = builder.getPackage();
- final ProcessBuilder processBuilder = new ProcessBuilder();
+ final ProcessBuilder processBuilder = new ProcessBuilder(builder);
processBuilder.addProcessFromFile( new InputStreamReader( getClass().getResourceAsStream( "ruleflow.rf" ) ) );
final RuleBase ruleBase = getRuleBase();
More information about the jboss-svn-commits
mailing list