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: tim@13: package de.intevation.gnv.action; tim@13: ingo@409: import de.intevation.gnv.action.sessionmodel.SessionModel; ingo@409: import de.intevation.gnv.action.sessionmodel.SessionModelFactory; ingo@409: ingo@409: import de.intevation.gnv.artifactdatabase.client.ArtifactDatabaseClient; ingo@409: import de.intevation.gnv.artifactdatabase.client.ArtifactDatabaseClientFactory; ingo@409: ingo@409: import de.intevation.gnv.artifactdatabase.objects.DefaultInputParameter; ingo@409: import de.intevation.gnv.artifactdatabase.objects.InputParameter; ingo@409: import de.intevation.gnv.artifactdatabase.objects.OutputMode; ingo@409: import de.intevation.gnv.artifactdatabase.objects.OutputParameter; ingo@409: tim@13: import java.io.OutputStream; ingo@409: tim@13: import java.util.ArrayList; tim@13: import java.util.Collection; tim@13: import java.util.Iterator; tim@13: tim@13: import javax.servlet.http.HttpServletRequest; tim@13: import javax.servlet.http.HttpServletResponse; tim@13: tim@29: import org.apache.log4j.Logger; ingo@409: tim@13: import org.apache.struts.action.ActionForm; tim@13: import org.apache.struts.action.ActionForward; tim@13: import org.apache.struts.action.ActionMapping; tim@13: tim@13: /** ingo@690: * This controller calls the out operation of the server directly. Html img-tags ingo@690: * in jsp pages use this action to fetch charts and histograms. sascha@699: * sascha@684: * @author Tim Englich sascha@681: * tim@13: */ tim@13: public class DoOutputAction extends ArtifactDatabaseActionBase { tim@13: tim@13: /** tim@29: * the logger, used to log exceptions and additonaly information tim@29: */ tim@29: private static Logger log = Logger.getLogger(DoOutputAction.class); tim@36: tim@29: /** tim@13: * Constructor tim@13: */ tim@13: public DoOutputAction() { tim@13: super(); tim@13: } tim@13: ingo@690: tim@13: @Override tim@13: public ActionForward execute(ActionMapping mapping, ActionForm form, tim@38: HttpServletRequest request, tim@38: HttpServletResponse response) throws Exception { ingo@991: if (isSessionExhausted(request)) { ingo@991: return sessionExhaustedForward(mapping, form, request, response); ingo@991: } ingo@991: tim@29: log.debug("DoOutputAction.execute"); tim@34: try { ingo@583: String target = request.getParameter("target"); tim@34: String mimeType = request.getParameter("mimetype"); ingo@583: String mode = request.getParameter("mode"); tim@36: tim@36: log.debug("Target: " + target); tim@36: log.debug("MimeType: " + mimeType); ingo@583: log.debug("ExportMode: " + mode); tim@36: tim@34: // TODO Check if is propper; tim@36: tim@36: SessionModel sm = SessionModelFactory.getInstance() tim@36: .getSessionModel(request); tim@36: OutputMode outputMode = sm.getOutputMode(target); tim@36: if (outputMode != null && outputMode.getMimeType().equals(mimeType)) { tim@36: Collection inputParameter = outputMode tim@36: .getOutputParameters(); tim@34: Collection ips = null; tim@36: if (inputParameter != null) { ingo@575: ips = new ArrayList(inputParameter.size()+1); tim@34: Iterator it = inputParameter.iterator(); tim@36: while (it.hasNext()) { tim@34: String name = it.next().getName(); tim@34: String[] values = request.getParameterValues(name); tim@36: InputParameter ip = new DefaultInputParameter(name, tim@36: values); tim@34: ips.add(ip); tim@34: } ingo@575: ingo@575: if (request.getParameter("bintype") != null) { ingo@575: InputParameter ip = new DefaultInputParameter( ingo@575: "bintype", request.getParameterValues("bintype")); ingo@575: ips.add(ip); ingo@575: } tim@30: } tim@36: tim@36: ArtifactDatabaseClient adc = ArtifactDatabaseClientFactory tim@40: .getInstance() tim@40: .getArtifactDatabaseClient(getLocale(request)); tim@36: tim@34: this.setHeaders(target, mimeType, response, request); tim@36: tim@34: OutputStream outputStream = response.getOutputStream(); ingo@583: adc.doOutput( ingo@583: sm.getSelectedArtifactFactory(), ingo@583: sm.getCurrentArtifact(), ingo@583: outputStream, ingo@583: target, ingo@583: mode, ingo@583: mimeType, ingo@583: ips); tim@36: tim@34: outputStream.flush(); tim@34: outputStream.close(); tim@36: } else { tim@36: if (outputMode == null) { tim@390: log.error("Outputmode is not supported."); tim@36: } else if (!outputMode.getMimeType().equals(mimeType)) { tim@36: log.error("MimeType " + mimeType tim@390: + " wis not supported."); tim@34: } tim@34: // TODO FIXME: Fehlerbehandlung tim@13: } tim@34: return super.execute(mapping, form, request, response); tim@34: } catch (Exception e) { tim@36: log.error(e, e); tim@36: request.setAttribute( tim@36: CommunicationKeys.REQUEST_EXCEPTION_MESSAGE_ID, e tim@36: .getMessage()); tim@34: return super.getExceptionForward(mapping); tim@13: } tim@13: } tim@36: tim@36: protected void setHeaders(String target, String mimeType, tim@38: HttpServletResponse response, tim@38: HttpServletRequest request) { tim@29: response.setHeader("Content-Type", mimeType); tim@29: } tim@13: tim@13: } ingo@409: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :