Mercurial > dive4elements > river
view gwt-client/src/main/java/org/dive4elements/river/client/client/ui/uinfo/AbstractVegZonesTablePanel.java @ 9114:31b3cae5de0d
sortable table veg'zones
author | gernotbelger |
---|---|
date | Mon, 04 Jun 2018 11:25:29 +0200 |
parents | f5b55b383ef9 |
children | 431f1c269be5 |
line wrap: on
line source
/** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde * Software engineering by * Björnsen Beratende Ingenieure GmbH * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt * * This file is Free Software under the GNU AGPL (>=v3) * and comes with ABSOLUTELY NO WARRANTY! Check out the * documentation coming with Dive4Elements River for details. */ package org.dive4elements.river.client.client.ui.uinfo; import java.util.ArrayList; import java.util.List; import org.dive4elements.river.client.client.ui.AbstractUIProvider; import org.dive4elements.river.client.client.ui.PanelHelper; 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 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.Label; import com.smartgwt.client.widgets.form.validator.IntegerRangeValidator; import com.smartgwt.client.widgets.grid.ListGrid; import com.smartgwt.client.widgets.grid.ListGridField; import com.smartgwt.client.widgets.grid.ListGridRecord; import com.smartgwt.client.widgets.grid.SortNormalizer; 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.Layout; import com.smartgwt.client.widgets.layout.VLayout; /** * @author Domenico Nardi Tironi * */ public abstract class AbstractVegZonesTablePanel extends AbstractUIProvider { private static final long serialVersionUID = 1L; private static final String TABLE_CELL_SEPARATOR = "TABLE_CELL_SEPARATOR"; private static final String TABLE_ROW_SEPARATOR = "TABLE_ROW_SEPARATOR"; private static final String datakey = "vegzones"; private final ListGrid elements = new ListGrid(); // private final HLayout input = new HLayout(); protected final ListGrid createTable(final Layout root, final DataList data, final int width, final boolean editable) { data.add(VegetationzonesTablePanel.getDummyData()); // TODO: GET REAL DATA! final Label title = new Label(data.get(0).getDescription()); title.setHeight("35px"); // orig:25 this.elements.setWidth(width); // 185 this.elements.setHeight(300); // this.elements.setShowHeaderContextMenu(false); this.elements.setCanReorderFields(false); // this.elements.setCanSort(true); this.elements.setCanEdit(editable); final ListGridField vegzoneField = new ListGridField("vegzone", this.MSG.uinfo_vegetation_zones_label()); vegzoneField.setType(ListGridFieldType.TEXT); vegzoneField.setWidth(245); final SortNormalizer normalizer = new SortNormalizer() { @Override public Object normalize(final ListGridRecord record, final String fieldName) { final String number = record.getAttribute(fieldName); // String.format("%03d", number);// format.format(Integer.valueOf(number)); funktioniert hier leider nicht final String numberFormat = "000" + number; return numberFormat.substring(numberFormat.length() - 3); } }; final IntegerRangeValidator validator = new IntegerRangeValidator(); validator.setMin(0); validator.setMax(365); validator.setErrorMessage(this.MSG.uinfo_vegetation_zones_validation_range()); final ListGridField fromField = new ListGridField("from", this.MSG.uinfo_vegetation_zones_from()); fromField.setType(ListGridFieldType.INTEGER); fromField.setCanSort(true); fromField.setSortNormalizer(normalizer); fromField.setValidators(validator); fromField.setWidth(80); fromField.setAlign(Alignment.RIGHT); final ListGridField toField = new ListGridField("to", this.MSG.uinfo_vegetation_zones_to()); toField.setType(ListGridFieldType.INTEGER); toField.setValidators(validator); toField.setWidth(80); toField.setAlign(Alignment.RIGHT); toField.setSortNormalizer(normalizer); if (editable) { final ListGridField removeField = createRemoveField(); this.elements.setFields(vegzoneField, fromField, toField, removeField); } else { this.elements.setFields(vegzoneField, fromField, toField); } addDataInit(data); root.addMember(title); root.addMember(this.elements); root.addMember(PanelHelper.getSpacer(10)); return this.elements; } private ListGridField createRemoveField() { final ListGridField removeField = new ListGridField("_removeRecord", "Remove Record") { { setType(ListGridFieldType.ICON); setIcon(GWT.getHostPageBaseURL() + AbstractVegZonesTablePanel.this.MSG.removeFeature()); setCanEdit(false); setCanFilter(false); setCanSort(false); setCanGroupBy(false); setCanFreeze(false); setWidth(25); } }; this.elements.addRecordClickHandler(new RecordClickHandler() { @Override public void onRecordClick(final RecordClickEvent event) { // Just handle remove-clicks if (!event.getField().getName().equals(removeField.getName())) { return; } event.getViewer().removeData(event.getRecord()); } }); return removeField; } public abstract void createWidget(final Layout root, final DataList data); private final void addDataInit(final DataList data) { for (final Data dataItemContainer : data.getAll()) { if (dataItemContainer.getItems() != null) { for (final DataItem dataItem : dataItemContainer.getItems()) { if (dataItem.getStringValue() != null && dataItem.getStringValue().contains(TABLE_ROW_SEPARATOR)) { final String[] rows = dataItem.getStringValue().split(TABLE_ROW_SEPARATOR); for (final String row : rows) { this.elements.addData(createEntry(row)); } } } } } } @Override public final Canvas create(final DataList data) { final VLayout layout = new VLayout(); // final Canvas helper = createHelper(); // this.helperContainer.addMember(helper); final Canvas submit = getNextButton(); final VLayout root = new VLayout(); createWidget(root, data); layout.addMember(root); layout.addMember(submit); return layout; } @Override public Canvas createOld(final DataList dataList) { final HLayout layout = new HLayout(); layout.setWidth("400px"); final VLayout vLayout = new VLayout(); vLayout.setWidth(130); final Label label = new Label(dataList.getLabel()); label.setWidth("200px"); label.setHeight(25); final List<Data> items = dataList.getAll(); final Data str = getData(items, datakey); final DataItem[] strItems = str.getItems(); final String[] entries = strItems[0].getLabel().split(AbstractVegZonesTablePanel.TABLE_ROW_SEPARATOR); for (final String entry : entries) { final String[] vals = entry.split(AbstractVegZonesTablePanel.TABLE_CELL_SEPARATOR); final Label dateLabel = new Label(vals[0] + " (" + vals[1] + "-" + vals[2] + ")"); dateLabel.setHeight(20); vLayout.addMember(dateLabel); } final Canvas back = getBackButton(dataList.getState()); layout.addMember(label); layout.addMember(vLayout); layout.addMember(back); return layout; } protected static final Data[] getDummyData() { final List<Data> data = new ArrayList<Data>(); // TODO: move to messages final String d = "Zonaler Wald" + TABLE_CELL_SEPARATOR + "0" + TABLE_CELL_SEPARATOR + "5" + TABLE_ROW_SEPARATOR// + "Hartholzaue, trocken" + TABLE_CELL_SEPARATOR + "5" + TABLE_CELL_SEPARATOR + "40" + TABLE_ROW_SEPARATOR// + "Hartholzaue, feucht" + TABLE_CELL_SEPARATOR + "40" + TABLE_CELL_SEPARATOR + "80" + TABLE_ROW_SEPARATOR// + "Silberweidenwald" + TABLE_CELL_SEPARATOR + "80" + TABLE_CELL_SEPARATOR + "140" + TABLE_ROW_SEPARATOR// + "Weidengebüsch" + TABLE_CELL_SEPARATOR + "140" + TABLE_CELL_SEPARATOR + "200" + TABLE_ROW_SEPARATOR// + "Uferröhricht" + TABLE_CELL_SEPARATOR + "200" + TABLE_CELL_SEPARATOR + "260" + TABLE_ROW_SEPARATOR// + "Uferpioniere" + TABLE_CELL_SEPARATOR + "260" + TABLE_CELL_SEPARATOR + "320" + TABLE_ROW_SEPARATOR// + "Vegetationslos" + TABLE_CELL_SEPARATOR + "320" + TABLE_CELL_SEPARATOR + "365" + TABLE_ROW_SEPARATOR// + "Wasserfläche" + TABLE_CELL_SEPARATOR + "365" + TABLE_CELL_SEPARATOR + "365" + TABLE_ROW_SEPARATOR;// final DataItem item = new DefaultDataItem(datakey, "entryDescription", d); // DATA-key data.add(new DefaultData(datakey, null, null, new DataItem[] { item })); return data.toArray(new Data[data.size()]); } @Override protected final Data[] getData() { final List<Data> data = new ArrayList<Data>(); final ListGridRecord[] lgr = this.elements.getRecords(); if (lgr.length == 0) { return getDummyData();// new Data[0]; // return getDummyData(); } String d = ""; for (final ListGridRecord element : lgr) { final Record r = element; d += r.getAttribute("vegzone") + AbstractVegZonesTablePanel.TABLE_CELL_SEPARATOR + r.getAttribute("from") + AbstractVegZonesTablePanel.TABLE_CELL_SEPARATOR + r.getAttribute("to"); d += AbstractVegZonesTablePanel.TABLE_ROW_SEPARATOR; } final DataItem item = new DefaultDataItem(datakey, null, d); // DATA-key data.add(new DefaultData(datakey, null, null, new DataItem[] { item })); return data.toArray(new Data[data.size()]); } public final ListGridRecord createEntry(final String row) { if (row.contains(TABLE_CELL_SEPARATOR)) { final String[] vals = row.split(TABLE_CELL_SEPARATOR); if (vals.length == 3) { final String vegzone = vals[0]; final String from = vals[1]; final String to = vals[2]; if (vegzone == null || from == null || to == null) { return null; } final ListGridRecord r = new ListGridRecord(); r.setAttribute("vegzone", vegzone); r.setAttribute("from", from); r.setAttribute("to", to); return r; } } return null; } }