Mercurial > dive4elements > river
comparison flys-artifacts/src/main/java/de/intevation/flys/artifacts/WINFOArtifact.java @ 3193:2f922be407ea
Moved common code of the *Artifacts into FLYSArtifact.
flys-artifacts/trunk@4809 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Wed, 27 Jun 2012 13:45:55 +0000 |
parents | 555ed85af32e |
children | ed07dd55f487 |
comparison
equal
deleted
inserted
replaced
3192:cd309f8597f6 | 3193:2f922be407ea |
---|---|
1 package de.intevation.flys.artifacts; | 1 package de.intevation.flys.artifacts; |
2 | 2 |
3 import de.intevation.artifactdatabase.ProtocolUtils; | |
4 | |
5 import de.intevation.artifactdatabase.data.StateData; | 3 import de.intevation.artifactdatabase.data.StateData; |
6 | 4 |
7 import de.intevation.artifactdatabase.state.Output; | |
8 import de.intevation.artifactdatabase.state.State; | |
9 import de.intevation.artifactdatabase.state.StateEngine; | |
10 | |
11 import de.intevation.artifactdatabase.transition.TransitionEngine; | |
12 | |
13 import de.intevation.artifacts.CallContext; | 5 import de.intevation.artifacts.CallContext; |
14 import de.intevation.artifacts.Message; | |
15 | |
16 import de.intevation.artifacts.common.ArtifactNamespaceContext; | |
17 | |
18 import de.intevation.artifacts.common.utils.XMLUtils.ElementCreator; | |
19 | |
20 import de.intevation.artifacts.common.utils.XMLUtils; | |
21 | |
22 import de.intevation.flys.artifacts.context.FLYSContext; | |
23 | 6 |
24 import de.intevation.flys.artifacts.model.Calculation1; | 7 import de.intevation.flys.artifacts.model.Calculation1; |
25 import de.intevation.flys.artifacts.model.Calculation2; | 8 import de.intevation.flys.artifacts.model.Calculation2; |
26 import de.intevation.flys.artifacts.model.Calculation3; | 9 import de.intevation.flys.artifacts.model.Calculation3; |
27 import de.intevation.flys.artifacts.model.Calculation4; | 10 import de.intevation.flys.artifacts.model.Calculation4; |
28 import de.intevation.flys.artifacts.model.Calculation5; | 11 import de.intevation.flys.artifacts.model.Calculation5; |
29 import de.intevation.flys.artifacts.model.Calculation6; | 12 import de.intevation.flys.artifacts.model.Calculation6; |
30 import de.intevation.flys.artifacts.model.Calculation; | 13 import de.intevation.flys.artifacts.model.Calculation; |
31 import de.intevation.flys.artifacts.model.CalculationMessage; | |
32 import de.intevation.flys.artifacts.model.CalculationResult; | 14 import de.intevation.flys.artifacts.model.CalculationResult; |
33 import de.intevation.flys.artifacts.model.DischargeTables; | 15 import de.intevation.flys.artifacts.model.DischargeTables; |
34 import de.intevation.flys.artifacts.model.FacetTypes; | 16 import de.intevation.flys.artifacts.model.FacetTypes; |
35 import de.intevation.flys.artifacts.model.MainValuesFactory; | 17 import de.intevation.flys.artifacts.model.MainValuesFactory; |
36 import de.intevation.flys.artifacts.model.Segment; | 18 import de.intevation.flys.artifacts.model.Segment; |
38 import de.intevation.flys.artifacts.model.WQKms; | 20 import de.intevation.flys.artifacts.model.WQKms; |
39 import de.intevation.flys.artifacts.model.WW; | 21 import de.intevation.flys.artifacts.model.WW; |
40 import de.intevation.flys.artifacts.model.WstValueTable; | 22 import de.intevation.flys.artifacts.model.WstValueTable; |
41 import de.intevation.flys.artifacts.model.WstValueTableFactory; | 23 import de.intevation.flys.artifacts.model.WstValueTableFactory; |
42 | 24 |
43 import de.intevation.flys.artifacts.states.DefaultState; | |
44 import de.intevation.flys.artifacts.states.LocationDistanceSelect; | 25 import de.intevation.flys.artifacts.states.LocationDistanceSelect; |
45 | 26 |
46 import de.intevation.flys.geom.Lines; | 27 import de.intevation.flys.geom.Lines; |
47 | 28 |
29 import de.intevation.flys.model.DischargeTable; | |
48 import de.intevation.flys.model.FastCrossSectionLine; | 30 import de.intevation.flys.model.FastCrossSectionLine; |
49 import de.intevation.flys.model.Gauge; | 31 import de.intevation.flys.model.Gauge; |
50 import de.intevation.flys.model.River; | 32 import de.intevation.flys.model.River; |
51 import de.intevation.flys.model.DischargeTable; | |
52 | 33 |
53 import de.intevation.flys.utils.DoubleUtil; | 34 import de.intevation.flys.utils.DoubleUtil; |
54 import de.intevation.flys.utils.FLYSUtils; | 35 import de.intevation.flys.utils.FLYSUtils; |
55 | 36 |
56 import gnu.trove.TDoubleArrayList; | 37 import gnu.trove.TDoubleArrayList; |
59 | 40 |
60 import java.util.Arrays; | 41 import java.util.Arrays; |
61 import java.util.Calendar; | 42 import java.util.Calendar; |
62 import java.util.Collections; | 43 import java.util.Collections; |
63 import java.util.GregorianCalendar; | 44 import java.util.GregorianCalendar; |
64 import java.util.LinkedList; | |
65 import java.util.List; | 45 import java.util.List; |
66 import java.util.Map; | 46 import java.util.Map; |
67 | 47 |
68 import org.apache.log4j.Logger; | 48 import org.apache.log4j.Logger; |
69 | |
70 import org.w3c.dom.Document; | |
71 import org.w3c.dom.Element; | |
72 import org.w3c.dom.Node; | |
73 | 49 |
74 | 50 |
75 /** | 51 /** |
76 * The default WINFO artifact. | 52 * The default WINFO artifact. |
77 * | 53 * |
103 */ | 79 */ |
104 public WINFOArtifact() { | 80 public WINFOArtifact() { |
105 } | 81 } |
106 | 82 |
107 | 83 |
108 /** | |
109 * This method returns a description of this artifact. | |
110 * | |
111 * @param data Some data. | |
112 * @param context The CallContext. | |
113 * | |
114 * @return the description of this artifact. | |
115 */ | |
116 public Document describe(Document data, CallContext context) { | |
117 logger.debug("Describe: the current state is: " + getCurrentStateId()); | |
118 | |
119 if (logger.isDebugEnabled()) { | |
120 dumpArtifact(); | |
121 } | |
122 | |
123 FLYSContext flysContext = FLYSUtils.getFlysContext(context); | |
124 | |
125 StateEngine stateEngine = (StateEngine) flysContext.get( | |
126 FLYSContext.STATE_ENGINE_KEY); | |
127 | |
128 TransitionEngine transitionEngine = (TransitionEngine) flysContext.get( | |
129 FLYSContext.TRANSITION_ENGINE_KEY); | |
130 | |
131 List<State> reachable = transitionEngine.getReachableStates( | |
132 this, getCurrentState(context), stateEngine); | |
133 | |
134 Document description = XMLUtils.newDocument(); | |
135 XMLUtils.ElementCreator creator = new XMLUtils.ElementCreator( | |
136 description, | |
137 ArtifactNamespaceContext.NAMESPACE_URI, | |
138 ArtifactNamespaceContext.NAMESPACE_PREFIX); | |
139 | |
140 Element root = ProtocolUtils.createRootNode(creator); | |
141 description.appendChild(root); | |
142 | |
143 State current = getCurrentState(context); | |
144 | |
145 ProtocolUtils.appendDescribeHeader(creator, root, identifier(), hash()); | |
146 ProtocolUtils.appendState(creator, root, current); | |
147 ProtocolUtils.appendReachableStates(creator, root, reachable); | |
148 | |
149 appendBackgroundActivity(creator, root, context); | |
150 | |
151 Element name = ProtocolUtils.createArtNode( | |
152 creator, "name", | |
153 new String[] { "value" }, | |
154 new String[] { getName() }); | |
155 | |
156 Element ui = ProtocolUtils.createArtNode( | |
157 creator, "ui", null, null); | |
158 | |
159 Element staticUI = ProtocolUtils.createArtNode( | |
160 creator, "static", null, null); | |
161 | |
162 Element outs = ProtocolUtils.createArtNode( | |
163 creator, "outputmodes", null, null); | |
164 appendOutputModes(description, outs, context, identifier()); | |
165 | |
166 appendStaticUI(description, staticUI, context, identifier()); | |
167 | |
168 Element dynamic = current.describe( | |
169 this, | |
170 description, | |
171 root, | |
172 context, | |
173 identifier()); | |
174 | |
175 if (dynamic != null) { | |
176 ui.appendChild(dynamic); | |
177 } | |
178 | |
179 ui.appendChild(staticUI); | |
180 | |
181 root.appendChild(name); | |
182 root.appendChild(ui); | |
183 root.appendChild(outs); | |
184 | |
185 return description; | |
186 } | |
187 | |
188 | 84 |
189 /** | 85 /** |
190 * Returns the name of the concrete artifact. | 86 * Returns the name of the concrete artifact. |
191 * | 87 * |
192 * @return the name of the concrete artifact. | 88 * @return the name of the concrete artifact. |
193 */ | 89 */ |
90 @Override | |
194 public String getName() { | 91 public String getName() { |
195 return ARTIFACT_NAME; | 92 return ARTIFACT_NAME; |
196 } | |
197 | |
198 | |
199 protected static void appendBackgroundActivity( | |
200 ElementCreator cr, | |
201 Element root, | |
202 CallContext context | |
203 ) { | |
204 Element inBackground = cr.create("background-processing"); | |
205 root.appendChild(inBackground); | |
206 | |
207 cr.addAttr( | |
208 inBackground, | |
209 "value", | |
210 String.valueOf(context.isInBackground()), | |
211 true); | |
212 | |
213 LinkedList<Message> messages = context.getBackgroundMessages(); | |
214 | |
215 if (messages == null) { | |
216 return; | |
217 } | |
218 | |
219 CalculationMessage message = (CalculationMessage) messages.getLast(); | |
220 cr.addAttr( | |
221 inBackground, | |
222 "steps", | |
223 String.valueOf(message.getSteps()), | |
224 true); | |
225 | |
226 cr.addAttr( | |
227 inBackground, | |
228 "currentStep", | |
229 String.valueOf(message.getCurrentStep()), | |
230 true); | |
231 | |
232 inBackground.setTextContent(message.getMessage()); | |
233 } | |
234 | |
235 | |
236 /** | |
237 * Append output mode nodes to a document. | |
238 */ | |
239 protected void appendOutputModes( | |
240 Document doc, | |
241 Element outs, | |
242 CallContext context, | |
243 String uuid) | |
244 { | |
245 List<Output> generated = getOutputs(context); | |
246 logger.debug("This Artifact has " + generated.size() + " Outputs."); | |
247 | |
248 ProtocolUtils.appendOutputModes(doc, outs, generated); | |
249 } | |
250 | |
251 | |
252 /** | |
253 * This method appends the static data - that has already been inserted by | |
254 * the user - to the static node of the DESCRIBE document. | |
255 * | |
256 * @param doc The document. | |
257 * @param ui The root node. | |
258 * @param context The CallContext. | |
259 * @param uuid The identifier of the artifact. | |
260 */ | |
261 protected void appendStaticUI( | |
262 Document doc, | |
263 Node ui, | |
264 CallContext context, | |
265 String uuid) | |
266 { | |
267 List<String> stateIds = getPreviousStateIds(); | |
268 | |
269 FLYSContext flysContext = FLYSUtils.getFlysContext(context); | |
270 StateEngine engine = (StateEngine) flysContext.get( | |
271 FLYSContext.STATE_ENGINE_KEY); | |
272 | |
273 for (String stateId: stateIds) { | |
274 logger.debug("Append static data for state: " + stateId); | |
275 DefaultState state = (DefaultState) engine.getState(stateId); | |
276 | |
277 ui.appendChild(state.describeStatic(this, doc, ui, context, uuid)); | |
278 } | |
279 } | 93 } |
280 | 94 |
281 protected static boolean reportGeneratedWs( | 95 protected static boolean reportGeneratedWs( |
282 Calculation report, | 96 Calculation report, |
283 double [] ws | 97 double [] ws |