view flys-artifacts/src/main/java/de/intevation/flys/artifacts/access/ExtremeAccess.java @ 4837:9e25c7523485

Fixed calculation of effective width in MINFO SQ relation. * Get all (including empty datasets) from db. * Filter empty datasets when processing data of the same date. * Added debug outputs.
author Raimund Renkert <rrenkert@intevation.de>
date Wed, 23 Jan 2013 11:14:41 +0100
parents 2d3f8af87b7b
children f8217f1fef2e
line wrap: on
line source
package de.intevation.flys.artifacts.access;

import de.intevation.flys.artifacts.FLYSArtifact;

import de.intevation.flys.artifacts.model.RangeWithValues;

import de.intevation.flys.utils.DoubleUtil;

import java.util.ArrayList;
import java.util.List;

import org.apache.log4j.Logger;

/** Access data used for extreme value analysis. */
public class ExtremeAccess
extends      RiverAccess
{
    /** Our private logger. */
    private static Logger logger = Logger.getLogger(ExtremeAccess.class);

    protected Double from;
    protected Double to;
    protected Double step;

    protected Long start;
    protected Long end;

    protected Double percent;

    protected String function;

    protected List<RangeWithValues> ranges;


    public ExtremeAccess() {
    }


    public ExtremeAccess(FLYSArtifact artifact) {
        super(artifact);
    }


    /** From (km) for calculation. */
    public Double getFrom() {

        if (from == null) {
            from = getDouble("ld_from");
        }

        if (logger.isDebugEnabled()) {
            logger.debug("from: '" + from + "'");
        }

        return from;
    }


    /** To (km) for calculation. */
    public Double getTo() {

        if (to == null) {
            to = getDouble("ld_to");
        }

        if (logger.isDebugEnabled()) {
            logger.debug("to: '" + to + "'");
        }

        return to;
    }


    /** Step width for calculation. */
    public Double getStep() {

        if (step == null) {
            step = getDouble("ld_step");
        }

        if (logger.isDebugEnabled()) {
            logger.debug("step: '" + step + "'");
        }

        return step;
    }


    /** Returns the percent given. */
    public Double getPercent() {

        if (percent == null) {
            percent = getDouble("percent");
        }

        if (logger.isDebugEnabled()) {
            logger.debug("percent: '" + percent + "'");
        }

        return percent;
    }

    public String getFunction() {
        if (function == null) {
            function = getString("function");
        }

        if (logger.isDebugEnabled()) {
            logger.debug("function: '" + function + "'");
        }

        return function;
    }


    /** Find first RangeWithValues for which the given location
     * is within the range and return its values.
     * @return values of first suitable rangewithvalues or null.
     */
    public double[] getValuesForRange(double location) {
        logger.debug("ExtemeAcces.getValuesForRange");
        for (RangeWithValues rangeValues: getRanges()) {
            if (rangeValues.inside(location)) {
                return rangeValues.getValues();
            }
        }
        return null;
    }


    public List<RangeWithValues> getRanges() {

        if (ranges == null) {
            String rangesS = getString("ranges");
            if (rangesS == null) {
                return null;
            }
            ranges = new ArrayList<RangeWithValues>();
            DoubleUtil.parseSegments(rangesS, new DoubleUtil.SegmentCallback() {
                @Override
                public void newSegment(double from, double to, double [] values) {
                    ranges.add(new RangeWithValues(from, to, values));
                }
            });
        }

        if (logger.isDebugEnabled()) {
            logger.debug("ranges: " + ranges);
        }

        return ranges;
    }
}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :

http://dive4elements.wald.intevation.org