comparison gnv/src/main/java/de/intevation/gnv/action/PreviousArtifactStepAction.java @ 394:14eecfde4607

Render links to step back to previous states into gui. Added controller to advance back to these states. gnv/trunk@538 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Ingo Weinzierl <ingo.weinzierl@intevation.de>
date Wed, 13 Jan 2010 22:17:02 +0000
parents
children 8330c1dbab34
comparison
equal deleted inserted replaced
393:d812c5b62eb4 394:14eecfde4607
1 package de.intevation.gnv.action;
2
3 import java.util.ArrayList;
4 import java.util.Collection;
5 import java.util.Iterator;
6 import java.util.Enumeration;
7
8 import javax.servlet.http.HttpServletRequest;
9 import javax.servlet.http.HttpServletResponse;
10
11 import javax.xml.xpath.XPathConstants;
12
13 import org.apache.log4j.Logger;
14 import org.apache.struts.action.ActionForm;
15 import org.apache.struts.action.ActionForward;
16 import org.apache.struts.action.ActionMapping;
17 import org.w3c.dom.Node;
18
19 import de.intevation.gnv.action.sessionmodel.SessionModel;
20 import de.intevation.gnv.action.sessionmodel.SessionModelFactory;
21 import de.intevation.gnv.artifactdatabase.client.ArtifactDatabaseClient;
22 import de.intevation.gnv.artifactdatabase.client.ArtifactDatabaseClientFactory;
23 import de.intevation.gnv.artifactdatabase.objects.ArtifactDescription;
24 import de.intevation.gnv.artifactdatabase.objects.ArtifactObject;
25 import de.intevation.gnv.artifactdatabase.objects.ArtifactStatisticsSet;
26 import de.intevation.gnv.artifactdatabase.objects.DefaultInputParameter;
27 import de.intevation.gnv.artifactdatabase.objects.InputParameter;
28 import de.intevation.gnv.util.ArtifactNamespaceContext;
29 import de.intevation.gnv.util.XMLUtils;
30 import de.intevation.gnv.util.XSLTransformer;
31
32 /**
33 * @author Ingo Weinzierl <ingo.weinzierl@intevation.de>
34 *
35 */
36 public class PreviousArtifactStepAction extends ArtifactDatabaseActionBase {
37
38 public static final String XPATH_DYNAMIC_UI = "art:dynamic";
39 public static final String XPATH_STATIC_UI = "art:static";
40
41 public static final String URL_STATE_KEY = "target";
42
43 private static Logger logger =
44 Logger.getLogger(PreviousArtifactStepAction.class);
45
46
47 public PreviousArtifactStepAction() {
48 super();
49 }
50
51
52 @Override
53 public ActionForward execute(
54 ActionMapping mapping,
55 ActionForm form,
56 HttpServletRequest request,
57 HttpServletResponse response
58 ) throws Exception {
59
60 String id = request.getSession().getId();
61
62 SessionModel session =
63 SessionModelFactory.getInstance().getSessionModel(request);
64
65 // TODO check if target is reachable
66
67 ArtifactDatabaseClientFactory f =
68 ArtifactDatabaseClientFactory.getInstance();
69 ArtifactDatabaseClient client =
70 f.getArtifactDatabaseClient(getLocale(request));
71
72 ArtifactObject artifactFactory = session.getSelectedArtifactFactory();
73 ArtifactObject currentArtifact = session.getCurrentArtifact();
74
75 String target = (String) request.getParameter(URL_STATE_KEY);
76 logger.debug("Step back to previous state: " + target);
77
78 client.doAdvance(
79 artifactFactory,
80 currentArtifact,
81 target
82 );
83
84 ArtifactDescription description = client.getCurrentStepDescription(
85 artifactFactory,
86 currentArtifact,
87 true
88 );
89
90 Node currentUI = description.getCurrentUI();
91 if (currentUI != null) {
92 XSLTransformer transformer = new XSLTransformer();
93 Node dynamicNode = (Node) XMLUtils.xpath(
94 currentUI,
95 XPATH_DYNAMIC_UI,
96 XPathConstants.NODE,
97 ArtifactNamespaceContext.INSTANCE
98 );
99
100 if (dynamicNode != null) {
101 String dynamicUI = transformer.transform(
102 dynamicNode, "UTF-8", request.getRealPath(
103 "WEB-INF/config/templates/describe-ui.xsl")
104 );
105 request.setAttribute("ui", dynamicUI);
106 }
107
108 Node staticNode = (Node) XMLUtils.xpath(
109 currentUI,
110 XPATH_STATIC_UI,
111 XPathConstants.NODE,
112 ArtifactNamespaceContext.INSTANCE
113 );
114
115 if (staticNode != null){
116 String staticUI = transformer.transform(
117 staticNode, "UTF-8", request.getRealPath(
118 "WEB-INF/config/templates/describe-ui-static.xsl")
119 );
120 request.setAttribute("staticui", staticUI);
121 }
122 }
123
124 return super.execute(mapping, form, request, response);
125 }
126 }

http://dive4elements.wald.intevation.org