[jboss-svn-commits] JBL Code SVN: r26525 - labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu May 14 00:10:23 EDT 2009


Author: KrisVerlaenen
Date: 2009-05-14 00:10:23 -0400 (Thu, 14 May 2009)
New Revision: 26525

Modified:
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/ProcessBuilder.java
Log:
JBRULES-2054: XOR Split not working properly inside CompositeNode
 - fixed generation of rules for nested nodes

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	2009-05-14 02:47:19 UTC (rev 26524)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/ProcessBuilder.java	2009-05-14 04:10:23 UTC (rev 26525)
@@ -265,7 +265,7 @@
 
 
     private String generateRules(final Process process) {
-        StringBuilder builder = new StringBuilder();
+        StringBuffer builder = new StringBuffer();
 
         if ( process instanceof WorkflowProcessImpl ) {
             WorkflowProcessImpl ruleFlow = (WorkflowProcessImpl) process;
@@ -290,38 +290,44 @@
             }
 
             Node[] nodes = ruleFlow.getNodes();
-            for ( int i = 0; i < nodes.length; i++ ) {
-                if ( nodes[i] instanceof Split ) {
-                    Split split = (Split) nodes[i];
-                    if ( split.getType() == Split.TYPE_XOR || split.getType() == Split.TYPE_OR ) {
-                        for ( Connection connection : split.getDefaultOutgoingConnections() ) {
-                            Constraint constraint = split.getConstraint( connection );
-                            if ( "rule".equals( constraint.getType() ) ) {
-                                builder.append( createSplitRule( process,
-                                                                 connection,
-                                                                 split.getConstraint( connection ).getConstraint() ) );
-                            }
+            generateRules(nodes, process, builder);
+        }
+        return builder.toString();
+    }
+ 
+    private void generateRules(Node[] nodes, Process process, StringBuffer builder) {
+        for ( int i = 0; i < nodes.length; i++ ) {
+            if ( nodes[i] instanceof Split ) {
+                Split split = (Split) nodes[i];
+                if ( split.getType() == Split.TYPE_XOR || split.getType() == Split.TYPE_OR ) {
+                    for ( Connection connection : split.getDefaultOutgoingConnections() ) {
+                        Constraint constraint = split.getConstraint( connection );
+                        if ( "rule".equals( constraint.getType() ) ) {
+                            builder.append( createSplitRule( process,
+                                                             connection,
+                                                             split.getConstraint( connection ).getConstraint() ) );
                         }
                     }
-                } else if ( nodes[i] instanceof MilestoneNode ) {
-                    MilestoneNode milestone = (MilestoneNode) nodes[i];
-                    builder.append( createMilestoneRule( process,
-                                                         milestone ) );
-                } else if ( nodes[i] instanceof StartNode ) {
-                    StartNode startNode = (StartNode) nodes[i];
-                    List<Trigger> triggers = startNode.getTriggers();
-                    if ( triggers != null ) {
-                        for ( Trigger trigger : triggers ) {
-                            if ( trigger instanceof ConstraintTrigger ) {
-                                builder.append( createStartConstraintRule( process,
-                                                                           (ConstraintTrigger) trigger ) );
-                            }
+                }
+            } else if ( nodes[i] instanceof MilestoneNode ) {
+                MilestoneNode milestone = (MilestoneNode) nodes[i];
+                builder.append( createMilestoneRule( process,
+                                                     milestone ) );
+            } else if ( nodes[i] instanceof StartNode ) {
+                StartNode startNode = (StartNode) nodes[i];
+                List<Trigger> triggers = startNode.getTriggers();
+                if ( triggers != null ) {
+                    for ( Trigger trigger : triggers ) {
+                        if ( trigger instanceof ConstraintTrigger ) {
+                            builder.append( createStartConstraintRule( process,
+                                                                       (ConstraintTrigger) trigger ) );
                         }
                     }
                 }
+            } else if ( nodes[i] instanceof NodeContainer ) {
+                generateRules( ((NodeContainer) nodes[i]).getNodes(), process, builder);
             }
         }
-        return builder.toString();
     }
 
     private String createSplitRule(Process process,




More information about the jboss-svn-commits mailing list