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