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

http://dive4elements.wald.intevation.org