gernotbelger@9232: /** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde gernotbelger@9232: * Software engineering by gernotbelger@9232: * Björnsen Beratende Ingenieure GmbH gernotbelger@9232: * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt gernotbelger@9232: * gernotbelger@9232: * This file is Free Software under the GNU AGPL (>=v3) gernotbelger@9232: * and comes with ABSOLUTELY NO WARRANTY! Check out the gernotbelger@9232: * documentation coming with Dive4Elements River for details. gernotbelger@9232: */ gernotbelger@9232: package org.dive4elements.river.artifacts.datacage.templating; gernotbelger@9232: gernotbelger@9232: import java.util.List; gernotbelger@9232: import java.util.UUID; gernotbelger@9232: gernotbelger@9232: import javax.xml.xpath.XPathFunction; gernotbelger@9232: import javax.xml.xpath.XPathFunctionException; gernotbelger@9232: gernotbelger@9232: import org.dive4elements.artifacts.CallContext; gernotbelger@9546: import org.dive4elements.river.artifacts.AbstractFixBunduArtifact; gernotbelger@9234: import org.dive4elements.river.artifacts.D4EArtifact; gernotbelger@9232: import org.dive4elements.river.artifacts.access.FixRealizingAccess; gernotbelger@9232: import org.dive4elements.river.artifacts.model.fixings.FixRealizingCalculationExtended; gernotbelger@9232: import org.dive4elements.river.utils.RiverUtils; gernotbelger@9232: gernotbelger@9232: /** gernotbelger@9232: * Very specialized function the resolves the 'year' (als middle of all used events) from a fix-analysis-vollmer gernotbelger@9232: * artifact). gernotbelger@9232: * gernotbelger@9232: * @author Gernot Belger gernotbelger@9232: */ gernotbelger@9232: public class FixAnalysisYearXPathFunction implements XPathFunction { gernotbelger@9232: gernotbelger@9232: public static final String ID = "fix_analysis_year"; gernotbelger@9232: gernotbelger@9232: public static final int ARITY = 1; gernotbelger@9232: gernotbelger@9232: private final CallContext context; gernotbelger@9232: gernotbelger@9232: public FixAnalysisYearXPathFunction(final CallContext context) { gernotbelger@9232: this.context = context; gernotbelger@9232: } gernotbelger@9232: gernotbelger@9232: @Override gernotbelger@9232: public Object evaluate(final List args) throws XPathFunctionException { gernotbelger@9232: gernotbelger@9232: final UUID uuid = (UUID) args.get(0); gernotbelger@9234: if (uuid == null) gernotbelger@9234: return null; gernotbelger@9232: gernotbelger@9234: final D4EArtifact artifact = RiverUtils.getArtifact(uuid.toString(), this.context); gernotbelger@9546: if (!(artifact instanceof AbstractFixBunduArtifact)) gernotbelger@9234: return null; gernotbelger@9232: gernotbelger@9546: final AbstractFixBunduArtifact fixation = (AbstractFixBunduArtifact) artifact; gernotbelger@9232: gernotbelger@9232: // Get W/Q input per gauge for this case. gernotbelger@9232: final FixRealizingAccess fixAccess = new FixRealizingAccess(fixation); gernotbelger@9232: gernotbelger@9232: /* ugly but necessary to keep this logic at least a bit inside the FixRealizing stuff */ gernotbelger@9232: final FixRealizingCalculationExtended calculation = new FixRealizingCalculationExtended(fixAccess); gernotbelger@9232: return calculation.determineMeanYear(); gernotbelger@9232: } gernotbelger@9232: }