view flys-client/src/main/java/de/intevation/flys/client/client/ui/WQAdaptedInputPanel.java @ 247:4a684d29404f

Implemented the createOld() of WQAdaptedInputPanel. flys-client/trunk@1832 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Ingo Weinzierl <ingo.weinzierl@intevation.de>
date Thu, 05 May 2011 09:33:15 +0000
parents ccba1a0b743e
children e4f0bef52689
line wrap: on
line source
package de.intevation.flys.client.client.ui;

import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import com.google.gwt.core.client.GWT;

import com.smartgwt.client.types.TitleOrientation;
import com.smartgwt.client.types.VerticalAlignment;
import com.smartgwt.client.widgets.Canvas;
import com.smartgwt.client.widgets.Label;
import com.smartgwt.client.widgets.form.fields.events.BlurHandler;
import com.smartgwt.client.widgets.form.fields.events.BlurEvent;
import com.smartgwt.client.widgets.form.fields.events.ChangeHandler;
import com.smartgwt.client.widgets.form.fields.events.ChangeEvent;
import com.smartgwt.client.widgets.layout.HLayout;
import com.smartgwt.client.widgets.layout.VLayout;

import de.intevation.flys.client.shared.model.Data;
import de.intevation.flys.client.shared.model.DataItem;
import de.intevation.flys.client.shared.model.DataList;
import de.intevation.flys.client.shared.model.DefaultData;
import de.intevation.flys.client.shared.model.DefaultDataItem;

import de.intevation.flys.client.client.FLYSConstants;


/**
 * This UIProvider creates a widget to enter W or Q data for discharge
 * longitudinal section computations.
 *
 * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a>
 */
public class WQAdaptedInputPanel
extends      AbstractUIProvider
implements   ChangeHandler, BlurHandler
{
    public static final String FIELD_WQ_MODE = "wq_mode";

    public static final String GAUGE_SEPARATOR = ":";

    public static final String GAUGE_PART_SEPARATOR = ";";

    public static final String VALUE_SEPARATOR = ",";


    /** The message class that provides i18n strings.*/
    protected FLYSConstants MSG = GWT.create(FLYSConstants.class);

    /** Stores the input panels related to their keys.*/
    protected Map<String, DoubleArrayPanel> wqranges;



    public WQAdaptedInputPanel() {
        wqranges = new HashMap<String, DoubleArrayPanel>();
    }


    public Canvas create(DataList data) {
        Canvas submit = getNextButton();
        Canvas widget = createWidget(data);
        Label  label  = new Label(MSG.wqadaptedTitle());

        label.setHeight(25);

        VLayout layout = new VLayout();
        layout.setMembersMargin(10);

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

        return layout;
    }


    public Canvas createOld(DataList dataList) {
        List<Data> all = dataList.getAll();
        Data    wqData = getData(all, "wq_values");
        Data    wqMode = getData(all, "wq_mode");

        Canvas back = getBackButton(dataList.getState());

        HLayout valLayout  = new HLayout();
        HLayout modeLayout = new HLayout();
        VLayout vlayout    = new VLayout();

        Label wqLabel   = new Label(dataList.getLabel());
        Label modeLabel = new Label("");

        wqLabel.setValign(VerticalAlignment.TOP);

        wqLabel.setWidth(200);
        wqLabel.setHeight(25);
        modeLabel.setHeight(25);
        modeLabel.setWidth(200);

        valLayout.addMember(wqLabel);
        valLayout.addMember(createOldWQValues(wqData));
        valLayout.addMember(back);
        modeLayout.addMember(modeLabel);

        vlayout.addMember(valLayout);
        vlayout.addMember(modeLayout);

        return vlayout;
    }


    protected Canvas createOldWQValues(Data wqData) {
        VLayout layout = new VLayout();

        DataItem item  = wqData.getItems()[0];
        String   value = item.getStringValue();

        String[] gauges = value.split(GAUGE_SEPARATOR);

        for (String gauge: gauges) {
            HLayout h = new HLayout();

            String[] parts  = gauge.split(GAUGE_PART_SEPARATOR);
            String[] values = parts[2].split(VALUE_SEPARATOR);

            Label l = new Label(parts[0] + " - " + parts[1] + ": ");

            StringBuilder sb = new StringBuilder();
            boolean    first = true;

            for (String v: values) {
                if (!first) {
                    sb.append(", ");
                }

                sb.append(v);

                first = false;
            }

            Label v = new Label(sb.toString());

            l.setWidth(65);
            v.setWidth(65);

            h.addMember(l);
            h.addMember(v);

            layout.addMember(h);
        }

        return layout;
    }


    protected Canvas createWidget(DataList dataList) {
        VLayout layout = new VLayout();

        List<Data> data = dataList.getAll();

        for (Data d: data) {
            String name = d.getLabel();

            if (name.equals(FIELD_WQ_MODE)) {
                continue;
            }

            DataItem[] items = d.getItems();

            for (DataItem item: items) {
                String title = item.getLabel();

                DoubleArrayPanel dap = new DoubleArrayPanel(
                    createLineTitle(title), null, this, TitleOrientation.LEFT);

                wqranges.put(title, dap);

                layout.addMember(dap);
            }
        }

        return layout;
    }


    public String createLineTitle(String key) {
        String[] splitted = key.split(";");

        return splitted[0] + " - " + splitted[1];
    }


    public Data[] getData() {
        Data mode   = getWQMode();
        Data values = getWQValues();

        return new Data[] { mode, values };
    }


    protected Data getWQMode() {
        // TODO Search for the correct value!
        DataItem item = new DefaultDataItem("wq_mode", "wq_mode", "q");
        Data mode = new DefaultData(
            "wq_mode", null, null, new DataItem[] { item });

        return mode;
    }


    protected Data getWQValues() {
        String wqvalue = null;

        Iterator<String> iter = wqranges.keySet().iterator();
        while (iter.hasNext()) {
            String           key = iter.next();
            DoubleArrayPanel dap = wqranges.get(key);

            double[] values = dap.getInputValues();
            if (wqvalue == null) {
                wqvalue = createValueString(key, values);
            }
            else {
                wqvalue += GAUGE_SEPARATOR + createValueString(key, values);
            }
        }

        DataItem valueItem = new DefaultDataItem(
            "wq_values", "wq_values", wqvalue);
        Data values = new DefaultData(
            "wq_values", null, null, new DataItem[] { valueItem });

        return values;
    }


    protected String createValueString(String key, double[] values) {
        StringBuilder sb = new StringBuilder();

        boolean first = true;

        for (double value: values) {
            if (!first) {
                sb.append(",");
            }

            sb.append(Double.toString(value));

            first = false;
        }

        return key + ";" + sb.toString();
    }


    public void onChange(ChangeEvent event) {
        // TODO IMPLEMENT ME
    }


    public void onBlur(BlurEvent event) {
        DoubleArrayPanel dap = (DoubleArrayPanel) event.getForm();
        dap.validateForm(event.getItem());
    }
}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org