# HG changeset patch # User Björn Ricks # Date 1351086641 -7200 # Node ID e68a710d96523cc6938d3275187f5f35e55a0d88 # Parent 448cbd8708d59d77226b00248cdbd2009c29341e Convert GaugeOverviewInfoService into RiverInfoService The service will be reused for the MeasurementStation info too and it returns a RiverInfo in both cases. Therefore rename the current GaugeOverviewInfoService into RiverInfoService. diff -r 448cbd8708d5 -r e68a710d9652 flys-client/src/main/java/de/intevation/flys/client/client/services/GaugeOverviewInfoService.java --- a/flys-client/src/main/java/de/intevation/flys/client/client/services/GaugeOverviewInfoService.java Wed Oct 24 14:44:12 2012 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,17 +0,0 @@ -package de.intevation.flys.client.client.services; - -import com.google.gwt.user.client.rpc.RemoteService; -import com.google.gwt.user.client.rpc.RemoteServiceRelativePath; - -import de.intevation.flys.client.shared.exceptions.ServerException; -import de.intevation.flys.client.shared.model.RiverInfo; - -/** - * @author Björn Ricks - */ -@RemoteServiceRelativePath("gaugeoverviewinfo") -public interface GaugeOverviewInfoService extends RemoteService { - - public RiverInfo getRiverInfo(String river) throws ServerException; - -} diff -r 448cbd8708d5 -r e68a710d9652 flys-client/src/main/java/de/intevation/flys/client/client/services/GaugeOverviewInfoServiceAsync.java --- a/flys-client/src/main/java/de/intevation/flys/client/client/services/GaugeOverviewInfoServiceAsync.java Wed Oct 24 14:44:12 2012 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,16 +0,0 @@ -package de.intevation.flys.client.client.services; - -import com.google.gwt.user.client.rpc.AsyncCallback; - -import de.intevation.flys.client.shared.model.RiverInfo; - - -/** - * @author Björn Ricks - */ -public interface GaugeOverviewInfoServiceAsync { - - public void getRiverInfo(String river, AsyncCallback callback); -} - -// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 tw=80 : diff -r 448cbd8708d5 -r e68a710d9652 flys-client/src/main/java/de/intevation/flys/client/client/services/RiverInfoService.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/flys-client/src/main/java/de/intevation/flys/client/client/services/RiverInfoService.java Wed Oct 24 15:50:41 2012 +0200 @@ -0,0 +1,21 @@ +package de.intevation.flys.client.client.services; + +import com.google.gwt.user.client.rpc.RemoteService; +import com.google.gwt.user.client.rpc.RemoteServiceRelativePath; + +import de.intevation.flys.client.shared.exceptions.ServerException; +import de.intevation.flys.client.shared.model.RiverInfo; + +/** + * @author Björn Ricks + */ +@RemoteServiceRelativePath("riverinfo") +public interface RiverInfoService extends RemoteService { + + /** + * Returns a RiverInfo object with GaugeInfos + */ + public RiverInfo getGauges(String river) + throws ServerException; + +} diff -r 448cbd8708d5 -r e68a710d9652 flys-client/src/main/java/de/intevation/flys/client/client/services/RiverInfoServiceAsync.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/flys-client/src/main/java/de/intevation/flys/client/client/services/RiverInfoServiceAsync.java Wed Oct 24 15:50:41 2012 +0200 @@ -0,0 +1,16 @@ +package de.intevation.flys.client.client.services; + +import com.google.gwt.user.client.rpc.AsyncCallback; + +import de.intevation.flys.client.shared.model.RiverInfo; + + +/** + * @author Björn Ricks + */ +public interface RiverInfoServiceAsync { + + public void getGauges(String river, AsyncCallback callback); +} + +// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 tw=80 : diff -r 448cbd8708d5 -r e68a710d9652 flys-client/src/main/java/de/intevation/flys/client/client/ui/GaugePanel.java --- a/flys-client/src/main/java/de/intevation/flys/client/client/ui/GaugePanel.java Wed Oct 24 14:44:12 2012 +0200 +++ b/flys-client/src/main/java/de/intevation/flys/client/client/ui/GaugePanel.java Wed Oct 24 15:50:41 2012 +0200 @@ -16,8 +16,8 @@ import de.intevation.flys.client.client.FLYS; import de.intevation.flys.client.client.FLYSConstants; -import de.intevation.flys.client.client.services.GaugeOverviewInfoService; -import de.intevation.flys.client.client.services.GaugeOverviewInfoServiceAsync; +import de.intevation.flys.client.client.services.RiverInfoService; +import de.intevation.flys.client.client.services.RiverInfoServiceAsync; import de.intevation.flys.client.shared.model.DataList; import de.intevation.flys.client.shared.model.RiverInfo; @@ -39,8 +39,8 @@ /** The message class that provides i18n strings.*/ protected FLYSConstants MSG = GWT.create(FLYSConstants.class); - protected GaugeOverviewInfoServiceAsync gaugeOverviewInfoService = - GWT.create(GaugeOverviewInfoService.class); + protected RiverInfoServiceAsync riverInfoService = + GWT.create(RiverInfoService.class); protected GaugeTree gaugetree; protected Canvas gaugetreecanvas; @@ -88,7 +88,7 @@ * Loads the river info and renders it afterwards */ public void refresh() { - gaugeOverviewInfoService.getRiverInfo(this.river, new AsyncCallback() { + riverInfoService.getGauges(this.river, new AsyncCallback() { @Override public void onFailure(Throwable e) { GWT.log("Could not load the river info." + e); diff -r 448cbd8708d5 -r e68a710d9652 flys-client/src/main/java/de/intevation/flys/client/server/GaugeOverviewInfoServiceImpl.java --- a/flys-client/src/main/java/de/intevation/flys/client/server/GaugeOverviewInfoServiceImpl.java Wed Oct 24 14:44:12 2012 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,207 +0,0 @@ -package de.intevation.flys.client.server; - -import java.util.ArrayList; -import javax.xml.xpath.XPathConstants; - -import org.apache.log4j.Logger; - -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.NodeList; - -import de.intevation.artifacts.common.ArtifactNamespaceContext; -import de.intevation.artifacts.common.utils.XMLUtils; -import de.intevation.artifacts.httpclient.exceptions.ConnectionException; -import de.intevation.artifacts.httpclient.http.HttpClient; -import de.intevation.artifacts.httpclient.http.HttpClientImpl; - -import de.intevation.flys.client.client.services.GaugeOverviewInfoService; -import de.intevation.flys.client.shared.exceptions.ServerException; -import de.intevation.flys.client.shared.model.DefaultGaugeInfo; -import de.intevation.flys.client.shared.model.DefaultRiverInfo; -import de.intevation.flys.client.shared.model.GaugeInfo; -import de.intevation.flys.client.shared.model.RiverInfo; - -/** - * @author Björn Ricks - */ -public class GaugeOverviewInfoServiceImpl -extends RemoteServiceServlet -implements GaugeOverviewInfoService -{ - private static final Logger logger = - Logger.getLogger(GaugeOverviewInfoServiceImpl.class); - - public static final String ERROR_NO_RIVERINFO_FOUND = - "error_no_gaugeoverviewinfo_found"; - - private static final String XPATH_RIVER = "/art:gauge-info/art:river"; - - private static final String XPATH_GAUGES = "/art:gauge-info/art:gauges/art:gauge"; - - public RiverInfo getRiverInfo(String river) throws ServerException { - logger.info("RiverInfoServiceImpl.getRiverInfo"); - - 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, "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 gauges = new ArrayList(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); - } - } - - RiverInfo riverinfo = new DefaultRiverInfo( - rname, - kmup, - parseDouble(rstart), - parseDouble(rend), - rwstunit, - parseDouble(rminq), - parseDouble(rmaxq), - parseLong(rofficial), - gauges); - - logger.debug("Finished RiverInfoService."); - - return riverinfo; - } - catch (ConnectionException ce) { - logger.error(ce, ce); - } - - logger.warn("No gauge found"); - throw new ServerException(ERROR_NO_RIVERINFO_FOUND); - } - - /** - * Avoids NullPointerException when parsing double value - */ - private Double parseDouble(String value) { - if (value == null || value.isEmpty()) { - return null; - } - try { - return Double.valueOf(value); - } - catch(NumberFormatException e) { - logger.error(e, e); - return null; - } - } - - private Long parseLong(String value) { - if (value == null || value.isEmpty()) { - return null; - } - try { - return Long.valueOf(value); - } - catch(NumberFormatException e) { - logger.error(e, e); - return null; - } - } -} diff -r 448cbd8708d5 -r e68a710d9652 flys-client/src/main/java/de/intevation/flys/client/server/RiverInfoServiceImpl.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/flys-client/src/main/java/de/intevation/flys/client/server/RiverInfoServiceImpl.java Wed Oct 24 15:50:41 2012 +0200 @@ -0,0 +1,208 @@ +package de.intevation.flys.client.server; + +import java.util.ArrayList; +import javax.xml.xpath.XPathConstants; + +import org.apache.log4j.Logger; + +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.NodeList; + +import de.intevation.artifacts.common.ArtifactNamespaceContext; +import de.intevation.artifacts.common.utils.XMLUtils; +import de.intevation.artifacts.httpclient.exceptions.ConnectionException; +import de.intevation.artifacts.httpclient.http.HttpClient; +import de.intevation.artifacts.httpclient.http.HttpClientImpl; + +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.DefaultRiverInfo; +import de.intevation.flys.client.shared.model.GaugeInfo; +import de.intevation.flys.client.shared.model.RiverInfo; + +/** + * @author Björn Ricks + */ +public class RiverInfoServiceImpl +extends RemoteServiceServlet +implements RiverInfoService +{ + private static final Logger logger = + Logger.getLogger(RiverInfoServiceImpl.class); + + public static final String ERROR_NO_RIVERINFO_FOUND = + "error_no_gaugeoverviewinfo_found"; + + private static final String XPATH_RIVER = "/art:gauge-info/art:river"; + + private static final String XPATH_GAUGES = "/art:gauge-info/art:gauges/art:gauge"; + + public RiverInfo getGauges(String river) throws ServerException { + logger.info("RiverInfoServiceImpl.getRiverInfo"); + + 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, "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 gauges = new ArrayList(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."); + + return riverinfo; + } + catch (ConnectionException ce) { + logger.error(ce, ce); + } + + logger.warn("No gauge found"); + throw new ServerException(ERROR_NO_RIVERINFO_FOUND); + } + + /** + * Avoids NullPointerException when parsing double value + */ + private Double parseDouble(String value) { + if (value == null || value.isEmpty()) { + return null; + } + try { + return Double.valueOf(value); + } + catch(NumberFormatException e) { + logger.error(e, e); + return null; + } + } + + private Long parseLong(String value) { + if (value == null || value.isEmpty()) { + return null; + } + try { + return Long.valueOf(value); + } + catch(NumberFormatException e) { + logger.error(e, e); + return null; + } + } +}