diff flys-client/src/main/java/de/intevation/flys/client/server/DescribeCollectionServiceImpl.java @ 809:e9337488bac3

The Collection now knows its already loaded recommendations - the CollectionView will not load recommendations that have already been loaded before. flys-client/trunk@2397 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Ingo Weinzierl <ingo.weinzierl@intevation.de>
date Fri, 22 Jul 2011 12:23:36 +0000
parents 374712890b94
children 112f95d7b286
line wrap: on
line diff
--- a/flys-client/src/main/java/de/intevation/flys/client/server/DescribeCollectionServiceImpl.java	Thu Jul 21 16:06:29 2011 +0000
+++ b/flys-client/src/main/java/de/intevation/flys/client/server/DescribeCollectionServiceImpl.java	Fri Jul 22 12:23:36 2011 +0000
@@ -31,6 +31,7 @@
 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.DefaultRecommendation;
 import de.intevation.flys.client.shared.model.DefaultTheme;
 import de.intevation.flys.client.shared.model.ChartMode;
 import de.intevation.flys.client.shared.model.ExportMode;
@@ -38,6 +39,7 @@
 import de.intevation.flys.client.shared.model.ReportMode;
 import de.intevation.flys.client.shared.model.Facet;
 import de.intevation.flys.client.shared.model.OutputMode;
+import de.intevation.flys.client.shared.model.Recommendation;
 import de.intevation.flys.client.shared.model.Theme;
 import de.intevation.flys.client.shared.model.ThemeList;
 import de.intevation.flys.client.client.services.DescribeCollectionService;
@@ -61,6 +63,9 @@
 
     public static final String XPATH_FACETS = "art:facets/art:facet";
 
+    public static final String XPATH_LOADED_RECOMMENDATIONS =
+        "/art:artifact-collection/art:attribute/art:loaded-recommendations/art:recommendation";
+
 
     public Collection describe(String uuid, String serverUrl, String locale)
     throws ServerException
@@ -137,10 +142,11 @@
         }
 
         Map<String, ThemeList> themeList = parseThemeLists(description);
+        List<Recommendation> recommended = parseRecommendations(description);
 
         Collection c = !themeList.isEmpty()
-            ? new DefaultCollection(uuid, ttl, themeList)
-            : new DefaultCollection(uuid, ttl);
+            ? new DefaultCollection(uuid, ttl, recommended, themeList)
+            : new DefaultCollection(uuid, ttl, recommended);
 
         NodeList items = (NodeList) XMLUtils.xpath(
             description,
@@ -361,7 +367,7 @@
 
 
     protected static List<Facet> extractFacets(Element outmode) {
-        System.out.println("ArtifactDescriptionFactory - extractFacets()");
+        System.out.println("DescribeCollectionServiceImpl - extractFacets()");
 
         NodeList facetList = (NodeList) XMLUtils.xpath(
             outmode,
@@ -389,5 +395,35 @@
 
         return facets;
     }
+
+
+    public static List<Recommendation> parseRecommendations(Document doc) {
+        System.out.println("DescribeCollectionServiceImpl.parseRecommendations");
+
+        NodeList list = (NodeList) XMLUtils.xpath(
+            doc,
+            XPATH_LOADED_RECOMMENDATIONS,
+            XPathConstants.NODESET,
+            ArtifactNamespaceContext.INSTANCE);
+
+        int num = list != null ? list.getLength() : 0;
+
+        List<Recommendation> recs = new ArrayList<Recommendation>(num);
+
+        String uri = ArtifactNamespaceContext.NAMESPACE_URI;
+
+        for (int i = 0; i < num; i++) {
+            Element rec = (Element) list.item(i);
+
+            String factory = rec.getAttributeNS(uri, "factory");
+            String dbids   = rec.getAttributeNS(uri, "db-ids");
+
+            if (factory != null && factory.length() > 0) {
+                recs.add(new DefaultRecommendation(factory, dbids));
+            }
+        }
+
+        return recs;
+    }
 }
 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org