raimund@3760: package de.intevation.flys.artifacts.model.minfo; raimund@3760: raimund@3760: import java.util.LinkedList; raimund@3760: import java.util.List; raimund@3760: raimund@3760: import org.apache.log4j.Logger; raimund@3760: raimund@3760: import de.intevation.flys.artifacts.access.BedQualityAccess; raimund@3760: import de.intevation.flys.artifacts.model.Calculation; raimund@3760: import de.intevation.flys.artifacts.model.CalculationResult; raimund@3760: import de.intevation.flys.artifacts.model.DateRange; raimund@3760: import de.intevation.flys.backend.SedDBSessionHolder; raimund@3760: raimund@3760: raimund@3760: public class BedQualityCalculation extends Calculation { raimund@3760: raimund@3760: private static final Logger logger = Logger raimund@3760: .getLogger(BedQualityCalculation.class); raimund@3760: raimund@3760: protected String river; raimund@3760: protected double from; raimund@3760: protected double to; raimund@3760: protected List ranges; raimund@3760: raimund@3760: public BedQualityCalculation() { raimund@3760: } raimund@3760: raimund@3760: public CalculationResult calculate(BedQualityAccess access) { raimund@3760: logger.info("BedQualityCalculation.calculate"); raimund@3760: raimund@3760: String river = access.getRiver(); raimund@3760: Double from = access.getFrom(); raimund@3760: Double to = access.getTo(); raimund@3760: List ranges = access.getDateRanges(); raimund@3760: raimund@3760: if (river == null) { raimund@3760: // TODO: i18n raimund@3760: addProblem("minfo.missing.river"); raimund@3760: } raimund@3760: raimund@3760: if (from == null) { raimund@3760: // TODO: i18n raimund@3760: addProblem("minfo.missing.from"); raimund@3760: } raimund@3760: raimund@3760: if (to == null) { raimund@3760: // TODO: i18n raimund@3760: addProblem("minfo.missing.to"); raimund@3760: } raimund@3760: raimund@3760: if (ranges == null) { raimund@3760: // TODO: i18n raimund@3760: addProblem("minfo.missing.periods"); raimund@3760: } raimund@3760: raimund@3760: if (!hasProblems()) { raimund@3760: this.river = river; raimund@3760: this.from = from; raimund@3760: this.to = to; raimund@3760: this.ranges = ranges; raimund@3760: raimund@3760: SedDBSessionHolder.acquire(); raimund@3760: try { raimund@3760: return internalCalculate(); raimund@3760: } raimund@3760: finally { raimund@3760: SedDBSessionHolder.release(); raimund@3760: } raimund@3760: } raimund@3760: raimund@3760: return new CalculationResult(); raimund@3760: } raimund@3760: raimund@3760: protected CalculationResult internalCalculate() { raimund@3760: raimund@3760: List results = new LinkedList(); raimund@3760: // Calculate for all time periods. raimund@3760: for (DateRange dr : ranges) { raimund@3760: QualityMeasurements bedMeasurements = QualityMeasurementFactory raimund@3760: .getBedMeasurements(river, from, to, dr.getFrom(), dr.getTo()); raimund@3760: QualityMeasurements loadMeasurements = QualityMeasurementFactory raimund@3760: .getBedMeasurements(river, from, to, dr.getFrom(), dr.getTo()); raimund@3760: raimund@3760: BedQualityResult bedResult = calculateBed(bedMeasurements); raimund@3760: BedQualityResult loadResult = calculateBedload(loadMeasurements); raimund@3760: results.add(bedResult); raimund@3760: results.add(loadResult); raimund@3760: } raimund@3760: raimund@3760: return new CalculationResult( raimund@3760: results.toArray(new BedQualityResult[results.size()]), this); raimund@3760: } raimund@3760: raimund@3760: protected BedQualityResult calculateBed(QualityMeasurements qm) { raimund@3760: // TODO raimund@3760: return new BedQualityResult(); raimund@3760: } raimund@3760: raimund@3760: protected BedQualityResult calculateBedload(QualityMeasurements qm) { raimund@3760: // TODO raimund@3760: return new BedQualityResult(); raimund@3760: } raimund@3760: }