view artifacts/src/main/java/org/dive4elements/river/artifacts/states/minfo/BedQualityDistanceSelect.java @ 8776:1116079e6624

Tidied.
author Tom Gottfried <tom@intevation.de>
date Wed, 02 Dec 2015 19:35:11 +0100
parents 5102733c4567
children 6714e07e18c2
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);
        if (entries.size() == 0) {
            log.warn("No data found for river '"
                + access.getRiverName() + "'");
            return ele;
        }
        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