[jboss-svn-commits] JBL Code SVN: r19104 - in labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client: decisiontable and 1 other directory.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed Mar 19 04:36:18 EDT 2008


Author: michael.neale at jboss.com
Date: 2008-03-19 04:36:18 -0400 (Wed, 19 Mar 2008)
New Revision: 19104

Added:
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/decisiontable/ActionInsertColumn.java
Modified:
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/admin/CategoryManager.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/decisiontable/ActionSetColumn.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/decisiontable/GuidedDTColumnConfig.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/decisiontable/GuidedDecisionTableWidget.java
Log:
JBRULES-1494 Decision table

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/admin/CategoryManager.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/admin/CategoryManager.java	2008-03-19 08:33:10 UTC (rev 19103)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/admin/CategoryManager.java	2008-03-19 08:36:18 UTC (rev 19104)
@@ -126,17 +126,19 @@
 //        a1.header = "Do something !";
 //        dt.actionCols.add(a1);
 
+        //initWidget( form );
+        final RuleAsset asset_ = new RuleAsset();
+        asset_.metaData = new MetaData();
+        asset_.metaData.packageName = "com.billasurf.manufacturing.plant";
+        asset_.content = dt;
+        initWidget( new GuidedDecisionTableWidget(asset_) );
         SuggestionCompletionCache.getInstance().doAction("com.billasurf.manufacturing.plant", new Command() {
 			public void execute() {
 				System.err.println("loaded SCE");
+
 			}
         });
-        //initWidget( form );
-        RuleAsset asset_ = new RuleAsset();
-        asset_.metaData = new MetaData();
-        asset_.metaData.packageName = "com.billasurf.manufacturing.plant";
-        asset_.content = dt;
-        initWidget( new GuidedDecisionTableWidget(asset_) );
+
     }
 
 

Added: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/decisiontable/ActionInsertColumn.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/decisiontable/ActionInsertColumn.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/decisiontable/ActionInsertColumn.java	2008-03-19 08:36:18 UTC (rev 19104)
@@ -0,0 +1,249 @@
+package org.drools.brms.client.decisiontable;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.drools.brms.client.common.FormStylePopup;
+import org.drools.brms.client.common.ImageButton;
+import org.drools.brms.client.common.InfoPopup;
+import org.drools.brms.client.common.SmallLabel;
+import org.drools.brms.client.modeldriven.SuggestionCompletionEngine;
+import org.drools.brms.client.modeldriven.dt.ActionCol;
+import org.drools.brms.client.modeldriven.dt.ActionInsertFactCol;
+import org.drools.brms.client.modeldriven.dt.ConditionCol;
+import org.drools.brms.client.modeldriven.dt.GuidedDecisionTable;
+
+import com.google.gwt.user.client.Command;
+import com.google.gwt.user.client.ui.Button;
+import com.google.gwt.user.client.ui.ChangeListener;
+import com.google.gwt.user.client.ui.ClickListener;
+import com.google.gwt.user.client.ui.HTML;
+import com.google.gwt.user.client.ui.HorizontalPanel;
+import com.google.gwt.user.client.ui.Image;
+import com.google.gwt.user.client.ui.ListBox;
+import com.google.gwt.user.client.ui.TextBox;
+import com.google.gwt.user.client.ui.Widget;
+
+/**
+ * This is an editor for columns that are for inserting facts.
+ * @author Michael Neale
+ *
+ */
+public class ActionInsertColumn extends FormStylePopup {
+
+	private GuidedDecisionTable dt;
+	private SuggestionCompletionEngine sce;
+	private ActionInsertFactCol editingCol;
+	private SmallLabel patternLabel = new SmallLabel();
+	private SmallLabel fieldLabel = new SmallLabel();
+
+	public ActionInsertColumn(SuggestionCompletionEngine sce, final GuidedDecisionTable dt, final Command refreshGrid, final ActionInsertFactCol col, final boolean isNew) {
+		this.setModal(false);
+		this.dt = dt;
+		this.sce = sce;
+		this.editingCol = new ActionInsertFactCol();
+		editingCol.boundName = col.boundName;
+		editingCol.type = col.type;
+		editingCol.factField = col.factField;
+		editingCol.factType = col.factType;
+		editingCol.header = col.header;
+		editingCol.valueList = col.valueList;
+
+		setTitle("Action column configuration (inserting a new fact)");
+
+		final TextBox header = new TextBox();
+		header.setText(col.header);
+		header.addChangeListener(new ChangeListener() {
+			public void onChange(Widget w) {
+				editingCol.header = header.getText();
+			} });
+		addAttribute("Column header (description):", header);
+
+
+		HorizontalPanel pattern = new HorizontalPanel();
+		pattern.add(patternLabel );
+		doPatternLabel();
+
+		Image changePattern = new ImageButton("images/edit.gif", "Choose a pattern that this column adds data to", new ClickListener() {
+			public void onClick(Widget w) {
+				showChangePattern(w);
+			}
+		});
+		pattern.add(changePattern);
+		addAttribute("Pattern:", pattern);
+
+		HorizontalPanel field = new HorizontalPanel();
+		field.add(fieldLabel);
+		Image editField = new ImageButton("images/edit.gif", "Edit the field that this column operates on", new ClickListener() {
+			public void onClick(Widget w) {
+				showFieldChange();
+			}
+		});
+		field.add(editField);
+		addAttribute("Field:", field);
+		doFieldLabel();
+
+
+		final TextBox valueList = new TextBox();
+		valueList.setText(editingCol.valueList);
+		valueList.addChangeListener(new ChangeListener() {
+			public void onChange(Widget w) {
+				editingCol.valueList = valueList.getText();
+			}
+		});
+		HorizontalPanel vl = new HorizontalPanel();
+		vl.add(valueList);
+		vl.add(new InfoPopup("Value list", "Value lists are an optional comma separated list of values to show as a drop down."));
+		addAttribute("(optional) value list:", vl);
+
+		Button apply = new Button("Apply changes");
+		apply.addClickListener(new ClickListener() {
+			public void onClick(Widget w) {
+				if (isNew) {
+					dt.actionCols.add(editingCol);
+				} else {
+					col.boundName = editingCol.boundName;
+					col.type = editingCol.type;
+					col.factField = editingCol.factField;
+					col.factType = editingCol.factType;
+					col.header = editingCol.header;
+					col.valueList = editingCol.valueList;
+				}
+				refreshGrid.execute();
+				hide();
+			}
+		});
+		addAttribute("", apply);
+
+	}
+
+	private void showFieldChange() {
+		final FormStylePopup pop = new FormStylePopup();
+		pop.setModal(false);
+		String[] fields = this.sce.getFieldCompletions(this.editingCol.factType);
+		final ListBox box = new ListBox();
+		for (int i = 0; i < fields.length; i++) {
+			box.addItem(fields[i]);
+		}
+		pop.addAttribute("Field:", box);
+		Button b = new Button("OK");
+		pop.addAttribute("", b);
+		b.addClickListener(new ClickListener() {
+			public void onClick(Widget w) {
+				editingCol.factField = box.getItemText(box.getSelectedIndex());
+				editingCol.type = sce.getFieldType(editingCol.factType, editingCol.factField);
+				doFieldLabel();
+				pop.hide();
+			}
+		});
+		pop.show();
+
+	}
+
+	private void doFieldLabel() {
+		if (nil(this.editingCol.factField)) {
+			fieldLabel.setText("(please choose fact type)");
+		} else {
+			fieldLabel.setText(editingCol.factField);
+		}
+
+	}
+
+	private boolean nil(String s) {
+		return s == null || s.equals("");
+	}
+
+	private void doPatternLabel() {
+		if (this.editingCol.factType != null) {
+			this.patternLabel.setText(this.editingCol.factType + " [" + editingCol.boundName + "]");
+		}
+	}
+
+	protected void showChangePattern(Widget w) {
+
+		final ListBox pats = this.loadPatterns();
+		if (pats.getItemCount() == 0) {
+			showNewPatternDialog();
+			return;
+		}
+		final FormStylePopup pop = new FormStylePopup();
+		Button ok = new Button("OK");
+		HorizontalPanel hp = new HorizontalPanel();
+		hp.add(pats);
+		hp.add(ok);
+
+
+		pop.addAttribute("Choose existing pattern to add column to:", hp);
+		pop.addAttribute("", new HTML("<i><b>---OR---</i></b>"));
+
+		Button createPattern = new Button("Create new fact pattern");
+		createPattern.addClickListener(new ClickListener() {
+			public void onClick(Widget w) {
+				pop.hide();
+				showNewPatternDialog();
+			}
+		});
+		pop.addAttribute("", createPattern);
+
+
+
+
+		ok.addClickListener(new ClickListener() {
+			public void onClick(Widget w) {
+				String[] val = pats.getValue(pats.getSelectedIndex()).split("\\s");
+				editingCol.factType = val[0];
+				editingCol.boundName = val[1];
+				doPatternLabel();
+				pop.hide();
+			}
+		});
+
+		pop.show();
+	}
+
+	protected void showNewPatternDialog() {
+		final FormStylePopup pop = new FormStylePopup();
+		pop.setTitle("New fact - select the type");
+		final ListBox types = new ListBox();
+		for (int i = 0; i < sce.factTypes.length; i++) {
+			types.addItem(sce.factTypes[i]);
+		}
+		pop.addAttribute("Fact type:", types);
+		final TextBox binding = new TextBox();
+		pop.addAttribute("name:", binding);
+
+		Button ok = new Button("OK");
+		ok.addClickListener(new ClickListener() {
+			public void onClick(Widget w) {
+				editingCol.boundName = binding.getText();
+				editingCol.factType = types.getItemText(types.getSelectedIndex());
+				doPatternLabel();
+				pop.hide();
+			}
+		});
+		pop.addAttribute("", ok);
+
+		pop.show();
+	}
+
+	private ListBox loadPatterns() {
+		Set vars = new HashSet();
+		ListBox patterns = new ListBox();
+		for (int i = 0; i < dt.conditionCols.size(); i++) {
+			ActionCol col = (ActionCol) dt.actionCols.get(i);
+			if (col instanceof ActionInsertFactCol) {
+				ActionInsertFactCol c = (ActionInsertFactCol) col;
+				if (!vars.contains(c.boundName)) {
+					patterns.addItem(c.factType + " [" + c.boundName + "]", c.factType + " " + c.boundName);
+					vars.add(c.boundName);
+				}
+			}
+		}
+
+		return patterns;
+
+	}
+
+
+
+}


Property changes on: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/decisiontable/ActionInsertColumn.java
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/decisiontable/ActionSetColumn.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/decisiontable/ActionSetColumn.java	2008-03-19 08:33:10 UTC (rev 19103)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/decisiontable/ActionSetColumn.java	2008-03-19 08:36:18 UTC (rev 19104)
@@ -6,6 +6,7 @@
 
 import org.drools.brms.client.common.FormStylePopup;
 import org.drools.brms.client.common.ImageButton;
+import org.drools.brms.client.common.InfoPopup;
 import org.drools.brms.client.common.SmallLabel;
 import org.drools.brms.client.modeldriven.SuggestionCompletionEngine;
 import org.drools.brms.client.modeldriven.dt.ActionSetFieldCol;
@@ -39,6 +40,7 @@
 		editingCol.factField = col.factField;
 		editingCol.header = col.header;
 		editingCol.type = col.type;
+		editingCol.valueList = col.valueList;
 		super.setModal(false);
 		setTitle("Column configuration (set a field on a fact)");
 
@@ -74,6 +76,18 @@
 		addAttribute("Field:", field);
 		doFieldLabel();
 
+		final TextBox valueList = new TextBox();
+		valueList.setText(editingCol.valueList);
+		valueList.addChangeListener(new ChangeListener() {
+			public void onChange(Widget w) {
+				editingCol.valueList = valueList.getText();
+			}
+		});
+		HorizontalPanel vl = new HorizontalPanel();
+		vl.add(valueList);
+		vl.add(new InfoPopup("Value list", "Value lists are an optional comma separated list of values to show as a drop down."));
+		addAttribute("(optional) value list:", vl);
+
 		Button apply = new Button("Apply changes");
 		apply.addClickListener(new ClickListener() {
 			public void onClick(Widget w) {
@@ -85,6 +99,7 @@
 					col.factField = editingCol.factField;
 					col.header = editingCol.header;
 					col.type = editingCol.type;
+					col.valueList = editingCol.valueList;
 				}
 				refreshGrid.execute();
 				hide();
@@ -142,7 +157,7 @@
 		final FormStylePopup pop = new FormStylePopup();
 
 		final ListBox pats = this.loadBoundFacts();
-		pop.addAttribute("Choose fact to set field of:", pats);
+		pop.addAttribute("Choose fact:", pats);
 		Button ok = new Button("OK");
 		pop.addAttribute("", ok);
 
@@ -172,6 +187,11 @@
 			box.addItem(b);
 		}
 
+		String[] globs = this.sce.getGlobalVariables();
+		for (int i = 0; i < globs.length; i++) {
+			box.addItem(globs[i]);
+		}
+
 		return box;
 	}
 

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/decisiontable/GuidedDTColumnConfig.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/decisiontable/GuidedDTColumnConfig.java	2008-03-19 08:33:10 UTC (rev 19103)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/decisiontable/GuidedDTColumnConfig.java	2008-03-19 08:36:18 UTC (rev 19104)
@@ -1,7 +1,11 @@
 package org.drools.brms.client.decisiontable;
 
+import java.util.HashSet;
+import java.util.Set;
+
 import org.drools.brms.client.common.FormStylePopup;
 import org.drools.brms.client.common.ImageButton;
+import org.drools.brms.client.common.InfoPopup;
 import org.drools.brms.client.common.SmallLabel;
 import org.drools.brms.client.modeldriven.HumanReadable;
 import org.drools.brms.client.modeldriven.SuggestionCompletionEngine;
@@ -50,6 +54,7 @@
 		editingCol.factType = col.factType;
 		editingCol.header = col.header;
 		editingCol.operator = col.operator;
+		editingCol.valueList = col.valueList;
 
 
 		setTitle("Condition column configuration");
@@ -142,13 +147,23 @@
 		addAttribute("Operator:", operator);
 		doOperatorLabel();
 
+		final TextBox valueList = new TextBox();
+		valueList.setText(editingCol.valueList);
+		valueList.addChangeListener(new ChangeListener() {
+			public void onChange(Widget w) {
+				editingCol.valueList = valueList.getText();
+			}
+		});
+		HorizontalPanel vl = new HorizontalPanel();
+		vl.add(valueList);
+		vl.add(new InfoPopup("Value list", "Value lists are an optional comma separated list of values to show as a drop down."));
+		addAttribute("(optional) value list:", vl);
 
 		Button apply = new Button("Apply changes");
 		apply.addClickListener(new ClickListener() {
 			public void onClick(Widget w) {
 				if (isNew) {
 					dt.conditionCols.add(editingCol);
-
 				} else {
 					col.boundName = editingCol.boundName;
 					col.constraintValueType = editingCol.constraintValueType;
@@ -156,7 +171,7 @@
 					col.factType = editingCol.factType;
 					col.header = editingCol.header;
 					col.operator = editingCol.operator;
-
+					col.valueList = editingCol.valueList;
 				}
 				refreshGrid.execute();
 				hide();
@@ -194,6 +209,7 @@
 
 	private void showOperatorChange() {
 		final FormStylePopup pop = new FormStylePopup();
+		pop.setTitle("Set the operator");
 		pop.setModal(false);
 		String[] ops = this.sce.getOperatorCompletions(editingCol.factType, editingCol.factField);
 		final ListBox box = new ListBox();
@@ -331,10 +347,14 @@
 	}
 
 	private ListBox loadPatterns() {
+		Set vars = new HashSet();
 		ListBox patterns = new ListBox();
 		for (int i = 0; i < dt.conditionCols.size(); i++) {
 			ConditionCol c = (ConditionCol) dt.conditionCols.get(i);
-			patterns.addItem(c.factType + " [" + c.boundName + "]", c.factType + " " + c.boundName);
+			if (!vars.contains(c.boundName)) {
+				patterns.addItem(c.factType + " [" + c.boundName + "]", c.factType + " " + c.boundName);
+				vars.add(c.boundName);
+			}
 		}
 
 		return patterns;

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/decisiontable/GuidedDecisionTableWidget.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/decisiontable/GuidedDecisionTableWidget.java	2008-03-19 08:33:10 UTC (rev 19103)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/decisiontable/GuidedDecisionTableWidget.java	2008-03-19 08:36:18 UTC (rev 19104)
@@ -1,18 +1,24 @@
 package org.drools.brms.client.decisiontable;
 
+import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
 
 import org.drools.brms.client.common.FormStylePopup;
 import org.drools.brms.client.common.ImageButton;
+import org.drools.brms.client.common.PrettyFormLayout;
 import org.drools.brms.client.common.SmallLabel;
 import org.drools.brms.client.modeldriven.SuggestionCompletionEngine;
 import org.drools.brms.client.modeldriven.brl.ISingleFieldConstraint;
 import org.drools.brms.client.modeldriven.dt.ActionCol;
+import org.drools.brms.client.modeldriven.dt.ActionInsertFactCol;
 import org.drools.brms.client.modeldriven.dt.ActionSetFieldCol;
 import org.drools.brms.client.modeldriven.dt.AttributeCol;
 import org.drools.brms.client.modeldriven.dt.ConditionCol;
+import org.drools.brms.client.modeldriven.dt.DTColumnConfig;
 import org.drools.brms.client.modeldriven.dt.GuidedDecisionTable;
+import org.drools.brms.client.modeldriven.ui.ActionValueEditor;
 import org.drools.brms.client.packages.SuggestionCompletionCache;
 import org.drools.brms.client.rpc.RuleAsset;
 
@@ -20,6 +26,7 @@
 import com.google.gwt.user.client.ui.Button;
 import com.google.gwt.user.client.ui.ClickListener;
 import com.google.gwt.user.client.ui.Composite;
+import com.google.gwt.user.client.ui.HTML;
 import com.google.gwt.user.client.ui.HorizontalPanel;
 import com.google.gwt.user.client.ui.Image;
 import com.google.gwt.user.client.ui.KeyboardListener;
@@ -39,7 +46,6 @@
 import com.gwtext.client.data.SortState;
 import com.gwtext.client.data.Store;
 import com.gwtext.client.data.StringFieldDef;
-import com.gwtext.client.widgets.Component;
 import com.gwtext.client.widgets.Panel;
 import com.gwtext.client.widgets.Toolbar;
 import com.gwtext.client.widgets.ToolbarMenuButton;
@@ -54,6 +60,7 @@
 import com.gwtext.client.widgets.grid.GroupingView;
 import com.gwtext.client.widgets.grid.Renderer;
 import com.gwtext.client.widgets.grid.event.GridCellListenerAdapter;
+import com.gwtext.client.widgets.grid.event.GridColumnListenerAdapter;
 import com.gwtext.client.widgets.menu.BaseItem;
 import com.gwtext.client.widgets.menu.Item;
 import com.gwtext.client.widgets.menu.Menu;
@@ -73,10 +80,13 @@
 	private VerticalPanel conditionsConfigWidget;
 	private String packageName;
 	private VerticalPanel actionsConfigWidget;
+	private Map colMap;
+	private SuggestionCompletionEngine sce;
 
 
 	public GuidedDecisionTableWidget(RuleAsset asset) {
 
+
     	this.dt = (GuidedDecisionTable) asset.content;
     	this.packageName = asset.metaData.packageName;
 
@@ -96,6 +106,7 @@
 
         attributes.setFrame(true);
         attributes.add(getAttributes());
+        attributes.setCollapsed(dt.attributeCols.size() == 0);
         config.add(attributes);
 
 
@@ -139,8 +150,36 @@
 
 	}
 
-	private Widget editAction(ActionCol c) {
-		return new Image("images/edit.gif");
+	private Widget editAction(final ActionCol c) {
+		return new ImageButton("images/edit.gif", "Edit this action column configuration", new ClickListener() {
+			public void onClick(Widget w) {
+				if (c instanceof ActionSetFieldCol) {
+					ActionSetFieldCol asf = (ActionSetFieldCol) c;
+					ActionSetColumn ed = new ActionSetColumn(getSCE(), dt, new Command() {
+							public void execute() {
+								scrapeData(-1);
+								refreshGrid();
+								refreshActionsWidget();
+							}
+						}
+					, asf, false);
+					ed.show();
+				} else if (c instanceof ActionInsertFactCol) {
+					ActionInsertFactCol asf = (ActionInsertFactCol) c;
+					ActionInsertColumn ed = new ActionInsertColumn(getSCE(), dt, new Command() {
+							public void execute() {
+								scrapeData(-1);
+								refreshGrid();
+								refreshActionsWidget();
+							}
+						}
+					, asf, false);
+					ed.show();
+				}
+
+			}
+		});
+
 	}
 
 	private Widget newAction() {
@@ -152,7 +191,6 @@
 				final ListBox choice = new ListBox();
 				choice.addItem("Set the value of a field", "set");
 				choice.addItem("Set the value of a field on a new fact", "insert");
-				choice.addItem("Retract an existing fact", "retract");
 				Button ok = new Button("OK");
 				ok.addClickListener(new ClickListener() {
 					public void onClick(Widget w) {
@@ -161,41 +199,35 @@
 							showSet();
 						} else if (s.equals("insert")) {
 							showInsert();
-						} else if (s.equals("retract")) {
-							showRetract();
 						}
 						pop.hide();
 					}
 
-					private void showRetract() {
-						// TODO Auto-generated method stub
-
-					}
-
 					private void showInsert() {
-						// TODO Auto-generated method stub
-
+						ActionInsertColumn ins = new ActionInsertColumn(getSCE(), dt, new Command() {
+							public void execute() { newActionAdded(); }
+							}, new ActionInsertFactCol(), true);
+						ins.show();
 					}
 
 					private void showSet() {
 						ActionSetColumn set = new ActionSetColumn(getSCE(), dt, new Command() {
-							public void execute() {
-								//want to add in a blank row into the data
-								scrapeData(dt.attributeCols.size() + dt.conditionCols.size() + dt.actionCols.size() + 1);
-								refreshGrid();
-								refreshActionsWidget();
-							}
+							public void execute() { newActionAdded(); }
 						}, new ActionSetFieldCol(), true);
 						set.show();
 					}
+
+					private void newActionAdded() {
+						//want to add in a blank row into the data
+						scrapeData(dt.attributeCols.size() + dt.conditionCols.size() + dt.actionCols.size() + 1);
+						refreshGrid();
+						refreshActionsWidget();
+
+					}
 				});
-
 				pop.addAttribute("Type of action column:", choice);
-
 				pop.addAttribute("", ok);
-
 				pop.show();
-
 			}
 
 		});
@@ -274,8 +306,11 @@
 		});
 	}
 
-	protected SuggestionCompletionEngine getSCE() {
-		return SuggestionCompletionCache.getInstance().getEngineFromCache(this.packageName);
+	private SuggestionCompletionEngine getSCE() {
+		if (sce == null) {
+			this.sce = SuggestionCompletionCache.getInstance().getEngineFromCache(this.packageName);
+		}
+		return sce;
 	}
 
 	private Widget removeCondition(final ConditionCol c) {
@@ -444,14 +479,31 @@
 		if (layout.getWidgetCount() > 1) {
 			layout.remove(1);
 		}
-		grid = doGrid();
-        layout.add(grid);
+		if (dt.actionCols.size() == 0 && dt.conditionCols.size() == 0 && dt.actionCols.size() == 0) {
+			VerticalPanel vp = new VerticalPanel();
+			vp.setWidth("100%");
+			PrettyFormLayout pfl = new PrettyFormLayout();
+			pfl.startSection();
+			pfl.addRow(new HTML("<img src='images/information.gif'/>&nbsp;Configure the columns first, then add rows (rules)."));
+
+			pfl.endSection();
+			vp.add(pfl);
+			grid = doGrid();
+			vp.add(grid);
+	        layout.add(vp);
+
+		} else {
+			grid = doGrid();
+	        layout.add(grid);
+		}
 	}
 
 	private GridPanel doGrid() {
 
 		fds = new FieldDef[dt.attributeCols.size() + dt.actionCols.size() + dt.conditionCols.size() + 2]; //its +2 as we have counter and description data
 
+		colMap = new HashMap();
+
 		fds[0] = new StringFieldDef("num");
 		fds[1] = new StringFieldDef("desc");
 
@@ -492,8 +544,13 @@
 					setHeader(attr.attr);
 					setDataIndex(attr.attr);
 					setSortable(true);
+					if (attr.width != -1) {
+						setWidth(attr.width);
+					}
+
 				}
 			};
+			colMap.put(attr.attr, attr);
 			colCount++;
 		}
 
@@ -508,8 +565,12 @@
 					setHeader(c.header);
 					setDataIndex(c.header);
 					setSortable(true);
+					if (c.width != -1) {
+						setWidth(c.width);
+					}
 				}
 			};
+			colMap.put(c.header, c);
 			colCount++;
 		}
 
@@ -544,8 +605,12 @@
 					setDataIndex(c.header);
 					//and here we do the appropriate editor
 					setSortable(true);
+					if (c.width != -1) {
+						setWidth(-1);
+					}
 				}
 			};
+			colMap.put(c.header, c);
 			colCount++;
 		}
 
@@ -554,8 +619,6 @@
         MemoryProxy proxy = new MemoryProxy( dt.data );
 
 
-
-
         ColumnModel cm = new ColumnModel(cols);
         final GroupingStore store = new GroupingStore();
         store.setReader(reader);
@@ -586,38 +649,37 @@
         	public void onCellDblClick(GridPanel grid, int rowIndex,
         			int colIndex, EventObject e) {
 
-        		final String dta = grid.getColumnModel().getDataIndex(colIndex);
-
+        		final String dataIdx = grid.getColumnModel().getDataIndex(colIndex);
         		final Record r = store.getAt(rowIndex);
+        		String val = r.getAsString(dataIdx);
+        		DTColumnConfig colConf = (DTColumnConfig) colMap.get(dataIdx);
+        		String[] vals = dt.getValueList(colConf, getSCE());
+        		if (vals.length == 0) {
+        			showTextEditor(e, dataIdx, r, val, colConf);
+        		} else {
+        			showDropDownEditor(e, dataIdx, r, val, vals);
+        		}
 
-        		String val = r.getAsString(dta);
+        		//box.setFocus(true);
 
-        		final Window w = new Window();
-        		w.setWidth(168);
-        		w.setAutoDestroy(true);
 
-        		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();
-        				}
-        			}
-        		});
-        		Panel p = new Panel();
-        		p.add(box);
-        		w.add(p);
-        		w.setBorder(false);
+        	}
 
-        		w.setPosition(e.getPageX(), e.getPageY());
-        		w.show();
 
-        		//box.setFocus(true);
+        });
 
-
+        //remember any size changes
+        grid.addGridColumnListener(new GridColumnListenerAdapter() {
+        	public void onColumnResize(GridPanel grid, int colIndex, int newSize) {
+        		final String dta = grid.getColumnModel().getDataIndex(colIndex);
+        		if (dta.equals("desc")) {
+        			dt.descriptionWidth = newSize;
+        		} else {
+        			if (colMap.containsKey(dta)) {
+        				DTColumnConfig col = (DTColumnConfig) colMap.get(dta);
+        				col.width = newSize;
+        			}
+        		}
         	}
         });
 
@@ -649,11 +711,61 @@
 
 
 
+        return grid;
 
+	}
 
 
-        return grid;
 
+	/**
+	 * Show a drop down editor, obviously.
+	 */
+
+	private void showDropDownEditor(EventObject e, final String dataIdx, final Record r, String val, String[] vals) {
+		final Window w = new Window();
+		w.setWidth(200);
+		w.setPlain(true);
+		w.setBodyBorder(false);
+		w.setAutoDestroy(true);
+		w.setTitle("Select value for " + dataIdx);
+		final ListBox drop = new ListBox();
+		for (int i = 0; i < vals.length; i++) {
+			String v = vals[i].trim();
+			drop.addItem(v);
+			if (v.equals(val)) {
+				drop.setSelectedIndex(i);
+			}
+		}
+		drop.addKeyboardListener(new KeyboardListenerAdapter() {
+			public void onKeyUp(Widget sender, char keyCode,
+					int modifiers) {
+				if (keyCode == KeyboardListener.KEY_ENTER) {
+					r.set(dataIdx, drop.getItemText(drop.getSelectedIndex()));
+					w.destroy();
+				}
+			}
+		});
+
+
+
+
+		Panel p = new Panel();
+		p.add(drop);
+		w.add(p);
+		w.setBorder(false);
+
+		Button ok = new Button("OK");
+		ok.addClickListener(new ClickListener() {
+			public void onClick(Widget wg) {
+				r.set(dataIdx, drop.getItemText(drop.getSelectedIndex()));
+				w.destroy();
+			}
+		});
+		p.add(ok);
+
+		w.setPosition(e.getPageX(), e.getPageY());
+		w.show();
+
 	}
 
 	private void renumber(Record[] rs) {
@@ -662,4 +774,51 @@
 		}
 	}
 
+
+	/**
+	 * Show a plain old text editor for a cell.
+	 */
+	private void showTextEditor(EventObject e, final String dta,
+			final Record r, String val, DTColumnConfig colConf) {
+		final Window w = new Window();
+		w.setWidth(200);
+		w.setAutoDestroy(true);
+		w.setPlain(true);
+		w.setBodyBorder(false);
+		w.setTitle("Set value for " + 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("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();
+	}
+
+
 }




More information about the jboss-svn-commits mailing list