# HG changeset patch # User gernotbelger # Date 1526658154 -7200 # Node ID 89740fe821961a88e753ae655905ef68f4574e85 # Parent 766890addcb27fbd6bf84945ef993a59cc3427fb Extract Table from Panel diff -r 766890addcb2 -r 89740fe82196 gwt-client/src/main/java/org/dive4elements/river/client/client/ui/TableHelper.java --- a/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/TableHelper.java Fri May 18 17:26:26 2018 +0200 +++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/TableHelper.java Fri May 18 17:42:34 2018 +0200 @@ -9,7 +9,29 @@ */ package org.dive4elements.river.client.client.ui; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.SortedMap; +import java.util.TreeMap; + +import org.dive4elements.river.client.client.FLYSConstants; +import org.dive4elements.river.client.shared.model.Data; +import org.dive4elements.river.client.shared.model.DataItem; +import org.dive4elements.river.client.shared.model.DataList; +import org.dive4elements.river.client.shared.model.MultiAttributeData; +import org.dive4elements.river.client.shared.model.MultiDataItem; + +import com.google.gwt.core.client.GWT; +import com.smartgwt.client.data.Record; +import com.smartgwt.client.types.Alignment; +import com.smartgwt.client.types.ListGridFieldType; +import com.smartgwt.client.widgets.Canvas; import com.smartgwt.client.widgets.grid.ListGrid; +import com.smartgwt.client.widgets.grid.ListGridField; +import com.smartgwt.client.widgets.grid.events.RecordClickEvent; +import com.smartgwt.client.widgets.grid.events.RecordClickHandler; /** * @author Domenico Nardi Tironi @@ -17,14 +39,161 @@ */ public class TableHelper { + public interface IColumnClickHandler { + void columnClicked(String value); + } + private enum PinType { none, from, to } - private ListGrid table; + private final ListGrid table; + private final DataList dataList; + final FLYSConstants flys; + private final List keyColEntries = new ArrayList(); - public TableHelper() { + public TableHelper(final DataList dataList, final String definitionStr, final FLYSConstants flys, final IColumnClickHandler fromHandler) { + this.flys = flys; + this.dataList = dataList; + this.table = new ListGrid(); + this.table.setShowHeaderContextMenu(false); + this.table.setWidth100(); + this.table.setShowRecordComponents(true); + this.table.setShowRecordComponentsByCell(true); + this.table.setHeight100(); + this.table.setEmptyMessage(flys.empty_table()); + this.table.setCanReorderFields(false); + + final MultiAttributeData mData = findDefinition(definitionStr); + final Map> meta = mData.getMeta(); + + final Map tableInfo = meta.get("meta_tableinfo"); + final String keyColumnName = tableInfo.get("keycol"); + + final SortedMap fields = new TreeMap(); + + for (final Entry> entry : meta.entrySet()) { + + final String colName = entry.getKey(); + if (colName.startsWith("meta_")) + continue; + + final Map values = entry.getValue(); + + final int order = Integer.parseInt(values.get("order")); + + final ListGridField field = createField(colName, keyColumnName, values, fromHandler); + + fields.put(order, field); + } + + for (final DataItem dataItem : mData.opts) { + final MultiDataItem item = (MultiDataItem) dataItem; + + final Map valueMap = item.getValue(); + // final String columnName = mData.getLabel(); + final Record newRecord = new Record(); + for (final Entry entry : valueMap.entrySet()) { + final String key = entry.getKey(); + final String value = entry.getValue(); + newRecord.setAttribute(key, value); + + if (key.equals(keyColumnName)) + this.keyColEntries.add(value); + } + + this.table.addData(newRecord); + } + + this.table.setFields(fields.values().toArray(new ListGridField[fields.size()])); } + public Canvas getTable() { + return this.table; + } + + private MultiAttributeData findDefinition(final String paranemterName) { + + for (final Data data : this.dataList.getAll()) { + + final String label = data.getLabel(); + if (label.equals(paranemterName) && data instanceof MultiAttributeData) + return (MultiAttributeData) data; + } + + return null; + } + + private ListGridField createField(final String colName, final String keyColumnName, final Map values, + final IColumnClickHandler fromHandler) { + + final String translation = getMeta(values, "translation", colName); + + final ListGridField field = new ListGridField(colName, translation); + + final String width = getMeta(values, "width", "99"); + field.setWidth(width); + + final ListGridFieldType type = getMeta(values, "type", ListGridFieldType.TEXT, ListGridFieldType.class); + field.setType(type); + + final Alignment alignment = getMeta(values, "alignment", Alignment.LEFT, Alignment.class); + field.setAlign(alignment); + + final PinType pinType = getMeta(values, "pin", PinType.none, PinType.class); + switch (pinType) { + case from: { + final String baseUrl = GWT.getHostPageBaseURL(); + field.setCellIcon(baseUrl + this.flys.markerGreen()); + field.addRecordClickHandler(new RecordClickHandler() { + @Override + public void onRecordClick(final RecordClickEvent e) { + final Record r = e.getRecord(); + fromHandler.columnClicked(r.getAttribute(keyColumnName)); + } + }); + } + break; + + case to: + break; + + case none: + default: + break; + } + + return field; + } + + private String getMeta(final Map values, final String key, final String defaultValue) { + + final String value = values.get(key); + if (value == null || value.isEmpty()) + return defaultValue; + + return value; + } + + private > TYPE getMeta(final Map values, final String key, final TYPE defaultValue, final Class enumType) { + + final String value = values.get(key); + if (value == null || value.isEmpty()) + return defaultValue; + + try { + return Enum.valueOf(enumType, value); + } + catch (final Exception e) { + e.printStackTrace(); + return defaultValue; + } + } + + public List getKeycolEntries() { + + return this.keyColEntries; + } + } diff -r 766890addcb2 -r 89740fe82196 gwt-client/src/main/java/org/dive4elements/river/client/client/ui/sinfo/CollisionLoadYearPanel.java --- a/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/sinfo/CollisionLoadYearPanel.java Fri May 18 17:26:26 2018 +0200 +++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/sinfo/CollisionLoadYearPanel.java Fri May 18 17:42:34 2018 +0200 @@ -9,56 +9,36 @@ package org.dive4elements.river.client.client.ui.sinfo; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; -import java.util.Map; -import java.util.Map.Entry; -import java.util.SortedMap; -import java.util.TreeMap; import org.dive4elements.river.client.client.FLYSConstants; import org.dive4elements.river.client.client.ui.AbstractUIProvider; -import org.dive4elements.river.client.client.ui.ParameterMatrix.Column; +import org.dive4elements.river.client.client.ui.TableHelper; +import org.dive4elements.river.client.client.ui.TableHelper.IColumnClickHandler; import org.dive4elements.river.client.shared.model.Data; import org.dive4elements.river.client.shared.model.DataItem; import org.dive4elements.river.client.shared.model.DataList; import org.dive4elements.river.client.shared.model.DefaultData; import org.dive4elements.river.client.shared.model.DefaultDataItem; -import org.dive4elements.river.client.shared.model.MultiAttributeData; -import org.dive4elements.river.client.shared.model.MultiDataItem; import com.google.gwt.core.client.GWT; import com.google.gwt.i18n.client.NumberFormat; -import com.smartgwt.client.data.Record; -import com.smartgwt.client.types.Alignment; -import com.smartgwt.client.types.ListGridFieldType; import com.smartgwt.client.widgets.Canvas; import com.smartgwt.client.widgets.Label; import com.smartgwt.client.widgets.form.DynamicForm; import com.smartgwt.client.widgets.form.fields.TextItem; import com.smartgwt.client.widgets.form.validator.IsIntegerValidator; import com.smartgwt.client.widgets.grid.ListGrid; -import com.smartgwt.client.widgets.grid.ListGridField; -import com.smartgwt.client.widgets.grid.events.RecordClickEvent; -import com.smartgwt.client.widgets.grid.events.RecordClickHandler; import com.smartgwt.client.widgets.layout.HLayout; import com.smartgwt.client.widgets.layout.VLayout; public class CollisionLoadYearPanel extends AbstractUIProvider { - public interface IColumnClickHandler { - void columnClicked(String value); - } - - private enum PinType { - none, from, to - } - private final FLYSConstants MESSAGES = GWT.create(FLYSConstants.class); private TextItem yearsItem; - private final List validYears = new ArrayList(); + private List validYears = new ArrayList(); private ListGrid table; @@ -97,36 +77,6 @@ @Override public Canvas create(final DataList data) { final VLayout layout = new VLayout(); - - final Canvas helper = createHelper(data); - - this.helperContainer.addMember(helper); - - final Canvas submit = getNextButton(); - final Canvas widget = createWidget(data); - - layout.addMember(widget); - layout.addMember(submit); - - return layout; - } - - private Canvas createHelper(final DataList dataList) { - this.table = new ListGrid(); - this.table.setShowHeaderContextMenu(false); - this.table.setWidth100(); - this.table.setShowRecordComponents(true); - this.table.setShowRecordComponentsByCell(true); - this.table.setHeight100(); - this.table.setEmptyMessage(this.MSG.empty_table()); - this.table.setCanReorderFields(false); - - final MultiAttributeData mData = findDefinition(dataList, "years"); - final Map> meta = mData.getMeta(); - - final Map tableInfo = meta.get("meta_tableinfo"); - final String keyColumnName = tableInfo.get("keycol"); - final IColumnClickHandler fromHandler = new IColumnClickHandler() { // add to external class @Override @@ -135,177 +85,19 @@ } }; - final SortedMap fields = new TreeMap(); - - for (final Entry> entry : meta.entrySet()) { - - final String colName = entry.getKey(); - if (colName.startsWith("meta_")) - continue; - - final Map values = entry.getValue(); - - final int order = Integer.parseInt(values.get("order")); - - final ListGridField field = createField(colName, keyColumnName, values, fromHandler); - - fields.put(order, field); - } - - for (final DataItem dataItem : mData.opts) { - final MultiDataItem item = (MultiDataItem) dataItem; - - final Map valueMap = item.getValue(); - // final String columnName = mData.getLabel(); - final Record newRecord = new Record(); - for (final Entry entry : valueMap.entrySet()) { - final String key = entry.getKey(); - final String value = entry.getValue(); - newRecord.setAttribute(key, value); - - if (key.equals(keyColumnName)) - this.validYears.add(value); - } - - this.table.addData(newRecord); - } - - this.table.setFields(fields.values().toArray(new ListGridField[fields.size()])); - - return this.table; - } - - private MultiAttributeData findDefinition(final DataList dataList, final String paranemterName) { - - for (final Data data : dataList.getAll()) { - - final String label = data.getLabel(); - if (label.equals(paranemterName) && data instanceof MultiAttributeData) - return (MultiAttributeData) data; - } - - return null; - } - - private ListGridField createField(final String colName, final String keyColumnName, final Map values, - final IColumnClickHandler fromHandler) { - - final String translation = getMeta(values, "translation", colName); - - final ListGridField field = new ListGridField(colName, translation); - - final String width = getMeta(values, "width", "99"); - field.setWidth(width); - - final ListGridFieldType type = getMeta(values, "type", ListGridFieldType.TEXT, ListGridFieldType.class); - field.setType(type); - - final Alignment alignment = getMeta(values, "alignment", Alignment.LEFT, Alignment.class); - field.setAlign(alignment); - - final PinType pinType = getMeta(values, "pin", PinType.none, PinType.class); - switch (pinType) { - case from: { - final String baseUrl = GWT.getHostPageBaseURL(); - field.setCellIcon(baseUrl + this.MESSAGES.markerGreen()); - field.addRecordClickHandler(new RecordClickHandler() { - @Override - public void onRecordClick(final RecordClickEvent e) { - final Record r = e.getRecord(); - fromHandler.columnClicked(r.getAttribute(keyColumnName)); - } - }); - } - break; + final TableHelper helper = new TableHelper(data, "years", this.MSG, fromHandler); + final Canvas table = helper.getTable(); + this.validYears = helper.getKeycolEntries(); - case to: - break; - - case none: - default: - break; - } - - return field; - } - - private String getMeta(final Map values, final String key, final String defaultValue) { - - final String value = values.get(key); - if (value == null || value.isEmpty()) - return defaultValue; - - return value; - } - - private > TYPE getMeta(final Map values, final String key, final TYPE defaultValue, final Class enumType) { - - final String value = values.get(key); - if (value == null || value.isEmpty()) - return defaultValue; - - try { - return Enum.valueOf(enumType, value); - } - catch (final Exception e) { - e.printStackTrace(); - return defaultValue; - } - } - - private Map columns; - private List columnNames; - private List valueNames; - private Map> attributes; - private Map> selected; - - public void addColumn(final MultiAttributeData options) { - GWT.log("Add Columns for MultiAttribute data"); + this.helperContainer.addMember(table); - this.columns = new HashMap(); - this.columnNames = new ArrayList(); - this.valueNames = new ArrayList(); - this.selected = new HashMap>(); - this.attributes = new HashMap>(); - - final String groupTitle = options.getLabel(); - - final Column col = new Column(groupTitle); - final DataItem[] items = options.getItems(); - - if (items == null) { - GWT.log("No items found in StringOptionsData '" + groupTitle + "'"); - return; - } + final Canvas submit = getNextButton(); + final Canvas widget = createWidget(data); - final MultiDataItem mItem = (MultiDataItem) items[0]; - for (final Map.Entry entry : mItem.getValue().entrySet()) { - if (entry.getKey().equals("art:value") || entry.getKey().equals("art:label")) { - continue; - } - this.attributes.put(entry.getKey(), new ArrayList()); - } - for (final DataItem item : items) { - GWT.log("multidataitem: " + item.getLabel()); - final String title = item.getLabel(); + layout.addMember(widget); + layout.addMember(submit); - if (this.valueNames.indexOf(title) < 0) { - this.valueNames.add(title); - } - final MultiDataItem mi = (MultiDataItem) item; - final Map vs = mi.getValue(); - for (final Map.Entry e : vs.entrySet()) { - if (e.getKey().equals("art:value") || e.getKey().equals("art:label")) { - continue; - } - final List data = this.attributes.get(e.getKey()); - data.add(e.getValue()); - } - col.addValue(item.getLabel(), mi.getValue().get("art:value")); - } - - this.columnNames.add(groupTitle); - this.columns.put(groupTitle, col); + return layout; } public Canvas createWidget(final DataList data) {