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 :