comparison flys-client/src/main/java/de/intevation/flys/client/client/ui/GaugePanel.java @ 3837:6b2ae2ec5b01

Open and close gauge tree folds that correspond to the selected WINFO calculation flys-client/trunk@5546 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Bjoern Ricks <bjoern.ricks@intevation.de>
date Fri, 21 Sep 2012 08:57:18 +0000
parents 52109c4bc5de
children 509ef6ec93af
comparison
equal deleted inserted replaced
3836:06c76de19b51 3837:6b2ae2ec5b01
23 import com.smartgwt.client.widgets.layout.VLayout; 23 import com.smartgwt.client.widgets.layout.VLayout;
24 24
25 import de.intevation.flys.client.client.FLYSConstants; 25 import de.intevation.flys.client.client.FLYSConstants;
26 import de.intevation.flys.client.client.services.GaugeOverviewInfoService; 26 import de.intevation.flys.client.client.services.GaugeOverviewInfoService;
27 import de.intevation.flys.client.client.services.GaugeOverviewInfoServiceAsync; 27 import de.intevation.flys.client.client.services.GaugeOverviewInfoServiceAsync;
28 import de.intevation.flys.client.shared.model.Data;
29 import de.intevation.flys.client.shared.model.DataItem;
30 import de.intevation.flys.client.shared.model.DataList;
28 import de.intevation.flys.client.shared.model.GaugeInfo; 31 import de.intevation.flys.client.shared.model.GaugeInfo;
29 import de.intevation.flys.client.shared.model.RiverInfo; 32 import de.intevation.flys.client.shared.model.RiverInfo;
30 33
31 /** 34 /**
32 * The GaugePanel is intendet to be used within a SectionStackSection 35 * The GaugePanel is intendet to be used within a SectionStackSection
74 this.refresh(); 77 this.refresh();
75 } 78 }
76 } 79 }
77 80
78 /** 81 /**
82 * Sets the data and closes not corresponding folds in the gauge tree
83 */
84 public void setData(DataList[] data) {
85 gaugetree.setData(data);
86 }
87
88 /**
79 * Loads the river info and renders it afterwards 89 * Loads the river info and renders it afterwards
80 */ 90 */
81 public void refresh() { 91 public void refresh() {
82 gaugeOverviewInfoService.getRiverInfo(this.river, new AsyncCallback<RiverInfo>() { 92 gaugeOverviewInfoService.getRiverInfo(this.river, new AsyncCallback<RiverInfo>() {
83 public void onFailure(Throwable e) { 93 public void onFailure(Throwable e) {
85 } 95 }
86 96
87 public void onSuccess(RiverInfo riverinfo) { 97 public void onSuccess(RiverInfo riverinfo) {
88 GWT.log("Loaded river info"); 98 GWT.log("Loaded river info");
89 renderGaugeOverviewInfo(riverinfo); 99 renderGaugeOverviewInfo(riverinfo);
90 gaugetree.openAll();
91 } 100 }
92 }); 101 });
93 } 102 }
94 103
95 public void renderGaugeOverviewInfo(RiverInfo riverinfo) { 104 public void renderGaugeOverviewInfo(RiverInfo riverinfo) {
137 } 146 }
138 147
139 class GaugeTree extends ScrollPanel { 148 class GaugeTree extends ScrollPanel {
140 149
141 private Tree tree; 150 private Tree tree;
151 private DataList[] data;
142 152
143 public GaugeTree() { 153 public GaugeTree() {
144 tree = new Tree(); 154 tree = new Tree();
145 setWidget(tree); 155 setWidget(tree);
146 } 156 }
172 182
173 // put empty gauges to the end 183 // put empty gauges to the end
174 for (GaugeInfo gauge : emptygauges) { 184 for (GaugeInfo gauge : emptygauges) {
175 addGauge(gauge); 185 addGauge(gauge);
176 } 186 }
187
188 open();
177 } 189 }
178 } 190 }
179 191
180 private void addGauge(GaugeInfo gauge, List<GaugeInfo> empty) { 192 private void addGauge(GaugeInfo gauge, List<GaugeInfo> empty) {
181 if (gauge.getKmStart() != null && gauge.getKmEnd() != null) { 193 if (gauge.getKmStart() != null && gauge.getKmEnd() != null) {
185 empty.add(gauge); 197 empty.add(gauge);
186 } 198 }
187 } 199 }
188 200
189 private void addGauge(GaugeInfo gauge) { 201 private void addGauge(GaugeInfo gauge) {
190 TreeItem gaugeitem = new GaugeInfoItem(gauge); 202 GaugeInfoItem gaugeitem = new GaugeInfoItem(gauge);
191 tree.addItem(gaugeitem); 203 tree.addItem(gaugeitem);
192 } 204 }
193 205
194 public void openAll() { 206 public void openAll() {
207 GWT.log("GaugeTree - openAll");
195 for (Iterator<TreeItem> it = tree.treeItemIterator(); it.hasNext();) { 208 for (Iterator<TreeItem> it = tree.treeItemIterator(); it.hasNext();) {
196 TreeItem item = it.next(); 209 TreeItem item = it.next();
197 item.setState(true); 210 item.setState(true);
211 }
212 }
213
214 public void setData(DataList[] data) {
215 this.data = data;
216 if (tree.getItemCount() > 0) {
217 open();
218 }
219 }
220
221 public void open() {
222 ArrayList<Double> curvelocations = new ArrayList<Double>();
223
224 if (data != null && data.length > 0) {
225 for (int i = 0; i < data.length; i++) {
226 DataList dl = data[i];
227 String state = dl.getState();
228 GWT.log("GaugeTree - setData " + state);
229 if (state.equals("state.winfo.distance") ||
230 state.equals("state.winfo.distance_only") ||
231 state.equals("state.winfo.location_distance")) {
232 Double ldfrom = null;
233 Double ldto = null;
234
235 for (int j = dl.size()-1; j >= 0; --j) {
236 Data d = dl.get(j);
237 String label = d.getLabel();
238 GWT.log("GaugeTree - setData - label " + label + " " + d.getStringValue());
239 if (label.equals("ld_from")) {
240 String strfrom = d.getStringValue();
241 if (strfrom != null) {
242 ldfrom = Double.valueOf(strfrom);
243 }
244 }
245 else if (label.equals("ld_to")) {
246 String strto = d.getStringValue();
247 if (strto != null) {
248 ldto = Double.valueOf(strto);
249 }
250 }
251 }
252
253 if (ldfrom != null) {
254 openOnDistance(ldfrom, ldto);
255 return;
256 }
257 }
258 else if (state.equals("state.winfo.location")) {
259 ArrayList<Double> locations = new ArrayList<Double>();
260 for (int j = dl.size()-1; j >= 0; --j) {
261 Data d = dl.get(j);
262 String label = d.getLabel();
263 GWT.log("GaugeTree - setData - location label " +
264 label + " " + d.getStringValue());
265 if (label.equals("ld_locations")) {
266 DataItem[] items = d.getItems();
267 for (int k = 0; k < items.length; k++) {
268 String tmp = items[k].getStringValue();
269 if (tmp != null) {
270 Double value = Double.valueOf(tmp);
271 if (value != null) {
272 locations.add(value);
273 }
274 }
275 }
276 }
277 }
278 openOnLocations(locations);
279 return;
280 }
281 else if (state.equals("state.winfo.reference.curve.input.start")) {
282 for (int j = dl.size()-1; j >= 0; --j) {
283 Data d = dl.get(j);
284 String label = d.getLabel();
285 if (label.equals("reference_startpoint")) {
286 DataItem[] items = d.getItems();
287 for (int k = 0; k < items.length; k++) {
288 String tmp = items[k].getStringValue();
289 if (tmp != null) {
290 Double value = Double.valueOf(tmp);
291 if (value != null) {
292 curvelocations.add(value);
293 }
294 }
295 }
296 }
297 }
298 }
299 else if (state.equals("state.winfo.reference.curve.input.end")) {
300 for (int j = dl.size()-1; j >= 0; --j) {
301 Data d = dl.get(j);
302 String label = d.getLabel();
303 if (label.equals("reference_endpoint")) {
304 DataItem[] items = d.getItems();
305 for (int k = 0; k < items.length; k++) {
306 String tmp = items[k].getStringValue();
307 if (tmp != null) {
308 Double value = Double.valueOf(tmp);
309 if (value != null) {
310 curvelocations.add(value);
311 }
312 }
313 }
314 }
315 }
316 }
317 }
318 }
319 if (!curvelocations.isEmpty()) {
320 openOnLocations(curvelocations);
321 }
322 else {
323 openAll();
324 }
325 }
326
327 public void openOnDistance(Double start, Double end) {
328 GWT.log("GaugeTree - openOnDistance " + start + " " + end + " " +
329 tree.getItemCount());
330
331 for (Iterator<TreeItem> it = tree.treeItemIterator(); it.hasNext();) {
332 TreeItem item = it.next();
333 /* Strange stuff is happening here:
334 * GWT Tree.treeItemIterator returns another TreeItem for each
335 * GaugeInfoItem */
336 if (item instanceof GaugeInfoItem) {
337 boolean setstate = false;
338 GaugeInfoItem gitem = (GaugeInfoItem)item;
339 if (end == null) {
340 if (gitem.getStart() >= start) {
341 setstate = true;
342 }
343 }
344 else {
345 if ((gitem.getStart() >= start && gitem.getStart() <= end) ||
346 (gitem.getEnd() >= start && gitem.getEnd() <= end)) {
347 setstate = true;
348 }
349 }
350 item.setState(setstate);
351 }
352 }
353 }
354
355 public void openOnLocations(List<Double> locations) {
356 GWT.log("GaugeTree - openOnLocations " + locations + " " +
357 tree.getItemCount());
358
359 if (locations == null || locations.isEmpty()) {
360 return;
361 }
362
363 for (Iterator<TreeItem> it = tree.treeItemIterator(); it.hasNext();) {
364 TreeItem item = it.next();
365 if (item instanceof GaugeInfoItem) {
366 GaugeInfoItem gitem = (GaugeInfoItem)item;
367 boolean isset = false;
368 for (Double location: locations) {
369 if (locations == null) {
370 continue;
371 }
372 if (location >= gitem.getStart() &&
373 location <= gitem.getEnd()) {
374 isset = true;
375 break;
376 }
377 }
378 item.setState(isset);
379 }
198 } 380 }
199 } 381 }
200 } 382 }
201 383
202 class RiverInfoPanel extends HorizontalPanel { 384 class RiverInfoPanel extends HorizontalPanel {
257 setCellHeight(label, "" + HEIGHT + "px"); 439 setCellHeight(label, "" + HEIGHT + "px");
258 } 440 }
259 } 441 }
260 442
261 class GaugeInfoItem extends TreeItem { 443 class GaugeInfoItem extends TreeItem {
444
445 private GaugeInfo gauge;
446
262 public GaugeInfoItem(GaugeInfo gauge) { 447 public GaugeInfoItem(GaugeInfo gauge) {
263 GaugeInfoHead gaugeinfohead = new GaugeInfoHead(gauge); 448 GaugeInfoHead gaugeinfohead = new GaugeInfoHead(gauge);
264 GaugeInfoPanel gaugeinfopanel = new GaugeInfoPanel(gauge); 449 GaugeInfoPanel gaugeinfopanel = new GaugeInfoPanel(gauge);
265 setWidget(gaugeinfohead); 450 setWidget(gaugeinfohead);
266 addItem(gaugeinfopanel); 451 addItem(gaugeinfopanel);
452 this.gauge = gauge;
453 }
454
455 public Double getStart() {
456 return gauge.getKmStart();
457 }
458
459 public Double getEnd() {
460 return gauge.getKmEnd();
267 } 461 }
268 } 462 }
269 463
270 class GaugeInfoHead extends HLayout { 464 class GaugeInfoHead extends HLayout {
271 465

http://dive4elements.wald.intevation.org