view artifacts/src/main/java/org/dive4elements/river/artifacts/model/fixings/Fixing.java @ 9415:9744ce3c3853

Rework of fixanalysis computation and dWt and WQ facets. Got rid of strange remapping and bitshifting code by explicitely saving the column information and using it in the facets. The facets also put the valid station range into their xml-metadata
author gernotbelger
date Thu, 16 Aug 2018 16:27:53 +0200
parents
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