[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