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

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

import org.dive4elements.river.client.client.FLYSConstants;
import org.dive4elements.river.client.client.ui.DoubleRangePanel;
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.fields.FormItem;
import com.smartgwt.client.widgets.form.fields.events.BlurEvent;
import com.smartgwt.client.widgets.form.fields.events.BlurHandler;
import com.smartgwt.client.widgets.layout.HLayout;
import com.smartgwt.client.widgets.layout.VLayout;

/**
 * This UIProvider creates a panel for location or distance input.
 *
 * @author <a href="mailto:raimund.renkert@intevation.de">Raimund Renkert</a>
 */
public class FixLocationPanel extends FixationPanel implements BlurHandler {
    /** The message class that provides i18n strings. */
    protected FLYSConstants MESSAGES = GWT.create(FLYSConstants.class);

    /** The constant name of the input field to enter locations. */
    public static final String FIELD_VALUE_LOCATION = "location";

    /** The constant name of the input field to enter distance. */
    public static final String FIELD_VALUE_DISTANCE = "distance";

    DoubleRangePanel inputPanel;

    double from;
    double to;
    double step;

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

        final VLayout layout = new VLayout();

        final Canvas title = new Label(this.MESSAGES.distance());
        title.setHeight("25px");

        this.inputPanel = new DoubleRangePanel(this.MESSAGES.unitFrom(), this.MESSAGES.unitTo(), this.MESSAGES.unitWidth(), 0d, 0d, 0d, 240, this);

        layout.addMember(title);
        layout.addMember(this.inputPanel);
        return layout;
    }

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

        final Data f = getData(items, "ld_from");
        final Data t = getData(items, "ld_to");
        final Data s = getData(items, "ld_step");
        final DataItem[] fItems = f.getItems();
        final DataItem[] tItems = t.getItems();
        final DataItem[] sItems = s.getItems();

        final StringBuilder sb = new StringBuilder();
        sb.append(fItems[0].getLabel());
        sb.append(" " + this.MESSAGES.unitFrom() + " ");
        sb.append(tItems[0].getLabel());
        sb.append(" " + this.MESSAGES.unitTo() + " ");
        sb.append(sItems[0].getLabel());
        sb.append(" " + this.MESSAGES.unitWidth());

        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 = saveRangeValues(this.inputPanel);
        if (valid) {
            final String f = Double.valueOf(this.from).toString();
            final String t = Double.valueOf(this.to).toString();
            final String s = Double.valueOf(this.step).toString();
            final DataItem fi = new DefaultDataItem("ld_from", "ld_from", f);
            final DataItem ti = new DefaultDataItem("ld_to", "ld_to", t);
            final DataItem si = new DefaultDataItem("ld_step", "ld_step", s);
            data.add(new DefaultData("ld_from", null, null, new DataItem[] { fi }));
            data.add(new DefaultData("ld_to", null, null, new DataItem[] { ti }));
            data.add(new DefaultData("ld_step", null, null, new DataItem[] { si }));
        }
        // what else?
        return data.toArray(new Data[data.size()]);
    }

    protected boolean saveRangeValues(final DoubleRangePanel p) {
        final FormItem[] items = p.getFields();
        final boolean valid = p.validateForm();

        if (valid) {
            this.from = p.getFrom();
            this.to = p.getTo();
            this.step = p.getStep();
        }
        return valid;
    }

    @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) {
        // TODO: check if revert makes sense
        this.inputPanel.setValues(fixInfo.getLowerKm(), fixInfo.getUpperKm(), 100d);
    }

    /**
     * This method is used to validate the inserted data in the form fields.
     *
     * @param event
     *            The BlurEvent that gives information about the FormItem that
     *            has been modified and its value.
     */
    @Override
    public void onBlur(final BlurEvent event) {
        final FormItem item = event.getItem();
        final String field = item.getFieldName();

        if (field == null) {
            return;
        }
        final DoubleRangePanel p = (DoubleRangePanel) event.getForm();
    }

    // public void dumpGWT(final String cid) {
    // GWT.log("Setting values for cId: " + cid);
    // GWT.log("River: " + this.fixInfo.getRiver());
    // GWT.log("Date: " + this.fixInfo.getEventByCId(cid).getDate());
    // GWT.log("Name: " + this.fixInfo.getEventByCId(cid).getDescription());
    // }
}

http://dive4elements.wald.intevation.org