view artifacts/src/main/java/org/dive4elements/river/exports/fixings/FixChartGenerator.java @ 9268:ae9dee74e43e

Fixed: current station of duration chart was not changed
author gernotbelger
date Wed, 18 Jul 2018 18:53:15 +0200
parents 5e38e2924c07
children
line wrap: on
line source
/* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde
 * Software engineering by Intevation GmbH
 *
 * This file is Free Software under the GNU AGPL (>=v3)
 * and comes with ABSOLUTELY NO WARRANTY! Check out the
 * documentation coming with Dive4Elements River for details.
 */

package org.dive4elements.river.exports.fixings;

import org.dive4elements.artifacts.ArtifactNamespaceContext;
import org.dive4elements.artifacts.CallContext;
import org.dive4elements.artifacts.common.utils.XMLUtils;
import org.dive4elements.river.exports.XYChartGenerator;

import java.io.OutputStream;

import org.apache.log4j.Logger;
import org.w3c.dom.Document;

/**
 * Base class for FixChartGenerator.
 */
public abstract class FixChartGenerator
extends XYChartGenerator
{
    /** Private log. */
    private static Logger log = Logger.getLogger(FixChartGenerator.class);

    public static final Double INVALID_KM = Double.valueOf(-1d);
    public static final String CURRENT_KM = "currentKm";
    public static final String XPATH_CHART_CURRENTKM =
        "/art:action/art:attributes/art:currentKm/@art:km";

    @Override
    public void init(
        String outName,
        Document request,
        OutputStream out,
        CallContext context
    ) {
        super.init(outName, request, out, context);

        initCurrentKm(request, context);
    }

    public static final Double getCurrentKmFromRequest(Document request) {

        String km = XMLUtils.xpathString(
            request,
            XPATH_CHART_CURRENTKM,
            ArtifactNamespaceContext.INSTANCE);

        if (km == null) {
            return INVALID_KM;
        }

        try {
            return Double.valueOf(km);
        }
        catch (NumberFormatException nfe) {
            return INVALID_KM;
        }
    }
    
    /**
     * Returns the current km from the context.
     * If the context is null or doesn't contain a currentKm
     * then a double value of -1 will be returned.
     *
     * @param context
     *            The CallContext instance
     * @return the current km as double
     */
    // FIXME: copied from org.dive4elements.river.artifacts.model.fixings.FixingsFacet
    public static final double getCurrentKm(final CallContext context) {
        if (context == null)
            return Double.NaN;

        final Double dkm = (Double) context.getContextValue(CURRENT_KM);
        if (dkm == null)
            return Double.NaN;

        return dkm.doubleValue();
    }

    public static void initCurrentKm(Document request, CallContext context) {
        
        Double currentKm = getCurrentKmFromRequest(request);

        if (log.isDebugEnabled()) {
            log.debug("currentKm = " + currentKm);
        }

        if (currentKm != INVALID_KM) {
            context.putContextValue(CURRENT_KM, currentKm);
        }
    }
}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org