Mercurial > dive4elements > river
view flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/MiddleBedHeightCalculation.java @ 3304:02d5731b43a2
SQ relation: Build a valid SQResult.
flys-artifacts/trunk@4989 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Fri, 13 Jul 2012 11:12:35 +0000 |
parents | 3c006a53e551 |
children | 0f7abd95c6e2 |
line wrap: on
line source
package de.intevation.flys.artifacts.model; import java.util.ArrayList; import java.util.List; import org.apache.log4j.Logger; import de.intevation.artifacts.Artifact; import de.intevation.artifacts.common.utils.DateUtils; import de.intevation.flys.model.BedHeightEpoch; import de.intevation.flys.model.BedHeightEpochValue; import de.intevation.flys.model.BedHeightSingle; import de.intevation.flys.model.BedHeightSingleValue; import de.intevation.flys.model.TimeInterval; import de.intevation.flys.artifacts.access.BedHeightAccess; import de.intevation.flys.artifacts.model.MiddleBedHeightData; public class MiddleBedHeightCalculation extends Calculation { private static final Logger logger = Logger.getLogger(MiddleBedHeightCalculation.class); public CalculationResult calculate(BedHeightAccess access) { logger.info("MiddleBedHeightCalculation.calculate"); int[] singleIds = access.getBedHeightSingleIDs(); int[] epochIds = access.getBedHeightEpochIDs(); if (logger.isDebugEnabled()) { Artifact artifact = access.getArtifact(); logger.debug("Artifact '" + artifact.identifier() + "' contains:"); if (singleIds != null) { logger.debug(" " + singleIds.length + " single bedheight ids"); } if (epochIds != null) { logger.debug(" " + epochIds.length + " epoch bedheight ids"); } } List<BedHeightSingle> singles = getSingles(access, singleIds); List<BedHeightEpoch> epochs = getEpochs(access, epochIds); return buildCalculationResult(access, singles, epochs); } protected List<BedHeightSingle> getSingles( BedHeightAccess access, int[] ids ) { List<BedHeightSingle> singles = new ArrayList<BedHeightSingle>(); for (int id: ids) { BedHeightSingle s = BedHeightSingle.getBedHeightSingleById(id); if (s != null) { singles.add(s); } else { logger.warn("Cannot find Sngle by id: " + id); // TODO ADD WARNING } } return singles; } protected List<BedHeightEpoch> getEpochs( BedHeightAccess access, int[] ids ) { List<BedHeightEpoch> epochs = new ArrayList<BedHeightEpoch>(); for (int id: ids) { BedHeightEpoch e = BedHeightEpoch.getBedHeightEpochById(id); if (e != null) { epochs.add(e); } else { logger.warn("Cannot find Epoch by id: " + id); // TODO ADD WARNING } } return epochs; } protected CalculationResult buildCalculationResult( BedHeightAccess access, List<BedHeightSingle> singles, List<BedHeightEpoch> epochs ) { logger.info("MiddleBedHeightCalculation.buildCalculationResult"); double kmLo = access.getLowerKM(); double kmHi = access.getUpperKM(); List<MiddleBedHeightData> data = new ArrayList<MiddleBedHeightData>(); for (BedHeightSingle single: singles) { MiddleBedHeightData d = prepareSingleData(single, kmLo, kmHi); if (d != null) { data.add(d); } } for (BedHeightEpoch epoch: epochs) { MiddleBedHeightData d = prepareEpochData(epoch, kmLo, kmHi); if (d != null) { data.add(d); } } logger.debug("Calculation results in " + data.size() + " data objects."); return new CalculationResult((MiddleBedHeightData[]) data.toArray(new MiddleBedHeightData[data.size()]), this); } protected MiddleBedHeightData prepareSingleData( BedHeightSingle single, double kmLo, double kmHi ) { logger.debug("Prepare data for single: " + single.getDescription()); List<BedHeightSingleValue> values = BedHeightSingleValue.getBedHeightSingleValues(single, kmLo, kmHi); MiddleBedHeightData data = new MiddleBedHeightData( single.getYear(), single.getYear(), single.getEvaluationBy(), single.getDescription()); for (BedHeightSingleValue value: values) { data.addKM(value.getStation().doubleValue()); data.addMiddleHeight(value.getHeight().doubleValue()); data.addUncertainty(value.getUncertainty().doubleValue()); data.addSoundingWidth(value.getSoundingWidth().doubleValue()); data.addDataGap(value.getDataGap().doubleValue()); data.addWidth(value.getWidth().doubleValue()); } logger.debug("Single contains " + values.size() + " values"); return data; } protected MiddleBedHeightData prepareEpochData( BedHeightEpoch epoch, double kmLo, double kmHi ) { logger.debug("Prepare data for epoch: " + epoch.getDescription()); TimeInterval ti = epoch.getTimeInterval(); List<BedHeightEpochValue> values = BedHeightEpochValue.getBedHeightEpochValues(epoch, kmLo, kmHi); MiddleBedHeightData data = new MiddleBedHeightData( DateUtils.getYearFromDate(ti.getStartTime()), DateUtils.getYearFromDate(ti.getStopTime()), epoch.getEvaluationBy(), epoch.getDescription() ); for (BedHeightEpochValue value: values) { data.addKM(value.getStation().doubleValue()); data.addMiddleHeight(value.getHeight().doubleValue()); } logger.debug("Epoch contains " + values.size() + " values"); return data; } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :