Mercurial > dive4elements > gnv-client
comparison gnv-artifacts/src/main/java/de/intevation/gnv/artifacts/GNVArtifactBase.java @ 735:d47901df0a14
Integrated the handling of AutoResumeStates into the initialization Process of an Artifact.
gnv-artifacts/trunk@773 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Tim Englich <tim.englich@intevation.de> |
---|---|
date | Mon, 15 Mar 2010 12:50:08 +0000 |
parents | dde7f51dbe1e |
children | 9a828e5a2390 |
comparison
equal
deleted
inserted
replaced
734:8f7fe0cc6e5a | 735:d47901df0a14 |
---|---|
1 package de.intevation.gnv.artifacts; | 1 package de.intevation.gnv.artifacts; |
2 | |
3 import java.io.IOException; | |
4 import java.io.OutputStream; | |
5 import java.util.ArrayList; | |
6 import java.util.Collection; | |
7 import java.util.HashMap; | |
8 import java.util.Iterator; | |
9 import java.util.List; | |
10 import java.util.Locale; | |
11 import java.util.Map; | |
12 | |
13 import javax.xml.xpath.XPathConstants; | |
14 | |
15 import org.apache.log4j.Logger; | |
16 import org.w3c.dom.Document; | |
17 import org.w3c.dom.Element; | |
18 import org.w3c.dom.Node; | |
19 import org.w3c.dom.NodeList; | |
2 | 20 |
3 import de.intevation.artifactdatabase.Config; | 21 import de.intevation.artifactdatabase.Config; |
4 import de.intevation.artifactdatabase.ProxyArtifact; | 22 import de.intevation.artifactdatabase.ProxyArtifact; |
5 import de.intevation.artifactdatabase.XMLUtils; | 23 import de.intevation.artifactdatabase.XMLUtils; |
6 | |
7 import de.intevation.artifacts.Artifact; | 24 import de.intevation.artifacts.Artifact; |
8 import de.intevation.artifacts.ArtifactDatabase; | 25 import de.intevation.artifacts.ArtifactDatabase; |
9 import de.intevation.artifacts.ArtifactFactory; | 26 import de.intevation.artifacts.ArtifactFactory; |
10 import de.intevation.artifacts.ArtifactNamespaceContext; | 27 import de.intevation.artifacts.ArtifactNamespaceContext; |
11 import de.intevation.artifacts.CallContext; | 28 import de.intevation.artifacts.CallContext; |
12 import de.intevation.artifacts.CallMeta; | 29 import de.intevation.artifacts.CallMeta; |
13 | |
14 import de.intevation.gnv.artifacts.context.GNVArtifactContext; | 30 import de.intevation.gnv.artifacts.context.GNVArtifactContext; |
15 | |
16 import de.intevation.gnv.artifacts.fis.product.Product; | 31 import de.intevation.gnv.artifacts.fis.product.Product; |
17 | |
18 import de.intevation.gnv.artifacts.ressource.RessourceFactory; | 32 import de.intevation.gnv.artifacts.ressource.RessourceFactory; |
19 | 33 import de.intevation.gnv.state.AutoResumeState; |
20 import de.intevation.gnv.state.DefaultInputData; | 34 import de.intevation.gnv.state.DefaultInputData; |
21 import de.intevation.gnv.state.ExportMode; | 35 import de.intevation.gnv.state.ExportMode; |
22 import de.intevation.gnv.state.InputData; | 36 import de.intevation.gnv.state.InputData; |
23 import de.intevation.gnv.state.InputValue; | 37 import de.intevation.gnv.state.InputValue; |
24 import de.intevation.gnv.state.OutputMode; | 38 import de.intevation.gnv.state.OutputMode; |
25 import de.intevation.gnv.state.OutputState; | 39 import de.intevation.gnv.state.OutputState; |
26 import de.intevation.gnv.state.State; | 40 import de.intevation.gnv.state.State; |
27 import de.intevation.gnv.state.StateFactory; | 41 import de.intevation.gnv.state.StateFactory; |
28 | |
29 import de.intevation.gnv.state.exception.StateException; | 42 import de.intevation.gnv.state.exception.StateException; |
30 | |
31 import de.intevation.gnv.transition.Transition; | 43 import de.intevation.gnv.transition.Transition; |
32 import de.intevation.gnv.transition.TransitionFactory; | 44 import de.intevation.gnv.transition.TransitionFactory; |
33 | |
34 import de.intevation.gnv.utils.ArtifactXMLUtilities; | 45 import de.intevation.gnv.utils.ArtifactXMLUtilities; |
35 | |
36 import java.io.IOException; | |
37 import java.io.OutputStream; | |
38 | |
39 import java.util.ArrayList; | |
40 import java.util.Collection; | |
41 import java.util.HashMap; | |
42 import java.util.Iterator; | |
43 import java.util.List; | |
44 import java.util.Locale; | |
45 import java.util.Map; | |
46 | |
47 import javax.xml.xpath.XPathConstants; | |
48 | |
49 import org.apache.log4j.Logger; | |
50 | |
51 import org.w3c.dom.Document; | |
52 import org.w3c.dom.Element; | |
53 import org.w3c.dom.Node; | |
54 import org.w3c.dom.NodeList; | |
55 | 46 |
56 /** | 47 /** |
57 * @author Tim Englich (tim.englich@intevation.de) | 48 * @author Tim Englich (tim.englich@intevation.de) |
58 * @author Ingo Weinzierl (ingo.weinzierl@intevation.de) | 49 * @author Ingo Weinzierl (ingo.weinzierl@intevation.de) |
59 * @author Sascha L. Teichmann (sascha.teichmann@intevation.de) | 50 * @author Sascha L. Teichmann (sascha.teichmann@intevation.de) |
166 // step forward | 157 // step forward |
167 if (isStateCurrentlyReachable(targetState)) { | 158 if (isStateCurrentlyReachable(targetState)) { |
168 | 159 |
169 next = states.get(targetState); | 160 next = states.get(targetState); |
170 | 161 |
171 // 2. Transfer Results | 162 boolean success = go2NextState(context, result, next); |
172 next.putInputData(current.getInputData(), identifier); | 163 |
173 next.setParent(current); | 164 if (success){ |
174 next.setPreSettings(this.preSettings); | 165 result = createReport( |
175 | 166 result, "result", "success", "Advance success" |
176 if (current != null) { | 167 ); |
177 current.endOfLife(context.globalContext()); | 168 }else{ |
178 } | 169 result = ArtifactXMLUtilities. |
179 | 170 createExceptionReport("Error while going to next State.", |
180 // 3. Switch to next State | 171 XMLUtils.newDocument()); |
181 current = next; | 172 } |
182 | |
183 // 4. Initialize next Step | |
184 current.initialize(identifier, context); | |
185 | |
186 result = createReport( | |
187 result, "result", "success", "Advance success" | |
188 ); | |
189 } | 173 } |
190 | 174 |
191 // step backward | 175 // step backward |
192 else if((next = getPreviousState(current, targetState)) != null) { | 176 else if((next = getPreviousState(current, targetState)) != null) { |
193 | 177 |
244 | 228 |
245 return result; | 229 return result; |
246 } | 230 } |
247 | 231 |
248 | 232 |
233 /** | |
234 * @param context | |
235 * @param result | |
236 * @param next | |
237 * @return | |
238 * @throws StateException | |
239 */ | |
240 private boolean go2NextState(CallContext context, Document result, | |
241 State next) throws StateException { | |
242 // 2. Transfer Results | |
243 next.putInputData(current.getInputData(), identifier); | |
244 next.setParent(current); | |
245 next.setPreSettings(this.preSettings); | |
246 | |
247 if (current != null) { | |
248 current.endOfLife(context.globalContext()); | |
249 } | |
250 | |
251 // 3. Switch to next State | |
252 current = next; | |
253 | |
254 // 4. Initialize next Step | |
255 current.initialize(identifier, context); | |
256 | |
257 return true; | |
258 } | |
259 | |
260 | |
249 protected Document createReport( | 261 protected Document createReport( |
250 Document document, | 262 Document document, |
251 String nodeName, | 263 String nodeName, |
252 String state, | 264 String state, |
253 String msg | 265 String msg |
300 | 312 |
301 public Document initialize (CallContext context) { | 313 public Document initialize (CallContext context) { |
302 Document result = XMLUtils.newDocument(); | 314 Document result = XMLUtils.newDocument(); |
303 try { | 315 try { |
304 this.current.initialize(super.identifier, context); | 316 this.current.initialize(super.identifier, context); |
305 result = new ArtifactXMLUtilities() | 317 |
306 .createSuccessReport("Initialize success", | 318 if (this.current instanceof AutoResumeState){ |
307 XMLUtils.newDocument()); | 319 // Jump to next State using the Transitions. |
320 State next = this.getNextReachableState(this.current); | |
321 if (next != null){ | |
322 boolean success = go2NextState(context, result, next); | |
323 if (success){ | |
324 result = ArtifactXMLUtilities | |
325 .createSuccessReport("Initialize success", | |
326 XMLUtils.newDocument()); | |
327 }else{ | |
328 result = ArtifactXMLUtilities. | |
329 createExceptionReport( | |
330 "Error while going to next State.", | |
331 XMLUtils.newDocument()); | |
332 } | |
333 }else{ | |
334 result = ArtifactXMLUtilities. | |
335 createExceptionReport("No propper State found.", | |
336 XMLUtils.newDocument()); | |
337 } | |
338 }else{ | |
339 result = ArtifactXMLUtilities | |
340 .createSuccessReport("Initialize success", | |
341 XMLUtils.newDocument()); | |
342 } | |
308 } catch (StateException e) { | 343 } catch (StateException e) { |
309 log.error(e,e); | 344 log.error(e,e); |
310 result = new ArtifactXMLUtilities().createExceptionReport(e | 345 result = ArtifactXMLUtilities.createExceptionReport(e |
311 .getLocalizedMessage(), XMLUtils.newDocument()); | 346 .getLocalizedMessage(), XMLUtils.newDocument()); |
312 } | 347 } |
313 return result; | 348 return result; |
349 } | |
350 | |
351 protected State getNextReachableState(State current){ | |
352 Iterator<Transition> it = this.transitions.iterator(); | |
353 String from = current.getID(); | |
354 while (it.hasNext()){ | |
355 Transition transition = it.next(); | |
356 if (transition.getFrom().equals(from)){ | |
357 if (transition.isValid(current)){ | |
358 return this.states.get(transition.getTo()); | |
359 } | |
360 } | |
361 } | |
362 return null; | |
314 } | 363 } |
315 | 364 |
316 protected String readStateName(Document document) { | 365 protected String readStateName(Document document) { |
317 String returnValue = XMLUtils.xpathString( | 366 String returnValue = XMLUtils.xpathString( |
318 document, XPATH_TARGET_NAME, ArtifactNamespaceContext.INSTANCE); | 367 document, XPATH_TARGET_NAME, ArtifactNamespaceContext.INSTANCE); |
361 locale, | 410 locale, |
362 EXCEPTION_NO_INPUT, | 411 EXCEPTION_NO_INPUT, |
363 EXCEPTION_NO_INPUT); | 412 EXCEPTION_NO_INPUT); |
364 | 413 |
365 log.warn(msg); | 414 log.warn(msg); |
366 result = new ArtifactXMLUtilities().createInputExceptionReport( | 415 result = ArtifactXMLUtilities.createInputExceptionReport( |
367 msg, | 416 msg, |
368 XMLUtils.newDocument()); | 417 XMLUtils.newDocument()); |
369 } | 418 } |
370 } else { | 419 } else { |
371 String msg = "No State instantiated"; | 420 String msg = "No State instantiated"; |
372 log.warn(msg); | 421 log.warn(msg); |
373 result = new ArtifactXMLUtilities().createExceptionReport(msg, | 422 result = ArtifactXMLUtilities.createExceptionReport(msg, |
374 XMLUtils.newDocument()); | 423 XMLUtils.newDocument()); |
375 } | 424 } |
376 } catch (StateException e) { | 425 } catch (StateException e) { |
377 log.error(e, e); | 426 log.error(e, e); |
378 result = new ArtifactXMLUtilities().createExceptionReport(e | 427 result = ArtifactXMLUtilities.createExceptionReport(e |
379 .getLocalizedMessage(), XMLUtils.newDocument()); | 428 .getLocalizedMessage(), XMLUtils.newDocument()); |
380 } | 429 } |
381 return result; | 430 return result; |
382 } | 431 } |
383 | 432 |