# HG changeset patch # User Raimund Renkert # Date 1328542674 0 # Node ID 2966787b51885a04c85fd0435589fadca9bce5b4 # Parent 30335ee9512bd63e3a3f5009c6bb30f8a04dda1c Added service for discharge infos at a specific gauge. flys-artifacts/trunk@3935 c6561f87-3c4e-4783-a992-168aeb5c3f6f diff -r 30335ee9512b -r 2966787b5188 flys-artifacts/ChangeLog --- a/flys-artifacts/ChangeLog Mon Feb 06 15:18:15 2012 +0000 +++ b/flys-artifacts/ChangeLog Mon Feb 06 15:37:54 2012 +0000 @@ -1,3 +1,16 @@ +2012-02-06 Raimund Renkert + + Added service for discharge infos at a specific gauge. + + * doc/conf/conf.xml: Added service factory entry. + + * src/main/java/de/intevation/flys/artifacts/services/DischargeInfoService.java: + New. Returns description, start year and end year of discharges at a + specific gauge. + + * src/main/java/de/intevation/flys/artifacts/states/GaugeTimerangeState.java: + Return a more specific ui provider string. + 2012-02-06 Sascha L. Teichmann * doc/conf/artifacts/winfo.xml: Added config for "reduzierte Bezugslinie". diff -r 30335ee9512b -r 2966787b5188 flys-artifacts/doc/conf/conf.xml --- a/flys-artifacts/doc/conf/conf.xml Mon Feb 06 15:18:15 2012 +0000 +++ b/flys-artifacts/doc/conf/conf.xml Mon Feb 06 15:37:54 2012 +0000 @@ -116,6 +116,10 @@ name="cache-invalidation" service="de.intevation.flys.artifacts.services.CacheInvalidationService" description="The service invalidates caches.">de.intevation.artifactdatabase.DefaultServiceFactory + de.intevation.artifactdatabase.DefaultServiceFactory diff -r 30335ee9512b -r 2966787b5188 flys-artifacts/src/main/java/de/intevation/flys/artifacts/services/DischargeInfoService.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/services/DischargeInfoService.java Mon Feb 06 15:37:54 2012 +0000 @@ -0,0 +1,117 @@ +package de.intevation.flys.artifacts.services; + +import java.util.List; +import java.util.Date; +import java.util.Calendar; +import java.util.GregorianCalendar; + +import org.apache.log4j.Logger; + +import org.w3c.dom.Document; +import org.w3c.dom.Element; + +import de.intevation.artifacts.CallMeta; +import de.intevation.artifacts.GlobalContext; + +import de.intevation.artifacts.common.ArtifactNamespaceContext; +import de.intevation.artifacts.common.utils.XMLUtils; + +import de.intevation.flys.model.Gauge; +import de.intevation.flys.model.DischargeTable; +import de.intevation.flys.model.TimeInterval; + +/** + * This service provides information about discharges at a defined gauge. + * + * @author Raimund Renkert + */ +public class DischargeInfoService extends FLYSService { + + /** The logger used in this service. */ + private static Logger logger = Logger.getLogger(DischargeInfoService.class); + + public static final String GAUGE_XPATH = "/art:gauge/text()"; + + public DischargeInfoService() { + } + + + @Override + public Document doProcess( + Document data, + GlobalContext globalContext, + CallMeta callMeta + ) { + logger.debug("DischargeInfoService.process"); + + String gaugeNumber = XMLUtils.xpathString( + data, GAUGE_XPATH, ArtifactNamespaceContext.INSTANCE); + + if(gaugeNumber == null || + (gaugeNumber = gaugeNumber.trim()).length() == 0) { + logger.warn("No gauge specified. Cannot return discharge info."); + return XMLUtils.newDocument(); + } + + logger.debug("Getting discharge for gauge: " + gaugeNumber); + + long gn; + try { + gn = Long.parseLong(gaugeNumber); + } + catch (NumberFormatException nfe) { + logger.warn("Invalid gauge number. Cannot return discharg info."); + return XMLUtils.newDocument(); + } + + Gauge gauge = Gauge.getGaugeByOfficialNumber(gn); + + logger.debug("Found gauge: " + gauge.getName()); + + return buildDocument(gauge); + } + + + protected Document buildDocument(Gauge gauge) { + Document result = XMLUtils.newDocument(); + + List tables =gauge.getDischargeTables(); + + Element all = result.createElement("discharges"); + for (DischargeTable dt: tables) { + Element discharge = result.createElement("discharge"); + discharge.setAttribute("description", dt.getDescription()); + + // Get time interval. + TimeInterval ti = dt.getTimeInterval(); + Date startTime = ti.getStartTime(); + Date stopTime = ti.getStopTime(); + + // Get the year for start end end date. + int startYear; + int stopYear; + Calendar c = new GregorianCalendar(); + if (startTime != null) { + c.setTime(startTime); + startYear = c.get(Calendar.YEAR); + } + else { + startYear = -1; + } + if (stopTime != null) { + c.setTime(stopTime); + stopYear = c.get(Calendar.YEAR); + } + else { + stopYear = -1; + } + + discharge.setAttribute("start", String.valueOf(startYear)); + discharge.setAttribute("end", String.valueOf(stopYear)); + + all.appendChild(discharge); + } + result.appendChild(all); + return result; + } +} diff -r 30335ee9512b -r 2966787b5188 flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/GaugeTimerangeState.java --- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/GaugeTimerangeState.java Mon Feb 06 15:18:15 2012 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/GaugeTimerangeState.java Mon Feb 06 15:37:54 2012 +0000 @@ -77,5 +77,11 @@ return lowerUpper != null ? lowerUpper[1] : 0; } + + + @Override + protected String getUIProvider() { + return "gaugetimerange"; + } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :