Mercurial > dive4elements > river
comparison flys-client/src/main/java/de/intevation/flys/client/client/ui/DatacageWidget.java @ 1325:2f5fbfeda1d4
Introduced i18n for datacage
flys-client/trunk@2967 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Thu, 13 Oct 2011 16:30:55 +0000 |
parents | e8bb11976c70 |
children | 1627a28c4504 |
comparison
equal
deleted
inserted
replaced
1324:90b786325324 | 1325:2f5fbfeda1d4 |
---|---|
42 import de.intevation.flys.client.shared.model.DataCageNode; | 42 import de.intevation.flys.client.shared.model.DataCageNode; |
43 import de.intevation.flys.client.shared.model.AttrList; | 43 import de.intevation.flys.client.shared.model.AttrList; |
44 | 44 |
45 import java.util.ArrayList; | 45 import java.util.ArrayList; |
46 import java.util.List; | 46 import java.util.List; |
47 import java.util.MissingResourceException; | |
47 import java.util.Stack; | 48 import java.util.Stack; |
48 | 49 |
49 // TODO: refactor, extract ~DataCageGrid | 50 // TODO: refactor, extract ~DataCageGrid |
50 /** | 51 /** |
51 * Display tree of, for example, previous calculations and allows | 52 * Display tree of, for example, previous calculations and allows |
52 * selection in order to access/clone these. | 53 * selection in order to access/clone these. |
53 */ | 54 */ |
54 public class DatacageWidget | 55 public class DatacageWidget |
55 extends VLayout | 56 extends VLayout |
56 { | 57 { |
58 public static final int MAX_OPEN = 30; | |
59 | |
57 protected MetaDataServiceAsync metaDataService = | 60 protected MetaDataServiceAsync metaDataService = |
58 GWT.create(MetaDataService.class); | 61 GWT.create(MetaDataService.class); |
59 | 62 |
60 protected FLYSConstants messages = | 63 protected FLYSConstants messages = |
61 GWT.create(FLYSConstants.class); | 64 GWT.create(FLYSConstants.class); |
115 toLoad = new ToLoad(); | 118 toLoad = new ToLoad(); |
116 | 119 |
117 setWidth100(); | 120 setWidth100(); |
118 | 121 |
119 tree = new Tree(); | 122 tree = new Tree(); |
120 tree.setModelType(TreeModelType.PARENT); | 123 tree.setModelType(TreeModelType.CHILDREN); |
121 tree.setNameProperty("name"); | 124 tree.setNameProperty("name"); |
122 tree.setIdField("id"); | 125 tree.setIdField("id"); |
123 tree.setParentIdField("parent-id"); | 126 tree.setChildrenProperty("children-nodes"); |
127 tree.setShowRoot(false); | |
124 | 128 |
125 treeGrid = new TreeGrid(); | 129 treeGrid = new TreeGrid(); |
126 treeGrid.setLoadDataOnDemand(false); | 130 treeGrid.setLoadDataOnDemand(false); |
127 treeGrid.setWidth100(); | 131 treeGrid.setWidth100(); |
128 treeGrid.setHeight100(); | 132 treeGrid.setHeight100(); |
129 treeGrid.setShowRoot(false); | 133 treeGrid.setShowRoot(false); |
134 treeGrid.setNodeIcon("[SKIN]/images/blank.gif"); | |
135 treeGrid.setShowConnectors(true); | |
130 | 136 |
131 treeGrid.addRecordDoubleClickHandler(new RecordDoubleClickHandler() { | 137 treeGrid.addRecordDoubleClickHandler(new RecordDoubleClickHandler() { |
132 @Override | 138 @Override |
133 public void onRecordDoubleClick(RecordDoubleClickEvent event) { | 139 public void onRecordDoubleClick(RecordDoubleClickEvent event) { |
134 doubleClickedOnTree(event); | 140 doubleClickedOnTree(event); |
271 } | 277 } |
272 } | 278 } |
273 | 279 |
274 | 280 |
275 protected Button createPlusButton() { | 281 protected Button createPlusButton() { |
276 // TODO: i18n + icon | 282 Button plusBtn = new Button(messages.datacageAdd()); |
277 Button plusBtn = new Button("+"); | |
278 plusBtn.addClickHandler(new ClickHandler() { | 283 plusBtn.addClickHandler(new ClickHandler() { |
279 @Override | 284 @Override |
280 public void onClick(ClickEvent event) { | 285 public void onClick(ClickEvent event) { |
281 plusClicked(); | 286 plusClicked(); |
282 } | 287 } |
352 SC.warn(caught.getMessage()); | 357 SC.warn(caught.getMessage()); |
353 } | 358 } |
354 | 359 |
355 public void onSuccess(DataCageTree dcTree) { | 360 public void onSuccess(DataCageTree dcTree) { |
356 GWT.log("Successfully loaded meta data."); | 361 GWT.log("Successfully loaded meta data."); |
357 tree.setData(treeToData(dcTree)); | 362 IdGenerator idGenerator = new IdGenerator(); |
363 DataCageNode dcRoot = dcTree.getRoot(); | |
364 TreeNode root = buildRecursiveChildren( | |
365 dcRoot, idGenerator); | |
366 tree.setRoot(root); | |
367 if (idGenerator.current() < MAX_OPEN) { | |
368 tree.openAll(); | |
369 } | |
358 treeGrid.setData(tree); | 370 treeGrid.setData(tree); |
359 } | 371 } |
360 }); | 372 }); |
361 } | 373 } |
362 | 374 |
363 private static class IdGenerator { | 375 private static final class IdGenerator { |
364 protected int current; | 376 protected int current; |
365 | 377 |
366 public IdGenerator() { | 378 public IdGenerator() { |
367 } | |
368 | |
369 public IdGenerator(int start) { | |
370 current = start; | |
371 } | 379 } |
372 | 380 |
373 public int next() { | 381 public int next() { |
374 return current++; | 382 return current++; |
375 } | 383 } |
384 | |
385 public int current() { | |
386 return current; | |
387 } | |
376 } // class IdGenerator | 388 } // class IdGenerator |
377 | 389 |
378 protected static void buildRecursive( | 390 private String i18n(String s) { |
391 if (!(s.startsWith("${") && s.endsWith("}"))) { | |
392 return s; | |
393 } | |
394 | |
395 s = s.substring(2, s.length()-1); | |
396 | |
397 try { | |
398 return messages.getString(s); | |
399 } | |
400 catch (MissingResourceException mre) { | |
401 GWT.log("cannot find i18n for + '" + s + "'"); | |
402 return s; | |
403 } | |
404 } | |
405 | |
406 protected TreeNode buildRecursiveChildren( | |
379 DataCageNode node, | 407 DataCageNode node, |
380 int parentId, | 408 IdGenerator idGenerator |
381 IdGenerator idGenerator, | |
382 List<TreeNode> nodes | |
383 ) { | 409 ) { |
384 TreeNode tn = new TreeNode(); | 410 TreeNode tn = new TreeNode(); |
385 int id = idGenerator.next(); | 411 tn.setAttribute("id", idGenerator.next()); |
386 tn.setAttribute("parent-id", parentId); | 412 |
387 tn.setAttribute("id", id); | 413 List<DataCageNode> children = node.getChildren(); |
388 // TODO: i18n | 414 |
389 tn.setAttribute("name", node.getDescription()); | 415 if (children != null) { |
416 TreeNode [] tns = new TreeNode[children.size()]; | |
417 for (int i = 0; i < tns.length; ++i) { | |
418 DataCageNode child = children.get(i); | |
419 tns[i] = buildRecursiveChildren(child, idGenerator); | |
420 } | |
421 tn.setAttribute("children-nodes", tns); | |
422 } | |
423 | |
424 tn.setAttribute("name", i18n(node.getDescription())); | |
390 tn.setAttribute("facet", node.getName()); | 425 tn.setAttribute("facet", node.getName()); |
391 nodes.add(tn); | 426 |
392 AttrList attrs = node.getAttributes(); | 427 AttrList attrs = node.getAttributes(); |
393 if (attrs != null) { | 428 if (attrs != null) { |
394 for (int i = 0, N = attrs.size(); i < N; ++i) { | 429 for (int i = 0, N = attrs.size(); i < N; ++i) { |
395 String key = attrs.getKey(i); | 430 String key = attrs.getKey(i); |
396 String value = attrs.getValue(i); | 431 String value = attrs.getValue(i); |
397 tn.setAttribute(key, value); | 432 tn.setAttribute(key, value); |
398 } | 433 } |
399 } | 434 } |
400 List<DataCageNode> children = node.getChildren(); | 435 |
401 if (children != null) { | 436 return tn; |
402 for (DataCageNode child: children) { | |
403 buildRecursive(child, id, idGenerator, nodes); | |
404 } | |
405 } | |
406 } | |
407 | |
408 | |
409 protected static TreeNode [] treeToData(DataCageTree tree) { | |
410 List<TreeNode> nodes = new ArrayList<TreeNode>(); | |
411 | |
412 DataCageNode root = tree.getRoot(); | |
413 | |
414 IdGenerator idGenerator = new IdGenerator(); | |
415 | |
416 buildRecursive(root, idGenerator.next(), idGenerator, nodes); | |
417 | |
418 return nodes.toArray(new TreeNode[nodes.size()]); | |
419 } | 437 } |
420 } | 438 } |
421 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : | 439 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : |