[jboss-svn-commits] JBL Code SVN: r32470 - in labs/jbossrules/branches/guvnor_rules_templates_baunax_esteban_diega: drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/dt and 7 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Wed Apr 7 15:40:58 EDT 2010
Author: baunax
Date: 2010-04-07 15:40:57 -0400 (Wed, 07 Apr 2010)
New Revision: 32470
Added:
labs/jbossrules/branches/guvnor_rules_templates_baunax_esteban_diega/drools-guvnor/src/main/java/org/drools/guvnor/server/modeldriven/
labs/jbossrules/branches/guvnor_rules_templates_baunax_esteban_diega/drools-guvnor/src/main/java/org/drools/guvnor/server/modeldriven/template/
labs/jbossrules/branches/guvnor_rules_templates_baunax_esteban_diega/drools-guvnor/src/main/java/org/drools/guvnor/server/modeldriven/template/TemplateModelDataProvider.java
labs/jbossrules/branches/guvnor_rules_templates_baunax_esteban_diega/drools-guvnor/src/main/java/org/drools/guvnor/server/util/BRDRTPersistence.java
labs/jbossrules/branches/guvnor_rules_templates_baunax_esteban_diega/drools-guvnor/src/test/java/org/drools/guvnor/server/util/BRDRTPersistenceTest.java
Modified:
labs/jbossrules/branches/guvnor_rules_templates_baunax_esteban_diega/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/brl/ActionFieldValue.java
labs/jbossrules/branches/guvnor_rules_templates_baunax_esteban_diega/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/brl/RuleModel.java
labs/jbossrules/branches/guvnor_rules_templates_baunax_esteban_diega/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/brl/SingleFieldConstraint.java
labs/jbossrules/branches/guvnor_rules_templates_baunax_esteban_diega/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/dt/TemplateModel.java
labs/jbossrules/branches/guvnor_rules_templates_baunax_esteban_diega/drools-compiler/src/main/java/org/drools/guvnor/server/util/BRDRLPersistence.java
labs/jbossrules/branches/guvnor_rules_templates_baunax_esteban_diega/drools-guvnor/src/main/java/org/drools/guvnor/server/contenthandler/BRLContentHandler.java
labs/jbossrules/branches/guvnor_rules_templates_baunax_esteban_diega/drools-guvnor/src/main/java/org/drools/guvnor/server/contenthandler/TemplateModelHandler.java
Log:
created a BRDRTPersister for generating DRL from a rule template
Modified: labs/jbossrules/branches/guvnor_rules_templates_baunax_esteban_diega/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/brl/ActionFieldValue.java
===================================================================
--- labs/jbossrules/branches/guvnor_rules_templates_baunax_esteban_diega/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/brl/ActionFieldValue.java 2010-04-07 18:15:53 UTC (rev 32469)
+++ labs/jbossrules/branches/guvnor_rules_templates_baunax_esteban_diega/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/brl/ActionFieldValue.java 2010-04-07 19:40:57 UTC (rev 32470)
@@ -66,8 +66,6 @@
public ActionFieldValue() {
}
-
-
/**
* This will return true if the value is really a "formula" - in
* the sense of like an excel spreadsheet.
@@ -77,14 +75,7 @@
*
*/
public boolean isFormula() {
- if ( this.value == null ) {
- return false;
- }
- if ( this.value.trim().startsWith( "=" ) ) {
- return true;
- } else {
- return false;
- }
+ return this.value != null && this.value.trim().startsWith( "=" );
}
}
Modified: labs/jbossrules/branches/guvnor_rules_templates_baunax_esteban_diega/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/brl/RuleModel.java
===================================================================
--- labs/jbossrules/branches/guvnor_rules_templates_baunax_esteban_diega/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/brl/RuleModel.java 2010-04-07 18:15:53 UTC (rev 32469)
+++ labs/jbossrules/branches/guvnor_rules_templates_baunax_esteban_diega/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/brl/RuleModel.java 2010-04-07 19:40:57 UTC (rev 32470)
@@ -560,16 +560,16 @@
public boolean hasDSLSentences() {
if (this.lhs != null) {
- for (int i = 0; i < this.lhs.length; i++) {
- if (lhs[i] instanceof DSLSentence) {
+ for (IPattern pattern : this.lhs) {
+ if (pattern instanceof DSLSentence) {
return true;
}
}
}
if (this.rhs != null) {
- for (int i = 0; i < this.rhs.length; i++) {
- if (rhs[i] instanceof DSLSentence) {
+ for (IAction action : this.rhs) {
+ if (action instanceof DSLSentence) {
return true;
}
}
Modified: labs/jbossrules/branches/guvnor_rules_templates_baunax_esteban_diega/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/brl/SingleFieldConstraint.java
===================================================================
--- labs/jbossrules/branches/guvnor_rules_templates_baunax_esteban_diega/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/brl/SingleFieldConstraint.java 2010-04-07 18:15:53 UTC (rev 32469)
+++ labs/jbossrules/branches/guvnor_rules_templates_baunax_esteban_diega/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/brl/SingleFieldConstraint.java 2010-04-07 19:40:57 UTC (rev 32470)
@@ -2,7 +2,7 @@
/**
- * This represents a contraint on a fact - involving a SINGLE FIELD.
+ * This represents a constraint on a fact - involving a SINGLE FIELD.
*
* Can also include optional "connective constraints" that extend the options for matches.
* @author Michael Neale
@@ -17,7 +17,7 @@
/**
* Used instead of "value" when constraintValueType = TYPE_EXPR_BUILDER.
- * Eteban Aliverti
+ * Esteban Aliverti
*/
private ExpressionFormLine expression = new ExpressionFormLine();
@@ -62,11 +62,7 @@
* Returns true of there is a field binding.
*/
public boolean isBound() {
- if ( this.fieldBinding != null && !"".equals( this.fieldBinding ) ) {
- return true;
- } else {
- return false;
- }
+ return this.fieldBinding != null && this.fieldBinding.length() > 0 ;
}
public ExpressionFormLine getExpression() {
@@ -76,7 +72,4 @@
public void setExpression(ExpressionFormLine expression) {
this.expression = expression;
}
-
-
-
}
Modified: labs/jbossrules/branches/guvnor_rules_templates_baunax_esteban_diega/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/dt/TemplateModel.java
===================================================================
--- labs/jbossrules/branches/guvnor_rules_templates_baunax_esteban_diega/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/dt/TemplateModel.java 2010-04-07 18:15:53 UTC (rev 32469)
+++ labs/jbossrules/branches/guvnor_rules_templates_baunax_esteban_diega/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/dt/TemplateModel.java 2010-04-07 19:40:57 UTC (rev 32470)
@@ -3,24 +3,60 @@
import java.util.ArrayList;
import java.util.List;
+import org.drools.guvnor.client.modeldriven.brl.ActionFieldValue;
+import org.drools.guvnor.client.modeldriven.brl.ActionInsertFact;
+import org.drools.guvnor.client.modeldriven.brl.FactPattern;
+import org.drools.guvnor.client.modeldriven.brl.FieldConstraint;
+import org.drools.guvnor.client.modeldriven.brl.IAction;
+import org.drools.guvnor.client.modeldriven.brl.IPattern;
+import org.drools.guvnor.client.modeldriven.brl.ISingleFieldConstraint;
import org.drools.guvnor.client.modeldriven.brl.PortableObject;
import org.drools.guvnor.client.modeldriven.brl.RuleModel;
public class TemplateModel extends RuleModel implements PortableObject {
- private List<List<String>> table = new ArrayList<List<String>>();
+ private List<String[]> table = new ArrayList<String[]>();
public int getRowsCount() {
- //TODO {bauna} read template and calculate
- return 0;
+ return getInterpolationVariables().size();
}
- public void addRow(List<String> row) {
- if (row.size() != getRowsCount()) {
+ public void addRow(String[] row) {
+ if (row.length != getRowsCount()) {
throw new IllegalArgumentException("Invalid numbers of columns: " +
- row.size() + " expected: " + getRowsCount());
+ row.length + " expected: " + getRowsCount());
}
table.add(row);
}
-
+ public List<String> getInterpolationVariables() {
+ List<String> result = new ArrayList<String>();
+ for (IPattern pattern : this.lhs) {
+ if (pattern instanceof FactPattern) {
+ FactPattern fact = (FactPattern) pattern;
+ for (FieldConstraint fc : fact.getFieldConstraints()) {
+ if (fc instanceof ISingleFieldConstraint) {
+ ISingleFieldConstraint con = (ISingleFieldConstraint) fc;
+ if (ISingleFieldConstraint.TYPE_TEMPLATE == con.constraintValueType) {
+ result.add(con.value);
+ }
+ }
+ }
+ }
+ }
+ for (IAction action : this.rhs) {
+ if (action instanceof ActionInsertFact) {
+ ActionInsertFact fact = (ActionInsertFact) action;
+ for (ActionFieldValue afv : fact.fieldValues) {
+ if (afv.nature == ActionFieldValue.TYPE_TEMPLATE ) {
+ result.add(afv.value);
+ }
+ }
+ }
+ }
+ return result;
+ }
+
+ public List<String[]> getTable() {
+ return table;
+ }
}
Modified: labs/jbossrules/branches/guvnor_rules_templates_baunax_esteban_diega/drools-compiler/src/main/java/org/drools/guvnor/server/util/BRDRLPersistence.java
===================================================================
--- labs/jbossrules/branches/guvnor_rules_templates_baunax_esteban_diega/drools-compiler/src/main/java/org/drools/guvnor/server/util/BRDRLPersistence.java 2010-04-07 18:15:53 UTC (rev 32469)
+++ labs/jbossrules/branches/guvnor_rules_templates_baunax_esteban_diega/drools-compiler/src/main/java/org/drools/guvnor/server/util/BRDRLPersistence.java 2010-04-07 19:40:57 UTC (rev 32470)
@@ -13,7 +13,7 @@
private static final BRLPersistence INSTANCE = new BRDRLPersistence();
- private BRDRLPersistence() {
+ protected BRDRLPersistence() {
}
public static BRLPersistence getInstance() {
@@ -28,15 +28,14 @@
* .client.modeldriven.brl.RuleModel)
*/
public String marshal(RuleModel model) {
- boolean isDSLEnhanced = model.hasDSLSentences();
+ return marshalRule(model);
+ }
+
+ protected String marshalRule(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.marshalHeader(model, buf);
this.marshalMetadata(buf, model);
this.marshalAttributes(buf, model);
@@ -44,13 +43,28 @@
this.marshalLHS(buf, model, isDSLEnhanced);
buf.append("\tthen\n");
this.marshalRHS(buf, model, isDSLEnhanced);
- buf.append("end\n");
+ this.marshalFooter(buf);
return buf.toString();
- }
+ }
- /*
- * (non-Javadoc)
- *
+ protected void marshalFooter(StringBuilder buf) {
+ buf.append("end\n");
+ }
+
+ protected void marshalHeader(RuleModel model, StringBuilder buf) {
+ buf.append("rule \"" + marshalRuleName(model) + "\"");
+ if (null != model.parentName && model.parentName.length() > 0) {
+ buf.append(" extends \"" + model.parentName + "\"\n");
+ } else {
+ buf.append('\n');
+ }
+ }
+
+ protected String marshalRuleName(RuleModel model) {
+ return model.name;
+ }
+
+ /**
* @see
* org.drools.guvnor.server.util.BRLPersistence#unmarshal(java.lang.String)
*/
@@ -109,22 +123,22 @@
*/
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);
- }
+ if (model.lhs != null) {
+ LHSPatternVisitor visitor = new LHSPatternVisitor(isDSLEnhanced, buf);
+ for (IPattern cond : model.lhs) {
+ 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);
- }
+ if (model.rhs != null) {
+ RHSActionVisitor visitor = new RHSActionVisitor(isDSLEnhanced, buf);
+ for (IAction action : model.rhs) {
+ visitor.visit(action);
+ }
+ }
}
public static class LHSPatternVisitor extends ReflectiveVisitor {
@@ -438,6 +452,15 @@
buf.append(expression.getText());
}
break;
+ case ISingleFieldConstraint.TYPE_TEMPLATE:
+ if (operator.equals("in")) {
+ buf.append(value);
+ } else {
+ buf.append("\"@{");
+ buf.append(value);
+ buf.append("}\"");
+ }
+ break;
default:
buf.append(value);
}
@@ -601,15 +624,23 @@
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(generateFieldValue(fieldValues[i]));
buf.append("\"");
} else {
- buf.append(fieldValues[i].value);
+ buf.append(generateFieldValue(fieldValues[i]));
}
buf.append(" );\n");
}
}
+ private String generateFieldValue(final ActionFieldValue fieldValue) {
+ if (fieldValue.nature == ActionFieldValue.TYPE_TEMPLATE) {
+ return "@{" + fieldValue.value + "}";
+ }
+ return fieldValue.value;
+ }
+
private void generateSetMethodCallsMethod(final ActionCallMethod action,
final ActionFieldValue[] fieldValues) {
buf.append("\t\t");
Modified: labs/jbossrules/branches/guvnor_rules_templates_baunax_esteban_diega/drools-guvnor/src/main/java/org/drools/guvnor/server/contenthandler/BRLContentHandler.java
===================================================================
--- labs/jbossrules/branches/guvnor_rules_templates_baunax_esteban_diega/drools-guvnor/src/main/java/org/drools/guvnor/server/contenthandler/BRLContentHandler.java 2010-04-07 18:15:53 UTC (rev 32469)
+++ labs/jbossrules/branches/guvnor_rules_templates_baunax_esteban_diega/drools-guvnor/src/main/java/org/drools/guvnor/server/contenthandler/BRLContentHandler.java 2010-04-07 19:40:57 UTC (rev 32470)
@@ -25,6 +25,7 @@
import org.drools.guvnor.server.builder.BRMSPackageBuilder;
import org.drools.guvnor.server.builder.ContentPackageAssembler;
import org.drools.guvnor.server.util.BRDRLPersistence;
+import org.drools.guvnor.server.util.BRLPersistence;
import org.drools.guvnor.server.util.BRXMLPersistence;
import org.drools.repository.AssetItem;
import org.drools.repository.PackageItem;
@@ -32,16 +33,13 @@
import com.google.gwt.user.client.rpc.SerializableException;
public class BRLContentHandler extends ContentHandler
- implements
- IRuleAsset {
+ implements IRuleAsset {
- public void retrieveAssetContent(RuleAsset asset,
+
+ public void retrieveAssetContent(RuleAsset asset,
PackageItem pkg,
AssetItem item) throws SerializableException {
- RuleModel model = BRXMLPersistence.getInstance().unmarshal( item.getContent() );
-
- asset.content = model;
-
+ asset.content = getBrlXmlPersistence().unmarshal( item.getContent() );
}
public void storeAssetContent(RuleAsset asset,
@@ -50,7 +48,7 @@
if ( data.name == null ) {
data.name = repoAsset.getName();
}
- repoAsset.updateContent( BRXMLPersistence.getInstance().marshal( data ) );
+ repoAsset.updateContent( getBrlXmlPersistence().marshal( data ) );
}
public void compile(BRMSPackageBuilder builder,
@@ -71,21 +69,33 @@
private String getSourceDRL(AssetItem asset,
BRMSPackageBuilder builder) {
- RuleModel model = BRXMLPersistence.getInstance().unmarshal( asset.getContent() );
- model.name = asset.getName();
- model.parentName = this.parentNameFromCategory( asset,
- model.parentName );
+ RuleModel model = buildModelFromAsset(asset);
- String drl = BRDRLPersistence.getInstance().marshal( model );
+ String drl = getBrlDrlPersistence().marshal( model );
if ( builder.hasDSL() && model.hasDSLSentences() ) {
drl = builder.getDSLExpander().expand( drl );
}
return drl;
}
+ protected RuleModel buildModelFromAsset(AssetItem asset) {
+ RuleModel model = getBrlXmlPersistence().unmarshal(asset.getContent());
+ model.name = asset.getName();
+ model.parentName = this.parentNameFromCategory(asset, model.parentName);
+ return model;
+ }
+
public String getRawDRL(AssetItem asset) {
- RuleModel model = BRXMLPersistence.getInstance().unmarshal( asset.getContent() );
+ RuleModel model = getBrlXmlPersistence().unmarshal( asset.getContent() );
- return BRDRLPersistence.getInstance().marshal( model );
+ return getBrlDrlPersistence().marshal( model );
}
+
+ protected BRLPersistence getBrlDrlPersistence() {
+ return BRDRLPersistence.getInstance();
+ }
+
+ protected BRLPersistence getBrlXmlPersistence() {
+ return BRXMLPersistence.getInstance();
+ }
}
\ No newline at end of file
Modified: labs/jbossrules/branches/guvnor_rules_templates_baunax_esteban_diega/drools-guvnor/src/main/java/org/drools/guvnor/server/contenthandler/TemplateModelHandler.java
===================================================================
--- labs/jbossrules/branches/guvnor_rules_templates_baunax_esteban_diega/drools-guvnor/src/main/java/org/drools/guvnor/server/contenthandler/TemplateModelHandler.java 2010-04-07 18:15:53 UTC (rev 32469)
+++ labs/jbossrules/branches/guvnor_rules_templates_baunax_esteban_diega/drools-guvnor/src/main/java/org/drools/guvnor/server/contenthandler/TemplateModelHandler.java 2010-04-07 19:40:57 UTC (rev 32470)
@@ -1,25 +1,36 @@
package org.drools.guvnor.server.contenthandler;
import java.io.IOException;
+import java.io.StringReader;
import org.drools.compiler.DroolsParserException;
import org.drools.guvnor.server.builder.BRMSPackageBuilder;
import org.drools.guvnor.server.builder.ContentPackageAssembler.ErrorLogger;
+import org.drools.guvnor.server.util.BRDRTPersistence;
+import org.drools.guvnor.server.util.BRLPersistence;
import org.drools.repository.AssetItem;
public class TemplateModelHandler extends BRLContentHandler {
-
public String getRawDRL(AssetItem asset) {
return null;
}
- public void compile(BRMSPackageBuilder builder, AssetItem asset, ErrorLogger logger)
- throws DroolsParserException, IOException {
- }
+// public void compile(BRMSPackageBuilder builder, AssetItem asset, ErrorLogger logger)
+// throws DroolsParserException, IOException {
+// builder.addPackageFromDrl( new StringReader( getSourceDRL( asset,
+// builder ) ) );
+// }
+
+
public void assembleDRL(BRMSPackageBuilder builder, AssetItem asset, StringBuffer buf) {
}
+ @Override
+ protected BRLPersistence getBrlDrlPersistence() {
+ return BRDRTPersistence.getInstance();
+ }
+
}
Added: labs/jbossrules/branches/guvnor_rules_templates_baunax_esteban_diega/drools-guvnor/src/main/java/org/drools/guvnor/server/modeldriven/template/TemplateModelDataProvider.java
===================================================================
--- labs/jbossrules/branches/guvnor_rules_templates_baunax_esteban_diega/drools-guvnor/src/main/java/org/drools/guvnor/server/modeldriven/template/TemplateModelDataProvider.java (rev 0)
+++ labs/jbossrules/branches/guvnor_rules_templates_baunax_esteban_diega/drools-guvnor/src/main/java/org/drools/guvnor/server/modeldriven/template/TemplateModelDataProvider.java 2010-04-07 19:40:57 UTC (rev 32470)
@@ -0,0 +1,22 @@
+package org.drools.guvnor.server.modeldriven.template;
+
+import java.util.Iterator;
+
+import org.drools.template.DataProvider;
+
+public class TemplateModelDataProvider implements DataProvider {
+
+ private Iterator<String[]> rows;
+
+ public TemplateModelDataProvider(Iterator<String[]> rows) {
+ this.rows = rows;
+ }
+
+ public boolean hasNext() {
+ return rows.hasNext();
+ }
+
+ public String[] next() {
+ return rows.next();
+ }
+}
Property changes on: labs/jbossrules/branches/guvnor_rules_templates_baunax_esteban_diega/drools-guvnor/src/main/java/org/drools/guvnor/server/modeldriven/template/TemplateModelDataProvider.java
___________________________________________________________________
Name: svn:keywords
+ Id Revision
Name: svn:eol-style
+ LF
Added: labs/jbossrules/branches/guvnor_rules_templates_baunax_esteban_diega/drools-guvnor/src/main/java/org/drools/guvnor/server/util/BRDRTPersistence.java
===================================================================
--- labs/jbossrules/branches/guvnor_rules_templates_baunax_esteban_diega/drools-guvnor/src/main/java/org/drools/guvnor/server/util/BRDRTPersistence.java (rev 0)
+++ labs/jbossrules/branches/guvnor_rules_templates_baunax_esteban_diega/drools-guvnor/src/main/java/org/drools/guvnor/server/util/BRDRTPersistence.java 2010-04-07 19:40:57 UTC (rev 32470)
@@ -0,0 +1,100 @@
+package org.drools.guvnor.server.util;
+
+import java.io.ByteArrayInputStream;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.drools.guvnor.client.modeldriven.brl.RuleModel;
+import org.drools.guvnor.client.modeldriven.dt.TemplateModel;
+import org.drools.guvnor.server.modeldriven.template.TemplateModelDataProvider;
+import org.drools.template.DataProvider;
+import org.drools.template.DataProviderCompiler;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * This class persists a {@link TemplateModel} to DRL template
+ *
+ * @author baunax
+ */
+public class BRDRTPersistence extends BRDRLPersistence {
+ private static final Logger log = LoggerFactory.getLogger(BRDRTPersistence.class);
+ private static final BRLPersistence INSTANCE = new BRDRTPersistence();
+ private static final String PACKAGE_DECLARATION = "\npackage __template_dummy_package__\n";
+
+ private BRDRTPersistence() {
+ super();
+ }
+
+ public static BRLPersistence getInstance() {
+ return INSTANCE;
+ }
+
+ @Override
+ public String marshal(RuleModel model) {
+ TemplateModel tplModel = (TemplateModel) model;
+ String ruleTemplate = super.marshalRule(model);
+ log.debug("ruleTemplate:\n{}", ruleTemplate);
+ DataProviderCompiler tplCompiler = new DataProviderCompiler();
+ DataProvider dataProvider;
+ if (!tplModel.getTable().isEmpty()) {
+ dataProvider = new TemplateModelDataProvider(tplModel.getTable().iterator());
+ } else {
+ dataProvider = new TemplateModelDataProvider(generateEmptyIterator(tplModel));
+ }
+
+ String generatedDRl = tplCompiler.compile(dataProvider, new ByteArrayInputStream(ruleTemplate.getBytes()))
+ .substring(PACKAGE_DECLARATION.length()).trim();
+
+ log.debug("generated drl:\n{}", generatedDRl);
+ return generatedDRl;
+ }
+
+ private Iterator<String[]> generateEmptyIterator(TemplateModel tplModel) {
+ List<String[]> l = new ArrayList<String[]>();
+
+ List<String> interpolationVariables = tplModel.getInterpolationVariables();
+ if (interpolationVariables == null || interpolationVariables.isEmpty()) {
+ l.add(new String[] { "" });
+ } else {
+ String[] r = new String[interpolationVariables.size()];
+ int i = 0;
+ for (String var : interpolationVariables) {
+ r[i++] = var + "_na";
+ }
+ l.add(r);
+ }
+ return l.iterator();
+ }
+
+ @Override
+ protected void marshalHeader(RuleModel model, StringBuilder buf) {
+ TemplateModel tplModel = (TemplateModel) model;
+ buf.append("template header\n");
+
+ List<String> interpolationVariables = tplModel.getInterpolationVariables();
+ if (interpolationVariables.isEmpty()) {
+ buf.append("test_var").append('\n');
+ } else {
+ for (String var : interpolationVariables) {
+ buf.append(var).append('\n');
+ }
+ }
+ buf.append(PACKAGE_DECLARATION)
+ .append("\ntemplate \"" + super.marshalRuleName(tplModel) + "\"\n\n");
+ super.marshalHeader(model, buf);
+ }
+
+ @Override
+ protected String marshalRuleName(RuleModel model) {
+ return super.marshalRuleName(model) + "_@{row.rowNumber}";
+ }
+
+ @Override
+ protected void marshalFooter(StringBuilder buf) {
+ super.marshalFooter(buf);
+ buf.append("\nend template");
+ }
+
+}
Property changes on: labs/jbossrules/branches/guvnor_rules_templates_baunax_esteban_diega/drools-guvnor/src/main/java/org/drools/guvnor/server/util/BRDRTPersistence.java
___________________________________________________________________
Name: svn:keywords
+ Id Revision
Name: svn:eol-style
+ LF
Added: labs/jbossrules/branches/guvnor_rules_templates_baunax_esteban_diega/drools-guvnor/src/test/java/org/drools/guvnor/server/util/BRDRTPersistenceTest.java
===================================================================
--- labs/jbossrules/branches/guvnor_rules_templates_baunax_esteban_diega/drools-guvnor/src/test/java/org/drools/guvnor/server/util/BRDRTPersistenceTest.java (rev 0)
+++ labs/jbossrules/branches/guvnor_rules_templates_baunax_esteban_diega/drools-guvnor/src/test/java/org/drools/guvnor/server/util/BRDRTPersistenceTest.java 2010-04-07 19:40:57 UTC (rev 32470)
@@ -0,0 +1,176 @@
+package org.drools.guvnor.server.util;
+
+import junit.framework.TestCase;
+
+import org.drools.guvnor.client.modeldriven.brl.ActionFieldValue;
+import org.drools.guvnor.client.modeldriven.brl.ActionInsertFact;
+import org.drools.guvnor.client.modeldriven.brl.FactPattern;
+import org.drools.guvnor.client.modeldriven.brl.IAction;
+import org.drools.guvnor.client.modeldriven.brl.IPattern;
+import org.drools.guvnor.client.modeldriven.brl.ISingleFieldConstraint;
+import org.drools.guvnor.client.modeldriven.brl.SingleFieldConstraint;
+import org.drools.guvnor.client.modeldriven.dt.TemplateModel;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class BRDRTPersistenceTest extends TestCase {
+ private static final Logger log = LoggerFactory.getLogger(BRDRTPersistenceTest.class);
+ private BRLPersistence p;
+
+ @Override
+ protected void setUp() throws Exception {
+ p = BRDRTPersistence.getInstance();
+ }
+
+ @Override
+ protected void tearDown() throws Exception {
+ p = null;
+ }
+
+ public void testGenerateEmptyDRL() {
+ String expected =
+ "rule \"null_0\"\n" +
+ " dialect \"mvel\"\n" +
+ " when\n" +
+ " then\n" +
+ "end";
+
+ final String drl = p.marshal(new TemplateModel());
+ log.info("drl :\n{}", drl);
+
+ assertNotNull(drl);
+ assertEquals(expected, drl);
+ }
+
+ public void testEmptyData() {
+ String expected =
+ "rule \"with composite_0\"\n" +
+ " dialect \"mvel\"\n" +
+ " when\n" +
+ " $p : Person( name == \"name_na\" )\n" +
+ " then\n" +
+ "end";
+ TemplateModel m = new TemplateModel();
+ m.name = "with composite";
+ m.lhs = new IPattern[1];
+ m.rhs = new IAction[0];
+
+ FactPattern fp = new FactPattern("Person");
+ fp.boundName = "$p";
+
+ SingleFieldConstraint sfc = new SingleFieldConstraint("name");
+ sfc.fieldName = "name";
+ sfc.value = "name";
+ sfc.operator = "==";
+
+ sfc.constraintValueType = ISingleFieldConstraint.TYPE_TEMPLATE;
+ fp.addConstraint(sfc);
+
+ m.lhs[0] = fp;
+ final String drl = p.marshal(m);
+ log.info("drl :\n{}", drl);
+ assertNotNull(drl);
+ assertEquals(expected, drl);
+
+ }
+
+ public void testEmptyDataWithRHS() {
+ String expected =
+ "rule \"with composite_1\"\n" +
+ " dialect \"mvel\"\n" +
+ " when\n" +
+ " $p : Person( name == \"diegoll\" )\n" +
+ " then\n" +
+ " Person fact0 = new Person();\n" +
+ " fact0.setAge( 87 );\n" +
+ " insert(fact0 );\n" +
+ "end\n" +
+ "\n" +
+ "rule \"with composite_0\"\n" +
+ " dialect \"mvel\"\n" +
+ " when\n" +
+ " $p : Person( name == \"baunax\" )\n" +
+ " then\n" +
+ " Person fact0 = new Person();\n" +
+ " fact0.setAge( 34 );\n" +
+ " insert(fact0 );\n" +
+ "end";
+
+ TemplateModel m = new TemplateModel();
+ m.name = "with composite";
+ m.lhs = new IPattern[1];
+ m.rhs = new IAction[1];
+
+ FactPattern fp = new FactPattern("Person");
+ fp.boundName = "$p";
+
+ SingleFieldConstraint sfc = new SingleFieldConstraint("name");
+ sfc.fieldName = "name";
+ sfc.value = "name";
+ sfc.operator = "==";
+
+ sfc.constraintValueType = ISingleFieldConstraint.TYPE_TEMPLATE;
+ fp.addConstraint(sfc);
+
+ m.lhs[0] = fp;
+
+ ActionInsertFact aif = new ActionInsertFact("Person");
+ ActionFieldValue afv = new ActionFieldValue("age", "age", "");
+ afv.nature = ActionFieldValue.TYPE_TEMPLATE;
+
+ aif.addFieldValue(afv);
+ m.rhs[0] = aif;
+
+ m.addRow(new String[] {"baunax", "34"});
+ m.addRow(new String[] {"diegoll", "87"});
+ final String drl = p.marshal(m);
+ log.info("drl :\n{}", drl);
+
+ assertNotNull(drl);
+ assertEquals(expected, drl);
+ }
+
+ public void testWithData() {
+ String expected =
+ "rule \"with composite_1\"\n" +
+ " dialect \"mvel\"\n" +
+ " when\n" +
+ " $p : Person( name == \"diegoll\" )\n" +
+ " then\n" +
+ "end\n" +
+ "\n" +
+ "rule \"with composite_0\"\n" +
+ " dialect \"mvel\"\n" +
+ " when\n" +
+ " $p : Person( name == \"baunax\" )\n" +
+ " then\n" +
+ "end";
+
+ TemplateModel m = new TemplateModel();
+ m.name = "with composite";
+ m.lhs = new IPattern[1];
+ m.rhs = new IAction[0];
+
+ FactPattern fp = new FactPattern("Person");
+ fp.boundName = "$p";
+
+ SingleFieldConstraint sfc = new SingleFieldConstraint("name");
+ sfc.fieldName = "name";
+ sfc.value = "name";
+ sfc.operator = "==";
+
+ sfc.constraintValueType = ISingleFieldConstraint.TYPE_TEMPLATE;
+ fp.addConstraint(sfc);
+
+ m.lhs[0] = fp;
+
+ m.addRow(new String[] {"baunax"});
+ m.addRow(new String[] {"diegoll"});
+
+ final String drl = p.marshal(m);
+ log.info("drl :\n{}", drl);
+ assertNotNull(drl);
+ assertEquals(expected, drl);
+
+ }
+}
Property changes on: labs/jbossrules/branches/guvnor_rules_templates_baunax_esteban_diega/drools-guvnor/src/test/java/org/drools/guvnor/server/util/BRDRTPersistenceTest.java
___________________________________________________________________
Name: svn:keywords
+ Id Revision
Name: svn:eol-style
+ LF
More information about the jboss-svn-commits
mailing list