Java tutorial
/** * Copyright 2010 JBoss Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.drools.guvnor.client.modeldriven.ui; import org.drools.guvnor.client.common.DirtyableComposite; import org.drools.guvnor.client.common.FormStylePopup; import org.drools.guvnor.client.messages.Constants; import org.drools.guvnor.client.rpc.RuleAsset; import org.drools.ide.common.client.modeldriven.dt.TemplateModel; import com.google.gwt.core.client.GWT; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.event.dom.client.KeyCodes; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.Button; import com.google.gwt.user.client.ui.HasHorizontalAlignment; import com.google.gwt.user.client.ui.HorizontalPanel; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.VerticalPanel; import com.google.gwt.user.client.ui.Widget; import com.gwtext.client.core.EventObject; import com.gwtext.client.data.ArrayReader; import com.gwtext.client.data.FieldDef; import com.gwtext.client.data.GroupingStore; import com.gwtext.client.data.MemoryProxy; import com.gwtext.client.data.Record; import com.gwtext.client.data.RecordDef; import com.gwtext.client.data.StringFieldDef; import com.gwtext.client.widgets.Toolbar; import com.gwtext.client.widgets.ToolbarMenuButton; import com.gwtext.client.widgets.form.TextField; import com.gwtext.client.widgets.grid.ColumnConfig; import com.gwtext.client.widgets.grid.ColumnModel; import com.gwtext.client.widgets.grid.EditorGridPanel; import com.gwtext.client.widgets.grid.GridEditor; import com.gwtext.client.widgets.grid.GridPanel; import com.gwtext.client.widgets.grid.GridView; import com.gwtext.client.widgets.grid.event.EditorGridListenerAdapter; import com.gwtext.client.widgets.grid.event.GridListenerAdapter; import com.gwtext.client.widgets.menu.BaseItem; import com.gwtext.client.widgets.menu.Item; import com.gwtext.client.widgets.menu.Menu; import com.gwtext.client.widgets.menu.event.BaseItemListenerAdapter; public class RuleTemplateEditor extends DirtyableComposite implements RuleModelEditor { private TemplateModel model; private GroupingStore store = null; private EditorGridPanel grid = null; private RuleModeller ruleModeller; private Constants constants = GWT.create(Constants.class); public RuleTemplateEditor(RuleAsset asset) { model = (TemplateModel) asset.content; final VerticalPanel tPanel = new VerticalPanel(); tPanel.setWidth("100%"); ruleModeller = new RuleModeller(asset, new TemplateModellerWidgetFactory()); tPanel.add(new Button(constants.LoadTemplateData(), new ClickHandler() { public void onClick(ClickEvent event) { final FormStylePopup popUp = new FormStylePopup(null, constants.TemplateData(), (int) (Window.getClientWidth() * 0.8)); popUp.setHeight(((int) (Window.getClientHeight() * 0.8)) + "px"); popUp.addAttribute("", buildTemplateTable()); Button close = new Button(constants.Close(), new ClickHandler() { public void onClick(ClickEvent event) { popUp.hide(); } }); HorizontalPanel pnlClose = new HorizontalPanel(); pnlClose.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT); pnlClose.add(close); popUp.addAttribute("", pnlClose); popUp.show(); } })); tPanel.add(ruleModeller); initWidget(tPanel); } private Widget buildTemplateTable() { String[] vars = model.getInterpolationVariablesList(); if (vars.length == 0) { return new Label(""); } FieldDef[] fds = new FieldDef[vars.length]; ColumnConfig[] cols = new ColumnConfig[fds.length]; int idx = 0; for (String var : vars) { cols[idx] = new ColumnConfig(); cols[idx].setHeader(var); cols[idx].setDataIndex(var); cols[idx].setSortable(false); cols[idx].setWidth(50); cols[idx].setResizable(true); cols[idx].setEditor(new GridEditor(new TextField())); fds[idx] = new StringFieldDef(var); idx++; } final RecordDef recordDef = new RecordDef(fds); ArrayReader reader = new ArrayReader(recordDef); MemoryProxy proxy = new MemoryProxy(model.getTableAsArray()); ColumnModel cm = new ColumnModel(cols); for (int i = 0; i < cm.getColumnCount(); i++) { cm.setEditable(i, true); } store = new GroupingStore(proxy, reader); store.load(); grid = new EditorGridPanel(store, cm); grid.setStripeRows(true); // GroupingView gv = new GroupingView(); GridView gv = new GridView(); // to stretch it out gv.setForceFit(true); // gv.setGroupTextTpl("{text} ({[values.rs.length]} {[values.rs.length > 1 ? \"" // NON-NLS // + constants.Items() + "\" : \"" + constants.Item() + "\"]})"); grid.setView(gv); grid.setStore(store); grid.setAutoWidth(true); grid.setAutoHeight(true); Toolbar tb = new Toolbar(); Menu menu = new Menu(); menu.addItem(new Item(constants.AddRow(), new BaseItemListenerAdapter() { public void onClick(BaseItem item, EventObject e) { String[] rowData = new String[recordDef.getFields().length]; for (int i = 0; i < rowData.length; i++) { rowData[i] = ""; } Record newRecord = recordDef.createRecord(rowData); store.add(newRecord); model.addRow(newRecord.getId(), rowData); } })); menu.addItem(new Item(constants.RemoveSelectedRowS(), new BaseItemListenerAdapter() { public void onClick(BaseItem item, EventObject e) { removeSelectedRows(grid); } })); grid.addGridListener(new GridListenerAdapter() { public void onKeyPress(EventObject e) { int k = e.getKey(); if (k == KeyCodes.KEY_DELETE || k == KeyCodes.KEY_BACKSPACE) { removeSelectedRows(grid); } else if (k == KeyCodes.KEY_ENTER) { int[] selectedCell = grid.getCellSelectionModel().getSelectedCell(); grid.startEditing(selectedCell[0], selectedCell[1]); } } }); // grid.setSelectionModel(new RowSelectionModel(false)); ToolbarMenuButton tbb = new ToolbarMenuButton(constants.Modify(), menu); tb.addButton(tbb); grid.add(tb); grid.addEditorGridListener(new EditorGridListenerAdapter() { @Override public void onAfterEdit(GridPanel grid, Record record, String field, Object newValue, Object oldValue, int rowIndex, int colIndex) { model.setValue(field, rowIndex, (String) newValue); } }); grid.setWidth((int) (Window.getClientWidth() * 0.75)); return grid; } private void removeSelectedRows(EditorGridPanel grid) { if (com.google.gwt.user.client.Window.confirm(constants.AreYouSureYouWantToDeleteTheSelectedRowS())) { int row = grid.getCellSelectionModel().getSelectedCell()[0]; Record rec = store.getAt(row); model.removeRowById(rec.getId()); store.remove(rec); } } @Override public void resetDirty() { super.resetDirty(); if (store != null) { store.commitChanges(); } } public RuleModeller getRuleModeller() { return ruleModeller; } }