annotate artifacts/src/main/java/org/dive4elements/river/artifacts/CollectionMonitor.java @ 7471:fff862f4ef76

Experimental caching of datacage recommendations. The respective hook is called a lot and running the datacage over and over again when loading data can be expensive. So the generated recommendations are cached for some time. Hopefully this improves the overall speed of loading data from the datacage.
author Sascha L. Teichmann <teichmann@intevation.de>
date Wed, 30 Oct 2013 15:26:21 +0100
parents f16dce7a2407
children f8e1af4e2f69
rev   line source
5863
4897a58c8746 River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
1 /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde
4897a58c8746 River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
2 * Software engineering by Intevation GmbH
4897a58c8746 River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
3 *
5994
af13ceeba52a Removed trailing whitespace.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5867
diff changeset
4 * This file is Free Software under the GNU AGPL (>=v3)
5863
4897a58c8746 River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
5 * and comes with ABSOLUTELY NO WARRANTY! Check out the
5994
af13ceeba52a Removed trailing whitespace.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5867
diff changeset
6 * documentation coming with Dive4Elements River for details.
5863
4897a58c8746 River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
7 */
4897a58c8746 River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
8
5831
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5107
diff changeset
9 package org.dive4elements.river.artifacts;
937
9e813e9137a5 Added a monitor that creates new artifacts for default themes in charts and maps.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
10
9e813e9137a5 Added a monitor that creates new artifacts for default themes in charts and maps.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
11 import java.util.HashMap;
9e813e9137a5 Added a monitor that creates new artifacts for default themes in charts and maps.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
12 import java.util.List;
9e813e9137a5 Added a monitor that creates new artifacts for default themes in charts and maps.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
13 import java.util.Map;
9e813e9137a5 Added a monitor that creates new artifacts for default themes in charts and maps.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
14
7471
fff862f4ef76 Experimental caching of datacage recommendations. The respective hook is called a lot and running the datacage over and over again when loading data can be expensive. So the generated recommendations are cached for some time.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7464
diff changeset
15 import net.sf.ehcache.Cache;
fff862f4ef76 Experimental caching of datacage recommendations. The respective hook is called a lot and running the datacage over and over again when loading data can be expensive. So the generated recommendations are cached for some time.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7464
diff changeset
16
937
9e813e9137a5 Added a monitor that creates new artifacts for default themes in charts and maps.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
17 import org.w3c.dom.Document;
9e813e9137a5 Added a monitor that creates new artifacts for default themes in charts and maps.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
18 import org.w3c.dom.Element;
9e813e9137a5 Added a monitor that creates new artifacts for default themes in charts and maps.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
19 import org.w3c.dom.Node;
7464
f16dce7a2407 Simplified recommendattion monitor code a bit.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7434
diff changeset
20 import org.w3c.dom.NodeList;
937
9e813e9137a5 Added a monitor that creates new artifacts for default themes in charts and maps.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
21
5831
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5107
diff changeset
22 import org.dive4elements.artifacts.Artifact;
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5107
diff changeset
23 import org.dive4elements.artifacts.ArtifactNamespaceContext;
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5107
diff changeset
24 import org.dive4elements.artifacts.CallContext;
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5107
diff changeset
25 import org.dive4elements.artifacts.Hook;
937
9e813e9137a5 Added a monitor that creates new artifacts for default themes in charts and maps.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
26
7471
fff862f4ef76 Experimental caching of datacage recommendations. The respective hook is called a lot and running the datacage over and over again when loading data can be expensive. So the generated recommendations are cached for some time.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7464
diff changeset
27 import org.dive4elements.artifacts.common.utils.XMLUtils;
5831
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5107
diff changeset
28 import org.dive4elements.artifacts.common.utils.XMLUtils.ElementCreator;
937
9e813e9137a5 Added a monitor that creates new artifacts for default themes in charts and maps.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
29
5831
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5107
diff changeset
30 import org.dive4elements.artifactdatabase.state.Output;
964
ff6ce301c472 Modified the CollectionMonitor (for recommended artifacts) to use the DataCage.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 940
diff changeset
31
7471
fff862f4ef76 Experimental caching of datacage recommendations. The respective hook is called a lot and running the datacage over and over again when loading data can be expensive. So the generated recommendations are cached for some time.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7464
diff changeset
32 import org.dive4elements.river.artifacts.cache.CacheFactory;
5831
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5107
diff changeset
33 import org.dive4elements.river.artifacts.datacage.Recommendations;
937
9e813e9137a5 Added a monitor that creates new artifacts for default themes in charts and maps.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
34
5107
a929d9a9fa1e Picky doc and whitespace fixes.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4527
diff changeset
35 /** Monitors collection changes. */
937
9e813e9137a5 Added a monitor that creates new artifacts for default themes in charts and maps.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
36 public class CollectionMonitor implements Hook {
9e813e9137a5 Added a monitor that creates new artifacts for default themes in charts and maps.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
37
7471
fff862f4ef76 Experimental caching of datacage recommendations. The respective hook is called a lot and running the datacage over and over again when loading data can be expensive. So the generated recommendations are cached for some time.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7464
diff changeset
38 public static final String CACHE_NAME = "recommendations";
fff862f4ef76 Experimental caching of datacage recommendations. The respective hook is called a lot and running the datacage over and over again when loading data can be expensive. So the generated recommendations are cached for some time.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7464
diff changeset
39
937
9e813e9137a5 Added a monitor that creates new artifacts for default themes in charts and maps.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
40 @Override
9e813e9137a5 Added a monitor that creates new artifacts for default themes in charts and maps.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
41 public void setup(Node cfg) {
9e813e9137a5 Added a monitor that creates new artifacts for default themes in charts and maps.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
42 }
9e813e9137a5 Added a monitor that creates new artifacts for default themes in charts and maps.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
43
9e813e9137a5 Added a monitor that creates new artifacts for default themes in charts and maps.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
44
9e813e9137a5 Added a monitor that creates new artifacts for default themes in charts and maps.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
45 @Override
940
f4439e015278 Append artifact recommendations to the artifact's describe document.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 937
diff changeset
46 public void execute(Artifact artifact, CallContext context, Document doc) {
5867
59ff03ff48f1 River artifacts: Renamed FLYSArtifact(Collection) to D4EArtifact(Collection).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5863
diff changeset
47 D4EArtifact flys = (D4EArtifact) artifact;
937
9e813e9137a5 Added a monitor that creates new artifacts for default themes in charts and maps.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
48
7434
505b05e223b1 Experimental patch: Do not run datacage on artifacts that are loaded from datacage. His hopefully minimizes the datacage runs when a lot of data is loaded.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5994
diff changeset
49 // Do not generate recommendations for a loaded artifact.
505b05e223b1 Experimental patch: Do not run datacage on artifacts that are loaded from datacage. His hopefully minimizes the datacage runs when a lot of data is loaded.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5994
diff changeset
50 String out = flys.getBoundToOut();
505b05e223b1 Experimental patch: Do not run datacage on artifacts that are loaded from datacage. His hopefully minimizes the datacage runs when a lot of data is loaded.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5994
diff changeset
51 if (out != null && !out.isEmpty()) {
505b05e223b1 Experimental patch: Do not run datacage on artifacts that are loaded from datacage. His hopefully minimizes the datacage runs when a lot of data is loaded.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5994
diff changeset
52 return;
505b05e223b1 Experimental patch: Do not run datacage on artifacts that are loaded from datacage. His hopefully minimizes the datacage runs when a lot of data is loaded.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5994
diff changeset
53 }
505b05e223b1 Experimental patch: Do not run datacage on artifacts that are loaded from datacage. His hopefully minimizes the datacage runs when a lot of data is loaded.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5994
diff changeset
54
7464
f16dce7a2407 Simplified recommendattion monitor code a bit.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7434
diff changeset
55 NodeList results = doc.getElementsByTagNameNS(
f16dce7a2407 Simplified recommendattion monitor code a bit.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7434
diff changeset
56 ArtifactNamespaceContext.NAMESPACE_URI, "result");
f16dce7a2407 Simplified recommendattion monitor code a bit.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7434
diff changeset
57
f16dce7a2407 Simplified recommendattion monitor code a bit.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7434
diff changeset
58 if (results.getLength() < 1) {
f16dce7a2407 Simplified recommendattion monitor code a bit.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7434
diff changeset
59 return;
f16dce7a2407 Simplified recommendattion monitor code a bit.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7434
diff changeset
60 }
f16dce7a2407 Simplified recommendattion monitor code a bit.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7434
diff changeset
61
f16dce7a2407 Simplified recommendattion monitor code a bit.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7434
diff changeset
62 Element result = (Element)results.item(0);
937
9e813e9137a5 Added a monitor that creates new artifacts for default themes in charts and maps.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
63
7471
fff862f4ef76 Experimental caching of datacage recommendations. The respective hook is called a lot and running the datacage over and over again when loading data can be expensive. So the generated recommendations are cached for some time.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7464
diff changeset
64 result.appendChild(getRecommendedElement(flys, context, doc));
fff862f4ef76 Experimental caching of datacage recommendations. The respective hook is called a lot and running the datacage over and over again when loading data can be expensive. So the generated recommendations are cached for some time.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7464
diff changeset
65 }
fff862f4ef76 Experimental caching of datacage recommendations. The respective hook is called a lot and running the datacage over and over again when loading data can be expensive. So the generated recommendations are cached for some time.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7464
diff changeset
66
fff862f4ef76 Experimental caching of datacage recommendations. The respective hook is called a lot and running the datacage over and over again when loading data can be expensive. So the generated recommendations are cached for some time.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7464
diff changeset
67 protected Element getRecommendedElement(
fff862f4ef76 Experimental caching of datacage recommendations. The respective hook is called a lot and running the datacage over and over again when loading data can be expensive. So the generated recommendations are cached for some time.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7464
diff changeset
68 D4EArtifact artifact,
fff862f4ef76 Experimental caching of datacage recommendations. The respective hook is called a lot and running the datacage over and over again when loading data can be expensive. So the generated recommendations are cached for some time.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7464
diff changeset
69 CallContext context,
fff862f4ef76 Experimental caching of datacage recommendations. The respective hook is called a lot and running the datacage over and over again when loading data can be expensive. So the generated recommendations are cached for some time.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7464
diff changeset
70 Document doc
fff862f4ef76 Experimental caching of datacage recommendations. The respective hook is called a lot and running the datacage over and over again when loading data can be expensive. So the generated recommendations are cached for some time.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7464
diff changeset
71 ) {
fff862f4ef76 Experimental caching of datacage recommendations. The respective hook is called a lot and running the datacage over and over again when loading data can be expensive. So the generated recommendations are cached for some time.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7464
diff changeset
72 String [] outs = extractOutputNames(artifact, context);
fff862f4ef76 Experimental caching of datacage recommendations. The respective hook is called a lot and running the datacage over and over again when loading data can be expensive. So the generated recommendations are cached for some time.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7464
diff changeset
73
fff862f4ef76 Experimental caching of datacage recommendations. The respective hook is called a lot and running the datacage over and over again when loading data can be expensive. So the generated recommendations are cached for some time.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7464
diff changeset
74 Element recommendations = null;
fff862f4ef76 Experimental caching of datacage recommendations. The respective hook is called a lot and running the datacage over and over again when loading data can be expensive. So the generated recommendations are cached for some time.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7464
diff changeset
75
fff862f4ef76 Experimental caching of datacage recommendations. The respective hook is called a lot and running the datacage over and over again when loading data can be expensive. So the generated recommendations are cached for some time.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7464
diff changeset
76 Cache cache = CacheFactory.getCache(CACHE_NAME);
fff862f4ef76 Experimental caching of datacage recommendations. The respective hook is called a lot and running the datacage over and over again when loading data can be expensive. So the generated recommendations are cached for some time.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7464
diff changeset
77
fff862f4ef76 Experimental caching of datacage recommendations. The respective hook is called a lot and running the datacage over and over again when loading data can be expensive. So the generated recommendations are cached for some time.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7464
diff changeset
78 if (cache != null) {
fff862f4ef76 Experimental caching of datacage recommendations. The respective hook is called a lot and running the datacage over and over again when loading data can be expensive. So the generated recommendations are cached for some time.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7464
diff changeset
79 String key = generateCacheKey(artifact, outs);
fff862f4ef76 Experimental caching of datacage recommendations. The respective hook is called a lot and running the datacage over and over again when loading data can be expensive. So the generated recommendations are cached for some time.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7464
diff changeset
80
fff862f4ef76 Experimental caching of datacage recommendations. The respective hook is called a lot and running the datacage over and over again when loading data can be expensive. So the generated recommendations are cached for some time.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7464
diff changeset
81 net.sf.ehcache.Element ce = cache.get(key);
fff862f4ef76 Experimental caching of datacage recommendations. The respective hook is called a lot and running the datacage over and over again when loading data can be expensive. So the generated recommendations are cached for some time.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7464
diff changeset
82 if (ce != null) { // Found in cache.
fff862f4ef76 Experimental caching of datacage recommendations. The respective hook is called a lot and running the datacage over and over again when loading data can be expensive. So the generated recommendations are cached for some time.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7464
diff changeset
83 Element e = (Element)ce.getValue();
fff862f4ef76 Experimental caching of datacage recommendations. The respective hook is called a lot and running the datacage over and over again when loading data can be expensive. So the generated recommendations are cached for some time.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7464
diff changeset
84 // Sync to avoid thread issues with XML DOM docs.
fff862f4ef76 Experimental caching of datacage recommendations. The respective hook is called a lot and running the datacage over and over again when loading data can be expensive. So the generated recommendations are cached for some time.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7464
diff changeset
85 synchronized (e.getOwnerDocument()) {
fff862f4ef76 Experimental caching of datacage recommendations. The respective hook is called a lot and running the datacage over and over again when loading data can be expensive. So the generated recommendations are cached for some time.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7464
diff changeset
86 recommendations = (Element)doc.importNode(e, true);
fff862f4ef76 Experimental caching of datacage recommendations. The respective hook is called a lot and running the datacage over and over again when loading data can be expensive. So the generated recommendations are cached for some time.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7464
diff changeset
87 }
fff862f4ef76 Experimental caching of datacage recommendations. The respective hook is called a lot and running the datacage over and over again when loading data can be expensive. So the generated recommendations are cached for some time.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7464
diff changeset
88 } else { // Not found in cache -> generate it.
fff862f4ef76 Experimental caching of datacage recommendations. The respective hook is called a lot and running the datacage over and over again when loading data can be expensive. So the generated recommendations are cached for some time.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7464
diff changeset
89 Element r = createElement(XMLUtils.newDocument());
fff862f4ef76 Experimental caching of datacage recommendations. The respective hook is called a lot and running the datacage over and over again when loading data can be expensive. So the generated recommendations are cached for some time.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7464
diff changeset
90
fff862f4ef76 Experimental caching of datacage recommendations. The respective hook is called a lot and running the datacage over and over again when loading data can be expensive. So the generated recommendations are cached for some time.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7464
diff changeset
91 Recommendations.getInstance().recommend(
fff862f4ef76 Experimental caching of datacage recommendations. The respective hook is called a lot and running the datacage over and over again when loading data can be expensive. So the generated recommendations are cached for some time.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7464
diff changeset
92 artifact, null, outs,
fff862f4ef76 Experimental caching of datacage recommendations. The respective hook is called a lot and running the datacage over and over again when loading data can be expensive. So the generated recommendations are cached for some time.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7464
diff changeset
93 getNoneUserSpecificParameters(artifact, context), r);
fff862f4ef76 Experimental caching of datacage recommendations. The respective hook is called a lot and running the datacage over and over again when loading data can be expensive. So the generated recommendations are cached for some time.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7464
diff changeset
94
fff862f4ef76 Experimental caching of datacage recommendations. The respective hook is called a lot and running the datacage over and over again when loading data can be expensive. So the generated recommendations are cached for some time.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7464
diff changeset
95 recommendations = (Element)doc.importNode(r, true);
fff862f4ef76 Experimental caching of datacage recommendations. The respective hook is called a lot and running the datacage over and over again when loading data can be expensive. So the generated recommendations are cached for some time.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7464
diff changeset
96
fff862f4ef76 Experimental caching of datacage recommendations. The respective hook is called a lot and running the datacage over and over again when loading data can be expensive. So the generated recommendations are cached for some time.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7464
diff changeset
97 cache.put(new net.sf.ehcache.Element(key, r));
fff862f4ef76 Experimental caching of datacage recommendations. The respective hook is called a lot and running the datacage over and over again when loading data can be expensive. So the generated recommendations are cached for some time.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7464
diff changeset
98 }
fff862f4ef76 Experimental caching of datacage recommendations. The respective hook is called a lot and running the datacage over and over again when loading data can be expensive. So the generated recommendations are cached for some time.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7464
diff changeset
99 } else { // No cache configured -> append directly.
fff862f4ef76 Experimental caching of datacage recommendations. The respective hook is called a lot and running the datacage over and over again when loading data can be expensive. So the generated recommendations are cached for some time.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7464
diff changeset
100
fff862f4ef76 Experimental caching of datacage recommendations. The respective hook is called a lot and running the datacage over and over again when loading data can be expensive. So the generated recommendations are cached for some time.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7464
diff changeset
101 recommendations = createElement(doc);
fff862f4ef76 Experimental caching of datacage recommendations. The respective hook is called a lot and running the datacage over and over again when loading data can be expensive. So the generated recommendations are cached for some time.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7464
diff changeset
102
fff862f4ef76 Experimental caching of datacage recommendations. The respective hook is called a lot and running the datacage over and over again when loading data can be expensive. So the generated recommendations are cached for some time.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7464
diff changeset
103 Recommendations.getInstance().recommend(
fff862f4ef76 Experimental caching of datacage recommendations. The respective hook is called a lot and running the datacage over and over again when loading data can be expensive. So the generated recommendations are cached for some time.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7464
diff changeset
104 artifact, null, outs,
fff862f4ef76 Experimental caching of datacage recommendations. The respective hook is called a lot and running the datacage over and over again when loading data can be expensive. So the generated recommendations are cached for some time.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7464
diff changeset
105 getNoneUserSpecificParameters(artifact, context),
fff862f4ef76 Experimental caching of datacage recommendations. The respective hook is called a lot and running the datacage over and over again when loading data can be expensive. So the generated recommendations are cached for some time.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7464
diff changeset
106 recommendations);
fff862f4ef76 Experimental caching of datacage recommendations. The respective hook is called a lot and running the datacage over and over again when loading data can be expensive. So the generated recommendations are cached for some time.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7464
diff changeset
107 }
fff862f4ef76 Experimental caching of datacage recommendations. The respective hook is called a lot and running the datacage over and over again when loading data can be expensive. So the generated recommendations are cached for some time.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7464
diff changeset
108
fff862f4ef76 Experimental caching of datacage recommendations. The respective hook is called a lot and running the datacage over and over again when loading data can be expensive. So the generated recommendations are cached for some time.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7464
diff changeset
109 return recommendations;
fff862f4ef76 Experimental caching of datacage recommendations. The respective hook is called a lot and running the datacage over and over again when loading data can be expensive. So the generated recommendations are cached for some time.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7464
diff changeset
110 }
fff862f4ef76 Experimental caching of datacage recommendations. The respective hook is called a lot and running the datacage over and over again when loading data can be expensive. So the generated recommendations are cached for some time.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7464
diff changeset
111
fff862f4ef76 Experimental caching of datacage recommendations. The respective hook is called a lot and running the datacage over and over again when loading data can be expensive. So the generated recommendations are cached for some time.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7464
diff changeset
112 private static final Element createElement(Document doc) {
940
f4439e015278 Append artifact recommendations to the artifact's describe document.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 937
diff changeset
113 ElementCreator creator = new ElementCreator(
f4439e015278 Append artifact recommendations to the artifact's describe document.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 937
diff changeset
114 doc,
f4439e015278 Append artifact recommendations to the artifact's describe document.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 937
diff changeset
115 ArtifactNamespaceContext.NAMESPACE_URI,
f4439e015278 Append artifact recommendations to the artifact's describe document.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 937
diff changeset
116 ArtifactNamespaceContext.NAMESPACE_PREFIX);
937
9e813e9137a5 Added a monitor that creates new artifacts for default themes in charts and maps.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
117
7471
fff862f4ef76 Experimental caching of datacage recommendations. The respective hook is called a lot and running the datacage over and over again when loading data can be expensive. So the generated recommendations are cached for some time.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7464
diff changeset
118 return creator.create("recommended-artifacts");
fff862f4ef76 Experimental caching of datacage recommendations. The respective hook is called a lot and running the datacage over and over again when loading data can be expensive. So the generated recommendations are cached for some time.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7464
diff changeset
119 }
940
f4439e015278 Append artifact recommendations to the artifact's describe document.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 937
diff changeset
120
7471
fff862f4ef76 Experimental caching of datacage recommendations. The respective hook is called a lot and running the datacage over and over again when loading data can be expensive. So the generated recommendations are cached for some time.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7464
diff changeset
121 private static final String generateCacheKey(D4EArtifact artifact, String [] outs) {
fff862f4ef76 Experimental caching of datacage recommendations. The respective hook is called a lot and running the datacage over and over again when loading data can be expensive. So the generated recommendations are cached for some time.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7464
diff changeset
122 StringBuilder sb = new StringBuilder(artifact.hash());
fff862f4ef76 Experimental caching of datacage recommendations. The respective hook is called a lot and running the datacage over and over again when loading data can be expensive. So the generated recommendations are cached for some time.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7464
diff changeset
123 // XXX: The hash really should be unique enough.
fff862f4ef76 Experimental caching of datacage recommendations. The respective hook is called a lot and running the datacage over and over again when loading data can be expensive. So the generated recommendations are cached for some time.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7464
diff changeset
124 for (String out: outs) {
fff862f4ef76 Experimental caching of datacage recommendations. The respective hook is called a lot and running the datacage over and over again when loading data can be expensive. So the generated recommendations are cached for some time.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7464
diff changeset
125 sb.append(';').append(out);
fff862f4ef76 Experimental caching of datacage recommendations. The respective hook is called a lot and running the datacage over and over again when loading data can be expensive. So the generated recommendations are cached for some time.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7464
diff changeset
126 }
fff862f4ef76 Experimental caching of datacage recommendations. The respective hook is called a lot and running the datacage over and over again when loading data can be expensive. So the generated recommendations are cached for some time.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7464
diff changeset
127 return sb.toString();
964
ff6ce301c472 Modified the CollectionMonitor (for recommended artifacts) to use the DataCage.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 940
diff changeset
128 }
ff6ce301c472 Modified the CollectionMonitor (for recommended artifacts) to use the DataCage.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 940
diff changeset
129
ff6ce301c472 Modified the CollectionMonitor (for recommended artifacts) to use the DataCage.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 940
diff changeset
130
1834
9eedda250280 Extract output names from artifact, not from state. Important when querying recommendations for an artifact with these outputs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1654
diff changeset
131 /**
9eedda250280 Extract output names from artifact, not from state. Important when querying recommendations for an artifact with these outputs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1654
diff changeset
132 * Get outputnames from current state (only the ones for which
9eedda250280 Extract output names from artifact, not from state. Important when querying recommendations for an artifact with these outputs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1654
diff changeset
133 * facets exist).
9eedda250280 Extract output names from artifact, not from state. Important when querying recommendations for an artifact with these outputs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1654
diff changeset
134 */
7471
fff862f4ef76 Experimental caching of datacage recommendations. The respective hook is called a lot and running the datacage over and over again when loading data can be expensive. So the generated recommendations are cached for some time.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7464
diff changeset
135 private static final String [] extractOutputNames(
5867
59ff03ff48f1 River artifacts: Renamed FLYSArtifact(Collection) to D4EArtifact(Collection).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5863
diff changeset
136 D4EArtifact flys,
964
ff6ce301c472 Modified the CollectionMonitor (for recommended artifacts) to use the DataCage.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 940
diff changeset
137 CallContext context)
ff6ce301c472 Modified the CollectionMonitor (for recommended artifacts) to use the DataCage.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 940
diff changeset
138 {
2132
e8fc770d2f8c 'New Chart' for computed discharge curve.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1858
diff changeset
139 if (flys instanceof ChartArtifact) {
e8fc770d2f8c 'New Chart' for computed discharge curve.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1858
diff changeset
140 return new String[0];
e8fc770d2f8c 'New Chart' for computed discharge curve.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1858
diff changeset
141 }
e8fc770d2f8c 'New Chart' for computed discharge curve.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1858
diff changeset
142
4527
06c10ad39280 Cosmetics.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4051
diff changeset
143 List<Output> outs = flys.getCurrentOutputs(context);
964
ff6ce301c472 Modified the CollectionMonitor (for recommended artifacts) to use the DataCage.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 940
diff changeset
144
1012
388e709224ec Fixed potential NPE in collection monitor
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 998
diff changeset
145 int num = outs == null ? 0 : outs.size();
388e709224ec Fixed potential NPE in collection monitor
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 998
diff changeset
146
388e709224ec Fixed potential NPE in collection monitor
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 998
diff changeset
147 String[] names = new String[num];
388e709224ec Fixed potential NPE in collection monitor
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 998
diff changeset
148
388e709224ec Fixed potential NPE in collection monitor
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 998
diff changeset
149 for (int i = 0; i < num; i++) {
964
ff6ce301c472 Modified the CollectionMonitor (for recommended artifacts) to use the DataCage.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 940
diff changeset
150 names[i] = outs.get(i).getName();
937
9e813e9137a5 Added a monitor that creates new artifacts for default themes in charts and maps.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
151 }
9e813e9137a5 Added a monitor that creates new artifacts for default themes in charts and maps.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
152
964
ff6ce301c472 Modified the CollectionMonitor (for recommended artifacts) to use the DataCage.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 940
diff changeset
153 return names;
ff6ce301c472 Modified the CollectionMonitor (for recommended artifacts) to use the DataCage.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 940
diff changeset
154 }
ff6ce301c472 Modified the CollectionMonitor (for recommended artifacts) to use the DataCage.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 940
diff changeset
155
ff6ce301c472 Modified the CollectionMonitor (for recommended artifacts) to use the DataCage.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 940
diff changeset
156
4527
06c10ad39280 Cosmetics.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4051
diff changeset
157 /**
06c10ad39280 Cosmetics.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4051
diff changeset
158 * Creates Map from Strings "recommended" to "true".
06c10ad39280 Cosmetics.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4051
diff changeset
159 */
7471
fff862f4ef76 Experimental caching of datacage recommendations. The respective hook is called a lot and running the datacage over and over again when loading data can be expensive. So the generated recommendations are cached for some time.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7464
diff changeset
160 private static final Map<String, Object> getNoneUserSpecificParameters(
5867
59ff03ff48f1 River artifacts: Renamed FLYSArtifact(Collection) to D4EArtifact(Collection).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5863
diff changeset
161 D4EArtifact flys,
7471
fff862f4ef76 Experimental caching of datacage recommendations. The respective hook is called a lot and running the datacage over and over again when loading data can be expensive. So the generated recommendations are cached for some time.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7464
diff changeset
162 CallContext context)
964
ff6ce301c472 Modified the CollectionMonitor (for recommended artifacts) to use the DataCage.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 940
diff changeset
163 {
7471
fff862f4ef76 Experimental caching of datacage recommendations. The respective hook is called a lot and running the datacage over and over again when loading data can be expensive. So the generated recommendations are cached for some time.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7464
diff changeset
164 Map<String, Object> params = new HashMap<String, Object>();
964
ff6ce301c472 Modified the CollectionMonitor (for recommended artifacts) to use the DataCage.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 940
diff changeset
165 params.put("recommended", "true");
ff6ce301c472 Modified the CollectionMonitor (for recommended artifacts) to use the DataCage.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 940
diff changeset
166
ff6ce301c472 Modified the CollectionMonitor (for recommended artifacts) to use the DataCage.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 940
diff changeset
167 return params;
937
9e813e9137a5 Added a monitor that creates new artifacts for default themes in charts and maps.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
168 }
9e813e9137a5 Added a monitor that creates new artifacts for default themes in charts and maps.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
169 }
9e813e9137a5 Added a monitor that creates new artifacts for default themes in charts and maps.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
170 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org