Mercurial > dive4elements > gnv-client
diff gnv/src/main/java/de/intevation/gnv/action/DoExportAction.java @ 573:bd67164cf28b
Devided actions and exports. Adjusted output and export actions.
gnv/trunk@704 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Ingo Weinzierl <ingo.weinzierl@intevation.de> |
---|---|
date | Tue, 23 Feb 2010 17:43:16 +0000 |
parents | 9005b39c52ac |
children | b21fc7502750 |
line wrap: on
line diff
--- a/gnv/src/main/java/de/intevation/gnv/action/DoExportAction.java Tue Feb 23 15:26:50 2010 +0000 +++ b/gnv/src/main/java/de/intevation/gnv/action/DoExportAction.java Tue Feb 23 17:43:16 2010 +0000 @@ -8,11 +8,38 @@ import org.apache.log4j.Logger; +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.DefaultInputParameter; +import de.intevation.gnv.artifactdatabase.objects.ExportMode; +import de.intevation.gnv.artifactdatabase.objects.InputParameter; +import de.intevation.gnv.artifactdatabase.objects.OutputMode; +import de.intevation.gnv.artifactdatabase.objects.OutputParameter; + +import java.io.OutputStream; + +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; + /** * @author Tim Englich <tim.englich@intevation.de> * */ -public class DoExportAction extends DoOutputAction { +public class DoExportAction extends ArtifactDatabaseActionBase { /** * the logger, used to log exceptions and additonaly information @@ -26,13 +53,93 @@ super(); } + /** + * @see de.intevation.gnv.action.ArtifactDatabaseActionBase#execute(org.apache.struts.action.ActionMapping, + * org.apache.struts.action.ActionForm, + * javax.servlet.http.HttpServletRequest, + * javax.servlet.http.HttpServletResponse) + */ @Override + public ActionForward execute( + ActionMapping mapping, + ActionForm form, + HttpServletRequest request, + HttpServletResponse response) + throws Exception + { + try { + String target = request.getParameter("target"); + String mimeType = request.getParameter("mimetype"); + String mode = request.getParameter("mode"); + + log.debug("Target: " + target); + log.debug("MimeType: " + mimeType); + log.debug("ExportMode: " + mode); + + SessionModel sm = SessionModelFactory.getInstance() + .getSessionModel(request); + OutputMode outputMode = sm.getOutputMode(target); + if (outputMode != null) { + ExportMode exportMode = outputMode.getExportMode(mode); + + if (target.equals(mode) || (exportMode != null + && exportMode.getMimeType().equals(mimeType))) + { + Collection<OutputParameter> inputParameter = outputMode + .getOutputParameters(); + Collection<InputParameter> ips = null; + if (inputParameter != null) { + ips = new ArrayList<InputParameter>(inputParameter.size()); + Iterator<OutputParameter> it = inputParameter.iterator(); + while (it.hasNext()) { + String name = it.next().getName(); + String[] values = request.getParameterValues(name); + InputParameter ip = new DefaultInputParameter(name, + values); + ips.add(ip); + } + } + + ArtifactDatabaseClient adc = ArtifactDatabaseClientFactory + .getInstance() + .getArtifactDatabaseClient(getLocale(request)); + + this.setHeaders(mode, mimeType, response, request); + + OutputStream outputStream = response.getOutputStream(); + adc.doOutput(sm.getSelectedArtifactFactory(), sm + .getCurrentArtifact(), outputStream, mode, mimeType, + ips); + + outputStream.flush(); + outputStream.close(); + } + else { + if (outputMode == null) { + log.error("Outputmode is not supported."); + } + else if (!exportMode.getMimeType().equals(mimeType)) { + log.error("MimeType "+mimeType+" wis not supported."); + } + // TODO FIXME: Fehlerbehandlung + } + } + return super.execute(mapping, form, request, response); + } catch (Exception e) { + log.error(e, e); + request.setAttribute( + CommunicationKeys.REQUEST_EXCEPTION_MESSAGE_ID, e + .getMessage()); + return super.getExceptionForward(mapping); + } + } + protected void setHeaders(String target, String mimeType, HttpServletResponse response, HttpServletRequest request) { log.debug("DoExportAction.setHeaders"); try { - super.setHeaders(target, mimeType, response, request); + response.setHeader("Content-Type", mimeType); String fileName = "GNVEXPORT_" + System.currentTimeMillis() + "."; target = target.toLowerCase();