[Dive4elements-commits] [PATCH 8 of 8] Add method to get the MeasurementStations from the RiverInfoService
Wald Commits
scm-commit at wald.intevation.org
Wed Oct 24 17:09:28 CEST 2012
# HG changeset patch
# User Björn Ricks <bjoern.ricks at intevation.de>
# Date 1351091344 -7200
# Node ID ef154fbf58f1193d2c804c85426a0ad1e2bda079
# Parent 7a889098bcc6d91669b269ff84011c6e5fdc4da5
Add method to get the MeasurementStations from the RiverInfoService
Also refactor the RiverInfoServiceImpl to use common code for getting GaugeInfo
and MeasurementStations.
diff -r 7a889098bcc6 -r ef154fbf58f1 flys-client/src/main/java/de/intevation/flys/client/client/services/RiverInfoService.java
--- 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;
+
}
diff -r 7a889098bcc6 -r ef154fbf58f1 flys-client/src/main/java/de/intevation/flys/client/client/services/RiverInfoServiceAsync.java
--- 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 :
diff -r 7a889098bcc6 -r ef154fbf58f1 flys-client/src/main/java/de/intevation/flys/client/server/RiverInfoServiceImpl.java
--- 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 at 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);
+ DefaultRiverInfo riverinfo = getRiverInfo(result);
+ List<GaugeInfo>gauges = createGauges(result, riverinfo.getName(),
+ riverinfo.isKmUp(), riverinfo.getWstUnit());
- 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);
-
- 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;
+ }
}
More information about the Dive4elements-commits
mailing list