annotate gwt-client/src/main/java/org/dive4elements/river/client/client/ui/DatacageWidget.java @ 9227:84397da33d17

Allow to control specific behaviour in TwinDatacagePanel Implemented client logic of 'intelligent datacage filtering' for SINFO
author gernotbelger
date Wed, 04 Jul 2018 18:28:08 +0200
parents e3c2ae1887e8
children
rev   line source
5861
172338b1407f GWT client: Added copyright header.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
1 /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde
172338b1407f GWT client: Added copyright header.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
2 * Software engineering by Intevation GmbH
172338b1407f GWT client: Added copyright header.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
3 *
5993
ea9eef426962 Removed trailing whitespace.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5871
diff changeset
4 * This file is Free Software under the GNU AGPL (>=v3)
5861
172338b1407f GWT client: Added copyright header.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
5 * and comes with ABSOLUTELY NO WARRANTY! Check out the
5993
ea9eef426962 Removed trailing whitespace.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5871
diff changeset
6 * documentation coming with Dive4Elements River for details.
5861
172338b1407f GWT client: Added copyright header.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
7 */
172338b1407f GWT client: Added copyright header.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
8
5835
821a02bbfb4e Fixed internal java dependencies
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5834
diff changeset
9 package org.dive4elements.river.client.client.ui;
848
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
10
5871
88d6bddbf6cd River GWT client: Removed obsolete same package imports.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5861
diff changeset
11 import java.util.ArrayList;
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
12 import java.util.Collection;
5871
88d6bddbf6cd River GWT client: Removed obsolete same package imports.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5861
diff changeset
13 import java.util.List;
88d6bddbf6cd River GWT client: Removed obsolete same package imports.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5861
diff changeset
14 import java.util.MissingResourceException;
88d6bddbf6cd River GWT client: Removed obsolete same package imports.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5861
diff changeset
15 import java.util.Stack;
88d6bddbf6cd River GWT client: Removed obsolete same package imports.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5861
diff changeset
16
5835
821a02bbfb4e Fixed internal java dependencies
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5834
diff changeset
17 import org.dive4elements.river.client.client.Config;
821a02bbfb4e Fixed internal java dependencies
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5834
diff changeset
18 import org.dive4elements.river.client.client.FLYSConstants;
821a02bbfb4e Fixed internal java dependencies
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5834
diff changeset
19 import org.dive4elements.river.client.client.event.DatacageDoubleClickHandler;
821a02bbfb4e Fixed internal java dependencies
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5834
diff changeset
20 import org.dive4elements.river.client.client.event.DatacageHandler;
821a02bbfb4e Fixed internal java dependencies
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5834
diff changeset
21 import org.dive4elements.river.client.client.services.MetaDataService;
821a02bbfb4e Fixed internal java dependencies
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5834
diff changeset
22 import org.dive4elements.river.client.client.services.MetaDataServiceAsync;
821a02bbfb4e Fixed internal java dependencies
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5834
diff changeset
23 import org.dive4elements.river.client.shared.model.AttrList;
821a02bbfb4e Fixed internal java dependencies
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5834
diff changeset
24 import org.dive4elements.river.client.shared.model.DataCageNode;
821a02bbfb4e Fixed internal java dependencies
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5834
diff changeset
25 import org.dive4elements.river.client.shared.model.DataCageTree;
821a02bbfb4e Fixed internal java dependencies
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5834
diff changeset
26 import org.dive4elements.river.client.shared.model.ToLoad;
821a02bbfb4e Fixed internal java dependencies
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5834
diff changeset
27 import org.dive4elements.river.client.shared.model.User;
848
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
28
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
29 import com.google.gwt.core.client.GWT;
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
30 import com.google.gwt.user.client.rpc.AsyncCallback;
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
31 import com.smartgwt.client.types.SelectionStyle;
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
32 import com.smartgwt.client.types.TreeModelType;
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
33 import com.smartgwt.client.util.SC;
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
34 import com.smartgwt.client.widgets.Button;
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
35 import com.smartgwt.client.widgets.events.ClickEvent;
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
36 import com.smartgwt.client.widgets.events.ClickHandler;
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
37 import com.smartgwt.client.widgets.grid.HoverCustomizer;
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
38 import com.smartgwt.client.widgets.grid.ListGridRecord;
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
39 import com.smartgwt.client.widgets.grid.events.RecordDoubleClickEvent;
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
40 import com.smartgwt.client.widgets.grid.events.RecordDoubleClickHandler;
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
41 import com.smartgwt.client.widgets.layout.VLayout;
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
42 import com.smartgwt.client.widgets.tree.Tree;
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
43 import com.smartgwt.client.widgets.tree.TreeGrid;
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
44 import com.smartgwt.client.widgets.tree.TreeNode;
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
45
897
2b6efb8b2301 Refactored DatacageWidget to allow reuse in other use-cases.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 892
diff changeset
46 // TODO: refactor, extract ~DataCageGrid
1283
e8bb11976c70 Neaten certain GUI aspects with W-Diff waterlevel-pair selection.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1268
diff changeset
47 /**
e8bb11976c70 Neaten certain GUI aspects with W-Diff waterlevel-pair selection.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1268
diff changeset
48 * Display tree of, for example, previous calculations and allows
e8bb11976c70 Neaten certain GUI aspects with W-Diff waterlevel-pair selection.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1268
diff changeset
49 * selection in order to access/clone these.
e8bb11976c70 Neaten certain GUI aspects with W-Diff waterlevel-pair selection.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1268
diff changeset
50 */
9227
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 9220
diff changeset
51 public final class DatacageWidget extends VLayout {
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 9220
diff changeset
52
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 9220
diff changeset
53 private static final FLYSConstants MSG = GWT.create(FLYSConstants.class);
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 9220
diff changeset
54
1325
2f5fbfeda1d4 Introduced i18n for datacage
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1283
diff changeset
55 public static final int MAX_OPEN = 30;
2f5fbfeda1d4 Introduced i18n for datacage
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1283
diff changeset
56
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
57 public interface DatacageFilter {
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
58 boolean accept(DataCageNode node);
848
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
59 }
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
60
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
61 public static final DatacageFilter ACCEPT_ALL_FILTER = new DatacageFilter() {
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
62 @Override
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
63 public boolean accept(final DataCageNode node) {
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
64 return true;
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
65 }
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
66 };
868
439068365cde Minor cosmetics.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 848
diff changeset
67
9227
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 9220
diff changeset
68 public static final DatacageFilter ACCEPT_NONE_FILTER = new DatacageFilter() {
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 9220
diff changeset
69 @Override
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 9220
diff changeset
70 public boolean accept(final DataCageNode node) {
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 9220
diff changeset
71 return false;
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 9220
diff changeset
72 }
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 9220
diff changeset
73 };
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 9220
diff changeset
74
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
75 private final MetaDataServiceAsync metaDataService = GWT.create(MetaDataService.class);
916
a1a5dc2b9e34 Improved the DEM datacage panel to display the DEMs only.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 897
diff changeset
76
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
77 private final List<DatacageHandler> handlers = new ArrayList<DatacageHandler>();
848
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
78
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
79 private final List<DatacageDoubleClickHandler> doubleHandlers = new ArrayList<DatacageDoubleClickHandler>();
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
80
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
81 private final TreeGrid treeGrid;
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
82
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
83 private Tree tree;
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
84
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
85 private ToLoad toLoad;
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
86
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
87 /** Layout to show spinning wheel of joy. */
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
88 private VLayout lockScreen;
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
89
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
90 private DataCageTree dcTree;
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
91
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
92 private DatacageFilter filter = ACCEPT_ALL_FILTER;
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
93
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
94 private DatacageWidgetData data;
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
95
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
96 public DatacageWidget(final DatacageWidgetData data) {
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
97
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
98 this.data = data;
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
99
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
100 this.toLoad = new ToLoad();
848
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
101
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
102 setWidth100();
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
103
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
104 this.treeGrid = new TreeGrid();
848
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
105
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
106 final String columnLabel = this.data.getColumnLabel();
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
107 if (columnLabel != null)
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
108 this.treeGrid.setTreeFieldTitle(columnLabel);
848
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
109
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
110 this.treeGrid.setLoadDataOnDemand(false);
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
111 this.treeGrid.setWidth100();
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
112 this.treeGrid.setHeight100();
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
113 this.treeGrid.setShowRoot(false);
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
114 this.treeGrid.setNodeIcon("[SKIN]/../blank.gif");
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
115 this.treeGrid.setShowConnectors(true);
9227
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 9220
diff changeset
116 this.treeGrid.setLoadingMessage(MSG.databasket_loading());
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 9220
diff changeset
117 this.treeGrid.setLoadingDataMessage(MSG.databasket_loading());
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 9220
diff changeset
118 this.treeGrid.setEmptyMessage(MSG.databasket_empty());
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
119
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
120 this.treeGrid.setHoverMoveWithMouse(true);
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
121 this.treeGrid.setCanHover(true);
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
122 this.treeGrid.setShowHover(true);
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
123 this.treeGrid.setHoverOpacity(75);
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
124 this.treeGrid.setHoverWidth(120);
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
125
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
126 this.treeGrid.setHoverCustomizer(new HoverCustomizer() {
3475
9b29facddbd1 Show tooltips for datacage rows.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2905
diff changeset
127 @Override
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
128 public String hoverHTML(final Object value, final ListGridRecord record, final int rowNum, final int colNum) {
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
129 if (record instanceof TreeNode) {
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
130 final TreeNode hoveredTreeNode = (TreeNode) record;
3475
9b29facddbd1 Show tooltips for datacage rows.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2905
diff changeset
131 String info = hoveredTreeNode.getAttribute("info");
9b29facddbd1 Show tooltips for datacage rows.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2905
diff changeset
132 if (info == null) {
9b29facddbd1 Show tooltips for datacage rows.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2905
diff changeset
133 info = hoveredTreeNode.getName();
9b29facddbd1 Show tooltips for datacage rows.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2905
diff changeset
134 }
9b29facddbd1 Show tooltips for datacage rows.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2905
diff changeset
135 return info;
9b29facddbd1 Show tooltips for datacage rows.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2905
diff changeset
136 }
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
137
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
138 return "";// should not happen
3475
9b29facddbd1 Show tooltips for datacage rows.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2905
diff changeset
139 }
9b29facddbd1 Show tooltips for datacage rows.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2905
diff changeset
140 });
9b29facddbd1 Show tooltips for datacage rows.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2905
diff changeset
141
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
142 this.treeGrid.addRecordDoubleClickHandler(new RecordDoubleClickHandler() {
848
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
143 @Override
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
144 public void onRecordDoubleClick(final RecordDoubleClickEvent event) {
848
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
145 doubleClickedOnTree(event);
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
146 }
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
147 });
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
148
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
149 addMember(this.treeGrid);
848
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
150
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
151 if (data.isShowButton())
897
2b6efb8b2301 Refactored DatacageWidget to allow reuse in other use-cases.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 892
diff changeset
152 addMember(createPlusButton());
848
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
153
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
154 triggerTreeBuilding();
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
155 }
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
156
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
157 public void setFilter(final DatacageFilter filter) {
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
158 assert (filter != null);
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
159
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
160 this.filter = filter;
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
161
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
162 if (this.dcTree != null)
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
163 updateTree(this.dcTree);
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
164 }
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
165
9227
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 9220
diff changeset
166 public TreeGrid getTreeGrid() {
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 9220
diff changeset
167 return this.treeGrid;
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 9220
diff changeset
168 }
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 9220
diff changeset
169
6042
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5993
diff changeset
170 /** Disable input, show spinning wheel of joy. */
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
171 private void lockUI() {
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
172 this.lockScreen = ScreenLock.lockUI(this, this.lockScreen);
5488
6ec7c8ebb2c9 DatacageWidget: Use ScreenLock when loading dc data, solves flys/issue1152 .
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5462
diff changeset
173 }
6ec7c8ebb2c9 DatacageWidget: Use ScreenLock when loading dc data, solves flys/issue1152 .
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5462
diff changeset
174
6ec7c8ebb2c9 DatacageWidget: Use ScreenLock when loading dc data, solves flys/issue1152 .
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5462
diff changeset
175 /** Enable input, remove grey, remove spinning wheel of joy. */
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
176 protected final void unlockUI() {
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
177 ScreenLock.unlockUI(this, this.lockScreen);
5488
6ec7c8ebb2c9 DatacageWidget: Use ScreenLock when loading dc data, solves flys/issue1152 .
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5462
diff changeset
178 }
897
2b6efb8b2301 Refactored DatacageWidget to allow reuse in other use-cases.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 892
diff changeset
179
2b6efb8b2301 Refactored DatacageWidget to allow reuse in other use-cases.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 892
diff changeset
180 /**
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
181 * Sets whether more than one item can be selected.
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
182 *
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
183 * @param multi
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
184 * if true, allow mutliple selections.
897
2b6efb8b2301 Refactored DatacageWidget to allow reuse in other use-cases.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 892
diff changeset
185 */
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
186 public void setIsMutliSelectable(final boolean multi) {
1268
d0500e993218 Force a single selection in the datacage widget for DEMs and WSPs.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1267
diff changeset
187 if (multi) {
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
188 this.treeGrid.setSelectionType(SelectionStyle.MULTIPLE);
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
189 } else {
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
190 this.treeGrid.setSelectionType(SelectionStyle.SINGLE);
1268
d0500e993218 Force a single selection in the datacage widget for DEMs and WSPs.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1267
diff changeset
191 }
d0500e993218 Force a single selection in the datacage widget for DEMs and WSPs.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1267
diff changeset
192 }
d0500e993218 Force a single selection in the datacage widget for DEMs and WSPs.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1267
diff changeset
193
897
2b6efb8b2301 Refactored DatacageWidget to allow reuse in other use-cases.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 892
diff changeset
194 /**
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
195 * @param handler
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
196 * Handler to be added (notified on add-action).
897
2b6efb8b2301 Refactored DatacageWidget to allow reuse in other use-cases.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 892
diff changeset
197 */
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
198 public void addDatacageHandler(final DatacageHandler handler) {
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
199 if (!this.handlers.contains(handler)) {
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
200 this.handlers.add(handler);
1267
07aa1f504491 Bugfix: #323 A double click in the datacage widget triggers the DatacageDoubleClickHandler.onDoubleClick() method of all registered handlers.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 916
diff changeset
201 }
07aa1f504491 Bugfix: #323 A double click in the datacage widget triggers the DatacageDoubleClickHandler.onDoubleClick() method of all registered handlers.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 916
diff changeset
202 }
07aa1f504491 Bugfix: #323 A double click in the datacage widget triggers the DatacageDoubleClickHandler.onDoubleClick() method of all registered handlers.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 916
diff changeset
203
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
204 /**
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
205 * @param h
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
206 * Handler to be added (notified on Double click on node).
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
207 */
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
208 public void addDatacageDoubleClickHandler(final DatacageDoubleClickHandler h) {
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
209 if (!this.doubleHandlers.contains(h)) {
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
210 this.doubleHandlers.add(h);
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
211 }
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
212 }
1267
07aa1f504491 Bugfix: #323 A double click in the datacage widget triggers the DatacageDoubleClickHandler.onDoubleClick() method of all registered handlers.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 916
diff changeset
213
07aa1f504491 Bugfix: #323 A double click in the datacage widget triggers the DatacageDoubleClickHandler.onDoubleClick() method of all registered handlers.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 916
diff changeset
214 /**
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
215 * @param handler
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
216 * Handler to remove from list.
897
2b6efb8b2301 Refactored DatacageWidget to allow reuse in other use-cases.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 892
diff changeset
217 */
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
218 public void removeDatacageHandler(final DatacageHandler handler) {
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
219 this.handlers.remove(handler);
848
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
220 }
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
221
897
2b6efb8b2301 Refactored DatacageWidget to allow reuse in other use-cases.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 892
diff changeset
222 public ToLoad getSelection() {
2b6efb8b2301 Refactored DatacageWidget to allow reuse in other use-cases.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 892
diff changeset
223 // Reset content of toLoads.
9227
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 9220
diff changeset
224
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 9220
diff changeset
225 // FIXME: bad... instead we should react to selection events and update toLoad in this way.
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 9220
diff changeset
226
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
227 this.toLoad = new ToLoad();
897
2b6efb8b2301 Refactored DatacageWidget to allow reuse in other use-cases.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 892
diff changeset
228
9227
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 9220
diff changeset
229 if (this.treeGrid == null)
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
230 return this.toLoad;
848
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
231
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
232 final ListGridRecord[] selection = this.treeGrid.getSelectedRecords();
848
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
233
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
234 if (selection != null) {
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
235 for (final ListGridRecord record : selection) {
848
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
236 if (record instanceof TreeNode) {
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
237 collectToLoads((TreeNode) record);
848
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
238 }
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
239 }
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
240 }
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
241
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
242 return this.toLoad;
897
2b6efb8b2301 Refactored DatacageWidget to allow reuse in other use-cases.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 892
diff changeset
243 }
2b6efb8b2301 Refactored DatacageWidget to allow reuse in other use-cases.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 892
diff changeset
244
7971
93da474506e7 Changed twin dc panel in bed height deifferences to single dc and use the new differences dc macro.
Raimund Renkert <rrenkert@intevation.de>
parents: 6136
diff changeset
245 public List<TreeNode> getPlainSelection() {
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
246 final ListGridRecord[] selection = this.treeGrid.getSelectedRecords();
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
247 final List<TreeNode> nodes = new ArrayList<TreeNode>();
7971
93da474506e7 Changed twin dc panel in bed height deifferences to single dc and use the new differences dc macro.
Raimund Renkert <rrenkert@intevation.de>
parents: 6136
diff changeset
248 if (selection != null) {
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
249 for (final ListGridRecord record : selection) {
7971
93da474506e7 Changed twin dc panel in bed height deifferences to single dc and use the new differences dc macro.
Raimund Renkert <rrenkert@intevation.de>
parents: 6136
diff changeset
250 if (record instanceof TreeNode) {
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
251 nodes.add((TreeNode) record);
7971
93da474506e7 Changed twin dc panel in bed height deifferences to single dc and use the new differences dc macro.
Raimund Renkert <rrenkert@intevation.de>
parents: 6136
diff changeset
252 }
93da474506e7 Changed twin dc panel in bed height deifferences to single dc and use the new differences dc macro.
Raimund Renkert <rrenkert@intevation.de>
parents: 6136
diff changeset
253 }
93da474506e7 Changed twin dc panel in bed height deifferences to single dc and use the new differences dc macro.
Raimund Renkert <rrenkert@intevation.de>
parents: 6136
diff changeset
254 }
93da474506e7 Changed twin dc panel in bed height deifferences to single dc and use the new differences dc macro.
Raimund Renkert <rrenkert@intevation.de>
parents: 6136
diff changeset
255 return nodes;
93da474506e7 Changed twin dc panel in bed height deifferences to single dc and use the new differences dc macro.
Raimund Renkert <rrenkert@intevation.de>
parents: 6136
diff changeset
256 }
93da474506e7 Changed twin dc panel in bed height deifferences to single dc and use the new differences dc macro.
Raimund Renkert <rrenkert@intevation.de>
parents: 6136
diff changeset
257
897
2b6efb8b2301 Refactored DatacageWidget to allow reuse in other use-cases.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 892
diff changeset
258 /**
1283
e8bb11976c70 Neaten certain GUI aspects with W-Diff waterlevel-pair selection.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1268
diff changeset
259 * Returns the titles of selected items (if any).
e8bb11976c70 Neaten certain GUI aspects with W-Diff waterlevel-pair selection.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1268
diff changeset
260 */
e8bb11976c70 Neaten certain GUI aspects with W-Diff waterlevel-pair selection.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1268
diff changeset
261 public String[] getSelectionTitles() {
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
262 if (this.treeGrid == null) {
1283
e8bb11976c70 Neaten certain GUI aspects with W-Diff waterlevel-pair selection.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1268
diff changeset
263 return new String[] {};
e8bb11976c70 Neaten certain GUI aspects with W-Diff waterlevel-pair selection.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1268
diff changeset
264 }
e8bb11976c70 Neaten certain GUI aspects with W-Diff waterlevel-pair selection.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1268
diff changeset
265
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
266 final ListGridRecord[] selection = this.treeGrid.getSelectedRecords();
1283
e8bb11976c70 Neaten certain GUI aspects with W-Diff waterlevel-pair selection.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1268
diff changeset
267
e8bb11976c70 Neaten certain GUI aspects with W-Diff waterlevel-pair selection.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1268
diff changeset
268 if (selection == null) {
e8bb11976c70 Neaten certain GUI aspects with W-Diff waterlevel-pair selection.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1268
diff changeset
269 return new String[] {};
e8bb11976c70 Neaten certain GUI aspects with W-Diff waterlevel-pair selection.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1268
diff changeset
270 }
e8bb11976c70 Neaten certain GUI aspects with W-Diff waterlevel-pair selection.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1268
diff changeset
271
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
272 final List<String> titleList = new ArrayList<String>();
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
273 for (final ListGridRecord record : selection) {
1283
e8bb11976c70 Neaten certain GUI aspects with W-Diff waterlevel-pair selection.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1268
diff changeset
274 if (record instanceof TreeNode) {
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
275 titleList.add(((TreeNode) record).getAttribute("name"));
1283
e8bb11976c70 Neaten certain GUI aspects with W-Diff waterlevel-pair selection.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1268
diff changeset
276 }
e8bb11976c70 Neaten certain GUI aspects with W-Diff waterlevel-pair selection.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1268
diff changeset
277 }
e8bb11976c70 Neaten certain GUI aspects with W-Diff waterlevel-pair selection.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1268
diff changeset
278
e8bb11976c70 Neaten certain GUI aspects with W-Diff waterlevel-pair selection.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1268
diff changeset
279 return titleList.toArray(new String[titleList.size()]);
e8bb11976c70 Neaten certain GUI aspects with W-Diff waterlevel-pair selection.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1268
diff changeset
280 }
e8bb11976c70 Neaten certain GUI aspects with W-Diff waterlevel-pair selection.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1268
diff changeset
281
e8bb11976c70 Neaten certain GUI aspects with W-Diff waterlevel-pair selection.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1268
diff changeset
282 /**
897
2b6efb8b2301 Refactored DatacageWidget to allow reuse in other use-cases.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 892
diff changeset
283 * Callback for add-button.
2b6efb8b2301 Refactored DatacageWidget to allow reuse in other use-cases.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 892
diff changeset
284 * Fires to load for every selected element and handler.
2b6efb8b2301 Refactored DatacageWidget to allow reuse in other use-cases.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 892
diff changeset
285 */
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
286 protected final void plusClicked() {
897
2b6efb8b2301 Refactored DatacageWidget to allow reuse in other use-cases.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 892
diff changeset
287 if (!getSelection().isEmpty()) {
848
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
288 fireToLoad();
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
289 }
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
290 }
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
291
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
292 private Button createPlusButton() {
9227
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 9220
diff changeset
293 final Button plusBtn = new Button(MSG.datacageAdd());
897
2b6efb8b2301 Refactored DatacageWidget to allow reuse in other use-cases.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 892
diff changeset
294 plusBtn.addClickHandler(new ClickHandler() {
2b6efb8b2301 Refactored DatacageWidget to allow reuse in other use-cases.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 892
diff changeset
295 @Override
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
296 public void onClick(final ClickEvent event) {
897
2b6efb8b2301 Refactored DatacageWidget to allow reuse in other use-cases.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 892
diff changeset
297 plusClicked();
2b6efb8b2301 Refactored DatacageWidget to allow reuse in other use-cases.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 892
diff changeset
298 }
2b6efb8b2301 Refactored DatacageWidget to allow reuse in other use-cases.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 892
diff changeset
299 });
2b6efb8b2301 Refactored DatacageWidget to allow reuse in other use-cases.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 892
diff changeset
300 return plusBtn;
2b6efb8b2301 Refactored DatacageWidget to allow reuse in other use-cases.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 892
diff changeset
301 }
2b6efb8b2301 Refactored DatacageWidget to allow reuse in other use-cases.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 892
diff changeset
302
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
303 private void fireToLoad() {
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
304 for (final DatacageHandler handler : this.handlers) {
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
305 handler.toLoad(this.toLoad);
848
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
306 }
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
307 }
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
308
1333
1627a28c4504 Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1325
diff changeset
309 /** Notify DatacageDoubleClickHandlers that a doubleclick happened. */
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
310 private void fireOnDoubleClick() {
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
311 for (final DatacageDoubleClickHandler handler : this.doubleHandlers) {
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
312 handler.onDoubleClick(this.toLoad);
1267
07aa1f504491 Bugfix: #323 A double click in the datacage widget triggers the DatacageDoubleClickHandler.onDoubleClick() method of all registered handlers.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 916
diff changeset
313 }
07aa1f504491 Bugfix: #323 A double click in the datacage widget triggers the DatacageDoubleClickHandler.onDoubleClick() method of all registered handlers.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 916
diff changeset
314 }
07aa1f504491 Bugfix: #323 A double click in the datacage widget triggers the DatacageDoubleClickHandler.onDoubleClick() method of all registered handlers.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 916
diff changeset
315
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
316 protected final void doubleClickedOnTree(final RecordDoubleClickEvent event) {
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
317 final TreeNode node = (TreeNode) event.getRecord();
848
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
318 collectToLoads(node);
1267
07aa1f504491 Bugfix: #323 A double click in the datacage widget triggers the DatacageDoubleClickHandler.onDoubleClick() method of all registered handlers.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 916
diff changeset
319 fireOnDoubleClick();
848
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
320 }
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
321
1349
46a4b74d87bf Allow (yet limited) usage of zus and flood-protection data in wdiffs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1333
diff changeset
322 /**
46a4b74d87bf Allow (yet limited) usage of zus and flood-protection data in wdiffs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1333
diff changeset
323 * Adds to toLoad, from info in node.
46a4b74d87bf Allow (yet limited) usage of zus and flood-protection data in wdiffs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1333
diff changeset
324 * Afterwards, add all children of node to stack to parse (next time
46a4b74d87bf Allow (yet limited) usage of zus and flood-protection data in wdiffs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1333
diff changeset
325 * collectToLoads is called).
46a4b74d87bf Allow (yet limited) usage of zus and flood-protection data in wdiffs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1333
diff changeset
326 */
9227
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 9220
diff changeset
327 private void collectToLoads(final TreeNode root1) {
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
328 final Stack<TreeNode> stack = new Stack<TreeNode>();
848
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
329
9227
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 9220
diff changeset
330 stack.push(root1);
848
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
331
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
332 while (!stack.isEmpty()) {
9227
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 9220
diff changeset
333 final TreeNode node = stack.pop();
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
334 final String factory = node.getAttribute("factory");
848
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
335 if (factory != null) { // we need at least a factory
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
336 final String artifact = node.getAttribute("artifact-id");
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
337 final String out = node.getAttribute("out");
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
338 final String name = node.getAttribute("facet");
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
339 final String ids = node.getAttribute("ids");
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
340 final String displayname = node.getAttribute("name");
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
341 final String targetOut = node.getAttribute("target_out");
1349
46a4b74d87bf Allow (yet limited) usage of zus and flood-protection data in wdiffs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1333
diff changeset
342 String debugAttributeValues = "";
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
343 for (final String attr : node.getAttributes()) {
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
344 debugAttributeValues += ("[" + attr + ": " + node.getAttributeAsString(attr) + "] ");
1349
46a4b74d87bf Allow (yet limited) usage of zus and flood-protection data in wdiffs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1333
diff changeset
345 }
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
346 GWT.log("DatacageWidget.collectToLoad, attributes are " + debugAttributeValues);
848
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
347
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
348 this.toLoad.add(artifact, factory, out, name, ids, displayname, targetOut);
848
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
349 }
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
350 final TreeNode[] children = this.tree.getChildren(node);
848
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
351 if (children != null) {
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
352 for (final TreeNode child : children) {
848
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
353 stack.push(child);
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
354 }
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
355 }
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
356 }
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
357 }
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
358
3475
9b29facddbd1 Show tooltips for datacage rows.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2905
diff changeset
359 /** Get meta-data and populate tree with it. */
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
360 private void triggerTreeBuilding() {
5488
6ec7c8ebb2c9 DatacageWidget: Use ScreenLock when loading dc data, solves flys/issue1152 .
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5462
diff changeset
361 lockUI();
6ec7c8ebb2c9 DatacageWidget: Use ScreenLock when loading dc data, solves flys/issue1152 .
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5462
diff changeset
362
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
363 final String locale = Config.getInstance().getLocale();
848
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
364
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
365 final String artifactId = this.data.getArtifact().getUuid();
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
366 final User user = this.data.getUser();
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
367 final String userId = user != null ? user.identifier() : null;
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
368 final String outs = this.data.getOuts();
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
369 final String parameters = this.data.getParameters();
2478
6462a02022ab Issue 424.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2435
diff changeset
370
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
371 this.metaDataService.getMetaData(locale, artifactId, userId, outs, parameters, new AsyncCallback<DataCageTree>() {
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
372 @Override
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
373 public void onFailure(final Throwable caught) {
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
374 GWT.log("Could not load meta data.");
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
375 SC.warn(caught.getMessage());
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
376 unlockUI();
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
377 }
2478
6462a02022ab Issue 424.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2435
diff changeset
378
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
379 @Override
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
380 public void onSuccess(final DataCageTree dcData) {
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
381 GWT.log("Successfully loaded meta data.");
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
382
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
383 setDatacageData(dcData);
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
384 unlockUI();
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
385 }
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
386 });
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
387 }
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
388
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
389 protected final void setDatacageData(final DataCageTree dcTree) {
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
390
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
391 this.dcTree = dcTree;
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
392
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
393 if (this.tree != null)
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
394 this.tree.destroy();
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
395
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
396 updateTree(this.dcTree);
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
397 }
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
398
9227
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 9220
diff changeset
399 private void updateTree(final DataCageTree dcData) {
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
400
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
401 this.tree = new Tree();
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
402 this.tree.setModelType(TreeModelType.CHILDREN);
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
403 this.tree.setNameProperty("name");
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
404 this.tree.setIdField("id");
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
405 this.tree.setChildrenProperty("children-nodes");
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
406 this.tree.setShowRoot(false);
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
407
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
408 final IdGenerator idGenerator = new IdGenerator();
9227
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 9220
diff changeset
409 final DataCageNode dcRoot = dcData.getRoot();
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
410 final TreeNode root = buildRecursiveChildren(dcRoot, idGenerator);
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
411 if (root != null) {
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
412 this.tree.setRoot(root);
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
413
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
414 // FIXME: why is this necessary? an it only happens for the first level...
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
415 final TreeNode[] nodes = this.tree.getChildren(root);
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
416 for (final TreeNode node : nodes) {
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
417 if (node.getAttribute("factory") == null && !this.tree.hasChildren(node))
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
418 node.setIsFolder(true);
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
419 }
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
420 }
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
421
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
422 if (idGenerator.current() < MAX_OPEN)
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
423 this.tree.openAll();
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
424
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
425 this.treeGrid.setData(this.tree);
848
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
426 }
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
427
1325
2f5fbfeda1d4 Introduced i18n for datacage
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1283
diff changeset
428 private static final class IdGenerator {
848
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
429 protected int current;
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
430
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
431 public IdGenerator() {
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
432 }
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
433
1325
2f5fbfeda1d4 Introduced i18n for datacage
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1283
diff changeset
434 public int next() {
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
435 return this.current++;
848
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
436 }
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
437
1325
2f5fbfeda1d4 Introduced i18n for datacage
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1283
diff changeset
438 public int current() {
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
439 return this.current;
848
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
440 }
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
441 } // class IdGenerator
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
442
9227
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 9220
diff changeset
443 private String i18n(final String s) {
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 9220
diff changeset
444 if (!(s.startsWith("${") && s.endsWith("}")))
1325
2f5fbfeda1d4 Introduced i18n for datacage
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1283
diff changeset
445 return s;
2f5fbfeda1d4 Introduced i18n for datacage
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1283
diff changeset
446
9227
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 9220
diff changeset
447 final String sub = s.substring(2, s.length() - 1);
1325
2f5fbfeda1d4 Introduced i18n for datacage
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1283
diff changeset
448
2f5fbfeda1d4 Introduced i18n for datacage
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1283
diff changeset
449 try {
9227
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 9220
diff changeset
450 return MSG.getString(sub);
1325
2f5fbfeda1d4 Introduced i18n for datacage
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1283
diff changeset
451 }
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
452 catch (final MissingResourceException mre) {
9227
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 9220
diff changeset
453 GWT.log("cannot find i18n for + '" + sub + "'", mre);
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 9220
diff changeset
454 return sub;
1325
2f5fbfeda1d4 Introduced i18n for datacage
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1283
diff changeset
455 }
2f5fbfeda1d4 Introduced i18n for datacage
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1283
diff changeset
456 }
2f5fbfeda1d4 Introduced i18n for datacage
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1283
diff changeset
457
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
458 private TreeNode buildRecursiveChildren(final DataCageNode node, final IdGenerator idGenerator) {
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
459
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
460 if (!this.filter.accept(node))
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
461 return null;
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
462
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
463 final List<DataCageNode> children = node.getChildren();
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
464
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
465 final Collection<TreeNode> tns = new ArrayList<TreeNode>();
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
466
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
467 if (children != null && !children.isEmpty()) {
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
468
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
469 for (final DataCageNode child : children) {
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
470
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
471 final TreeNode childNode = buildRecursiveChildren(child, idGenerator);
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
472 if (childNode != null)
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
473 tns.add(childNode);
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
474 }
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
475
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
476 /* if we should have children, but all got filtered, hide this node as well */
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
477 if (tns.isEmpty())
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
478 return null;
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
479 }
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
480
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
481 final TreeNode tn = new TreeNode();
1325
2f5fbfeda1d4 Introduced i18n for datacage
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1283
diff changeset
482 tn.setAttribute("id", idGenerator.next());
2f5fbfeda1d4 Introduced i18n for datacage
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1283
diff changeset
483
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
484 if (!tns.isEmpty())
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
485 tn.setAttribute("children-nodes", tns.toArray(new TreeNode[tns.size()]));
1325
2f5fbfeda1d4 Introduced i18n for datacage
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1283
diff changeset
486
2f5fbfeda1d4 Introduced i18n for datacage
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1283
diff changeset
487 tn.setAttribute("name", i18n(node.getDescription()));
892
63b258bf365c Bugfix: Use name instead of description for loading new facets via Datacage.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 884
diff changeset
488 tn.setAttribute("facet", node.getName());
1325
2f5fbfeda1d4 Introduced i18n for datacage
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1283
diff changeset
489
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
490 final AttrList attrs = node.getAttributes();
848
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
491 if (attrs != null) {
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
492 for (int i = 0, N = attrs.size(); i < N; ++i) {
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
493 final String key = attrs.getKey(i);
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
494 final String value = attrs.getValue(i);
848
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
495 tn.setAttribute(key, value);
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
496 }
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
497 }
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
498
1325
2f5fbfeda1d4 Introduced i18n for datacage
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1283
diff changeset
499 return tn;
848
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
500 }
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
501 }

http://dive4elements.wald.intevation.org