[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