gernotbelger@9078: /** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde gernotbelger@9078: * Software engineering by gernotbelger@9078: * Björnsen Beratende Ingenieure GmbH gernotbelger@9078: * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt gernotbelger@9078: * gernotbelger@9078: * This file is Free Software under the GNU AGPL (>=v3) gernotbelger@9078: * and comes with ABSOLUTELY NO WARRANTY! Check out the gernotbelger@9078: * documentation coming with Dive4Elements River for details. gernotbelger@9078: */ gernotbelger@9078: package org.dive4elements.river.client.client.ui; gernotbelger@9078: gernotbelger@9078: import java.util.ArrayList; gernotbelger@9078: import java.util.List; gernotbelger@9078: gernotbelger@9256: import org.dive4elements.river.client.client.FLYSConstants; gernotbelger@9078: import org.dive4elements.river.client.client.ui.FromToTableHelperPanel.IColumnClickHandler; gernotbelger@9078: import org.dive4elements.river.client.shared.model.Data; gernotbelger@9078: import org.dive4elements.river.client.shared.model.DataItem; gernotbelger@9078: import org.dive4elements.river.client.shared.model.DataList; gernotbelger@9078: import org.dive4elements.river.client.shared.model.DefaultData; gernotbelger@9078: import org.dive4elements.river.client.shared.model.DefaultDataItem; gernotbelger@9078: gernotbelger@9078: import com.smartgwt.client.widgets.Canvas; gernotbelger@9078: import com.smartgwt.client.widgets.Label; gernotbelger@9078: import com.smartgwt.client.widgets.form.fields.TextItem; gernotbelger@9078: import com.smartgwt.client.widgets.layout.HLayout; gernotbelger@9078: import com.smartgwt.client.widgets.layout.VLayout; gernotbelger@9078: gernotbelger@9078: /** gernotbelger@9078: * @author Domenico Nardi Tironi gernotbelger@9078: * gernotbelger@9078: */ gernotbelger@9078: public abstract class AbstractSingleItemPanel extends AbstractUIProvider { gernotbelger@9078: gernotbelger@9079: private static final long serialVersionUID = 1L; gernotbelger@9078: gernotbelger@9256: public interface IMultiSingleBehaviour { gernotbelger@9256: void appendValue(final TextItem inputItem, final String value); gernotbelger@9256: gernotbelger@9256: List validate(List errors, String sValue); gernotbelger@9256: gernotbelger@9256: void setValidInputs(List validInputs); gernotbelger@9256: gernotbelger@9256: void setErrorForItemMsg(String errorForItemMsg); gernotbelger@9256: gernotbelger@9256: void setMSG(FLYSConstants msg); gernotbelger@9079: } gernotbelger@9078: gernotbelger@9079: private TextItem inputItem; gernotbelger@9079: gernotbelger@9079: private List validInputs = new ArrayList(); gernotbelger@9078: gernotbelger@9256: private final IMultiSingleBehaviour behaviour; gernotbelger@9256: gernotbelger@9078: protected abstract String getDatakey(); gernotbelger@9078: gernotbelger@9079: protected abstract Canvas createWidget(final DataList data); gernotbelger@9078: gernotbelger@9256: public AbstractSingleItemPanel(final IMultiSingleBehaviour behaviour) { gernotbelger@9256: this.behaviour = behaviour; gernotbelger@9079: } gernotbelger@9078: gernotbelger@9078: @Override gernotbelger@9079: public final Canvas create(final DataList data) { gernotbelger@9078: final VLayout layout = new VLayout(); gernotbelger@9078: final IColumnClickHandler fromHandler = new IColumnClickHandler() { // add to external class gernotbelger@9078: gernotbelger@9078: @Override gernotbelger@9078: public void columnClicked(final String value) { gernotbelger@9078: appendValue(value); gernotbelger@9078: } gernotbelger@9078: }; gernotbelger@9078: gernotbelger@9078: final FromToTableHelperPanel helper = new FromToTableHelperPanel(data, getDatakey(), this.MSG, fromHandler, null); gernotbelger@9078: final Canvas table = helper.getTable(); gernotbelger@9078: this.validInputs = helper.getKeycolEntries(); gernotbelger@9256: this.behaviour.setValidInputs(this.validInputs); gernotbelger@9256: this.behaviour.setErrorForItemMsg(this.errorForItemMsg()); gernotbelger@9256: this.behaviour.setMSG(this.MSG); gernotbelger@9078: gernotbelger@9078: this.helperContainer.addMember(table); gernotbelger@9078: gernotbelger@9078: final Canvas submit = getNextButton(); gernotbelger@9078: final Canvas widget = createWidget(data); gernotbelger@9078: gernotbelger@9078: layout.addMember(widget); gernotbelger@9078: layout.addMember(submit); gernotbelger@9078: gernotbelger@9078: return layout; gernotbelger@9078: } gernotbelger@9078: gernotbelger@9078: @Override gernotbelger@9079: public final Canvas createOld(final DataList dataList) { gernotbelger@9078: final List items = dataList.getAll(); gernotbelger@9078: final Data years = getData(items, getDatakey()); gernotbelger@9078: final DataItem[] yearsItems = years.getItems(); gernotbelger@9078: gernotbelger@9078: final String v1 = yearsItems[0].getStringValue().replace(" ", ", "); gernotbelger@9078: gernotbelger@9078: final Label old = new Label(v1); gernotbelger@9078: final HLayout layout = new HLayout(); gernotbelger@9078: layout.setWidth("400px"); gernotbelger@9078: gernotbelger@9078: final Label label = new Label(dataList.getLabel()); gernotbelger@9078: label.setWidth("200px"); gernotbelger@9078: gernotbelger@9078: final Canvas back = getBackButton(dataList.getState()); gernotbelger@9078: gernotbelger@9078: layout.addMember(label); gernotbelger@9078: layout.addMember(old); gernotbelger@9078: layout.addMember(back); gernotbelger@9078: gernotbelger@9078: return layout; gernotbelger@9078: } gernotbelger@9078: gernotbelger@9078: @Override gernotbelger@9079: protected final Data[] getData() { gernotbelger@9079: final List errors = this.validate(); gernotbelger@9079: if (errors.size() > 0) { gernotbelger@9079: showErrors(errors); // TODO: do not allow advance state gernotbelger@9079: // return null; gernotbelger@9079: } gernotbelger@9079: if (this.inputItem != null && !this.inputItem.getValueAsString().isEmpty()) { gernotbelger@9079: final List data = new ArrayList(); gernotbelger@9079: gernotbelger@9079: final DataItem yearsdata = new DefaultDataItem(getDatakey(), getDatakey(), this.inputItem.getValueAsString().trim()); gernotbelger@9079: data.add(new DefaultData(getDatakey(), null, null, new DataItem[] { yearsdata })); gernotbelger@9079: gernotbelger@9079: return data.toArray(new Data[data.size()]); gernotbelger@9079: } gernotbelger@9079: return new Data[0]; gernotbelger@9079: } gernotbelger@9079: gernotbelger@9079: protected final TextItem createInputItem(final String title) { gernotbelger@9079: this.inputItem = PanelHelper.createItem(title);// new TextItem(title); gernotbelger@9079: return this.inputItem; gernotbelger@9079: } gernotbelger@9079: gernotbelger@9079: private final List checkForEmpty() { gernotbelger@9078: final List errors = new ArrayList(); gernotbelger@9078: gernotbelger@9078: if (this.inputItem.getValueAsString() == null || this.inputItem.getValueAsString().trim().isEmpty()) { gernotbelger@9078: errors.add(this.MSG.empty_filter()); gernotbelger@9078: return errors; gernotbelger@9078: } gernotbelger@9079: return errors; gernotbelger@9079: } gernotbelger@9078: gernotbelger@9079: protected abstract String errorForItemMsg(); gernotbelger@9079: gernotbelger@9079: protected final void appendValue(final String value) { gernotbelger@9256: this.behaviour.appendValue(this.inputItem, value); gernotbelger@9079: } gernotbelger@9079: gernotbelger@9079: @Override gernotbelger@9079: public final List validate() { gernotbelger@9079: final List errors = new ArrayList(); gernotbelger@9079: errors.addAll(this.checkForEmpty()); gernotbelger@9079: final String sValue = this.inputItem.getValueAsString(); gernotbelger@9256: return this.behaviour.validate(errors, sValue); gernotbelger@9078: } gernotbelger@9079: }