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

http://dive4elements.wald.intevation.org