Mercurial > dive4elements > river
view gwt-client/src/main/java/org/dive4elements/river/client/client/ui/fixation/FixPeriodPanel.java @ 9559:ba0561906f81
Uinfo inundation duration workflow (vegetation zones, scenario), wms-config changed
author | gernotbelger |
---|---|
date | Wed, 24 Oct 2018 18:40:38 +0200 |
parents | 6c24c857ccf9 |
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; } }