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

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

import org.dive4elements.river.client.client.FLYSConstants;
import org.dive4elements.river.client.client.services.FixingsOverviewService;
import org.dive4elements.river.client.client.services.FixingsOverviewServiceAsync;
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.FixingsOverviewInfo;
import org.dive4elements.river.client.shared.model.FixingsOverviewInfo.FixEvent;
import org.dive4elements.river.client.shared.model.IntDataItem;
import org.dive4elements.river.client.shared.model.IntegerArrayData;

import com.google.gwt.core.client.GWT;
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;

/**
 * This UIProvider lets you select events.
 *
 * @author <a href="mailto:raimund.renkert@intevation.de">Raimund Renkert</a>
 */
public class FixEventSelect extends FixationPanel {
    /** The message class that provides i18n strings. */
    private final FLYSConstants MESSAGES = GWT.create(FLYSConstants.class);

    private static final int MAX_DISPLAYED_ITEMS = 5;

    private final FixingsOverviewServiceAsync overviewService = GWT.create(FixingsOverviewService.class);

    private final List<String> events = new ArrayList<String>();

    @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.eventselect());
        title.setHeight("25px");

        layout.addMember(title);
        return layout;
    }

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

        final Data data = getData(list, "events");

        final VLayout dataLayout = new VLayout();
        dataLayout.setWidth(130);

        final DataItem[] items = data.getItems();

        if (items.length > MAX_DISPLAYED_ITEMS) {
            for (int i = 0; i < MAX_DISPLAYED_ITEMS - 2; ++i) {
                final Label l = new Label(items[i].getLabel());
                l.setHeight(25);
                dataLayout.addMember(l);
            }
            Label l = new Label("...");
            l.setHeight(25);
            dataLayout.addMember(l);
            l = new Label(items[items.length - 1].getLabel());
            l.setHeight(25);
            dataLayout.addMember(l);
        } else {
            for (final DataItem item : items) {
                final Label l = new Label(item.getLabel());
                l.setHeight(25);
                dataLayout.addMember(l);
            }
        }

        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(dataLayout);
        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>();

        if (this.events.size() > 0) {
            final IntDataItem[] arr = new IntDataItem[this.events.size()];
            for (int i = 0, E = this.events.size(); i < E; i++) {
                try {
                    final Integer v = new Integer(this.events.get(i));
                    arr[i] = new IntDataItem("id", "id", v.intValue());
                }
                catch (final NumberFormatException nfe) {
                    return data.toArray(new Data[data.size()]);
                }
            }

            final IntegerArrayData iad = new IntegerArrayData("events", "events", arr);

            data.add(iad);
        }

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

    @Override
    public void setValues(final String cid, final boolean checked) {
        if (checked) {
            this.events.add(cid);
        } else {
            if (this.events.contains(cid)) {
                this.events.remove(cid);
            }
        }
    }

    @Override
    public boolean renderCheckboxes() {
        return true;
    }

    @Override
    public void success(final FixingsOverviewInfo fixInfo) {
        for (final FixEvent fe : fixInfo.getEvents()) {
            this.events.add(fe.getCId());
        }
    }

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

http://dive4elements.wald.intevation.org