[jboss-svn-commits] JBL Code SVN: r18858 - 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
Tue Mar 11 20:27:21 EDT 2008
Author: michael.neale at jboss.com
Date: 2008-03-11 20:27:21 -0400 (Tue, 11 Mar 2008)
New Revision: 18858
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/GuidedDecisionTableWidget.java
Log:
JBRULES-1494 Decision table attribute column editor
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-11 22:50:59 UTC (rev 18857)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/admin/CategoryManager.java 2008-03-12 00:27:21 UTC (rev 18858)
@@ -121,8 +121,8 @@
a1.header = "Do something !";
dt.actionCols.add(a1);
- initWidget( form );
- //initWidget( new GuidedDecisionTableWidget(dt) );
+ //initWidget( form );
+ initWidget( new GuidedDecisionTableWidget(dt) );
}
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-11 22:50:59 UTC (rev 18857)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/decisiontable/GuidedDecisionTableWidget.java 2008-03-12 00:27:21 UTC (rev 18858)
@@ -1,13 +1,24 @@
package org.drools.brms.client.decisiontable;
+import java.util.Iterator;
+import java.util.List;
+
+import org.drools.brms.client.common.FormStylePopup;
+import org.drools.brms.client.common.ImageButton;
+import org.drools.brms.client.common.SmallLabel;
import org.drools.brms.client.modeldriven.dt.ActionCol;
import org.drools.brms.client.modeldriven.dt.AttributeCol;
import org.drools.brms.client.modeldriven.dt.ConditionCol;
import org.drools.brms.client.modeldriven.dt.GuidedDecisionTable;
+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.HorizontalPanel;
+import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.KeyboardListener;
import com.google.gwt.user.client.ui.KeyboardListenerAdapter;
+import com.google.gwt.user.client.ui.ListBox;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;
@@ -26,6 +37,8 @@
import com.gwtext.client.widgets.Toolbar;
import com.gwtext.client.widgets.ToolbarMenuButton;
import com.gwtext.client.widgets.Window;
+import com.gwtext.client.widgets.form.FieldSet;
+import com.gwtext.client.widgets.form.FormPanel;
import com.gwtext.client.widgets.grid.BaseColumnConfig;
import com.gwtext.client.widgets.grid.CellMetadata;
import com.gwtext.client.widgets.grid.ColumnConfig;
@@ -46,23 +59,193 @@
public class GuidedDecisionTableWidget extends Composite {
private GuidedDecisionTable dt;
+ private VerticalPanel layout;
+ private GridPanel grid;
+ private FieldDef[] fds;
+ private VerticalPanel attributeConfigWidget;
public GuidedDecisionTableWidget(GuidedDecisionTable dt) {
this.dt = dt;
- GridPanel grid = doGrid();
- VerticalPanel p = new VerticalPanel();
- p.add(grid);
+ layout = new VerticalPanel();
- initWidget(p);
+ FormPanel config = new FormPanel();
+ config.setTitle("Table configuration");
+ // config.setFrame(true);
+ config.setBodyBorder(false);
+
+ FieldSet attributes = new FieldSet("Attributes");
+ attributes.setCollapsible(true);
+ attributes.setFrame(true);
+ attributes.add(getAttributes());
+ config.add(attributes);
+
+
+
+ layout.add(config);
+
+ refreshGrid();
+
+
+ initWidget(layout);
}
+ private Widget getAttributes() {
+ attributeConfigWidget = new VerticalPanel();
+ refreshAttributeWidget();
+ return attributeConfigWidget;
+ }
+
+ private void refreshAttributeWidget() {
+ this.attributeConfigWidget.clear();
+ for (int i = 0; i < dt.attributeCols.size(); i++) {
+ AttributeCol at = (AttributeCol) dt.attributeCols.get(i);
+ HorizontalPanel hp = new HorizontalPanel();
+ hp.add(removeAttr(at));
+ hp.add(new SmallLabel(at.attr));
+ attributeConfigWidget.add(hp);
+ }
+ attributeConfigWidget.add(newAttr());
+ }
+
+ private Widget newAttr() {
+ ImageButton but = new ImageButton("images/new_item.gif", "Add a new attribute.", new ClickListener() {
+ public void onClick(Widget w) {
+ //show choice of attributes
+ final FormStylePopup pop = new FormStylePopup();
+ final ListBox list = new ListBox();
+ list.addItem( "Choose..." );
+
+
+ if (!hasAttribute("salience", dt.attributeCols)) list.addItem( "salience" );
+ list.addItem( "enabled" );
+ list.addItem( "date-effective" );
+ list.addItem( "date-expires" );
+ list.addItem( "no-loop" );
+ list.addItem( "agenda-group" );
+ list.addItem( "activation-group" );
+ list.addItem( "duration" );
+ list.addItem( "auto-focus" );
+ list.addItem( "lock-on-active" );
+ list.addItem( "ruleflow-group" );
+
+ pop.addAttribute("New attribute:", list);
+
+ Button ok = new Button("Add");
+ ok.addClickListener(new ClickListener() {
+ public void onClick(Widget w) {
+
+ AttributeCol attr = new AttributeCol();
+ attr.attr = list.getItemText(list.getSelectedIndex());
+ if (attr.attr.equals("Choose...")) {
+ com.google.gwt.user.client.Window.alert("Please pick a valid attribute");
+ return;
+ }
+ dt.attributeCols.add(attr);
+ scrapeData(dt.attributeCols.size() + 1);
+ refreshGrid();
+ refreshAttributeWidget();
+ pop.hide();
+ }
+ });
+
+ pop.addAttribute("", ok);
+ pop.show();
+ }
+
+ private boolean hasAttribute(String at, List attributeCols) {
+ for (Iterator iterator = attributeCols.iterator(); iterator
+ .hasNext();) {
+ AttributeCol c = (AttributeCol) iterator.next();
+ if (c.attr.equals(at)) {
+ return true;
+ }
+ }
+ return false;
+ }
+ });
+ return but;
+ }
+
+ private Widget removeAttr(final AttributeCol at) {
+ Image del = new ImageButton("images/delete_item_small.gif", "Remove this attribute", new ClickListener() {
+ public void onClick(Widget w) {
+ if (com.google.gwt.user.client.Window.confirm("Are you sure you want to delete the column for " + at.attr + " - all data in that column will be removed?")) {
+ dt.attributeCols.remove(at);
+ removeField(at.attr);
+ scrapeData(-1);
+ refreshGrid();
+ refreshAttributeWidget();
+ }
+ }
+ });
+
+ return del;
+ }
+
+ /**
+ * Here we read the record data from the grid into the data in the model.
+ * if we have an insertCol - then a new empty column of data will be added in that
+ * row position.
+ */
+ private void scrapeData(int insertCol) {
+ Record[] recs = grid.getStore().getRecords();
+ dt.data = new String[recs.length][];
+ for (int i = 0; i < recs.length; i++) {
+ Record r = recs[i];
+ if (insertCol == -1) {
+ String[] row = new String[fds.length];
+ dt.data[i] = row;
+ for (int j = 0; j < fds.length; j++) {
+ row[j] = r.getAsString(fds[j].getName());
+ }
+ } else {
+ String[] row = new String[fds.length + 1];
+ dt.data[i] = row;
+ for (int j = 0; j < fds.length; j++) {
+ if (j < insertCol) {
+ row[j] = r.getAsString(fds[j].getName());
+ } else if (j > insertCol) {
+ row[j + 1] = r.getAsString(fds[j].getName());
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * removes the field from the field def.
+ * @param headerName
+ */
+ private void removeField(String headerName) {
+ FieldDef[] fds_ = new FieldDef[fds.length -1];
+ int new_i = 0;
+ for (int i = 0; i < fds.length; i++) {
+ FieldDef fd = fds[i];
+ if (!fd.getName().equals(headerName)) {
+ fds_[new_i] = fd;
+ new_i++;
+ }
+ }
+ this.fds = fds_;
+
+ }
+
+
+ private void refreshGrid() {
+ if (layout.getWidgetCount() > 1) {
+ layout.remove(1);
+ }
+ grid = doGrid();
+ layout.add(grid);
+ }
+
private GridPanel doGrid() {
- FieldDef[] fds = new FieldDef[dt.attributeCols.size() + dt.actionCols.size() + dt.conditionCols.size() + 2]; //its +2 as we have counter and description data
+ fds = new FieldDef[dt.attributeCols.size() + dt.actionCols.size() + dt.conditionCols.size() + 2]; //its +2 as we have counter and description data
fds[0] = new StringFieldDef("num");
fds[1] = new StringFieldDef("desc");
More information about the jboss-svn-commits
mailing list