Mercurial > dive4elements > river
diff artifacts/src/main/java/org/dive4elements/river/exports/injector/KmFromRequestInjector.java @ 8349:7341bebc79d0
Let injectors be strictly distinct from each other and give more meaningful names (they know what they do, not where they will be used. The latter is configuration).
author | Tom Gottfried <tom@intevation.de> |
---|---|
date | Wed, 01 Oct 2014 12:23:39 +0200 |
parents | artifacts/src/main/java/org/dive4elements/river/exports/injector/FixWQInjector.java@10917ec29625 |
children | 16dc2da05aef |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/artifacts/src/main/java/org/dive4elements/river/exports/injector/KmFromRequestInjector.java Wed Oct 01 12:23:39 2014 +0200 @@ -0,0 +1,61 @@ +package org.dive4elements.river.exports.injector; + +import org.apache.log4j.Logger; +import org.dive4elements.artifacts.Artifact; +import org.dive4elements.artifacts.ArtifactNamespaceContext; +import org.dive4elements.artifacts.CallContext; +import org.dive4elements.artifacts.ContextInjector; +import org.dive4elements.artifacts.common.utils.XMLUtils; +import org.dive4elements.river.artifacts.D4EArtifact; +import org.dive4elements.river.artifacts.access.RangeAccess; +import org.w3c.dom.Document; +import org.w3c.dom.Element; + +import static org.dive4elements.river.exports.injector.InjectorConstants.CURRENT_KM; + + +public class KmFromRequestInjector +implements ContextInjector +{ + private static final Logger log = Logger.getLogger(KmFromRequestInjector.class); + + public static final Double INVALID_KM = Double.valueOf(-1d); + public static final String XPATH_CHART_CURRENTKM = + "/art:action/art:attributes/art:currentKm/@art:km"; + @Override + public void setup(Element cfg) { + + } + + @Override + public void injectContext( + CallContext ctx, + Artifact artifact, + Document request) { + Double km = getCurrentKmFromRequest(request); + if (Double.isNaN(km)) { + RangeAccess access = new RangeAccess((D4EArtifact)artifact); + km = access.getFrom(); + } + ctx.putContextValue(CURRENT_KM, km); + } + + private Double getCurrentKmFromRequest(Document request) { + + String km = XMLUtils.xpathString( + request, + XPATH_CHART_CURRENTKM, + ArtifactNamespaceContext.INSTANCE); + + if (km == null) { + return Double.NaN; + } + + try { + return Double.valueOf(km); + } + catch (NumberFormatException nfe) { + return Double.NaN; + } + } +}