[jboss-svn-commits] JBL Code SVN: r32486 - in labs/jbossrules/branches/guvnor_rules_templates_baunax_esteban_diega: drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui and 3 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Fri Apr 9 14:01:03 EDT 2010


Author: baunax
Date: 2010-04-09 14:01:02 -0400 (Fri, 09 Apr 2010)
New Revision: 32486

Added:
   labs/jbossrules/branches/guvnor_rules_templates_baunax_esteban_diega/drools-templates/src/main/java/org/drools/template/objects/ArrayDataProvider.java
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-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/RuleTemplateEditor.java
   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/main/java/org/drools/guvnor/server/util/BRDRTXMLPersistence.java
Log:
refactored how template data is stored inside the model

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-09 15:23:27 UTC (rev 32485)
+++ labs/jbossrules/branches/guvnor_rules_templates_baunax_esteban_diega/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/dt/TemplateModel.java	2010-04-09 18:01:02 UTC (rev 32486)
@@ -1,6 +1,8 @@
 package org.drools.guvnor.client.modeldriven.dt;
 
 import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -16,20 +18,63 @@
 import org.drools.guvnor.client.modeldriven.brl.RuleModel;
 
 public class TemplateModel extends RuleModel implements PortableObject {
-	private List<String[]> table = new ArrayList<String[]>();
+	private Map<String, List<String>> table = new HashMap<String, List<String>>();
+	private int rowsCount = 0;
 	
-	public int getRowsCount() {
+	public int getColsCount() {
 		return getInterpolationVariables().size();
 	}
 	
+	public int getRowsCount() {
+		return rowsCount;
+	}
+
 	public void addRow(String[] row) {
-		if (row.length != getRowsCount()) {
+		Map<String, Integer> vars = getInterpolationVariables();
+		if (row.length != vars.size()) {
 			throw new IllegalArgumentException("Invalid numbers of columns: " + 
-					row.length + " expected: " + getRowsCount());
+					row.length + " expected: " + vars.size());
 		}
-		table.add(row);
+		for (Map.Entry<String, Integer> entry : vars.entrySet()) {
+			List<String> list = table.get(entry.getKey());
+			if (list == null) {
+				list = new ArrayList<String>();
+				table.put(entry.getKey(), list);
+			}
+			if (rowsCount != list.size() ) {
+				throw new IllegalArgumentException("invalid list size for " + entry.getKey() + ", expected: " + rowsCount + " was: " + list.size());
+			}
+			list.add(row[entry.getValue()]);
+		}
+		rowsCount++;
 	}
 	
+	public void removeRow(int row) {
+		if (row >= 0 && row < rowsCount) {
+			for (List<String> col : table.values()) {
+				col.remove(row);
+			}
+			rowsCount--;
+		} else {
+			throw new ArrayIndexOutOfBoundsException(row);
+		}
+	}
+	
+	public void putInSync() {
+		Map<String, Integer> vars = getInterpolationVariables();
+		table.keySet().retainAll(vars.keySet());
+		
+		vars.keySet().removeAll(table.keySet());
+		
+		List<String> aux = new ArrayList<String>(rowsCount);
+		for (int i = 0; i < rowsCount; i++) {
+			aux.add("");
+		}
+		for (String varName : vars.keySet()) {
+			table.put(varName, new ArrayList<String>(aux));
+		}
+	}
+	
 	public String[] getInterpolationVariablesList() {
 		Map<String, Integer> vars = getInterpolationVariables();
 		String[] ret = new String[vars.size()];
@@ -67,7 +112,29 @@
         return result;
 	}
 
-	public List<String[]> getTable() {
+	public Map<String, List<String>> getTable() {
 		return table;
 	}
+
+	public String[][] getTableAsArray() {
+		if (rowsCount <= 0) {
+			return new String[0][0];
+		}
+		String[][] ret = new String[rowsCount][table.size()];
+		Map<String, Integer> vars = getInterpolationVariables();
+		for (Map.Entry<String, Integer> entry : vars.entrySet()) {
+			String varName = entry.getKey();
+			int idx = entry.getValue();
+			for (int row = 0; row < rowsCount; row++) {
+				ret[row][idx] = table.get(varName).get(row);
+			}
+		}
+		return ret;
+	}
+
+	public void setValue(String varName, int rowIndex, String newValue) {
+		getTable().get(varName).set(rowIndex, newValue);
+	}
+	
+	
 }

Modified: labs/jbossrules/branches/guvnor_rules_templates_baunax_esteban_diega/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/RuleTemplateEditor.java
===================================================================
--- labs/jbossrules/branches/guvnor_rules_templates_baunax_esteban_diega/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/RuleTemplateEditor.java	2010-04-09 15:23:27 UTC (rev 32485)
+++ labs/jbossrules/branches/guvnor_rules_templates_baunax_esteban_diega/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/RuleTemplateEditor.java	2010-04-09 18:01:02 UTC (rev 32486)
@@ -93,7 +93,7 @@
 		final RecordDef recordDef = new RecordDef(fds);
 		ArrayReader reader = new ArrayReader(recordDef);
 		
-		MemoryProxy proxy = new MemoryProxy(model.getTable().toArray(new String[0][]));
+		MemoryProxy proxy = new MemoryProxy(model.getTableAsArray());
 
 		ColumnModel cm = new ColumnModel(cols);
 		for (int i = 0; i < cm.getColumnCount(); i++) {
@@ -141,61 +141,10 @@
 			@Override
 			public void onAfterEdit(GridPanel grid, Record record, String field, Object newValue, Object oldValue,
 					int rowIndex, int colIndex) {
-				model.getTable().get(rowIndex)[vars.get(field)] = (String) newValue;
+				model.setValue(field, rowIndex, (String) newValue);
 			}
 		});
-		
-//		grid.addGridCellListener(new GridCellListenerAdapter() {
-//			@Override
-//			public void onCellDblClick(GridPanel grid, int rowIndex, int colIndex, EventObject e) {
-//				final String dataIdx = grid.getColumnModel().getDataIndex( colIndex );
-//                final Record r = store.getAt( rowIndex );
-//                String val = r.getAsString( dataIdx );
-////				showTextEditor(e, grid.getColumnModel().g, r, val);
-//			}
-//		});
 
 		return grid;
 	}
-
-//	private void showTextEditor(EventObject e, final String dta, final Record r, String val) {
-//		final Window w = new Window();
-//		w.setWidth(200);
-//		w.setAutoDestroy(true);
-//		w.setPlain(true);
-//		w.setBodyBorder(false);
-//		w.setTitle(dta);
-//		final TextBox box = new TextBox();
-//		box.setText(val);
-//		box.addKeyboardListener(new KeyboardListenerAdapter() {
-//			public void onKeyUp(Widget sender, char keyCode, int modifiers) {
-//				if (keyCode == KeyboardListener.KEY_ENTER) {
-//					r.set(dta, box.getText());
-//
-//					w.destroy();
-//				}
-//			}
-//		});
-//
-//		if (dt.isNumeric(colConf, getSCE())) {
-//			box.addKeyboardListener(ActionValueEditor.getNumericFilter(box));
-//		}
-//
-//		Panel p = new Panel();
-//		p.add(box);
-//		w.add(p);
-//		w.setBorder(false);
-//
-//		Button ok = new Button(constants.OK());
-//		ok.addClickListener(new ClickListener() {
-//			public void onClick(Widget wg) {
-//				r.set(dta, box.getText());
-//				w.destroy();
-//			}
-//		});
-//		p.add(ok);
-//
-//		w.setPosition(e.getPageX(), e.getPageY());
-//		w.show();
-//	}
 }

Modified: 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	2010-04-09 15:23:27 UTC (rev 32485)
+++ labs/jbossrules/branches/guvnor_rules_templates_baunax_esteban_diega/drools-guvnor/src/main/java/org/drools/guvnor/server/modeldriven/template/TemplateModelDataProvider.java	2010-04-09 18:01:02 UTC (rev 32486)
@@ -1,22 +1,24 @@
 package org.drools.guvnor.server.modeldriven.template;
 
-import java.util.Iterator;
-
+import org.drools.guvnor.client.modeldriven.dt.TemplateModel;
 import org.drools.template.DataProvider;
 
 public class TemplateModelDataProvider implements DataProvider {
 
-	private Iterator<String[]> rows;
+	private String[][] rows;
+	private int rowsCount;
+	private int currRow = 0;
 
-	public TemplateModelDataProvider(Iterator<String[]> rows) {
-		this.rows = rows;
+	public TemplateModelDataProvider(TemplateModel model) {
+		this.rows = model.getTableAsArray();
+		rowsCount = model.getRowsCount();
 	}
 	
 	public boolean hasNext() {
-		return rows.hasNext();
+		return rowsCount != -1 && currRow < rowsCount;
 	}
 
 	public String[] next() {
-		return rows.next();
+		return rows[currRow++];
 	}
 }

Modified: 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	2010-04-09 15:23:27 UTC (rev 32485)
+++ labs/jbossrules/branches/guvnor_rules_templates_baunax_esteban_diega/drools-guvnor/src/main/java/org/drools/guvnor/server/util/BRDRTPersistence.java	2010-04-09 18:01:02 UTC (rev 32486)
@@ -1,15 +1,12 @@
 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.drools.template.objects.ArrayDataProvider;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -37,11 +34,11 @@
     	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());
+    	DataProvider dataProvider; 
+    	if (tplModel.getRowsCount() > 0) {
+    		dataProvider = new ArrayDataProvider(tplModel.getTableAsArray());
     	} else {
-    		dataProvider = new TemplateModelDataProvider(generateEmptyIterator(tplModel));
+    		dataProvider = new ArrayDataProvider(generateEmptyIterator(tplModel));
     	}
     	
     	String generatedDRl = tplCompiler.compile(dataProvider, new ByteArrayInputStream(ruleTemplate.getBytes()))
@@ -51,19 +48,19 @@
 		return generatedDRl;
     }
     
-	private Iterator<String[]> generateEmptyIterator(TemplateModel tplModel) {
-		List<String[]> l = new ArrayList<String[]>();
+	private String[][] generateEmptyIterator(TemplateModel tplModel) {
+		String[][] rows = new String[1][];
 
 		String[] interpolationVariables = tplModel.getInterpolationVariablesList();
 		if (interpolationVariables == null || interpolationVariables.length == 0) {
-			l.add(new String[] { "" });
+			rows[0] = new String[] { "" };
 		} else {
 			for (int i = 0; i < interpolationVariables.length; i++) {
 				interpolationVariables[i] += "_na";
 			}
-			l.add(interpolationVariables);
+			rows[0] = interpolationVariables;
 		}
-		return l.iterator();
+		return rows;
 	}
 
 	@Override

Modified: labs/jbossrules/branches/guvnor_rules_templates_baunax_esteban_diega/drools-guvnor/src/main/java/org/drools/guvnor/server/util/BRDRTXMLPersistence.java
===================================================================
--- labs/jbossrules/branches/guvnor_rules_templates_baunax_esteban_diega/drools-guvnor/src/main/java/org/drools/guvnor/server/util/BRDRTXMLPersistence.java	2010-04-09 15:23:27 UTC (rev 32485)
+++ labs/jbossrules/branches/guvnor_rules_templates_baunax_esteban_diega/drools-guvnor/src/main/java/org/drools/guvnor/server/util/BRDRTXMLPersistence.java	2010-04-09 18:01:02 UTC (rev 32486)
@@ -8,7 +8,8 @@
  *
  * This is the 'brl' xml format (Business Rule Language).
  *
- * @author Michael Neale
+ * @author baunax at gmail.com
+ * @author dieguitoll at gmail.com
  */
 public class BRDRTXMLPersistence extends BRXMLPersistence {
 	
@@ -23,6 +24,19 @@
 	}
 	
 	@Override
+	public String marshal(RuleModel model) {
+		((TemplateModel) model).putInSync();
+		return super.marshal(model);
+	}
+	
+	@Override
+	public TemplateModel unmarshal(String xml) {
+		TemplateModel model = (TemplateModel) super.unmarshal(xml);
+		model.putInSync();
+		return model;
+	}
+	
+	@Override
 	protected RuleModel createEmptyModel() {
 		return new TemplateModel();
 	}

Added: labs/jbossrules/branches/guvnor_rules_templates_baunax_esteban_diega/drools-templates/src/main/java/org/drools/template/objects/ArrayDataProvider.java
===================================================================
--- labs/jbossrules/branches/guvnor_rules_templates_baunax_esteban_diega/drools-templates/src/main/java/org/drools/template/objects/ArrayDataProvider.java	                        (rev 0)
+++ labs/jbossrules/branches/guvnor_rules_templates_baunax_esteban_diega/drools-templates/src/main/java/org/drools/template/objects/ArrayDataProvider.java	2010-04-09 18:01:02 UTC (rev 32486)
@@ -0,0 +1,29 @@
+package org.drools.template.objects;
+
+import org.drools.template.DataProvider;
+
+public class ArrayDataProvider implements DataProvider {
+
+	private String[][] rows;
+	private int currRow;
+	private int rowsCount;
+	
+	public ArrayDataProvider(String[][] rows) {
+		if (rows == null) {
+			this.rows = new String[0][0];
+		} else {
+			this.rows = rows;
+		}
+		this.currRow = 0;
+		this.rowsCount = this.rows.length;
+	}
+	
+	public boolean hasNext() {
+		return currRow < rowsCount;
+	}
+
+	public String[] next() {
+		return rows[currRow++];
+	}
+
+}


Property changes on: labs/jbossrules/branches/guvnor_rules_templates_baunax_esteban_diega/drools-templates/src/main/java/org/drools/template/objects/ArrayDataProvider.java
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF



More information about the jboss-svn-commits mailing list