[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