view gwt-client/src/main/java/org/dive4elements/river/client/client/ui/fixation/FixGaugeSelectPanel.java @ 9256:6c24c857ccf9

fixation refactoring and inputItem behaviour to interfaces
author gernotbelger
date Fri, 13 Jul 2018 12:04:21 +0200
parents 716709cd5ba3
children c7e5285d434f
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.fixation;

import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;

import org.dive4elements.river.client.client.FLYSConstants;
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.FixingsOverviewInfo;

import com.google.gwt.core.client.GWT;
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.SelectItem;
import com.smartgwt.client.widgets.form.fields.StaticTextItem;
import com.smartgwt.client.widgets.layout.HLayout;
import com.smartgwt.client.widgets.layout.VLayout;

/**
 * This UIProvider creates a panel to select discharge classes / sectors
 * (german Abflussklassen).
 *
 * @author <a href="mailto:raimund.renkert@intevation.de">Raimund Renkert</a>
 */
public class FixGaugeSelectPanel extends FixationPanel {
    /** The message class that provides i18n strings. */
    protected FLYSConstants MESSAGES = GWT.create(FLYSConstants.class);

    protected String first;
    protected String second;

    protected SelectItem from;
    protected SelectItem to;

    protected LinkedHashMap<String, String> mapValues;

    public FixGaugeSelectPanel() {
        this.mapValues = new LinkedHashMap<String, String>();
        this.mapValues.put("0", this.MESSAGES.gauge_mnq());
        this.mapValues.put("1", this.MESSAGES.gauge_mq());
        this.mapValues.put("2", this.MESSAGES.gauge_mhq());
        this.mapValues.put("3", this.MESSAGES.gauge_hq5());
    }

    @Override
    public Canvas createWidget(final DataList data) {
        instances.put(this.artifact.getUuid(), this);

        final VLayout layout = new VLayout();

        final Label title = new Label(this.MESSAGES.gauge_class());
        title.setHeight(25);

        this.from = new SelectItem(this.MESSAGES.from());
        this.to = new SelectItem(this.MESSAGES.to());

        this.from.setShowTitle(false);
        this.to.setShowTitle(false);
        this.from.setValueMap(this.mapValues);
        this.from.setDefaultValues("0");
        this.from.setWidth(160);
        this.to.setValueMap(this.mapValues);
        this.to.setDefaultValues("3");
        this.to.setWidth(160);

        final DynamicForm form = new DynamicForm();
        final StaticTextItem separator = new StaticTextItem("separator");
        separator.setShowTitle(false);
        separator.setValue(this.MESSAGES.to());
        form.setNumCols(5);
        form.setFields(this.from, separator, this.to);

        layout.addMember(title);
        layout.addMember(form);

        return layout;
    }

    @Override
    public Canvas createOld(final DataList dataList) {
        final List<Data> items = dataList.getAll();

        final Data f = getData(items, "q1");
        final Data t = getData(items, "q2");
        final DataItem[] fItems = f.getItems();
        final DataItem[] tItems = t.getItems();

        final StringBuilder sb = new StringBuilder();
        sb.append(this.mapValues.get(fItems[0].getLabel()));
        sb.append(" " + this.MESSAGES.to() + " ");
        sb.append(this.mapValues.get(tItems[0].getLabel()));

        final Label old = new Label(sb.toString());
        old.setWidth(130);

        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;
    }

    /**
     * This method returns the selected data.
     *
     * @return the selected/inserted data.
     */
    @Override
    public Data[] getData() {
        final List<Data> data = new ArrayList<Data>();

        final boolean valid = saveClassValues();
        if (valid) {
            final DataItem firstItem = new DefaultDataItem("q1", "q1", this.first);
            final DataItem secItem = new DefaultDataItem("q2", "q2", this.second);
            data.add(new DefaultData("q1", null, null, new DataItem[] { firstItem }));
            data.add(new DefaultData("q2", null, null, new DataItem[] { secItem }));
        }
        return data.toArray(new Data[data.size()]);
    }

    @Override
    public void setValues(final String cid, final boolean checked) {
        // No user interaction, do nothing.
    }

    @Override
    public boolean renderCheckboxes() {
        // No selection, return false.
        return false;
    }

    @Override
    public void success(final FixingsOverviewInfo fixInfo) {
    }

    protected boolean saveClassValues() {
        final String v1 = this.from.getValueAsString();
        final String v2 = this.to.getValueAsString();
        try {
            final int v1i = Integer.parseInt(v1);
            final int v2i = Integer.parseInt(v2);
            if (v1i <= v2i) {
                this.first = v1;
                this.second = v2;
                return true;
            }
        }
        catch (final NumberFormatException nfe) {
            return false;
        }
        return false;
    }
}

http://dive4elements.wald.intevation.org