view artifacts/src/main/java/org/dive4elements/river/artifacts/model/fixings/FixResultColumn.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.Comparator;
import java.util.Date;

import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.commons.lang.math.DoubleRange;
import org.dive4elements.river.utils.KMIndex;

/**
 * Result data is organized by their original fixing-column, represented by this class.
 *
 * @author Gernot Belger
 */
public class FixResultColumn implements Serializable {

    public static class DateComparator implements Comparator<FixResultColumn> {
        @Override
        public int compare(final FixResultColumn o1, final FixResultColumn o2) {

            final Date date1 = o1.getDate();
            final Date date2 = o2.getDate();
            return date1.compareTo(date2);
        }
    }

    private static final long serialVersionUID = 1L;

    /** We know the columnId is unique within the database, so this takes the place here as primary key */
    private int columnId;

    private final KMIndex<QWD> data = new KMIndex<>();

    private Date date;

    private DoubleRange stationRange;

    public FixResultColumn() {
    }

    public FixResultColumn(final int columnId, final Date date, final DoubleRange stationRange) {
        this.columnId = columnId;
        this.date = date;
        this.stationRange = stationRange;
    }

    public int getColumnId() {
        return this.columnId;
    }

    public DoubleRange getStationRange() {
        return this.stationRange;
    }

    public Date getDate() {
        return this.date;
    }

    public void addQWD(final double km, final QWD qwd) {
        this.data.add(km, qwd);
    }

    @Override
    public boolean equals(final Object obj) {

        if (obj == null)
            return false;

        if (obj == this)
            return true;

        if (obj.getClass() != getClass())
            return false;

        final FixResultColumn rhs = (FixResultColumn) obj;
        return new EqualsBuilder() //
                .append(this.columnId, rhs.columnId) //
                .isEquals();
    }

    @Override
    public int hashCode() {

        return new HashCodeBuilder() //
                .append(this.columnId) //
                .toHashCode();
    }

    public QWD getQWD(final double currentKm) {

        final KMIndex.Entry<QWD> entry = this.data.binarySearch(currentKm);
        if (entry == null)
            return null;

        return entry.getValue();
    }

    public KMIndex<QWD> getQWDs() {
        return this.data;
    }
}

http://dive4elements.wald.intevation.org