Mercurial > dive4elements > river
comparison artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixLineCalculation.java @ 9295:385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
author | mschaefer |
---|---|
date | Tue, 24 Jul 2018 18:51:47 +0200 |
parents | 600e1ac42049 |
children | 9a9f076d5716 |
comparison
equal
deleted
inserted
replaced
9294:7a8b9331a946 | 9295:385b52ccde23 |
---|---|
7 * and comes with ABSOLUTELY NO WARRANTY! Check out the | 7 * and comes with ABSOLUTELY NO WARRANTY! Check out the |
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; | |
13 import java.util.Collection; | |
14 import java.util.HashMap; | |
15 import java.util.Iterator; | 12 import java.util.Iterator; |
16 import java.util.List; | |
17 import java.util.Map; | 13 import java.util.Map; |
18 | 14 |
19 import org.apache.commons.lang.math.DoubleRange; | 15 import org.apache.commons.lang.math.DoubleRange; |
20 import org.dive4elements.artifacts.CallContext; | 16 import org.dive4elements.artifacts.CallContext; |
21 import org.dive4elements.river.artifacts.common.GeneralResultType; | |
22 import org.dive4elements.river.artifacts.common.ResultRow; | |
23 import org.dive4elements.river.artifacts.model.Calculation; | 17 import org.dive4elements.river.artifacts.model.Calculation; |
24 import org.dive4elements.river.artifacts.model.CalculationResult; | 18 import org.dive4elements.river.artifacts.model.CalculationResult; |
25 import org.dive4elements.river.artifacts.resources.Resources; | 19 import org.dive4elements.river.artifacts.resources.Resources; |
20 import org.dive4elements.river.artifacts.sinfo.common.RiverInfoProvider; | |
26 import org.dive4elements.river.artifacts.sinfo.util.CalculationUtils; | 21 import org.dive4elements.river.artifacts.sinfo.util.CalculationUtils; |
27 import org.dive4elements.river.artifacts.sinfo.util.RiverInfo; | 22 import org.dive4elements.river.artifacts.sinfo.util.RiverInfo; |
28 import org.dive4elements.river.artifacts.uinfo.UINFOArtifact; | 23 import org.dive4elements.river.artifacts.uinfo.UINFOArtifact; |
29 import org.dive4elements.river.artifacts.uinfo.commons.UInfoResultType; | |
30 import org.dive4elements.river.model.River; | 24 import org.dive4elements.river.model.River; |
31 | 25 |
32 /** | 26 /** |
33 * @author Domenico Nardi Tironi | 27 * @author Domenico Nardi Tironi |
34 * | 28 * |
63 // calculation_mode | 57 // calculation_mode |
64 // ld_from , ld_to | 58 // ld_from , ld_to |
65 // use_scenario (boolean) | 59 // use_scenario (boolean) |
66 // ld_from_part; ld_to_part | 60 // ld_from_part; ld_to_part |
67 // scenario_selection (mögliche Werte:"scenarioType.option1" "scenarioType.option2" "scenarioType.option3" | 61 // scenario_selection (mögliche Werte:"scenarioType.option1" "scenarioType.option2" "scenarioType.option3" |
62 final RiverInfoProvider riverInfoProvider = RiverInfoProvider.forRange(this.context, river, range); | |
68 | 63 |
69 // FIXME: real calculation | 64 // FIXME: real calculation |
70 | 65 |
71 final SalixLineCalculationResults results = new SalixLineCalculationResults(calcModeLabel, user, riverInfo, range); | 66 final SalixLineCalculationResults results = new SalixLineCalculationResults(calcModeLabel, user, riverInfo, range); |
72 | 67 |
73 final Collection<ResultRow> rows = new ArrayList<>(); | 68 final SalixLineCalculator calculator = new SalixLineCalculator(this.context, riverInfoProvider); |
74 SalixLineCalculationNoScenarioResult result = null; // verzweigung etwas ungünstig. möglicherweise auch die Abstraktion. ist erstmal nur ne idee | 69 calculator.execute(problems, uinfo, results); |
75 final ResultRow row1 = ResultRow.create(). // | |
76 putValue(GeneralResultType.station, 100).// | |
77 putValue(UInfoResultType.salixline, 28).// | |
78 putValue(UInfoResultType.salix_delta_mw, 2); | |
79 | 70 |
80 if (!useScenario) { | 71 // final Collection<ResultRow> rows = new ArrayList<>(); |
81 | 72 // SalixLineCalculationNoScenarioResult result = null; // verzweigung etwas ungünstig. möglicherweise auch die |
82 rows.add(row1); | 73 // Abstraktion. ist erstmal nur ne idee |
83 result = new SalixLineCalculationNoScenarioResult("Ergebnis 1", null, rows); | 74 // final ResultRow row1 = ResultRow.create(). // |
84 } else { | 75 // putValue(GeneralResultType.station, 100).// |
85 | 76 // putValue(UInfoResultType.salixline, 28).// |
86 if (scenario.equals("scenarioType.option1")) { // REGIONAL | 77 // putValue(UInfoResultType.salix_delta_mw, 2); |
87 | 78 // |
88 final int[] scenarios = accessSalix.getRegionalScenarioIntegers(); | 79 // if (!useScenario) { |
89 final List<SalixScenario> list = new ArrayList<>(); | 80 // |
90 for (final int scen_val : scenarios) { | 81 // rows.add(row1); |
91 list.add(new SalixScenario(scen_val, 666.));// TODO: replace 666 by real calculated value | 82 // result = new SalixLineCalculationNoScenarioResult("Ergebnis 1", null, rows); |
92 } | 83 // } else { |
93 row1.putValue(UInfoResultType.customMultiRowColSalixRegionalValue_Dwspl, list);// | 84 // |
94 rows.add(row1); | 85 // if (scenario.equals("scenarioType.option1")) { // REGIONAL |
95 result = new SalixLineCalculationRegionalResult("Ergebnis 1 regional test", null, rows, scenarios); | 86 // |
96 | 87 // final int[] scenarios = accessSalix.getRegionalScenarioIntegers(); |
97 } else if (scenario.equals("scenarioType.option2")) { // SUPRA-REGIONAL | 88 // final List<SalixScenario> list = new ArrayList<>(); |
98 | 89 // for (final int scen_val : scenarios) { |
99 final String supraRegional = accessSalix.getSupraRegionalString(); | 90 // list.add(new SalixScenario(scen_val, 666.));// TODO: replace 666 by real calculated value |
100 final List<SalixZone> list = SalixZone.parse(supraRegional); | 91 // } |
101 | 92 // row1.putValue(UInfoResultType.customMultiRowColSalixRegionalValue_Dwspl, list);// |
102 final Map<DoubleRange, SalixScenario> rangeScenarioMap = new HashMap<>(); | 93 // rows.add(row1); |
103 // make double range | 94 // result = new SalixLineCalculationRegionalResult("Ergebnis 1 regional test", null, rows, scenarios); |
104 for (int i = 0; i < list.size(); i++) { | 95 // |
105 final SalixZone zone = list.get(i); | 96 // } else if (scenario.equals("scenarioType.option2")) { // SUPRA-REGIONAL |
106 final double upper = i < list.size() - 1 ? (zone.getUpperFromTo() - 0.0001) : zone.getUpperFromTo() + 0.0001;// "halboffenes Intervall | 97 // |
107 | 98 // final String supraRegional = accessSalix.getSupraRegionalString(); |
108 final DoubleRange zonerange = new DoubleRange((double) zone.getLowerFromTo(), upper); | 99 // final List<SalixZone> list = SalixZone.parse(supraRegional); |
109 final double salixValue = 666.;// TODO: calculate the salix value | 100 // |
110 final SalixScenario salixscen = new SalixScenario(zone.getDwsplValue(), salixValue); | 101 // final Map<DoubleRange, SalixScenario> rangeScenarioMap = new HashMap<>(); |
111 | 102 // // make double range |
112 rangeScenarioMap.put(zonerange, salixscen); | 103 // for (int i = 0; i < list.size(); i++) { |
113 } | 104 // final SalixZone zone = list.get(i); |
114 | 105 // final double upper = i < list.size() - 1 ? (zone.getUpperFromTo() - 0.0001) : zone.getUpperFromTo() + 0.0001;// |
115 // make calculation | 106 // "halboffenes Intervall |
116 double currentKm = range.getMinimumDouble(); | 107 // |
117 final double step = 0.1; // TODO: get from global setting? | 108 // final DoubleRange zonerange = new DoubleRange((double) zone.getLowerFromTo(), upper); |
118 while (currentKm < range.getMaximumDouble()) { | 109 // final double salixValue = 666.;// TODO: calculate the salix value |
119 final ResultRow rowSupraRegional = ResultRow.create(). // | 110 // final SalixScenario salixscen = new SalixScenario(zone.getDwsplValue(), salixValue); |
120 putValue(GeneralResultType.station, currentKm).// | 111 // |
121 putValue(UInfoResultType.salixline, 28).// | 112 // rangeScenarioMap.put(zonerange, salixscen); |
122 putValue(UInfoResultType.salix_delta_mw, 2); | 113 // } |
123 | 114 // |
124 final SalixScenario scenarioCurrentKm = findScenarioByKm(currentKm, rangeScenarioMap); | 115 // // make calculation |
125 | 116 // double currentKm = range.getMinimumDouble(); |
126 if (scenarioCurrentKm != null) { // should not happen, scenarioCurrentKm == null -> BUG | 117 // final double step = 0.1; // TODO: get from global setting? |
127 rowSupraRegional.putValue(UInfoResultType.salix_line_scenario, scenarioCurrentKm.getSalixValue()); | 118 // while (currentKm < range.getMaximumDouble()) { |
128 rowSupraRegional.putValue(UInfoResultType.salix_line_scenario_dwspl, scenarioCurrentKm.getDwspl()); | 119 // final ResultRow rowSupraRegional = ResultRow.create(). // |
129 } | 120 // putValue(GeneralResultType.station, currentKm).// |
130 rows.add(rowSupraRegional); | 121 // putValue(UInfoResultType.salixline, 28).// |
131 | 122 // putValue(UInfoResultType.salix_delta_mw, 2); |
132 currentKm = currentKm + step; | 123 // |
133 } | 124 // final SalixScenario scenarioCurrentKm = findScenarioByKm(currentKm, rangeScenarioMap); |
134 | 125 // |
135 result = new SalixLineCalculationSupraRegionalResult("Ergebnis 1 supra regional test", null, rows); | 126 // if (scenarioCurrentKm != null) { // should not happen, scenarioCurrentKm == null -> BUG |
136 | 127 // rowSupraRegional.putValue(UInfoResultType.salix_line_scenario, scenarioCurrentKm.getSalixValue()); |
137 } else if (scenario.equals("scenarioType.option3")) { // HISTORICAL | 128 // rowSupraRegional.putValue(UInfoResultType.salix_line_scenario_dwspl, scenarioCurrentKm.getDwspl()); |
138 row1.putValue(UInfoResultType.salixlinehist, 66).// | 129 // } |
139 putValue(UInfoResultType.salix_line_scenario_dwspl, 88); | 130 // rows.add(rowSupraRegional); |
140 rows.add(row1); | 131 // |
141 result = new SalixLineCalculationHistoricalResult("Ergebnis 1 historical test", null, rows); | 132 // currentKm = currentKm + step; |
142 } | 133 // } |
143 } | 134 // |
144 results.addResult(result, problems); | 135 // result = new SalixLineCalculationSupraRegionalResult("Ergebnis 1 supra regional test", null, rows); |
136 // | |
137 // } else if (scenario.equals("scenarioType.option3")) { // HISTORICAL | |
138 // row1.putValue(UInfoResultType.salixlinehist, 66).// | |
139 // putValue(UInfoResultType.salix_line_scenario_dwspl, 88); | |
140 // rows.add(row1); | |
141 // result = new SalixLineCalculationHistoricalResult("Ergebnis 1 historical test", null, rows); | |
142 // } | |
143 // } | |
144 // results.addResult(result, problems); | |
145 return new CalculationResult(results, problems); | 145 return new CalculationResult(results, problems); |
146 } | 146 } |
147 | 147 |
148 private SalixScenario findScenarioByKm(final double km, final Map<DoubleRange, SalixScenario> rangeScenarioMap) { | 148 private SalixScenario findScenarioByKm(final double km, final Map<DoubleRange, SalixScenario> rangeScenarioMap) { |
149 final Iterator<DoubleRange> rangeIterator = rangeScenarioMap.keySet().iterator(); | 149 final Iterator<DoubleRange> rangeIterator = rangeScenarioMap.keySet().iterator(); |