view gnv/src/main/java/de/intevation/gnv/action/StoreAction.java @ 1022:28a0628b11b0

Added license file and license header. gnv/trunk@1258 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Ingo Weinzierl <ingo.weinzierl@intevation.de>
date Tue, 02 Nov 2010 17:15:08 +0000
parents 33198e55371c
children
line wrap: on
line source
/*
 * Copyright (c) 2010 by Intevation GmbH
 *
 * This program is free software under the LGPL (>=v2.1)
 * Read the file LGPL.txt coming with the software for details
 * or visit http://www.gnu.org/licenses/ if it does not exist.
 */

package de.intevation.gnv.action;

import java.io.OutputStream;

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

/**
 * This controller is used to save the current artifact to an xml file. A file
 * dialog is opened to save the file to the local disk.
 *
 * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a>
 */
public class StoreAction extends ArtifactDatabaseActionBase {

    public static final String RESOURCE_DOWNLOAD_FAILURE = "no.artifact.chosen";

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

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

    @Override
    public ActionForward execute(
        ActionMapping       mapping,
        ActionForm          form,
        HttpServletRequest  request,
        HttpServletResponse response)
    throws Exception
    {
        if (isSessionExhausted(request)) {
            return sessionExhaustedForward(mapping, form, request, response);
        }

        SessionModelFactory sf = SessionModelFactory.getInstance();
        SessionModel        sm = sf.getSessionModel(request);

        ArtifactDatabaseClientFactory adcf =
            ArtifactDatabaseClientFactory.getInstance();
        ArtifactDatabaseClient adc =
            adcf.getArtifactDatabaseClient(getLocale(request));
        ArtifactObject artifact = sm.getCurrentArtifact();

        // no artifact set at the moment (which means, the user didn't select a
        // fis yet.
        if (artifact == null) {
            logger.warn("No artifact/fis selected yet.");

            request.setAttribute(
                CommunicationKeys.REQUEST_EXCEPTION_PROJECT,
                RESOURCE_DOWNLOAD_FAILURE);

            return super.execute(mapping, form, request, response);
        }

        logger.info("Export artifact " + artifact.getId());
        setHeaders(response, artifact.getId());

        OutputStream out = response.getOutputStream();
        adc.doExport(
            sm.getSelectedArtifactFactory(),
            artifact,
            out);

        out.flush();
        out.close();

        return null;
    }
    
    /**
     * Sets the header of the response.
     * @param response the response
     * @param uuid the uuid of the artifact
     */
    protected void setHeaders(HttpServletResponse response, String uuid) {
        String filename = "GNVArtefakt_" + uuid + ".xml";

        response.setHeader("Content-Type", "application/xml");
        response.setHeader(
            "Content-Disposition",
            "attachment;filename=" + filename);
    }
}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :

http://dive4elements.wald.intevation.org