diff artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixLineCalculation.java @ 9361:2aec052d4088

Refactoring on SalixLineCalculationResult etc., calculation using MQ etc., scenario (regional+supra) csv columns and meta data added
author mschaefer
date Wed, 01 Aug 2018 18:01:11 +0200
parents a978b601a034
children 2da486c7c05f
line wrap: on
line diff
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixLineCalculation.java	Wed Aug 01 17:13:52 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixLineCalculation.java	Wed Aug 01 18:01:11 2018 +0200
@@ -17,6 +17,7 @@
 import org.apache.commons.lang.math.DoubleRange;
 import org.dive4elements.artifacts.CallContext;
 import org.dive4elements.river.artifacts.access.RangeAccess;
+import org.dive4elements.river.artifacts.common.GeneralResultType;
 import org.dive4elements.river.artifacts.model.Calculation;
 import org.dive4elements.river.artifacts.model.CalculationResult;
 import org.dive4elements.river.artifacts.resources.Resources;
@@ -61,87 +62,14 @@
         final SalixLineCalculator calculator = new SalixLineCalculator(riverInfoProvider);
         final NavigableMap<Double, List<Double>> rangeScenarios = buildRangeScenarios(accessSalix);
 
-        calculator.execute(problems, uinfo, rangeScenarios, scenarioType, buildScenarioLabels(accessSalix), results);
+        calculator.execute(problems, uinfo, rangeScenarios, scenarioType, buildScenarioLabels(accessSalix), buildPartialRangeString(accessSalix),
+                buildAdditionalString(accessSalix), results);
 
-        // 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(BunduResultType.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(BunduResultType.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);
     }
 
     /**
-     * Build a map of delta-Ws by km-range for the selected scenario
+     * Build a map of delta-Ws by from-km for the selected scenario
      */
     private NavigableMap<Double, List<Double>> buildRangeScenarios(final SalixLineAccess access) {
         final NavigableMap<Double, List<Double>> rangeScenarios = new TreeMap<>();
@@ -207,6 +135,68 @@
                 if (deltaws[i] != 0)
                     labels.add(Integer.toString(deltaws[i]) + " cm");
         }
+        else if (access.getScenario() == ScenarioType.SUPRAREGIONAL)
+            labels.add(Resources.getMsg(this.context.getMeta(), "uinfo_salix_scenario_supraregional"));
+        else if (access.getScenario() == ScenarioType.HISTORICAL)
+            labels.add(Resources.getMsg(this.context.getMeta(), "uinfo_salix_scenario_historical"));
         return labels.toArray(new String[labels.size()]);
     }
+
+    /**
+     * Build the km range string for the scenario type
+     */
+    private String buildPartialRangeString(final SalixLineAccess access) {
+        if ((access.getScenario() == ScenarioType.REGIONAL) || (access.getScenario() == ScenarioType.HISTORICAL)) {
+            return String.format("%s - %s", GeneralResultType.station.exportValue(this.context, access.getFromPart().doubleValue()),
+                    GeneralResultType.station.exportValue(this.context, access.getToPart().doubleValue()));
+        }
+        if (access.getScenario() == ScenarioType.SUPRAREGIONAL) {
+            String ranges = "";
+            String sep = "";
+            final List<SalixZone> parts = SalixZone.parse(access.getSupraRegionalString());
+            for (final SalixZone part : parts) {
+                if (part.getDwsplValue() != 0) {
+                    ranges = ranges + sep + String.format("%s - %s", GeneralResultType.station.exportValue(this.context, part.getFromKm().doubleValue()),
+                            GeneralResultType.station.exportValue(this.context, part.getToKm().doubleValue()));
+                    sep = ", ";
+                }
+            }
+            return ranges;
+        }
+        return "";
+    }
+
+    /**
+     * Build the delta w or time string for the scenario type
+     */
+    private String buildAdditionalString(final SalixLineAccess access) {
+        if (access.getScenario() == ScenarioType.REGIONAL) {
+            String deltas = "";
+            String sep = "";
+            for (final int d : access.getRegionalScenarioIntegers()) {
+                deltas = deltas + sep + Integer.toString(d);
+                sep = ", ";
+            }
+            return deltas;
+        }
+        if (access.getScenario() == ScenarioType.HISTORICAL) {
+            if (access.getYear() != null)
+                return access.getYear().toString();
+            else
+                return access.getEpoch().toString();
+        }
+        if (access.getScenario() == ScenarioType.SUPRAREGIONAL) {
+            String deltas = "";
+            String sep = "";
+            final List<SalixZone> parts = SalixZone.parse(access.getSupraRegionalString());
+            for (final SalixZone part : parts) {
+                if (part.getDwsplValue() != 0) {
+                    deltas = deltas + sep + Integer.toString(part.getDwsplValue());
+                    sep = ", ";
+                }
+            }
+            return deltas;
+        }
+        return "";
+    }
 }
\ No newline at end of file

http://dive4elements.wald.intevation.org