Mercurial > dive4elements > river
diff flys-artifacts/src/main/java/de/intevation/flys/artifacts/services/RiverInfoService.java @ 4247:5da024c2af62
Refactor GaugeOverviewInfoService and MeasurementStationInfoService
Refactor RiverInfoService out of GaugeOverviewInfoService and
MeasurementStationInfoService to share common code of both classes in a base
class.
author | Björn Ricks <bjoern.ricks@intevation.de> |
---|---|
date | Wed, 24 Oct 2012 16:36:59 +0200 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/services/RiverInfoService.java Wed Oct 24 16:36:59 2012 +0200 @@ -0,0 +1,85 @@ +package de.intevation.flys.artifacts.services; + +import java.math.BigDecimal; + +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.River; + +/** + * @author <a href="mailto:bjoern.ricks@intevation.de">Björn Ricks</a> + */ +public class RiverInfoService extends FLYSService { + + private static final Logger logger = Logger.getLogger( + RiverInfoService.class); + + protected static final String RIVER_XPATH = "/art:river/text()"; + + protected XMLUtils.ElementCreator ec; + protected River river; + protected Element riverele; + + protected Document doProcess( + Document data, + GlobalContext globalContext, + CallMeta callMeta + ) { + String rivername = XMLUtils.xpathString( + data, RIVER_XPATH, ArtifactNamespaceContext.INSTANCE); + + river = RiverFactory.getRiver(rivername); + + Document result = XMLUtils.newDocument(); + + if (river == null) { + logger.warn("No river with name " + rivername + " found."); + return null; + } + + ec = new XMLUtils.ElementCreator( + result, + ArtifactNamespaceContext.NAMESPACE_URI, + ArtifactNamespaceContext.NAMESPACE_PREFIX); + + riverele = ec.create("river-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); + + riverele.appendChild(r); + result.appendChild(riverele); + + return result; + } + + /** + * Returns a Double as String from a BigDecimal value. + * + * If value is null an empty String is returned. + */ + protected static String getStringValue(BigDecimal value) { + return value != null + ? Double.toString(value.doubleValue()) : ""; + } +}