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

http://dive4elements.wald.intevation.org