view gnv/src/main/java/de/intevation/gnv/action/WMSAction.java @ 676:707e142e7d44

Improved ExceptionHandling during WMS-Publishing. gnv/trunk@807 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Tim Englich <tim.englich@intevation.de>
date Fri, 19 Mar 2010 13:15:59 +0000
parents ccd47d9887ec
children 8315b0a40329
line wrap: on
line source
package de.intevation.gnv.action;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

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.Document;

import de.intevation.gnv.action.sessionmodel.DiagrammOptions;
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.ArtifactObject;
import de.intevation.gnv.artifactdatabase.objects.DefaultInputParameter;
import de.intevation.gnv.artifactdatabase.objects.InputParameter;
import de.intevation.gnv.artifactdatabase.objects.OutputMode;
import de.intevation.gnv.artifactdatabase.objects.OutputParameter;
import de.intevation.gnv.util.XMLUtils;

/**
 * @author Ingo Weinzierl (ingo.weinzierl@intevation.de)
 */
public class WMSAction extends DescribeUIAction {

    public static final String XPATH_MAPSERVER_PATH =
        "/art:meta/art:mapserver/art:server/text()";

    public static final String XPATH_MAPSERVER_MAPFILE =
        "/art:meta/art:mapserver/art:map/text()";

    public static final String XPATH_LAYER_TITLE =
        "/art:meta/art:layer/art:title/text()";

    /**
     * the logger, used to log exceptions and additonaly information
     */
    private static Logger logger = Logger.getLogger(WMSAction.class);

    /**
     * Constructor
     */
    public WMSAction() {
        super();
    }

    @Override
    public ActionForward execute(ActionMapping mapping, ActionForm form,
                                 HttpServletRequest request,
                                 HttpServletResponse response) throws Exception {
        logger.debug("WMSAction.execute");
        try {
            SessionModel sm = SessionModelFactory.getInstance().getSessionModel(
                request);

            OutputMode outputMode          = sm.getOutputMode("wms");
            Collection<InputParameter> ips = null;
            if (outputMode != null) {
                Collection<OutputParameter> inputParameter =
                    outputMode.getOutputParameters();

                if (inputParameter != null) {
                    ips = new ArrayList<InputParameter>(inputParameter.size());
                    Iterator<OutputParameter> it = inputParameter.iterator();
                    DiagrammOptions diagrammOptions = new DiagrammOptions();

                    int params = 0;
                    while (it.hasNext()) {
                        String name       = it.next().getName();
                        String[] values   = request.getParameterValues(name);
                        String value      = request.getParameter(name);
                        InputParameter ip = new DefaultInputParameter(name,
                                values);
                        ips.add(ip);

                        if (value != null) {
                            ++params;
                            diagrammOptions.setValue(name, value);
                        }
                    }

                    if (params > 0) {
                        sm.setDiagrammOptions(diagrammOptions);
                    }
                }
            }

            ArtifactObject artifact = sm.getCurrentArtifact();

            ArtifactDatabaseClientFactory factory =
                ArtifactDatabaseClientFactory.getInstance();
            ArtifactDatabaseClient adc = factory.getArtifactDatabaseClient(
                getLocale(request));
            ArtifactObject artifactfactory = sm.getSelectedArtifactFactory();

            // do wms publishing
            Document meta        = adc.publishWMS(artifactfactory,artifact,ips);
            String mapserverPath = XMLUtils.getStringXPath(
                meta, XPATH_MAPSERVER_PATH);
            String mapfilePath   = XMLUtils.getStringXPath(
                meta, XPATH_MAPSERVER_MAPFILE);
            String layer         = XMLUtils.getStringXPath(
                meta, XPATH_LAYER_TITLE);
            layer                = layer != null ? layer : artifact.getId();

            if (logger.isDebugEnabled()) {
                logger.debug("Mapserver path: " + mapserverPath);
                logger.debug("Mapfile path: " + mapfilePath);
                logger.debug("Layer title: " + layer);
            }

            request.setAttribute("wms", true);
            request.setAttribute("mapserver", mapserverPath);
            request.setAttribute("mapfile", mapfilePath);
            request.setAttribute("layer", layer);
            if (mapserverPath != null && 
                mapfilePath != null   &&
                layer != null){
                return super.execute(mapping, form, request, response);
            }else{
                return super.getExceptionForward(mapping);
            }
        }
        catch (Exception e) {
            logger.error(e, e);
            request.setAttribute(
                CommunicationKeys.REQUEST_EXCEPTION_MESSAGE_ID,
                e.getMessage());

            return super.getExceptionForward(mapping);
        }
    }

}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :

http://dive4elements.wald.intevation.org