comparison 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
comparison
equal deleted inserted replaced
808:3187b268b311 809:e9337488bac3
29 import de.intevation.flys.client.shared.model.Collection; 29 import de.intevation.flys.client.shared.model.Collection;
30 import de.intevation.flys.client.shared.model.CollectionItem; 30 import de.intevation.flys.client.shared.model.CollectionItem;
31 import de.intevation.flys.client.shared.model.DefaultCollection; 31 import de.intevation.flys.client.shared.model.DefaultCollection;
32 import de.intevation.flys.client.shared.model.DefaultCollectionItem; 32 import de.intevation.flys.client.shared.model.DefaultCollectionItem;
33 import de.intevation.flys.client.shared.model.DefaultFacet; 33 import de.intevation.flys.client.shared.model.DefaultFacet;
34 import de.intevation.flys.client.shared.model.DefaultRecommendation;
34 import de.intevation.flys.client.shared.model.DefaultTheme; 35 import de.intevation.flys.client.shared.model.DefaultTheme;
35 import de.intevation.flys.client.shared.model.ChartMode; 36 import de.intevation.flys.client.shared.model.ChartMode;
36 import de.intevation.flys.client.shared.model.ExportMode; 37 import de.intevation.flys.client.shared.model.ExportMode;
37 import de.intevation.flys.client.shared.model.MapMode; 38 import de.intevation.flys.client.shared.model.MapMode;
38 import de.intevation.flys.client.shared.model.ReportMode; 39 import de.intevation.flys.client.shared.model.ReportMode;
39 import de.intevation.flys.client.shared.model.Facet; 40 import de.intevation.flys.client.shared.model.Facet;
40 import de.intevation.flys.client.shared.model.OutputMode; 41 import de.intevation.flys.client.shared.model.OutputMode;
42 import de.intevation.flys.client.shared.model.Recommendation;
41 import de.intevation.flys.client.shared.model.Theme; 43 import de.intevation.flys.client.shared.model.Theme;
42 import de.intevation.flys.client.shared.model.ThemeList; 44 import de.intevation.flys.client.shared.model.ThemeList;
43 import de.intevation.flys.client.client.services.DescribeCollectionService; 45 import de.intevation.flys.client.client.services.DescribeCollectionService;
44 46
45 47
59 public static final String ERROR_DESCRIBE_COLLECTION = 61 public static final String ERROR_DESCRIBE_COLLECTION =
60 "error_describe_collection"; 62 "error_describe_collection";
61 63
62 public static final String XPATH_FACETS = "art:facets/art:facet"; 64 public static final String XPATH_FACETS = "art:facets/art:facet";
63 65
66 public static final String XPATH_LOADED_RECOMMENDATIONS =
67 "/art:artifact-collection/art:attribute/art:loaded-recommendations/art:recommendation";
68
64 69
65 public Collection describe(String uuid, String serverUrl, String locale) 70 public Collection describe(String uuid, String serverUrl, String locale)
66 throws ServerException 71 throws ServerException
67 { 72 {
68 System.out.println("DescribeCollectionServiceImpl.describe"); 73 System.out.println("DescribeCollectionServiceImpl.describe");
135 catch (NumberFormatException nfe) { 140 catch (NumberFormatException nfe) {
136 // do nothing 141 // do nothing
137 } 142 }
138 143
139 Map<String, ThemeList> themeList = parseThemeLists(description); 144 Map<String, ThemeList> themeList = parseThemeLists(description);
145 List<Recommendation> recommended = parseRecommendations(description);
140 146
141 Collection c = !themeList.isEmpty() 147 Collection c = !themeList.isEmpty()
142 ? new DefaultCollection(uuid, ttl, themeList) 148 ? new DefaultCollection(uuid, ttl, recommended, themeList)
143 : new DefaultCollection(uuid, ttl); 149 : new DefaultCollection(uuid, ttl, recommended);
144 150
145 NodeList items = (NodeList) XMLUtils.xpath( 151 NodeList items = (NodeList) XMLUtils.xpath(
146 description, 152 description,
147 "art:artifact-collection/art:artifacts/art:artifact", 153 "art:artifact-collection/art:artifacts/art:artifact",
148 XPathConstants.NODESET, 154 XPathConstants.NODESET,
359 return modes; 365 return modes;
360 } 366 }
361 367
362 368
363 protected static List<Facet> extractFacets(Element outmode) { 369 protected static List<Facet> extractFacets(Element outmode) {
364 System.out.println("ArtifactDescriptionFactory - extractFacets()"); 370 System.out.println("DescribeCollectionServiceImpl - extractFacets()");
365 371
366 NodeList facetList = (NodeList) XMLUtils.xpath( 372 NodeList facetList = (NodeList) XMLUtils.xpath(
367 outmode, 373 outmode,
368 XPATH_FACETS, 374 XPATH_FACETS,
369 XPathConstants.NODESET, 375 XPathConstants.NODESET,
387 } 393 }
388 } 394 }
389 395
390 return facets; 396 return facets;
391 } 397 }
398
399
400 public static List<Recommendation> parseRecommendations(Document doc) {
401 System.out.println("DescribeCollectionServiceImpl.parseRecommendations");
402
403 NodeList list = (NodeList) XMLUtils.xpath(
404 doc,
405 XPATH_LOADED_RECOMMENDATIONS,
406 XPathConstants.NODESET,
407 ArtifactNamespaceContext.INSTANCE);
408
409 int num = list != null ? list.getLength() : 0;
410
411 List<Recommendation> recs = new ArrayList<Recommendation>(num);
412
413 String uri = ArtifactNamespaceContext.NAMESPACE_URI;
414
415 for (int i = 0; i < num; i++) {
416 Element rec = (Element) list.item(i);
417
418 String factory = rec.getAttributeNS(uri, "factory");
419 String dbids = rec.getAttributeNS(uri, "db-ids");
420
421 if (factory != null && factory.length() > 0) {
422 recs.add(new DefaultRecommendation(factory, dbids));
423 }
424 }
425
426 return recs;
427 }
392 } 428 }
393 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : 429 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org