Mercurial > dive4elements > river
view flys-artifacts/src/main/java/de/intevation/flys/artifacts/services/DischargeInfoService.java @ 4116:4ffeccc5b5a1
Initial GUI and state for per-segment Q-input for extreme valua analysis.
author | Felix Wolfsteller <felix.wolfsteller@intevation.de> |
---|---|
date | Fri, 12 Oct 2012 15:07:01 +0200 |
parents | 0cc2c3d89a9d |
children | 7d4480c0e68e |
line wrap: on
line source
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 <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(); Element all = result.createElement("discharges"); for (DischargeTable dt: tables) { if (dt.getKind() == Gauge.MASTER_DISCHARGE_TABLE) { continue; } 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 { discharge.setAttribute("start", "-1"); } if (stopTime != null) { discharge.setAttribute("end", String.valueOf(stopTime.getTime())); } else { discharge.setAttribute("end", "-1"); } all.appendChild(discharge); } result.appendChild(all); return result; } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :