comparison artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixLineCalculation.java @ 9316:72b3270e1568

U-Info salix line with regional and supraregional scenario calculation and chart display
author mschaefer
date Thu, 26 Jul 2018 17:28:32 +0200
parents 9a9f076d5716
children 7b2b086e45f0
comparison
equal deleted inserted replaced
9315:2ff46d921917 9316:72b3270e1568
8 * documentation coming with Dive4Elements River for details. 8 * documentation coming with Dive4Elements River for details.
9 */ 9 */
10 package org.dive4elements.river.artifacts.uinfo.salix; 10 package org.dive4elements.river.artifacts.uinfo.salix;
11 11
12 import java.util.ArrayList; 12 import java.util.ArrayList;
13 import java.util.Iterator;
14 import java.util.List; 13 import java.util.List;
15 import java.util.Map;
16 import java.util.NavigableMap; 14 import java.util.NavigableMap;
17 import java.util.TreeMap; 15 import java.util.TreeMap;
18 16
19 import org.apache.commons.lang.math.DoubleRange;
20 import org.dive4elements.artifacts.CallContext; 17 import org.dive4elements.artifacts.CallContext;
21 import org.dive4elements.river.artifacts.access.RangeAccess; 18 import org.dive4elements.river.artifacts.access.RangeAccess;
22 import org.dive4elements.river.artifacts.model.Calculation; 19 import org.dive4elements.river.artifacts.model.Calculation;
23 import org.dive4elements.river.artifacts.model.CalculationResult; 20 import org.dive4elements.river.artifacts.model.CalculationResult;
24 import org.dive4elements.river.artifacts.resources.Resources; 21 import org.dive4elements.river.artifacts.resources.Resources;
72 final SalixLineCalculationResults results = new SalixLineCalculationResults(calcModeLabel, user, riverInfo, accessSalix.getRange()); 69 final SalixLineCalculationResults results = new SalixLineCalculationResults(calcModeLabel, user, riverInfo, accessSalix.getRange());
73 70
74 final SalixLineCalculator calculator = new SalixLineCalculator(this.context, riverInfoProvider); 71 final SalixLineCalculator calculator = new SalixLineCalculator(this.context, riverInfoProvider);
75 final NavigableMap<Double, List<Double>> rangeScenarios = buildRangeScenarios(accessSalix); 72 final NavigableMap<Double, List<Double>> rangeScenarios = buildRangeScenarios(accessSalix);
76 73
77 calculator.execute(problems, uinfo, rangeScenarios, accessSalix.getScenario(), results); 74 calculator.execute(problems, uinfo, rangeScenarios, accessSalix.getScenario(), buildScenarioLabels(accessSalix), results);
78 75
79 // final Collection<ResultRow> rows = new ArrayList<>(); 76 // final Collection<ResultRow> rows = new ArrayList<>();
80 // SalixLineCalculationNoScenarioResult result = null; // verzweigung etwas ungünstig. möglicherweise auch die 77 // SalixLineCalculationNoScenarioResult result = null; // verzweigung etwas ungünstig. möglicherweise auch die
81 // Abstraktion. ist erstmal nur ne idee 78 // Abstraktion. ist erstmal nur ne idee
82 // final ResultRow row1 = ResultRow.create(). // 79 // final ResultRow row1 = ResultRow.create(). //
150 // } 147 // }
151 // } 148 // }
152 // results.addResult(result, problems); 149 // results.addResult(result, problems);
153 return new CalculationResult(results, problems); 150 return new CalculationResult(results, problems);
154 } 151 }
152
153 // private SalixScenario findScenarioByKm(final double km, final Map<DoubleRange, SalixScenario> rangeScenarioMap) {
154 // final Iterator<DoubleRange> rangeIterator = rangeScenarioMap.keySet().iterator();
155 // while (rangeIterator.hasNext()) {
156 // final DoubleRange range = rangeIterator.next();
157 // if (range.containsDouble(km + 0.0001)) {
158 // return rangeScenarioMap.get(range);
159 // }
160 // }
161 // return null;
162 // }
155 163
156 /** 164 /**
157 * Build a map of delta-Ws by km-range for the selected scenario 165 * Build a map of delta-Ws by km-range for the selected scenario
158 */ 166 */
159 private NavigableMap<Double, List<Double>> buildRangeScenarios(final SalixLineAccess access) { 167 private NavigableMap<Double, List<Double>> buildRangeScenarios(final SalixLineAccess access) {
206 dwsm.add(part.getDwsplValue() / 100.0); 214 dwsm.add(part.getDwsplValue() / 100.0);
207 rangeScenarios.put(Double.valueOf(part.getFromKm().doubleValue() - 0.0001), dwsm); 215 rangeScenarios.put(Double.valueOf(part.getFromKm().doubleValue() - 0.0001), dwsm);
208 } 216 }
209 } 217 }
210 218
211 private SalixScenario findScenarioByKm(final double km, final Map<DoubleRange, SalixScenario> rangeScenarioMap) { 219 /**
212 final Iterator<DoubleRange> rangeIterator = rangeScenarioMap.keySet().iterator(); 220 * Build the list of delta-w labels for the scenario type
213 while (rangeIterator.hasNext()) { 221 */
214 final DoubleRange range = rangeIterator.next(); 222 private String[] buildScenarioLabels(final SalixLineAccess access) {
215 if (range.containsDouble(km + 0.0001)) { 223 final List<String> labels = new ArrayList<>();
216 return rangeScenarioMap.get(range); 224 if (access.getScenario() == ScenarioType.REGIONAL) {
217 } 225 final int[] deltaws = access.getRegionalScenarioIntegers();
226 for (int i = 0; i <= deltaws.length - 1; i++)
227 if (deltaws[i] != 0)
228 labels.add(Integer.toString(deltaws[i]) + " cm");
218 } 229 }
219 return null; 230 return labels.toArray(new String[labels.size()]);
220 } 231 }
221 } 232 }

http://dive4elements.wald.intevation.org