Mercurial > dive4elements > river
comparison artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixLineCalculation.java @ 9361:2aec052d4088
Refactoring on SalixLineCalculationResult etc., calculation using MQ etc., scenario (regional+supra) csv columns and meta data added
author | mschaefer |
---|---|
date | Wed, 01 Aug 2018 18:01:11 +0200 |
parents | a978b601a034 |
children | 2da486c7c05f |
comparison
equal
deleted
inserted
replaced
9360:ddcd52d239cd | 9361:2aec052d4088 |
---|---|
15 import java.util.TreeMap; | 15 import java.util.TreeMap; |
16 | 16 |
17 import org.apache.commons.lang.math.DoubleRange; | 17 import org.apache.commons.lang.math.DoubleRange; |
18 import org.dive4elements.artifacts.CallContext; | 18 import org.dive4elements.artifacts.CallContext; |
19 import org.dive4elements.river.artifacts.access.RangeAccess; | 19 import org.dive4elements.river.artifacts.access.RangeAccess; |
20 import org.dive4elements.river.artifacts.common.GeneralResultType; | |
20 import org.dive4elements.river.artifacts.model.Calculation; | 21 import org.dive4elements.river.artifacts.model.Calculation; |
21 import org.dive4elements.river.artifacts.model.CalculationResult; | 22 import org.dive4elements.river.artifacts.model.CalculationResult; |
22 import org.dive4elements.river.artifacts.resources.Resources; | 23 import org.dive4elements.river.artifacts.resources.Resources; |
23 import org.dive4elements.river.artifacts.sinfo.common.RiverInfoProvider; | 24 import org.dive4elements.river.artifacts.sinfo.common.RiverInfoProvider; |
24 import org.dive4elements.river.artifacts.sinfo.util.CalculationUtils; | 25 import org.dive4elements.river.artifacts.sinfo.util.CalculationUtils; |
59 final SalixLineCalculationResults results = new SalixLineCalculationResults(calcModeLabel, user, riverInfo, range); | 60 final SalixLineCalculationResults results = new SalixLineCalculationResults(calcModeLabel, user, riverInfo, range); |
60 | 61 |
61 final SalixLineCalculator calculator = new SalixLineCalculator(riverInfoProvider); | 62 final SalixLineCalculator calculator = new SalixLineCalculator(riverInfoProvider); |
62 final NavigableMap<Double, List<Double>> rangeScenarios = buildRangeScenarios(accessSalix); | 63 final NavigableMap<Double, List<Double>> rangeScenarios = buildRangeScenarios(accessSalix); |
63 | 64 |
64 calculator.execute(problems, uinfo, rangeScenarios, scenarioType, buildScenarioLabels(accessSalix), results); | 65 calculator.execute(problems, uinfo, rangeScenarios, scenarioType, buildScenarioLabels(accessSalix), buildPartialRangeString(accessSalix), |
65 | 66 buildAdditionalString(accessSalix), results); |
66 // final Collection<ResultRow> rows = new ArrayList<>(); | 67 |
67 // SalixLineCalculationNoScenarioResult result = null; // verzweigung etwas ungünstig. möglicherweise auch die | |
68 // Abstraktion. ist erstmal nur ne idee | |
69 // final ResultRow row1 = ResultRow.create(). // | |
70 // putValue(BunduResultType.station, 100).// | |
71 // putValue(UInfoResultType.salixline, 28).// | |
72 // putValue(UInfoResultType.salix_delta_mw, 2); | |
73 // | |
74 // if (!useScenario) { | |
75 // | |
76 // rows.add(row1); | |
77 // result = new SalixLineCalculationNoScenarioResult("Ergebnis 1", null, rows); | |
78 // } else { | |
79 // | |
80 // if (scenario.equals("scenarioType.option1")) { // REGIONAL | |
81 // | |
82 // final int[] scenarios = accessSalix.getRegionalScenarioIntegers(); | |
83 // final List<SalixScenario> list = new ArrayList<>(); | |
84 // for (final int scen_val : scenarios) { | |
85 // list.add(new SalixScenario(scen_val, 666.));// TODO: replace 666 by real calculated value | |
86 // } | |
87 // row1.putValue(UInfoResultType.customMultiRowColSalixRegionalValue_Dwspl, list);// | |
88 // rows.add(row1); | |
89 // result = new SalixLineCalculationRegionalResult("Ergebnis 1 regional test", null, rows, scenarios); | |
90 // | |
91 // } else if (scenario.equals("scenarioType.option2")) { // SUPRA-REGIONAL | |
92 // | |
93 // final String supraRegional = accessSalix.getSupraRegionalString(); | |
94 // final List<SalixZone> list = SalixZone.parse(supraRegional); | |
95 // | |
96 // final Map<DoubleRange, SalixScenario> rangeScenarioMap = new HashMap<>(); | |
97 // // make double range | |
98 // for (int i = 0; i < list.size(); i++) { | |
99 // final SalixZone zone = list.get(i); | |
100 // final double upper = i < list.size() - 1 ? (zone.getUpperFromTo() - 0.0001) : zone.getUpperFromTo() + 0.0001;// | |
101 // "halboffenes Intervall | |
102 // | |
103 // final DoubleRange zonerange = new DoubleRange((double) zone.getLowerFromTo(), upper); | |
104 // final double salixValue = 666.;// TODO: calculate the salix value | |
105 // final SalixScenario salixscen = new SalixScenario(zone.getDwsplValue(), salixValue); | |
106 // | |
107 // rangeScenarioMap.put(zonerange, salixscen); | |
108 // } | |
109 // | |
110 // // make calculation | |
111 // double currentKm = range.getMinimumDouble(); | |
112 // final double step = 0.1; // TODO: get from global setting? | |
113 // while (currentKm < range.getMaximumDouble()) { | |
114 // final ResultRow rowSupraRegional = ResultRow.create(). // | |
115 // putValue(BunduResultType.station, currentKm).// | |
116 // putValue(UInfoResultType.salixline, 28).// | |
117 // putValue(UInfoResultType.salix_delta_mw, 2); | |
118 // | |
119 // final SalixScenario scenarioCurrentKm = findScenarioByKm(currentKm, rangeScenarioMap); | |
120 // | |
121 // if (scenarioCurrentKm != null) { // should not happen, scenarioCurrentKm == null -> BUG | |
122 // rowSupraRegional.putValue(UInfoResultType.salix_line_scenario, scenarioCurrentKm.getSalixValue()); | |
123 // rowSupraRegional.putValue(UInfoResultType.salix_line_scenario_dwspl, scenarioCurrentKm.getDwspl()); | |
124 // } | |
125 // rows.add(rowSupraRegional); | |
126 // | |
127 // currentKm = currentKm + step; | |
128 // } | |
129 // | |
130 // result = new SalixLineCalculationSupraRegionalResult("Ergebnis 1 supra regional test", null, rows); | |
131 // | |
132 // } else if (scenario.equals("scenarioType.option3")) { // HISTORICAL | |
133 // row1.putValue(UInfoResultType.salixlinehist, 66).// | |
134 // putValue(UInfoResultType.salix_line_scenario_dwspl, 88); | |
135 // rows.add(row1); | |
136 // result = new SalixLineCalculationHistoricalResult("Ergebnis 1 historical test", null, rows); | |
137 // } | |
138 // } | |
139 // results.addResult(result, problems); | |
140 return new CalculationResult(results, problems); | 68 return new CalculationResult(results, problems); |
141 } | 69 } |
142 | 70 |
143 /** | 71 /** |
144 * Build a map of delta-Ws by km-range for the selected scenario | 72 * Build a map of delta-Ws by from-km for the selected scenario |
145 */ | 73 */ |
146 private NavigableMap<Double, List<Double>> buildRangeScenarios(final SalixLineAccess access) { | 74 private NavigableMap<Double, List<Double>> buildRangeScenarios(final SalixLineAccess access) { |
147 final NavigableMap<Double, List<Double>> rangeScenarios = new TreeMap<>(); | 75 final NavigableMap<Double, List<Double>> rangeScenarios = new TreeMap<>(); |
148 if (access.getScenario() == ScenarioType.REGIONAL) | 76 if (access.getScenario() == ScenarioType.REGIONAL) |
149 fillRangeScenarios(rangeScenarios, access, access.getFromPart().doubleValue(), access.getToPart().doubleValue(), | 77 fillRangeScenarios(rangeScenarios, access, access.getFromPart().doubleValue(), access.getToPart().doubleValue(), |
205 final int[] deltaws = access.getRegionalScenarioIntegers(); | 133 final int[] deltaws = access.getRegionalScenarioIntegers(); |
206 for (int i = 0; i <= deltaws.length - 1; i++) | 134 for (int i = 0; i <= deltaws.length - 1; i++) |
207 if (deltaws[i] != 0) | 135 if (deltaws[i] != 0) |
208 labels.add(Integer.toString(deltaws[i]) + " cm"); | 136 labels.add(Integer.toString(deltaws[i]) + " cm"); |
209 } | 137 } |
138 else if (access.getScenario() == ScenarioType.SUPRAREGIONAL) | |
139 labels.add(Resources.getMsg(this.context.getMeta(), "uinfo_salix_scenario_supraregional")); | |
140 else if (access.getScenario() == ScenarioType.HISTORICAL) | |
141 labels.add(Resources.getMsg(this.context.getMeta(), "uinfo_salix_scenario_historical")); | |
210 return labels.toArray(new String[labels.size()]); | 142 return labels.toArray(new String[labels.size()]); |
211 } | 143 } |
144 | |
145 /** | |
146 * Build the km range string for the scenario type | |
147 */ | |
148 private String buildPartialRangeString(final SalixLineAccess access) { | |
149 if ((access.getScenario() == ScenarioType.REGIONAL) || (access.getScenario() == ScenarioType.HISTORICAL)) { | |
150 return String.format("%s - %s", GeneralResultType.station.exportValue(this.context, access.getFromPart().doubleValue()), | |
151 GeneralResultType.station.exportValue(this.context, access.getToPart().doubleValue())); | |
152 } | |
153 if (access.getScenario() == ScenarioType.SUPRAREGIONAL) { | |
154 String ranges = ""; | |
155 String sep = ""; | |
156 final List<SalixZone> parts = SalixZone.parse(access.getSupraRegionalString()); | |
157 for (final SalixZone part : parts) { | |
158 if (part.getDwsplValue() != 0) { | |
159 ranges = ranges + sep + String.format("%s - %s", GeneralResultType.station.exportValue(this.context, part.getFromKm().doubleValue()), | |
160 GeneralResultType.station.exportValue(this.context, part.getToKm().doubleValue())); | |
161 sep = ", "; | |
162 } | |
163 } | |
164 return ranges; | |
165 } | |
166 return ""; | |
167 } | |
168 | |
169 /** | |
170 * Build the delta w or time string for the scenario type | |
171 */ | |
172 private String buildAdditionalString(final SalixLineAccess access) { | |
173 if (access.getScenario() == ScenarioType.REGIONAL) { | |
174 String deltas = ""; | |
175 String sep = ""; | |
176 for (final int d : access.getRegionalScenarioIntegers()) { | |
177 deltas = deltas + sep + Integer.toString(d); | |
178 sep = ", "; | |
179 } | |
180 return deltas; | |
181 } | |
182 if (access.getScenario() == ScenarioType.HISTORICAL) { | |
183 if (access.getYear() != null) | |
184 return access.getYear().toString(); | |
185 else | |
186 return access.getEpoch().toString(); | |
187 } | |
188 if (access.getScenario() == ScenarioType.SUPRAREGIONAL) { | |
189 String deltas = ""; | |
190 String sep = ""; | |
191 final List<SalixZone> parts = SalixZone.parse(access.getSupraRegionalString()); | |
192 for (final SalixZone part : parts) { | |
193 if (part.getDwsplValue() != 0) { | |
194 deltas = deltas + sep + Integer.toString(part.getDwsplValue()); | |
195 sep = ", "; | |
196 } | |
197 } | |
198 return deltas; | |
199 } | |
200 return ""; | |
201 } | |
212 } | 202 } |