[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