Mercurial > dive4elements > river
diff flys-artifacts/src/main/java/org/dive4elements/river/artifacts/services/DischargeInfoService.java @ 5831:bd047b71ab37
Repaired internal references
author | Sascha L. Teichmann <teichmann@intevation.de> |
---|---|
date | Thu, 25 Apr 2013 12:06:39 +0200 |
parents | flys-artifacts/src/main/java/de/intevation/flys/artifacts/services/DischargeInfoService.java@5b8919ef601d |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/flys-artifacts/src/main/java/org/dive4elements/river/artifacts/services/DischargeInfoService.java Thu Apr 25 12:06:39 2013 +0200 @@ -0,0 +1,122 @@ +package org.dive4elements.river.artifacts.services; + +import java.util.Collections; +import java.util.List; +import java.util.Date; + +import org.apache.log4j.Logger; + +import org.w3c.dom.Document; +import org.w3c.dom.Element; + +import org.dive4elements.artifacts.CallMeta; +import org.dive4elements.artifacts.GlobalContext; + +import org.dive4elements.artifacts.common.ArtifactNamespaceContext; +import org.dive4elements.artifacts.common.utils.XMLUtils; + +import org.dive4elements.river.artifacts.model.DischargeTables; +import org.dive4elements.river.model.Gauge; +import org.dive4elements.river.model.DischargeTable; +import org.dive4elements.river.model.TimeInterval; + +/** + * This service provides information about discharges at a defined gauge. + * + * @author <a href="mailto:raimund.renkert@intevation.de">Raimund Renkert</a> + */ +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"); + logger.debug(XMLUtils.toString(data)); + + 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<DischargeTable> tables =gauge.getDischargeTables(); + Collections.sort(tables); + + 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(); + + if (ti == null) { + logger.warn("DischargeTable has no TimeInterval set!"); + continue; + } + + Date startTime = ti.getStartTime(); + Date stopTime = ti.getStopTime(); + + if (startTime != null) { + discharge.setAttribute("start", String.valueOf(startTime.getTime())); + } + else { + continue; + } + + if (stopTime != null && dt.getKind() != DischargeTables.MASTER) { + discharge.setAttribute("end", String.valueOf(stopTime.getTime())); + } + else if (dt.getKind() == DischargeTables.MASTER) { + long now = System.currentTimeMillis(); + discharge.setAttribute("end", String.valueOf(now)); + } + else { + continue; + } + + all.appendChild(discharge); + } + result.appendChild(all); + return result; + } +} +// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :