Mercurial > dive4elements > river
diff gwt-client/src/main/java/org/dive4elements/river/client/client/ui/AbstractSingleItemPanel.java @ 9078:fc02833dbcc1
SingleInputItem abstract
author | gernotbelger |
---|---|
date | Tue, 22 May 2018 17:44:05 +0200 |
parents | |
children | aafae1ab25f0 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/AbstractSingleItemPanel.java Tue May 22 17:44:05 2018 +0200 @@ -0,0 +1,185 @@ +/** 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; + +import java.util.ArrayList; +import java.util.List; + +import org.dive4elements.river.client.client.ui.FromToTableHelperPanel.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 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.layout.HLayout; +import com.smartgwt.client.widgets.layout.VLayout; + +/** + * @author Domenico Nardi Tironi + * + */ +public abstract class AbstractSingleItemPanel extends AbstractUIProvider { + + protected static final String FORM_ID = "FORM_ID"; + + protected TextItem inputItem; + + protected List<String> validInputs = new ArrayList<String>(); + + protected ListGrid table; + + protected abstract String getDatakey(); + + protected abstract void appendValue(final String value); + + protected abstract boolean getTitleVisible(); + + protected abstract String errorForItemMsg(); + + @Override + public Canvas create(final DataList data) { + final VLayout layout = new VLayout(); + final IColumnClickHandler fromHandler = new IColumnClickHandler() { // add to external class + + @Override + public void columnClicked(final String value) { + appendValue(value); + } + }; + + final FromToTableHelperPanel helper = new FromToTableHelperPanel(data, getDatakey(), this.MSG, fromHandler, null); + final Canvas table = helper.getTable(); + this.validInputs = helper.getKeycolEntries(); + + this.helperContainer.addMember(table); + + final Canvas submit = getNextButton(); + final Canvas widget = createWidget(data); + + layout.addMember(widget); + layout.addMember(submit); + + return layout; + } + + public Canvas createWidget(final DataList data) { + final VLayout layout = new VLayout(); + + final Label title = new Label(data.get(0).getDescription()); + title.setHeight("25px"); + + final DynamicForm form = new DynamicForm(); + form.setID(FORM_ID); + form.setNumCols(4); + this.inputItem = new TextItem(this.MSG.years()); + this.inputItem.setShowTitle(getTitleVisible()); + this.inputItem.setValidators(new IsIntegerValidator()); // TODO: validator to be overriden... + form.setFields(this.inputItem); + + layout.addMember(title); + layout.addMember(form); + + return layout; + } + + @Override + public Canvas createOld(final DataList dataList) { + final List<Data> items = dataList.getAll(); + final Data years = getData(items, getDatakey()); + final DataItem[] yearsItems = years.getItems(); + + final String v1 = yearsItems[0].getStringValue().replace(" ", ", "); + + final Label old = new Label(v1); + final HLayout layout = new HLayout(); + layout.setWidth("400px"); + + final Label label = new Label(dataList.getLabel()); + label.setWidth("200px"); + + final Canvas back = getBackButton(dataList.getState()); + + layout.addMember(label); + layout.addMember(old); + layout.addMember(back); + + return layout; + } + + @Override + public List<String> validate() { + final List<String> errors = new ArrayList<String>(); + + if (this.inputItem.getValueAsString() == null || this.inputItem.getValueAsString().trim().isEmpty()) { + errors.add(this.MSG.empty_filter()); + return errors; + } + final String sValue = this.inputItem.getValueAsString(); + String filtered = ""; + int goodValues = 0; + + int value = 0; + try { + value = Integer.parseInt(sValue); + } + catch (final NumberFormatException e) { + errors.add(this.MSG.wrongFormat() + ": " + sValue); + + } + boolean isGood = false; + for (final String validYear : this.validInputs) { + /* No list contains for strings? */ + if (sValue.equals(validYear)) { + isGood = true; + break; + } + } + if (!isGood) { + String tmp = errorForItemMsg(); + tmp = tmp.replace("$1", sValue); + errors.add(tmp); + // continue; + } + goodValues++; + if (goodValues > 1) { + filtered += " " + Integer.toString(value); + } else { + filtered = Integer.toString(value); + } + + return errors; + } + + @Override + protected Data[] getData() { + final List<String> errors = this.validate(); + if (errors.size() > 0) { + showErrors(errors); // TODO: do not allow advance state + // return null; + } + if (this.inputItem != null && !this.inputItem.getValueAsString().isEmpty()) { + final List<Data> data = new ArrayList<Data>(); + + final DataItem yearsdata = new DefaultDataItem(getDatakey(), getDatakey(), this.inputItem.getValueAsString().trim()); + data.add(new DefaultData(getDatakey(), null, null, new DataItem[] { yearsdata })); + + return data.toArray(new Data[data.size()]); + } + return new Data[0]; + } + +}