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