tom@8858: /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde tom@8858: * Software engineering by Intevation GmbH tom@8858: * tom@8858: * This file is Free Software under the GNU AGPL (>=v3) tom@8858: * and comes with ABSOLUTELY NO WARRANTY! Check out the tom@8858: * documentation coming with Dive4Elements River for details. tom@8858: */ tom@8858: rrenkert@8304: package org.dive4elements.river.exports.injector; rrenkert@8304: rrenkert@8326: import org.apache.log4j.Logger; rrenkert@8304: import org.dive4elements.artifacts.Artifact; rrenkert@8304: import org.dive4elements.artifacts.CallContext; rrenkert@8304: import org.dive4elements.artifacts.ContextInjector; rrenkert@8304: import org.dive4elements.river.artifacts.D4EArtifact; rrenkert@8304: import org.dive4elements.river.artifacts.access.RiverAccess; tom@8337: import org.dive4elements.river.model.River; rrenkert@8304: import org.dive4elements.river.model.Gauge; rrenkert@8304: import org.w3c.dom.Document; rrenkert@8304: import org.w3c.dom.Element; rrenkert@8304: rrenkert@8304: import static org.dive4elements.river.exports.injector.InjectorConstants.CURRENT_KM; rrenkert@8304: import static org.dive4elements.river.exports.injector.InjectorConstants.PNP; rrenkert@8304: rrenkert@8304: public class PNPInjector rrenkert@8304: implements ContextInjector rrenkert@8304: { rrenkert@8304: rrenkert@8326: private Logger log = Logger.getLogger(PNPInjector.class); rrenkert@8304: @Override rrenkert@8304: public void setup(Element cfg) { rrenkert@8304: // TODO Auto-generated method stub rrenkert@8304: rrenkert@8304: } rrenkert@8304: rrenkert@8304: @Override rrenkert@8304: public void injectContext( rrenkert@8304: CallContext ctx, rrenkert@8304: Artifact artifact, rrenkert@8304: Document request rrenkert@8304: ) { rrenkert@8304: Object currentKm = ctx.getContextValue(CURRENT_KM); rrenkert@8304: if (currentKm == null) { rrenkert@8326: log.debug("no current km. not injecting pnp"); rrenkert@8304: return; rrenkert@8304: } rrenkert@8304: rrenkert@8326: Double km = Double.valueOf(currentKm.toString()); rrenkert@8326: if (Double.isNaN(km) || Double.isInfinite(km)) { rrenkert@8326: log.debug("current km is NAN or infinte. not injecting pnp."); rrenkert@8326: return; rrenkert@8326: } tom@8337: tom@8337: River river = new RiverAccess((D4EArtifact)artifact).getRiver(); tom@8337: if (river == null) { tom@8337: log.error("River not accessible from artifact. Not injecting PNP"); tom@8337: return; tom@8337: } tom@8337: rrenkert@8304: Gauge gauge = tom@8724: river.determineGaugeAtStation(km); rrenkert@8304: if (gauge == null) { rrenkert@8326: log.debug("no gauge found at current km. not injecting pnp"); rrenkert@8304: return; rrenkert@8304: } rrenkert@8326: log.debug("injecting pnp: " + gauge.getDatum()); rrenkert@8304: ctx.putContextValue(PNP, gauge.getDatum()); rrenkert@8304: } rrenkert@8304: rrenkert@8304: }