view artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/MiddleBedHeightData.java @ 8098:09725b65955a

Add new and simplyfied SedimentLoadFacet The SedimentLoadFacet is intended to work with the Measurement stations. It uses the same mechanismn to access the Mesurement station values as the calculation does. SedimentLoadLS values need a different facet that will come soon.
author Andre Heinecke <andre.heinecke@intevation.de>
date Fri, 15 Aug 2014 18:27:19 +0200
parents 3bdb9f99b4a0
children e4606eae8ea5
line wrap: on
line source
/* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde
 * Software engineering by Intevation GmbH
 *
 * 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.minfo;

import java.io.Serializable;

import java.util.ArrayList;

import gnu.trove.TDoubleArrayList;

import org.dive4elements.artifacts.CallContext;

import org.dive4elements.river.artifacts.resources.Resources;

import org.apache.log4j.Logger;


public class MiddleBedHeightData implements Serializable,
                                            Comparable<MiddleBedHeightData> {

    /** Very private logger. */
    private static final Logger logger = Logger.getLogger(MiddleBedHeightData.class);

    public static final String I18N_SINGLE_NAME = "facet.bedheight_middle.single";
    public static final String I18N_EPOCH_NAME  = "facet.bedheight_middle.epoch";

    private int    startYear;
    private int    endYear;
    private String evaluatedBy;
    private String description;

    private TDoubleArrayList km;
    private TDoubleArrayList middleHeight;
    private TDoubleArrayList uncertainty;
    private TDoubleArrayList soundingWidth;
    private TDoubleArrayList dataGap;
    private TDoubleArrayList width;
    private String type;
    private String locationSystem;
    private Integer soundWidth;
    private String oldElevationModel;
    private String curElevationModel;
    private String riverElevationModel;
    private ArrayList empty;


    protected MiddleBedHeightData(int start, int end, String eval, String desc,
        String curElevationModel, String oldElevationModel,
        String riverElevationModel, String type,
        String locationSystem, Integer soundingWidth) {
        this.startYear   = start;
        this.endYear     = end;
        this.evaluatedBy = eval;
        this.description = desc;
        this.curElevationModel = curElevationModel;
        this.oldElevationModel = oldElevationModel;
        this.riverElevationModel = riverElevationModel;
        this.type = type;
        this.locationSystem = locationSystem;
        this.soundWidth = soundingWidth;

        this.km            = new TDoubleArrayList();
        this.middleHeight  = new TDoubleArrayList();
        this.uncertainty   = new TDoubleArrayList();
        this.soundingWidth = new TDoubleArrayList();
        this.dataGap       = new TDoubleArrayList();
        this.width         = new TDoubleArrayList();
        this.empty         = new ArrayList();
    }

    public void addAll(double station, double height, double uncertainty,
        double soundingWidth, double dataGap, double width, boolean isEmpty) {
        addKM(station);
        addMiddleHeight(height);
        addUncertainty(uncertainty);
        addSoundingWidth(soundingWidth);
        addDataGap(dataGap);
        addWidth(width);
        addIsEmpty(isEmpty);
    }


    public int getStartYear() {
        return startYear;
    }

    public int getEndYear() {
        return endYear;
    }

    public String getEvaluatedBy() {
        return evaluatedBy;
    }

    public String getDescription() {
        return description;
    }

    public String getCurElevationModel() {
        return this.curElevationModel;
    }

    public String getOldElevationModel() {
        return this.oldElevationModel;
    }

    public String getRiverElevationModel() {
        return this.riverElevationModel;
    }

    public String getType() {
        return this.type;
    }

    public String getLocationSystem() {
        return this.locationSystem;
    }

    public String getSoundingWidth() {
        return this.soundWidth.toString();
    }
    protected void addKM(double km) {
        this.km.add(km);
    }

    public double getKM(int idx) {
        return km.get(idx);
    }

    public TDoubleArrayList getStations() {
        return this.km;
    }

    protected void addMiddleHeight(double middleHeight) {
        this.middleHeight.add(middleHeight);
    }

    public double getMiddleHeight(int idx) {
        return middleHeight.get(idx);
    }

    protected void addUncertainty(double uncertainty) {
        this.uncertainty.add(uncertainty);
    }

    public double getUncertainty(int idx) {
        return uncertainty.get(idx);
    }

    protected void addSoundingWidth(double soundingWidth) {
        this.soundingWidth.add(soundingWidth);
    }

    public double getSoundingWidth(int idx) {
        return soundingWidth.get(idx);
    }

    protected void addDataGap(double gap) {
        this.dataGap.add(gap);
    }

    public double getDataGap(int idx) {
        return dataGap.get(idx);
    }

    protected void addIsEmpty(boolean empty) {
        this.empty.add(empty);
    }

    public boolean isEmpty(int idx) {
        return (Boolean) empty.get(idx);
    }


    protected void addWidth(double width) {
        this.width.add(width);
    }

    public double getWidth(int idx) {
        return width.get(idx);
    }

    public int size() {
        return km.size();
    }


    /**
     * Get the points, ready to be drawn
     * @return [[km1, km2,...],[height1,height2,...]]
     */
    public double[][] getMiddleHeightsPoints() {
        double[][] points = new double[2][size()];

        for (int i = 0, n = size(); i < n; i++) {
            if (isEmpty(i)) {
                points[0][i] = getKM(i);
                points[1][i] = Double.NaN;
            }
            else {
                points[0][i] = getKM(i);
                points[1][i] = getMiddleHeight(i);
            }
        }

        return points;
    }


    public String getSoundingName(CallContext context) {
        if (getStartYear() == getEndYear()) {
            return Resources.getMsg(
                context.getMeta(),
                I18N_SINGLE_NAME,
                I18N_SINGLE_NAME,
                new Object[] { getStartYear() }
            );
        }
        else {
            return Resources.getMsg(
                context.getMeta(),
                I18N_EPOCH_NAME,
                I18N_EPOCH_NAME,
                new Object[] { getStartYear(), getEndYear() }
            );
        }
    }

    @Override
    public int compareTo(MiddleBedHeightData other) {

        int descCompared = description.compareTo(other.getDescription());

        if (descCompared != 0) {
            return descCompared;
        }

        if (size() == 0 || other.size() == 0) {
            if (size() == 0 && other.size() > 0) {
                return 1;
            } else if (size() > 0 && other.size() == 0) {
                return -1;
            } else if (size() == 0 && other.size() == 0) {
               return 0;
            }
        }

        if (getKM(0) < other.getKM(0)) {
            return -1;
        } else if (getKM(0) > other.getKM(0)) {
            return 1;
        }
        return 0;
    }
}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org