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;
+    }
 }

http://dive4elements.wald.intevation.org