view artifacts/src/main/java/org/dive4elements/river/artifacts/model/fixings/Fixing.java @ 9646:0380717105ba

Implemented alternative fitting strategy for Log-Linear function.
author Gernot Belger <g.belger@bjoernsen.de>
date Mon, 02 Dec 2019 17:56:15 +0100
parents 9744ce3c3853
children
line wrap: on
line source
/** 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.model.fixings;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;

import org.dive4elements.river.artifacts.model.GaugeFinder;
import org.dive4elements.river.artifacts.model.Range;
import org.dive4elements.river.artifacts.model.fixings.FixingsOverview.FixColumn;

public class Fixing implements Serializable {

    private static final long serialVersionUID = 1L;

    public static final Comparator<FixingColumn> DATE_CMP = new Comparator<FixingColumn>() {
        @Override
        public int compare(final FixingColumn a, final FixingColumn b) {
            return a.getStartTime().compareTo(b.getStartTime());
        }
    };

    private int wstId;

    private String description;

    private List<FixingColumn> columns;

    public Fixing() {
    }

    public int getId() {
        return this.wstId;
    }

    public String getDescription() {
        return this.description;
    }

    public Fixing(final int wstId, final String description) {
        this.wstId = wstId;
        this.description = description;
        this.columns = new ArrayList<>();
    }

    public void allColumnIds(final List<Integer> cIds) {
        for (final FixingColumn column : this.columns)
            cIds.add(column.getId());
    }

    public void loadColumns(final FixColumnLoader loader) {
        final List<FixColumn> fcs = loader.get(this.wstId);
        if (fcs == null) {
            FixingsOverview.log.warn("No columns for wst " + this.wstId);
            return;
        }
        for (final FixColumn fc : fcs) {
            this.columns.add(new FixingColumn(this, fc.columnId, fc.startTime, fc.name));
        }
    }

    public void loadColumnsKmRange(final KMRangeLoader loader) {
        for (final FixingColumn column : this.columns) {
            column.loadKmRange(loader);
        }
    }

    public void adjustExtent(final Range extent) {
        for (final FixingColumn column : this.columns) {
            extent.extend(column);
        }
    }

    public void loadColumnsQRanges(final ColumnQRangeLoader loader, final GaugeFinder gaugeFinder) {
        for (final FixingColumn column : this.columns) {
            column.loadQRanges(loader, gaugeFinder);
        }
    }

    /**
     * @param allColumns[out]
     *            Columns will be put here.
     * @param range
     *            can be null.
     * @param filter
     *            filter to apply.
     */
    public void addAllColumns(final List<FixingColumn> allColumns, final Range range, final FixingColumnFilter filter) {
        for (final FixingColumn column : this.columns) {
            if ((range == null || column.hasSectorsInRange(range)) && (filter == null || filter.accept(column))) {
                allColumns.add(column);
            }
        }
    }
}

http://dive4elements.wald.intevation.org