view flys-client/src/main/java/de/intevation/flys/client/client/ui/DoubleArrayPanel.java @ 246:ccba1a0b743e

The WQAdaptedInputPanel displays input fields for each gauge and returns the correct w/q values now. flys-client/trunk@1831 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Ingo Weinzierl <ingo.weinzierl@intevation.de>
date Thu, 05 May 2011 08:09:03 +0000
parents 234c78a91c15
children 469528551b78
line wrap: on
line source
package de.intevation.flys.client.client.ui;

import java.util.Map;

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

import com.smartgwt.client.types.TitleOrientation;
import com.smartgwt.client.widgets.form.DynamicForm;
import com.smartgwt.client.widgets.form.fields.FormItem;
import com.smartgwt.client.widgets.form.fields.StaticTextItem;
import com.smartgwt.client.widgets.form.fields.TextItem;
import com.smartgwt.client.widgets.form.fields.events.BlurHandler;

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

public class DoubleArrayPanel
extends      DynamicForm
{
    /** The message class that provides i18n strings.*/
    protected FLYSConstants MESSAGES = GWT.create(FLYSConstants.class);

    protected TextItem ti;

    /** The constant input field name.*/
    public static final String FIELD_NAME = "doublearray";


    public DoubleArrayPanel(
        String title,
        double[] values,
        BlurHandler handler)
    {
        this(title, values, handler, TitleOrientation.RIGHT);
    }


    /**
     * Creates a new form with a single input field that displays an array of
     * double values.
     *
     * @param name The name of the TextItem.
     * @param title The title of the TextItem.
     * @param values The double values that should be displayed initially.
     * @param handler The BlurHandler that is used to valide the input.
     */
    public DoubleArrayPanel(
        String title,
        double[] values,
        BlurHandler handler,
        TitleOrientation titleOrientation)
    {
        ti                 = new TextItem(FIELD_NAME);
        StaticTextItem sti = new StaticTextItem("staticarray");

        ti.setShowTitle(false);
        sti.setShowTitle(false);
        sti.setValue(title);

        ti.addBlurHandler(handler);

        if (titleOrientation == TitleOrientation.RIGHT) {
            setFields(ti, sti);
        }
        else {
            setFields(sti, ti);
        }

        setTitleOrientation(titleOrientation);
        setNumCols(2);

        if (values == null) {
            return;
        }

        NumberFormat f = NumberFormat.getDecimalFormat();

        StringBuilder text = new StringBuilder();
        boolean firstItem  = true;

        for (double val: values) {
            if (!firstItem) {
                text.append(" ");
            }

            text.append(f.format(val));

            firstItem = false;
        }

        ti.setValue(text.toString());
    }


    /**
     * This method takes the double array to set the values to the textbox.
     *
     * @param values The double values.
     */
    public void setValues(double[] values) {
        NumberFormat f = NumberFormat.getDecimalFormat();

        StringBuilder text = new StringBuilder();
        boolean firstItem  = true;
        if (values != null) {
            for (double val: values) {
                if (!firstItem) {
                    text.append(" ");
                }

                text.append(f.format(val));

                firstItem = false;
            }
        }

        ti.clearValue();
        ti.setValue(text.toString());
    }


    /**
     * This method validates the entered text in the location input field. If
     * there are values that doesn't represent a valid location, an error is
     * displayed.
     *
     * @param item The FormItem.
     */
    protected boolean validateForm(FormItem item) {
        if (item instanceof StaticTextItem) {
            return true;
        }

        boolean  valid = true;
        String   value = (String) item.getValue();

        if (value == null) {
            return valid;
        }

        String[] parts = value.split(" ");

        if (parts == null) {
            return valid;
        }

        NumberFormat f = NumberFormat.getDecimalFormat();
        Map errors     = getErrors();

        try {
            for (String part: parts) {
                double location = f.parse(part);
            }

            errors.remove(item.getFieldName());
        }
        catch (NumberFormatException nfe) {
            errors.put(item.getFieldName(), MESSAGES.wrongFormat());

            valid = false;
        }

        setErrors(errors, true);

        return valid;
    }


    /**
     * This method returns the double array that has been entered in
     * <i>item</i>.
     *
     * @param item The item that contains the desired values.
     *
     * @return the values as double array.
     */
    public double[] getInputValues(FormItem item) {
        String value = (String) item.getValue();

        if (value == null) {
            return null;
        }

        String[] parts  = value.split(" ");

        if (parts == null) {
            return null;
        }

        double[] values = new double[parts.length];

        NumberFormat f = NumberFormat.getDecimalFormat();

        int i = 0;
        for (String part: parts) {
            try {
                values[i++] = f.parse(part);
            }
            catch (NumberFormatException nfe) {
                // do nothing
            }
        }

        return values;
    }


    /**
     * Returns the double values of this panel.
     *
     * @return the double values of this panel.
     */
    public double[] getInputValues() {
        return getInputValues(ti);
    }
}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org