gernotbelger@8999: /** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde gernotbelger@8999: * Software engineering by gernotbelger@8999: * Björnsen Beratende Ingenieure GmbH gernotbelger@8999: * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt gernotbelger@8999: * gernotbelger@8999: * This file is Free Software under the GNU AGPL (>=v3) gernotbelger@8999: * and comes with ABSOLUTELY NO WARRANTY! Check out the gernotbelger@8999: * documentation coming with Dive4Elements River for details. gernotbelger@8999: */ gernotbelger@8999: package org.dive4elements.river.artifacts.common; gernotbelger@8999: gernotbelger@8999: import java.io.Serializable; gernotbelger@8999: import java.util.ArrayList; gernotbelger@8999: import java.util.Collection; gernotbelger@8999: import java.util.Collections; gernotbelger@8999: import java.util.List; gernotbelger@8999: gernotbelger@8999: import gnu.trove.TDoubleArrayList; gernotbelger@8999: gernotbelger@8999: /** gernotbelger@8999: * @author Gernot Belger gernotbelger@8999: */ gernotbelger@8999: public abstract class AbstractCalculationResult implements Serializable { gernotbelger@8999: gernotbelger@8999: private static final long serialVersionUID = 1L; gernotbelger@8999: gernotbelger@8999: protected final Collection rows; gernotbelger@8999: gernotbelger@8999: private final String label; gernotbelger@8999: gernotbelger@9150: public AbstractCalculationResult(final String label, final Collection rows) { gernotbelger@9150: this.label = label; gernotbelger@8999: this.rows = new ArrayList<>(rows); gernotbelger@8999: } gernotbelger@8999: gernotbelger@8999: public final String getLabel() { gernotbelger@8999: return this.label; gernotbelger@8999: } gernotbelger@8999: gernotbelger@8999: public boolean isEmpty() { gernotbelger@8999: return this.rows.isEmpty(); gernotbelger@8999: } gernotbelger@8999: mschaefer@9202: public Collection getRows() { gernotbelger@8999: return Collections.unmodifiableCollection(this.rows); gernotbelger@8999: } gernotbelger@8999: gernotbelger@9150: public final double[][] getStationPoints(final IResultType type) { // gehört die Methode hier rein? oder in erbende Klassen? gernotbelger@8999: gernotbelger@8999: final TDoubleArrayList xPoints = new TDoubleArrayList(this.rows.size()); gernotbelger@8999: final TDoubleArrayList yPoints = new TDoubleArrayList(this.rows.size()); gernotbelger@8999: gernotbelger@8999: for (final ResultRow row : this.rows) { gernotbelger@8999: gernotbelger@9150: final double station = row.getDoubleValue(GeneralResultType.station); // TODO: move "station" (and others) to common gernotbelger@8999: final double value = row.getDoubleValue(type); gernotbelger@8999: gernotbelger@8999: xPoints.add(station); gernotbelger@8999: yPoints.add(value); gernotbelger@8999: } gernotbelger@8999: gernotbelger@8999: return new double[][] { xPoints.toNativeArray(), yPoints.toNativeArray() }; gernotbelger@8999: } gernotbelger@8999: gernotbelger@8999: protected final List getValues(final IResultType type) { gernotbelger@8999: gernotbelger@8999: final List values = new ArrayList<>(); gernotbelger@8999: gernotbelger@8999: for (final ResultRow row : this.rows) { gernotbelger@8999: @SuppressWarnings("unchecked") gernotbelger@8999: final TYPE value = (TYPE) row.getValue(type); gernotbelger@8999: values.add(value); gernotbelger@8999: } gernotbelger@8999: gernotbelger@8999: return values; gernotbelger@8999: } gernotbelger@8999: }