Mercurial > dive4elements > river
changeset 4250:ef154fbf58f1
Add method to get the MeasurementStations from the RiverInfoService
Also refactor the RiverInfoServiceImpl to use common code for getting GaugeInfo
and MeasurementStations.
author | Björn Ricks <bjoern.ricks@intevation.de> |
---|---|
date | Wed, 24 Oct 2012 17:09:04 +0200 |
parents | 7a889098bcc6 |
children | 95d2002f6e2c |
files | flys-client/src/main/java/de/intevation/flys/client/client/services/RiverInfoService.java flys-client/src/main/java/de/intevation/flys/client/client/services/RiverInfoServiceAsync.java flys-client/src/main/java/de/intevation/flys/client/server/RiverInfoServiceImpl.java |
diffstat | 3 files changed, 228 insertions(+), 106 deletions(-) [+] |
line wrap: on
line diff
--- a/flys-client/src/main/java/de/intevation/flys/client/client/services/RiverInfoService.java Wed Oct 24 17:00:37 2012 +0200 +++ b/flys-client/src/main/java/de/intevation/flys/client/client/services/RiverInfoService.java Wed Oct 24 17:09:04 2012 +0200 @@ -18,4 +18,10 @@ public RiverInfo getGauges(String river) throws ServerException; + /** + * Returns a RiverInfo object with MeasurementStations + */ + public RiverInfo getMeasurementStations(String river) + throws ServerException; + }
--- a/flys-client/src/main/java/de/intevation/flys/client/client/services/RiverInfoServiceAsync.java Wed Oct 24 17:00:37 2012 +0200 +++ b/flys-client/src/main/java/de/intevation/flys/client/client/services/RiverInfoServiceAsync.java Wed Oct 24 17:09:04 2012 +0200 @@ -11,6 +11,9 @@ public interface RiverInfoServiceAsync { public void getGauges(String river, AsyncCallback<RiverInfo> callback); + + public void getMeasurementStations(String river, + AsyncCallback<RiverInfo> callback); } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 tw=80 :
--- a/flys-client/src/main/java/de/intevation/flys/client/server/RiverInfoServiceImpl.java Wed Oct 24 17:00:37 2012 +0200 +++ b/flys-client/src/main/java/de/intevation/flys/client/server/RiverInfoServiceImpl.java Wed Oct 24 17:09:04 2012 +0200 @@ -1,6 +1,7 @@ package de.intevation.flys.client.server; import java.util.ArrayList; +import java.util.List; import javax.xml.xpath.XPathConstants; import org.apache.log4j.Logger; @@ -18,10 +19,13 @@ import de.intevation.flys.client.client.services.RiverInfoService; import de.intevation.flys.client.shared.exceptions.ServerException; import de.intevation.flys.client.shared.model.DefaultGaugeInfo; +import de.intevation.flys.client.shared.model.DefaultMeasurementStation; import de.intevation.flys.client.shared.model.DefaultRiverInfo; import de.intevation.flys.client.shared.model.GaugeInfo; +import de.intevation.flys.client.shared.model.MeasurementStation; import de.intevation.flys.client.shared.model.RiverInfo; + /** * @author <a href="mailto:bjoern.ricks@intevation.de">Björn Ricks</a> */ @@ -32,12 +36,16 @@ private static final Logger logger = Logger.getLogger(RiverInfoServiceImpl.class); - public static final String ERROR_NO_RIVERINFO_FOUND = - "error_no_gaugeoverviewinfo_found"; + public static final String ERROR_NO_RIVER_INFO_FOUND = + "error_no_riverinfo_found"; - private static final String XPATH_RIVER = "/art:gauge-info/art:river"; + private static final String XPATH_RIVER = + "/art:river-info/art:river"; - private static final String XPATH_GAUGES = "/art:gauge-info/art:gauges/art:gauge"; + private static final String XPATH_STATIONS = + "/art:river-info/art:measurement-stations/art:measurement-station"; + + private static final String XPATH_GAUGES = "/art:river-info/art:gauges/art:gauge"; public RiverInfo getGauges(String river) throws ServerException { logger.info("RiverInfoServiceImpl.getRiverInfo"); @@ -61,111 +69,14 @@ try { Document result = client.callService(url, "gaugeoverviewinfo", doc); - Element riverresp = (Element) XMLUtils.xpath( - result, - XPATH_RIVER, - XPathConstants.NODE, - ArtifactNamespaceContext.INSTANCE); - - String rname = riverresp.getAttributeNS( - ArtifactNamespaceContext.NAMESPACE_URI, "name"); - String rkmup = riverresp.getAttributeNS( - ArtifactNamespaceContext.NAMESPACE_URI, "kmup"); - String rstart = riverresp.getAttributeNS( - ArtifactNamespaceContext.NAMESPACE_URI, "start"); - String rend = riverresp.getAttributeNS( - ArtifactNamespaceContext.NAMESPACE_URI, "end"); - String rwstunit = riverresp.getAttributeNS( - ArtifactNamespaceContext.NAMESPACE_URI, "wstunit"); - String rminq = riverresp.getAttributeNS( - ArtifactNamespaceContext.NAMESPACE_URI, "minq"); - String rmaxq = riverresp.getAttributeNS( - ArtifactNamespaceContext.NAMESPACE_URI, "maxq"); - String rofficial = riverresp.getAttributeNS( - ArtifactNamespaceContext.NAMESPACE_URI, "official"); - - logger.debug("River is " + rname); - - boolean kmup = rkmup.equalsIgnoreCase("true"); - - NodeList gaugenodes = (NodeList) XMLUtils.xpath( - result, - XPATH_GAUGES, - XPathConstants.NODESET, - ArtifactNamespaceContext.INSTANCE); - - int num = gaugenodes == null ? 0 : gaugenodes.getLength(); - - ArrayList<GaugeInfo> gauges = new ArrayList<GaugeInfo>(num); - - if (num == 0) { - logger.warn("No gauge info found."); - } - else { - logger.debug("Found " + num + " gauges."); - - for (int i = 0; i < num; i++) { - Element gaugeele = (Element)gaugenodes.item(i); + DefaultRiverInfo riverinfo = getRiverInfo(result); + List<GaugeInfo>gauges = createGauges(result, riverinfo.getName(), + riverinfo.isKmUp(), riverinfo.getWstUnit()); - String gname = gaugeele.getAttributeNS( - ArtifactNamespaceContext.NAMESPACE_URI, "name"); - String gstart = gaugeele.getAttributeNS( - ArtifactNamespaceContext.NAMESPACE_URI, "start"); - String gend = gaugeele.getAttributeNS( - ArtifactNamespaceContext.NAMESPACE_URI, "end"); - String gdatum = gaugeele.getAttributeNS( - ArtifactNamespaceContext.NAMESPACE_URI, "datum"); - String gaeo = gaugeele.getAttributeNS( - ArtifactNamespaceContext.NAMESPACE_URI, "aeo"); - String gminq = gaugeele.getAttributeNS( - ArtifactNamespaceContext.NAMESPACE_URI, "minq"); - String gminw = gaugeele.getAttributeNS( - ArtifactNamespaceContext.NAMESPACE_URI, "minw"); - String gmaxq = gaugeele.getAttributeNS( - ArtifactNamespaceContext.NAMESPACE_URI, "maxq"); - String gmaxw = gaugeele.getAttributeNS( - ArtifactNamespaceContext.NAMESPACE_URI, "maxw"); - String gstation = gaugeele.getAttributeNS( - ArtifactNamespaceContext.NAMESPACE_URI, "station"); - String gofficial = gaugeele.getAttributeNS( - ArtifactNamespaceContext.NAMESPACE_URI, "official"); - - logger.debug("Found gauge with name " + gname); - GaugeInfo gaugeinfo = new DefaultGaugeInfo( - rname, - gname, - kmup, - parseDouble(gstation), - parseDouble(gstart), - parseDouble(gend), - parseDouble(gdatum), - parseDouble(gaeo), - parseDouble(gminq), - parseDouble(gmaxq), - parseDouble(gminw), - parseDouble(gmaxw), - rwstunit, - parseLong(gofficial) - ); - - gauges.add(gaugeinfo); - } - } - - DefaultRiverInfo riverinfo = new DefaultRiverInfo( - rname, - kmup, - parseDouble(rstart), - parseDouble(rend), - rwstunit, - parseDouble(rminq), - parseDouble(rmaxq), - parseLong(rofficial) - ); riverinfo.setGauges(gauges); - logger.debug("Finished RiverInfoService."); + logger.debug("Finished RiverInfoService.getGauges."); return riverinfo; } @@ -174,7 +85,47 @@ } logger.warn("No gauge found"); - throw new ServerException(ERROR_NO_RIVERINFO_FOUND); + throw new ServerException(ERROR_NO_RIVER_INFO_FOUND); + } + + public RiverInfo getMeasurementStations(String river) throws ServerException { + logger.info("RiverInfoServiceImpl.getMeasurementStations"); + + String url = getServletContext().getInitParameter("server-url"); + + Document doc = XMLUtils.newDocument(); + + XMLUtils.ElementCreator ec = new XMLUtils.ElementCreator( + doc, + ArtifactNamespaceContext.NAMESPACE_URI, + ArtifactNamespaceContext.NAMESPACE_PREFIX); + + Element riverele = ec.create("river"); + riverele.setTextContent(river); + + doc.appendChild(riverele); + + HttpClient client = new HttpClientImpl(url); + + try { + Document result = client.callService(url, "measurementstationinfo", doc); + + DefaultRiverInfo riverinfo = getRiverInfo(result); + List<MeasurementStation> mstations = createMeasurementStations( + result, riverinfo.getName()); + + riverinfo.setMeasurementStations(mstations); + + logger.debug("Finished MeasurementStationInfoService."); + + return riverinfo; + } + catch (ConnectionException ce) { + logger.error(ce, ce); + } + + logger.warn("No measurement station found"); + throw new ServerException(ERROR_NO_RIVER_INFO_FOUND); } /** @@ -205,4 +156,166 @@ return null; } } + + private List<MeasurementStation> createMeasurementStations( + Document result, String rivername) { + NodeList stationnodes = (NodeList) XMLUtils.xpath( + result, + XPATH_STATIONS, + XPathConstants.NODESET, + ArtifactNamespaceContext.INSTANCE); + + int num = stationnodes == null ? 0 : stationnodes.getLength(); + + ArrayList<MeasurementStation> mstations = new ArrayList<MeasurementStation>(num); + + if (num == 0) { + logger.warn("No measurement station found."); + } + else { + logger.debug("Found " + num + " measurement stations."); + + for (int i = 0; i < num; i++) { + Element stationele = (Element)stationnodes.item(i); + + String mname = stationele.getAttributeNS( + ArtifactNamespaceContext.NAMESPACE_URI, "name"); + String mstart = stationele.getAttributeNS( + ArtifactNamespaceContext.NAMESPACE_URI, "start"); + String mend = stationele.getAttributeNS( + ArtifactNamespaceContext.NAMESPACE_URI, "end"); + String mstation = stationele.getAttributeNS( + ArtifactNamespaceContext.NAMESPACE_URI, "station"); + String mtype = stationele.getAttributeNS( + ArtifactNamespaceContext.NAMESPACE_URI, "type"); + String riverside = stationele.getAttributeNS( + ArtifactNamespaceContext.NAMESPACE_URI, "riverside"); + + logger.debug("Found measurement station with name " + mname); + + MeasurementStation station = new DefaultMeasurementStation( + rivername, + mname, + parseDouble(mstation), + parseDouble(mstart), + parseDouble(mend), + riverside, + mtype + ); + + mstations.add(station); + } + } + return mstations; + } + + private List<GaugeInfo> createGauges( + Document result, String rivername, Boolean kmup, String rwstunit) { + NodeList gaugenodes = (NodeList) XMLUtils.xpath( + result, + XPATH_GAUGES, + XPathConstants.NODESET, + ArtifactNamespaceContext.INSTANCE); + + int num = gaugenodes == null ? 0 : gaugenodes.getLength(); + + ArrayList<GaugeInfo> gauges = new ArrayList<GaugeInfo>(num); + + if (num == 0) { + logger.warn("No gauge info found."); + } + else { + logger.debug("Found " + num + " gauges."); + + for (int i = 0; i < num; i++) { + Element gaugeele = (Element)gaugenodes.item(i); + + String gname = gaugeele.getAttributeNS( + ArtifactNamespaceContext.NAMESPACE_URI, "name"); + String gstart = gaugeele.getAttributeNS( + ArtifactNamespaceContext.NAMESPACE_URI, "start"); + String gend = gaugeele.getAttributeNS( + ArtifactNamespaceContext.NAMESPACE_URI, "end"); + String gdatum = gaugeele.getAttributeNS( + ArtifactNamespaceContext.NAMESPACE_URI, "datum"); + String gaeo = gaugeele.getAttributeNS( + ArtifactNamespaceContext.NAMESPACE_URI, "aeo"); + String gminq = gaugeele.getAttributeNS( + ArtifactNamespaceContext.NAMESPACE_URI, "minq"); + String gminw = gaugeele.getAttributeNS( + ArtifactNamespaceContext.NAMESPACE_URI, "minw"); + String gmaxq = gaugeele.getAttributeNS( + ArtifactNamespaceContext.NAMESPACE_URI, "maxq"); + String gmaxw = gaugeele.getAttributeNS( + ArtifactNamespaceContext.NAMESPACE_URI, "maxw"); + String gstation = gaugeele.getAttributeNS( + ArtifactNamespaceContext.NAMESPACE_URI, "station"); + String gofficial = gaugeele.getAttributeNS( + ArtifactNamespaceContext.NAMESPACE_URI, "official"); + + logger.debug("Found gauge with name " + gname); + + GaugeInfo gaugeinfo = new DefaultGaugeInfo( + rivername, + gname, + kmup, + parseDouble(gstation), + parseDouble(gstart), + parseDouble(gend), + parseDouble(gdatum), + parseDouble(gaeo), + parseDouble(gminq), + parseDouble(gmaxq), + parseDouble(gminw), + parseDouble(gmaxw), + rwstunit, + parseLong(gofficial) + ); + + gauges.add(gaugeinfo); + } + } + return gauges; + } + + private DefaultRiverInfo getRiverInfo(Document result) { + Element riverresp = (Element) XMLUtils.xpath( + result, + XPATH_RIVER, + XPathConstants.NODE, + ArtifactNamespaceContext.INSTANCE); + + String rname = riverresp.getAttributeNS( + ArtifactNamespaceContext.NAMESPACE_URI, "name"); + String rkmup = riverresp.getAttributeNS( + ArtifactNamespaceContext.NAMESPACE_URI, "kmup"); + String rstart = riverresp.getAttributeNS( + ArtifactNamespaceContext.NAMESPACE_URI, "start"); + String rend = riverresp.getAttributeNS( + ArtifactNamespaceContext.NAMESPACE_URI, "end"); + String rwstunit = riverresp.getAttributeNS( + ArtifactNamespaceContext.NAMESPACE_URI, "wstunit"); + String rminq = riverresp.getAttributeNS( + ArtifactNamespaceContext.NAMESPACE_URI, "minq"); + String rmaxq = riverresp.getAttributeNS( + ArtifactNamespaceContext.NAMESPACE_URI, "maxq"); + String rofficial = riverresp.getAttributeNS( + ArtifactNamespaceContext.NAMESPACE_URI, "official"); + + logger.debug("River is " + rname); + + boolean kmup = rkmup.equalsIgnoreCase("true"); + DefaultRiverInfo riverinfo = new DefaultRiverInfo( + rname, + kmup, + parseDouble(rstart), + parseDouble(rend), + rwstunit, + parseDouble(rminq), + parseDouble(rmaxq), + parseLong(rofficial) + ); + + return riverinfo; + } }