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

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

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

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

import com.google.gwt.core.client.GWT;
import com.google.gwt.i18n.client.DateTimeFormat;
import com.smartgwt.client.util.SC;
import com.smartgwt.client.widgets.Canvas;
import com.smartgwt.client.widgets.Label;
import com.smartgwt.client.widgets.form.DynamicForm;
import com.smartgwt.client.widgets.form.fields.DateRangeItem;
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 FixPeriodPanel extends FixationPanel {
    /** The message class that provides i18n strings. */
    protected FLYSConstants MESSAGES = GWT.create(FLYSConstants.class);

    DateRangeItem inputPanel;

    long start;
    long end;

    protected String startName;
    protected String endName;

    public FixPeriodPanel() {
        this("start", "end");
    }

    public FixPeriodPanel(final String startName, final String endName) {
        this.startName = startName;
        this.endName = endName;
    }

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

        final VLayout layout = new VLayout();

        final Label title = new Label(data.get(0).getDescription());
        title.setHeight("25px");

        final DynamicForm form = new DynamicForm();
        this.inputPanel = new DateRangeItem();
        this.inputPanel.setToTitle(this.MESSAGES.to());
        this.inputPanel.setFromTitle(this.MESSAGES.from());
        this.inputPanel.setShowTitle(false);
        form.setFields(this.inputPanel);

        layout.addMember(title);
        layout.addMember(form);

        return layout;
    }

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

        final Data start = getData(items, this.startName);
        final Data end = getData(items, this.endName);
        final DataItem[] startItem = start.getItems();
        final DataItem[] endItem = end.getItems();

        final String v1 = startItem[0].getStringValue();
        final String v2 = endItem[0].getStringValue();

        long v1l = 0;
        long v2l = 0;
        try {
            v1l = Long.parseLong(v1);
            v2l = Long.parseLong(v2);
        }
        catch (final NumberFormatException nfe) {
            GWT.log(nfe.toString());
        }
        final Date d1 = new Date(v1l);
        final Date d2 = new Date(v2l);

        final DateTimeFormat f = DateTimeFormat.getFormat(DateTimeFormat.PredefinedFormat.DATE_MEDIUM);
        final StringBuilder sb = new StringBuilder();
        sb.append(f.format(d1) + " - ");
        sb.append(f.format(d2));

        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 = saveDateValues();
        if (valid) {
            final String start = Long.valueOf(this.start).toString();
            final String end = Long.valueOf(this.end).toString();
            final DataItem startItem = new DefaultDataItem(this.startName, this.startName, start);
            final DataItem endItem = new DefaultDataItem(this.endName, this.endName, end);
            data.add(new DefaultData(this.startName, null, null, new DataItem[] { startItem }));
            data.add(new DefaultData(this.endName, null, null, new DataItem[] { endItem }));
        }

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

    @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) {
        final List<FixEvent> list = fixInfo.getEvents();

        // The date in FixEvent is always "de" locale, so it seems...
        final DateTimeFormat df = DateTimeFormat.getFormat("dd.MM.yyyy");

        if (!setFromAndToDate(list, df)) {
            GWT.log("FixPeriodPanel::success(): could not set " + "from and to dates!");
        }
    }

    protected boolean setFromAndToDate(final List<FixEvent> list, final DateTimeFormat df) {
        try {
            setFromDate(list.get(0).getDate(), df);
            setToDate(list.get(list.size() - 1).getDate(), df);
            return true;
        }
        catch (final IllegalArgumentException ex) {
            GWT.log("FixPeriodPanel::setFromAndToDate(): " + ex.toString());
            return false;
        }
    }

    protected void setFromDate(final String date, final DateTimeFormat df) throws IllegalArgumentException {
        final Date from = df.parse(date);
        this.inputPanel.setFromDate(from);
    }

    protected void setToDate(final String date, final DateTimeFormat df) throws IllegalArgumentException {
        final Date to = df.parse(date);
        this.inputPanel.setToDate(to);
    }

    protected boolean saveDateValues() {
        final Date st = this.inputPanel.getValue().getStartDate();
        final Date en = this.inputPanel.getValue().getEndDate();
        if (st == null || en == null) {
            SC.warn(this.MESSAGES.error_wrong_date());
            return false;
        }

        final long start = st.getTime();
        final long end = en.getTime();

        if (start <= end) {
            this.start = start;
            this.end = end;
            return true;
        }
        return false;
    }
}

http://dive4elements.wald.intevation.org