Mercurial > dive4elements > river
comparison flys-client/src/main/java/de/intevation/flys/client/server/DischargeTablesServiceImpl.java @ 4218:6ae99d996f79
flys/issue903: Display the discharge tables of the selected gauge as chart in historical discharge calculation.
There is a new class 'DischargeTablesChart' which is a Canvas and displays the chart using the new service
'DischargeTablesServiceImpl'.
author | Ingo Weinzierl <ingo.weinzierl@intevation.de> |
---|---|
date | Tue, 23 Oct 2012 12:01:19 +0200 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
4217:08b6458909a9 | 4218:6ae99d996f79 |
---|---|
1 package de.intevation.flys.client.server; | |
2 | |
3 import java.io.IOException; | |
4 import java.io.InputStream; | |
5 import java.io.OutputStream; | |
6 import java.text.DateFormat; | |
7 import java.util.Date; | |
8 import java.util.Locale; | |
9 | |
10 import javax.servlet.http.HttpServlet; | |
11 import javax.servlet.http.HttpServletRequest; | |
12 import javax.servlet.http.HttpServletResponse; | |
13 | |
14 import org.apache.log4j.Logger; | |
15 import org.w3c.dom.Document; | |
16 import org.w3c.dom.Element; | |
17 | |
18 import de.intevation.artifacts.common.utils.XMLUtils; | |
19 import de.intevation.artifacts.httpclient.http.HttpClient; | |
20 import de.intevation.artifacts.httpclient.http.HttpClientImpl; | |
21 import de.intevation.artifacts.httpclient.http.response.StreamResponseHandler; | |
22 | |
23 | |
24 public class DischargeTablesServiceImpl extends HttpServlet { | |
25 | |
26 private static final Logger logger = Logger | |
27 .getLogger(DischargeInfoServiceImpl.class); | |
28 | |
29 private static final DateFormat DATE_FORMAT = DateFormat.getDateInstance( | |
30 DateFormat.MEDIUM, Locale.GERMANY); | |
31 | |
32 public void doGet(HttpServletRequest req, HttpServletResponse resp) { | |
33 logger.info("ChartOutputServiceImpl.doGet"); | |
34 | |
35 String url = getServletContext().getInitParameter("server-url"); | |
36 String locale = req.getParameter("locale"); | |
37 | |
38 prepareHeader(req, resp); | |
39 | |
40 Document requestDoc = createRequestDoc(req); | |
41 | |
42 HttpClient client = new HttpClientImpl(url, locale); | |
43 | |
44 try { | |
45 OutputStream out = resp.getOutputStream(); | |
46 InputStream stream = (InputStream) client.callService(url, | |
47 "dischargetablesoverview", requestDoc, | |
48 new StreamResponseHandler()); | |
49 | |
50 byte[] b = new byte[4096]; | |
51 try { | |
52 int i; | |
53 while ((i = stream.read(b)) >= 0) { | |
54 out.write(b, 0, i); | |
55 } | |
56 } | |
57 finally { | |
58 stream.close(); | |
59 } | |
60 } | |
61 catch (IOException ioe) { | |
62 logger.error("Error while fetching discharge tables chart!", ioe); | |
63 } | |
64 } | |
65 | |
66 protected void prepareHeader(HttpServletRequest req, | |
67 HttpServletResponse resp) { | |
68 resp.setHeader("Content-Type", "image/png"); | |
69 } | |
70 | |
71 protected Document createRequestDoc(HttpServletRequest req) { | |
72 Document request = XMLUtils.newDocument(); | |
73 XMLUtils.ElementCreator creator = new XMLUtils.ElementCreator(request, | |
74 null, null); | |
75 | |
76 Element service = creator.create("service"); | |
77 Element gauge = creator.create("gauge"); | |
78 Element extent = creator.create("extent"); | |
79 Element format = creator.create("format"); | |
80 Element timerange = creator.create("timerange"); | |
81 | |
82 creator.addAttr(gauge, "name", extractRequestGauge(req)); | |
83 creator.addAttr(extent, "width", extractRequestWidth(req)); | |
84 creator.addAttr(extent, "height", extractRequestHeight(req)); | |
85 creator.addAttr(format, "type", extractRequestFormat(req)); | |
86 creator.addAttr(timerange, "lower", extractRequestLowerTime(req)); | |
87 creator.addAttr(timerange, "upper", extractRequestUpperTime(req)); | |
88 | |
89 request.appendChild(service); | |
90 service.appendChild(gauge); | |
91 service.appendChild(extent); | |
92 service.appendChild(format); | |
93 service.appendChild(timerange); | |
94 | |
95 return request; | |
96 } | |
97 | |
98 protected String extractRequestGauge(HttpServletRequest req) { | |
99 return req.getParameter("gauge"); | |
100 } | |
101 | |
102 protected String extractRequestWidth(HttpServletRequest req) { | |
103 return req.getParameter("width"); | |
104 } | |
105 | |
106 protected String extractRequestHeight(HttpServletRequest req) { | |
107 return req.getParameter("height"); | |
108 } | |
109 | |
110 protected String extractRequestFormat(HttpServletRequest req) { | |
111 return req.getParameter("format"); | |
112 } | |
113 | |
114 protected String extractRequestLowerTime(HttpServletRequest req) { | |
115 String lowerStr = req.getParameter("lower"); | |
116 try { | |
117 long lowerMillis = Long.parseLong(lowerStr); | |
118 Date lower = new Date(lowerMillis); | |
119 | |
120 return DATE_FORMAT.format(lower); | |
121 } | |
122 catch (NumberFormatException nfe) { | |
123 logger.warn("Cannot parse time millies.", nfe); | |
124 } | |
125 | |
126 return null; | |
127 } | |
128 | |
129 protected String extractRequestUpperTime(HttpServletRequest req) { | |
130 String upperStr = req.getParameter("upper"); | |
131 try { | |
132 long upperMillis = Long.parseLong(upperStr); | |
133 Date upper = new Date(upperMillis); | |
134 | |
135 return DATE_FORMAT.format(upper); | |
136 } | |
137 catch (NumberFormatException nfe) { | |
138 logger.warn("Cannot parse time millies.", nfe); | |
139 } | |
140 | |
141 return null; | |
142 } | |
143 } |