comparison artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixLineCalculation.java @ 9243:da0bdbcd6f09

salix.supraRegional+Regional results
author gernotbelger
date Wed, 11 Jul 2018 13:36:18 +0200
parents 5a0e8d76582e
children b9505aa78cdd
comparison
equal deleted inserted replaced
9242:2ea7b61797d3 9243:da0bdbcd6f09
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.Collection; 13 import java.util.Collection;
14 import java.util.HashMap;
15 import java.util.Iterator;
16 import java.util.List;
17 import java.util.Map;
14 18
15 import org.apache.commons.lang.math.DoubleRange; 19 import org.apache.commons.lang.math.DoubleRange;
16 import org.dive4elements.artifacts.CallContext; 20 import org.dive4elements.artifacts.CallContext;
17 import org.dive4elements.river.artifacts.common.GeneralResultType; 21 import org.dive4elements.river.artifacts.common.GeneralResultType;
18 import org.dive4elements.river.artifacts.common.ResultRow; 22 import org.dive4elements.river.artifacts.common.ResultRow;
51 final DoubleRange range = accessSalix.getRange(); 55 final DoubleRange range = accessSalix.getRange();
52 final boolean useScenario = accessSalix.getUseScenario(); 56 final boolean useScenario = accessSalix.getUseScenario();
53 final String selectedScenario = accessSalix.getScenario(); 57 final String selectedScenario = accessSalix.getScenario();
54 final Double fromPart = accessSalix.getFromPart(); 58 final Double fromPart = accessSalix.getFromPart();
55 final Double toPart = accessSalix.getToPart(); 59 final Double toPart = accessSalix.getToPart();
60
61 final boolean useSCenario = accessSalix.getUseScenario();
62 final String scenario = accessSalix.getScenario();
56 // calculation_mode 63 // calculation_mode
57 // ld_from , ld_to 64 // ld_from , ld_to
58 // use_scenario (boolean) 65 // use_scenario (boolean)
59 // ld_from_part; ld_to_part 66 // ld_from_part; ld_to_part
60 // scenario_selection (mögliche Werte:"scenarioType.option1" "scenarioType.option2" "scenarioType.option3" 67 // scenario_selection (mögliche Werte:"scenarioType.option1" "scenarioType.option2" "scenarioType.option3"
62 // FIXME: real calculation 69 // FIXME: real calculation
63 70
64 final SalixLineCalculationResults results = new SalixLineCalculationResults(calcModeLabel, user, riverInfo, range); 71 final SalixLineCalculationResults results = new SalixLineCalculationResults(calcModeLabel, user, riverInfo, range);
65 72
66 final Collection<ResultRow> rows = new ArrayList<>(); 73 final Collection<ResultRow> rows = new ArrayList<>();
67 74 SalixLineCalculationNoScenarioResult result = null; // verzweigung etwas ungünstig. möglicherweise auch die Abstraktion. ist erstmal nur ne idee
68 final ResultRow row1 = ResultRow.create(). // 75 final ResultRow row1 = ResultRow.create(). //
69 putValue(GeneralResultType.station, 100).// 76 putValue(GeneralResultType.station, 100).//
70 putValue(UInfoResultType.salixline, 28).// 77 putValue(UInfoResultType.salixline, 28).//
71 putValue(UInfoResultType.salixlinehist, 2).// 78 putValue(UInfoResultType.salix_delta_mw, 2);
72 putValue(UInfoResultType.salixlinescen, 82);
73 rows.add(row1);
74 79
75 final ResultRow row2 = ResultRow.create(). // 80 if (!useScenario) {
76 putValue(GeneralResultType.station, 200). //
77 putValue(UInfoResultType.salixline, 3). //
78 putValue(UInfoResultType.salixlinehist, 2).//
79 putValue(UInfoResultType.salixlinescen, 822);
80 81
81 rows.add(row2); 82 rows.add(row1);
83 result = new SalixLineCalculationNoScenarioResult("Ergebnis 1", null, rows);
84 } else {
82 85
83 final SalixLineCalculationResult result = new SalixLineCalculationResult("Ergebnis 1", null, rows); 86 if (scenario.equals("scenarioType.option1")) {
87
88 final int[] scenarios = accessSalix.getRegionalScenarioIntegers();
89 final List<SalixScenario> list = new ArrayList<>();
90 for (final int scen_val : scenarios) {
91 list.add(new SalixScenario(scen_val, 666.));// TODO: replace 666 by real calculated value
92 }
93 row1.putValue(UInfoResultType.customMultiRowColSalixRegionalValue_Dwspl, list);//
94 rows.add(row1);
95 result = new SalixLineCalculationRegionalResult("Ergebnis 1 regional test", null, rows, scenarios);
96 } else if (scenario.equals("scenarioType.option2")) {
97 // SupraRegional
98
99 final String supraRegional = accessSalix.getSupraRegionalString();
100 final List<SalixZone> list = SalixZone.parse(supraRegional);
101
102 final Map<DoubleRange, SalixScenario> rangeScenarioMap = new HashMap<>();
103 // make double range
104 for (int i = 0; i < list.size(); i++) {
105 final SalixZone zone = list.get(i);
106 final double upper = i < list.size() - 1 ? (zone.getUpperFromTo() - 0.0001) : zone.getUpperFrossssssssssmTo() + 0.0001;// "halboffenes
107 // Intervall
108
109 final DoubleRange zonerange = new DoubleRange((double) zone.getLowerFromTo(), upper);
110 final double salixValue = 666.;// TODO: calculate the salix value
111 final SalixScenario salixscen = new SalixScenario(zone.getDwsplValue(), salixValue);
112
113 rangeScenarioMap.put(zonerange, salixscen);
114 }
115
116 // make calculation (replace
117 double currentKm = range.getMinimumDouble();
118 final double step = 0.1;
119 while (currentKm < range.getMaximumDouble()) {
120 final ResultRow rowSupraRegional = ResultRow.create(). //
121 putValue(GeneralResultType.station, currentKm).//
122 putValue(UInfoResultType.salixline, 28).//
123 putValue(UInfoResultType.salix_delta_mw, 2);
124
125 final SalixScenario scenarioCurrentKm = findScenarioByKm(currentKm, rangeScenarioMap);
126
127 if (scenarioCurrentKm != null) { // should not happen, scenarioCurrentKm == 0 -> BUG
128 rowSupraRegional.putValue(UInfoResultType.salix_line_scenario, scenarioCurrentKm.getSalixValue());
129 rowSupraRegional.putValue(UInfoResultType.salix_line_scenario_dwspl, scenarioCurrentKm.getDwspl());
130 }
131 rows.add(rowSupraRegional);
132
133 currentKm = currentKm + step;
134 }
135
136 result = new SalixLineCalculationSupraRegionalResult("Ergebnis 1 supra regional test", null, rows);
137
138 } else if (scenario.equals("scenarioType.option3")) {
139 // historisch
140 row1.putValue(UInfoResultType.salixlinehist, 2).//
141 putValue(UInfoResultType.salixlinescen, 82);
142 }
143
144 }
84 145
85 results.addResult(result, problems); 146 results.addResult(result, problems);
86 147
87 return new CalculationResult(results, problems); 148 return new CalculationResult(results, problems);
88 } 149 }
150
151 private SalixScenario findScenarioByKm(final double km, final Map<DoubleRange, SalixScenario> rangeScenarioMap) {
152 final Iterator<DoubleRange> rangeIterator = rangeScenarioMap.keySet().iterator();
153 while (rangeIterator.hasNext()) {
154 final DoubleRange range = rangeIterator.next();
155 if (range.containsDouble(km + 0.0001)) {
156 return rangeScenarioMap.get(range);
157 }
158 }
159 return null;
160 }
161
89 } 162 }

http://dive4elements.wald.intevation.org