view flys-artifacts/src/main/java/de/intevation/flys/artifacts/access/FixAnalysisAccess.java @ 4377:512a3af69e18

Extract common generator method from FixLongitudinalSectionGenerator The extracted methods and code can be reused for generating charts for bed differences if fixanalysis data is loaded via the datacache.
author Björn Ricks <bjoern.ricks@intevation.de>
date Fri, 02 Nov 2012 15:47:15 +0100
parents 8160e62bbb3a
children acfd48384835
line wrap: on
line source
package de.intevation.flys.artifacts.access;

import de.intevation.artifactdatabase.data.StateData;

import de.intevation.flys.artifacts.FLYSArtifact;

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

import java.util.Arrays;
import java.util.Date;

import org.apache.log4j.Logger;

public class FixAnalysisAccess
extends      FixAccess
{
    private static Logger log = Logger.getLogger(FixAnalysisAccess.class);

    protected DateRange    referencePeriod;
    protected DateRange [] analysisPeriods;

    protected double [] qs;

    public FixAnalysisAccess() {
    }

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

    public DateRange getReferencePeriod() {
        if (referencePeriod == null) {
            StateData refStart = artifact.getData("ref_start");
            StateData refEnd   = artifact.getData("ref_end");

            if (refStart == null || refEnd == null) {
                log.warn("missing 'ref_start' or 'ref_start' value");
                return null;
            }

            try {
                long rs = Long.parseLong((String)refStart.getValue());
                long re = Long.parseLong((String)refEnd  .getValue());

                if (rs > re) { long t = rs; rs = re; re = t; }

                Date from = new Date(rs);
                Date to   = new Date(re);
                referencePeriod = new DateRange(from, to);
            }
            catch (NumberFormatException nfe) {
                log.warn("ref_start or ref_end is not an integer.");
            }
        }

        return referencePeriod;
    }

    public DateRange [] getAnalysisPeriods() {
        if (analysisPeriods == null) {
            analysisPeriods = getDateRange("ana_data");
        }

        return analysisPeriods;
    }

    /**
     * @return DateRange object ranging from eldest to youngest date
     * of analysis and reference periods.
     */
    public DateRange getDateRange() {
        DateRange refP = getReferencePeriod();

        if (refP == null) {
            return null;
        }

        Date from = refP.getFrom();
        Date to   = refP.getTo();

        DateRange[] rs = getAnalysisPeriods();
        for (DateRange r: rs) {
            if (r.getFrom().before(from)) {
                from = r.getFrom();
            }
            if (r.getTo().after(to)) {
                to = r.getTo();
            }
        }

        return new DateRange(from, to);
    }

    public double [] getQs() {
        if (qs == null) {
            qs = getDoubleArray("qs");
        }

        if (log.isDebugEnabled() && qs != null) {
            log.debug("qs: " + Arrays.toString(qs));
        }
        return qs;
    }
}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org