Mercurial > dive4elements > river
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 } |