Mercurial > dive4elements > river
view flys-artifacts/src/main/java/de/intevation/flys/artifacts/services/GaugeOverviewInfoService.java @ 3742:467efea19d15
Added type safety.
flys-artifacts/trunk@5425 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Mon, 10 Sep 2012 14:38:58 +0000 |
parents | 0edc05642fa4 |
children | a33df17ac9bb |
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(); 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); //TODO /* ec.addAttr(r, "qmin", , true); */ /* ec.addAttr(r, "qmax", , true); */ Element egs = ec.create("gauges"); List<Gauge> gauges = river.getGauges(); 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); } Range range = gauge.getRange(); if (range != null) { double min = range.getA().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); } ec.addAttr(eg, "aeo", Double.toString(gauge.getAeo().doubleValue()), true); ec.addAttr(eg, "datum", Double.toString(gauge.getDatum().doubleValue()), true); egs.appendChild(eg); } go.appendChild(r); go.appendChild(egs); result.appendChild(go); return result; } private String getGaugeValue(BigDecimal value) { if (value == null) { return null; } return Double.toString(value.doubleValue()); } }