comparison artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flood_duration/FloodDurationCalculation.java @ 9176:1614cb14308f

Work on calculations for S-Info flood duration workflow
author mschaefer
date Mon, 25 Jun 2018 19:21:11 +0200
parents 23945061daec
children a4121ec450d6
comparison
equal deleted inserted replaced
9175:34dc0163ad2d 9176:1614cb14308f
1 /* Copyright (C) 2017 by Bundesanstalt für Gewässerkunde 1 /** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
2 * Software engineering by 2 * Software engineering by
3 * Björnsen Beratende Ingenieure GmbH 3 * Björnsen Beratende Ingenieure GmbH
4 * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt 4 * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
5 * 5 *
6 * This file is Free Software under the GNU AGPL (>=v3) 6 * This file is Free Software under the GNU AGPL (>=v3)
9 */ 9 */
10 package org.dive4elements.river.artifacts.sinfo.flood_duration; 10 package org.dive4elements.river.artifacts.sinfo.flood_duration;
11 11
12 import org.apache.commons.lang.math.DoubleRange; 12 import org.apache.commons.lang.math.DoubleRange;
13 import org.dive4elements.artifacts.CallContext; 13 import org.dive4elements.artifacts.CallContext;
14 import org.dive4elements.river.artifacts.WINFOArtifact;
14 import org.dive4elements.river.artifacts.model.Calculation; 15 import org.dive4elements.river.artifacts.model.Calculation;
15 import org.dive4elements.river.artifacts.model.CalculationResult; 16 import org.dive4elements.river.artifacts.model.CalculationResult;
16 import org.dive4elements.river.artifacts.resources.Resources; 17 import org.dive4elements.river.artifacts.resources.Resources;
17 import org.dive4elements.river.artifacts.sinfo.SINFOArtifact; 18 import org.dive4elements.river.artifacts.sinfo.SINFOArtifact;
18 import org.dive4elements.river.artifacts.sinfo.common.RiverInfoProvider; 19 import org.dive4elements.river.artifacts.sinfo.common.RiverInfoProvider;
20 import org.dive4elements.river.artifacts.sinfo.flood_duration.RiversideRadioChoice.RiversideChoiceKey;
19 import org.dive4elements.river.artifacts.sinfo.tkhstate.WinfoArtifactWrapper; 21 import org.dive4elements.river.artifacts.sinfo.tkhstate.WinfoArtifactWrapper;
20 import org.dive4elements.river.artifacts.sinfo.util.CalculationUtils; 22 import org.dive4elements.river.artifacts.sinfo.util.CalculationUtils;
21 import org.dive4elements.river.artifacts.sinfo.util.WstInfo; 23 import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
22 import org.dive4elements.river.model.River; 24 import org.dive4elements.river.model.River;
25 import org.dive4elements.river.model.sinfo.Infrastructure;
23 26
24 class FloodDurationCalculation { 27 /**
25 28 * Calculation of the flood durations of the infrastructures of the km range of a river
26 // private static Logger log = Logger.getLogger(FloodDurationCalculation.class); 29 *
30 * @author Matthias Schäfer
31 */
32 final class FloodDurationCalculation {
27 33
28 private final CallContext context; 34 private final CallContext context;
29 35
30 public FloodDurationCalculation(final CallContext context) { 36 public FloodDurationCalculation(final CallContext context) {
31 this.context = context; 37 this.context = context;
36 final String user = CalculationUtils.findArtifactUser(this.context, sinfo); 42 final String user = CalculationUtils.findArtifactUser(this.context, sinfo);
37 43
38 /* access input data */ 44 /* access input data */
39 final FloodDurationAccess access = new FloodDurationAccess(sinfo); 45 final FloodDurationAccess access = new FloodDurationAccess(sinfo);
40 final River river = access.getRiver(); 46 final River river = access.getRiver();
41 47 final RiverInfo riverInfo = new RiverInfo(river);
42 final DoubleRange calcRange = access.getRange(); 48 final DoubleRange calcRange = access.getRange();
43 49
44 /* calculate results for each diff pair */ 50 final RiverInfoProvider infoProvider = RiverInfoProvider.forRange(this.context, river, calcRange);
51 final String calcModeLabel = Resources.getMsg(this.context.getMeta(), sinfo.getCalculationMode().name());
52 final String riverside = Resources.getMsg(this.context.getMeta(), access.getRiverside());
53 final Infrastructure infrasSeries = Infrastructure.getSeries(river);
54 final String infrasType = (infrasSeries != null) ? infrasSeries.getType().getName() : "?";
55
45 final Calculation problems = new Calculation(); 56 final Calculation problems = new Calculation();
46 57
47 final RiverInfoProvider infoProvider = RiverInfoProvider.forRange(this.context, river, calcRange); 58 final FloodDurationCalculationResults results = new FloodDurationCalculationResults(calcModeLabel, user, riverInfo, calcRange);
48 59
49 final String calcModeLabel = Resources.getMsg(this.context.getMeta(), sinfo.getCalculationMode().name()); 60 final FloodDurationCalculationResult result = calculateResult(calcModeLabel, infrasType, riverside, calcRange, infoProvider,
61 RiversideChoiceKey.fromKey(access.getRiverside()), user, problems);
62 results.addResult(result, problems);
50 63
51 // TODO: use enum for riverside 64 // Calculate the selected main values, if any
52 final String riverside = access.getRiverside(); 65 /* misuse winfo-artifact to calculate waterlevels in the same way */
53 // more 66 final WINFOArtifact winfo = new WinfoArtifactWrapper(sinfo);
54 // TODO: mis- ups.. re-use WINFO Artifact as in TkhState
55 final WinfoArtifactWrapper winfo = new WinfoArtifactWrapper(sinfo);
56 // winfo.computeWaterlevelData();
57 final FloodDurationCalculationResults results = calculateResult(calcModeLabel, riverside, calcRange, infoProvider, user, problems);
58 67
59 return new CalculationResult(results, problems); 68 return new CalculationResult(results, problems);
60 } 69 }
61 70
62 /** 71 /**
63 * Calculates FAKE Flood Duration 72 * Calculates the flood durations of the infrastructures of a km range of a river
64 *
65 * @param riverside
66 * @param calcModeLabel
67 * @param user
68 *
69 * @param infoProvider
70 */ 73 */
71 private FloodDurationCalculationResults calculateResult(final String calcModeLabel, final String riverside, final DoubleRange calcRange, 74 private FloodDurationCalculationResult calculateResult(final String calcModeLabel, final String infrastructureType, final String riverside,
72 final RiverInfoProvider riverInfoProvider, final String user, final Calculation problems) { 75 final DoubleRange calcRange, final RiverInfoProvider riverInfoProvider, final RiversideChoiceKey riversideKey, final String user,
76 final Calculation problems) {
73 77
74 final FloodDurationCalculator calculator = new FloodDurationCalculator(this.context, riverInfoProvider); 78 final FloodDurationCalculator calculator = new FloodDurationCalculator(this.context, riverInfoProvider);
75 final String wspLabel = "WSP-Name";// wstKms.getName(); 79 final String label = infrastructureType + ", " + riverside;
76 final int wspYear = 9999; // waterlevel.getYear(); 80 return calculator.execute(problems, label, calcModeLabel, calcRange, riversideKey, user).getResult();
77 final WstInfo wstInfo = new WstInfo(wspLabel, wspYear, riverInfoProvider.getReferenceGauge());
78 final String label = String.format("%s - %s", wspLabel, " soundingLabel");
79 return calculator.execute(problems, label, wstInfo, calcModeLabel, calcRange, riverside, user);
80 } 81 }
81 } 82 }

http://dive4elements.wald.intevation.org