Mercurial > dive4elements > gnv-client
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 } |