Mercurial > dive4elements > river
view flys-artifacts/src/main/java/de/intevation/flys/artifacts/services/GaugeOverviewInfoService.java @ 4031:e4e345d81a65
issue889/2
author | Felix Wolfsteller <felix.wolfsteller@intevation.de> |
---|---|
date | Thu, 04 Oct 2012 14:54:44 +0200 |
parents | 5fce1908317f |
children | 5da024c2af62 |
line wrap: on
line source
package de.intevation.flys.artifacts.services; import java.math.BigDecimal; import java.util.List; 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.RiverFactory; import de.intevation.flys.model.Gauge; import de.intevation.flys.model.MinMaxWQ; import de.intevation.flys.model.Range; import de.intevation.flys.model.River; /** * @author <a href="mailto:bjoern.ricks@intevation.de">Björn Ricks</a> */ public class GaugeOverviewInfoService extends FLYSService { private static final Logger logger = Logger.getLogger( GaugeOverviewInfoService.class); public static final String RIVER_XPATH = "/art:river/text()"; @Override public Document doProcess( Document data, GlobalContext globalContext, CallMeta callMeta ) { logger.debug("GaugeOverviewInfoService.process"); String riverstr = XMLUtils.xpathString( data, RIVER_XPATH, ArtifactNamespaceContext.INSTANCE); River river = RiverFactory.getRiver(riverstr); Document result = XMLUtils.newDocument(); if (river == null) { logger.warn("No river with name " + riverstr + " found."); return result; } XMLUtils.ElementCreator ec = new XMLUtils.ElementCreator( result, ArtifactNamespaceContext.NAMESPACE_URI, ArtifactNamespaceContext.NAMESPACE_PREFIX); Element go = ec.create("gauge-info"); double[] minmax = river.determineMinMaxDistance(); double[] minmaxq = river.determineMinMaxQ(); Element r = ec.create("river"); ec.addAttr(r, "name", river.getName(), true); ec.addAttr(r, "start", Double.toString(minmax[0]), true); ec.addAttr(r, "end", Double.toString(minmax[1]), true); ec.addAttr(r, "wstunit", river.getWstUnit().getName(), true); ec.addAttr(r, "kmup", Boolean.toString(river.getKmUp()), true); ec.addAttr(r, "minq", Double.toString(minmaxq[0]), true); ec.addAttr(r, "maxq", Double.toString(minmaxq[1]), true); ec.addAttr(r, "official", Long.toString(river.getOfficialNumber()), true); Element egs = ec.create("gauges"); List<Gauge> gauges = river.getGauges(); if (logger.isDebugEnabled()) { logger.debug("Loaded gauges: " + gauges); } for (Gauge gauge: river.getGauges()) { Element eg = ec.create("gauge"); String name = gauge.getName(); if (name != null) { ec.addAttr(eg, "name", gauge.getName(), true); } String aeo = getGaugeValue(gauge.getAeo()); if (aeo != null) { ec.addAttr(eg, "aeo", aeo, true); } String datum = getGaugeValue(gauge.getDatum()); if (datum != null) { ec.addAttr(eg, "datum", datum, true); } Range range = gauge.getRange(); if (range != null) { BigDecimal a = range.getA(); if (a != null) { double min = a.doubleValue(); ec.addAttr(eg, "start", Double.toString(min), true); } BigDecimal b = range.getB(); if (b != null) { double max = range.getB().doubleValue(); ec.addAttr(eg, "end", Double.toString(max), true); } } MinMaxWQ minmaxwq = gauge.fetchMaxMinWQ(); String minw = getGaugeValue(minmaxwq.getMinW()); String maxw = getGaugeValue(minmaxwq.getMaxW()); String minq = getGaugeValue(minmaxwq.getMinQ()); String maxq = getGaugeValue(minmaxwq.getMaxQ()); if (minw != null) { ec.addAttr(eg, "minw", minw, true); } if (maxw != null) { ec.addAttr(eg, "maxw", maxw, true); } if (minq != null) { ec.addAttr(eg, "minq", minq, true); } if (maxq != null) { ec.addAttr(eg, "maxq", maxq, true); } String station = getGaugeValue(gauge.getStation()); if (station != null) { ec.addAttr(eg, "station", station, true); } Long official = gauge.getOfficialNumber(); if (official != null) { ec.addAttr(eg, "official", official.toString(), true); } egs.appendChild(eg); } go.appendChild(r); go.appendChild(egs); result.appendChild(go); return result; } /** * Returns a Double from a BigDecimal value or null if value is null */ private static String getGaugeValue(BigDecimal value) { return value != null ? Double.toString(value.doubleValue()) : ""; } }