Mercurial > dive4elements > river
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(); |