Mercurial > dive4elements > river
view flys-artifacts/src/main/java/de/intevation/flys/artifacts/services/DischargeInfoService.java @ 4232:b3aa91e45010
Implemented the Q evaluation mode for historical discharge calculations.
Added the calculation itself, created new facets, added themes and improved the chart generator
to support the new facets.
author | Ingo Weinzierl <ingo.weinzierl@intevation.de> |
---|---|
date | Wed, 24 Oct 2012 07:25:35 +0200 |
parents | 810db532803a |
children | e8a4d2fd25cc |
line wrap: on
line source
package de.intevation.flys.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 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.artifacts.model.DischargeTables; 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 <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 :