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 :

http://dive4elements.wald.intevation.org