diff flys-client/src/main/java/de/intevation/flys/client/server/DescribeCollectionServiceImpl.java @ 270:d01b0d81b92a

Parse the facets of a Collection and distinguish between an ordinary OutputMode and an ExportMode (new). flys-client/trunk@1895 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Ingo Weinzierl <ingo.weinzierl@intevation.de>
date Wed, 11 May 2011 09:11:40 +0000
parents 924da6695800
children ba238f917b94
line wrap: on
line diff
--- a/flys-client/src/main/java/de/intevation/flys/client/server/DescribeCollectionServiceImpl.java	Wed May 11 07:32:08 2011 +0000
+++ b/flys-client/src/main/java/de/intevation/flys/client/server/DescribeCollectionServiceImpl.java	Wed May 11 09:11:40 2011 +0000
@@ -25,7 +25,10 @@
 import de.intevation.flys.client.shared.model.CollectionItem;
 import de.intevation.flys.client.shared.model.DefaultCollection;
 import de.intevation.flys.client.shared.model.DefaultCollectionItem;
+import de.intevation.flys.client.shared.model.DefaultFacet;
 import de.intevation.flys.client.shared.model.DefaultOutputMode;
+import de.intevation.flys.client.shared.model.ExportMode;
+import de.intevation.flys.client.shared.model.Facet;
 import de.intevation.flys.client.shared.model.OutputMode;
 import de.intevation.flys.client.client.services.DescribeCollectionService;
 
@@ -46,6 +49,8 @@
     public static final String ERROR_DESCRIBE_COLLECTION =
         "error_describe_collection";
 
+    public static final String XPATH_FACETS = "art:facets/art:facet";
+
 
     public Collection describe(String uuid, String serverUrl, String locale)
     throws ServerException
@@ -221,12 +226,48 @@
                 continue;
             }
 
-            // TODO Parse Facets
+            OutputMode outmode = null;
+            List<Facet> fs     = extractFacets(tmp);
 
-            modes.add(new DefaultOutputMode(name, desc, mime));
+            if (name.indexOf("export") > -1) {
+                outmode = new ExportMode(name, desc, mime, fs);
+            }
+            else {
+                outmode = new DefaultOutputMode(name, desc, mime, fs);
+            }
+
+            modes.add(outmode);
         }
 
         return modes;
     }
+
+
+    protected static List<Facet> extractFacets(Node outmode) {
+        System.out.println("ArtifactDescriptionFactory - extractFacets()");
+
+        NodeList facetList = (NodeList) XMLUtils.xpath(
+            outmode,
+            XPATH_FACETS,
+            XPathConstants.NODESET,
+            ArtifactNamespaceContext.INSTANCE);
+
+        int num = facetList != null ? facetList.getLength() : 0;
+
+        List<Facet> facets = new ArrayList<Facet>(num);
+
+        for (int i = 0; i < num; i++) {
+            Node facetNode = facetList.item(i);
+
+            String name = XMLUtils.xpathString(
+                facetNode, "@art:name", ArtifactNamespaceContext.INSTANCE);
+
+            if (name != null && name.length() > 0) {
+                facets.add(new DefaultFacet(name));
+            }
+        }
+
+        return facets;
+    }
 }
 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org