comparison flys-client/src/main/java/de/intevation/flys/client/server/SQKMChartServiceImpl.java @ 2953:75e9eab05ee4

Added overview chart to sq relation period input panel. flys-client/trunk@4932 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Raimund Renkert <raimund.renkert@intevation.de>
date Wed, 11 Jul 2012 11:24:27 +0000
parents
children
comparison
equal deleted inserted replaced
2952:3cacd42a0336 2953:75e9eab05ee4
1 package de.intevation.flys.client.server;
2
3 import org.apache.log4j.Logger;
4
5 import java.io.IOException;
6 import java.io.InputStream;
7 import java.io.OutputStream;
8
9 import javax.servlet.http.HttpServlet;
10 import javax.servlet.http.HttpServletRequest;
11 import javax.servlet.http.HttpServletResponse;
12
13 import org.w3c.dom.Document;
14 import org.w3c.dom.Element;
15 import org.w3c.dom.NodeList;
16
17 import de.intevation.artifacts.common.utils.XMLUtils;
18
19 import de.intevation.artifacts.httpclient.exceptions.ConnectionException;
20 import de.intevation.artifacts.httpclient.http.HttpClient;
21 import de.intevation.artifacts.httpclient.http.HttpClientImpl;
22
23 import de.intevation.artifacts.httpclient.http.response.StreamResponseHandler;
24
25 public class SQKMChartServiceImpl
26 extends HttpServlet
27 {
28 private static final Logger log =
29 Logger.getLogger(FixingsKMChartServiceImpl.class);
30
31 public static final String SERVICE_NAME = "sq-km-chart";
32
33 public SQKMChartServiceImpl() {
34 }
35
36 public void doGet(HttpServletRequest req, HttpServletResponse resp) {
37
38 log.info("SQKMChartServiceImpl.doGet");
39
40 String url = getServletContext().getInitParameter("server-url");
41 String locale = req.getParameter("locale");
42 String filter = req.getParameter("filter");
43
44 if (filter == null || filter.length() == 0) {
45 log.warn("Missing 'filter' parameter.");
46 return;
47 }
48
49 if (locale == null || locale.length() == 0) {
50 locale = "de";
51 }
52
53 Document filterDoc = XMLUtils.jsonToXML(filter);
54
55 if (filterDoc == null) {
56 log.warn("Creating filter document failed.");
57 return;
58 }
59
60 InputStream in;
61
62 try {
63 HttpClient client = new HttpClientImpl(url, locale);
64 in = (InputStream)client.callService(
65 url, // XXX: Why? The URL is passed by construction already.
66 SERVICE_NAME,
67 filterDoc,
68 new StreamResponseHandler());
69 }
70 catch (ConnectionException ce) {
71 log.error(ce);
72 return;
73 }
74
75 resp.setHeader("Content-Type", guessMIMEType(filterDoc));
76
77 try {
78 OutputStream out = resp.getOutputStream();
79
80 byte [] buf = new byte[4096];
81 int i = -1;
82 while ((i = in.read(buf)) >= 0) {
83 out.write(buf, 0, i);
84 }
85 out.flush();
86 }
87 catch (IOException ioe) {
88 log.error(ioe);
89 }
90 finally {
91 try { in.close(); }
92 catch (IOException ioe) { /* ignored */ }
93 }
94 }
95
96 protected static String guessMIMEType(Document document) {
97
98 NodeList formats = document.getElementsByTagName("format");
99
100 String format = "png";
101
102 if (formats.getLength() > 0) {
103 String type = ((Element)formats.item(0)).getAttribute("type");
104 if (type.length() > 0) {
105 format = type;
106 }
107 }
108
109 return "image/" + format;
110 }
111 }

http://dive4elements.wald.intevation.org