Mercurial > dive4elements > river
diff artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixLineCalculationRegionalResult.java @ 9316:72b3270e1568
U-Info salix line with regional and supraregional scenario calculation and chart display
author | mschaefer |
---|---|
date | Thu, 26 Jul 2018 17:28:32 +0200 |
parents | 9a9f076d5716 |
children | c36befc9011c |
line wrap: on
line diff
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixLineCalculationRegionalResult.java Thu Jul 26 17:23:49 2018 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixLineCalculationRegionalResult.java Thu Jul 26 17:28:32 2018 +0200 @@ -14,12 +14,14 @@ import java.util.List; import org.dive4elements.river.artifacts.common.ExportContextCSV; +import org.dive4elements.river.artifacts.common.GeneralResultType; import org.dive4elements.river.artifacts.common.IExportContext; import org.dive4elements.river.artifacts.common.ResultRow; import org.dive4elements.river.artifacts.sinfo.util.RiverInfo; -import org.dive4elements.river.artifacts.sinfo.util.WstInfo; import org.dive4elements.river.artifacts.uinfo.commons.UInfoResultType; +import gnu.trove.TDoubleArrayList; + /** * @author Domenico Nardi Tironi */ @@ -27,8 +29,22 @@ private static final long serialVersionUID = 1L; - public SalixLineCalculationRegionalResult(final String label, final WstInfo wst, final Collection<ResultRow> rows) { - super(label, wst, rows); + private final String[] scenarioLabels; + + public SalixLineCalculationRegionalResult(final String label, final String[] scenarioLabels, final Collection<ResultRow> rows) { + super(label, rows); + this.scenarioLabels = scenarioLabels; + } + + 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]; + else + return ""; } @Override @@ -36,9 +52,10 @@ final Collection<String> header = super.writeNoScenarioHeader(exportContextCSV); - header.add(exportContextCSV.msg(SalixScenario.getScenarioValueHeader())); - header.add(exportContextCSV.msg(SalixScenario.getDwsplHeader())); - + for (int i = 1; i <= getScenarioCount(); i++) { + header.add(exportContextCSV.msg(SalixScenario.getScenarioValueHeader())); + header.add(exportContextCSV.msg(SalixScenario.getDwsplHeader())); + } exportContextCSV.writeCSVLine(header.toArray(new String[header.size()])); } @@ -50,12 +67,7 @@ } @Override - protected String[] formatCSVRow(final ExportContextCSV exportContextCSV, final ResultRow row) { - - return formatRow(exportContextCSV, row); - } - - private String[] formatRow(final IExportContext context, final ResultRow row) { + protected String[] formatRow(final IExportContext context, final ResultRow row) { final Collection<String> lines = super.getNoScenarioFormat(row, context); @@ -79,6 +91,31 @@ writeRegionalCommonCSVMeta(exportContextCSV); } + /** + * Gets a longitudinal section of W, Q, or flood duration of one of the waterlevels + */ + 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.customMultiRowColSalixRegionalValue_Dwspl); + if (dataIndex <= scenarios.size() - 1) { + final double value = scenarios.get(dataIndex).getSalixValue(); + xPoints.add(station); + yPoints.add(value); + } + } + + return new double[][] { xPoints.toNativeArray(), yPoints.toNativeArray() }; + } + // TODO: move to SupraRegionalEffectsResult-Class; remove here // private void writeExtendedRegionalEffectsCSVMetadata(final ExportContextCSV exportContextCSV) { // final String main = "uinfo.export.csv.meta.header.salix.regionalextended";