comparison flys-client/src/main/java/de/intevation/flys/client/client/ui/minfo/SedLoadDistancePanel.java @ 4223:015b219a97af

Added new UI provider for sediment load parameter input.
author Raimund Renkert <rrenkert@intevation.de>
date Tue, 23 Oct 2012 13:21:57 +0200
parents
children 651b93c10dc5
comparison
equal deleted inserted replaced
4222:94c76129af7d 4223:015b219a97af
1 package de.intevation.flys.client.client.ui.minfo;
2
3 import java.util.List;
4
5 import com.google.gwt.core.client.GWT;
6 import com.smartgwt.client.data.Record;
7 import com.smartgwt.client.util.SC;
8 import com.smartgwt.client.widgets.Canvas;
9 import com.smartgwt.client.widgets.Label;
10 import com.smartgwt.client.widgets.form.fields.events.BlurEvent;
11 import com.smartgwt.client.widgets.form.fields.events.BlurHandler;
12 import com.smartgwt.client.widgets.grid.events.CellClickEvent;
13 import com.smartgwt.client.widgets.grid.events.CellClickHandler;
14 import com.smartgwt.client.widgets.layout.HLayout;
15 import com.smartgwt.client.widgets.layout.VLayout;
16
17 import de.intevation.flys.client.client.Config;
18 import de.intevation.flys.client.client.event.FilterHandler;
19 import de.intevation.flys.client.client.event.RangeFilterEvent;
20 import de.intevation.flys.client.client.event.StringFilterEvent;
21 import de.intevation.flys.client.client.ui.AbstractUIProvider;
22 import de.intevation.flys.client.client.ui.DoubleRangeOnlyPanel;
23 import de.intevation.flys.client.client.ui.DoubleRangePanel;
24 import de.intevation.flys.client.client.ui.LocationPicker;
25 import de.intevation.flys.client.client.ui.range.DistanceInfoDataSource;
26 import de.intevation.flys.client.shared.model.ArtifactDescription;
27 import de.intevation.flys.client.shared.model.Data;
28 import de.intevation.flys.client.shared.model.DataItem;
29 import de.intevation.flys.client.shared.model.DataList;
30 import de.intevation.flys.client.shared.model.DefaultData;
31 import de.intevation.flys.client.shared.model.DefaultDataItem;
32
33
34 public class SedLoadDistancePanel
35 extends AbstractUIProvider
36 implements BlurHandler, CellClickHandler
37 {
38 public static final String FIELD_LOWER = "ld_from";
39 public static final String FIELD_UPPER = "ld_to";
40
41 protected DoubleRangePanel distancePanel;
42 protected double min;
43 protected double max;
44 protected LocationPicker picker;
45
46 @Override
47 public Canvas createOld(DataList dataList) {
48 String s = getOldSelectionString(dataList);
49 String l = dataList.getLabel();
50
51 Label label = new Label(l);
52 Label selected = new Label(s);
53
54 HLayout layout = new HLayout();
55
56 layout.setWidth(400);
57 label.setWidth(200);
58 selected.setWidth(130);
59
60 layout.addMember(label);
61 layout.addMember(selected);
62 layout.addMember(getBackButton(dataList.getState()));
63
64 return layout;
65 }
66
67 protected String getOldSelectionString(DataList dataList) {
68 List<Data> items = dataList.getAll();
69
70 Data dFrom = getData(items, FIELD_LOWER);
71 Data dTo = getData(items, FIELD_UPPER);
72
73 DataItem[] from = dFrom.getItems();
74 DataItem[] to = dTo.getItems();
75
76 StringBuilder sb = new StringBuilder();
77 sb.append(from[0].getLabel());
78 sb.append(" " + MSG.dpUnitFrom() + " - ");
79 sb.append(to[0].getLabel());
80 sb.append(" " + MSG.dpUnitTo());
81
82 return sb.toString();
83 }
84
85 @Override
86 public Canvas create(DataList data) {
87 picker = new LocationPicker(this);
88 distancePanel = new DoubleRangeOnlyPanel(
89 MSG.dpUnitFrom() + " - ", MSG.dpUnitTo(), 0d, 0d, 250, this, "right");
90 VLayout layout = new VLayout();
91 layout.setMembersMargin(10);
92
93 Label label = new Label(MSG.distance_state());
94
95 Canvas submit = getNextButton();
96
97 label.setHeight(25);
98 distancePanel.setHeight(50);
99
100 layout.addMember(label);
101 layout.addMember(distancePanel);
102 layout.addMember(submit);
103
104 initMinMaxValues(data);
105 initDefaultValues(data);
106
107
108 picker.setIsDistance(true);
109 picker.getLocationTable().setAutoFetchData(true);
110 picker.prepareFilter();
111
112 helperContainer.addMember(picker.getLocationTable());
113 helperContainer.addMember(picker.getFilterLayout());
114 helperContainer.addMember(picker.getResultCountForm());
115
116 setPickerDataSource();
117 picker.createLocationTable();
118
119 return layout;
120 }
121
122 protected void initMinMaxValues(DataList data) {
123 Data f = getData(data.getAll(), FIELD_LOWER);
124 Data t = getData(data.getAll(), FIELD_UPPER);
125
126 DataItem[] fItems = f.getItems();
127 DataItem[] tItems = t.getItems();
128
129 try {
130 min = Double.valueOf(fItems[0].getStringValue());
131 max = Double.valueOf(tItems[0].getStringValue());
132 }
133 catch (NumberFormatException nfe) {
134 min = -Double.MAX_VALUE;
135 max = Double.MAX_VALUE;
136 }
137 }
138
139 protected void initDefaultValues(DataList data) {
140 initDefaultFrom(data);
141 initDefaultTo(data);
142 }
143
144 protected void initDefaultFrom(DataList data) {
145 Data f = getData(data.getAll(), FIELD_LOWER);
146
147 double from = getDefaultFrom();
148
149 try {
150 from = getDefaultValue(f);
151 }
152 catch (NumberFormatException nfe) {
153 // do nothing
154 }
155
156 distancePanel.setFrom(from);
157 }
158
159
160 protected double getDefaultFrom() {
161 return min;
162 }
163
164
165 protected void initDefaultTo(DataList data) {
166 Data t = getData(data.getAll(), FIELD_UPPER);
167
168 double to = getDefaultTo();
169
170 try {
171 to = getDefaultValue(t);
172 }
173 catch (NumberFormatException nfe) {
174 // do nothing
175 }
176
177 distancePanel.setTo(to);
178 }
179
180
181 protected double getDefaultTo() {
182 return max;
183 }
184
185 protected double getDefaultValue(Data data)
186 throws NumberFormatException
187 {
188 DataItem def = data.getDefault();
189 String defValue = def != null ? def.getStringValue() : null;
190
191 return Double.valueOf(defValue);
192 }
193
194 /** Hook service to the listgrid with possible input values. */
195 protected void setPickerDataSource() {
196 Config config = Config.getInstance();
197 String url = config.getServerUrl();
198 String river = "";
199
200 ArtifactDescription adescr = artifact.getArtifactDescription();
201 DataList[] data = adescr.getOldData();
202
203 // Try to find a "river" data item to set the source for the
204 // list grid.
205 String dataFilter = "locations";
206 if (data != null && data.length > 0) {
207 for (int i = 0; i < data.length; i++) {
208 DataList dl = data[i];
209 if (dl.getState().equals("state.minfo.river")) {
210 dataFilter = "measuringpoint";
211 }
212 if (dl.getState().equals("state.winfo.river") ||
213 dl.getState().equals("state.chart.river") ||
214 dl.getState().equals("state.minfo.river")) {
215 for (int j = 0; j < dl.size(); j++) {
216 Data d = dl.get(j);
217 DataItem[] di = d.getItems();
218 if (di != null && di.length == 1) {
219 river = d.getItems()[0].getStringValue();
220 break;
221 }
222 }
223 }
224 }
225 }
226
227 picker.getLocationTable().setDataSource(new DistanceInfoDataSource(
228 url, river, dataFilter));
229 }
230
231 @Override
232 protected Data[] getData() {
233 Data[] data = new Data[2];
234
235 data[0] = getDataFrom();
236 data[1] = getDataTo();
237
238 return data;
239 }
240
241 protected Data getDataFrom() {
242 String value = String.valueOf(distancePanel.getFrom());
243 String field = FIELD_LOWER;
244
245 DataItem item = new DefaultDataItem(field, field, value);
246 return new DefaultData(
247 field, null, null, new DataItem[] { item });
248 }
249
250 protected Data getDataTo() {
251 String value = String.valueOf(distancePanel.getTo());
252 String field = FIELD_UPPER;
253
254 DataItem item = new DefaultDataItem(field, field, value);
255 return new DefaultData(
256 field, null, null, new DataItem[] { item });
257 }
258
259 @Override
260 public void onBlur(BlurEvent event) {
261 distancePanel.validateForm();
262 }
263
264 @Override
265 public void onCellClick(CellClickEvent e) {
266 Record record = e.getRecord();
267 int ndx = e.getColNum();
268 String from = record.getAttribute("from");
269 try {
270 double value = Double.valueOf(from);
271 switch (ndx) {
272 case 0: distancePanel.setFrom(value); break;
273 case 1: distancePanel.setTo(value); break;
274 }
275 }
276 catch(NumberFormatException nfe) {
277 SC.warn(MSG.wrongFormat());
278 }
279 }
280 }

http://dive4elements.wald.intevation.org