diff 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
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gnv/src/main/java/de/intevation/gnv/action/PreviousArtifactStepAction.java	Wed Jan 13 22:17:02 2010 +0000
@@ -0,0 +1,126 @@
+package de.intevation.gnv.action;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.Enumeration;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import javax.xml.xpath.XPathConstants;
+
+import org.apache.log4j.Logger;
+import org.apache.struts.action.ActionForm;
+import org.apache.struts.action.ActionForward;
+import org.apache.struts.action.ActionMapping;
+import org.w3c.dom.Node;
+
+import de.intevation.gnv.action.sessionmodel.SessionModel;
+import de.intevation.gnv.action.sessionmodel.SessionModelFactory;
+import de.intevation.gnv.artifactdatabase.client.ArtifactDatabaseClient;
+import de.intevation.gnv.artifactdatabase.client.ArtifactDatabaseClientFactory;
+import de.intevation.gnv.artifactdatabase.objects.ArtifactDescription;
+import de.intevation.gnv.artifactdatabase.objects.ArtifactObject;
+import de.intevation.gnv.artifactdatabase.objects.ArtifactStatisticsSet;
+import de.intevation.gnv.artifactdatabase.objects.DefaultInputParameter;
+import de.intevation.gnv.artifactdatabase.objects.InputParameter;
+import de.intevation.gnv.util.ArtifactNamespaceContext;
+import de.intevation.gnv.util.XMLUtils;
+import de.intevation.gnv.util.XSLTransformer;
+
+/**
+ * @author Ingo Weinzierl <ingo.weinzierl@intevation.de>
+ *
+ */
+public class PreviousArtifactStepAction extends ArtifactDatabaseActionBase {
+
+    public static final String XPATH_DYNAMIC_UI = "art:dynamic";
+    public static final String XPATH_STATIC_UI  = "art:static";
+
+    public static final String URL_STATE_KEY = "target";
+
+    private static Logger logger =
+        Logger.getLogger(PreviousArtifactStepAction.class);
+
+
+    public PreviousArtifactStepAction() {
+        super();
+    }
+
+
+    @Override
+    public ActionForward execute(
+        ActionMapping       mapping,
+        ActionForm          form,
+        HttpServletRequest  request,
+        HttpServletResponse response
+    ) throws Exception {
+
+        String id = request.getSession().getId();
+
+        SessionModel session =
+            SessionModelFactory.getInstance().getSessionModel(request);
+
+            // TODO check if target is reachable
+
+            ArtifactDatabaseClientFactory f =
+                ArtifactDatabaseClientFactory.getInstance();
+            ArtifactDatabaseClient client   =
+                f.getArtifactDatabaseClient(getLocale(request));
+
+            ArtifactObject artifactFactory = session.getSelectedArtifactFactory();
+            ArtifactObject currentArtifact = session.getCurrentArtifact();
+
+            String target = (String) request.getParameter(URL_STATE_KEY);
+            logger.debug("Step back to previous state: " + target);
+
+            client.doAdvance(
+                artifactFactory,
+                currentArtifact,
+                target
+            );
+
+            ArtifactDescription description = client.getCurrentStepDescription(
+                artifactFactory,
+                currentArtifact,
+                true
+            );
+
+            Node currentUI = description.getCurrentUI();
+            if (currentUI != null) {
+                XSLTransformer transformer = new XSLTransformer();
+                Node dynamicNode = (Node) XMLUtils.xpath(
+                    currentUI,
+                    XPATH_DYNAMIC_UI,
+                    XPathConstants.NODE,
+                    ArtifactNamespaceContext.INSTANCE
+                );
+
+                if (dynamicNode != null) {
+                    String dynamicUI = transformer.transform(
+                        dynamicNode, "UTF-8", request.getRealPath(
+                            "WEB-INF/config/templates/describe-ui.xsl")
+                    );
+                    request.setAttribute("ui", dynamicUI);
+                }
+
+                Node staticNode = (Node) XMLUtils.xpath(
+                    currentUI,
+                    XPATH_STATIC_UI,
+                    XPathConstants.NODE,
+                    ArtifactNamespaceContext.INSTANCE
+                );
+
+                if (staticNode != null){
+                    String staticUI = transformer.transform(
+                        staticNode, "UTF-8", request.getRealPath(
+                            "WEB-INF/config/templates/describe-ui-static.xsl")
+                    );
+                    request.setAttribute("staticui", staticUI);
+                }
+            }
+
+        return super.execute(mapping, form, request, response);
+    }
+}

http://dive4elements.wald.intevation.org