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();

http://dive4elements.wald.intevation.org