Mercurial > dive4elements > river
diff flys-client/src/main/java/de/intevation/flys/client/client/ui/DatacageWindow.java @ 278:f33af25b7490
Datacage: transport rpc result to ui.
flys-client/trunk@1905 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Wed, 11 May 2011 16:38:54 +0000 |
parents | f4c8ce11df33 |
children | 3629d36f0e5d |
line wrap: on
line diff
--- a/flys-client/src/main/java/de/intevation/flys/client/client/ui/DatacageWindow.java Wed May 11 15:33:54 2011 +0000 +++ b/flys-client/src/main/java/de/intevation/flys/client/client/ui/DatacageWindow.java Wed May 11 16:38:54 2011 +0000 @@ -1,6 +1,7 @@ package de.intevation.flys.client.client.ui; import java.util.List; +import java.util.ArrayList; import com.google.gwt.core.client.GWT; @@ -10,6 +11,12 @@ import com.smartgwt.client.widgets.Window; +import com.smartgwt.client.widgets.tree.Tree; +import com.smartgwt.client.widgets.tree.TreeNode; +import com.smartgwt.client.widgets.tree.TreeGrid; + +import com.smartgwt.client.widgets.layout.Layout; +import com.smartgwt.client.widgets.layout.VLayout; import de.intevation.flys.client.shared.model.Artifact; import de.intevation.flys.client.shared.model.ArtifactDescription; @@ -23,6 +30,8 @@ import de.intevation.flys.client.client.services.MetaDataService; import de.intevation.flys.client.client.services.MetaDataServiceAsync; +import de.intevation.flys.client.shared.model.DataCageTree; +import de.intevation.flys.client.shared.model.DataCageNode; public class DatacageWindow extends Window @@ -36,14 +45,36 @@ protected Artifact artifact; + protected TreeGrid treeGrid; + + protected Layout layout; + + public DatacageWindow(Artifact artifact) { this.artifact = artifact; - setHeight(115); + + setWidth(200); + setHeight(300); + + layout = new VLayout(); + layout.setWidth100(); + + addItem(layout); + + treeGrid = new TreeGrid(); + treeGrid.setLoadDataOnDemand(false); + treeGrid.setWidth100(); + treeGrid.setHeight100(); + + layout.addMember(treeGrid); + String river = findRiver(); setTitle("Datenkorb: " + river); setShowMinimizeButton(false); setIsModal(true); setShowModalMask(true); + setCanDragResize(true); + centerInPage(); triggerTreeBuilding(river); @@ -56,18 +87,73 @@ metaDataService.getMetaData( url, locale, river, - new AsyncCallback<List>() { + new AsyncCallback<DataCageTree>() { public void onFailure(Throwable caught) { GWT.log("Could not load meta data."); SC.warn(messages.getString(caught.getMessage())); } - public void onSuccess(List list) { - GWT.log("Successfully created a new collection."); + public void onSuccess(DataCageTree tree) { + GWT.log("Successfully loaded meta data."); + buildTree(tree); } }); } + protected void buildTree(DataCageTree tree) { + treeGrid.setData(convert(tree)); + } + + protected static TreeNode convert(DataCageNode node) { + List<DataCageNode> children = node.getChildren(); + + TreeNode [] cs; + + if (children != null) { + ArrayList<TreeNode> nc = new ArrayList<TreeNode>(children.size()); + + for (DataCageNode dcn: children) { + nc.add(convert(dcn)); + } + + cs = nc.toArray(new TreeNode[nc.size()]); + } + else { + cs = new TreeNode[0]; + } + + return new TreeNode(node.getName(), cs); + } + + protected static Tree convert(DataCageTree tree) { + DataCageNode root = tree.getRoot(); + + List<DataCageNode> children = root.getChildren(); + + TreeNode [] cs; + + if (children != null) { + ArrayList<TreeNode> nc = new ArrayList<TreeNode>(children.size()); + + if (nc != null) { + for (DataCageNode dcn: children) { + nc.add(convert(dcn)); + } + } + cs = nc.toArray(new TreeNode[nc.size()]); + } + else { + cs = new TreeNode[0]; + } + + TreeNode rn = new TreeNode(root.getName(), cs); + + Tree r = new Tree(); + r.setRoot(rn); + + return r; + } + protected String findRiver() { ArtifactDescription adescr = artifact.getArtifactDescription();