Mercurial > dive4elements > river
diff gwt-client/src/main/java/org/dive4elements/river/client/client/ui/fixation/BunduFixPeriodPanel.java @ 9267:c7e5285d434f
bundu bezugswst work
author | gernotbelger |
---|---|
date | Wed, 18 Jul 2018 15:34:53 +0200 |
parents | |
children | 7337034eb5d5 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/fixation/BunduFixPeriodPanel.java Wed Jul 18 15:34:53 2018 +0200 @@ -0,0 +1,200 @@ +/* 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.PanelHelper; +import org.dive4elements.river.client.client.ui.ValidationHelper; +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 org.dive4elements.river.client.shared.model.IntDataItem; +import org.dive4elements.river.client.shared.model.IntegerArrayData; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.i18n.client.DateTimeFormat; +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.TextItem; +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 BunduFixPeriodPanel extends FixationPanel { + private static final long serialVersionUID = 1L; + /** The message class that provides i18n strings. */ + protected FLYSConstants MESSAGES = GWT.create(FLYSConstants.class); + private TextItem inputItem; + + long start; + long end; + + private final ArrayList<FixEvent> events = new ArrayList<FixEvent>(); + + protected String getDatakey() { + return "singleyear"; + } + + @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(); + form.setNumCols(4); + + this.inputItem = PanelHelper.createItem("YEAR_INPUT"); + this.inputItem.setShowHint(true); + this.inputItem.setHint(this.MSG.common_input_hint_year()); + this.inputItem.setShowHintInField(true); + this.inputItem.setShowTitle(false); + form.setFields(this.inputItem); + + layout.addMember(title); + layout.addMember(form); + + return layout; + } + + @Override + public Canvas createOld(final DataList dataList) { + final List<Data> items = dataList.getAll(); + final Data years = getData(items, getDatakey()); + final DataItem[] yearsItems = years.getItems(); + + final String v1 = yearsItems[0].getStringValue().replace(" ", ", "); // multi.. single only allowed.. TODO: make createOld expecting single (general + // refactoring necessary) + + final Label old = new Label(v1); + 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<String> errors = this.validate(); + if (errors.size() > 0) { + showErrors(errors); // TODO: do not allow advance state + } + long startMillis = 0; + long endMillis = 0; + final DateTimeFormat df = DateTimeFormat.getFormat("dd.MM.yyyy"); + if (this.inputItem != null && !this.inputItem.getValueAsString().isEmpty()) { + final List<Data> data = new ArrayList<Data>(); + final String bezugsjahr = this.inputItem.getValueAsString().trim(); + final DataItem yearsdata = new DefaultDataItem(getDatakey(), getDatakey(), bezugsjahr); + data.add(new DefaultData(getDatakey(), null, null, new DataItem[] { yearsdata })); + + // start/end + + final int bezugsjahrInt = Integer.valueOf(bezugsjahr); + + startMillis = df.parse("01.01." + (bezugsjahrInt - 5)).getTime(); + // ist; radio-auswahl erfolgt aber erst im nächsten schritt + endMillis = df.parse("31.12." + (bezugsjahrInt + 5)).getTime(); + + // events: + if (this.events.size() > 0) { + // filter by start/end + final ArrayList<FixEvent> temp = new ArrayList<FixEvent>(); + + for (final FixEvent e : this.events) { + final long time = df.parse(e.getDate()).getTime(); + if (!(time >= startMillis && time <= endMillis)) { + temp.add(e); + } + } + this.events.removeAll(temp); + + 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).getCId()); + 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_temp", "events_temp", arr); + + data.add(iad); + } + + return data.toArray(new Data[data.size()]); + } + return new Data[0]; + } + + @Override + public final List<String> validate() { + final List<String> errors = new ArrayList<String>(); + errors.addAll(ValidationHelper.checkForEmpty(this.inputItem, this.MSG)); + try { + final int year = Integer.valueOf(this.inputItem.getValueAsString()); + if (year < 1000 || year > 9999) { + errors.add(this.MSG.wrongFormat() + "(" + this.MSG.common_input_hint_year() + ")"); + } + } + catch (final NumberFormatException e) { + errors.add(this.MSG.error_invalid_integer()); + } + return errors; + } + + @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) { + for (final FixEvent fe : fixInfo.getEvents()) { + this.events.add(fe); + } + } +}