comparison gnv/src/main/java/de/intevation/gnv/action/PreviousArtifactStepAction.java @ 409:df78178e1180

Moved user interface creation to an own action. This makes avoids code duplication and makes it easier to write new action to handle special interactions, because there is no need for parsing the describe document and creating the user interface after this. gnv/trunk@599 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Ingo Weinzierl <ingo.weinzierl@intevation.de>
date Fri, 22 Jan 2010 11:28:25 +0000
parents 8330c1dbab34
children 377da78ed36b
comparison
equal deleted inserted replaced
408:b5733f9f386b 409:df78178e1180
4 import de.intevation.gnv.action.sessionmodel.SessionModelFactory; 4 import de.intevation.gnv.action.sessionmodel.SessionModelFactory;
5 5
6 import de.intevation.gnv.artifactdatabase.client.ArtifactDatabaseClient; 6 import de.intevation.gnv.artifactdatabase.client.ArtifactDatabaseClient;
7 import de.intevation.gnv.artifactdatabase.client.ArtifactDatabaseClientFactory; 7 import de.intevation.gnv.artifactdatabase.client.ArtifactDatabaseClientFactory;
8 8
9 import de.intevation.gnv.artifactdatabase.objects.ArtifactDescription;
10 import de.intevation.gnv.artifactdatabase.objects.ArtifactObject; 9 import de.intevation.gnv.artifactdatabase.objects.ArtifactObject;
11
12 import de.intevation.gnv.util.ArtifactNamespaceContext;
13 import de.intevation.gnv.util.XMLUtils;
14 import de.intevation.gnv.util.XSLTransformer;
15 10
16 import javax.servlet.http.HttpServletRequest; 11 import javax.servlet.http.HttpServletRequest;
17 import javax.servlet.http.HttpServletResponse; 12 import javax.servlet.http.HttpServletResponse;
18
19 import javax.xml.xpath.XPathConstants;
20 13
21 import org.apache.log4j.Logger; 14 import org.apache.log4j.Logger;
22 15
23 import org.apache.struts.action.ActionForm; 16 import org.apache.struts.action.ActionForm;
24 import org.apache.struts.action.ActionForward; 17 import org.apache.struts.action.ActionForward;
25 import org.apache.struts.action.ActionMapping; 18 import org.apache.struts.action.ActionMapping;
26 19
27 import org.w3c.dom.Node; 20
28 /** 21 /**
29 * @author Ingo Weinzierl <ingo.weinzierl@intevation.de> 22 * @author Ingo Weinzierl <ingo.weinzierl@intevation.de>
30 * 23 *
31 */ 24 */
32 public class PreviousArtifactStepAction extends ArtifactDatabaseActionBase { 25 public class PreviousArtifactStepAction extends DescribeUIAction {
33 26
34 public static final String XPATH_DYNAMIC_UI = "art:dynamic";
35 public static final String XPATH_STATIC_UI = "art:static";
36 27
37 public static final String URL_STATE_KEY = "target"; 28 public static final String URL_STATE_KEY = "target";
38 29
39 private static Logger logger = 30 private static Logger logger =
40 Logger.getLogger(PreviousArtifactStepAction.class); 31 Logger.getLogger(PreviousArtifactStepAction.class);
53 HttpServletResponse response 44 HttpServletResponse response
54 ) throws Exception { 45 ) throws Exception {
55 46
56 String id = request.getSession().getId(); 47 String id = request.getSession().getId();
57 48
58 SessionModel session = 49 SessionModel session = SessionModelFactory.getInstance().getSessionModel(
59 SessionModelFactory.getInstance().getSessionModel(request); 50 request);
60 51
61 // TODO check if target is reachable 52 // TODO check if target is reachable
62 53
63 ArtifactDatabaseClientFactory f = 54 ArtifactDatabaseClientFactory f =
64 ArtifactDatabaseClientFactory.getInstance(); 55 ArtifactDatabaseClientFactory.getInstance();
65 ArtifactDatabaseClient client = 56 ArtifactDatabaseClient client =
66 f.getArtifactDatabaseClient(getLocale(request)); 57 f.getArtifactDatabaseClient(getLocale(request));
67 58
68 ArtifactObject artifactFactory = session.getSelectedArtifactFactory(); 59 ArtifactObject artifactFactory = session.getSelectedArtifactFactory();
69 ArtifactObject currentArtifact = session.getCurrentArtifact(); 60 ArtifactObject currentArtifact = session.getCurrentArtifact();
70 61
71 String target = (String) request.getParameter(URL_STATE_KEY); 62 String target = (String) request.getParameter(URL_STATE_KEY);
72 logger.debug("Step back to previous state: " + target); 63 logger.debug("Step back to previous state: " + target);
73 64
74 client.doAdvance( 65 client.doAdvance(
75 artifactFactory, 66 artifactFactory,
76 currentArtifact, 67 currentArtifact,
77 target 68 target
78 ); 69 );
79
80 ArtifactDescription description = client.getCurrentStepDescription(
81 artifactFactory,
82 currentArtifact,
83 true
84 );
85
86 Node currentUI = description.getCurrentUI();
87 if (currentUI != null) {
88 XSLTransformer transformer = new XSLTransformer();
89 Node dynamicNode = (Node) XMLUtils.xpath(
90 currentUI,
91 XPATH_DYNAMIC_UI,
92 XPathConstants.NODE,
93 ArtifactNamespaceContext.INSTANCE
94 );
95
96 if (dynamicNode != null) {
97 String dynamicUI = transformer.transform(
98 dynamicNode, "UTF-8", request.getRealPath(
99 "WEB-INF/config/templates/describe-ui.xsl")
100 );
101 request.setAttribute("ui", dynamicUI);
102 }
103
104 Node staticNode = (Node) XMLUtils.xpath(
105 currentUI,
106 XPATH_STATIC_UI,
107 XPathConstants.NODE,
108 ArtifactNamespaceContext.INSTANCE
109 );
110
111 if (staticNode != null){
112 String staticUI = transformer.transform(
113 staticNode, "UTF-8", request.getRealPath(
114 "WEB-INF/config/templates/describe-ui-static.xsl")
115 );
116 request.setAttribute("staticui", staticUI);
117 }
118 }
119 70
120 return super.execute(mapping, form, request, response); 71 return super.execute(mapping, form, request, response);
121 } 72 }
122 } 73 }
74 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :

http://dive4elements.wald.intevation.org