# HG changeset patch # User Sascha L. Teichmann # Date 1405677539 -7200 # Node ID 72760ca2fc2b037393cfd5f73a851f5723771c81 # Parent 1dae69eff79dd23ab0af8bfd9ec76573855edcea Sediment load: dispatch calculation modes. diff -r 1dae69eff79d -r 72760ca2fc2b artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/SedimentLoadDataCalculation.java --- a/artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/SedimentLoadDataCalculation.java Fri Jul 18 11:16:50 2014 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/SedimentLoadDataCalculation.java Fri Jul 18 11:58:59 2014 +0200 @@ -13,10 +13,13 @@ import org.dive4elements.river.artifacts.access.SedimentLoadAccess; import org.dive4elements.river.artifacts.model.Calculation; import org.dive4elements.river.artifacts.model.CalculationResult; +import org.dive4elements.river.artifacts.model.RiverFactory; import org.apache.log4j.Logger; import org.dive4elements.river.artifacts.model.minfo.SedimentLoadData; import org.dive4elements.river.artifacts.model.minfo.SedimentLoadData.Value; import org.dive4elements.river.artifacts.model.minfo.SedimentLoadData.Station; +import org.dive4elements.river.model.River; +import org.dive4elements.river.utils.DoubleUtil; public class SedimentLoadDataCalculation extends Calculation @@ -173,20 +176,43 @@ return internalCalculate(); } - return new CalculationResult(); + return new CalculationResult(this); } private CalculationResult internalCalculate() { + if ("year".equals(yearEpoch)) return calculateYears(); + if ("epoch".equals(yearEpoch)) return calculateEpochs(); + if ("off_epoch".equals(yearEpoch)) return calculateOffEpochs(); + + // TODO: i18n + addProblem("minfo.sediment.load.unknown.calc.mode"); + + return new CalculationResult(this); + } + + private CalculationResult calculateYears() { // TODO: Implement me! return null; } - private static final double sum(double [] values) { - double sum = 0.0; - for (double value: values) { - sum += value; + private CalculationResult calculateEpochs() { + // TODO: Implement me! + return null; + } + + private CalculationResult calculateOffEpochs() { + // TODO: Implement me! + return null; + } + + /** Figure out flow direction of river. */ + private boolean isKmUp() { + River r = RiverFactory.getRiver(river); + if (r == null) { + addProblem("minfo.missing.river"); + return true; } - return sum; + return r.getKmUp(); } public double[][] sum( @@ -228,7 +254,7 @@ } } result[0][j] = station.getStation(); - result[1][j] = sum(values); + result[1][j] = DoubleUtil.sum(values); } // TODO: Handle 'virtual' measument stations 'from' and 'to'. diff -r 1dae69eff79d -r 72760ca2fc2b artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/SedimentLoadDataValueFilter.java --- a/artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/SedimentLoadDataValueFilter.java Fri Jul 18 11:16:50 2014 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/SedimentLoadDataValueFilter.java Fri Jul 18 11:58:59 2014 +0200 @@ -98,6 +98,23 @@ private Date a; private Date b; + public TimeRangeIntersects(int startYear, int endYear) { + this(firstJan(Math.min(startYear, endYear)), + lastDec(Math.max(startYear, endYear))); + } + + private static Date firstJan(int year) { + Calendar cal = Calendar.getInstance(); + cal.set(year, 1, 1, 0, 0, 0); + return cal.getTime(); + } + + private static Date lastDec(int year) { + Calendar cal = Calendar.getInstance(); + cal.set(year, 12, 31, 23, 59, 59); + return cal.getTime(); + } + public TimeRangeIntersects(Date a, Date b) { if (a.after(b)) { this.b = a; diff -r 1dae69eff79d -r 72760ca2fc2b artifacts/src/main/java/org/dive4elements/river/utils/DoubleUtil.java --- a/artifacts/src/main/java/org/dive4elements/river/utils/DoubleUtil.java Fri Jul 18 11:16:50 2014 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/utils/DoubleUtil.java Fri Jul 18 11:58:59 2014 +0200 @@ -171,6 +171,14 @@ return out; } + public static final double sum(double [] values) { + double sum = 0.0; + for (double value: values) { + sum += value; + } + return sum; + } + public static final double [] fill(int N, double value) { double [] result = new double[N]; Arrays.fill(result, value); @@ -234,6 +242,15 @@ return true; } + public static final boolean isNaN(double [] values) { + for (double value: values) { + if (!Double.isNaN(value)) { + return false; + } + } + return true; + } + /** In an array of doubles, search and return the maximum value. */ public static final double maxInArray(double[] values) { double max = - Double.MAX_VALUE;