view flys-client/src/main/java/de/intevation/flys/client/client/ui/GaugeTimeRangePanel.java @ 3847:f3b821735e39

Calculate the info url via i18n Don't fetch the info url from the artifact service and use i18n to calculate the url by using the official gauge and river number. flys-client/trunk@5582 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Bjoern Ricks <bjoern.ricks@intevation.de>
date Mon, 24 Sep 2012 08:39:22 +0000
parents 8d27d2d33d70
children 0cc2c3d89a9d
line wrap: on
line source
package de.intevation.flys.client.client.ui;

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

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

import com.smartgwt.client.types.ListGridFieldType;

import com.smartgwt.client.data.Record;
import com.smartgwt.client.widgets.layout.HLayout;
import com.smartgwt.client.widgets.form.DynamicForm;
import com.smartgwt.client.widgets.form.fields.DateRangeItem;
import com.smartgwt.client.widgets.Label;

import com.smartgwt.client.widgets.layout.VLayout;
import com.smartgwt.client.widgets.Canvas;
import com.smartgwt.client.widgets.grid.ListGrid;
import com.smartgwt.client.widgets.grid.ListGridField;
import com.smartgwt.client.widgets.grid.CellFormatter;
import com.smartgwt.client.widgets.grid.ListGridRecord;
import com.smartgwt.client.widgets.grid.events.RecordClickHandler;
import com.smartgwt.client.widgets.grid.events.RecordClickEvent;

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

import de.intevation.flys.client.shared.model.DataList;
import de.intevation.flys.client.shared.model.DataItem;
import de.intevation.flys.client.shared.model.ArtifactDescription;
import de.intevation.flys.client.shared.model.Data;
import de.intevation.flys.client.shared.model.RangeData;
import de.intevation.flys.client.shared.model.LongRangeData;

import de.intevation.flys.client.client.ui.range.DischargeInfoDataSource;

/**
 * @author <a href="mailto:raimund.renkert@intevation.de">Raimund Renkert</a>
 */
public class GaugeTimeRangePanel extends RangePanel {

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

    protected ListGrid yearTable;

    protected DateRangeItem dateRange;

    public GaugeTimeRangePanel() {
        GWT.log("Creating YearInputPanel");
        yearTable = new ListGrid();
        yearTable.setAutoFetchData(true);
        yearTable.setShowHeaderContextMenu(false);

    }

    public Canvas create(DataList data) {
        setDataName(data);

        VLayout root = new VLayout();

        root.addMember(createLabel(data));
        root.addMember(createForm(data));
        root.addMember(getNextButton());

        initDefaults(data);


        initYearTable();

        long gauge = getGaugeNumber();

        Config config = Config.getInstance();
        String url = config.getServerUrl();
        yearTable.setDataSource(new DischargeInfoDataSource(url, gauge));

        helperContainer.addMember(yearTable);
        return root;
    }


    @Override
    protected void initDefaults(DataList dataList) {
        RangeData data = findRangeData(dataList);

        if(data != null) {
            GWT.log("data: " + data);
        }
    }


    @Override
    public Canvas createOld(DataList dataList) {
        GWT.log("create old date.");
        Data       data  = dataList.get(0);
        DataItem[] items = data.getItems();
GWT.log(data.getClass().toString());
        HLayout layout = new HLayout();

        Label label = new Label(dataList.getLabel());
        label.setWidth(200);
        label.setHeight(20);

        Date dl = new Date((Long)((LongRangeData)data).getLower());
        Date du = new Date((Long)((LongRangeData)data).getUpper());
        DateTimeFormat dtf = DateTimeFormat.getMediumDateFormat();
        Label value = new Label(dtf.format(dl) + " - " + dtf.format(du));
        value.setHeight(20);

        layout.addMember(label);
        layout.addMember(value);
        layout.addMember(getBackButton(dataList.getState()));

        return layout;
    }


    @Override
    protected Data[] getData() {
        long lo = getLowerAsLong();
        long up = getUpperAsLong();

        return new Data[] { new LongRangeData(getDataName(), null, lo, up) };
    }


    @Override
    protected Canvas createForm(DataList dataList) {
        HLayout layout = new HLayout();
        DynamicForm form = new DynamicForm();
        dateRange = new DateRangeItem();
        dateRange.setToTitle(MESSAGES.to());
        dateRange.setFromTitle(MESSAGES.from());
        dateRange.setShowTitle(false);
        form.setFields(dateRange);

        layout.addMember(form);
        return layout;

    }


    @Override
    public Object getMaxLower() {
        Date d = dateRange.getFromDate();
        return new Long(d.getTime());
    }


    protected long getLowerAsLong() {
        Date d = dateRange.getFromDate();
        return d.getTime();
    }


    protected long getUpperAsLong() {
        Date d = dateRange.getToDate();
        return d.getTime();
    }


    @Override
    public Object getMaxUpper() {
        Date d = dateRange.getToDate();
        return new Long(d.getTime());
    }


    @Override
    public void setLower(String lower) {
        try {
            DateTimeFormat dtf =
                DateTimeFormat.getFormat("yyyy");
            Date dy = dtf.parse(lower);
            dy.setMonth(0);
            dy.setDate(1);
            dateRange.setFromDate(dy);
        }
        catch(IllegalArgumentException iae) {
            GWT.log("could not parse lower date.");
            //TODO: Messagebox with error.
        }
    }


    @Override
    public void setUpper(String upper) {
        try {
            DateTimeFormat dtf =
                DateTimeFormat.getFormat("yyyy");
            Date dy = dtf.parse(upper);
            dy.setMonth(0);
            dy.setDate(1);
            dateRange.setToDate(dy);
        }
        catch(IllegalArgumentException iae) {
            GWT.log("could not parse upper date.");
            //TODO: Messagebox with error.
        }
    }


    protected ListGrid initYearTable() {
        String baseUrl = GWT.getHostPageBaseURL();

        yearTable.setWidth100();
        yearTable.setHeight100();
        yearTable.setShowRecordComponents(true);
        yearTable.setShowRecordComponentsByCell(true);
        yearTable.setEmptyMessage(MESSAGES.empty_filter());
        yearTable.setCanReorderFields(false);

        CellFormatter cf = new CellFormatter() {
            public String format(
                Object value,
                ListGridRecord record,
                int rowNum, int colNum) {
                    if (value == null) return null;
                    if (value.toString().equals("-1")) {
                        return "";
                    }
                    return value.toString();
            }
        };


        ListGridField addstart = new ListGridField ("", "");
        addstart.setType (ListGridFieldType.ICON);
        addstart.setWidth (20);
        addstart.setCellIcon(baseUrl + MESSAGES.markerGreen());
        addstart.addRecordClickHandler(new RecordClickHandler() {
            public void onRecordClick(RecordClickEvent e) {
                Record r = e.getRecord();
                if (r.getAttribute("start").equals("-1")) {
                    return;
                }
                else {
                    setLower(r.getAttribute("start"));
                }
            }
        });

        ListGridField addend = new ListGridField ("", "");
        addend.setType (ListGridFieldType.ICON);
        addend.setWidth (20);
        addend.setCellIcon(baseUrl + MESSAGES.markerRed());
        addend.addRecordClickHandler(new RecordClickHandler() {
            public void onRecordClick(RecordClickEvent e) {
                Record r = e.getRecord();
                if (r.getAttribute("end").equals("-1")) {
                    return;
                }
                else {
                    setUpper(r.getAttribute("end"));
                }
            }
        });

        ListGridField desc =
            new ListGridField("description", MESSAGES.description());
        desc.setType(ListGridFieldType.TEXT);
        desc.setWidth("*");

        ListGridField start =
            new ListGridField("start", MESSAGES.start_year());
        start.setType(ListGridFieldType.INTEGER);
        start.setWidth(50);
        start.setCellFormatter(cf);

        ListGridField end =
            new ListGridField("end", MESSAGES.end_year());
        end.setType(ListGridFieldType.INTEGER);
        end.setWidth(50);
        end.setCellFormatter(cf);

        yearTable.setFields(addstart, addend, desc, start, end);

        return yearTable;
    }


    protected long getGaugeNumber() {
        ArtifactDescription adescr = artifact.getArtifactDescription();
        DataList[] data = adescr.getOldData();

        String gauge = "";
        if (data != null && data.length > 0) {
            for (int i = 0; i < data.length; i++) {
                DataList dl = data[i];
                if (dl.getState().equals("state.winfo.historicalq.reference_gauge")) {
                    for (int j = 0; j < dl.size(); j++) {
                        Data d = dl.get(j);
                        DataItem[] di = d.getItems();
                        if (di != null && di.length == 1) {
                           gauge = d.getItems()[0].getStringValue();
                        }
                    }
                }
            }
        }
        try {
            return Long.parseLong(gauge);
        }
        catch (NumberFormatException nfe) {
            GWT.log("Error parsing gauge.");
            return 0;
        }
    }


    @Override
    public List<String> validate() {
        List<String> errors = new ArrayList<String>();
        if (dateRange.getFromDate() == null ||
            dateRange.getToDate() == null ||
            !dateRange.getFromDate().before(dateRange.getToDate()))
        {
            String msg = MSG.error_validate_date_range();
            errors.add(msg);
        }
        return errors;
    }
}

http://dive4elements.wald.intevation.org