Mercurial > dive4elements > river
comparison flys-client/src/main/java/de/intevation/flys/client/server/FixingsOverviewServiceImpl.java @ 2505:87ac5c532523
First part of the UI for fixing analysis parameter.
flys-client/trunk@4350 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Raimund Renkert <raimund.renkert@intevation.de> |
---|---|
date | Mon, 07 May 2012 13:22:43 +0000 |
parents | f905c936ffff |
children | 256b458cc7ea |
comparison
equal
deleted
inserted
replaced
2504:425bc486a40f | 2505:87ac5c532523 |
---|---|
1 package de.intevation.flys.client.server; | 1 package de.intevation.flys.client.server; |
2 | 2 |
3 import java.util.List; | |
4 import java.util.ArrayList; | |
5 | |
6 import org.w3c.dom.Document; | |
7 import org.w3c.dom.Node; | |
8 import org.w3c.dom.NodeList; | |
9 | |
10 import javax.xml.xpath.XPathConstants; | |
11 | |
3 import com.google.gwt.user.server.rpc.RemoteServiceServlet; | 12 import com.google.gwt.user.server.rpc.RemoteServiceServlet; |
4 | 13 |
5 import de.intevation.artifacts.common.utils.XMLUtils; | 14 import de.intevation.artifacts.common.utils.XMLUtils; |
15 | |
6 import de.intevation.artifacts.common.utils.XSLTransformer; | 16 import de.intevation.artifacts.common.utils.XSLTransformer; |
7 | 17 |
8 import de.intevation.artifacts.httpclient.exceptions.ConnectionException; | 18 import de.intevation.artifacts.httpclient.exceptions.ConnectionException; |
9 | 19 |
10 import de.intevation.artifacts.httpclient.http.HttpClient; | 20 import de.intevation.artifacts.httpclient.http.HttpClient; |
12 | 22 |
13 import de.intevation.flys.client.client.services.FixingsOverviewService; | 23 import de.intevation.flys.client.client.services.FixingsOverviewService; |
14 | 24 |
15 import de.intevation.flys.client.shared.exceptions.ServerException; | 25 import de.intevation.flys.client.shared.exceptions.ServerException; |
16 | 26 |
27 import de.intevation.flys.client.shared.model.FixingsOverviewInfo; | |
28 import de.intevation.flys.client.shared.model.FixingsOverviewInfo.FixEvent; | |
29 import de.intevation.flys.client.shared.model.FixingsOverviewInfo.Sector; | |
30 | |
17 import java.io.IOException; | 31 import java.io.IOException; |
18 import java.io.InputStream; | 32 import java.io.InputStream; |
19 | 33 |
20 import org.apache.log4j.Logger; | 34 import org.apache.log4j.Logger; |
21 | |
22 import org.w3c.dom.Document; | |
23 | 35 |
24 public class FixingsOverviewServiceImpl | 36 public class FixingsOverviewServiceImpl |
25 extends RemoteServiceServlet | 37 extends RemoteServiceServlet |
26 implements FixingsOverviewService | 38 implements FixingsOverviewService |
27 { | 39 { |
31 public static final String SERVICE_NAME = "fixings-overview"; | 43 public static final String SERVICE_NAME = "fixings-overview"; |
32 | 44 |
33 public static final String XSL_TRANSFORM = | 45 public static final String XSL_TRANSFORM = |
34 "/WEB-INF/stylesheets/fixoverview2html.xsl"; | 46 "/WEB-INF/stylesheets/fixoverview2html.xsl"; |
35 | 47 |
48 protected static final String XPATH_RID = "/fixings/river/@rid"; | |
49 protected static final String XPATH_RIVER = "/fixings/river/@name"; | |
50 protected static final String XPATH_RFROM = "/fixings/river/@from"; | |
51 protected static final String XPATH_RTO = "/fixings/river/@to"; | |
52 | |
53 protected static final String XPATH_EVENT = "/fixings/events/event"; | |
54 protected static final String XPATH_SECTORS = "sector"; | |
55 | |
56 protected static final String XPATH_CID = "@cid"; | |
57 protected static final String XPATH_DATE = "@date"; | |
58 protected static final String XPATH_NAME = "@name"; | |
59 protected static final String XPATH_CLS = "@class"; | |
60 protected static final String XPATH_FROM = "@from"; | |
61 protected static final String XPATH_TO = "@to"; | |
62 | |
36 @Override | 63 @Override |
37 public String generateOverview( | 64 public FixingsOverviewInfo generateOverview( |
38 String locale, | 65 String locale, |
39 String uuid, | 66 String uuid, |
40 boolean checkboxes, | 67 String filter, |
41 String filter | 68 boolean checkboxes, |
42 ) | 69 String callback |
70 ) | |
43 throws ServerException | 71 throws ServerException |
44 { | 72 { |
45 log.info("FixingsOverviewServiceImpl.doGet"); | 73 log.info("FixingsOverviewServiceImpl.doGet"); |
46 | 74 |
47 if (filter == null || filter.length() == 0) { | 75 if (filter == null || filter.length() == 0) { |
48 log.warn("Missing 'filter' parameter."); | 76 log.warn("Missing 'filter' parameter."); |
49 return ""; | 77 return null; |
50 } | 78 } |
51 | 79 |
52 Document filterDoc = XMLUtils.jsonToXML(filter); | 80 Document filterDoc = XMLUtils.jsonToXML(filter); |
53 | 81 |
54 if (filterDoc == null) { | 82 if (filterDoc == null) { |
55 log.warn("Creating filter document failed."); | 83 log.warn("Creating filter document failed."); |
56 return ""; | 84 return null; |
57 } | 85 } |
58 | 86 |
59 InputStream transform = | 87 /* filterDoc = XMLUtils.newDocument(); |
60 getServletContext().getResourceAsStream(XSL_TRANSFORM); | 88 ElementCreator ec = new ElementCreator(filterDoc, null, null); |
61 | 89 Element f = ec.create("fixings"); |
90 Element r = ec.create("river"); | |
91 r.setAttribute("name", "Saar"); | |
92 f.appendChild(r); | |
93 filterDoc.appendChild(f); | |
94 */ | |
62 try { | 95 try { |
63 String url = getServletContext().getInitParameter("server-url"); | 96 String url = getServletContext().getInitParameter("server-url"); |
64 HttpClient client = new HttpClientImpl(url, locale); | 97 HttpClient client = new HttpClientImpl(url, locale); |
65 Document resultDoc = | 98 Document resultDoc = |
66 client.callService(url, SERVICE_NAME, filterDoc); | 99 client.callService(url, SERVICE_NAME, filterDoc); |
67 XSLTransformer xformer = new XSLTransformer(); | 100 FixingsOverviewInfo i = getInfo(resultDoc, uuid, checkboxes, callback); |
68 xformer.addParameter("project-uuid", uuid); | 101 return i; |
69 xformer.addParameter( | |
70 "render-checkboxes", checkboxes ? "true()" : "false()"); | |
71 String result = xformer.transform(resultDoc, transform); | |
72 return result != null ? result : ""; | |
73 } | 102 } |
74 catch (ConnectionException ce) { | 103 catch (ConnectionException ce) { |
75 log.error(ce); | 104 log.error(ce); |
76 } | 105 } |
77 finally { | 106 return null; |
78 try { transform.close(); } | 107 } |
79 catch (IOException ioe) {} | 108 |
80 } | 109 |
81 | 110 protected FixingsOverviewInfo getInfo( |
82 return ""; | 111 Document doc, |
112 String uuid, | |
113 boolean checkboxes, | |
114 String callback | |
115 ) { | |
116 InputStream transform = | |
117 getServletContext().getResourceAsStream(XSL_TRANSFORM); | |
118 XSLTransformer xformer = new XSLTransformer(); | |
119 xformer.addParameter("project-uuid", uuid); | |
120 xformer.addParameter( | |
121 "render-checkboxes", checkboxes ? Boolean.TRUE : Boolean.FALSE); | |
122 xformer.addParameter("callback", callback); | |
123 String result = xformer.transform(doc, transform); | |
124 | |
125 try { transform.close(); } | |
126 catch (IOException ioe) {} | |
127 | |
128 int rid = -1; | |
129 double from = -1; | |
130 double to = -1; | |
131 String rid_str = XMLUtils.xpathString(doc, XPATH_RID, null); | |
132 String river = XMLUtils.xpathString(doc, XPATH_RIVER, null); | |
133 String from_str = XMLUtils.xpathString(doc, XPATH_RFROM, null); | |
134 String to_str = XMLUtils.xpathString(doc, XPATH_RTO, null); | |
135 try { | |
136 rid = Integer.valueOf(rid_str).intValue(); | |
137 from = Double.valueOf(from_str).doubleValue(); | |
138 to = Double.valueOf(to_str).doubleValue(); | |
139 } | |
140 catch(NumberFormatException nfe) { | |
141 log.warn(nfe, nfe); | |
142 } | |
143 | |
144 List<FixEvent> fixEvents = getFixEvents(doc); | |
145 return new FixingsOverviewInfo( | |
146 rid, | |
147 river, | |
148 from, | |
149 to, | |
150 fixEvents, | |
151 result); | |
152 } | |
153 | |
154 | |
155 protected List<FixEvent> getFixEvents(Document doc) { | |
156 NodeList events = (NodeList) XMLUtils.xpath( | |
157 doc, | |
158 XPATH_EVENT, | |
159 XPathConstants.NODESET, | |
160 null); | |
161 | |
162 if (events == null || events.getLength() == 0) { | |
163 log.warn("No events in Overview!"); | |
164 return null; | |
165 } | |
166 | |
167 List<FixEvent> list = | |
168 new ArrayList<FixEvent>(); | |
169 for (int i = 0; i < events.getLength(); i++) { | |
170 Node n = events.item(i); | |
171 List<Sector> sectors = getSectors(n); | |
172 String cid = XMLUtils.xpathString(n, XPATH_CID, null); | |
173 log.debug("'" + cid + "'"); | |
174 String date = XMLUtils.xpathString(n, XPATH_DATE, null); | |
175 String name = XMLUtils.xpathString(n, XPATH_NAME, null); | |
176 list.add(new FixEvent( | |
177 cid, | |
178 date, | |
179 name, | |
180 sectors)); | |
181 } | |
182 return list; | |
183 } | |
184 | |
185 protected List<Sector> getSectors(Node event) { | |
186 NodeList sectors = (NodeList) XMLUtils.xpath( | |
187 event, | |
188 XPATH_SECTORS, | |
189 XPathConstants.NODESET, | |
190 null); | |
191 if (sectors == null || sectors.getLength() == 0) { | |
192 log.warn("No Sectors in Event!"); | |
193 return null; | |
194 } | |
195 | |
196 List<Sector> list = | |
197 new ArrayList<Sector>(); | |
198 for (int i = 0; i < sectors.getLength(); i++) { | |
199 Node n = sectors.item(i); | |
200 int cls = -1; | |
201 double from = -1; | |
202 double to = -1; | |
203 String cls_str = XMLUtils.xpathString(n, XPATH_CLS, null); | |
204 String from_str = XMLUtils.xpathString(n, XPATH_FROM, null); | |
205 String to_str = XMLUtils.xpathString(n, XPATH_TO, null); | |
206 try { | |
207 cls = Integer.valueOf(cls_str).intValue(); | |
208 from = Double.valueOf(from_str).doubleValue(); | |
209 to = Double.valueOf(to_str).doubleValue(); | |
210 } | |
211 catch(NumberFormatException nfe) { | |
212 log.warn(nfe, nfe); | |
213 } | |
214 list.add(new Sector( | |
215 cls, | |
216 from, | |
217 to)); | |
218 } | |
219 return list; | |
83 } | 220 } |
84 } | 221 } |
85 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : | 222 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : |