annotate gwt-client/src/main/java/org/dive4elements/river/client/client/ui/AbstractEpochPanel.java @ 9079:aafae1ab25f0

epoch-panels, single-input-panels
author gernotbelger
date Wed, 23 May 2018 17:30:24 +0200
parents
children c3994657c15d
rev   line source
9079
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
1 /** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
2 * Software engineering by
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
3 * Björnsen Beratende Ingenieure GmbH
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
4 * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
5 *
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
6 * This file is Free Software under the GNU AGPL (>=v3)
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
7 * and comes with ABSOLUTELY NO WARRANTY! Check out the
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
8 * documentation coming with Dive4Elements River for details.
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
9 */
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
10 package org.dive4elements.river.client.client.ui;
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
11
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
12 import java.util.ArrayList;
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
13 import java.util.List;
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
14 import java.util.TreeSet;
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
15
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
16 import org.dive4elements.river.client.client.ui.FromToTableHelperPanel.IColumnClickHandler;
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
17 import org.dive4elements.river.client.shared.model.Data;
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
18 import org.dive4elements.river.client.shared.model.DataItem;
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
19 import org.dive4elements.river.client.shared.model.DataList;
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
20 import org.dive4elements.river.client.shared.model.DefaultData;
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
21 import org.dive4elements.river.client.shared.model.DefaultDataItem;
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
22
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
23 import com.smartgwt.client.widgets.Canvas;
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
24 import com.smartgwt.client.widgets.Label;
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
25 import com.smartgwt.client.widgets.form.fields.TextItem;
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
26 import com.smartgwt.client.widgets.grid.ListGrid;
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
27 import com.smartgwt.client.widgets.grid.ListGridRecord;
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
28 import com.smartgwt.client.widgets.layout.HLayout;
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
29 import com.smartgwt.client.widgets.layout.VLayout;
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
30
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
31 /**
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
32 * @author Domenico Nardi Tironi
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
33 *
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
34 */
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
35 public abstract class AbstractEpochPanel extends AbstractUIProvider {
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
36
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
37 private static final long serialVersionUID = 1L;
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
38
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
39 protected enum Type {
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
40 singleMinMax, multi
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
41 // Type singleMinMax: nur eine Epoche kann gesetzt werden; minMax vorbelegt aus Datenquelle
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
42 // Type multi: mehrere epochs können eingegeben werden
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
43 }
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
44
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
45 private TextItem start;
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
46
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
47 private TextItem end;
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
48
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
49 private ListGrid elements;
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
50
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
51 private List<String> validInputs = new ArrayList<String>();
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
52
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
53 private final Type type;
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
54
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
55 public AbstractEpochPanel(final Type type) {
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
56 this.type = type;
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
57 }
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
58
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
59 protected abstract String getDatakey();
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
60
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
61 protected abstract Canvas createWidget(final DataList data);
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
62
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
63 private final void postCreate() {
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
64 switch (this.type) {
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
65 case singleMinMax:
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
66 final TreeSet<String> minMax = new TreeSet<String>(this.validInputs);
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
67 if (minMax.size() > 1) {
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
68 this.start.setValue(minMax.first());
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
69 this.end.setValue(minMax.last());
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
70 } else {
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
71 // TODO: THIS STATE IS INVALID; RETURN - es gibt keinen Mechanismus, der das verhindert; müsste
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
72 // im State davor passieren)
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
73 }
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
74 break;
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
75 case multi:
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
76 break; // do nothing
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
77 default:
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
78 throw new IllegalStateException();
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
79 }
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
80 }
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
81
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
82 protected final TextItem createStartInputItem(final String title) {
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
83 this.start = PanelHelper.createItem(title);
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
84 return this.start;
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
85 }
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
86
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
87 protected final TextItem createEndInputItem(final String title) {
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
88 this.end = PanelHelper.createItem(title);
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
89 return this.end;
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
90 }
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
91
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
92 protected final ListGrid createListGrid() {
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
93 this.elements = new ListGrid();
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
94 this.elements.setShowHeaderContextMenu(false);
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
95 this.elements.setCanReorderFields(false);
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
96 this.elements.setCanSort(false);
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
97 this.elements.setCanEdit(false);
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
98 return this.elements;
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
99 }
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
100
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
101 @Override
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
102 public final Canvas createOld(final DataList dataList) {
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
103 final HLayout layout = new HLayout();
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
104 layout.setWidth("400px");
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
105 final VLayout vLayout = new VLayout();
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
106 vLayout.setWidth(130);
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
107 final Label label = new Label(dataList.getLabel());
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
108 label.setWidth("200px");
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
109 label.setHeight(25);
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
110
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
111 final List<Data> items = dataList.getAll();
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
112 final Data str = getData(items, getDatakey());
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
113 final DataItem[] strItems = str.getItems();
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
114
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
115 final String[] pairs = strItems[0].getLabel().split(";");
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
116 for (final String pair : pairs) {
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
117 final Label dateLabel = new Label(pair.replace(",", " - "));
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
118 dateLabel.setHeight(20);
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
119 vLayout.addMember(dateLabel);
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
120 }
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
121 final Canvas back = getBackButton(dataList.getState());
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
122 layout.addMember(label);
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
123 layout.addMember(vLayout);
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
124 layout.addMember(back);
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
125
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
126 return layout;
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
127 }
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
128
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
129 @Override
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
130 public final Canvas create(final DataList data) {
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
131 final VLayout layout = new VLayout();
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
132 final Canvas submit = getNextButton();
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
133 final Canvas widget = createWidget(data);
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
134
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
135 layout.addMember(widget);
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
136 layout.addMember(submit);
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
137
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
138 final IColumnClickHandler fromHandler = createHandler(this.start);
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
139 final IColumnClickHandler toHandler = createHandler(this.end);
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
140
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
141 final FromToTableHelperPanel helper = new FromToTableHelperPanel(data, getDatakey(), this.MSG, fromHandler, toHandler);
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
142 this.validInputs = helper.getKeycolEntries();
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
143 final Canvas table = helper.getTable();
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
144
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
145 this.helperContainer.addMember(table);
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
146
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
147 postCreate();
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
148 return layout;
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
149 }
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
150
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
151 private final IColumnClickHandler createHandler(final TextItem field) {
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
152 final IColumnClickHandler handler = new IColumnClickHandler() {
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
153
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
154 @Override
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
155 public void columnClicked(final String value) {
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
156 field.setValue(value);
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
157 }
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
158 };
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
159 return handler;
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
160 }
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
161
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
162 /*
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
163 * Validate the epoch input. We do this here and not in an overridden
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
164 * validate method as we want to validate before an epoch is added
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
165 * to the list of epochs.
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
166 */
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
167 protected final boolean isValidEpoch(final String y1, final String y2) {
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
168 // First check that both are integer
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
169 // int iY1;
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
170 // int iY2;
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
171 final List<String> errors = new ArrayList<String>();
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
172 try {
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
173 // iY1 =
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
174 Integer.parseInt(y1);
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
175 }
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
176 catch (final NumberFormatException e) {
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
177 errors.add(this.MSG.wrongFormat() + ": " + y1);
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
178 }
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
179 try {
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
180 // iY2 =
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
181 Integer.parseInt(y2);
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
182 }
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
183 catch (final NumberFormatException e) {
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
184 errors.add(this.MSG.wrongFormat() + ": " + y2);
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
185 }
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
186 if (!errors.isEmpty()) {
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
187 showErrors(errors);
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
188 return false;
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
189 }
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
190 boolean startIsGood = false;
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
191 boolean endIsGood = false;
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
192 for (final String validYear : this.validInputs) {
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
193 if (startIsGood || y1.equals(validYear)) {
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
194 startIsGood = true;
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
195 }
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
196 if (endIsGood || y2.equals(validYear)) {
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
197 endIsGood = true;
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
198 }
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
199 if (startIsGood && endIsGood) {
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
200 break;
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
201 }
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
202 /*
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
203 * alternative check if data lies in between
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
204 * int aYear = Integer.parseInt(validYear);
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
205 * if (aYear >= iY1 && aYear <= iY2) {
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
206 * isGood = true;
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
207 * break;
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
208 * }
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
209 */
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
210 }
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
211 if (!startIsGood) {
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
212 String tmp = this.MSG.no_data_for_year();
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
213 tmp = tmp.replace("$1", y1);
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
214 errors.add(tmp);
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
215 }
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
216 if (!endIsGood) {
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
217 String tmp = this.MSG.no_data_for_year();
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
218 tmp = tmp.replace("$1", y2);
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
219 errors.add(tmp);
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
220 }
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
221 if (!errors.isEmpty()) {
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
222 showErrors(errors);
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
223 return false;
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
224 }
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
225 return true;
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
226 }
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
227
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
228 @Override
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
229 protected final Data[] getData() {
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
230 final List<Data> data = new ArrayList<Data>();
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
231 switch (this.type) {
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
232
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
233 case singleMinMax:
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
234 data.add(buildResult(this.start.getValueAsString(), this.end.getValueAsString()));
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
235
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
236 break;
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
237 case multi:
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
238 final ListGridRecord[] lgr = this.elements.getRecords();
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
239 if (lgr.length == 0) {
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
240 return new Data[0];
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
241 }
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
242 for (final ListGridRecord element : lgr) {
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
243 data.add(buildResult(element.getAttribute("from"), element.getAttribute("to")));
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
244 }
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
245 break;
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
246 default:
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
247 throw new IllegalStateException();
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
248 }
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
249 return data.toArray(new Data[data.size()]);
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
250 }
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
251
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
252 private final Data buildResult(final String startStr, final String endStr) {
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
253 final StringBuilder builder = new StringBuilder();
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
254 builder.append(startStr);
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
255 builder.append(",");
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
256 builder.append(endStr);
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
257 builder.append(";");
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
258 final DataItem item = new DefaultDataItem(getDatakey(), null, builder.toString());
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
259 return new DefaultData(getDatakey(), null, null, new DataItem[] { item });
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
260 }
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
261
aafae1ab25f0 epoch-panels, single-input-panels
gernotbelger
parents:
diff changeset
262 }

http://dive4elements.wald.intevation.org