view 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 source
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