view artifacts/src/main/java/org/dive4elements/river/artifacts/states/minfo/BedQualityDistanceSelect.java @ 8653:dbec49147f54

(issue1755) Do not create interpolated themes and disable export of non interpolatable data. Due to the fact that data can contain NaN's which will be filtered out before creating the interpolator this requires the actual check for interpolatable data when data is set in the ResultValue
author Andre Heinecke <andre.heinecke@intevation.de>
date Wed, 01 Apr 2015 17:10:03 +0200
parents 39ce099a6551
children 5102733c4567
line wrap: on
line source
/* Copyright (C) 2011, 2012, 2013, 2015 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.artifacts.states.minfo;

import java.util.Date;
import java.util.List;

import org.w3c.dom.Element;

import org.apache.log4j.Logger;

import org.dive4elements.river.artifacts.D4EArtifact;
import org.dive4elements.river.artifacts.access.RiverAccess;
import org.dive4elements.river.artifacts.states.DistanceSelect;
import org.dive4elements.river.utils.KMIndex;

import org.dive4elements.river.artifacts.model.minfo.BedOverview;
import org.dive4elements.river.artifacts.model.minfo.BedOverviewFactory;

import org.dive4elements.artifacts.common.utils.XMLUtils;
import org.dive4elements.artifacts.Artifact;
import org.dive4elements.artifacts.CallContext;

import org.dive4elements.artifactdatabase.data.StateData;

/** Extended Distance Select with default values appropiate for BedQuality */
public class BedQualityDistanceSelect extends DistanceSelect {

    private static Logger log = Logger.getLogger(BedQualityDistanceSelect.class);

    /**
     * The default constructor that initializes an empty State object.
     */
    public BedQualityDistanceSelect() {
    }

    @Override
    protected Element createData(
        XMLUtils.ElementCreator cr,
        Artifact    artifact,
        StateData   data,
        CallContext context)
    {
        Element ele = super.createData(cr, artifact, data, context);
        if (!data.getName().equals("ld_from") && !data.getName().equals("ld_to")) {
            return ele;
        }

        D4EArtifact arti = (D4EArtifact) artifact;
        RiverAccess access = new RiverAccess(arti);

        /* Bit of an overkill here but it will be cached and accessed
         * in the next state anyway. */
        BedOverview overview = BedOverviewFactory.getOverview(access.getRiverName());

        if (overview == null) {
            log.warn("No overview found for river '" + access.getRiverName() + "'");
            return ele;
        }

        KMIndex<List<Date>> entries = overview.filter(BedOverview.ACCEPT);
        entries.sort();

        if (data.getName().equals("ld_from")) {
            cr.addAttr(ele, "defaultLabel", data.getName(), true);
            cr.addAttr(ele, "defaultValue", Double.toString(entries.get(0).getKm()), true);
        } else if (data.getName().equals("ld_to")) {
            cr.addAttr(ele, "defaultLabel", data.getName(), true);
            cr.addAttr(ele, "defaultValue", Double.toString(entries.get(entries.size()-1).getKm()), true);
        }

        return ele;
    }
}

http://dive4elements.wald.intevation.org