Mercurial > dive4elements > river
diff 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 |
line wrap: on
line diff
--- a/flys-client/src/main/java/de/intevation/flys/client/server/FixingsOverviewServiceImpl.java Fri May 04 18:31:03 2012 +0000 +++ b/flys-client/src/main/java/de/intevation/flys/client/server/FixingsOverviewServiceImpl.java Mon May 07 13:22:43 2012 +0000 @@ -1,8 +1,18 @@ package de.intevation.flys.client.server; +import java.util.List; +import java.util.ArrayList; + +import org.w3c.dom.Document; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; + +import javax.xml.xpath.XPathConstants; + import com.google.gwt.user.server.rpc.RemoteServiceServlet; import de.intevation.artifacts.common.utils.XMLUtils; + import de.intevation.artifacts.common.utils.XSLTransformer; import de.intevation.artifacts.httpclient.exceptions.ConnectionException; @@ -14,13 +24,15 @@ import de.intevation.flys.client.shared.exceptions.ServerException; +import de.intevation.flys.client.shared.model.FixingsOverviewInfo; +import de.intevation.flys.client.shared.model.FixingsOverviewInfo.FixEvent; +import de.intevation.flys.client.shared.model.FixingsOverviewInfo.Sector; + import java.io.IOException; import java.io.InputStream; import org.apache.log4j.Logger; -import org.w3c.dom.Document; - public class FixingsOverviewServiceImpl extends RemoteServiceServlet implements FixingsOverviewService @@ -33,53 +45,178 @@ public static final String XSL_TRANSFORM = "/WEB-INF/stylesheets/fixoverview2html.xsl"; + protected static final String XPATH_RID = "/fixings/river/@rid"; + protected static final String XPATH_RIVER = "/fixings/river/@name"; + protected static final String XPATH_RFROM = "/fixings/river/@from"; + protected static final String XPATH_RTO = "/fixings/river/@to"; + + protected static final String XPATH_EVENT = "/fixings/events/event"; + protected static final String XPATH_SECTORS = "sector"; + + protected static final String XPATH_CID = "@cid"; + protected static final String XPATH_DATE = "@date"; + protected static final String XPATH_NAME = "@name"; + protected static final String XPATH_CLS = "@class"; + protected static final String XPATH_FROM = "@from"; + protected static final String XPATH_TO = "@to"; + @Override - public String generateOverview( - String locale, + public FixingsOverviewInfo generateOverview( + String locale, String uuid, - boolean checkboxes, - String filter - ) + String filter, + boolean checkboxes, + String callback + ) throws ServerException { log.info("FixingsOverviewServiceImpl.doGet"); if (filter == null || filter.length() == 0) { log.warn("Missing 'filter' parameter."); - return ""; + return null; } Document filterDoc = XMLUtils.jsonToXML(filter); if (filterDoc == null) { log.warn("Creating filter document failed."); - return ""; + return null; } - InputStream transform = - getServletContext().getResourceAsStream(XSL_TRANSFORM); - +/* filterDoc = XMLUtils.newDocument(); + ElementCreator ec = new ElementCreator(filterDoc, null, null); + Element f = ec.create("fixings"); + Element r = ec.create("river"); + r.setAttribute("name", "Saar"); + f.appendChild(r); + filterDoc.appendChild(f); +*/ try { String url = getServletContext().getInitParameter("server-url"); HttpClient client = new HttpClientImpl(url, locale); Document resultDoc = client.callService(url, SERVICE_NAME, filterDoc); - XSLTransformer xformer = new XSLTransformer(); - xformer.addParameter("project-uuid", uuid); - xformer.addParameter( - "render-checkboxes", checkboxes ? "true()" : "false()"); - String result = xformer.transform(resultDoc, transform); - return result != null ? result : ""; + FixingsOverviewInfo i = getInfo(resultDoc, uuid, checkboxes, callback); + return i; } catch (ConnectionException ce) { log.error(ce); } - finally { - try { transform.close(); } - catch (IOException ioe) {} + return null; + } + + + protected FixingsOverviewInfo getInfo( + Document doc, + String uuid, + boolean checkboxes, + String callback + ) { + InputStream transform = + getServletContext().getResourceAsStream(XSL_TRANSFORM); + XSLTransformer xformer = new XSLTransformer(); + xformer.addParameter("project-uuid", uuid); + xformer.addParameter( + "render-checkboxes", checkboxes ? Boolean.TRUE : Boolean.FALSE); + xformer.addParameter("callback", callback); + String result = xformer.transform(doc, transform); + + try { transform.close(); } + catch (IOException ioe) {} + + int rid = -1; + double from = -1; + double to = -1; + String rid_str = XMLUtils.xpathString(doc, XPATH_RID, null); + String river = XMLUtils.xpathString(doc, XPATH_RIVER, null); + String from_str = XMLUtils.xpathString(doc, XPATH_RFROM, null); + String to_str = XMLUtils.xpathString(doc, XPATH_RTO, null); + try { + rid = Integer.valueOf(rid_str).intValue(); + from = Double.valueOf(from_str).doubleValue(); + to = Double.valueOf(to_str).doubleValue(); + } + catch(NumberFormatException nfe) { + log.warn(nfe, nfe); } - return ""; + List<FixEvent> fixEvents = getFixEvents(doc); + return new FixingsOverviewInfo( + rid, + river, + from, + to, + fixEvents, + result); + } + + + protected List<FixEvent> getFixEvents(Document doc) { + NodeList events = (NodeList) XMLUtils.xpath( + doc, + XPATH_EVENT, + XPathConstants.NODESET, + null); + + if (events == null || events.getLength() == 0) { + log.warn("No events in Overview!"); + return null; + } + + List<FixEvent> list = + new ArrayList<FixEvent>(); + for (int i = 0; i < events.getLength(); i++) { + Node n = events.item(i); + List<Sector> sectors = getSectors(n); + String cid = XMLUtils.xpathString(n, XPATH_CID, null); + log.debug("'" + cid + "'"); + String date = XMLUtils.xpathString(n, XPATH_DATE, null); + String name = XMLUtils.xpathString(n, XPATH_NAME, null); + list.add(new FixEvent( + cid, + date, + name, + sectors)); + } + return list; + } + + protected List<Sector> getSectors(Node event) { + NodeList sectors = (NodeList) XMLUtils.xpath( + event, + XPATH_SECTORS, + XPathConstants.NODESET, + null); + if (sectors == null || sectors.getLength() == 0) { + log.warn("No Sectors in Event!"); + return null; + } + + List<Sector> list = + new ArrayList<Sector>(); + for (int i = 0; i < sectors.getLength(); i++) { + Node n = sectors.item(i); + int cls = -1; + double from = -1; + double to = -1; + String cls_str = XMLUtils.xpathString(n, XPATH_CLS, null); + String from_str = XMLUtils.xpathString(n, XPATH_FROM, null); + String to_str = XMLUtils.xpathString(n, XPATH_TO, null); + try { + cls = Integer.valueOf(cls_str).intValue(); + from = Double.valueOf(from_str).doubleValue(); + to = Double.valueOf(to_str).doubleValue(); + } + catch(NumberFormatException nfe) { + log.warn(nfe, nfe); + } + list.add(new Sector( + cls, + from, + to)); + } + return list; } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :