annotate gwt-client/src/main/java/org/dive4elements/river/client/client/ui/DatacageWidget.java @ 9220:e3c2ae1887e8

Allow to filter contents of datacage on client side. Allow to override column label of datacage Some code cleanup
author gernotbelger
date Wed, 04 Jul 2018 12:00:51 +0200
parents 93da474506e7
children 84397da33d17
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 */
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
51 public class DatacageWidget extends VLayout {
1325
2f5fbfeda1d4 Introduced i18n for datacage
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1283
diff changeset
52 public static final int MAX_OPEN = 30;
2f5fbfeda1d4 Introduced i18n for datacage
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1283
diff changeset
53
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
54 public interface DatacageFilter {
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
55 boolean accept(DataCageNode node);
848
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
56 }
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
57
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
58 public static final DatacageFilter ACCEPT_ALL_FILTER = new DatacageFilter() {
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
59 @Override
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
60 public boolean accept(final DataCageNode node) {
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
61 return true;
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
62 }
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
63 };
868
439068365cde Minor cosmetics.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 848
diff changeset
64
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
65 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
66
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
67 private final FLYSConstants messages = GWT.create(FLYSConstants.class);
848
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
68
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
69 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
70
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
71 private final List<DatacageDoubleClickHandler> doubleHandlers = new ArrayList<DatacageDoubleClickHandler>();
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
72
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
73 private final TreeGrid treeGrid;
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
74
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
75 private Tree tree;
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
76
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
77 private ToLoad toLoad;
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
78
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
79 /** Layout to show spinning wheel of joy. */
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
80 private VLayout lockScreen;
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
81
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
82 private DataCageTree dcTree;
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
83
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
84 private DatacageFilter filter = ACCEPT_ALL_FILTER;
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
85
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
86 private DatacageWidgetData data;
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
87
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
88 public DatacageWidget(final DatacageWidgetData data) {
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 this.data = data;
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 this.toLoad = new ToLoad();
848
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
93
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
94 setWidth100();
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
95
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
96 this.treeGrid = new TreeGrid();
848
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
97
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
98 final String columnLabel = this.data.getColumnLabel();
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
99 if (columnLabel != null)
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
100 this.treeGrid.setTreeFieldTitle(columnLabel);
848
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
101
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
102 this.treeGrid.setLoadDataOnDemand(false);
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
103 this.treeGrid.setWidth100();
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
104 this.treeGrid.setHeight100();
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
105 this.treeGrid.setShowRoot(false);
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
106 this.treeGrid.setNodeIcon("[SKIN]/../blank.gif");
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
107 this.treeGrid.setShowConnectors(true);
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
108 this.treeGrid.setLoadingMessage(this.messages.databasket_loading());
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
109 this.treeGrid.setLoadingDataMessage(this.messages.databasket_loading());
3475
9b29facddbd1 Show tooltips for datacage rows.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2905
diff changeset
110
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
111 // FIXME: other message
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
112 this.treeGrid.setEmptyMessage(this.messages.databasket_loading());
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
113
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
114 this.treeGrid.setHoverMoveWithMouse(true);
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
115 this.treeGrid.setCanHover(true);
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
116 this.treeGrid.setShowHover(true);
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
117 this.treeGrid.setHoverOpacity(75);
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
118 this.treeGrid.setHoverWidth(120);
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.setHoverCustomizer(new HoverCustomizer() {
3475
9b29facddbd1 Show tooltips for datacage rows.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2905
diff changeset
121 @Override
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
122 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
123 if (record instanceof TreeNode) {
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
124 final TreeNode hoveredTreeNode = (TreeNode) record;
3475
9b29facddbd1 Show tooltips for datacage rows.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2905
diff changeset
125 String info = hoveredTreeNode.getAttribute("info");
9b29facddbd1 Show tooltips for datacage rows.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2905
diff changeset
126 if (info == null) {
9b29facddbd1 Show tooltips for datacage rows.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2905
diff changeset
127 info = hoveredTreeNode.getName();
9b29facddbd1 Show tooltips for datacage rows.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2905
diff changeset
128 }
9b29facddbd1 Show tooltips for datacage rows.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2905
diff changeset
129 return info;
9b29facddbd1 Show tooltips for datacage rows.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2905
diff changeset
130 }
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
131
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
132 return "";// should not happen
3475
9b29facddbd1 Show tooltips for datacage rows.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2905
diff changeset
133 }
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
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
136 this.treeGrid.addRecordDoubleClickHandler(new RecordDoubleClickHandler() {
848
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
137 @Override
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
138 public void onRecordDoubleClick(final RecordDoubleClickEvent event) {
848
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
139 doubleClickedOnTree(event);
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
140 }
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
141 });
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
142
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
143 addMember(this.treeGrid);
848
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
144
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
145 if (data.isShowButton())
897
2b6efb8b2301 Refactored DatacageWidget to allow reuse in other use-cases.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 892
diff changeset
146 addMember(createPlusButton());
848
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 triggerTreeBuilding();
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
149 }
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 public void setFilter(final DatacageFilter filter) {
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
152 assert (filter != null);
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
153
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
154 this.filter = filter;
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
155
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
156 if (this.dcTree != null)
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
157 updateTree(this.dcTree);
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
158 }
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
159
6042
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5993
diff changeset
160 /** Disable input, show spinning wheel of joy. */
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
161 private void lockUI() {
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
162 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
163 }
6ec7c8ebb2c9 DatacageWidget: Use ScreenLock when loading dc data, solves flys/issue1152 .
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5462
diff changeset
164
6ec7c8ebb2c9 DatacageWidget: Use ScreenLock when loading dc data, solves flys/issue1152 .
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5462
diff changeset
165 /** 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
166 protected final void unlockUI() {
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
167 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
168 }
897
2b6efb8b2301 Refactored DatacageWidget to allow reuse in other use-cases.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 892
diff changeset
169
2b6efb8b2301 Refactored DatacageWidget to allow reuse in other use-cases.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 892
diff changeset
170 /**
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
171 * Sets whether more than one item can be selected.
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
172 *
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
173 * @param multi
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
174 * 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
175 */
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
176 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
177 if (multi) {
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
178 this.treeGrid.setSelectionType(SelectionStyle.MULTIPLE);
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
179 } else {
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
180 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
181 }
d0500e993218 Force a single selection in the datacage widget for DEMs and WSPs.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1267
diff changeset
182 }
d0500e993218 Force a single selection in the datacage widget for DEMs and WSPs.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1267
diff changeset
183
897
2b6efb8b2301 Refactored DatacageWidget to allow reuse in other use-cases.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 892
diff changeset
184 /**
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
185 * @param handler
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
186 * 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
187 */
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
188 public void addDatacageHandler(final DatacageHandler handler) {
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
189 if (!this.handlers.contains(handler)) {
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
190 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
191 }
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
192 }
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
193
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
194 /**
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
195 * @param h
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
196 * 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
197 */
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
198 public void addDatacageDoubleClickHandler(final DatacageDoubleClickHandler h) {
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
199 if (!this.doubleHandlers.contains(h)) {
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
200 this.doubleHandlers.add(h);
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
201 }
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
202 }
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
203
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
204 /**
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
205 * @param handler
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
206 * 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
207 */
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
208 public void removeDatacageHandler(final DatacageHandler handler) {
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
209 this.handlers.remove(handler);
848
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
210 }
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
211
897
2b6efb8b2301 Refactored DatacageWidget to allow reuse in other use-cases.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 892
diff changeset
212 public ToLoad getSelection() {
2b6efb8b2301 Refactored DatacageWidget to allow reuse in other use-cases.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 892
diff changeset
213 // Reset content of toLoads.
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
214 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
215
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
216 if (this.treeGrid == null) {
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
217 return this.toLoad;
848
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
218 }
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
219
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
220 final ListGridRecord[] selection = this.treeGrid.getSelectedRecords();
848
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
221
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
222 if (selection != null) {
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
223 for (final ListGridRecord record : selection) {
848
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
224 if (record instanceof TreeNode) {
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
225 collectToLoads((TreeNode) record);
848
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
226 }
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
227 }
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
228 }
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
229
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
230 return this.toLoad;
897
2b6efb8b2301 Refactored DatacageWidget to allow reuse in other use-cases.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 892
diff changeset
231 }
2b6efb8b2301 Refactored DatacageWidget to allow reuse in other use-cases.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 892
diff changeset
232
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
233 public List<TreeNode> getPlainSelection() {
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
234 final ListGridRecord[] selection = this.treeGrid.getSelectedRecords();
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
235 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
236 if (selection != null) {
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
237 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
238 if (record instanceof TreeNode) {
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
239 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
240 }
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
241 }
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
242 }
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
243 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
244 }
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
897
2b6efb8b2301 Refactored DatacageWidget to allow reuse in other use-cases.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 892
diff changeset
246 /**
1283
e8bb11976c70 Neaten certain GUI aspects with W-Diff waterlevel-pair selection.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1268
diff changeset
247 * 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
248 */
e8bb11976c70 Neaten certain GUI aspects with W-Diff waterlevel-pair selection.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1268
diff changeset
249 public String[] getSelectionTitles() {
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
250 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
251 return new String[] {};
e8bb11976c70 Neaten certain GUI aspects with W-Diff waterlevel-pair selection.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1268
diff changeset
252 }
e8bb11976c70 Neaten certain GUI aspects with W-Diff waterlevel-pair selection.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1268
diff changeset
253
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
254 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
255
e8bb11976c70 Neaten certain GUI aspects with W-Diff waterlevel-pair selection.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1268
diff changeset
256 if (selection == null) {
e8bb11976c70 Neaten certain GUI aspects with W-Diff waterlevel-pair selection.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1268
diff changeset
257 return new String[] {};
e8bb11976c70 Neaten certain GUI aspects with W-Diff waterlevel-pair selection.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1268
diff changeset
258 }
e8bb11976c70 Neaten certain GUI aspects with W-Diff waterlevel-pair selection.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1268
diff changeset
259
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
260 final List<String> titleList = new ArrayList<String>();
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
261 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
262 if (record instanceof TreeNode) {
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
263 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
264 }
e8bb11976c70 Neaten certain GUI aspects with W-Diff waterlevel-pair selection.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1268
diff changeset
265 }
e8bb11976c70 Neaten certain GUI aspects with W-Diff waterlevel-pair selection.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1268
diff changeset
266
e8bb11976c70 Neaten certain GUI aspects with W-Diff waterlevel-pair selection.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1268
diff changeset
267 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
268 }
e8bb11976c70 Neaten certain GUI aspects with W-Diff waterlevel-pair selection.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1268
diff changeset
269
e8bb11976c70 Neaten certain GUI aspects with W-Diff waterlevel-pair selection.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1268
diff changeset
270 /**
897
2b6efb8b2301 Refactored DatacageWidget to allow reuse in other use-cases.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 892
diff changeset
271 * Callback for add-button.
2b6efb8b2301 Refactored DatacageWidget to allow reuse in other use-cases.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 892
diff changeset
272 * 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
273 */
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
274 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
275 if (!getSelection().isEmpty()) {
848
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
276 fireToLoad();
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
277 }
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
278 }
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
279
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
280 private Button createPlusButton() {
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
281 final Button plusBtn = new Button(this.messages.datacageAdd());
897
2b6efb8b2301 Refactored DatacageWidget to allow reuse in other use-cases.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 892
diff changeset
282 plusBtn.addClickHandler(new ClickHandler() {
2b6efb8b2301 Refactored DatacageWidget to allow reuse in other use-cases.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 892
diff changeset
283 @Override
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
284 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
285 plusClicked();
2b6efb8b2301 Refactored DatacageWidget to allow reuse in other use-cases.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 892
diff changeset
286 }
2b6efb8b2301 Refactored DatacageWidget to allow reuse in other use-cases.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 892
diff changeset
287 });
2b6efb8b2301 Refactored DatacageWidget to allow reuse in other use-cases.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 892
diff changeset
288 return plusBtn;
2b6efb8b2301 Refactored DatacageWidget to allow reuse in other use-cases.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 892
diff changeset
289 }
2b6efb8b2301 Refactored DatacageWidget to allow reuse in other use-cases.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 892
diff changeset
290
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
291 private void fireToLoad() {
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
292 for (final DatacageHandler handler : this.handlers) {
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
293 handler.toLoad(this.toLoad);
848
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
294 }
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
295 }
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
296
1333
1627a28c4504 Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1325
diff changeset
297 /** Notify DatacageDoubleClickHandlers that a doubleclick happened. */
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
298 private void fireOnDoubleClick() {
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
299 for (final DatacageDoubleClickHandler handler : this.doubleHandlers) {
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
300 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
301 }
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
302 }
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
303
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
304 protected final void doubleClickedOnTree(final RecordDoubleClickEvent event) {
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
305 final TreeNode node = (TreeNode) event.getRecord();
848
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
306 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
307 fireOnDoubleClick();
848
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
308 }
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
309
1349
46a4b74d87bf Allow (yet limited) usage of zus and flood-protection data in wdiffs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1333
diff changeset
310 /**
46a4b74d87bf Allow (yet limited) usage of zus and flood-protection data in wdiffs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1333
diff changeset
311 * 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
312 * 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
313 * 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
314 */
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
315 private void collectToLoads(TreeNode node) {
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
316 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
317
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
318 stack.push(node);
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
319
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
320 while (!stack.isEmpty()) {
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
321 node = stack.pop();
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
322 final String factory = node.getAttribute("factory");
848
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
323 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
324 final String artifact = node.getAttribute("artifact-id");
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
325 final String out = node.getAttribute("out");
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
326 final String name = node.getAttribute("facet");
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
327 final String ids = node.getAttribute("ids");
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
328 final String displayname = node.getAttribute("name");
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
329 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
330 String debugAttributeValues = "";
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
331 for (final String attr : node.getAttributes()) {
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
332 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
333 }
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
334 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
335
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
336 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
337 }
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
338 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
339 if (children != null) {
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
340 for (final TreeNode child : children) {
848
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
341 stack.push(child);
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
342 }
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
343 }
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
344 }
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
345 }
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
346
3475
9b29facddbd1 Show tooltips for datacage rows.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2905
diff changeset
347 /** Get meta-data and populate tree with it. */
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
348 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
349 lockUI();
6ec7c8ebb2c9 DatacageWidget: Use ScreenLock when loading dc data, solves flys/issue1152 .
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5462
diff changeset
350
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
351 final String locale = Config.getInstance().getLocale();
848
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
352
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
353 final String artifactId = this.data.getArtifact().getUuid();
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
354 final User user = this.data.getUser();
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
355 final String userId = user != null ? user.identifier() : null;
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
356 final String outs = this.data.getOuts();
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
357 final String parameters = this.data.getParameters();
2478
6462a02022ab Issue 424.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2435
diff changeset
358
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
359 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
360 @Override
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
361 public void onFailure(final Throwable caught) {
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
362 GWT.log("Could not load meta data.");
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
363 SC.warn(caught.getMessage());
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
364 unlockUI();
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
365 }
2478
6462a02022ab Issue 424.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2435
diff changeset
366
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
367 @Override
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
368 public void onSuccess(final DataCageTree dcData) {
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
369 GWT.log("Successfully loaded meta data.");
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
370
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
371 setDatacageData(dcData);
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
372 unlockUI();
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
373 }
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
374 });
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
375 }
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
376
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
377 protected final void setDatacageData(final DataCageTree dcTree) {
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
378
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
379 this.dcTree = dcTree;
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
380
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
381 if (this.tree != null)
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
382 this.tree.destroy();
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
383
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
384 updateTree(this.dcTree);
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 private void updateTree(final DataCageTree data) {
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 this.tree = new Tree();
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
390 this.tree.setModelType(TreeModelType.CHILDREN);
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
391 this.tree.setNameProperty("name");
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
392 this.tree.setIdField("id");
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
393 this.tree.setChildrenProperty("children-nodes");
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
394 this.tree.setShowRoot(false);
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 final IdGenerator idGenerator = new IdGenerator();
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
397 final DataCageNode dcRoot = data.getRoot();
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
398 final TreeNode root = buildRecursiveChildren(dcRoot, idGenerator);
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
399 if (root != null) {
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
400 this.tree.setRoot(root);
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
401
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
402 // 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
403 final TreeNode[] nodes = this.tree.getChildren(root);
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
404 for (final TreeNode node : nodes) {
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
405 if (node.getAttribute("factory") == null && !this.tree.hasChildren(node))
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
406 node.setIsFolder(true);
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 }
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
409
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
410 if (idGenerator.current() < MAX_OPEN)
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
411 this.tree.openAll();
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
412
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
413 this.treeGrid.setData(this.tree);
848
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
414 }
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
415
1325
2f5fbfeda1d4 Introduced i18n for datacage
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1283
diff changeset
416 private static final class IdGenerator {
848
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
417 protected int current;
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
418
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
419 public IdGenerator() {
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
420 }
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
421
1325
2f5fbfeda1d4 Introduced i18n for datacage
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1283
diff changeset
422 public int next() {
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
423 return this.current++;
848
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
424 }
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
425
1325
2f5fbfeda1d4 Introduced i18n for datacage
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1283
diff changeset
426 public int current() {
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
427 return this.current;
848
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
428 }
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
429 } // class IdGenerator
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
430
1325
2f5fbfeda1d4 Introduced i18n for datacage
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1283
diff changeset
431 private String i18n(String s) {
2f5fbfeda1d4 Introduced i18n for datacage
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1283
diff changeset
432 if (!(s.startsWith("${") && s.endsWith("}"))) {
2f5fbfeda1d4 Introduced i18n for datacage
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1283
diff changeset
433 return s;
2f5fbfeda1d4 Introduced i18n for datacage
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1283
diff changeset
434 }
2f5fbfeda1d4 Introduced i18n for datacage
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1283
diff changeset
435
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
436 s = s.substring(2, s.length() - 1);
1325
2f5fbfeda1d4 Introduced i18n for datacage
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1283
diff changeset
437
2f5fbfeda1d4 Introduced i18n for datacage
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1283
diff changeset
438 try {
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
439 return this.messages.getString(s);
1325
2f5fbfeda1d4 Introduced i18n for datacage
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1283
diff changeset
440 }
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
441 catch (final MissingResourceException mre) {
1325
2f5fbfeda1d4 Introduced i18n for datacage
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1283
diff changeset
442 GWT.log("cannot find i18n for + '" + s + "'");
2f5fbfeda1d4 Introduced i18n for datacage
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1283
diff changeset
443 return s;
2f5fbfeda1d4 Introduced i18n for datacage
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1283
diff changeset
444 }
2f5fbfeda1d4 Introduced i18n for datacage
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1283
diff changeset
445 }
2f5fbfeda1d4 Introduced i18n for datacage
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1283
diff changeset
446
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
447 private TreeNode buildRecursiveChildren(final DataCageNode node, final IdGenerator idGenerator) {
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
448
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
449 if (!this.filter.accept(node))
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
450 return null;
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
451
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
452 final List<DataCageNode> children = node.getChildren();
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
453
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
454 final Collection<TreeNode> tns = new ArrayList<TreeNode>();
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
455
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
456 if (children != null && !children.isEmpty()) {
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
457
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
458 for (final DataCageNode child : children) {
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 final TreeNode childNode = buildRecursiveChildren(child, idGenerator);
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
461 if (childNode != null)
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
462 tns.add(childNode);
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
463 }
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 /* 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
466 if (tns.isEmpty())
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
467 return null;
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
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
470 final TreeNode tn = new TreeNode();
1325
2f5fbfeda1d4 Introduced i18n for datacage
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1283
diff changeset
471 tn.setAttribute("id", idGenerator.next());
2f5fbfeda1d4 Introduced i18n for datacage
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1283
diff changeset
472
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
473 if (!tns.isEmpty())
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
474 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
475
2f5fbfeda1d4 Introduced i18n for datacage
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1283
diff changeset
476 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
477 tn.setAttribute("facet", node.getName());
1325
2f5fbfeda1d4 Introduced i18n for datacage
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1283
diff changeset
478
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
479 final AttrList attrs = node.getAttributes();
848
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
480 if (attrs != null) {
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
481 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
482 final String key = attrs.getKey(i);
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
483 final String value = attrs.getValue(i);
848
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
484 tn.setAttribute(key, value);
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
485 }
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
486 }
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
487
1325
2f5fbfeda1d4 Introduced i18n for datacage
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1283
diff changeset
488 return tn;
848
9ecd58f619a4 Moved datacage into a separated widget.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
489 }
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 7971
diff changeset
490 }

http://dive4elements.wald.intevation.org