Mercurial > dive4elements > river
diff 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 |
line wrap: on
line diff
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixLineCalculation.java Wed Jul 11 10:19:53 2018 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixLineCalculation.java Wed Jul 11 13:36:18 2018 +0200 @@ -11,6 +11,10 @@ import java.util.ArrayList; import java.util.Collection; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; import org.apache.commons.lang.math.DoubleRange; import org.dive4elements.artifacts.CallContext; @@ -53,6 +57,9 @@ final String selectedScenario = accessSalix.getScenario(); final Double fromPart = accessSalix.getFromPart(); final Double toPart = accessSalix.getToPart(); + + final boolean useSCenario = accessSalix.getUseScenario(); + final String scenario = accessSalix.getScenario(); // calculation_mode // ld_from , ld_to // use_scenario (boolean) @@ -64,26 +71,92 @@ final SalixLineCalculationResults results = new SalixLineCalculationResults(calcModeLabel, user, riverInfo, range); final Collection<ResultRow> rows = new ArrayList<>(); - + SalixLineCalculationNoScenarioResult result = null; // verzweigung etwas ungünstig. möglicherweise auch die Abstraktion. ist erstmal nur ne idee final ResultRow row1 = ResultRow.create(). // putValue(GeneralResultType.station, 100).// putValue(UInfoResultType.salixline, 28).// - putValue(UInfoResultType.salixlinehist, 2).// - putValue(UInfoResultType.salixlinescen, 82); - rows.add(row1); + putValue(UInfoResultType.salix_delta_mw, 2); - final ResultRow row2 = ResultRow.create(). // - putValue(GeneralResultType.station, 200). // - putValue(UInfoResultType.salixline, 3). // - putValue(UInfoResultType.salixlinehist, 2).// - putValue(UInfoResultType.salixlinescen, 822); + if (!useScenario) { - rows.add(row2); + rows.add(row1); + result = new SalixLineCalculationNoScenarioResult("Ergebnis 1", null, rows); + } else { - final SalixLineCalculationResult result = new SalixLineCalculationResult("Ergebnis 1", null, rows); + if (scenario.equals("scenarioType.option1")) { + + final int[] scenarios = accessSalix.getRegionalScenarioIntegers(); + final List<SalixScenario> list = new ArrayList<>(); + for (final int scen_val : scenarios) { + list.add(new SalixScenario(scen_val, 666.));// TODO: replace 666 by real calculated value + } + row1.putValue(UInfoResultType.customMultiRowColSalixRegionalValue_Dwspl, list);// + rows.add(row1); + result = new SalixLineCalculationRegionalResult("Ergebnis 1 regional test", null, rows, scenarios); + } else if (scenario.equals("scenarioType.option2")) { + // SupraRegional + + final String supraRegional = accessSalix.getSupraRegionalString(); + final List<SalixZone> list = SalixZone.parse(supraRegional); + + final Map<DoubleRange, SalixScenario> rangeScenarioMap = new HashMap<>(); + // make double range + for (int i = 0; i < list.size(); i++) { + final SalixZone zone = list.get(i); + final double upper = i < list.size() - 1 ? (zone.getUpperFromTo() - 0.0001) : zone.getUpperFrossssssssssmTo() + 0.0001;// "halboffenes + // Intervall + + final DoubleRange zonerange = new DoubleRange((double) zone.getLowerFromTo(), upper); + final double salixValue = 666.;// TODO: calculate the salix value + final SalixScenario salixscen = new SalixScenario(zone.getDwsplValue(), salixValue); + + rangeScenarioMap.put(zonerange, salixscen); + } + + // make calculation (replace + double currentKm = range.getMinimumDouble(); + final double step = 0.1; + while (currentKm < range.getMaximumDouble()) { + final ResultRow rowSupraRegional = ResultRow.create(). // + putValue(GeneralResultType.station, currentKm).// + putValue(UInfoResultType.salixline, 28).// + putValue(UInfoResultType.salix_delta_mw, 2); + + final SalixScenario scenarioCurrentKm = findScenarioByKm(currentKm, rangeScenarioMap); + + if (scenarioCurrentKm != null) { // should not happen, scenarioCurrentKm == 0 -> BUG + rowSupraRegional.putValue(UInfoResultType.salix_line_scenario, scenarioCurrentKm.getSalixValue()); + rowSupraRegional.putValue(UInfoResultType.salix_line_scenario_dwspl, scenarioCurrentKm.getDwspl()); + } + rows.add(rowSupraRegional); + + currentKm = currentKm + step; + } + + result = new SalixLineCalculationSupraRegionalResult("Ergebnis 1 supra regional test", null, rows); + + } else if (scenario.equals("scenarioType.option3")) { + // historisch + row1.putValue(UInfoResultType.salixlinehist, 2).// + putValue(UInfoResultType.salixlinescen, 82); + } + + } results.addResult(result, problems); return new CalculationResult(results, problems); } + + private SalixScenario findScenarioByKm(final double km, final Map<DoubleRange, SalixScenario> rangeScenarioMap) { + final Iterator<DoubleRange> rangeIterator = rangeScenarioMap.keySet().iterator(); + while (rangeIterator.hasNext()) { + final DoubleRange range = rangeIterator.next(); + if (range.containsDouble(km + 0.0001)) { + return rangeScenarioMap.get(range); + } + } + return null; + } + } \ No newline at end of file