comparison flys-client/src/main/java/de/intevation/flys/client/client/ui/DatacageWindow.java @ 821:56069d236afa

Datacage: Build UI tree in a more compatible style flys-client/trunk@2479 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Tue, 09 Aug 2011 13:37:40 +0000
parents 8f39ffee068a
children ffb98b228b3c
comparison
equal deleted inserted replaced
820:912379835298 821:56069d236afa
1 package de.intevation.flys.client.client.ui; 1 package de.intevation.flys.client.client.ui;
2
3 import java.util.List;
4 2
5 import com.google.gwt.core.client.GWT; 3 import com.google.gwt.core.client.GWT;
6 4
7 import com.google.gwt.user.client.rpc.AsyncCallback; 5 import com.google.gwt.user.client.rpc.AsyncCallback;
8 6
10 8
11 import com.smartgwt.client.widgets.Window; 9 import com.smartgwt.client.widgets.Window;
12 10
13 import com.smartgwt.client.widgets.tree.Tree; 11 import com.smartgwt.client.widgets.tree.Tree;
14 import com.smartgwt.client.widgets.tree.TreeGrid; 12 import com.smartgwt.client.widgets.tree.TreeGrid;
13 import com.smartgwt.client.widgets.tree.TreeNode;
14
15 import com.smartgwt.client.types.TreeModelType;
15 16
16 import com.smartgwt.client.widgets.layout.Layout; 17 import com.smartgwt.client.widgets.layout.Layout;
17 import com.smartgwt.client.widgets.layout.VLayout; 18 import com.smartgwt.client.widgets.layout.VLayout;
18 19
19 import com.smartgwt.client.widgets.tree.events.LeafClickEvent; 20 import com.smartgwt.client.widgets.tree.events.LeafClickEvent;
34 35
35 import de.intevation.flys.client.shared.model.DataCageTree; 36 import de.intevation.flys.client.shared.model.DataCageTree;
36 import de.intevation.flys.client.shared.model.DataCageNode; 37 import de.intevation.flys.client.shared.model.DataCageNode;
37 import de.intevation.flys.client.shared.model.AttrList; 38 import de.intevation.flys.client.shared.model.AttrList;
38 39
39 import de.intevation.flys.client.client.widgets.tree.AttributedTreeNode; 40 import java.util.ArrayList;
41 import java.util.List;
40 42
41 public class DatacageWindow 43 public class DatacageWindow
42 extends Window 44 extends Window
43 { 45 {
44 protected MetaDataServiceAsync metaDataService = 46 protected MetaDataServiceAsync metaDataService =
50 52
51 protected Artifact artifact; 53 protected Artifact artifact;
52 protected User user; 54 protected User user;
53 55
54 protected TreeGrid treeGrid; 56 protected TreeGrid treeGrid;
57 protected Tree tree;
55 58
56 protected Layout layout; 59 protected Layout layout;
57 60
58 61
59 public DatacageWindow(Artifact artifact, User user) { 62 public DatacageWindow(Artifact artifact, User user) {
65 68
66 layout = new VLayout(); 69 layout = new VLayout();
67 layout.setWidth100(); 70 layout.setWidth100();
68 71
69 addItem(layout); 72 addItem(layout);
73
74 tree = new Tree();
75 tree.setModelType(TreeModelType.PARENT);
76 tree.setNameProperty("name");
77 tree.setIdField("id");
78 tree.setParentIdField("parent-id");
70 79
71 treeGrid = new TreeGrid(); 80 treeGrid = new TreeGrid();
72 treeGrid.setLoadDataOnDemand(false); 81 treeGrid.setLoadDataOnDemand(false);
73 treeGrid.setWidth100(); 82 treeGrid.setWidth100();
74 treeGrid.setHeight100(); 83 treeGrid.setHeight100();
84 treeGrid.setShowRoot(false);
85
86 treeGrid.addLeafClickHandler(new LeafClickHandler() {
87 @Override
88 public void onLeafClick(LeafClickEvent lce) {
89 GWT.log("I was here");
90 }
91 });
75 92
76 layout.addMember(treeGrid); 93 layout.addMember(treeGrid);
77 94
78 String river = findRiver(); 95 String river = findRiver();
79 // TODO: i18n 96 // TODO: i18n
104 public void onFailure(Throwable caught) { 121 public void onFailure(Throwable caught) {
105 GWT.log("Could not load meta data."); 122 GWT.log("Could not load meta data.");
106 SC.warn(caught.getMessage()); 123 SC.warn(caught.getMessage());
107 } 124 }
108 125
109 public void onSuccess(DataCageTree tree) { 126 public void onSuccess(DataCageTree dcTree) {
110 GWT.log("Successfully loaded meta data."); 127 GWT.log("Successfully loaded meta data.");
111 buildTree(tree); 128 tree.setData(treeToData(dcTree));
129 treeGrid.setData(tree);
112 } 130 }
113 }); 131 });
114 } 132 }
115 133
116 protected void buildTree(DataCageTree tree) { 134 private static class IdGenerator {
117 treeGrid.setData(convertTree(tree)); 135 protected int current;
118 } 136
119 137 public IdGenerator() {
120 protected static AttributedTreeNode convert(DataCageNode node) { 138 }
139
140 public IdGenerator(int start) {
141 current = start;
142 }
143
144 public int next() {
145 return current++;
146 }
147 } // class IdGenerator
148
149 protected static void buildRecursive(
150 DataCageNode node,
151 int parentId,
152 IdGenerator idGenerator,
153 List<TreeNode> nodes
154 ) {
155 TreeNode tn = new TreeNode();
156 int id = idGenerator.next();
157 tn.setAttribute("parent-id", parentId);
158 tn.setAttribute("id", id);
159 // TODO: i18n
160 tn.setAttribute("name", node.getName());
161 nodes.add(tn);
162 AttrList attrs = node.getAttributes();
163 if (attrs != null) {
164 for (int i = 0, N = attrs.size(); i < N; ++i) {
165 String key = attrs.getKey(i);
166 String value = attrs.getValue(i);
167 tn.setAttribute(key, value);
168 }
169 }
121 List<DataCageNode> children = node.getChildren(); 170 List<DataCageNode> children = node.getChildren();
122
123 AttributedTreeNode [] cs;
124
125 if (children != null) { 171 if (children != null) {
126 cs = new AttributedTreeNode[children.size()]; 172 for (DataCageNode child: children) {
127 173 buildRecursive(child, id, idGenerator, nodes);
128 for (int i = 0, N = children.size(); i < N; ++i) { 174 }
129 cs[i] = convert(children.get(i)); 175 }
130 } 176 }
131 } 177
132 else { 178
133 cs = new AttributedTreeNode[0]; 179 protected static TreeNode [] treeToData(DataCageTree tree) {
134 } 180 List<TreeNode> nodes = new ArrayList<TreeNode>();
135 181
136 return new AttributedTreeNode(
137 node.getName(), node.getAttributes(), cs);
138 }
139
140 protected static Tree convertTree(DataCageTree tree) {
141 DataCageNode root = tree.getRoot(); 182 DataCageNode root = tree.getRoot();
142 183
143 List<DataCageNode> children = root.getChildren(); 184 IdGenerator idGenerator = new IdGenerator();
144 185
145 AttributedTreeNode [] cs; 186 buildRecursive(root, idGenerator.next(), idGenerator, nodes);
146 187
147 if (children != null) { 188 return nodes.toArray(new TreeNode[nodes.size()]);
148 cs = new AttributedTreeNode[children.size()];
149
150 for (int i = 0, N = children.size(); i < N; ++i) {
151 cs[i] = convert(children.get(i));
152 }
153 }
154 else {
155 cs = new AttributedTreeNode[0];
156 }
157
158 AttributedTreeNode rn = new AttributedTreeNode(
159 root.getName(), root.getAttributes(), cs);
160
161 Tree r = new Tree();
162 r.setRoot(rn);
163
164 return r;
165 } 189 }
166 190
167 protected String findRiver() { 191 protected String findRiver() {
168 192
169 ArtifactDescription adescr = artifact.getArtifactDescription(); 193 ArtifactDescription adescr = artifact.getArtifactDescription();

http://dive4elements.wald.intevation.org