Mercurial > dive4elements > river
comparison artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/tkhstate/TkhCalculation.java @ 8938:9c02733a1b3c
Work on Sinfo-tkh - exports; using same logic for wst-description as winfo
author | gernotbelger |
---|---|
date | Tue, 06 Mar 2018 17:09:39 +0100 |
parents | 5d5d0051723f |
children | 11bf13cf0463 |
comparison
equal
deleted
inserted
replaced
8937:8596f95673b1 | 8938:9c02733a1b3c |
---|---|
28 import org.dive4elements.river.artifacts.sinfo.tkhcalculation.TkhCalculator; | 28 import org.dive4elements.river.artifacts.sinfo.tkhcalculation.TkhCalculator; |
29 import org.dive4elements.river.artifacts.sinfo.util.CalculationUtils; | 29 import org.dive4elements.river.artifacts.sinfo.util.CalculationUtils; |
30 import org.dive4elements.river.artifacts.sinfo.util.RiverInfo; | 30 import org.dive4elements.river.artifacts.sinfo.util.RiverInfo; |
31 import org.dive4elements.river.artifacts.sinfo.util.WstInfo; | 31 import org.dive4elements.river.artifacts.sinfo.util.WstInfo; |
32 import org.dive4elements.river.artifacts.states.WaterlevelData; | 32 import org.dive4elements.river.artifacts.states.WaterlevelData; |
33 import org.dive4elements.river.exports.WaterlevelDescriptionBuilder; | |
33 import org.dive4elements.river.model.River; | 34 import org.dive4elements.river.model.River; |
34 | 35 |
35 /** | 36 /** |
36 * @author Gernot Belger | 37 * @author Gernot Belger |
37 */ | 38 */ |
54 final Calculation problems = new Calculation(); | 55 final Calculation problems = new Calculation(); |
55 | 56 |
56 /* find relevant bed-heights */ | 57 /* find relevant bed-heights */ |
57 final Collection<BedHeightsFinder> bedHeights = BedHeightsFinder.createTkhBedHeights(river, problems, calcRange); | 58 final Collection<BedHeightsFinder> bedHeights = BedHeightsFinder.createTkhBedHeights(river, problems, calcRange); |
58 | 59 |
60 /* misuse winfo-artifact to calculate waterlevels in the same way */ | |
61 final WINFOArtifact winfo = new WinfoArtifactWrapper(sinfo); | |
62 | |
59 /* calculate waterlevels */ | 63 /* calculate waterlevels */ |
60 final WQKms[] kms = calculateWaterlevels(sinfo, problems); | 64 final WQKms[] kms = calculateWaterlevels(winfo, problems); |
61 | 65 |
62 final RiverInfoProvider infoProvider = RiverInfoProvider.forRange(this.context, river, calcRange); | 66 final RiverInfoProvider infoProvider = RiverInfoProvider.forRange(this.context, river, calcRange); |
63 | 67 |
64 final String user = CalculationUtils.findArtifactUser(this.context, sinfo); | 68 final String user = CalculationUtils.findArtifactUser(this.context, sinfo); |
65 | 69 |
66 final String calcModeLabel = Resources.getMsg(this.context.getMeta(), sinfo.getCalculationMode().name()); | 70 final String calcModeLabel = Resources.getMsg(this.context.getMeta(), sinfo.getCalculationMode().name()); |
67 | 71 |
72 final WaterlevelDescriptionBuilder descBuilder = new WaterlevelDescriptionBuilder(winfo, this.context); | |
73 final String descriptionHeader = descBuilder.getColumnHeader(); | |
74 | |
68 /* for each waterlevel, do a tkh calculation */ | 75 /* for each waterlevel, do a tkh calculation */ |
69 final TkhCalculationResults results = new TkhCalculationResults(calcModeLabel, user, riverInfo, calcRange); | 76 final TkhCalculationResults results = new TkhCalculationResults(calcModeLabel, user, riverInfo, calcRange, descriptionHeader); |
70 | 77 |
71 for (final WQKms wqKms : kms) { | 78 for (final WQKms wqKms : kms) { |
72 | 79 |
73 final TkhCalculationResult result = calculateResult(calcRange, infoProvider, wqKms, bedHeights, problems); | 80 final TkhCalculationResult result = calculateResult(calcRange, infoProvider, wqKms, bedHeights, descBuilder, problems); |
74 if (result != null) | 81 if (result != null) |
75 // FIXME: must be sorted by station! | 82 // FIXME: must be sorted by station! |
76 results.addResult(result); | 83 results.addResult(result); |
77 } | 84 } |
78 | 85 |
79 return new CalculationResult(results, problems); | 86 return new CalculationResult(results, problems); |
80 } | 87 } |
81 | 88 |
82 private WQKms[] calculateWaterlevels(final SINFOArtifact sinfo, final Calculation problems) { | 89 private WQKms[] calculateWaterlevels(final WINFOArtifact winfo, final Calculation problems) { |
83 | |
84 /* misuse winfo-artifact to calculate waterlevels in the same way */ | |
85 final WINFOArtifact winfo = new WinfoArtifactWrapper(sinfo); | |
86 | 90 |
87 final CalculationResult waterlevelData = winfo.getWaterlevelData(this.context); | 91 final CalculationResult waterlevelData = winfo.getWaterlevelData(this.context); |
88 | 92 |
89 /* copy all problems */ | 93 /* copy all problems */ |
90 final Calculation winfoProblems = waterlevelData.getReport(); | 94 final Calculation winfoProblems = waterlevelData.getReport(); |
97 | 101 |
98 return (WQKms[]) waterlevelData.getData(); | 102 return (WQKms[]) waterlevelData.getData(); |
99 } | 103 } |
100 | 104 |
101 private TkhCalculationResult calculateResult(final DoubleRange calcRange, final RiverInfoProvider riverInfo, final WQKms wkms, | 105 private TkhCalculationResult calculateResult(final DoubleRange calcRange, final RiverInfoProvider riverInfo, final WQKms wkms, |
102 final Collection<BedHeightsFinder> bedHeights, final Calculation problems) { | 106 final Collection<BedHeightsFinder> bedHeights, final WaterlevelDescriptionBuilder descBuilder, final Calculation problems) { |
103 | 107 |
104 // FIXME: wo kommt das her? via winfo kein jahr vorhanden, oder doch? aber soll in metadaten ausgegeben werden... | 108 // FIXME: wo kommt das her? via winfo kein jahr vorhanden, oder doch? aber soll in metadaten ausgegeben werden... |
105 final int wspYear = -1; | 109 final int wspYear = -1; |
106 // FIXME: richtig? vgl. WInfo? | 110 // FIXME: richtig? vgl. WInfo? |
107 final boolean showAllGauges = false; | 111 final boolean showAllGauges = false; |
108 final WaterlevelData waterlevel = new WaterlevelData(wkms, wspYear, showAllGauges); | 112 final WaterlevelData waterlevel = new WaterlevelData(wkms, wspYear, showAllGauges); |
109 | 113 |
110 final RiverInfoProvider riverInfoProvider = riverInfo.forWaterlevel(waterlevel); | 114 final RiverInfoProvider riverInfoProvider = riverInfo.forWaterlevel(waterlevel); |
111 | 115 |
112 final String label = waterlevel.getName(); | 116 // FIXME: check with winfo how the name is generated |
117 final String wstLabel = waterlevel.getName(); | |
113 | 118 |
114 final WstInfo wstInfo = new WstInfo(label, wspYear, riverInfoProvider.getReferenceGauge()); | 119 final WstInfo wstInfo = new WstInfo(wstLabel, wspYear, riverInfoProvider.getReferenceGauge()); |
115 | 120 |
116 final Collection<TkhResultRow> rows = new ArrayList<>(); | 121 final Collection<TkhResultRow> rows = new ArrayList<>(); |
117 | 122 |
118 /* | 123 /* |
119 * for each separate bed height dataset we do the calculation and put everything into one result, bed heights must not | 124 * for each separate bed height dataset we do the calculation and put everything into one result, bed heights must not |
122 for (final BedHeightsFinder bedHeightsProvider : bedHeights) { | 127 for (final BedHeightsFinder bedHeightsProvider : bedHeights) { |
123 | 128 |
124 final DischargeValuesFinder dischargeProvider = DischargeValuesFinder.fromKms(wkms); | 129 final DischargeValuesFinder dischargeProvider = DischargeValuesFinder.fromKms(wkms); |
125 | 130 |
126 /* initialize tkh calculator */ | 131 /* initialize tkh calculator */ |
127 final TkhCalculator tkhCalculator = TkhCalculator.buildTkhCalculator(true, this.context, problems, label, riverInfoProvider.getRiver(), calcRange, | 132 final TkhCalculator tkhCalculator = TkhCalculator.buildTkhCalculator(true, this.context, problems, wstLabel, riverInfoProvider.getRiver(), |
133 calcRange, | |
128 dischargeProvider, bedHeightsProvider); | 134 dischargeProvider, bedHeightsProvider); |
129 if (tkhCalculator == null) { | 135 if (tkhCalculator == null) { |
130 /* just abort, problems have already been updated by buildTkhCalculator() */ | 136 /* just abort, problems have already been updated by buildTkhCalculator() */ |
131 return null; | 137 return null; |
132 } | 138 } |
142 final double station = wkms.getKm(i); | 148 final double station = wkms.getKm(i); |
143 final double wst = wkms.getW(i); | 149 final double wst = wkms.getW(i); |
144 | 150 |
145 final Tkh tkh = tkhCalculator.getTkh(station, wst); | 151 final Tkh tkh = tkhCalculator.getTkh(station, wst); |
146 | 152 |
153 final String description = descBuilder.getDesc(wkms); | |
147 final String gaugeLabel = riverInfoProvider.findGauge(station); | 154 final String gaugeLabel = riverInfoProvider.findGauge(station); |
148 final String location = riverInfoProvider.getLocation(station); | 155 final String location = riverInfoProvider.getLocation(station); |
149 | 156 |
150 rows.add(new TkhResultRow(tkh, label, gaugeLabel, location)); | 157 rows.add(new TkhResultRow(tkh, description, gaugeLabel, location)); |
151 } | 158 } |
152 } | 159 } |
153 | 160 |
154 return new TkhCalculationResult(label, wstInfo, true, rows); | 161 return new TkhCalculationResult(wstLabel, wstInfo, true, rows); |
155 } | 162 } |
156 } | 163 } |