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();

http://dive4elements.wald.intevation.org