rrenkert@8251: package org.dive4elements.river.exports.injector; rrenkert@8251: rrenkert@8251: import org.apache.log4j.Logger; rrenkert@8251: import org.dive4elements.artifacts.Artifact; rrenkert@8251: import org.dive4elements.artifacts.ArtifactNamespaceContext; rrenkert@8251: import org.dive4elements.artifacts.CallContext; rrenkert@8251: import org.dive4elements.artifacts.ContextInjector; rrenkert@8251: import org.dive4elements.artifacts.common.utils.XMLUtils; rrenkert@8251: import org.dive4elements.river.artifacts.D4EArtifact; rrenkert@8251: import org.dive4elements.river.artifacts.access.RangeAccess; rrenkert@8251: import org.w3c.dom.Document; rrenkert@8251: import org.w3c.dom.Element; rrenkert@8251: rrenkert@8251: import static org.dive4elements.river.exports.injector.InjectorConstants.CURRENT_KM; rrenkert@8251: rrenkert@8251: rrenkert@8251: public class FixWQInjector rrenkert@8251: implements ContextInjector rrenkert@8251: { rrenkert@8251: private static final Logger log = Logger.getLogger(FixWQInjector.class); rrenkert@8251: rrenkert@8251: public static final Double INVALID_KM = Double.valueOf(-1d); rrenkert@8251: public static final String XPATH_CHART_CURRENTKM = rrenkert@8251: "/art:action/art:attributes/art:currentKm/@art:km"; rrenkert@8251: @Override rrenkert@8251: public void setup(Element cfg) { rrenkert@8251: rrenkert@8251: } rrenkert@8251: rrenkert@8251: @Override rrenkert@8251: public void injectContext( rrenkert@8251: CallContext ctx, rrenkert@8251: Artifact artifact, rrenkert@8251: Document request) { rrenkert@8251: Double km = getCurrentKmFromRequest(request); rrenkert@8326: if (Double.isNaN(km)) { rrenkert@8251: RangeAccess access = new RangeAccess((D4EArtifact)artifact); rrenkert@8251: km = access.getFrom(); rrenkert@8251: log.debug("from access"); rrenkert@8251: } rrenkert@8251: log.debug("current km: " + km); rrenkert@8251: ctx.putContextValue(CURRENT_KM, km); rrenkert@8251: } rrenkert@8251: rrenkert@8251: private Double getCurrentKmFromRequest(Document request) { rrenkert@8251: rrenkert@8251: String km = XMLUtils.xpathString( rrenkert@8251: request, rrenkert@8251: XPATH_CHART_CURRENTKM, rrenkert@8251: ArtifactNamespaceContext.INSTANCE); rrenkert@8251: rrenkert@8251: if (km == null) { rrenkert@8251: return Double.NaN; rrenkert@8251: } rrenkert@8251: rrenkert@8251: try { rrenkert@8251: return Double.valueOf(km); rrenkert@8251: } rrenkert@8251: catch (NumberFormatException nfe) { rrenkert@8251: return Double.NaN; rrenkert@8251: } rrenkert@8251: } rrenkert@8251: }