view flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/minfo/BedQualityCalculation.java @ 3760:312870fded7e

Added result objects for minfo bed quality calculation. flys-artifacts/trunk@5459 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Raimund Renkert <raimund.renkert@intevation.de>
date Thu, 13 Sep 2012 13:51:00 +0000
parents
children 728ecd2afa20
line wrap: on
line source
package de.intevation.flys.artifacts.model.minfo;

import java.util.LinkedList;
import java.util.List;

import org.apache.log4j.Logger;

import de.intevation.flys.artifacts.access.BedQualityAccess;
import de.intevation.flys.artifacts.model.Calculation;
import de.intevation.flys.artifacts.model.CalculationResult;
import de.intevation.flys.artifacts.model.DateRange;
import de.intevation.flys.backend.SedDBSessionHolder;


public class BedQualityCalculation extends Calculation {

    private static final Logger logger = Logger
        .getLogger(BedQualityCalculation.class);

    protected String river;
    protected double from;
    protected double to;
    protected List<DateRange> ranges;

    public BedQualityCalculation() {
    }

    public CalculationResult calculate(BedQualityAccess access) {
        logger.info("BedQualityCalculation.calculate");

        String river = access.getRiver();
        Double from = access.getFrom();
        Double to = access.getTo();
        List<DateRange> ranges = access.getDateRanges();

        if (river == null) {
            // TODO: i18n
            addProblem("minfo.missing.river");
        }

        if (from == null) {
            // TODO: i18n
            addProblem("minfo.missing.from");
        }

        if (to == null) {
            // TODO: i18n
            addProblem("minfo.missing.to");
        }

        if (ranges == null) {
            // TODO: i18n
            addProblem("minfo.missing.periods");
        }

        if (!hasProblems()) {
            this.river = river;
            this.from = from;
            this.to = to;
            this.ranges = ranges;

            SedDBSessionHolder.acquire();
            try {
                return internalCalculate();
            }
            finally {
                SedDBSessionHolder.release();
            }
        }

        return new CalculationResult();
    }

    protected CalculationResult internalCalculate() {

        List<BedQualityResult> results = new LinkedList<BedQualityResult>();
        // Calculate for all time periods.
        for (DateRange dr : ranges) {
            QualityMeasurements bedMeasurements = QualityMeasurementFactory
                .getBedMeasurements(river, from, to, dr.getFrom(), dr.getTo());
            QualityMeasurements loadMeasurements = QualityMeasurementFactory
                .getBedMeasurements(river, from, to, dr.getFrom(), dr.getTo());

            BedQualityResult bedResult = calculateBed(bedMeasurements);
            BedQualityResult loadResult = calculateBedload(loadMeasurements);
            results.add(bedResult);
            results.add(loadResult);
        }

        return new CalculationResult(
            results.toArray(new BedQualityResult[results.size()]), this);
    }

    protected BedQualityResult calculateBed(QualityMeasurements qm) {
        // TODO
        return new BedQualityResult();
    }

    protected BedQualityResult calculateBedload(QualityMeasurements qm) {
        // TODO
        return new BedQualityResult();
    }
}

http://dive4elements.wald.intevation.org