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);
+        }
+    }
+}

http://dive4elements.wald.intevation.org