diff 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
line wrap: on
line diff
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixLineCalculation.java	Tue Jul 24 16:55:43 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixLineCalculation.java	Tue Jul 24 18:51:47 2018 +0200
@@ -9,24 +9,18 @@
  */
 package org.dive4elements.river.artifacts.uinfo.salix;
 
-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;
-import org.dive4elements.river.artifacts.common.GeneralResultType;
-import org.dive4elements.river.artifacts.common.ResultRow;
 import org.dive4elements.river.artifacts.model.Calculation;
 import org.dive4elements.river.artifacts.model.CalculationResult;
 import org.dive4elements.river.artifacts.resources.Resources;
+import org.dive4elements.river.artifacts.sinfo.common.RiverInfoProvider;
 import org.dive4elements.river.artifacts.sinfo.util.CalculationUtils;
 import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
 import org.dive4elements.river.artifacts.uinfo.UINFOArtifact;
-import org.dive4elements.river.artifacts.uinfo.commons.UInfoResultType;
 import org.dive4elements.river.model.River;
 
 /**
@@ -65,83 +59,89 @@
         // use_scenario (boolean)
         // ld_from_part; ld_to_part
         // scenario_selection (mögliche Werte:"scenarioType.option1" "scenarioType.option2" "scenarioType.option3"
+        final RiverInfoProvider riverInfoProvider = RiverInfoProvider.forRange(this.context, river, range);
 
         // FIXME: real calculation
 
         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.salix_delta_mw, 2);
-
-        if (!useScenario) {
-
-            rows.add(row1);
-            result = new SalixLineCalculationNoScenarioResult("Ergebnis 1", null, rows);
-        } else {
-
-            if (scenario.equals("scenarioType.option1")) { // REGIONAL
-
-                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")) { // SUPRA-REGIONAL
-
-                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.getUpperFromTo() + 0.0001;// "halboffenes Intervall
+        final SalixLineCalculator calculator = new SalixLineCalculator(this.context, riverInfoProvider);
+        calculator.execute(problems, uinfo, results);
 
-                    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
-                double currentKm = range.getMinimumDouble();
-                final double step = 0.1; // TODO: get from global setting?
-                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 == null -> 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")) { // HISTORICAL
-                row1.putValue(UInfoResultType.salixlinehist, 66).//
-                        putValue(UInfoResultType.salix_line_scenario_dwspl, 88);
-                rows.add(row1);
-                result = new SalixLineCalculationHistoricalResult("Ergebnis 1 historical test", null, rows);
-            }
-        }
-        results.addResult(result, problems);
+        // 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.salix_delta_mw, 2);
+        //
+        // if (!useScenario) {
+        //
+        // rows.add(row1);
+        // result = new SalixLineCalculationNoScenarioResult("Ergebnis 1", null, rows);
+        // } else {
+        //
+        // if (scenario.equals("scenarioType.option1")) { // REGIONAL
+        //
+        // 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")) { // SUPRA-REGIONAL
+        //
+        // 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.getUpperFromTo() + 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
+        // double currentKm = range.getMinimumDouble();
+        // final double step = 0.1; // TODO: get from global setting?
+        // 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 == null -> 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")) { // HISTORICAL
+        // row1.putValue(UInfoResultType.salixlinehist, 66).//
+        // putValue(UInfoResultType.salix_line_scenario_dwspl, 88);
+        // rows.add(row1);
+        // result = new SalixLineCalculationHistoricalResult("Ergebnis 1 historical test", null, rows);
+        // }
+        // }
+        // results.addResult(result, problems);
         return new CalculationResult(results, problems);
     }
 

http://dive4elements.wald.intevation.org