[jboss-svn-commits] JBL Code SVN: r31249 - in labs/jbossrules/branches/guvnor_expressionEditor2_baunax_esteban/drools-compiler/src/main/java/org/drools/guvnor: server/util and 1 other directory.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed Jan 27 07:21:27 EST 2010


Author: eaa
Date: 2010-01-27 07:21:27 -0500 (Wed, 27 Jan 2010)
New Revision: 31249

Modified:
   labs/jbossrules/branches/guvnor_expressionEditor2_baunax_esteban/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/brl/FromAccumulateCompositeFactPattern.java
   labs/jbossrules/branches/guvnor_expressionEditor2_baunax_esteban/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/brl/FromCollectCompositeFactPattern.java
   labs/jbossrules/branches/guvnor_expressionEditor2_baunax_esteban/drools-compiler/src/main/java/org/drools/guvnor/server/util/BRDRLPersistence.java
Log:
Guided Editor:
	Some I18n entries added.
	FROM ACCUMULTE support: added basic FROM ACCUMULATE support.

Modified: labs/jbossrules/branches/guvnor_expressionEditor2_baunax_esteban/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/brl/FromAccumulateCompositeFactPattern.java
===================================================================
--- labs/jbossrules/branches/guvnor_expressionEditor2_baunax_esteban/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/brl/FromAccumulateCompositeFactPattern.java	2010-01-27 12:20:44 UTC (rev 31248)
+++ labs/jbossrules/branches/guvnor_expressionEditor2_baunax_esteban/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/brl/FromAccumulateCompositeFactPattern.java	2010-01-27 12:21:27 UTC (rev 31249)
@@ -6,5 +6,89 @@
  * @author esteban
  */
 public class FromAccumulateCompositeFactPattern extends FromCompositeFactPattern {
+    
+    public static final String USE_FUNCTION = "use_function";
+    public static final String USE_CODE = "use_code";
 
+    private IPattern sourcePattern;
+    private String initCode;
+    private String actionCode;
+    private String reverseCode;
+    private String resultCode;
+
+    private String function;
+
+    public FromAccumulateCompositeFactPattern() {
+    }
+
+
+    public String useFunctionOrCode(){
+        if (this.initCode!=null && !this.initCode.trim().equals("")){
+            //if the initCode is set, we must use it.
+            return FromAccumulateCompositeFactPattern.USE_CODE;
+        }
+
+        //otherwise use Function. (this is the default)
+        return FromAccumulateCompositeFactPattern.USE_FUNCTION;
+    }
+
+    public void clearCodeFields(){
+        this.initCode = null;
+        this.actionCode = null;
+        this.reverseCode = null;
+        this.resultCode = null;
+    }
+    
+
+    public String getActionCode() {
+        return actionCode;
+    }
+
+    public void setActionCode(String actionCode) {
+        this.actionCode = actionCode;
+    }
+
+    public String getInitCode() {
+        return initCode;
+    }
+
+    public void setInitCode(String initCode) {
+        this.initCode = initCode;
+    }
+
+    public String getResultCode() {
+        return resultCode;
+    }
+
+    public void setResultCode(String resultCode) {
+        this.resultCode = resultCode;
+    }
+
+    public String getReverseCode() {
+        return reverseCode;
+    }
+
+    public void setReverseCode(String reverseCode) {
+        this.reverseCode = reverseCode;
+    }
+
+    public IPattern getSourcePattern() {
+        return sourcePattern;
+    }
+
+    public void setSourcePattern(IPattern sourcePattern) {
+        this.sourcePattern = sourcePattern;
+    }
+
+    public String getFunction() {
+        return function;
+    }
+
+    public void setFunction(String function) {
+        this.function = function;
+    }
+
+
+
+
 }

Modified: labs/jbossrules/branches/guvnor_expressionEditor2_baunax_esteban/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/brl/FromCollectCompositeFactPattern.java
===================================================================
--- labs/jbossrules/branches/guvnor_expressionEditor2_baunax_esteban/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/brl/FromCollectCompositeFactPattern.java	2010-01-27 12:20:44 UTC (rev 31248)
+++ labs/jbossrules/branches/guvnor_expressionEditor2_baunax_esteban/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/brl/FromCollectCompositeFactPattern.java	2010-01-27 12:21:27 UTC (rev 31249)
@@ -7,16 +7,16 @@
  */
 public class FromCollectCompositeFactPattern extends FromCompositeFactPattern {
 
-    private FactPattern rightPattern;
+    private IPattern rightPattern;
 
     public FromCollectCompositeFactPattern() {
     }
 
-    public FactPattern getRightPattern() {
+    public IPattern getRightPattern() {
         return rightPattern;
     }
 
-    public void setRightPattern(FactPattern rightPattern) {
+    public void setRightPattern(IPattern rightPattern) {
         this.rightPattern = rightPattern;
     }
 

Modified: labs/jbossrules/branches/guvnor_expressionEditor2_baunax_esteban/drools-compiler/src/main/java/org/drools/guvnor/server/util/BRDRLPersistence.java
===================================================================
--- labs/jbossrules/branches/guvnor_expressionEditor2_baunax_esteban/drools-compiler/src/main/java/org/drools/guvnor/server/util/BRDRLPersistence.java	2010-01-27 12:20:44 UTC (rev 31248)
+++ labs/jbossrules/branches/guvnor_expressionEditor2_baunax_esteban/drools-compiler/src/main/java/org/drools/guvnor/server/util/BRDRLPersistence.java	2010-01-27 12:21:27 UTC (rev 31249)
@@ -11,569 +11,621 @@
  */
 public class BRDRLPersistence implements BRLPersistence {
 
-	private static final BRLPersistence INSTANCE = new BRDRLPersistence();
+    private static final BRLPersistence INSTANCE = new BRDRLPersistence();
 
-	private BRDRLPersistence() {
-	}
+    private BRDRLPersistence() {
+    }
 
-	public static BRLPersistence getInstance() {
-		return INSTANCE;
-	}
+    public static BRLPersistence getInstance() {
+        return INSTANCE;
+    }
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see
-	 * org.drools.guvnor.server.util.BRLPersistence#marshal(org.drools.guvnor
-	 * .client.modeldriven.brl.RuleModel)
-	 */
-	public String marshal(RuleModel model) {
-		boolean isDSLEnhanced = model.hasDSLSentences();
+    /*
+     * (non-Javadoc)
+     *
+     * @see
+     * org.drools.guvnor.server.util.BRLPersistence#marshal(org.drools.guvnor
+     * .client.modeldriven.brl.RuleModel)
+     */
+    public String marshal(RuleModel model) {
+        boolean isDSLEnhanced = model.hasDSLSentences();
 
-		StringBuilder buf = new StringBuilder();
-		buf.append("rule \"" + model.name + "\"");
-		if (null != model.parentName && model.parentName.length() > 0) {
-			buf.append(" extends \"" + model.parentName + "\"\n");
-		} else {
-			buf.append("\n");
-		}
-		this.marshalMetadata(buf, model);
-		this.marshalAttributes(buf, model);
+        StringBuilder buf = new StringBuilder();
+        buf.append("rule \"" + model.name + "\"");
+        if (null != model.parentName && model.parentName.length() > 0) {
+            buf.append(" extends \"" + model.parentName + "\"\n");
+        } else {
+            buf.append("\n");
+        }
+        this.marshalMetadata(buf, model);
+        this.marshalAttributes(buf, model);
 
-		buf.append("\twhen\n");
-		this.marshalLHS(buf, model, isDSLEnhanced);
-		buf.append("\tthen\n");
-		this.marshalRHS(buf, model, isDSLEnhanced);
-		buf.append("end\n");
-		return buf.toString();
-	}
+        buf.append("\twhen\n");
+        this.marshalLHS(buf, model, isDSLEnhanced);
+        buf.append("\tthen\n");
+        this.marshalRHS(buf, model, isDSLEnhanced);
+        buf.append("end\n");
+        return buf.toString();
+    }
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see
-	 * org.drools.guvnor.server.util.BRLPersistence#unmarshal(java.lang.String)
-	 */
-	public RuleModel unmarshal(String str) {
-		throw new UnsupportedOperationException(
-				"Still not possible to convert pure DRL to RuleModel");
-	}
+    /*
+     * (non-Javadoc)
+     *
+     * @see
+     * org.drools.guvnor.server.util.BRLPersistence#unmarshal(java.lang.String)
+     */
+    public RuleModel unmarshal(String str) {
+        throw new UnsupportedOperationException(
+                "Still not possible to convert pure DRL to RuleModel");
+    }
 
-	/**
-	 * Marshal model attributes
-	 * 
-	 * @param buf
-	 * @param model
-	 */
-	private void marshalAttributes(StringBuilder buf, RuleModel model) {
-		boolean hasDialect = false;
-		for (int i = 0; i < model.attributes.length; i++) {
-			RuleAttribute attr = model.attributes[i];
+    /**
+     * Marshal model attributes
+     *
+     * @param buf
+     * @param model
+     */
+    private void marshalAttributes(StringBuilder buf, RuleModel model) {
+        boolean hasDialect = false;
+        for (int i = 0; i < model.attributes.length; i++) {
+            RuleAttribute attr = model.attributes[i];
 
-			buf.append("\t");
-			buf.append(attr);
+            buf.append("\t");
+            buf.append(attr);
 
-			buf.append("\n");
-			if (attr.attributeName.equals("dialect")) {
-				hasDialect = true;
-			}
-		}
-		// Un comment below for mvel
-		if (!hasDialect) {
-			RuleAttribute attr = new RuleAttribute("dialect", "mvel");
-			buf.append("\t");
-			buf.append(attr);
-			buf.append("\n");
-		}
-	}
+            buf.append("\n");
+            if (attr.attributeName.equals("dialect")) {
+                hasDialect = true;
+            }
+        }
+        // Un comment below for mvel
+        if (!hasDialect) {
+            RuleAttribute attr = new RuleAttribute("dialect", "mvel");
+            buf.append("\t");
+            buf.append(attr);
+            buf.append("\n");
+        }
+    }
 
-	/**
-	 * Marshal model metadata
-	 * 
-	 * @param buf
-	 * @param model
-	 */
-	private void marshalMetadata(StringBuilder buf, RuleModel model) {
-		if (model.metadataList != null) {
-			for (int i = 0; i < model.metadataList.length; i++) {
-				buf.append("\t").append(model.metadataList[i]).append("\n");
-			}
-		}
-	}
+    /**
+     * Marshal model metadata
+     *
+     * @param buf
+     * @param model
+     */
+    private void marshalMetadata(StringBuilder buf, RuleModel model) {
+        if (model.metadataList != null) {
+            for (int i = 0; i < model.metadataList.length; i++) {
+                buf.append("\t").append(model.metadataList[i]).append("\n");
+            }
+        }
+    }
 
-	/**
-	 * Marshal LHS patterns
-	 * 
-	 * @param buf
-	 * @param model
-	 */
-	private void marshalLHS(StringBuilder buf, RuleModel model,
-			boolean isDSLEnhanced) {
-		IPattern[] lhs = model.lhs;
-		LHSPatternVisitor visitor = new LHSPatternVisitor(isDSLEnhanced, buf);
-		for (int i = 0; i < lhs.length; i++) {
-			final IPattern cond = lhs[i];
-			visitor.visit(cond);
-		}
-	}
+    /**
+     * Marshal LHS patterns
+     *
+     * @param buf
+     * @param model
+     */
+    private void marshalLHS(StringBuilder buf, RuleModel model,
+            boolean isDSLEnhanced) {
+        IPattern[] lhs = model.lhs;
+        LHSPatternVisitor visitor = new LHSPatternVisitor(isDSLEnhanced, buf);
+        for (int i = 0; i < lhs.length; i++) {
+            final IPattern cond = lhs[i];
+            visitor.visit(cond);
+        }
+    }
 
-	private void marshalRHS(StringBuilder buf, RuleModel model,
-			boolean isDSLEnhanced) {
-		IAction[] rhs = model.rhs;
-		RHSActionVisitor visitor = new RHSActionVisitor(isDSLEnhanced, buf);
-		for (int i = 0; i < rhs.length; i++) {
-			final IAction action = rhs[i];
-			visitor.visit(action);
-		}
-	}
+    private void marshalRHS(StringBuilder buf, RuleModel model,
+            boolean isDSLEnhanced) {
+        IAction[] rhs = model.rhs;
+        RHSActionVisitor visitor = new RHSActionVisitor(isDSLEnhanced, buf);
+        for (int i = 0; i < rhs.length; i++) {
+            final IAction action = rhs[i];
+            visitor.visit(action);
+        }
+    }
 
-	public static class LHSPatternVisitor extends ReflectiveVisitor {
-		private StringBuilder buf;
-		private boolean isDSLEnhanced;
+    public static class LHSPatternVisitor extends ReflectiveVisitor {
 
-		public LHSPatternVisitor(boolean isDSLEnhanced, StringBuilder b) {
-			this.isDSLEnhanced = isDSLEnhanced;
-			buf = b;
-		}
+        private StringBuilder buf;
+        private boolean isDSLEnhanced;
 
-		public void visitFactPattern(FactPattern pattern) {
-			buf.append("\t\t");
-			if (isDSLEnhanced) {
-				// adding passthrough markup
-				buf.append(">");
-			}
-			generateFactPattern(pattern);
-			buf.append("\n");
-		}
+        public LHSPatternVisitor(boolean isDSLEnhanced, StringBuilder b) {
+            this.isDSLEnhanced = isDSLEnhanced;
+            buf = b;
+        }
 
-		public void visitFreeFormLine(FreeFormLine ffl) {
+        public void visitFactPattern(FactPattern pattern) {
+            buf.append("\t\t");
+            if (isDSLEnhanced) {
+                // adding passthrough markup
+                buf.append(">");
+            }
+            generateFactPattern(pattern);
+            buf.append("\n");
+        }
 
-			this.buf.append("\t\t");
-			if (isDSLEnhanced) {
-				buf.append(">");
-			}
-			this.buf.append(ffl.text);
-			this.buf.append("\n");
-		}
+        public void visitFreeFormLine(FreeFormLine ffl) {
 
-		public void visitCompositeFactPattern(CompositeFactPattern pattern) {
-			buf.append("\t\t");
-			if (isDSLEnhanced) {
-				// adding passthrough markup
-				buf.append(">");
-			}
-			if (CompositeFactPattern.COMPOSITE_TYPE_EXISTS.equals(pattern.type)) {
-				renderCompositeFOL(pattern);
-			} else if (CompositeFactPattern.COMPOSITE_TYPE_NOT
-					.equals(pattern.type)) {
-				renderCompositeFOL(pattern);
-			} else if (CompositeFactPattern.COMPOSITE_TYPE_OR
-					.equals(pattern.type)) {
-				buf.append("( ");
-				if (pattern.patterns != null) {
-					for (int i = 0; i < pattern.patterns.length; i++) {
-						if (i > 0) {
-							buf.append(" ");
-							buf.append(pattern.type);
-							buf.append(" ");
-						}
-						renderSubPattern(pattern, i);
-					}
-				}
-				buf.append(" )\n");
-			}
-		}
+            this.buf.append("\t\t");
+            if (isDSLEnhanced) {
+                buf.append(">");
+            }
+            this.buf.append(ffl.text);
+            this.buf.append("\n");
+        }
 
-		public void visitFromCompositeFactPattern(FromCompositeFactPattern pattern) {
-			buf.append("\t\t");
-			if (isDSLEnhanced) {
-				// adding passthrough markup
-				buf.append(">");
-			}
-                        if (pattern.getFactPattern() != null){
-                            generateFactPattern(pattern.getFactPattern());
+        public void visitCompositeFactPattern(CompositeFactPattern pattern) {
+            buf.append("\t\t");
+            if (isDSLEnhanced) {
+                // adding passthrough markup
+                buf.append(">");
+            }
+            if (CompositeFactPattern.COMPOSITE_TYPE_EXISTS.equals(pattern.type)) {
+                renderCompositeFOL(pattern);
+            } else if (CompositeFactPattern.COMPOSITE_TYPE_NOT.equals(pattern.type)) {
+                renderCompositeFOL(pattern);
+            } else if (CompositeFactPattern.COMPOSITE_TYPE_OR.equals(pattern.type)) {
+                buf.append("( ");
+                if (pattern.patterns != null) {
+                    for (int i = 0; i < pattern.patterns.length; i++) {
+                        if (i > 0) {
+                            buf.append(" ");
+                            buf.append(pattern.type);
+                            buf.append(" ");
                         }
-                        buf.append(" FROM ( ");
-                        renderExpression(pattern.getExpression());
-                        buf.append(") \n");
-		}
+                        renderSubPattern(pattern, i);
+                    }
+                }
+                buf.append(" )\n");
+            }
+        }
 
-		public void visitFromCollectCompositeFactPattern(FromCollectCompositeFactPattern pattern) {
-			buf.append("\t\t");
-			if (isDSLEnhanced) {
-				// adding passthrough markup
-				buf.append(">");
-			}
-                        if (pattern.getFactPattern() != null){
-                            generateFactPattern(pattern.getFactPattern());
-                        }
-                        buf.append(" FROM COLLECT ( ");
-                        if (pattern.getRightPattern() != null){
-                            generateFactPattern(pattern.getRightPattern());
-                        }
-                        buf.append(") \n");
-		}
+        public void visitFromCompositeFactPattern(FromCompositeFactPattern pattern) {
+            buf.append("\t\t");
+            if (isDSLEnhanced) {
+                // adding passthrough markup
+                buf.append(">");
+            }
+            if (pattern.getFactPattern() != null) {
+                generateFactPattern(pattern.getFactPattern());
+            }
+            buf.append(" from\n\t\t  ");
+            renderExpression(pattern.getExpression());
+            buf.append("\n");
+        }
 
-		private void renderCompositeFOL(CompositeFactPattern pattern) {
-			buf.append(pattern.type);
-			if (pattern.patterns != null && pattern.patterns.length > 1) {
-				buf.append(" (");
-				for (int i = 0; i < pattern.patterns.length; i++) {
-					renderSubPattern(pattern, i);
-					if (i != pattern.patterns.length - 1) {
-						buf.append(" and ");
-					}
-				}
-				buf.append(") \n");
-			} else {
-				buf.append(" ");
-				renderSubPattern(pattern, 0);
-				buf.append("\n");
-			}
-		}
+        public void visitFromCollectCompositeFactPattern(FromCollectCompositeFactPattern pattern) {
+            buf.append("\t\t");
+            if (isDSLEnhanced) {
+                // adding passthrough markup
+                buf.append(">");
+            }
+            if (pattern.getFactPattern() != null) {
+                generateFactPattern(pattern.getFactPattern());
+            }
+            buf.append(" from collect ( ");
+            if (pattern.getRightPattern() != null) {
+                if (pattern.getRightPattern() instanceof FactPattern) {
+                    generateFactPattern((FactPattern) pattern.getRightPattern());
+                } else if (pattern.getRightPattern() instanceof FromCompositeFactPattern) {
+                    visitFromCompositeFactPattern((FromCompositeFactPattern) pattern.getRightPattern());
+                } else {
+                    throw new IllegalArgumentException("Unuported pattern " + pattern.getRightPattern() + " for FROM COLLECT");
+                }
+            }
+            buf.append(") \n");
+        }
 
-		private void renderSubPattern(CompositeFactPattern pattern, int subIndex) {
-			if (pattern.patterns == null || pattern.patterns.length == 0)
-				return;
-			this.generateFactPattern(pattern.patterns[subIndex]);
-		}
+        public void visitFromAccumulateCompositeFactPattern(FromAccumulateCompositeFactPattern pattern) {
+            buf.append("\t\t");
+            if (isDSLEnhanced) {
+                // adding passthrough markup
+                buf.append(">");
+            }
+            if (pattern.getFactPattern() != null) {
+                generateFactPattern(pattern.getFactPattern());
+            }
+            buf.append(" from accumulate ( ");
+            if (pattern.getSourcePattern() != null) {
+                if (pattern.getSourcePattern() instanceof FactPattern) {
+                    generateFactPattern((FactPattern) pattern.getSourcePattern());
+                } else if (pattern.getSourcePattern() instanceof FromAccumulateCompositeFactPattern) {
+                    visitFromAccumulateCompositeFactPattern((FromAccumulateCompositeFactPattern) pattern.getSourcePattern());
+                } else if (pattern.getSourcePattern() instanceof FromCollectCompositeFactPattern) {
+                    visitFromCollectCompositeFactPattern((FromCollectCompositeFactPattern) pattern.getSourcePattern());
+                } else if (pattern.getSourcePattern() instanceof FromCompositeFactPattern) {
+                    visitFromCompositeFactPattern((FromCompositeFactPattern) pattern.getSourcePattern());
+                } else {
+                    throw new IllegalArgumentException("Unuported pattern " + pattern.getSourcePattern() + " for FROM ACCUMULATE");
+                }
+            }
+            buf.append(",\n");
 
-		private void renderExpression(ExpressionFormLine expression) {
-			buf.append(expression.getText());
-		}
+            if (pattern.useFunctionOrCode().equals(FromAccumulateCompositeFactPattern.USE_FUNCTION)){
+                buf.append("\t\t\t");
+                buf.append(pattern.getFunction());
+            }else{
+                buf.append("\t\t\tinit( ");
+                buf.append(pattern.getInitCode());
+                buf.append(" ),\n");
+                buf.append("\t\t\taction( ");
+                buf.append(pattern.getActionCode());
+                buf.append(" ),\n");
+                if (pattern.getReverseCode() != null && !pattern.getReverseCode().trim().equals("")) {
+                    buf.append("\t\t\treverse( ");
+                    buf.append(pattern.getReverseCode());
+                    buf.append(" ),\n");
+                }
+                buf.append("\t\t\tresult( ");
+                buf.append(pattern.getResultCode());
+                buf.append(" )\n");
+            }
+            buf.append(") \n");
 
-		public void visitDSLSentence(final DSLSentence sentence) {
-			buf.append("\t\t");
-			buf.append(sentence);
-			buf.append("\n");
-		}
 
-		private void generateFactPattern(FactPattern pattern) {
-			if (pattern.boundName != null) {
-				buf.append(pattern.boundName);
-				buf.append(" : ");
-			}
-			if (pattern.factType != null) {
-				buf.append(pattern.factType);
-			}
-			buf.append("( ");
+        }
 
-			// top level constraints
-			if (pattern.constraintList != null) {
-				generateConstraints(pattern);
-			}
-			buf.append(")");
-		}
+        private void renderCompositeFOL(CompositeFactPattern pattern) {
+            buf.append(pattern.type);
+            if (pattern.patterns != null && pattern.patterns.length > 1) {
+                buf.append(" (");
+                for (int i = 0; i < pattern.patterns.length; i++) {
+                    renderSubPattern(pattern, i);
+                    if (i != pattern.patterns.length - 1) {
+                        buf.append(" and ");
+                    }
+                }
+                buf.append(") \n");
+            } else {
+                buf.append(" ");
+                renderSubPattern(pattern, 0);
+                buf.append("\n");
+            }
+        }
 
-		private void generateConstraints(FactPattern pattern) {
-			int printedCount = 0;
-			for (int i = 0; i < pattern.getFieldConstraints().length; i++) {
-				StringBuilder buffer = new StringBuilder();
-				generateConstraint(pattern.constraintList.constraints[i],
-						false, buffer);
-				if (buffer.length() > 0) {
-					if (printedCount > 0) {
-						buf.append(", ");
-					}
-					buf.append(buffer);
-					printedCount++;
-				}
-			}
-		}
-		/**
-		 * Recursively process the nested constraints. It will only put brackets
-		 * in for the ones that aren't at top level. This makes for more
-		 * readable DRL in the most common cases.
-		 */
-		private void generateConstraint(FieldConstraint con, boolean nested,
-				StringBuilder buf) {
-			if (con instanceof CompositeFieldConstraint) {
-				CompositeFieldConstraint cfc = (CompositeFieldConstraint) con;
-				if (nested)
-					buf.append("( ");
-				FieldConstraint[] nestedConstraints = cfc.constraints;
-				if (nestedConstraints != null) {
-					for (int i = 0; i < nestedConstraints.length; i++) {
-						generateConstraint(nestedConstraints[i], true, buf);
-						if (i < (nestedConstraints.length - 1)) {
-							// buf.append(" ) ");
-							buf.append(cfc.compositeJunctionType + " ");
-							// buf.append(" ( ");
-						}
-					}
-				}
-				if (nested)
-					buf.append(")");
-			} else {
-				generateSingleFieldConstraint((SingleFieldConstraint) con, buf);
-			}
-		}
+        private void renderSubPattern(CompositeFactPattern pattern, int subIndex) {
+            if (pattern.patterns == null || pattern.patterns.length == 0) {
+                return;
+            }
+            this.generateFactPattern(pattern.patterns[subIndex]);
+        }
 
-		private void generateSingleFieldConstraint(
-				final SingleFieldConstraint constr, StringBuilder buf) {
-			if (constr.constraintValueType == ISingleFieldConstraint.TYPE_PREDICATE) {
-				buf.append("eval( ");
-				buf.append(constr.value);
-				buf.append(" )");
-			} else {
-				if (constr.fieldBinding != null) {
-					buf.append(constr.fieldBinding);
-					buf.append(" : ");
-				}
-				if ((constr.operator != null && constr.value != null)
-						|| constr.fieldBinding != null) {
-					SingleFieldConstraint parent = (SingleFieldConstraint) constr.parent;
-					StringBuilder parentBuf = new StringBuilder();
-					while (parent != null) {
-						parentBuf.insert(0, parent.fieldName + ".");
-						parent = (SingleFieldConstraint) parent.parent;
-					}
-					buf.append(parentBuf);
-					buf.append(constr.fieldName);
-				}
+        private void renderExpression(ExpressionFormLine expression) {
+            //buf.append(expression.text);
+            buf.append("p.children");
+        }
 
-				addFieldRestriction(buf, constr.constraintValueType,
-						constr.operator, constr.value);
+        public void visitDSLSentence(final DSLSentence sentence) {
+            buf.append("\t\t");
+            buf.append(sentence);
+            buf.append("\n");
+        }
 
-				// and now do the connectives.
-				if (constr.connectives != null) {
-					for (int j = 0; j < constr.connectives.length; j++) {
-						final ConnectiveConstraint conn = constr.connectives[j];
-						addFieldRestriction(buf, conn.constraintValueType,
-								conn.operator, conn.value);
-					}
-				}
-			}
-		}
+        private void generateFactPattern(FactPattern pattern) {
+            if (pattern.boundName != null) {
+                buf.append(pattern.boundName);
+                buf.append(" : ");
+            }
+            if (pattern.factType != null) {
+                buf.append(pattern.factType);
+            }
+            buf.append("( ");
 
-		private void addFieldRestriction(final StringBuilder buf,
-				final int type, final String operator, final String value) {
-			if (operator == null) {
-				return;
-			}
+            // top level constraints
+            if (pattern.constraintList != null) {
+                generateConstraints(pattern);
+            }
+            buf.append(")");
+        }
 
-			buf.append(" ");
-			buf.append(operator);
-			buf.append(" ");
-			switch (type) {
-			case ISingleFieldConstraint.TYPE_RET_VALUE:
-				buf.append("( ");
-				buf.append(value);
-				buf.append(" )");
-				break;
-			case ISingleFieldConstraint.TYPE_LITERAL:
-                if (operator.equals("in")) {
+        private void generateConstraints(FactPattern pattern) {
+            int printedCount = 0;
+            for (int i = 0; i < pattern.getFieldConstraints().length; i++) {
+                StringBuilder buffer = new StringBuilder();
+                generateConstraint(pattern.constraintList.constraints[i],
+                        false, buffer);
+                if (buffer.length() > 0) {
+                    if (printedCount > 0) {
+                        buf.append(", ");
+                    }
+                    buf.append(buffer);
+                    printedCount++;
+                }
+            }
+        }
+
+        /**
+         * Recursively process the nested constraints. It will only put brackets
+         * in for the ones that aren't at top level. This makes for more
+         * readable DRL in the most common cases.
+         */
+        private void generateConstraint(FieldConstraint con, boolean nested,
+                StringBuilder buf) {
+            if (con instanceof CompositeFieldConstraint) {
+                CompositeFieldConstraint cfc = (CompositeFieldConstraint) con;
+                if (nested) {
+                    buf.append("( ");
+                }
+                FieldConstraint[] nestedConstraints = cfc.constraints;
+                if (nestedConstraints != null) {
+                    for (int i = 0; i < nestedConstraints.length; i++) {
+                        generateConstraint(nestedConstraints[i], true, buf);
+                        if (i < (nestedConstraints.length - 1)) {
+                            // buf.append(" ) ");
+                            buf.append(cfc.compositeJunctionType + " ");
+                            // buf.append(" ( ");
+                        }
+                    }
+                }
+                if (nested) {
+                    buf.append(")");
+                }
+            } else {
+                generateSingleFieldConstraint((SingleFieldConstraint) con, buf);
+            }
+        }
+
+        private void generateSingleFieldConstraint(
+                final SingleFieldConstraint constr, StringBuilder buf) {
+            if (constr.constraintValueType == ISingleFieldConstraint.TYPE_PREDICATE) {
+                buf.append("eval( ");
+                buf.append(constr.value);
+                buf.append(" )");
+            } else {
+                if (constr.fieldBinding != null) {
+                    buf.append(constr.fieldBinding);
+                    buf.append(" : ");
+                }
+                if ((constr.operator != null && constr.value != null)
+                        || constr.fieldBinding != null) {
+                    SingleFieldConstraint parent = (SingleFieldConstraint) constr.parent;
+                    StringBuilder parentBuf = new StringBuilder();
+                    while (parent != null) {
+                        parentBuf.insert(0, parent.fieldName + ".");
+                        parent = (SingleFieldConstraint) parent.parent;
+                    }
+                    buf.append(parentBuf);
+                    buf.append(constr.fieldName);
+                }
+
+                addFieldRestriction(buf, constr.constraintValueType,
+                        constr.operator, constr.value);
+
+                // and now do the connectives.
+                if (constr.connectives != null) {
+                    for (int j = 0; j < constr.connectives.length; j++) {
+                        final ConnectiveConstraint conn = constr.connectives[j];
+                        addFieldRestriction(buf, conn.constraintValueType,
+                                conn.operator, conn.value);
+                    }
+                }
+            }
+        }
+
+        private void addFieldRestriction(final StringBuilder buf,
+                final int type, final String operator, final String value) {
+            if (operator == null) {
+                return;
+            }
+
+            buf.append(" ");
+            buf.append(operator);
+            buf.append(" ");
+            switch (type) {
+                case ISingleFieldConstraint.TYPE_RET_VALUE:
+                    buf.append("( ");
                     buf.append(value);
-                } else {
-                    buf.append('"');
+                    buf.append(" )");
+                    break;
+                case ISingleFieldConstraint.TYPE_LITERAL:
+                    if (operator.equals("in")) {
+                        buf.append(value);
+                    } else {
+                        buf.append('"');
+                        buf.append(value);
+                        buf.append('"');
+                    }
+                    break;
+                default:
                     buf.append(value);
-                    buf.append('"');
-                }
-				break;
-			default:
-				buf.append(value);
-			}
-			buf.append(" ");
-		}
+            }
+            buf.append(" ");
+        }
+    }
 
-	}
+    public static class RHSActionVisitor extends ReflectiveVisitor {
 
-	public static class RHSActionVisitor extends ReflectiveVisitor {
-		private StringBuilder buf;
-		private boolean isDSLEnhanced;
-		private int idx = 0;
+        private StringBuilder buf;
+        private boolean isDSLEnhanced;
+        private int idx = 0;
 
-		public RHSActionVisitor(boolean isDSLEnhanced, StringBuilder b) {
-			this.isDSLEnhanced = isDSLEnhanced;
-			buf = b;
-		}
+        public RHSActionVisitor(boolean isDSLEnhanced, StringBuilder b) {
+            this.isDSLEnhanced = isDSLEnhanced;
+            buf = b;
+        }
 
-		public void visitActionInsertFact(final ActionInsertFact action) {
-			this.generateInsertCall(action, false);
-		}
+        public void visitActionInsertFact(final ActionInsertFact action) {
+            this.generateInsertCall(action, false);
+        }
 
-		public void visitActionInsertLogicalFact(
-				final ActionInsertLogicalFact action) {
-			this.generateInsertCall(action, true);
-		}
+        public void visitActionInsertLogicalFact(
+                final ActionInsertLogicalFact action) {
+            this.generateInsertCall(action, true);
+        }
 
-		public void visitFreeFormLine(FreeFormLine ffl) {
+        public void visitFreeFormLine(FreeFormLine ffl) {
 
-			this.buf.append("\t\t");
-			if (isDSLEnhanced) {
-				buf.append(">");
-			}
-			this.buf.append(ffl.text);
-			this.buf.append("\n");
-		}
+            this.buf.append("\t\t");
+            if (isDSLEnhanced) {
+                buf.append(">");
+            }
+            this.buf.append(ffl.text);
+            this.buf.append("\n");
+        }
 
-		private void generateInsertCall(final ActionInsertFact action,
-				final boolean isLogic) {
-			buf.append("\t\t");
-			if (isDSLEnhanced) {
-				buf.append(">");
-			}
-			if (action.fieldValues.length == 0 && action.getBoundName() == null) {
-				buf.append((isLogic) ? "insertLogical( new " : "insert( new ");
+        private void generateInsertCall(final ActionInsertFact action,
+                final boolean isLogic) {
+            buf.append("\t\t");
+            if (isDSLEnhanced) {
+                buf.append(">");
+            }
+            if (action.fieldValues.length == 0 && action.getBoundName() == null) {
+                buf.append((isLogic) ? "insertLogical( new " : "insert( new ");
 
-				buf.append(action.factType);
-				buf.append("() );\n");
-			} else {
-				buf.append(action.factType);
-				if (action.getBoundName()==null)
-				{
-					buf.append(" fact");
-					buf.append(idx);
-				} else {
-					buf.append(" " + action.getBoundName());
-				}
-				buf.append(" = new ");
-				buf.append(action.factType);
-				buf.append("();\n");
-				if (action.getBoundName()==null)
-				{
-					generateSetMethodCalls("fact" + idx, action.fieldValues);
-				}else{
-					generateSetMethodCalls(action.getBoundName(), action.fieldValues);
-				}
-					
-				buf.append("\t\t");
-				if (isDSLEnhanced) {
-					buf.append(">");
-				}
-				if (isLogic) {
-					buf.append("insertLogical(");
-					if (action.getBoundName()==null){
-						buf.append("fact");
-						buf.append(idx++);
-					}else{
-						buf.append(action.getBoundName());
-					}
-					buf.append(" );\n");
-				} else {
-					buf.append("insert(");
-					if (action.getBoundName()==null){
-						buf.append("fact");
-						buf.append(idx++);
-					}else {
-						buf.append(action.getBoundName());
-					}
+                buf.append(action.factType);
+                buf.append("() );\n");
+            } else {
+                buf.append(action.factType);
+                if (action.getBoundName() == null) {
+                    buf.append(" fact");
+                    buf.append(idx);
+                } else {
+                    buf.append(" " + action.getBoundName());
+                }
+                buf.append(" = new ");
+                buf.append(action.factType);
+                buf.append("();\n");
+                if (action.getBoundName() == null) {
+                    generateSetMethodCalls("fact" + idx, action.fieldValues);
+                } else {
+                    generateSetMethodCalls(action.getBoundName(), action.fieldValues);
+                }
 
-					buf.append(" );\n");
-				}
+                buf.append("\t\t");
+                if (isDSLEnhanced) {
+                    buf.append(">");
+                }
+                if (isLogic) {
+                    buf.append("insertLogical(");
+                    if (action.getBoundName() == null) {
+                        buf.append("fact");
+                        buf.append(idx++);
+                    } else {
+                        buf.append(action.getBoundName());
+                    }
+                    buf.append(" );\n");
+                } else {
+                    buf.append("insert(");
+                    if (action.getBoundName() == null) {
+                        buf.append("fact");
+                        buf.append(idx++);
+                    } else {
+                        buf.append(action.getBoundName());
+                    }
+
+                    buf.append(" );\n");
+                }
 //				buf.append(idx++);
 //				buf.append(" );\n");
-			}
-		}
+            }
+        }
 
-		public void visitActionUpdateField(final ActionUpdateField action) {
-			this.visitActionSetField(action);
-			buf.append("\t\t");
-			if (isDSLEnhanced) {
-				buf.append(">");
-			}
-			buf.append("update( ");
-			buf.append(action.variable);
-			buf.append(" );\n");
-		}
+        public void visitActionUpdateField(final ActionUpdateField action) {
+            this.visitActionSetField(action);
+            buf.append("\t\t");
+            if (isDSLEnhanced) {
+                buf.append(">");
+            }
+            buf.append("update( ");
+            buf.append(action.variable);
+            buf.append(" );\n");
+        }
 
-		public void visitActionGlobalCollectionAdd(
-				final ActionGlobalCollectionAdd add) {
-			buf.append("\t\t");
-			if (isDSLEnhanced) {
-				buf.append(">");
-			}
-			buf.append(add.globalName + ".add(" + add.factName + ");\n");
-		}
+        public void visitActionGlobalCollectionAdd(
+                final ActionGlobalCollectionAdd add) {
+            buf.append("\t\t");
+            if (isDSLEnhanced) {
+                buf.append(">");
+            }
+            buf.append(add.globalName + ".add(" + add.factName + ");\n");
+        }
 
-		public void visitActionRetractFact(final ActionRetractFact action) {
-			buf.append("\t\t");
-			if (isDSLEnhanced) {
-				buf.append(">");
-			}
-			buf.append("retract( ");
-			buf.append(action.variableName);
-			buf.append(" );\n");
-		}
+        public void visitActionRetractFact(final ActionRetractFact action) {
+            buf.append("\t\t");
+            if (isDSLEnhanced) {
+                buf.append(">");
+            }
+            buf.append("retract( ");
+            buf.append(action.variableName);
+            buf.append(" );\n");
+        }
 
-		public void visitDSLSentence(final DSLSentence sentence) {
-			buf.append("\t\t");
-			buf.append(sentence.toString());
-			buf.append("\n");
-		}
+        public void visitDSLSentence(final DSLSentence sentence) {
+            buf.append("\t\t");
+            buf.append(sentence.toString());
+            buf.append("\n");
+        }
 
-		public void visitActionSetField(final ActionSetField action) {
-            if ( action instanceof ActionCallMethod ) {
-                this.generateSetMethodCallsMethod( (ActionCallMethod) action,
-                                                   action.fieldValues );
+        public void visitActionSetField(final ActionSetField action) {
+            if (action instanceof ActionCallMethod) {
+                this.generateSetMethodCallsMethod((ActionCallMethod) action,
+                        action.fieldValues);
             } else {
-                this.generateSetMethodCalls( action.variable,
-                                             action.fieldValues );
+                this.generateSetMethodCalls(action.variable,
+                        action.fieldValues);
             }
         }
 
-		private void generateSetMethodCalls(final String variableName,
-				final ActionFieldValue[] fieldValues) {
-			for (int i = 0; i < fieldValues.length; i++) {
-				buf.append("\t\t");
-				if (isDSLEnhanced) {
-					buf.append(">");
-				}
-				buf.append(variableName);
+        private void generateSetMethodCalls(final String variableName,
+                final ActionFieldValue[] fieldValues) {
+            for (int i = 0; i < fieldValues.length; i++) {
+                buf.append("\t\t");
+                if (isDSLEnhanced) {
+                    buf.append(">");
+                }
+                buf.append(variableName);
 
-				ActionFieldValue value = fieldValues[i];
-				if (value instanceof ActionFieldFunction) {
-					buf.append(".");
-					buf.append(value.field);
-				} else {
-					buf.append(".set");
-					buf.append(Character.toUpperCase(fieldValues[i].field
-							.charAt(0)));
-					buf.append(fieldValues[i].field.substring(1));
-				}
-				buf.append("( ");
-				if (fieldValues[i].isFormula()) {
-					buf.append(fieldValues[i].value.substring(1));
-				} else if (SuggestionCompletionEngine.TYPE_STRING
-						.equals(fieldValues[i].type)) {
-					buf.append("\"");
-					buf.append(fieldValues[i].value);
-					buf.append("\"");
-				} else {
-					buf.append(fieldValues[i].value);
-				}
-				buf.append(" );\n");
-			}
-		}
+                ActionFieldValue value = fieldValues[i];
+                if (value instanceof ActionFieldFunction) {
+                    buf.append(".");
+                    buf.append(value.field);
+                } else {
+                    buf.append(".set");
+                    buf.append(Character.toUpperCase(fieldValues[i].field.charAt(0)));
+                    buf.append(fieldValues[i].field.substring(1));
+                }
+                buf.append("( ");
+                if (fieldValues[i].isFormula()) {
+                    buf.append(fieldValues[i].value.substring(1));
+                } else if (SuggestionCompletionEngine.TYPE_STRING.equals(fieldValues[i].type)) {
+                    buf.append("\"");
+                    buf.append(fieldValues[i].value);
+                    buf.append("\"");
+                } else {
+                    buf.append(fieldValues[i].value);
+                }
+                buf.append(" );\n");
+            }
+        }
 
-
-
-		private void generateSetMethodCallsMethod(final ActionCallMethod action,
-                                                  final ActionFieldValue[] fieldValues) {
-            buf.append( "\t\t" );
-            if ( isDSLEnhanced ) {
-                buf.append( ">" );
+        private void generateSetMethodCallsMethod(final ActionCallMethod action,
+                final ActionFieldValue[] fieldValues) {
+            buf.append("\t\t");
+            if (isDSLEnhanced) {
+                buf.append(">");
             }
-            buf.append( action.variable );
-            buf.append( "." );
+            buf.append(action.variable);
+            buf.append(".");
 
-            buf.append( action.methodName );
+            buf.append(action.methodName);
 
-            buf.append( "(" );
+            buf.append("(");
             boolean isFirst = true;
-            for ( int i = 0; i < fieldValues.length; i++ ) {
+            for (int i = 0; i < fieldValues.length; i++) {
                 ActionFieldFunction valueFunction = (ActionFieldFunction) fieldValues[i];
-                if ( isFirst == true ) {
+                if (isFirst == true) {
                     isFirst = false;
                 } else {
-                    buf.append( "," );
+                    buf.append(",");
                 }
 
-                buf.append( valueFunction.value );
+                buf.append(valueFunction.value);
             }
-            buf.append( " );\n" );
+            buf.append(" );\n");
 
         }
-	}
-
+    }
 }



More information about the jboss-svn-commits mailing list