gernotbelger@9415: /** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde gernotbelger@9415: * Software engineering by gernotbelger@9415: * Björnsen Beratende Ingenieure GmbH gernotbelger@9415: * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt gernotbelger@9415: * gernotbelger@9415: * This file is Free Software under the GNU AGPL (>=v3) gernotbelger@9415: * and comes with ABSOLUTELY NO WARRANTY! Check out the gernotbelger@9415: * documentation coming with Dive4Elements River for details. gernotbelger@9415: */ gernotbelger@9415: package org.dive4elements.river.artifacts.model.fixings; gernotbelger@9415: gernotbelger@9415: import java.io.Serializable; gernotbelger@9415: import java.util.ArrayList; gernotbelger@9415: import java.util.Comparator; gernotbelger@9415: import java.util.List; gernotbelger@9415: gernotbelger@9415: import org.dive4elements.river.artifacts.model.GaugeFinder; gernotbelger@9415: import org.dive4elements.river.artifacts.model.Range; gernotbelger@9415: import org.dive4elements.river.artifacts.model.fixings.FixingsOverview.FixColumn; gernotbelger@9415: gernotbelger@9415: public class Fixing implements Serializable { gernotbelger@9415: gernotbelger@9415: private static final long serialVersionUID = 1L; gernotbelger@9415: gernotbelger@9415: public static final Comparator DATE_CMP = new Comparator() { gernotbelger@9415: @Override gernotbelger@9415: public int compare(final FixingColumn a, final FixingColumn b) { gernotbelger@9415: return a.getStartTime().compareTo(b.getStartTime()); gernotbelger@9415: } gernotbelger@9415: }; gernotbelger@9415: gernotbelger@9415: private int wstId; gernotbelger@9415: gernotbelger@9415: private String description; gernotbelger@9415: gernotbelger@9415: private List columns; gernotbelger@9415: gernotbelger@9415: public Fixing() { gernotbelger@9415: } gernotbelger@9415: gernotbelger@9415: public int getId() { gernotbelger@9415: return this.wstId; gernotbelger@9415: } gernotbelger@9415: gernotbelger@9415: public String getDescription() { gernotbelger@9415: return this.description; gernotbelger@9415: } gernotbelger@9415: gernotbelger@9415: public Fixing(final int wstId, final String description) { gernotbelger@9415: this.wstId = wstId; gernotbelger@9415: this.description = description; gernotbelger@9415: this.columns = new ArrayList<>(); gernotbelger@9415: } gernotbelger@9415: gernotbelger@9415: public void allColumnIds(final List cIds) { gernotbelger@9415: for (final FixingColumn column : this.columns) gernotbelger@9415: cIds.add(column.getId()); gernotbelger@9415: } gernotbelger@9415: gernotbelger@9415: public void loadColumns(final FixColumnLoader loader) { gernotbelger@9415: final List fcs = loader.get(this.wstId); gernotbelger@9415: if (fcs == null) { gernotbelger@9415: FixingsOverview.log.warn("No columns for wst " + this.wstId); gernotbelger@9415: return; gernotbelger@9415: } gernotbelger@9415: for (final FixColumn fc : fcs) { gernotbelger@9415: this.columns.add(new FixingColumn(this, fc.columnId, fc.startTime, fc.name)); gernotbelger@9415: } gernotbelger@9415: } gernotbelger@9415: gernotbelger@9415: public void loadColumnsKmRange(final KMRangeLoader loader) { gernotbelger@9415: for (final FixingColumn column : this.columns) { gernotbelger@9415: column.loadKmRange(loader); gernotbelger@9415: } gernotbelger@9415: } gernotbelger@9415: gernotbelger@9415: public void adjustExtent(final Range extent) { gernotbelger@9415: for (final FixingColumn column : this.columns) { gernotbelger@9415: extent.extend(column); gernotbelger@9415: } gernotbelger@9415: } gernotbelger@9415: gernotbelger@9415: public void loadColumnsQRanges(final ColumnQRangeLoader loader, final GaugeFinder gaugeFinder) { gernotbelger@9415: for (final FixingColumn column : this.columns) { gernotbelger@9415: column.loadQRanges(loader, gaugeFinder); gernotbelger@9415: } gernotbelger@9415: } gernotbelger@9415: gernotbelger@9415: /** gernotbelger@9415: * @param allColumns[out] gernotbelger@9415: * Columns will be put here. gernotbelger@9415: * @param range gernotbelger@9415: * can be null. gernotbelger@9415: * @param filter gernotbelger@9415: * filter to apply. gernotbelger@9415: */ gernotbelger@9415: public void addAllColumns(final List allColumns, final Range range, final FixingColumnFilter filter) { gernotbelger@9415: for (final FixingColumn column : this.columns) { gernotbelger@9415: if ((range == null || column.hasSectorsInRange(range)) && (filter == null || filter.accept(column))) { gernotbelger@9415: allColumns.add(column); gernotbelger@9415: } gernotbelger@9415: } gernotbelger@9415: } gernotbelger@9415: }