ingo@1022: /* ingo@1022: * Copyright (c) 2010 by Intevation GmbH ingo@1022: * ingo@1022: * This program is free software under the LGPL (>=v2.1) ingo@1022: * Read the file LGPL.txt coming with the software for details ingo@1022: * or visit http://www.gnu.org/licenses/ if it does not exist. ingo@1022: */ ingo@1022: ingo@670: package de.intevation.gnv.action; ingo@670: ingo@670: import java.io.OutputStream; ingo@670: ingo@670: import javax.servlet.http.HttpServletRequest; ingo@670: import javax.servlet.http.HttpServletResponse; ingo@670: ingo@670: import org.apache.log4j.Logger; ingo@670: import org.apache.struts.action.ActionForm; ingo@670: import org.apache.struts.action.ActionForward; ingo@670: import org.apache.struts.action.ActionMapping; ingo@670: tim@963: import de.intevation.gnv.action.sessionmodel.SessionModel; tim@963: import de.intevation.gnv.action.sessionmodel.SessionModelFactory; tim@963: import de.intevation.gnv.artifactdatabase.client.ArtifactDatabaseClient; tim@963: import de.intevation.gnv.artifactdatabase.client.ArtifactDatabaseClientFactory; tim@963: import de.intevation.gnv.artifactdatabase.objects.ArtifactObject; tim@963: ingo@670: /** ingo@690: * This controller is used to save the current artifact to an xml file. A file ingo@690: * dialog is opened to save the file to the local disk. sascha@699: * sascha@684: * @author Ingo Weinzierl ingo@670: */ ingo@670: public class StoreAction extends ArtifactDatabaseActionBase { ingo@670: ingo@670: public static final String RESOURCE_DOWNLOAD_FAILURE = "no.artifact.chosen"; ingo@670: tim@963: /** tim@963: * the logger, used to log exceptions and additonaly information tim@963: */ ingo@670: private static Logger logger = Logger.getLogger(StoreAction.class); ingo@670: tim@963: /** tim@963: * Constructor tim@963: */ ingo@670: public StoreAction() { ingo@670: super(); ingo@670: } ingo@670: tim@963: @Override ingo@670: public ActionForward execute( ingo@670: ActionMapping mapping, ingo@670: ActionForm form, ingo@670: HttpServletRequest request, ingo@670: HttpServletResponse response) ingo@670: throws Exception ingo@670: { ingo@991: if (isSessionExhausted(request)) { ingo@991: return sessionExhaustedForward(mapping, form, request, response); ingo@991: } ingo@991: ingo@670: SessionModelFactory sf = SessionModelFactory.getInstance(); ingo@670: SessionModel sm = sf.getSessionModel(request); ingo@670: ingo@670: ArtifactDatabaseClientFactory adcf = ingo@670: ArtifactDatabaseClientFactory.getInstance(); ingo@670: ArtifactDatabaseClient adc = ingo@670: adcf.getArtifactDatabaseClient(getLocale(request)); ingo@670: ArtifactObject artifact = sm.getCurrentArtifact(); ingo@670: ingo@670: // no artifact set at the moment (which means, the user didn't select a ingo@670: // fis yet. ingo@670: if (artifact == null) { ingo@670: logger.warn("No artifact/fis selected yet."); ingo@670: ingo@670: request.setAttribute( ingo@670: CommunicationKeys.REQUEST_EXCEPTION_PROJECT, ingo@670: RESOURCE_DOWNLOAD_FAILURE); ingo@670: ingo@670: return super.execute(mapping, form, request, response); ingo@670: } ingo@670: ingo@670: logger.info("Export artifact " + artifact.getId()); ingo@670: setHeaders(response, artifact.getId()); ingo@670: ingo@670: OutputStream out = response.getOutputStream(); ingo@670: adc.doExport( ingo@670: sm.getSelectedArtifactFactory(), ingo@670: artifact, ingo@670: out); ingo@670: ingo@670: out.flush(); ingo@670: out.close(); ingo@670: ingo@670: return null; ingo@670: } tim@963: tim@963: /** tim@963: * Sets the header of the response. tim@963: * @param response the response tim@963: * @param uuid the uuid of the artifact tim@963: */ ingo@670: protected void setHeaders(HttpServletResponse response, String uuid) { ingo@670: String filename = "GNVArtefakt_" + uuid + ".xml"; ingo@670: ingo@670: response.setHeader("Content-Type", "application/xml"); ingo@670: response.setHeader( ingo@670: "Content-Disposition", ingo@670: "attachment;filename=" + filename); ingo@670: } ingo@670: } ingo@670: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :