view gwt-client/src/main/java/org/dive4elements/river/client/client/ui/bundu/CustomFixationChoiceRadioPanel.java @ 9369:1a4d2ce77423

radio choice fix
author gernotbelger
date Thu, 02 Aug 2018 17:39:13 +0200
parents 3d006afee054
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.bundu;

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

import org.dive4elements.river.client.client.ui.RadioPanel;
import org.dive4elements.river.client.client.ui.fixation.FixEventSelect;
import org.dive4elements.river.client.client.ui.fixation.FixGaugeSelectPanel;
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.IntDataItem;
import org.dive4elements.river.client.shared.model.IntegerArrayData;

import com.google.gwt.i18n.client.DateTimeFormat;
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.VLayout;

public class CustomFixationChoiceRadioPanel extends RadioPanel {

    private static final long serialVersionUID = 3357071563224461043L;

    private String events[];
    private int bezugsjahr = 0;

    public CustomFixationChoiceRadioPanel() {
        super("fix_choice");
    }

    @Override
    public Canvas createOld(final DataList dataList) { // wild überschrieben :-(
        final List<Data> list = dataList.getAll();

        final VLayout root = new VLayout();
        final HLayout layoutChoice = new HLayout();
        layoutChoice.setHeight(35);
        layoutChoice.setWidth(400);

        for (final Data item : list) {
            if (getDatakey().equals(item.getLabel())) {
                final Label labelLabel = new Label(this.MSG.bundu_bezugswst_fix_choice_title());
                final Label valueLabel = new Label(item.getItems()[0].getLabel());

                labelLabel.setWidth(200);
                valueLabel.setWidth(180);
                layoutChoice.addMember(labelLabel);
                layoutChoice.addMember(valueLabel);
                final Canvas back = getBackButton(dataList.getState());
                layoutChoice.addMember(back);
                root.addMember(layoutChoice);
            }
        }

        final Data data = getData(list, "events");
        if (data != null) {

            final VLayout dataLayout = FixEventSelect.getEventDataLayout(data);

            final HLayout layout = new HLayout();
            layout.setWidth("400px");
            final Label label = new Label(this.MSG.bundu_bezugswst_auto_event_choice());
            label.setWidth("200px");
            layout.addMember(label);
            layout.addMember(dataLayout);
            root.addMember(layout);
        }

        return root;
    }

    @Override
    public Canvas create(final DataList dataList) { // wild überschrieben :-(
        final Data data = dataList.get(0);
        final DataItem[] items = data.getItems();
        for (final DataItem item : items) {
            if (item.getLabel().equals("ignore_events_temp")) {
                if (!item.getStringValue().equals(""))
                    this.events = (item.getStringValue().split(";"));

            } else if (item.getLabel().equals("ignore_singleyear")) {
                this.bezugsjahr = Integer.valueOf(item.getStringValue());
            }
        }
        return super.create(dataList);
    }

    @Override
    protected Data[] getData() {
        final String value = this.form.getValueAsString("selection");
        final List<Data> data = new ArrayList<Data>();

        // Default-values for data. they have to be reset, if user switches from auto to manual
        IntegerArrayData iad = new IntegerArrayData("events", "events", new IntDataItem[] {});
        DataItem firstItem = new DefaultDataItem(null, null, "");
        DataItem secItem = new DefaultDataItem(null, null, "");
        DataItem startItem = new DefaultDataItem(null, null, "");
        DataItem endItem = new DefaultDataItem(null, null, "");

        final DataItem item = new DefaultDataItem(getDatakey(), getDatakey(), value);
        data.add(new DefaultData(getDatakey(), null, null, new DataItem[] { item }));

        if (value.equals("state.bundu.wst.fix.auto")) {
            // set gauges: (do not appear in create old, but need to be set for calculation purpose
            final LinkedHashMap<String, String> map = FixGaugeSelectPanel.getMapValues(this.MSG);
            final String mnq = this.MSG.gauge_mnq();
            final String hq5 = this.MSG.gauge_hq5();
            String firstKey = "-1";
            String secondKey = "-1";
            // irgendwie hässlich, aber sicher (man kann die Map ändern und kriegt hier den richtigen Index)
            final Iterator<String> iterator = map.keySet().iterator();
            while (iterator.hasNext()) {
                final String key = iterator.next();
                final String mapValue = map.get(key);
                if (mnq.equals(mapValue)) {
                    firstKey = key;
                }
                if (hq5.equals(mapValue)) {
                    secondKey = key;
                }
            }
            firstItem = new DefaultDataItem("q1", "q1", firstKey);
            secItem = new DefaultDataItem("q2", "q2", secondKey);

            // make start, end
            final DateTimeFormat df = DateTimeFormat.getFormat("dd.MM.yyyy");
            /// EVENT SELECTION... have to appear in selectOld somehow...
            startItem = new DefaultDataItem("start", "start", String.valueOf(df.parse("01.01." + (this.bezugsjahr - 5)).getTime()));
            endItem = new DefaultDataItem("end", "end", String.valueOf(df.parse("31.12." + (this.bezugsjahr + 5)).getTime()));

            /// MAKE EVENTS (muss glaube ich zum schluss erst erscheinen...
            if (this.events != null) {
                final IntDataItem[] arr = new IntDataItem[this.events.length];
                for (int i = 0; i < this.events.length; i++) {
                    try {
                        final String s = this.events[i];
                        final Integer v = new Integer(s);
                        arr[i] = new IntDataItem("id", "id", v.intValue());
                    }
                    catch (final NumberFormatException nfe) {
                        continue;
                    }
                }
                iad = new IntegerArrayData("events", "events", arr); // overrides "real" events with events_temp from previous state...
            }
        }

        data.add(iad);

        data.add(new DefaultData("q1", null, null, new DataItem[] { firstItem }));
        data.add(new DefaultData("q2", null, null, new DataItem[] { secItem }));
        data.add(new DefaultData("start", null, null, new DataItem[] { startItem }));
        data.add(new DefaultData("end", null, null, new DataItem[] { endItem }));

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

    }

}

http://dive4elements.wald.intevation.org