Mercurial > dive4elements > river
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