Mercurial > dive4elements > river
view gwt-client/src/main/java/org/dive4elements/river/client/client/ui/uinfo/AbstractVegZonesTablePanel.java @ 9241:cbe393451ab0
minor bugfixes
author | gernotbelger |
---|---|
date | Tue, 10 Jul 2018 18:53:04 +0200 |
parents | af73fdd96920 |
children | b570b6fcc052 |
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 org.dive4elements.river.client.shared.model.VegetationZone; 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 datakey = "vegzones"; private final ListGrid elements = new ListGrid(); protected final ListGrid createTable(final Layout root, final DataList data, final String width, final boolean editable) { final Label title = new Label(data.get(0).getDescription()); title.setHeight("35px"); this.elements.setWidth(width); this.elements.setHeight(300); this.elements.setShowHeaderContextMenu(false); this.elements.setCanReorderFields(false); this.elements.setCanSort(true); this.elements.setSortField(1); this.elements.setCanResizeFields(false); this.elements.setCanEdit(editable); final ListGridField vegzoneField = new ListGridField("vegzone", this.MSG.uinfo_vegetation_zones_label()); vegzoneField.setType(ListGridFieldType.TEXT); vegzoneField.setWidth("*"); // 245 vegzoneField.setCanSort(false); vegzoneField.setCanDragResize(true); final ListGridField fromField = createIntTableField("from", this.MSG.uinfo_vegetation_zones_from(), true); final ListGridField toField = createIntTableField("to", this.MSG.uinfo_vegetation_zones_to(), false);// nicht sortierbar nach "ÜFDauer bis" if (editable) { final ListGridField removeField = createRemoveField(); this.elements.setFields(vegzoneField, fromField, toField, removeField); } else { this.elements.setFields(vegzoneField, fromField, toField); } addDataInit(data); root.setWidth(width); root.addMember(title); root.addMember(this.elements); root.addMember(PanelHelper.getSpacer(10)); return this.elements; } private IntegerRangeValidator getValidator() { final IntegerRangeValidator validator = new IntegerRangeValidator(); validator.setMin(0); validator.setMax(365); validator.setErrorMessage(this.MSG.uinfo_vegetation_zones_validation_range()); return validator; } private SortNormalizer getNormalizer() { final SortNormalizer normalizer = new SortNormalizer() { @Override public Object normalize(final ListGridRecord record, final String fieldName) { final String number = record.getAttribute(fieldName); final String numberFormat = "000" + number; return numberFormat.substring(numberFormat.length() - 3); } }; return normalizer; } private ListGridField createIntTableField(final String key, final String msg, final boolean canSort) { final ListGridField intField = new ListGridField(key, msg); intField.setType(ListGridFieldType.INTEGER); intField.setValidators(getValidator()); intField.setWidth(90); intField.setAlign(Alignment.RIGHT); intField.setSortNormalizer(getNormalizer()); intField.setCanSort(canSort); intField.setCanDragResize(false); return intField; } 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); setCanDragResize(false); super.setCanToggle(false); } }; 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) { final List<VegetationZone> rows = VegetationZone.parse(dataItem.getStringValue()); for (final VegetationZone row : rows) { this.elements.addData(createEntry(row)); } } } } } } @Override public final Canvas create(final DataList data) { final VLayout layout = new VLayout(); // TODO: Helper zur Vegetationszonen-Auswahl // final Canvas helper = createHelper(); // this.helperContainer.addMember(helper); final Canvas submit = getNextButton(); final VLayout root = new VLayout(); root.setWidth(450); 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 List<VegetationZone> entries = VegetationZone.parse(strItems[0].getLabel()); for (final VegetationZone entry : entries) { final Label dateLabel = new Label(entry.getZoneName() + " (" + entry.getMin_day_overflow() + "-" + entry.getMax_day_overflow() + ")"); dateLabel.setHeight(20); vLayout.addMember(dateLabel); } final Canvas back = getBackButton(dataList.getState()); layout.addMember(label); layout.addMember(vLayout); layout.addMember(back); return layout; } @Override protected final Data[] getData() { final List<Data> data = new ArrayList<Data>(); final ListGridRecord[] lgr = this.elements.getRecords(); if (lgr.length == 0) { return new Data[0]; // TODO: Klären, ob Vegetationszonen-Auswahl Pflicht ist, ob es ein Fallback geben soll usw. } final List<VegetationZone> zoneList = new ArrayList<VegetationZone>(); for (final ListGridRecord element : lgr) { final Record r = element; final VegetationZone zone = VegetationZone.createFromTableEntry(r.getAttribute("vegzone"), r.getAttribute("from"), r.getAttribute("to")); zoneList.add(zone); } final DataItem item = new DefaultDataItem(datakey, null, VegetationZone.parseListToDataString(zoneList)); // DATA-key data.add(new DefaultData(datakey, null, null, new DataItem[] { item })); return data.toArray(new Data[data.size()]); } public final ListGridRecord createEntry(final VegetationZone row) { final String vegzone = row.getZoneName(); final Integer from = row.getMin_day_overflow(); final Integer to = row.getMax_day_overflow(); 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; } }