diff flys-client/src/main/java/de/intevation/flys/client/server/MetaDataServiceImpl.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 0fa8bf8a2295
line wrap: on
line diff
--- a/flys-client/src/main/java/de/intevation/flys/client/server/MetaDataServiceImpl.java	Wed May 11 15:33:54 2011 +0000
+++ b/flys-client/src/main/java/de/intevation/flys/client/server/MetaDataServiceImpl.java	Wed May 11 16:38:54 2011 +0000
@@ -23,6 +23,9 @@
 import de.intevation.artifacts.httpclient.http.HttpClient;
 import de.intevation.artifacts.httpclient.http.HttpClientImpl;
 
+import de.intevation.flys.client.shared.model.DataCageTree;
+import de.intevation.flys.client.shared.model.DataCageNode;
+
 public class MetaDataServiceImpl
 extends      RemoteServiceServlet
 implements   MetaDataService
@@ -30,7 +33,7 @@
     public static final String ERROR_NO_META_DATA_FOUND =
         "error_no_meta_data_found";
 
-    public List getMetaData(String url, String locale, String river) 
+    public DataCageTree getMetaData(String url, String locale, String river) 
     throws ServerException
     {
         System.out.println("MetaDataService.getDistanceInfo");
@@ -51,9 +54,7 @@
         HttpClient client = new HttpClientImpl(url, locale);
 
         try {
-            Document result = client.callService(url, "metadata", doc);
-
-            return new ArrayList();
+            return convert(client.callService(url, "metadata", doc));
         }
         catch (ConnectionException ce) {
             System.err.println(ce.getLocalizedMessage());
@@ -61,5 +62,27 @@
 
         throw new ServerException(ERROR_NO_META_DATA_FOUND);
     }
+
+    protected static DataCageNode convert(Node node) {
+        String name = node.getLocalName();
+        DataCageNode dvn = new DataCageNode(name);
+        NodeList children = node.getChildNodes();
+        for (int i = 0, N = children.getLength(); i < N; ++i) {
+            dvn.addChild(convert(children.item(i)));
+        }
+        return dvn;
+    }
+
+    protected static DataCageTree convert(Document document) {
+        ArrayList<DataCageNode> roots = new ArrayList<DataCageNode>();
+        NodeList nodes = document.getChildNodes();
+        for (int i = 0, N = nodes.getLength(); i < N; ++i) {
+            Node node = nodes.item(i);
+            if (node.getNodeType() == Node.ELEMENT_NODE) {
+                roots.add(convert(nodes.item(i)));
+            }
+        }
+        return new DataCageTree(roots.get(0));
+    }
 }
 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org