Mercurial > dive4elements > river
diff artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/BedDiffCalculation.java @ 8169:856701739443
Handle missing years in bed height differences without assuming an unknown year to be BC 1.
author | "Tom Gottfried <tom@intevation.de>" |
---|---|
date | Mon, 01 Sep 2014 09:43:55 +0200 |
parents | a709e6334c4a |
children | e4606eae8ea5 |
line wrap: on
line diff
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/BedDiffCalculation.java Fri Aug 29 17:00:26 2014 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/BedDiffCalculation.java Mon Sep 01 09:43:55 2014 +0200 @@ -35,45 +35,35 @@ public CalculationResult calculate(BedDifferencesAccess access, CallContext context) { logger.info("BedDiffCalculation.calculate"); - String river = access.getRiverName(); - int [][] heightIds = access.extractHeightIds(context); + this.river = access.getRiverName(); + this.heightIds = access.extractHeightIds(context); - if (river == null) { - // TODO: i18n - addProblem("minfo.missing.river"); + BedDiffYearResult [] results = new BedDiffYearResult[heightIds.length]; + for (int i = 0; i < heightIds.length; i++) { + BedHeightSingleData [] pair = getHeightPair(heightIds[i]); + if (pair[0].getYear() == null || pair[1].getYear() == null) { + addProblem("beddiff.missing.year"); + } + results[i] = calculateYearDifference(pair); } - if (!hasProblems()) { - this.river = river; - this.heightIds = heightIds; - return internalCalculate(); - } - - return new CalculationResult(); - } - - private CalculationResult internalCalculate() { - BedDiffYearResult [] results = new BedDiffYearResult[heightIds.length]; - - for (int i = 0; i < heightIds.length; i++) { - BedHeightData [] pair = getHeightPair(heightIds[i], "single"); - results[i] = calculateYearDifference(pair); - } return new CalculationResult(results, this); } /** Get two BedHeights from factory. */ - private static BedHeightData [] getHeightPair(int [] ids, String type) { - return new BedHeightData [] { - BedHeightFactory.getHeight(type, ids[0]), - BedHeightFactory.getHeight(type, ids[1]) + private static BedHeightSingleData [] getHeightPair(int [] ids) { + return new BedHeightSingleData [] { + (BedHeightSingleData)BedHeightFactory.getHeight("single", ids[0]), + (BedHeightSingleData)BedHeightFactory.getHeight("single", ids[1]) }; } - private BedDiffYearResult calculateYearDifference(BedHeightData[] pair) { + private BedDiffYearResult calculateYearDifference( + BedHeightSingleData[] pair + ) { logger.debug("BedDiffCalculation.calculateYearDifference"); - BedHeightSingleData s1 = (BedHeightSingleData) pair[0]; - BedHeightSingleData s2 = (BedHeightSingleData) pair[1]; + BedHeightSingleData s1 = pair[0]; + BedHeightSingleData s2 = pair[1]; TDoubleArrayList stations = s1.getStations(); int size = stations.size(); @@ -88,7 +78,10 @@ TDoubleArrayList morphs1 = new TDoubleArrayList(size); TDoubleArrayList morphs2 = new TDoubleArrayList(size); - int range = Math.abs(s1.getYear() - s2.getYear()); + Integer range = null; + if (s1.getYear() != null && s2.getYear() != null) { + range = Math.abs(s1.getYear() - s2.getYear()); + } for (int i = 0; i < size; i++) { double station = stations.getQuick(i); @@ -110,7 +103,9 @@ s1.getDataGap(station), s2.getDataGap(station))); - absolute.add((hDiff / range) * 100d); + if (range != null) { + absolute.add((hDiff / range) * 100d); + } heights1.add(h1); heights2.add(h2); morphs1.add(m1);