annotate flys-artifacts/src/main/java/de/intevation/flys/artifacts/FLYSArtifact.java @ 1176:28154920e0b3

Introduced the possibility for States to transform/modify input before the data is added to FLYSArtifact. flys-artifacts/trunk@2761 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Ingo Weinzierl <ingo.weinzierl@intevation.de>
date Thu, 15 Sep 2011 15:05:24 +0000
parents 073c36bb94ed
children 47ecf98f09eb
rev   line source
119
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
1 package de.intevation.flys.artifacts;
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
2
1055
61c051e53f9b Moved WINFO specific stuff from FLYS into WINFO artifact.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1050
diff changeset
3 import de.intevation.artifactdatabase.ArtifactDatabaseImpl;
61c051e53f9b Moved WINFO specific stuff from FLYS into WINFO artifact.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1050
diff changeset
4 import de.intevation.artifactdatabase.DefaultArtifact;
121
e0ded17a4846 Implemented the feed() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 119
diff changeset
5
1055
61c051e53f9b Moved WINFO specific stuff from FLYS into WINFO artifact.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1050
diff changeset
6 import de.intevation.artifactdatabase.data.DefaultStateData;
61c051e53f9b Moved WINFO specific stuff from FLYS into WINFO artifact.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1050
diff changeset
7 import de.intevation.artifactdatabase.data.StateData;
379
c21fb8de54f8 Enabled the FLYSArtifact to handle an array of inserted WQ values (without given ranges).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 377
diff changeset
8
1057
d4a5d3941cc0 Build out/facet filter from XML document passed at creation time.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1056
diff changeset
9 import de.intevation.artifactdatabase.state.DefaultFacet;
1055
61c051e53f9b Moved WINFO specific stuff from FLYS into WINFO artifact.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1050
diff changeset
10 import de.intevation.artifactdatabase.state.DefaultOutput;
61c051e53f9b Moved WINFO specific stuff from FLYS into WINFO artifact.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1050
diff changeset
11 import de.intevation.artifactdatabase.state.Facet;
61c051e53f9b Moved WINFO specific stuff from FLYS into WINFO artifact.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1050
diff changeset
12 import de.intevation.artifactdatabase.state.Output;
61c051e53f9b Moved WINFO specific stuff from FLYS into WINFO artifact.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1050
diff changeset
13 import de.intevation.artifactdatabase.state.State;
61c051e53f9b Moved WINFO specific stuff from FLYS into WINFO artifact.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1050
diff changeset
14 import de.intevation.artifactdatabase.state.StateEngine;
686
3dc61e00385e Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 661
diff changeset
15
1055
61c051e53f9b Moved WINFO specific stuff from FLYS into WINFO artifact.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1050
diff changeset
16 import de.intevation.artifactdatabase.transition.TransitionEngine;
119
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
17
940
f4439e015278 Append artifact recommendations to the artifact's describe document.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 937
diff changeset
18 import de.intevation.artifacts.Artifact;
f4439e015278 Append artifact recommendations to the artifact's describe document.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 937
diff changeset
19 import de.intevation.artifacts.ArtifactDatabase;
f4439e015278 Append artifact recommendations to the artifact's describe document.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 937
diff changeset
20 import de.intevation.artifacts.ArtifactDatabaseException;
119
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
21 import de.intevation.artifacts.ArtifactFactory;
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
22 import de.intevation.artifacts.CallContext;
952
7399401f728c Adapted the method of FLYSArtifact.setup() which has been changed in the artifact package.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 944
diff changeset
23 import de.intevation.artifacts.CallMeta;
119
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
24
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
25 import de.intevation.artifacts.common.ArtifactNamespaceContext;
1055
61c051e53f9b Moved WINFO specific stuff from FLYS into WINFO artifact.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1050
diff changeset
26
119
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
27 import de.intevation.artifacts.common.utils.XMLUtils;
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
28
1055
61c051e53f9b Moved WINFO specific stuff from FLYS into WINFO artifact.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1050
diff changeset
29 import de.intevation.flys.artifacts.cache.CacheFactory;
317
8f40a57229c3 FLYSArtifact provides methods to retrieve the real River, Gauge objects.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 298
diff changeset
30
119
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
31 import de.intevation.flys.artifacts.context.FLYSContext;
650
6695e03e9b82 Added parser for segments
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 637
diff changeset
32
1055
61c051e53f9b Moved WINFO specific stuff from FLYS into WINFO artifact.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1050
diff changeset
33 import de.intevation.flys.artifacts.states.DefaultState.ComputeType;
650
6695e03e9b82 Added parser for segments
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 637
diff changeset
34
322
448d0dc64357 The inserted ranges (distance and WQ ranges) are validated in the feed() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 321
diff changeset
35 import de.intevation.flys.artifacts.states.DefaultState;
119
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
36
1055
61c051e53f9b Moved WINFO specific stuff from FLYS into WINFO artifact.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1050
diff changeset
37 import java.util.ArrayList;
61c051e53f9b Moved WINFO specific stuff from FLYS into WINFO artifact.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1050
diff changeset
38 import java.util.Collection;
61c051e53f9b Moved WINFO specific stuff from FLYS into WINFO artifact.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1050
diff changeset
39 import java.util.HashMap;
61c051e53f9b Moved WINFO specific stuff from FLYS into WINFO artifact.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1050
diff changeset
40 import java.util.HashSet;
61c051e53f9b Moved WINFO specific stuff from FLYS into WINFO artifact.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1050
diff changeset
41 import java.util.List;
61c051e53f9b Moved WINFO specific stuff from FLYS into WINFO artifact.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1050
diff changeset
42 import java.util.Map;
61c051e53f9b Moved WINFO specific stuff from FLYS into WINFO artifact.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1050
diff changeset
43 import java.util.Set;
61c051e53f9b Moved WINFO specific stuff from FLYS into WINFO artifact.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1050
diff changeset
44 import java.util.TreeMap;
61c051e53f9b Moved WINFO specific stuff from FLYS into WINFO artifact.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1050
diff changeset
45
61c051e53f9b Moved WINFO specific stuff from FLYS into WINFO artifact.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1050
diff changeset
46 import javax.xml.xpath.XPathConstants;
61c051e53f9b Moved WINFO specific stuff from FLYS into WINFO artifact.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1050
diff changeset
47
61c051e53f9b Moved WINFO specific stuff from FLYS into WINFO artifact.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1050
diff changeset
48 import net.sf.ehcache.Cache;
61c051e53f9b Moved WINFO specific stuff from FLYS into WINFO artifact.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1050
diff changeset
49
61c051e53f9b Moved WINFO specific stuff from FLYS into WINFO artifact.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1050
diff changeset
50 import org.apache.log4j.Logger;
61c051e53f9b Moved WINFO specific stuff from FLYS into WINFO artifact.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1050
diff changeset
51
61c051e53f9b Moved WINFO specific stuff from FLYS into WINFO artifact.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1050
diff changeset
52 import org.w3c.dom.Document;
61c051e53f9b Moved WINFO specific stuff from FLYS into WINFO artifact.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1050
diff changeset
53 import org.w3c.dom.Element;
61c051e53f9b Moved WINFO specific stuff from FLYS into WINFO artifact.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1050
diff changeset
54 import org.w3c.dom.NodeList;
119
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
55
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
56 /**
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
57 * The defaul FLYS artifact.
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
58 *
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
59 * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a>
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
60 */
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
61 public abstract class FLYSArtifact extends DefaultArtifact {
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
62
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
63 /** The logger that is used in this artifact.*/
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
64 private static Logger logger = Logger.getLogger(FLYSArtifact.class);
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
65
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
66
686
3dc61e00385e Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 661
diff changeset
67 public static final String COMPUTING_CACHE = "computed.values";
3dc61e00385e Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 661
diff changeset
68
121
e0ded17a4846 Implemented the feed() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 119
diff changeset
69 /** The XPath that points to the input data elements of the FEED document.*/
e0ded17a4846 Implemented the feed() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 119
diff changeset
70 public static final String XPATH_FEED_INPUT =
e0ded17a4846 Implemented the feed() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 119
diff changeset
71 "/art:action/art:data/art:input";
119
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
72
122
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
73 /** The XPath that points to the name of the target state of ADVANCE.*/
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
74 public static final String XPATH_ADVANCE_TARGET =
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
75 "/art:action/art:target/@art:name";
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
76
940
f4439e015278 Append artifact recommendations to the artifact's describe document.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 937
diff changeset
77 public static final String XPATH_MODEL_ARTIFACT =
941
1b509e4cf99b Added a computeInit() method to intialize data/facets after creating new artifacts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 940
diff changeset
78 "/art:action/art:template/@uuid";
940
f4439e015278 Append artifact recommendations to the artifact's describe document.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 937
diff changeset
79
1057
d4a5d3941cc0 Build out/facet filter from XML document passed at creation time.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1056
diff changeset
80 public static final String XPATH_FILTER =
d4a5d3941cc0 Build out/facet filter from XML document passed at creation time.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1056
diff changeset
81 "/art:action/art:filter/art:out";
d4a5d3941cc0 Build out/facet filter from XML document passed at creation time.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1056
diff changeset
82
122
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
83 /** The constant string that shows that an operation was successful.*/
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
84 public static final String OPERATION_SUCCESSFUL = "SUCCESS";
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
85
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
86 /** The constant string that shows that an operation failed.*/
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
87 public static final String OPERATION_FAILED = "FAILURE";
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
88
119
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
89
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
90 /** The identifier of the current state. */
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
91 protected String currentStateId;
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
92
122
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
93 /** The identifiers of previous states on a stack.*/
661
fdc898a134a7 Use java.util.List instead of java.util.Vector. Removed superfluous imports.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 658
diff changeset
94 protected List<String> previousStateIds;
122
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
95
119
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
96 /** The name of the artifact.*/
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
97 protected String name;
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
98
121
e0ded17a4846 Implemented the feed() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 119
diff changeset
99 /** The data that have been inserted into this artifact.*/
e0ded17a4846 Implemented the feed() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 119
diff changeset
100 protected Map<String, StateData> data;
e0ded17a4846 Implemented the feed() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 119
diff changeset
101
687
06689035024c Added a compute() method to WINFOArtifact which acts as a dispatcher for different computations. It triggers a calculation based on ComputeCallbacks that are generated by the current states.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 686
diff changeset
102 /** The list of facets supported by this artifact.*/
691
2600aa2c7319 Store facets for each state.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 690
diff changeset
103 protected Map<String, List<Facet>> facets;
687
06689035024c Added a compute() method to WINFOArtifact which acts as a dispatcher for different computations. It triggers a calculation based on ComputeCallbacks that are generated by the current states.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 686
diff changeset
104
1056
bd1b751deab3 Added optional positive filter for outs and facets.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1055
diff changeset
105 /** out -&gt; facets */
bd1b751deab3 Added optional positive filter for outs and facets.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1055
diff changeset
106 protected Map<String, List<Facet>> filterFacets;
bd1b751deab3 Added optional positive filter for outs and facets.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1055
diff changeset
107
121
e0ded17a4846 Implemented the feed() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 119
diff changeset
108
e0ded17a4846 Implemented the feed() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 119
diff changeset
109 /**
e0ded17a4846 Implemented the feed() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 119
diff changeset
110 * The default constructor that creates an empty FLYSArtifact.
e0ded17a4846 Implemented the feed() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 119
diff changeset
111 */
e0ded17a4846 Implemented the feed() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 119
diff changeset
112 public FLYSArtifact() {
686
3dc61e00385e Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 661
diff changeset
113 data = new TreeMap<String, StateData>();
661
fdc898a134a7 Use java.util.List instead of java.util.Vector. Removed superfluous imports.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 658
diff changeset
114 previousStateIds = new ArrayList<String>();
691
2600aa2c7319 Store facets for each state.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 690
diff changeset
115 facets = new HashMap<String, List<Facet>>();
121
e0ded17a4846 Implemented the feed() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 119
diff changeset
116 }
e0ded17a4846 Implemented the feed() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 119
diff changeset
117
e0ded17a4846 Implemented the feed() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 119
diff changeset
118
e0ded17a4846 Implemented the feed() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 119
diff changeset
119 /**
e0ded17a4846 Implemented the feed() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 119
diff changeset
120 * Returns the name of the concrete artifact.
e0ded17a4846 Implemented the feed() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 119
diff changeset
121 *
e0ded17a4846 Implemented the feed() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 119
diff changeset
122 * @return the name of the concrete artifact.
e0ded17a4846 Implemented the feed() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 119
diff changeset
123 */
1059
fdb0f4ef96f0 Made FLYS artifacts cloneable.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1057
diff changeset
124 public String getName() {
fdb0f4ef96f0 Made FLYS artifacts cloneable.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1057
diff changeset
125 return name;
fdb0f4ef96f0 Made FLYS artifacts cloneable.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1057
diff changeset
126 }
121
e0ded17a4846 Implemented the feed() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 119
diff changeset
127
e0ded17a4846 Implemented the feed() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 119
diff changeset
128 /**
e0ded17a4846 Implemented the feed() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 119
diff changeset
129 * Returns the FLYSContext from context object.
e0ded17a4846 Implemented the feed() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 119
diff changeset
130 *
e0ded17a4846 Implemented the feed() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 119
diff changeset
131 * @param context The CallContext or the FLYSContext.
e0ded17a4846 Implemented the feed() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 119
diff changeset
132 *
e0ded17a4846 Implemented the feed() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 119
diff changeset
133 * @return the FLYSContext.
e0ded17a4846 Implemented the feed() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 119
diff changeset
134 */
706
ddd8b37d5cd3 Removed dead code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 705
diff changeset
135 protected static FLYSContext getFlysContext(Object context) {
121
e0ded17a4846 Implemented the feed() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 119
diff changeset
136 return context instanceof FLYSContext
e0ded17a4846 Implemented the feed() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 119
diff changeset
137 ? (FLYSContext) context
e0ded17a4846 Implemented the feed() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 119
diff changeset
138 : (FLYSContext) ((CallContext) context).globalContext();
e0ded17a4846 Implemented the feed() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 119
diff changeset
139 }
e0ded17a4846 Implemented the feed() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 119
diff changeset
140
119
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
141
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
142 /**
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
143 * Initialize the artifact and insert new data if <code>data</code> contains
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
144 * information necessary for this artifact.
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
145 *
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
146 * @param identifier The UUID.
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
147 * @param factory The factory that is used to create this artifact.
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
148 * @param context The CallContext.
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
149 * @param data Some optional data.
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
150 */
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
151 @Override
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
152 public void setup(
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
153 String identifier,
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
154 ArtifactFactory factory,
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
155 Object context,
952
7399401f728c Adapted the method of FLYSArtifact.setup() which has been changed in the artifact package.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 944
diff changeset
156 CallMeta callMeta,
119
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
157 Document data)
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
158 {
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
159 logger.debug("Setup this artifact with the uuid: " + identifier);
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
160
952
7399401f728c Adapted the method of FLYSArtifact.setup() which has been changed in the artifact package.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 944
diff changeset
161 super.setup(identifier, factory, context, callMeta, data);
119
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
162
1067
f364410c7bc9 Refactored (state access) to ease future development of more trivial artifacts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1059
diff changeset
163 FLYSContext flysContext = getFlysContext(context);
f364410c7bc9 Refactored (state access) to ease future development of more trivial artifacts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1059
diff changeset
164
f364410c7bc9 Refactored (state access) to ease future development of more trivial artifacts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1059
diff changeset
165 List<State> states = getStates(context);
119
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
166
121
e0ded17a4846 Implemented the feed() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 119
diff changeset
167 String name = getName();
e0ded17a4846 Implemented the feed() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 119
diff changeset
168 logger.debug("Set initial state for artifact '" + name + "'");
119
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
169
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
170 setCurrentState(states.get(0));
940
f4439e015278 Append artifact recommendations to the artifact's describe document.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 937
diff changeset
171
f4439e015278 Append artifact recommendations to the artifact's describe document.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 937
diff changeset
172 String model = XMLUtils.xpathString(
f4439e015278 Append artifact recommendations to the artifact's describe document.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 937
diff changeset
173 data,
f4439e015278 Append artifact recommendations to the artifact's describe document.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 937
diff changeset
174 XPATH_MODEL_ARTIFACT,
f4439e015278 Append artifact recommendations to the artifact's describe document.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 937
diff changeset
175 ArtifactNamespaceContext.INSTANCE);
f4439e015278 Append artifact recommendations to the artifact's describe document.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 937
diff changeset
176
f4439e015278 Append artifact recommendations to the artifact's describe document.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 937
diff changeset
177 if (model != null && model.length() > 0) {
f4439e015278 Append artifact recommendations to the artifact's describe document.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 937
diff changeset
178 ArtifactDatabase db = (ArtifactDatabase) flysContext.get(
f4439e015278 Append artifact recommendations to the artifact's describe document.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 937
diff changeset
179 ArtifactDatabaseImpl.GLOBAL_CONTEXT_KEY);
f4439e015278 Append artifact recommendations to the artifact's describe document.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 937
diff changeset
180
f4439e015278 Append artifact recommendations to the artifact's describe document.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 937
diff changeset
181 try {
952
7399401f728c Adapted the method of FLYSArtifact.setup() which has been changed in the artifact package.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 944
diff changeset
182 initialize(db.getRawArtifact(model), context, callMeta);
940
f4439e015278 Append artifact recommendations to the artifact's describe document.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 937
diff changeset
183 }
f4439e015278 Append artifact recommendations to the artifact's describe document.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 937
diff changeset
184 catch (ArtifactDatabaseException adbe) {
f4439e015278 Append artifact recommendations to the artifact's describe document.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 937
diff changeset
185 logger.error(adbe, adbe);
f4439e015278 Append artifact recommendations to the artifact's describe document.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 937
diff changeset
186 }
f4439e015278 Append artifact recommendations to the artifact's describe document.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 937
diff changeset
187 }
1057
d4a5d3941cc0 Build out/facet filter from XML document passed at creation time.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1056
diff changeset
188
d4a5d3941cc0 Build out/facet filter from XML document passed at creation time.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1056
diff changeset
189 filterFacets = buildFilterFacets(data);
940
f4439e015278 Append artifact recommendations to the artifact's describe document.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 937
diff changeset
190 }
f4439e015278 Append artifact recommendations to the artifact's describe document.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 937
diff changeset
191
1059
fdb0f4ef96f0 Made FLYS artifacts cloneable.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1057
diff changeset
192 protected List<String> clonePreviousStateIds() {
fdb0f4ef96f0 Made FLYS artifacts cloneable.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1057
diff changeset
193 return new ArrayList<String>(previousStateIds);
fdb0f4ef96f0 Made FLYS artifacts cloneable.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1057
diff changeset
194 }
fdb0f4ef96f0 Made FLYS artifacts cloneable.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1057
diff changeset
195
fdb0f4ef96f0 Made FLYS artifacts cloneable.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1057
diff changeset
196 protected Map<String, StateData> cloneData() {
fdb0f4ef96f0 Made FLYS artifacts cloneable.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1057
diff changeset
197 Map<String, StateData> copy = new TreeMap<String, StateData>();
fdb0f4ef96f0 Made FLYS artifacts cloneable.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1057
diff changeset
198
fdb0f4ef96f0 Made FLYS artifacts cloneable.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1057
diff changeset
199 for (Map.Entry<String, StateData> entry: data.entrySet()) {
fdb0f4ef96f0 Made FLYS artifacts cloneable.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1057
diff changeset
200 copy.put(entry.getKey(), entry.getValue().deepCopy());
fdb0f4ef96f0 Made FLYS artifacts cloneable.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1057
diff changeset
201 }
fdb0f4ef96f0 Made FLYS artifacts cloneable.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1057
diff changeset
202
fdb0f4ef96f0 Made FLYS artifacts cloneable.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1057
diff changeset
203 return copy;
fdb0f4ef96f0 Made FLYS artifacts cloneable.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1057
diff changeset
204 }
fdb0f4ef96f0 Made FLYS artifacts cloneable.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1057
diff changeset
205
fdb0f4ef96f0 Made FLYS artifacts cloneable.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1057
diff changeset
206 protected Map<String, List<Facet>> cloneFacets() {
fdb0f4ef96f0 Made FLYS artifacts cloneable.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1057
diff changeset
207 Map copy = new HashMap<String, List<Facet>>();
fdb0f4ef96f0 Made FLYS artifacts cloneable.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1057
diff changeset
208
fdb0f4ef96f0 Made FLYS artifacts cloneable.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1057
diff changeset
209 for (Map.Entry<String, List<Facet>> entry: facets.entrySet()) {
fdb0f4ef96f0 Made FLYS artifacts cloneable.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1057
diff changeset
210 List<Facet> facets = entry.getValue();
fdb0f4ef96f0 Made FLYS artifacts cloneable.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1057
diff changeset
211 List<Facet> facetCopies = new ArrayList<Facet>(facets.size());
fdb0f4ef96f0 Made FLYS artifacts cloneable.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1057
diff changeset
212 for (Facet facet: facets) {
fdb0f4ef96f0 Made FLYS artifacts cloneable.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1057
diff changeset
213 facetCopies.add(facet.deepCopy());
fdb0f4ef96f0 Made FLYS artifacts cloneable.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1057
diff changeset
214 }
fdb0f4ef96f0 Made FLYS artifacts cloneable.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1057
diff changeset
215 copy.put(entry.getKey(), facetCopies);
fdb0f4ef96f0 Made FLYS artifacts cloneable.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1057
diff changeset
216 }
fdb0f4ef96f0 Made FLYS artifacts cloneable.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1057
diff changeset
217
fdb0f4ef96f0 Made FLYS artifacts cloneable.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1057
diff changeset
218 return copy;
fdb0f4ef96f0 Made FLYS artifacts cloneable.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1057
diff changeset
219 }
940
f4439e015278 Append artifact recommendations to the artifact's describe document.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 937
diff changeset
220
952
7399401f728c Adapted the method of FLYSArtifact.setup() which has been changed in the artifact package.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 944
diff changeset
221 protected void initialize(
7399401f728c Adapted the method of FLYSArtifact.setup() which has been changed in the artifact package.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 944
diff changeset
222 Artifact artifact,
7399401f728c Adapted the method of FLYSArtifact.setup() which has been changed in the artifact package.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 944
diff changeset
223 Object context,
7399401f728c Adapted the method of FLYSArtifact.setup() which has been changed in the artifact package.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 944
diff changeset
224 CallMeta callMeta)
7399401f728c Adapted the method of FLYSArtifact.setup() which has been changed in the artifact package.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 944
diff changeset
225 {
1059
fdb0f4ef96f0 Made FLYS artifacts cloneable.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1057
diff changeset
226 if (!(artifact instanceof FLYSArtifact)) {
fdb0f4ef96f0 Made FLYS artifacts cloneable.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1057
diff changeset
227 return;
fdb0f4ef96f0 Made FLYS artifacts cloneable.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1057
diff changeset
228 }
fdb0f4ef96f0 Made FLYS artifacts cloneable.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1057
diff changeset
229
fdb0f4ef96f0 Made FLYS artifacts cloneable.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1057
diff changeset
230 FLYSArtifact flys = (FLYSArtifact)artifact;
fdb0f4ef96f0 Made FLYS artifacts cloneable.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1057
diff changeset
231
fdb0f4ef96f0 Made FLYS artifacts cloneable.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1057
diff changeset
232 currentStateId = flys.currentStateId;
fdb0f4ef96f0 Made FLYS artifacts cloneable.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1057
diff changeset
233 previousStateIds = flys.clonePreviousStateIds();
fdb0f4ef96f0 Made FLYS artifacts cloneable.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1057
diff changeset
234 name = flys.name;
fdb0f4ef96f0 Made FLYS artifacts cloneable.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1057
diff changeset
235 data = flys.cloneData();
fdb0f4ef96f0 Made FLYS artifacts cloneable.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1057
diff changeset
236 facets = flys.cloneFacets();
fdb0f4ef96f0 Made FLYS artifacts cloneable.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1057
diff changeset
237 // Do not clone filter facets!
119
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
238 }
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
239
1057
d4a5d3941cc0 Build out/facet filter from XML document passed at creation time.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1056
diff changeset
240 protected Map<String, List<Facet>> buildFilterFacets(Document document) {
d4a5d3941cc0 Build out/facet filter from XML document passed at creation time.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1056
diff changeset
241
d4a5d3941cc0 Build out/facet filter from XML document passed at creation time.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1056
diff changeset
242 NodeList nodes = (NodeList)XMLUtils.xpath(
d4a5d3941cc0 Build out/facet filter from XML document passed at creation time.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1056
diff changeset
243 document,
d4a5d3941cc0 Build out/facet filter from XML document passed at creation time.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1056
diff changeset
244 XPATH_FILTER,
d4a5d3941cc0 Build out/facet filter from XML document passed at creation time.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1056
diff changeset
245 XPathConstants.NODESET,
d4a5d3941cc0 Build out/facet filter from XML document passed at creation time.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1056
diff changeset
246 ArtifactNamespaceContext.INSTANCE);
d4a5d3941cc0 Build out/facet filter from XML document passed at creation time.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1056
diff changeset
247
d4a5d3941cc0 Build out/facet filter from XML document passed at creation time.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1056
diff changeset
248 if (nodes == null || nodes.getLength() == 0) {
d4a5d3941cc0 Build out/facet filter from XML document passed at creation time.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1056
diff changeset
249 return null;
d4a5d3941cc0 Build out/facet filter from XML document passed at creation time.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1056
diff changeset
250 }
d4a5d3941cc0 Build out/facet filter from XML document passed at creation time.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1056
diff changeset
251
d4a5d3941cc0 Build out/facet filter from XML document passed at creation time.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1056
diff changeset
252 Map<String, List<Facet>> result = new HashMap<String, List<Facet>>();
d4a5d3941cc0 Build out/facet filter from XML document passed at creation time.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1056
diff changeset
253
d4a5d3941cc0 Build out/facet filter from XML document passed at creation time.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1056
diff changeset
254 for (int i = 0, N = nodes.getLength(); i < N; ++i) {
d4a5d3941cc0 Build out/facet filter from XML document passed at creation time.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1056
diff changeset
255 Element element = (Element)nodes.item(i);
d4a5d3941cc0 Build out/facet filter from XML document passed at creation time.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1056
diff changeset
256 String oName = element.getAttribute("name");
d4a5d3941cc0 Build out/facet filter from XML document passed at creation time.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1056
diff changeset
257 if (oName.length() == 0) {
d4a5d3941cc0 Build out/facet filter from XML document passed at creation time.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1056
diff changeset
258 continue;
d4a5d3941cc0 Build out/facet filter from XML document passed at creation time.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1056
diff changeset
259 }
d4a5d3941cc0 Build out/facet filter from XML document passed at creation time.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1056
diff changeset
260
d4a5d3941cc0 Build out/facet filter from XML document passed at creation time.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1056
diff changeset
261 List<Facet> facets = new ArrayList<Facet>();
d4a5d3941cc0 Build out/facet filter from XML document passed at creation time.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1056
diff changeset
262
d4a5d3941cc0 Build out/facet filter from XML document passed at creation time.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1056
diff changeset
263 NodeList facetNodes = element.getElementsByTagNameNS(
d4a5d3941cc0 Build out/facet filter from XML document passed at creation time.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1056
diff changeset
264 ArtifactNamespaceContext.NAMESPACE_URI,
d4a5d3941cc0 Build out/facet filter from XML document passed at creation time.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1056
diff changeset
265 "facet");
d4a5d3941cc0 Build out/facet filter from XML document passed at creation time.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1056
diff changeset
266
d4a5d3941cc0 Build out/facet filter from XML document passed at creation time.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1056
diff changeset
267 for (int j = 0, M = facetNodes.getLength(); j < M; ++j) {
d4a5d3941cc0 Build out/facet filter from XML document passed at creation time.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1056
diff changeset
268 Element facetElement = (Element)facetNodes.item(j);
d4a5d3941cc0 Build out/facet filter from XML document passed at creation time.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1056
diff changeset
269
d4a5d3941cc0 Build out/facet filter from XML document passed at creation time.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1056
diff changeset
270 String fName = facetElement.getAttribute("name");
d4a5d3941cc0 Build out/facet filter from XML document passed at creation time.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1056
diff changeset
271
d4a5d3941cc0 Build out/facet filter from XML document passed at creation time.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1056
diff changeset
272 int index;
d4a5d3941cc0 Build out/facet filter from XML document passed at creation time.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1056
diff changeset
273 try {
d4a5d3941cc0 Build out/facet filter from XML document passed at creation time.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1056
diff changeset
274 index = Integer.parseInt(facetElement.getAttribute("index"));
d4a5d3941cc0 Build out/facet filter from XML document passed at creation time.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1056
diff changeset
275 }
d4a5d3941cc0 Build out/facet filter from XML document passed at creation time.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1056
diff changeset
276 catch (NumberFormatException nfe) {
d4a5d3941cc0 Build out/facet filter from XML document passed at creation time.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1056
diff changeset
277 logger.warn(nfe);
d4a5d3941cc0 Build out/facet filter from XML document passed at creation time.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1056
diff changeset
278 index = 0;
d4a5d3941cc0 Build out/facet filter from XML document passed at creation time.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1056
diff changeset
279 }
d4a5d3941cc0 Build out/facet filter from XML document passed at creation time.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1056
diff changeset
280 facets.add(new DefaultFacet(index, fName, ""));
d4a5d3941cc0 Build out/facet filter from XML document passed at creation time.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1056
diff changeset
281 }
d4a5d3941cc0 Build out/facet filter from XML document passed at creation time.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1056
diff changeset
282
d4a5d3941cc0 Build out/facet filter from XML document passed at creation time.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1056
diff changeset
283 if (!facets.isEmpty()) {
d4a5d3941cc0 Build out/facet filter from XML document passed at creation time.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1056
diff changeset
284 result.put(oName, facets);
d4a5d3941cc0 Build out/facet filter from XML document passed at creation time.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1056
diff changeset
285 }
d4a5d3941cc0 Build out/facet filter from XML document passed at creation time.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1056
diff changeset
286 }
d4a5d3941cc0 Build out/facet filter from XML document passed at creation time.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1056
diff changeset
287
d4a5d3941cc0 Build out/facet filter from XML document passed at creation time.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1056
diff changeset
288 return result;
d4a5d3941cc0 Build out/facet filter from XML document passed at creation time.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1056
diff changeset
289 }
d4a5d3941cc0 Build out/facet filter from XML document passed at creation time.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1056
diff changeset
290
119
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
291
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
292 /**
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
293 * Insert new data included in <code>input</code> into the current state.
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
294 *
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
295 * @param target XML document that contains new data.
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
296 * @param context The CallContext.
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
297 *
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
298 * @return a document that contains a SUCCESS or FAILURE message.
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
299 */
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
300 @Override
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
301 public Document feed(Document target, CallContext context) {
123
ebb1cb69d847 The operations feed() and advance() return the current description of the artifact now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 122
diff changeset
302 logger.info("FLYSArtifact.feed()");
ebb1cb69d847 The operations feed() and advance() return the current description of the artifact now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 122
diff changeset
303
121
e0ded17a4846 Implemented the feed() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 119
diff changeset
304 Document doc = XMLUtils.newDocument();
119
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
305
121
e0ded17a4846 Implemented the feed() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 119
diff changeset
306 XMLUtils.ElementCreator creator = new XMLUtils.ElementCreator(
e0ded17a4846 Implemented the feed() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 119
diff changeset
307 doc,
e0ded17a4846 Implemented the feed() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 119
diff changeset
308 ArtifactNamespaceContext.NAMESPACE_URI,
e0ded17a4846 Implemented the feed() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 119
diff changeset
309 ArtifactNamespaceContext.NAMESPACE_PREFIX);
119
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
310
121
e0ded17a4846 Implemented the feed() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 119
diff changeset
311 Element result = creator.create("result");
e0ded17a4846 Implemented the feed() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 119
diff changeset
312 doc.appendChild(result);
119
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
313
121
e0ded17a4846 Implemented the feed() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 119
diff changeset
314 try {
322
448d0dc64357 The inserted ranges (distance and WQ ranges) are validated in the feed() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 321
diff changeset
315 saveData(target, XPATH_FEED_INPUT, context);
689
f8ac04b2dbd0 Added two more compute() methods to ComputeCallback to distinguish between different phases of the artifact.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 687
diff changeset
316
705
853dceead0f4 Only generate facets when needed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 704
diff changeset
317 compute(context, ComputeType.FEED, true);
689
f8ac04b2dbd0 Added two more compute() methods to ComputeCallback to distinguish between different phases of the artifact.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 687
diff changeset
318
123
ebb1cb69d847 The operations feed() and advance() return the current description of the artifact now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 122
diff changeset
319 return describe(target, context);
121
e0ded17a4846 Implemented the feed() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 119
diff changeset
320 }
e0ded17a4846 Implemented the feed() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 119
diff changeset
321 catch (IllegalArgumentException iae) {
658
ed7c901ee712 If Artifact.feed() fails do not store invalid values in database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 655
diff changeset
322 // do not store state if validation fails.
ed7c901ee712 If Artifact.feed() fails do not store invalid values in database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 655
diff changeset
323 context.afterCall(CallContext.NOTHING);
122
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
324 creator.addAttr(result, "type", OPERATION_FAILED, true);
121
e0ded17a4846 Implemented the feed() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 119
diff changeset
325
e0ded17a4846 Implemented the feed() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 119
diff changeset
326 result.setTextContent(iae.getMessage());
e0ded17a4846 Implemented the feed() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 119
diff changeset
327 }
e0ded17a4846 Implemented the feed() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 119
diff changeset
328
e0ded17a4846 Implemented the feed() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 119
diff changeset
329 return doc;
119
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
330 }
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
331
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
332
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
333 /**
122
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
334 * This method handles request for changing the current state of an
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
335 * artifact. It is possible to step forward or backward.
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
336 *
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
337 * @param target The incoming ADVANCE document.
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
338 * @param context The CallContext.
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
339 *
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
340 * @return a document that contains a SUCCESS or FAILURE message.
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
341 */
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
342 public Document advance(Document target, CallContext context) {
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
343 Document doc = XMLUtils.newDocument();
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
344
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
345 XMLUtils.ElementCreator ec = new XMLUtils.ElementCreator(
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
346 doc,
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
347 ArtifactNamespaceContext.NAMESPACE_URI,
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
348 ArtifactNamespaceContext.NAMESPACE_PREFIX);
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
349
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
350 Element result = ec.create("result");
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
351
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
352 String targetState = XMLUtils.xpathString(
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
353 target, XPATH_ADVANCE_TARGET, ArtifactNamespaceContext.INSTANCE);
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
354
140
43f03f6047b9 Implemented the step-back part of the advance() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 123
diff changeset
355 logger.info("FLYSArtifact.advance() to '" + targetState + "'");
43f03f6047b9 Implemented the step-back part of the advance() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 123
diff changeset
356
122
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
357 if (isStateReachable(targetState, context)) {
140
43f03f6047b9 Implemented the step-back part of the advance() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 123
diff changeset
358 logger.info("Advance: Step forward");
122
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
359
661
fdc898a134a7 Use java.util.List instead of java.util.Vector. Removed superfluous imports.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 658
diff changeset
360 List<String> prev = getPreviousStateIds();
122
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
361 prev.add(getCurrentStateId());
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
362
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
363 setCurrentStateId(targetState);
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
364
693
af393c5eb2c8 Write computed facets into artifacts describe document.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 692
diff changeset
365 logger.debug("Compute data for state: " + targetState);
705
853dceead0f4 Only generate facets when needed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 704
diff changeset
366 compute(context, ComputeType.ADVANCE, true);
693
af393c5eb2c8 Write computed facets into artifacts describe document.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 692
diff changeset
367
123
ebb1cb69d847 The operations feed() and advance() return the current description of the artifact now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 122
diff changeset
368 return describe(target, context);
122
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
369 }
140
43f03f6047b9 Implemented the step-back part of the advance() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 123
diff changeset
370 else if (isPreviousState(targetState, context)) {
43f03f6047b9 Implemented the step-back part of the advance() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 123
diff changeset
371 logger.info("Advance: Step back to");
122
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
372
1086
825ea312116d Call State.endOfLife() for all States in the Artifact when Artifact.endOfLife() is called.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1084
diff changeset
373 List<String> prevs = getPreviousStateIds();
140
43f03f6047b9 Implemented the step-back part of the advance() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 123
diff changeset
374 int targetIdx = prevs.indexOf(targetState);
43f03f6047b9 Implemented the step-back part of the advance() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 123
diff changeset
375 int start = prevs.size() - 1;
43f03f6047b9 Implemented the step-back part of the advance() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 123
diff changeset
376
1086
825ea312116d Call State.endOfLife() for all States in the Artifact when Artifact.endOfLife() is called.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1084
diff changeset
377 destroyStates(prevs, context);
1084
583314dafdb6 Call State.endOfLife() in FLYSArtifact when stepping back to a previous state.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1067
diff changeset
378
140
43f03f6047b9 Implemented the step-back part of the advance() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 123
diff changeset
379 for (int i = start; i >= targetIdx; i--) {
43f03f6047b9 Implemented the step-back part of the advance() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 123
diff changeset
380 String prev = prevs.get(i);
43f03f6047b9 Implemented the step-back part of the advance() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 123
diff changeset
381 logger.debug("Remove state id '" + prev + "'");
1084
583314dafdb6 Call State.endOfLife() in FLYSArtifact when stepping back to a previous state.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1067
diff changeset
382
140
43f03f6047b9 Implemented the step-back part of the advance() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 123
diff changeset
383 prevs.remove(prev);
691
2600aa2c7319 Store facets for each state.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 690
diff changeset
384 facets.remove(prev);
140
43f03f6047b9 Implemented the step-back part of the advance() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 123
diff changeset
385 }
43f03f6047b9 Implemented the step-back part of the advance() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 123
diff changeset
386
1094
b1c6d945848d Added a new method to FLYSArtifact to destroy a single state (call its endOfLife).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1086
diff changeset
387 destroyState(getCurrentStateId(), context);
140
43f03f6047b9 Implemented the step-back part of the advance() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 123
diff changeset
388 setCurrentStateId(targetState);
43f03f6047b9 Implemented the step-back part of the advance() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 123
diff changeset
389
43f03f6047b9 Implemented the step-back part of the advance() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 123
diff changeset
390 return describe(target, context);
43f03f6047b9 Implemented the step-back part of the advance() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 123
diff changeset
391 }
122
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
392
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
393 logger.warn("Advance: Cannot advance to '" + targetState + "'");
123
ebb1cb69d847 The operations feed() and advance() return the current description of the artifact now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 122
diff changeset
394 ec.addAttr(result, "type", OPERATION_FAILED, true);
122
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
395
123
ebb1cb69d847 The operations feed() and advance() return the current description of the artifact now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 122
diff changeset
396 doc.appendChild(result);
122
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
397
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
398 return doc;
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
399 }
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
400
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
401
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
402 /**
119
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
403 * Returns the identifier of the current state.
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
404 *
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
405 * @return the identifier of the current state.
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
406 */
722
4800230fba8a Improved situtation on rendering "Abflusskurve am Pegel". Not fully working, yet.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 708
diff changeset
407 public String getCurrentStateId() {
119
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
408 return currentStateId;
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
409 }
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
410
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
411
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
412 /**
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
413 * Sets the identifier of the current state.
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
414 *
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
415 * @param id the identifier of a state.
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
416 */
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
417 protected void setCurrentStateId(String id) {
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
418 currentStateId = id;
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
419 }
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
420
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
421
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
422 /**
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
423 * Set the current state of this artifact. <b>NOTE</b>We don't store the
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
424 * State object itself - which is not necessary - but its identifier. So
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
425 * this method will just call the setCurrentStateId() method with the
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
426 * identifier of <i>state</i>.
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
427 *
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
428 * @param state The new current state.
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
429 */
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
430 protected void setCurrentState(State state) {
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
431 setCurrentStateId(state.getID());
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
432 }
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
433
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
434
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
435 /**
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
436 * Returns the current state of the artifact.
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
437 *
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
438 * @return the current State of the artifact.
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
439 */
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
440 protected State getCurrentState(Object context) {
1067
f364410c7bc9 Refactored (state access) to ease future development of more trivial artifacts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1059
diff changeset
441 return getState(context, getCurrentStateId());
f364410c7bc9 Refactored (state access) to ease future development of more trivial artifacts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1059
diff changeset
442 }
f364410c7bc9 Refactored (state access) to ease future development of more trivial artifacts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1059
diff changeset
443
f364410c7bc9 Refactored (state access) to ease future development of more trivial artifacts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1059
diff changeset
444
f364410c7bc9 Refactored (state access) to ease future development of more trivial artifacts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1059
diff changeset
445 /**
f364410c7bc9 Refactored (state access) to ease future development of more trivial artifacts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1059
diff changeset
446 * Get list of existant states for this Artifact.
f364410c7bc9 Refactored (state access) to ease future development of more trivial artifacts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1059
diff changeset
447 * @param context Contex to get StateEngine from.
f364410c7bc9 Refactored (state access) to ease future development of more trivial artifacts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1059
diff changeset
448 * @return list of states.
f364410c7bc9 Refactored (state access) to ease future development of more trivial artifacts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1059
diff changeset
449 */
f364410c7bc9 Refactored (state access) to ease future development of more trivial artifacts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1059
diff changeset
450 protected List<State> getStates(Object context) {
121
e0ded17a4846 Implemented the feed() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 119
diff changeset
451 FLYSContext flysContext = getFlysContext(context);
119
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
452 StateEngine engine = (StateEngine) flysContext.get(
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
453 FLYSContext.STATE_ENGINE_KEY);
1067
f364410c7bc9 Refactored (state access) to ease future development of more trivial artifacts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1059
diff changeset
454 return engine.getStates(getName());
119
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
455 }
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
456
1067
f364410c7bc9 Refactored (state access) to ease future development of more trivial artifacts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1059
diff changeset
457
f364410c7bc9 Refactored (state access) to ease future development of more trivial artifacts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1059
diff changeset
458 /**
f364410c7bc9 Refactored (state access) to ease future development of more trivial artifacts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1059
diff changeset
459 * Get state with given ID.
f364410c7bc9 Refactored (state access) to ease future development of more trivial artifacts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1059
diff changeset
460 * @param context Context to get StateEngine from.
f364410c7bc9 Refactored (state access) to ease future development of more trivial artifacts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1059
diff changeset
461 * @param stateID ID of state to get.
f364410c7bc9 Refactored (state access) to ease future development of more trivial artifacts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1059
diff changeset
462 * @return state with given ID.
f364410c7bc9 Refactored (state access) to ease future development of more trivial artifacts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1059
diff changeset
463 */
722
4800230fba8a Improved situtation on rendering "Abflusskurve am Pegel". Not fully working, yet.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 708
diff changeset
464 protected State getState(Object context, String stateID) {
4800230fba8a Improved situtation on rendering "Abflusskurve am Pegel". Not fully working, yet.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 708
diff changeset
465 FLYSContext flysContext = getFlysContext(context);
4800230fba8a Improved situtation on rendering "Abflusskurve am Pegel". Not fully working, yet.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 708
diff changeset
466 StateEngine engine = (StateEngine) flysContext.get(
4800230fba8a Improved situtation on rendering "Abflusskurve am Pegel". Not fully working, yet.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 708
diff changeset
467 FLYSContext.STATE_ENGINE_KEY);
4800230fba8a Improved situtation on rendering "Abflusskurve am Pegel". Not fully working, yet.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 708
diff changeset
468 return engine.getState(stateID);
4800230fba8a Improved situtation on rendering "Abflusskurve am Pegel". Not fully working, yet.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 708
diff changeset
469 }
4800230fba8a Improved situtation on rendering "Abflusskurve am Pegel". Not fully working, yet.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 708
diff changeset
470
119
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
471
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
472 /**
122
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
473 * Returns the vector of previous state identifiers.
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
474 *
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
475 * @return the vector of previous state identifiers.
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
476 */
661
fdc898a134a7 Use java.util.List instead of java.util.Vector. Removed superfluous imports.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 658
diff changeset
477 protected List<String> getPreviousStateIds() {
122
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
478 return previousStateIds;
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
479 }
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
480
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
481
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
482 /**
121
e0ded17a4846 Implemented the feed() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 119
diff changeset
483 * Adds a new StateData item to the data pool of this artifact.
e0ded17a4846 Implemented the feed() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 119
diff changeset
484 *
e0ded17a4846 Implemented the feed() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 119
diff changeset
485 * @param name the name of the data object.
e0ded17a4846 Implemented the feed() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 119
diff changeset
486 * @param data the data object itself.
e0ded17a4846 Implemented the feed() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 119
diff changeset
487 */
e0ded17a4846 Implemented the feed() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 119
diff changeset
488 protected void addData(String name, StateData data) {
e0ded17a4846 Implemented the feed() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 119
diff changeset
489 this.data.put(name, data);
e0ded17a4846 Implemented the feed() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 119
diff changeset
490 }
e0ded17a4846 Implemented the feed() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 119
diff changeset
491
e0ded17a4846 Implemented the feed() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 119
diff changeset
492
e0ded17a4846 Implemented the feed() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 119
diff changeset
493 /**
122
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
494 * This method returns a specific StateData object that is stored in the
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
495 * data pool of this artifact.
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
496 *
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
497 * @param name The name of the data object.
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
498 *
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
499 * @return the StateData object if existing, otherwise null.
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
500 */
298
fc694a43a7e5 Changed the visibility of getData() method of FLYSArtifacts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 140
diff changeset
501 public StateData getData(String name) {
122
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
502 return data.get(name);
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
503 }
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
504
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
505
937
9e813e9137a5 Added a monitor that creates new artifacts for default themes in charts and maps.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 742
diff changeset
506 public String getDataAsString(String name) {
9e813e9137a5 Added a monitor that creates new artifacts for default themes in charts and maps.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 742
diff changeset
507 StateData data = getData(name);
9e813e9137a5 Added a monitor that creates new artifacts for default themes in charts and maps.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 742
diff changeset
508 return data != null ? (String) data.getValue() : null;
9e813e9137a5 Added a monitor that creates new artifacts for default themes in charts and maps.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 742
diff changeset
509 }
9e813e9137a5 Added a monitor that creates new artifacts for default themes in charts and maps.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 742
diff changeset
510
960
92027887775a DataCage: Added a recommend() method to generate recommendations for
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 958
diff changeset
511 public Collection<StateData> getAllData() {
92027887775a DataCage: Added a recommend() method to generate recommendations for
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 958
diff changeset
512 return data.values();
92027887775a DataCage: Added a recommend() method to generate recommendations for
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 958
diff changeset
513 }
92027887775a DataCage: Added a recommend() method to generate recommendations for
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 958
diff changeset
514
937
9e813e9137a5 Added a monitor that creates new artifacts for default themes in charts and maps.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 742
diff changeset
515
696
708b270dfd30 OutGenerators use now facets to fetch necessary data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 693
diff changeset
516 public Facet getNativeFacet(Facet facet) {
708b270dfd30 OutGenerators use now facets to fetch necessary data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 693
diff changeset
517 String name = facet.getName();
708b270dfd30 OutGenerators use now facets to fetch necessary data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 693
diff changeset
518 int index = facet.getIndex();
708b270dfd30 OutGenerators use now facets to fetch necessary data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 693
diff changeset
519
708b270dfd30 OutGenerators use now facets to fetch necessary data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 693
diff changeset
520 for (Map.Entry<String, List<Facet>> entry: facets.entrySet()) {
708b270dfd30 OutGenerators use now facets to fetch necessary data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 693
diff changeset
521 for (Facet f: entry.getValue()) {
699
3c70aa595724 mico opt: inter cmps are faster than str cmps.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 698
diff changeset
522 if (f.getIndex() == index && f.getName().equals(name)) {
696
708b270dfd30 OutGenerators use now facets to fetch necessary data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 693
diff changeset
523 return f;
708b270dfd30 OutGenerators use now facets to fetch necessary data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 693
diff changeset
524 }
708b270dfd30 OutGenerators use now facets to fetch necessary data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 693
diff changeset
525 }
708b270dfd30 OutGenerators use now facets to fetch necessary data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 693
diff changeset
526 }
708b270dfd30 OutGenerators use now facets to fetch necessary data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 693
diff changeset
527
708b270dfd30 OutGenerators use now facets to fetch necessary data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 693
diff changeset
528 logger.warn("Could not find facet: " + name + " at " + index);
708b270dfd30 OutGenerators use now facets to fetch necessary data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 693
diff changeset
529 return null;
708b270dfd30 OutGenerators use now facets to fetch necessary data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 693
diff changeset
530 }
708b270dfd30 OutGenerators use now facets to fetch necessary data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 693
diff changeset
531
708b270dfd30 OutGenerators use now facets to fetch necessary data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 693
diff changeset
532
122
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
533 /**
121
e0ded17a4846 Implemented the feed() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 119
diff changeset
534 * This method stores the data that is contained in the FEED document.
119
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
535 *
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
536 * @param feed The FEED document.
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
537 * @param xpath The XPath that points to the data nodes.
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
538 */
322
448d0dc64357 The inserted ranges (distance and WQ ranges) are validated in the feed() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 321
diff changeset
539 public void saveData(Document feed, String xpath, CallContext context)
121
e0ded17a4846 Implemented the feed() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 119
diff changeset
540 throws IllegalArgumentException
e0ded17a4846 Implemented the feed() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 119
diff changeset
541 {
e0ded17a4846 Implemented the feed() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 119
diff changeset
542 if (feed == null || xpath == null || xpath.length() == 0) {
325
7a0907742cc0 Changed the error key that is written to the result document of the feed operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 322
diff changeset
543 throw new IllegalArgumentException("error_feed_no_data");
121
e0ded17a4846 Implemented the feed() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 119
diff changeset
544 }
119
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
545
121
e0ded17a4846 Implemented the feed() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 119
diff changeset
546 NodeList nodes = (NodeList) XMLUtils.xpath(
e0ded17a4846 Implemented the feed() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 119
diff changeset
547 feed,
e0ded17a4846 Implemented the feed() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 119
diff changeset
548 xpath,
e0ded17a4846 Implemented the feed() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 119
diff changeset
549 XPathConstants.NODESET,
e0ded17a4846 Implemented the feed() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 119
diff changeset
550 ArtifactNamespaceContext.INSTANCE);
e0ded17a4846 Implemented the feed() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 119
diff changeset
551
e0ded17a4846 Implemented the feed() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 119
diff changeset
552 if (nodes == null || nodes.getLength() == 0) {
325
7a0907742cc0 Changed the error key that is written to the result document of the feed operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 322
diff changeset
553 throw new IllegalArgumentException("error_feed_no_data");
121
e0ded17a4846 Implemented the feed() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 119
diff changeset
554 }
e0ded17a4846 Implemented the feed() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 119
diff changeset
555
e0ded17a4846 Implemented the feed() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 119
diff changeset
556 int count = nodes.getLength();
e0ded17a4846 Implemented the feed() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 119
diff changeset
557 logger.debug("Try to save " + count + " data items.");
e0ded17a4846 Implemented the feed() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 119
diff changeset
558
708
757ff56b43b3 Added calculation "am Pegel" version to the "Wasserspiegellage" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 707
diff changeset
559 String uri = ArtifactNamespaceContext.NAMESPACE_URI;
121
e0ded17a4846 Implemented the feed() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 119
diff changeset
560
1176
28154920e0b3 Introduced the possibility for States to transform/modify input before the data is added to FLYSArtifact.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1137
diff changeset
561 DefaultState current = (DefaultState) getCurrentState(context);
28154920e0b3 Introduced the possibility for States to transform/modify input before the data is added to FLYSArtifact.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1137
diff changeset
562
708
757ff56b43b3 Added calculation "am Pegel" version to the "Wasserspiegellage" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 707
diff changeset
563 for (int i = 0; i < count; i++) {
757ff56b43b3 Added calculation "am Pegel" version to the "Wasserspiegellage" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 707
diff changeset
564 Element node = (Element)nodes.item(i);
121
e0ded17a4846 Implemented the feed() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 119
diff changeset
565
708
757ff56b43b3 Added calculation "am Pegel" version to the "Wasserspiegellage" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 707
diff changeset
566 String name = node.getAttributeNS(uri, "name");
757ff56b43b3 Added calculation "am Pegel" version to the "Wasserspiegellage" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 707
diff changeset
567 String value = node.getAttributeNS(uri, "value");
757ff56b43b3 Added calculation "am Pegel" version to the "Wasserspiegellage" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 707
diff changeset
568
757ff56b43b3 Added calculation "am Pegel" version to the "Wasserspiegellage" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 707
diff changeset
569 if (name.length() > 0 && value.length() > 0) {
121
e0ded17a4846 Implemented the feed() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 119
diff changeset
570 logger.debug("Save data item for '" + name + "' : " + value);
e0ded17a4846 Implemented the feed() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 119
diff changeset
571
1176
28154920e0b3 Introduced the possibility for States to transform/modify input before the data is added to FLYSArtifact.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1137
diff changeset
572 addData(name, current.transform(this, context, name, value));
121
e0ded17a4846 Implemented the feed() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 119
diff changeset
573 }
e0ded17a4846 Implemented the feed() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 119
diff changeset
574 }
322
448d0dc64357 The inserted ranges (distance and WQ ranges) are validated in the feed() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 321
diff changeset
575
1050
eccf966fb677 State engine: Removed CallContext from state validation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 981
diff changeset
576 current.validate(this);
122
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
577 }
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
578
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
579
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
580 /**
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
581 * Determines if the state with the identifier <i>stateId</i> is reachable
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
582 * from the current state. The determination itself takes place in the
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
583 * TransitionEngine.
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
584 *
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
585 * @param stateId The identifier of a state.
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
586 * @param context The context object.
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
587 *
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
588 * @return true, if the state specified by <i>stateId</i> is reacahble,
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
589 * otherwise false.
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
590 */
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
591 protected boolean isStateReachable(String stateId, Object context) {
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
592 logger.debug("Determine if the state '" + stateId + "' is reachable.");
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
593
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
594 FLYSContext flysContext = getFlysContext(context);
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
595
624
929137ee8154 ISSUE-62 (part I/II) States are no longer filled with data - if a state needs user input, it needs to query the owner artifact.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 623
diff changeset
596 State currentState = getCurrentState(context);
122
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
597 StateEngine sEngine = (StateEngine) flysContext.get(
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
598 FLYSContext.STATE_ENGINE_KEY);
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
599
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
600 TransitionEngine tEngine = (TransitionEngine) flysContext.get(
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
601 FLYSContext.TRANSITION_ENGINE_KEY);
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
602
355
d97982627596 Bugfixes: Adapted a broken method call of TransitionEngine.isStateReachable() and added the outputs of a current state to the DESCRIBE.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 325
diff changeset
603 return tEngine.isStateReachable(this, stateId, currentState, sEngine);
122
d3b8b0b1d010 Implemented the step-forward part of the advance operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 121
diff changeset
604 }
140
43f03f6047b9 Implemented the step-back part of the advance() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 123
diff changeset
605
43f03f6047b9 Implemented the step-back part of the advance() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 123
diff changeset
606
43f03f6047b9 Implemented the step-back part of the advance() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 123
diff changeset
607 /**
43f03f6047b9 Implemented the step-back part of the advance() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 123
diff changeset
608 * Determines if the state with the identifier <i>stateId</i> is a previous
43f03f6047b9 Implemented the step-back part of the advance() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 123
diff changeset
609 * state of the current state.
43f03f6047b9 Implemented the step-back part of the advance() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 123
diff changeset
610 *
43f03f6047b9 Implemented the step-back part of the advance() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 123
diff changeset
611 * @param stateId The target state identifier.
43f03f6047b9 Implemented the step-back part of the advance() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 123
diff changeset
612 * @param context The context object.
43f03f6047b9 Implemented the step-back part of the advance() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 123
diff changeset
613 */
43f03f6047b9 Implemented the step-back part of the advance() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 123
diff changeset
614 protected boolean isPreviousState(String stateId, Object context) {
43f03f6047b9 Implemented the step-back part of the advance() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 123
diff changeset
615 logger.debug("Determine if the state '" + stateId + "' is old.");
43f03f6047b9 Implemented the step-back part of the advance() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 123
diff changeset
616
661
fdc898a134a7 Use java.util.List instead of java.util.Vector. Removed superfluous imports.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 658
diff changeset
617 List<String> prevs = getPreviousStateIds();
140
43f03f6047b9 Implemented the step-back part of the advance() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 123
diff changeset
618 if (prevs.contains(stateId)) {
43f03f6047b9 Implemented the step-back part of the advance() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 123
diff changeset
619 return true;
43f03f6047b9 Implemented the step-back part of the advance() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 123
diff changeset
620 }
43f03f6047b9 Implemented the step-back part of the advance() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 123
diff changeset
621
43f03f6047b9 Implemented the step-back part of the advance() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 123
diff changeset
622 return false;
43f03f6047b9 Implemented the step-back part of the advance() operation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 123
diff changeset
623 }
317
8f40a57229c3 FLYSArtifact provides methods to retrieve the real River, Gauge objects.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 298
diff changeset
624
8f40a57229c3 FLYSArtifact provides methods to retrieve the real River, Gauge objects.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 298
diff changeset
625
8f40a57229c3 FLYSArtifact provides methods to retrieve the real River, Gauge objects.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 298
diff changeset
626 /**
686
3dc61e00385e Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 661
diff changeset
627 * Computes the hash code of the entered values.
3dc61e00385e Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 661
diff changeset
628 *
3dc61e00385e Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 661
diff changeset
629 * @return a hash code.
3dc61e00385e Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 661
diff changeset
630 */
3dc61e00385e Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 661
diff changeset
631 @Override
3dc61e00385e Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 661
diff changeset
632 public String hash() {
3dc61e00385e Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 661
diff changeset
633 Set<Map.Entry<String, StateData>> entries = data.entrySet();
3dc61e00385e Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 661
diff changeset
634
705
853dceead0f4 Only generate facets when needed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 704
diff changeset
635 long hash = 0L;
853dceead0f4 Only generate facets when needed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 704
diff changeset
636 int shift = 3;
686
3dc61e00385e Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 661
diff changeset
637
3dc61e00385e Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 661
diff changeset
638 for (Map.Entry<String, StateData> entry: entries) {
3dc61e00385e Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 661
diff changeset
639 String key = entry.getKey();
3dc61e00385e Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 661
diff changeset
640 Object value = entry.getValue().getValue();
3dc61e00385e Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 661
diff changeset
641
742
c09c9e05ecfa Removed trailing whitespace.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 741
diff changeset
642 hash ^= ((long)key.hashCode() << shift)
722
4800230fba8a Improved situtation on rendering "Abflusskurve am Pegel". Not fully working, yet.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 708
diff changeset
643 | ((long)value.hashCode() << (shift + 3));
686
3dc61e00385e Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 661
diff changeset
644 shift += 2;
3dc61e00385e Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 661
diff changeset
645 }
3dc61e00385e Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 661
diff changeset
646
3dc61e00385e Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 661
diff changeset
647 return getCurrentStateId() + hash;
3dc61e00385e Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 661
diff changeset
648 }
3dc61e00385e Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 661
diff changeset
649
1056
bd1b751deab3 Added optional positive filter for outs and facets.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1055
diff changeset
650 protected List<Output> filterOutputs(List<Output> outs) {
bd1b751deab3 Added optional positive filter for outs and facets.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1055
diff changeset
651
bd1b751deab3 Added optional positive filter for outs and facets.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1055
diff changeset
652 if (filterFacets == null || filterFacets.isEmpty()) {
bd1b751deab3 Added optional positive filter for outs and facets.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1055
diff changeset
653 return outs;
bd1b751deab3 Added optional positive filter for outs and facets.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1055
diff changeset
654 }
bd1b751deab3 Added optional positive filter for outs and facets.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1055
diff changeset
655
bd1b751deab3 Added optional positive filter for outs and facets.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1055
diff changeset
656 List<Output> filtered = new ArrayList<Output>();
bd1b751deab3 Added optional positive filter for outs and facets.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1055
diff changeset
657
bd1b751deab3 Added optional positive filter for outs and facets.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1055
diff changeset
658 for (Output out: outs) {
bd1b751deab3 Added optional positive filter for outs and facets.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1055
diff changeset
659
bd1b751deab3 Added optional positive filter for outs and facets.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1055
diff changeset
660 List<Facet> fFacets = filterFacets.get(out.getName());
bd1b751deab3 Added optional positive filter for outs and facets.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1055
diff changeset
661 if (fFacets != null) {
bd1b751deab3 Added optional positive filter for outs and facets.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1055
diff changeset
662
bd1b751deab3 Added optional positive filter for outs and facets.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1055
diff changeset
663 List<Facet> resultFacets = new ArrayList<Facet>();
bd1b751deab3 Added optional positive filter for outs and facets.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1055
diff changeset
664
bd1b751deab3 Added optional positive filter for outs and facets.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1055
diff changeset
665 for (Facet facet: out.getFacets()) {
bd1b751deab3 Added optional positive filter for outs and facets.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1055
diff changeset
666 for (Facet fFacet: fFacets) {
bd1b751deab3 Added optional positive filter for outs and facets.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1055
diff changeset
667 if (facet.getIndex() == fFacet.getIndex()
bd1b751deab3 Added optional positive filter for outs and facets.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1055
diff changeset
668 && facet.getName().equals(fFacet.getName())) {
bd1b751deab3 Added optional positive filter for outs and facets.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1055
diff changeset
669 resultFacets.add(facet);
bd1b751deab3 Added optional positive filter for outs and facets.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1055
diff changeset
670 break;
bd1b751deab3 Added optional positive filter for outs and facets.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1055
diff changeset
671 }
bd1b751deab3 Added optional positive filter for outs and facets.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1055
diff changeset
672 }
bd1b751deab3 Added optional positive filter for outs and facets.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1055
diff changeset
673 }
bd1b751deab3 Added optional positive filter for outs and facets.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1055
diff changeset
674
bd1b751deab3 Added optional positive filter for outs and facets.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1055
diff changeset
675 if (!resultFacets.isEmpty()) {
bd1b751deab3 Added optional positive filter for outs and facets.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1055
diff changeset
676 DefaultOutput nout = new DefaultOutput(
bd1b751deab3 Added optional positive filter for outs and facets.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1055
diff changeset
677 out.getName(),
bd1b751deab3 Added optional positive filter for outs and facets.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1055
diff changeset
678 out.getDescription(),
bd1b751deab3 Added optional positive filter for outs and facets.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1055
diff changeset
679 out.getMimeType(),
bd1b751deab3 Added optional positive filter for outs and facets.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1055
diff changeset
680 resultFacets);
bd1b751deab3 Added optional positive filter for outs and facets.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1055
diff changeset
681 filtered.add(nout);
bd1b751deab3 Added optional positive filter for outs and facets.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1055
diff changeset
682 }
bd1b751deab3 Added optional positive filter for outs and facets.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1055
diff changeset
683 }
bd1b751deab3 Added optional positive filter for outs and facets.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1055
diff changeset
684 }
bd1b751deab3 Added optional positive filter for outs and facets.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1055
diff changeset
685
bd1b751deab3 Added optional positive filter for outs and facets.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1055
diff changeset
686 return filtered;
bd1b751deab3 Added optional positive filter for outs and facets.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1055
diff changeset
687 }
bd1b751deab3 Added optional positive filter for outs and facets.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1055
diff changeset
688
686
3dc61e00385e Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 661
diff changeset
689
1050
eccf966fb677 State engine: Removed CallContext from state validation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 981
diff changeset
690 public List<Output> getOutputs(Object context) {
965
79251b1d47da Modified the CollectionMonitor to recommend artifacts for the current state's outputs only.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 960
diff changeset
691 List<String> stateIds = getPreviousStateIds();
944
c256061287d7 Simplified the code to read all provided Outputs of an Artifact.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 942
diff changeset
692 List<Output> generated = new ArrayList<Output>();
c256061287d7 Simplified the code to read all provided Outputs of an Artifact.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 942
diff changeset
693
c256061287d7 Simplified the code to read all provided Outputs of an Artifact.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 942
diff changeset
694 for (String stateId: stateIds) {
1067
f364410c7bc9 Refactored (state access) to ease future development of more trivial artifacts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1059
diff changeset
695 DefaultState state = (DefaultState) getState(context, stateId);
981
799c7108ea6d datacage: prepared access to outs of artifacts.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 965
diff changeset
696 generated.addAll(getOutputForState(state));
944
c256061287d7 Simplified the code to read all provided Outputs of an Artifact.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 942
diff changeset
697 }
c256061287d7 Simplified the code to read all provided Outputs of an Artifact.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 942
diff changeset
698
965
79251b1d47da Modified the CollectionMonitor to recommend artifacts for the current state's outputs only.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 960
diff changeset
699 generated.addAll(getCurrentOutputs(context));
944
c256061287d7 Simplified the code to read all provided Outputs of an Artifact.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 942
diff changeset
700
1056
bd1b751deab3 Added optional positive filter for outs and facets.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1055
diff changeset
701 return filterOutputs(generated);
944
c256061287d7 Simplified the code to read all provided Outputs of an Artifact.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 942
diff changeset
702 }
c256061287d7 Simplified the code to read all provided Outputs of an Artifact.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 942
diff changeset
703
c256061287d7 Simplified the code to read all provided Outputs of an Artifact.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 942
diff changeset
704
1050
eccf966fb677 State engine: Removed CallContext from state validation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 981
diff changeset
705 public List<Output> getCurrentOutputs(Object context) {
965
79251b1d47da Modified the CollectionMonitor to recommend artifacts for the current state's outputs only.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 960
diff changeset
706 DefaultState cur = (DefaultState) getCurrentState(context);
79251b1d47da Modified the CollectionMonitor to recommend artifacts for the current state's outputs only.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 960
diff changeset
707
79251b1d47da Modified the CollectionMonitor to recommend artifacts for the current state's outputs only.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 960
diff changeset
708 try {
1050
eccf966fb677 State engine: Removed CallContext from state validation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 981
diff changeset
709 if (cur.validate(this)) {
981
799c7108ea6d datacage: prepared access to outs of artifacts.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 965
diff changeset
710 return getOutputForState(cur);
965
79251b1d47da Modified the CollectionMonitor to recommend artifacts for the current state's outputs only.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 960
diff changeset
711 }
79251b1d47da Modified the CollectionMonitor to recommend artifacts for the current state's outputs only.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 960
diff changeset
712 }
79251b1d47da Modified the CollectionMonitor to recommend artifacts for the current state's outputs only.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 960
diff changeset
713 catch (IllegalArgumentException iae) { }
79251b1d47da Modified the CollectionMonitor to recommend artifacts for the current state's outputs only.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 960
diff changeset
714
79251b1d47da Modified the CollectionMonitor to recommend artifacts for the current state's outputs only.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 960
diff changeset
715 return new ArrayList<Output>();
79251b1d47da Modified the CollectionMonitor to recommend artifacts for the current state's outputs only.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 960
diff changeset
716 }
79251b1d47da Modified the CollectionMonitor to recommend artifacts for the current state's outputs only.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 960
diff changeset
717
1137
073c36bb94ed Minor cosmetics
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1117
diff changeset
718
981
799c7108ea6d datacage: prepared access to outs of artifacts.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 965
diff changeset
719 protected List<Output> getOutputForState(DefaultState state) {
965
79251b1d47da Modified the CollectionMonitor to recommend artifacts for the current state's outputs only.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 960
diff changeset
720 List<Output> list = state.getOutputs();
79251b1d47da Modified the CollectionMonitor to recommend artifacts for the current state's outputs only.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 960
diff changeset
721 if (list == null || list.size() == 0) {
79251b1d47da Modified the CollectionMonitor to recommend artifacts for the current state's outputs only.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 960
diff changeset
722 logger.debug("-> No output modes for this state.");
79251b1d47da Modified the CollectionMonitor to recommend artifacts for the current state's outputs only.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 960
diff changeset
723 return new ArrayList<Output>();
79251b1d47da Modified the CollectionMonitor to recommend artifacts for the current state's outputs only.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 960
diff changeset
724 }
79251b1d47da Modified the CollectionMonitor to recommend artifacts for the current state's outputs only.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 960
diff changeset
725
79251b1d47da Modified the CollectionMonitor to recommend artifacts for the current state's outputs only.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 960
diff changeset
726 List<Facet> fs = facets.get(state.getID());
79251b1d47da Modified the CollectionMonitor to recommend artifacts for the current state's outputs only.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 960
diff changeset
727 if (fs == null || fs.size() == 0) {
79251b1d47da Modified the CollectionMonitor to recommend artifacts for the current state's outputs only.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 960
diff changeset
728 logger.debug("No facets found.");
79251b1d47da Modified the CollectionMonitor to recommend artifacts for the current state's outputs only.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 960
diff changeset
729 return new ArrayList<Output>();
79251b1d47da Modified the CollectionMonitor to recommend artifacts for the current state's outputs only.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 960
diff changeset
730 }
79251b1d47da Modified the CollectionMonitor to recommend artifacts for the current state's outputs only.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 960
diff changeset
731
79251b1d47da Modified the CollectionMonitor to recommend artifacts for the current state's outputs only.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 960
diff changeset
732 return generateOutputs(list, fs);
79251b1d47da Modified the CollectionMonitor to recommend artifacts for the current state's outputs only.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 960
diff changeset
733 }
79251b1d47da Modified the CollectionMonitor to recommend artifacts for the current state's outputs only.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 960
diff changeset
734
79251b1d47da Modified the CollectionMonitor to recommend artifacts for the current state's outputs only.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 960
diff changeset
735
937
9e813e9137a5 Added a monitor that creates new artifacts for default themes in charts and maps.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 742
diff changeset
736 protected List<Output> generateOutputs(List<Output> list, List<Facet> fs) {
9e813e9137a5 Added a monitor that creates new artifacts for default themes in charts and maps.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 742
diff changeset
737 List<Output> generated = new ArrayList<Output>();
9e813e9137a5 Added a monitor that creates new artifacts for default themes in charts and maps.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 742
diff changeset
738
9e813e9137a5 Added a monitor that creates new artifacts for default themes in charts and maps.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 742
diff changeset
739 boolean debug = logger.isDebugEnabled();
9e813e9137a5 Added a monitor that creates new artifacts for default themes in charts and maps.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 742
diff changeset
740
9e813e9137a5 Added a monitor that creates new artifacts for default themes in charts and maps.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 742
diff changeset
741 for (Output out: list) {
9e813e9137a5 Added a monitor that creates new artifacts for default themes in charts and maps.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 742
diff changeset
742 Output o = new DefaultOutput(
9e813e9137a5 Added a monitor that creates new artifacts for default themes in charts and maps.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 742
diff changeset
743 out.getName(),
9e813e9137a5 Added a monitor that creates new artifacts for default themes in charts and maps.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 742
diff changeset
744 out.getDescription(),
9e813e9137a5 Added a monitor that creates new artifacts for default themes in charts and maps.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 742
diff changeset
745 out.getMimeType(),
9e813e9137a5 Added a monitor that creates new artifacts for default themes in charts and maps.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 742
diff changeset
746 out.getType());
9e813e9137a5 Added a monitor that creates new artifacts for default themes in charts and maps.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 742
diff changeset
747
9e813e9137a5 Added a monitor that creates new artifacts for default themes in charts and maps.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 742
diff changeset
748 Set<String> outTypes = new HashSet<String>();
9e813e9137a5 Added a monitor that creates new artifacts for default themes in charts and maps.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 742
diff changeset
749
9e813e9137a5 Added a monitor that creates new artifacts for default themes in charts and maps.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 742
diff changeset
750 for (Facet f: out.getFacets()) {
9e813e9137a5 Added a monitor that creates new artifacts for default themes in charts and maps.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 742
diff changeset
751 if (outTypes.add(f.getName()) && debug) {
9e813e9137a5 Added a monitor that creates new artifacts for default themes in charts and maps.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 742
diff changeset
752 logger.debug("configured facet " + f);
9e813e9137a5 Added a monitor that creates new artifacts for default themes in charts and maps.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 742
diff changeset
753 }
9e813e9137a5 Added a monitor that creates new artifacts for default themes in charts and maps.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 742
diff changeset
754 }
9e813e9137a5 Added a monitor that creates new artifacts for default themes in charts and maps.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 742
diff changeset
755
9e813e9137a5 Added a monitor that creates new artifacts for default themes in charts and maps.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 742
diff changeset
756 boolean facetAdded = false;
9e813e9137a5 Added a monitor that creates new artifacts for default themes in charts and maps.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 742
diff changeset
757 for (Facet f: fs) {
9e813e9137a5 Added a monitor that creates new artifacts for default themes in charts and maps.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 742
diff changeset
758 String type = f.getName();
9e813e9137a5 Added a monitor that creates new artifacts for default themes in charts and maps.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 742
diff changeset
759
9e813e9137a5 Added a monitor that creates new artifacts for default themes in charts and maps.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 742
diff changeset
760 if (outTypes.contains(type)) {
9e813e9137a5 Added a monitor that creates new artifacts for default themes in charts and maps.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 742
diff changeset
761 if (debug) {
9e813e9137a5 Added a monitor that creates new artifacts for default themes in charts and maps.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 742
diff changeset
762 logger.debug("Add facet " + f);
9e813e9137a5 Added a monitor that creates new artifacts for default themes in charts and maps.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 742
diff changeset
763 }
9e813e9137a5 Added a monitor that creates new artifacts for default themes in charts and maps.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 742
diff changeset
764 facetAdded = true;
9e813e9137a5 Added a monitor that creates new artifacts for default themes in charts and maps.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 742
diff changeset
765 o.addFacet(f);
9e813e9137a5 Added a monitor that creates new artifacts for default themes in charts and maps.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 742
diff changeset
766 }
9e813e9137a5 Added a monitor that creates new artifacts for default themes in charts and maps.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 742
diff changeset
767 }
9e813e9137a5 Added a monitor that creates new artifacts for default themes in charts and maps.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 742
diff changeset
768
9e813e9137a5 Added a monitor that creates new artifacts for default themes in charts and maps.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 742
diff changeset
769 if (facetAdded) {
9e813e9137a5 Added a monitor that creates new artifacts for default themes in charts and maps.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 742
diff changeset
770 generated.add(o);
9e813e9137a5 Added a monitor that creates new artifacts for default themes in charts and maps.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 742
diff changeset
771 }
9e813e9137a5 Added a monitor that creates new artifacts for default themes in charts and maps.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 742
diff changeset
772 }
9e813e9137a5 Added a monitor that creates new artifacts for default themes in charts and maps.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 742
diff changeset
773
9e813e9137a5 Added a monitor that creates new artifacts for default themes in charts and maps.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 742
diff changeset
774 return generated;
9e813e9137a5 Added a monitor that creates new artifacts for default themes in charts and maps.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 742
diff changeset
775 }
9e813e9137a5 Added a monitor that creates new artifacts for default themes in charts and maps.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 742
diff changeset
776
9e813e9137a5 Added a monitor that creates new artifacts for default themes in charts and maps.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 742
diff changeset
777
689
f8ac04b2dbd0 Added two more compute() methods to ComputeCallback to distinguish between different phases of the artifact.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 687
diff changeset
778 /**
f8ac04b2dbd0 Added two more compute() methods to ComputeCallback to distinguish between different phases of the artifact.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 687
diff changeset
779 * Dispatches the computation request to compute(CallContext context, String
f8ac04b2dbd0 Added two more compute() methods to ComputeCallback to distinguish between different phases of the artifact.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 687
diff changeset
780 * hash) with the current hash value of the artifact which is provided by
f8ac04b2dbd0 Added two more compute() methods to ComputeCallback to distinguish between different phases of the artifact.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 687
diff changeset
781 * hash().
f8ac04b2dbd0 Added two more compute() methods to ComputeCallback to distinguish between different phases of the artifact.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 687
diff changeset
782 *
f8ac04b2dbd0 Added two more compute() methods to ComputeCallback to distinguish between different phases of the artifact.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 687
diff changeset
783 * @param context The CallContext.
f8ac04b2dbd0 Added two more compute() methods to ComputeCallback to distinguish between different phases of the artifact.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 687
diff changeset
784 */
705
853dceead0f4 Only generate facets when needed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 704
diff changeset
785 public Object compute(
742
c09c9e05ecfa Removed trailing whitespace.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 741
diff changeset
786 CallContext context,
c09c9e05ecfa Removed trailing whitespace.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 741
diff changeset
787 ComputeType type,
705
853dceead0f4 Only generate facets when needed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 704
diff changeset
788 boolean generateFacets
853dceead0f4 Only generate facets when needed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 704
diff changeset
789 ) {
853dceead0f4 Only generate facets when needed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 704
diff changeset
790 return compute(context, hash(), type, generateFacets);
689
f8ac04b2dbd0 Added two more compute() methods to ComputeCallback to distinguish between different phases of the artifact.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 687
diff changeset
791 }
f8ac04b2dbd0 Added two more compute() methods to ComputeCallback to distinguish between different phases of the artifact.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 687
diff changeset
792
f8ac04b2dbd0 Added two more compute() methods to ComputeCallback to distinguish between different phases of the artifact.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 687
diff changeset
793
f8ac04b2dbd0 Added two more compute() methods to ComputeCallback to distinguish between different phases of the artifact.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 687
diff changeset
794 /**
f8ac04b2dbd0 Added two more compute() methods to ComputeCallback to distinguish between different phases of the artifact.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 687
diff changeset
795 * Dispatches computation requests to the current state which needs to
f8ac04b2dbd0 Added two more compute() methods to ComputeCallback to distinguish between different phases of the artifact.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 687
diff changeset
796 * implement a createComputeCallback(String hash, FLYSArtifact artifact)
f8ac04b2dbd0 Added two more compute() methods to ComputeCallback to distinguish between different phases of the artifact.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 687
diff changeset
797 * method.
f8ac04b2dbd0 Added two more compute() methods to ComputeCallback to distinguish between different phases of the artifact.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 687
diff changeset
798 *
f8ac04b2dbd0 Added two more compute() methods to ComputeCallback to distinguish between different phases of the artifact.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 687
diff changeset
799 * @param context The CallContext.
f8ac04b2dbd0 Added two more compute() methods to ComputeCallback to distinguish between different phases of the artifact.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 687
diff changeset
800 * @param hash The hash value which is used to fetch computed data from
f8ac04b2dbd0 Added two more compute() methods to ComputeCallback to distinguish between different phases of the artifact.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 687
diff changeset
801 * cache.
f8ac04b2dbd0 Added two more compute() methods to ComputeCallback to distinguish between different phases of the artifact.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 687
diff changeset
802 *
f8ac04b2dbd0 Added two more compute() methods to ComputeCallback to distinguish between different phases of the artifact.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 687
diff changeset
803 * @return the computed data.
f8ac04b2dbd0 Added two more compute() methods to ComputeCallback to distinguish between different phases of the artifact.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 687
diff changeset
804 */
705
853dceead0f4 Only generate facets when needed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 704
diff changeset
805 public Object compute(
853dceead0f4 Only generate facets when needed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 704
diff changeset
806 CallContext context,
853dceead0f4 Only generate facets when needed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 704
diff changeset
807 String hash,
742
c09c9e05ecfa Removed trailing whitespace.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 741
diff changeset
808 ComputeType type,
705
853dceead0f4 Only generate facets when needed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 704
diff changeset
809 boolean generateFacets
853dceead0f4 Only generate facets when needed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 704
diff changeset
810 ) {
693
af393c5eb2c8 Write computed facets into artifacts describe document.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 692
diff changeset
811 DefaultState current = (DefaultState) getCurrentState(context);
722
4800230fba8a Improved situtation on rendering "Abflusskurve am Pegel". Not fully working, yet.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 708
diff changeset
812 return compute(context, hash, current, type, generateFacets);
4800230fba8a Improved situtation on rendering "Abflusskurve am Pegel". Not fully working, yet.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 708
diff changeset
813 }
689
f8ac04b2dbd0 Added two more compute() methods to ComputeCallback to distinguish between different phases of the artifact.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 687
diff changeset
814
722
4800230fba8a Improved situtation on rendering "Abflusskurve am Pegel". Not fully working, yet.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 708
diff changeset
815 public Object compute(
4800230fba8a Improved situtation on rendering "Abflusskurve am Pegel". Not fully working, yet.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 708
diff changeset
816 CallContext context,
1117
ea80e652f033 Reordered some parameters in a FLYSArtifact method.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1094
diff changeset
817 String hash,
722
4800230fba8a Improved situtation on rendering "Abflusskurve am Pegel". Not fully working, yet.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 708
diff changeset
818 String stateID,
742
c09c9e05ecfa Removed trailing whitespace.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 741
diff changeset
819 ComputeType type,
722
4800230fba8a Improved situtation on rendering "Abflusskurve am Pegel". Not fully working, yet.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 708
diff changeset
820 boolean generateFacets
4800230fba8a Improved situtation on rendering "Abflusskurve am Pegel". Not fully working, yet.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 708
diff changeset
821 ) {
4800230fba8a Improved situtation on rendering "Abflusskurve am Pegel". Not fully working, yet.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 708
diff changeset
822 DefaultState current = stateID == null
4800230fba8a Improved situtation on rendering "Abflusskurve am Pegel". Not fully working, yet.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 708
diff changeset
823 ? (DefaultState)getCurrentState(context)
4800230fba8a Improved situtation on rendering "Abflusskurve am Pegel". Not fully working, yet.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 708
diff changeset
824 : (DefaultState)getState(context, stateID);
4800230fba8a Improved situtation on rendering "Abflusskurve am Pegel". Not fully working, yet.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 708
diff changeset
825
4800230fba8a Improved situtation on rendering "Abflusskurve am Pegel". Not fully working, yet.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 708
diff changeset
826 if (hash == null) {
4800230fba8a Improved situtation on rendering "Abflusskurve am Pegel". Not fully working, yet.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 708
diff changeset
827 hash = hash();
4800230fba8a Improved situtation on rendering "Abflusskurve am Pegel". Not fully working, yet.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 708
diff changeset
828 }
689
f8ac04b2dbd0 Added two more compute() methods to ComputeCallback to distinguish between different phases of the artifact.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 687
diff changeset
829
705
853dceead0f4 Only generate facets when needed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 704
diff changeset
830 return compute(context, hash, current, type, generateFacets);
689
f8ac04b2dbd0 Added two more compute() methods to ComputeCallback to distinguish between different phases of the artifact.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 687
diff changeset
831 }
f8ac04b2dbd0 Added two more compute() methods to ComputeCallback to distinguish between different phases of the artifact.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 687
diff changeset
832
1137
073c36bb94ed Minor cosmetics
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1117
diff changeset
833
073c36bb94ed Minor cosmetics
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1117
diff changeset
834 /**
073c36bb94ed Minor cosmetics
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1117
diff changeset
835 * @param key key of state
073c36bb94ed Minor cosmetics
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1117
diff changeset
836 * @param state state
073c36bb94ed Minor cosmetics
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1117
diff changeset
837 * @param type Type of compute
073c36bb94ed Minor cosmetics
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1117
diff changeset
838 * @param generateFacets Whether new facets shall be generated.
073c36bb94ed Minor cosmetics
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1117
diff changeset
839 */
690
3481cd37e609 Use enums to dispatch computeFeed() and computeAdvance().
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 689
diff changeset
840 public Object compute(
697
b972eba2ed8a Removed ComputeCallback because this was thought too complicated. Fixed issue with facets not be re-generated if same state is entered again.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 696
diff changeset
841 CallContext context,
b972eba2ed8a Removed ComputeCallback because this was thought too complicated. Fixed issue with facets not be re-generated if same state is entered again.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 696
diff changeset
842 String key,
b972eba2ed8a Removed ComputeCallback because this was thought too complicated. Fixed issue with facets not be re-generated if same state is entered again.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 696
diff changeset
843 DefaultState state,
705
853dceead0f4 Only generate facets when needed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 704
diff changeset
844 ComputeType type,
853dceead0f4 Only generate facets when needed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 704
diff changeset
845 boolean generateFacets
697
b972eba2ed8a Removed ComputeCallback because this was thought too complicated. Fixed issue with facets not be re-generated if same state is entered again.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 696
diff changeset
846 ) {
b972eba2ed8a Removed ComputeCallback because this was thought too complicated. Fixed issue with facets not be re-generated if same state is entered again.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 696
diff changeset
847 String stateID = state.getID();
691
2600aa2c7319 Store facets for each state.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 690
diff changeset
848
1137
073c36bb94ed Minor cosmetics
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1117
diff changeset
849 List<Facet> fs = (generateFacets) ? new ArrayList<Facet>() : null;
697
b972eba2ed8a Removed ComputeCallback because this was thought too complicated. Fixed issue with facets not be re-generated if same state is entered again.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 696
diff changeset
850
b972eba2ed8a Removed ComputeCallback because this was thought too complicated. Fixed issue with facets not be re-generated if same state is entered again.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 696
diff changeset
851 try {
b972eba2ed8a Removed ComputeCallback because this was thought too complicated. Fixed issue with facets not be re-generated if same state is entered again.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 696
diff changeset
852 Cache cache = CacheFactory.getCache(COMPUTING_CACHE);
b972eba2ed8a Removed ComputeCallback because this was thought too complicated. Fixed issue with facets not be re-generated if same state is entered again.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 696
diff changeset
853
b972eba2ed8a Removed ComputeCallback because this was thought too complicated. Fixed issue with facets not be re-generated if same state is entered again.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 696
diff changeset
854 Object old = null;
b972eba2ed8a Removed ComputeCallback because this was thought too complicated. Fixed issue with facets not be re-generated if same state is entered again.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 696
diff changeset
855
b972eba2ed8a Removed ComputeCallback because this was thought too complicated. Fixed issue with facets not be re-generated if same state is entered again.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 696
diff changeset
856 if (cache != null) {
b972eba2ed8a Removed ComputeCallback because this was thought too complicated. Fixed issue with facets not be re-generated if same state is entered again.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 696
diff changeset
857 net.sf.ehcache.Element element = cache.get(key);
b972eba2ed8a Removed ComputeCallback because this was thought too complicated. Fixed issue with facets not be re-generated if same state is entered again.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 696
diff changeset
858 if (element != null) {
b972eba2ed8a Removed ComputeCallback because this was thought too complicated. Fixed issue with facets not be re-generated if same state is entered again.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 696
diff changeset
859 logger.debug("Got computation result from cache.");
b972eba2ed8a Removed ComputeCallback because this was thought too complicated. Fixed issue with facets not be re-generated if same state is entered again.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 696
diff changeset
860 old = element.getValue();
b972eba2ed8a Removed ComputeCallback because this was thought too complicated. Fixed issue with facets not be re-generated if same state is entered again.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 696
diff changeset
861 }
b972eba2ed8a Removed ComputeCallback because this was thought too complicated. Fixed issue with facets not be re-generated if same state is entered again.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 696
diff changeset
862 }
b972eba2ed8a Removed ComputeCallback because this was thought too complicated. Fixed issue with facets not be re-generated if same state is entered again.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 696
diff changeset
863
b972eba2ed8a Removed ComputeCallback because this was thought too complicated. Fixed issue with facets not be re-generated if same state is entered again.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 696
diff changeset
864 Object res;
690
3481cd37e609 Use enums to dispatch computeFeed() and computeAdvance().
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 689
diff changeset
865 switch (type) {
3481cd37e609 Use enums to dispatch computeFeed() and computeAdvance().
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 689
diff changeset
866 case FEED:
697
b972eba2ed8a Removed ComputeCallback because this was thought too complicated. Fixed issue with facets not be re-generated if same state is entered again.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 696
diff changeset
867 res = state.computeFeed(this, key, context, fs, old);
b972eba2ed8a Removed ComputeCallback because this was thought too complicated. Fixed issue with facets not be re-generated if same state is entered again.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 696
diff changeset
868 break;
b972eba2ed8a Removed ComputeCallback because this was thought too complicated. Fixed issue with facets not be re-generated if same state is entered again.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 696
diff changeset
869 case ADVANCE:
700
94f0f91be11c call computeAdvance() if we want to advance.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 699
diff changeset
870 res = state.computeAdvance(this, key, context, fs, old);
697
b972eba2ed8a Removed ComputeCallback because this was thought too complicated. Fixed issue with facets not be re-generated if same state is entered again.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 696
diff changeset
871 break;
942
796c54058dc4 Added artifacts/states for WMS background an river axis and a configuration for the output-defaults.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 941
diff changeset
872 case INIT:
958
ae198bef4ba0 Added configurations for river WMSe (currently for Saar, Mosel, Elbe).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 952
diff changeset
873 res = state.computeInit(this, key, context, context.getMeta(), fs);
697
b972eba2ed8a Removed ComputeCallback because this was thought too complicated. Fixed issue with facets not be re-generated if same state is entered again.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 696
diff changeset
874 default:
b972eba2ed8a Removed ComputeCallback because this was thought too complicated. Fixed issue with facets not be re-generated if same state is entered again.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 696
diff changeset
875 res = null;
b972eba2ed8a Removed ComputeCallback because this was thought too complicated. Fixed issue with facets not be re-generated if same state is entered again.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 696
diff changeset
876 }
690
3481cd37e609 Use enums to dispatch computeFeed() and computeAdvance().
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 689
diff changeset
877
697
b972eba2ed8a Removed ComputeCallback because this was thought too complicated. Fixed issue with facets not be re-generated if same state is entered again.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 696
diff changeset
878 if (cache != null && old != res && res != null) {
b972eba2ed8a Removed ComputeCallback because this was thought too complicated. Fixed issue with facets not be re-generated if same state is entered again.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 696
diff changeset
879 logger.debug("Store computation result to cache.");
b972eba2ed8a Removed ComputeCallback because this was thought too complicated. Fixed issue with facets not be re-generated if same state is entered again.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 696
diff changeset
880 net.sf.ehcache.Element element =
b972eba2ed8a Removed ComputeCallback because this was thought too complicated. Fixed issue with facets not be re-generated if same state is entered again.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 696
diff changeset
881 new net.sf.ehcache.Element(key, res);
b972eba2ed8a Removed ComputeCallback because this was thought too complicated. Fixed issue with facets not be re-generated if same state is entered again.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 696
diff changeset
882 cache.put(element);
b972eba2ed8a Removed ComputeCallback because this was thought too complicated. Fixed issue with facets not be re-generated if same state is entered again.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 696
diff changeset
883 }
b972eba2ed8a Removed ComputeCallback because this was thought too complicated. Fixed issue with facets not be re-generated if same state is entered again.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 696
diff changeset
884
b972eba2ed8a Removed ComputeCallback because this was thought too complicated. Fixed issue with facets not be re-generated if same state is entered again.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 696
diff changeset
885 return res;
b972eba2ed8a Removed ComputeCallback because this was thought too complicated. Fixed issue with facets not be re-generated if same state is entered again.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 696
diff changeset
886 }
b972eba2ed8a Removed ComputeCallback because this was thought too complicated. Fixed issue with facets not be re-generated if same state is entered again.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 696
diff changeset
887 finally {
705
853dceead0f4 Only generate facets when needed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 704
diff changeset
888 if (generateFacets) {
853dceead0f4 Only generate facets when needed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 704
diff changeset
889 if (fs.isEmpty()) {
853dceead0f4 Only generate facets when needed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 704
diff changeset
890 facets.remove(stateID);
853dceead0f4 Only generate facets when needed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 704
diff changeset
891 }
853dceead0f4 Only generate facets when needed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 704
diff changeset
892 else {
853dceead0f4 Only generate facets when needed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 704
diff changeset
893 facets.put(stateID, fs);
853dceead0f4 Only generate facets when needed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 704
diff changeset
894 }
690
3481cd37e609 Use enums to dispatch computeFeed() and computeAdvance().
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 689
diff changeset
895 }
686
3dc61e00385e Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 661
diff changeset
896 }
3dc61e00385e Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 661
diff changeset
897 }
3dc61e00385e Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 661
diff changeset
898
3dc61e00385e Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 661
diff changeset
899
623
aa64fe4df8ab Added a method to dump the artifacts state/data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 459
diff changeset
900 /**
aa64fe4df8ab Added a method to dump the artifacts state/data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 459
diff changeset
901 * Method to dump the artifacts state/data.
aa64fe4df8ab Added a method to dump the artifacts state/data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 459
diff changeset
902 */
aa64fe4df8ab Added a method to dump the artifacts state/data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 459
diff changeset
903 protected void dumpArtifact() {
aa64fe4df8ab Added a method to dump the artifacts state/data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 459
diff changeset
904 if (logger.isDebugEnabled()) {
aa64fe4df8ab Added a method to dump the artifacts state/data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 459
diff changeset
905 logger.debug("++++++++++++++ DUMP ARTIFACT DATA +++++++++++++++++");
aa64fe4df8ab Added a method to dump the artifacts state/data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 459
diff changeset
906
aa64fe4df8ab Added a method to dump the artifacts state/data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 459
diff changeset
907 logger.debug("------ DUMP DATA ------");
aa64fe4df8ab Added a method to dump the artifacts state/data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 459
diff changeset
908 Collection<StateData> allData = data.values();
aa64fe4df8ab Added a method to dump the artifacts state/data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 459
diff changeset
909
aa64fe4df8ab Added a method to dump the artifacts state/data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 459
diff changeset
910 for (StateData d: allData) {
aa64fe4df8ab Added a method to dump the artifacts state/data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 459
diff changeset
911 String name = d.getName();
aa64fe4df8ab Added a method to dump the artifacts state/data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 459
diff changeset
912 String value = (String) d.getValue();
aa64fe4df8ab Added a method to dump the artifacts state/data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 459
diff changeset
913
aa64fe4df8ab Added a method to dump the artifacts state/data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 459
diff changeset
914 logger.debug("- " + name + ": " + value);
aa64fe4df8ab Added a method to dump the artifacts state/data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 459
diff changeset
915 }
aa64fe4df8ab Added a method to dump the artifacts state/data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 459
diff changeset
916
aa64fe4df8ab Added a method to dump the artifacts state/data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 459
diff changeset
917 logger.debug("------ DUMP PREVIOUS STATES ------");
661
fdc898a134a7 Use java.util.List instead of java.util.Vector. Removed superfluous imports.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 658
diff changeset
918 List<String> stateIds = getPreviousStateIds();
623
aa64fe4df8ab Added a method to dump the artifacts state/data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 459
diff changeset
919
aa64fe4df8ab Added a method to dump the artifacts state/data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 459
diff changeset
920 for (String id: stateIds) {
aa64fe4df8ab Added a method to dump the artifacts state/data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 459
diff changeset
921 logger.debug("- State: " + id);
aa64fe4df8ab Added a method to dump the artifacts state/data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 459
diff changeset
922 }
aa64fe4df8ab Added a method to dump the artifacts state/data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 459
diff changeset
923
aa64fe4df8ab Added a method to dump the artifacts state/data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 459
diff changeset
924 logger.debug("CURRENT STATE: " + getCurrentStateId());
aa64fe4df8ab Added a method to dump the artifacts state/data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 459
diff changeset
925
aa64fe4df8ab Added a method to dump the artifacts state/data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 459
diff changeset
926 logger.debug("++++++++++++++ END ARTIFACT DUMP +++++++++++++++++");
aa64fe4df8ab Added a method to dump the artifacts state/data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 459
diff changeset
927 }
aa64fe4df8ab Added a method to dump the artifacts state/data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 459
diff changeset
928 }
1086
825ea312116d Call State.endOfLife() for all States in the Artifact when Artifact.endOfLife() is called.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1084
diff changeset
929
825ea312116d Call State.endOfLife() for all States in the Artifact when Artifact.endOfLife() is called.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1084
diff changeset
930
1094
b1c6d945848d Added a new method to FLYSArtifact to destroy a single state (call its endOfLife).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1086
diff changeset
931 protected void destroyState(String id, Object context) {
b1c6d945848d Added a new method to FLYSArtifact to destroy a single state (call its endOfLife).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1086
diff changeset
932 State s = getState(context, id);
b1c6d945848d Added a new method to FLYSArtifact to destroy a single state (call its endOfLife).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1086
diff changeset
933 s.endOfLife(this, context);
b1c6d945848d Added a new method to FLYSArtifact to destroy a single state (call its endOfLife).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1086
diff changeset
934 }
b1c6d945848d Added a new method to FLYSArtifact to destroy a single state (call its endOfLife).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1086
diff changeset
935
b1c6d945848d Added a new method to FLYSArtifact to destroy a single state (call its endOfLife).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1086
diff changeset
936
1086
825ea312116d Call State.endOfLife() for all States in the Artifact when Artifact.endOfLife() is called.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1084
diff changeset
937 /**
825ea312116d Call State.endOfLife() for all States in the Artifact when Artifact.endOfLife() is called.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1084
diff changeset
938 * Calls endOfLife() for each state in the list <i>ids</i>.
825ea312116d Call State.endOfLife() for all States in the Artifact when Artifact.endOfLife() is called.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1084
diff changeset
939 *
825ea312116d Call State.endOfLife() for all States in the Artifact when Artifact.endOfLife() is called.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1084
diff changeset
940 * @param ids The State IDs that should be destroyed.
825ea312116d Call State.endOfLife() for all States in the Artifact when Artifact.endOfLife() is called.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1084
diff changeset
941 * @param context The FLYSContext.
825ea312116d Call State.endOfLife() for all States in the Artifact when Artifact.endOfLife() is called.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1084
diff changeset
942 */
825ea312116d Call State.endOfLife() for all States in the Artifact when Artifact.endOfLife() is called.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1084
diff changeset
943 protected void destroyStates(List<String> ids, Object context) {
825ea312116d Call State.endOfLife() for all States in the Artifact when Artifact.endOfLife() is called.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1084
diff changeset
944 for (int i = 0, num = ids.size(); i < num; i++) {
1094
b1c6d945848d Added a new method to FLYSArtifact to destroy a single state (call its endOfLife).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1086
diff changeset
945 destroyState(ids.get(i), context);
1086
825ea312116d Call State.endOfLife() for all States in the Artifact when Artifact.endOfLife() is called.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1084
diff changeset
946 }
825ea312116d Call State.endOfLife() for all States in the Artifact when Artifact.endOfLife() is called.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1084
diff changeset
947 }
825ea312116d Call State.endOfLife() for all States in the Artifact when Artifact.endOfLife() is called.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1084
diff changeset
948
825ea312116d Call State.endOfLife() for all States in the Artifact when Artifact.endOfLife() is called.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1084
diff changeset
949
825ea312116d Call State.endOfLife() for all States in the Artifact when Artifact.endOfLife() is called.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1084
diff changeset
950 @Override
825ea312116d Call State.endOfLife() for all States in the Artifact when Artifact.endOfLife() is called.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1084
diff changeset
951 public void endOfLife(Object context) {
825ea312116d Call State.endOfLife() for all States in the Artifact when Artifact.endOfLife() is called.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1084
diff changeset
952 logger.info("FLYSArtifact.endOfLife: " + identifier());
825ea312116d Call State.endOfLife() for all States in the Artifact when Artifact.endOfLife() is called.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1084
diff changeset
953
825ea312116d Call State.endOfLife() for all States in the Artifact when Artifact.endOfLife() is called.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1084
diff changeset
954 List<String> ids = getPreviousStateIds();
825ea312116d Call State.endOfLife() for all States in the Artifact when Artifact.endOfLife() is called.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1084
diff changeset
955 ids.add(getCurrentStateId());
825ea312116d Call State.endOfLife() for all States in the Artifact when Artifact.endOfLife() is called.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1084
diff changeset
956
825ea312116d Call State.endOfLife() for all States in the Artifact when Artifact.endOfLife() is called.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1084
diff changeset
957 destroyStates(ids, context);
825ea312116d Call State.endOfLife() for all States in the Artifact when Artifact.endOfLife() is called.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1084
diff changeset
958 }
119
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
959 }
84c0b151203e Added a FLYSArtifact that serves as the default artifact for the FLYS application.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
960 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org