Mercurial > dive4elements > river
diff flys-client/src/main/java/org/dive4elements/river/client/server/ChartOutputServiceImpl.java @ 5834:f507086aa94b
Repaired internal references.
author | Sascha L. Teichmann <teichmann@intevation.de> |
---|---|
date | Thu, 25 Apr 2013 12:31:32 +0200 |
parents | flys-client/src/main/java/de/intevation/flys/client/server/ChartOutputServiceImpl.java@2867a0192aed |
children | 821a02bbfb4e |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/flys-client/src/main/java/org/dive4elements/river/client/server/ChartOutputServiceImpl.java Thu Apr 25 12:31:32 2013 +0200 @@ -0,0 +1,151 @@ +package de.intevation.flys.client.server; + +import java.io.OutputStream; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +import org.w3c.dom.Document; + +import org.apache.log4j.Logger; + +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import de.intevation.artifacts.common.utils.ClientProtocolUtils; + +import de.intevation.artifacts.httpclient.http.HttpClient; +import de.intevation.artifacts.httpclient.http.HttpClientImpl; + + +/** + * This service is used to request a chart from the artifact server. The + * response is directed directly to the output stream, so the image that is + * retrieved is displayed in the UI afterwards. + * + * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a> + */ +public class ChartOutputServiceImpl +extends HttpServlet +{ + private static final Logger logger = + Logger.getLogger(ChartOutputServiceImpl.class); + + + public void doGet(HttpServletRequest req, HttpServletResponse resp) { + logger.info("ChartOutputServiceImpl.doGet"); + + try { + OutputStream out = resp.getOutputStream(); + + String url = getServletContext().getInitParameter("server-url"); + + String uuid = req.getParameter("uuid"); + String type = req.getParameter("type"); + String locale = req.getParameter("locale"); + + prepareHeader(req, resp); + + Document request = ClientProtocolUtils.newOutCollectionDocument( + uuid, type, type, + ChartServiceHelper.getChartAttributes(prepareChartAttributes(req))); + + HttpClient client = new HttpClientImpl(url, locale); + client.collectionOut(request, uuid, "chart", out); + + out.close(); + out.flush(); + } + catch (IOException ioe) { + logger.error(ioe, ioe); + } + catch (Exception e) { + logger.error(e, e); + } + } + + + protected Map<String, String> prepareChartAttributes(HttpServletRequest req) { + Map<String, String> attr = new HashMap<String, String>(); + + Map params = req.getParameterMap(); + + attr.put("width", req.getParameter("width")); + attr.put("height", req.getParameter("height")); + attr.put("minx", req.getParameter("minx")); + attr.put("maxx", req.getParameter("maxx")); + attr.put("miny", req.getParameter("miny")); + attr.put("maxy", req.getParameter("maxy")); + attr.put("format", req.getParameter("format")); + attr.put("km", req.getParameter("currentKm")); + + if (logger.isDebugEnabled()) { + logger.debug("====== ZOOM VALUES ======="); + logger.debug(" min x: " + req.getParameter("minx")); + logger.debug(" max x: " + req.getParameter("maxx")); + logger.debug(" min y: " + req.getParameter("miny")); + logger.debug(" max y: " + req.getParameter("maxy")); + } + + return attr; + } + + + protected void prepareHeader( + HttpServletRequest req, + HttpServletResponse resp + ) { + String export = req.getParameter("export"); + + if (export != null && export.equals("true")) { + String format = req.getParameter("format"); + + if (format == null || format.length() == 0) { + format = "png"; + } + + String fn = "chart_export" + getFileExtension(format); + + resp.setHeader("Content-Disposition", "attachment;filename=" + fn); + resp.setHeader("Content-Type", getMimeType(format)); + } + } + + + protected String getFileExtension(String format) { + if (format.equals("png")) { + return ".png"; + } + else if (format.equals("pdf")) { + return ".pdf"; + } + else if (format.equals("svg")) { + return ".svg"; + } + else if (format.equals("csv")) { + return ".csv"; + } + + return ".png"; + } + + + protected String getMimeType(String format) { + if (format.equals("png")) { + return "image/png"; + } + else if (format.equals("pdf")) { + return "application/pdf"; + } + else if (format.equals("svg")) { + return "svg+xml"; + } + else if (format.equals("csv")) { + return "text/plain"; + } + + return "image/png"; + } +} +// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :