Mercurial > dive4elements > river
view gwt-client/src/main/java/org/dive4elements/river/client/client/ui/ParameterMatrixPanel.java @ 9698:812a6a3eaaf5
another try
author | dnt_bjoernsen <d.tironi@bjoernsen.de> |
---|---|
date | Wed, 20 Jan 2021 17:19:59 +0100 |
parents | 2da486c7c05f |
children |
line wrap: on
line source
/* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde * Software engineering by Intevation GmbH * * 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; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Set; import org.dive4elements.river.client.client.FLYSConstants; import org.dive4elements.river.client.client.ui.ParameterMatrix.Column.SelectionMode; 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.IntegerOptionsData; import org.dive4elements.river.client.shared.model.MultiAttributeData; import org.dive4elements.river.client.shared.model.StringOptionsData; import com.google.gwt.core.client.GWT; import com.smartgwt.client.widgets.Canvas; import com.smartgwt.client.widgets.Label; import com.smartgwt.client.widgets.layout.HLayout; import com.smartgwt.client.widgets.layout.LayoutSpacer; import com.smartgwt.client.widgets.layout.VLayout; /** * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a> */ public class ParameterMatrixPanel extends AbstractUIProvider { private static final long serialVersionUID = -5827445025768340371L; /** The message class that provides i18n strings. */ protected FLYSConstants MESSAGES = GWT.create(FLYSConstants.class); private ParameterMatrix matrix; private final String itemnameColTitle; private final SelectionMode mode; public ParameterMatrixPanel(final String itemNameColTitle, final SelectionMode mode) { this.itemnameColTitle = itemNameColTitle; this.mode = mode; } @Override protected Data[] getData() { final Map<String, List<String>> selection = this.matrix.getSelection(); final Set<Map.Entry<String, List<String>>> entries = selection.entrySet(); final Data[] list = new Data[this.matrix.getColumnNames().size()]; int i = 0; for (final Map.Entry<String, List<String>> entry : entries) { final String value = buildValueString(entry.getValue()); final DataItem item = new DefaultDataItem(entry.getKey(), null, value); list[i++] = new DefaultData(entry.getKey(), null, null, new DataItem[] { item }); } // To delete old values already given, construct empty ones // for all not-specified options. for (final String colName : this.matrix.getColumnNames()) { boolean found = false; for (final Data data : list) { if (data != null && data.getLabel().equals(colName)) { found = true; break; } } if (!found) { // Add an empty data for this. list[i++] = new DefaultData(colName, null, null, new DataItem[] {}); } } return list; } protected String buildValueString(final List<String> values) { final StringBuilder sb = new StringBuilder(); boolean first = true; for (final String value : values) { if (!first) { sb.append(";"); } sb.append(value); first = false; } return sb.toString(); } /** Canvas to show in non-edit mode. */ @Override public Canvas createOld(final DataList dataList) { final HLayout layout = new HLayout(); final VLayout vLayout = new VLayout(); layout.setWidth(300); vLayout.setWidth(280); for (int i = 0, n = dataList.size(); i < n; i++) { final HLayout row = new HLayout(); final VLayout cols = new VLayout(); row.setWidth(300); cols.setWidth(100); final Data data = dataList.get(i); final DataItem[] items = data.getItems(); final Label parameter = new Label(data.getDescription()); parameter.setWidth(200); for (final DataItem item : items) { final Label value = new Label(item.getLabel()); value.setValign(com.smartgwt.client.types.VerticalAlignment.TOP); value.setWidth(130); value.setHeight(15); cols.addMember(value); final LayoutSpacer spacer = new LayoutSpacer(); spacer.setHeight(5); cols.addMember(spacer); } row.addMember(parameter); row.addMember(cols); vLayout.addMember(row); } final Canvas back = getBackButton(dataList.getState()); layout.addMember(vLayout); layout.addMember(back); return layout; } /** Create the main canvas in the "editing" mode. */ @Override public Canvas create(final DataList dataList) { final VLayout v = new VLayout(); v.addMember(createTitle(dataList)); this.matrix = new ParameterMatrix(this.itemnameColTitle, this.mode); for (final Data data : dataList.getAll()) { if (data instanceof IntegerOptionsData) { this.matrix.addColumn((IntegerOptionsData) data); } else if (data instanceof StringOptionsData) { this.matrix.addColumn((StringOptionsData) data); } else if (data instanceof MultiAttributeData) { this.matrix.addColumn((MultiAttributeData) data); } } // If too many items are shown, show it in the helper Panel. // TODO its not about the datalist, but about the "rows" in the data. if (dataList.getAll().size() > 5) { v.addMember(this.matrix.create(false)); } else { this.helperContainer.addMember(this.matrix.create(true)); } v.addMember(getNextButton()); return v; } /** Reaturns a label with description of first Data. */ protected Canvas createTitle(final DataList dataList) { final Data data = dataList.get(0); final Label label = new Label(data.getDescription()); label.setHeight(35); return label; } /** Selection shall not be empty. */ @Override public List<String> validate() { GWT.log("validation. validation. validation. "); final List<String> errors = new ArrayList<String>(); // Early stop on one (only) error. boolean ok = false; for (final Map.Entry<String, List<String>> entry : this.matrix.getSelection().entrySet()) { /* * single entries are allowed!! * if (entry.getValue() == null || entry.getValue().size() == 0) { * errors.add(MESSAGES.error_values_needed()); * return errors; * } */ if (entry.getValue() != null && entry.getValue().size() > 0) { ok = true; } } if (!ok) { errors.add(this.MESSAGES.error_values_needed()); } return errors; } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :