Mercurial > dive4elements > river
diff artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixLineCalculationResult.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 | |
children | 0124d67ce5ab |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixLineCalculationResult.java Wed Aug 01 18:01:11 2018 +0200 @@ -0,0 +1,174 @@ +/** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde + * Software engineering by + * Björnsen Beratende Ingenieure GmbH + * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt + * + * This file is Free Software under the GNU AGPL (>=v3) + * and comes with ABSOLUTELY NO WARRANTY! Check out the + * documentation coming with Dive4Elements River for details. + */ +package org.dive4elements.river.artifacts.uinfo.salix; + +import java.text.NumberFormat; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +import org.dive4elements.river.artifacts.common.AbstractCalculationExportableResult; +import org.dive4elements.river.artifacts.common.ExportContextCSV; +import org.dive4elements.river.artifacts.common.ExportContextPDF; +import org.dive4elements.river.artifacts.common.GeneralResultType; +import org.dive4elements.river.artifacts.common.IExportContext; +import org.dive4elements.river.artifacts.common.MetaAndTableJRDataSource; +import org.dive4elements.river.artifacts.common.ResultRow; +import org.dive4elements.river.artifacts.sinfo.util.RiverInfo; +import org.dive4elements.river.artifacts.uinfo.common.UInfoResultType; + +import gnu.trove.TDoubleArrayList; + +/** + * @author Domenico Nardi Tironi + */ +class SalixLineCalculationResult extends AbstractCalculationExportableResult { + + private static final long serialVersionUID = 1L; + private static final String JASPER_FILE = "/jasper/templates/uinfo.salixline.jrxml"; + + private final String[] scenarioLabels; + + private final String partialRangeString; + + private final String deltaWString; + + public SalixLineCalculationResult(final String label, final Collection<ResultRow> rows) { + this(label, new String[] {}, "", "", rows); + } + + public SalixLineCalculationResult(final String label, final String[] scenarioLabels, final String partialRangeString, final String deltaWString, + final Collection<ResultRow> rows) { + super(label, rows); + this.scenarioLabels = scenarioLabels; + this.partialRangeString = partialRangeString; + this.deltaWString = deltaWString; + } + + public final int getScenarioCount() { + return (this.scenarioLabels != null) ? this.scenarioLabels.length : 0; + } + + public String getScenarioLabel(final int i) { + if ((this.scenarioLabels != null) && (i < this.scenarioLabels.length)) + return this.scenarioLabels[i]; + + return ""; + } + + public String getPartialRangeString() { + return this.partialRangeString; + } + + public String getDeltaWString() { + return this.deltaWString; + } + + @Override + public void writeCSVHeader(final ExportContextCSV exportContextCSV, final RiverInfo river) { + + final Collection<String> header = new ArrayList<>(); + + header.add(exportContextCSV.formatCsvHeader(GeneralResultType.station)); + header.add(exportContextCSV.formatCsvHeader(UInfoResultType.salixline)); + header.add(exportContextCSV.formatCsvHeader(UInfoResultType.salix_mw_mnw)); + + for (int i = 1; i <= getScenarioCount(); i++) { + header.add(exportContextCSV.msg(SalixScenario.getDeltaWHeader())); + header.add(exportContextCSV.msg(SalixScenario.getScenarioValueHeader())); + } + exportContextCSV.writeCSVLine(header.toArray(new String[header.size()])); + } + + @Override + protected String[] formatCSVRow(final ExportContextCSV exportContextCSV, final ResultRow row) { + return formatRow(exportContextCSV, row); + } + + @Override + protected String[] formatPDFRow(final ExportContextPDF exportContextPDF, final ResultRow row) { + return formatRow(exportContextPDF, row); + } + + @Override + protected String getJasperFile() { + return JASPER_FILE; + } + + @Override + protected void addJRTableHeader(final ExportContextPDF exportContextPDF, final MetaAndTableJRDataSource source) { + + /* additional column headings */ + exportContextPDF.addJRMetadata(source, "station_header", GeneralResultType.station); + exportContextPDF.addJRMetadata(source, "salix_line", UInfoResultType.salixline); + exportContextPDF.addJRMetadata(source, "salix_delta_mw", UInfoResultType.salix_mw_mnw); + + for (int i = 1; i <= this.getScenarioCount(); i++) { + // TODO Spaltenueberschriften der Scenarios + } + } + + private String[] formatRow(final IExportContext context, final ResultRow row) { + + final Collection<String> lines = new ArrayList<>(); + lines.add(context.formatRowValue(row, GeneralResultType.station)); + lines.add(context.formatRowValue(row, UInfoResultType.salixline)); + lines.add(context.formatRowValue(row, UInfoResultType.salix_mw_mnw)); + + final NumberFormat formatter = ((ExportContextCSV) context).getSalixScenFormatter(); + final List<SalixScenario> scenarios = (List<SalixScenario>) row.getValue(UInfoResultType.customMultiRowColSalixScenarios); + for (int i = 1; i <= this.getScenarioCount(); i++) { + if (i > scenarios.size()) + break; + if (scenarios.get(i - 1) != null) { + lines.add(scenarios.get(i - 1).getDeltaWFormatted()); + lines.add(scenarios.get(i - 1).getSalixValueFormatted(formatter)); + } + else { + lines.add(""); + lines.add(""); + } + } + return lines.toArray(new String[lines.size()]); + } + + @Override + protected void writeCSVResultMetadata(final ExportContextCSV exportContextCSV) { + // do nothing. subclass may override + } + + /** + * Gets a longitudinal section of the salix value of a scenario + */ + public final double[][] getScenarioPoints(final int dataIndex) { + + final Collection<ResultRow> rows = getRows(); + + final TDoubleArrayList xPoints = new TDoubleArrayList(rows.size()); + final TDoubleArrayList yPoints = new TDoubleArrayList(rows.size()); + + for (final ResultRow row : rows) { + + final double station = row.getDoubleValue(GeneralResultType.station); + + final List<SalixScenario> scenarios = (List<SalixScenario>) row.getValue(UInfoResultType.customMultiRowColSalixScenarios); + if (dataIndex <= scenarios.size() - 1) { + final SalixScenario salixScenario = scenarios.get(dataIndex); + if (salixScenario != null) { + final double value = salixScenario.getSalixValue(); + xPoints.add(station); + yPoints.add(value); + } + } + } + + return new double[][] { xPoints.toNativeArray(), yPoints.toNativeArray() }; + } +} \ No newline at end of file