view gwt-client/src/main/java/org/dive4elements/river/client/client/ui/AbstractSingleItemPanel.java @ 9416:05405292a7ca

Navigationtheme panel now shows themes of dWt and WQ charts grayed out, if the current station is outside the valid range of the theme.
author gernotbelger
date Thu, 16 Aug 2018 16:28:03 +0200
parents 7337034eb5d5
children 787fc085459b
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;

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.fields.TextItem;
import com.smartgwt.client.widgets.layout.HLayout;
import com.smartgwt.client.widgets.layout.VLayout;

/**
 * @author Domenico Nardi Tironi
 *
 */
public abstract class AbstractSingleItemPanel extends AbstractUIProvider {

    private static final long serialVersionUID = 1L;

    public interface IMultiSingleBehaviour {
        void appendValue(final TextItem inputItem, final String value);

        List<String> validate(List<String> errors, String sValue);

        void setValidInputs(List<String> validInputs);

        void setErrorForItemMsg(String errorForItemMsg);

        // void setMSG(FLYSConstants msg);
    }

    private TextItem inputItem;

    protected List<String> validInputs = new ArrayList<String>();

    private final IMultiSingleBehaviour behaviour;

    protected abstract String getDatakey();

    protected abstract Canvas createWidget(final DataList data);

    public AbstractSingleItemPanel(final IMultiSingleBehaviour behaviour) {
        this.behaviour = behaviour;
    }

    @Override
    public final 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.behaviour.setValidInputs(this.validInputs);
        this.behaviour.setErrorForItemMsg(this.errorForItemMsg());// , this.MSG);

        this.helperContainer.addMember(table);

        final Canvas submit = getNextButton();
        final Canvas widget = createWidget(data);

        layout.addMember(widget);
        layout.addMember(submit);

        return layout;
    }

    @Override
    public final 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
    protected final Data[] getData() {
        final List<String> errors = this.validate(); // do not allow advance state
        if (errors.size() > 0) {
            showErrors(errors);
        }
        if (this.inputItem != null && !this.inputItem.getValueAsString().isEmpty()) {
            final List<Data> data = new ArrayList<Data>();

            final DataItem yearsdata = new DefaultDataItem(getDatakey(), getDatakey(), StringArrayParseHelper.trimRawString(this.inputItem.getValueAsString()));
            data.add(new DefaultData(getDatakey(), null, null, new DataItem[] { yearsdata }));

            return data.toArray(new Data[data.size()]);
        }
        return new Data[0];
    }

    protected final TextItem createInputItem(final String title) {
        this.inputItem = PanelHelper.createItem(title);// new TextItem(title);
        return this.inputItem;
    }

    protected abstract String errorForItemMsg();

    protected final void appendValue(final String value) {
        this.behaviour.appendValue(this.inputItem, value);
    }

    @Override
    public final List<String> validate() {
        final List<String> errors = new ArrayList<String>();
        errors.addAll(ValidationHelper.checkForEmpty(this.inputItem, this.MSG));
        final String sValue = this.inputItem.getValueAsString();
        return this.behaviour.validate(errors, sValue);
    }
}

http://dive4elements.wald.intevation.org