rrenkert@7983: /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde rrenkert@7983: * Software engineering by Intevation GmbH rrenkert@7983: * rrenkert@7983: * This file is Free Software under the GNU AGPL (>=v3) rrenkert@7983: * and comes with ABSOLUTELY NO WARRANTY! Check out the rrenkert@7983: * documentation coming with Dive4Elements River for details. rrenkert@7983: */ rrenkert@7983: rrenkert@7983: package org.dive4elements.river.artifacts.model.minfo; rrenkert@7983: rrenkert@7983: import java.io.Serializable; rrenkert@7983: rrenkert@7983: import java.util.ArrayList; rrenkert@7983: rrenkert@7983: import gnu.trove.TDoubleArrayList; rrenkert@7983: rrenkert@7983: import org.dive4elements.artifacts.CallContext; rrenkert@7983: rrenkert@7983: import org.dive4elements.river.artifacts.resources.Resources; rrenkert@7983: rrenkert@7983: import org.apache.log4j.Logger; rrenkert@7983: rrenkert@7983: rrenkert@7983: public class MiddleBedHeightData implements Serializable, rrenkert@7983: Comparable { rrenkert@7983: rrenkert@7983: /** Very private logger. */ rrenkert@7983: private static final Logger logger = Logger.getLogger(MiddleBedHeightData.class); rrenkert@7983: rrenkert@7983: public static final String I18N_SINGLE_NAME = "facet.bedheight_middle.single"; rrenkert@7983: public static final String I18N_EPOCH_NAME = "facet.bedheight_middle.epoch"; rrenkert@7983: rrenkert@7983: private int startYear; rrenkert@7983: private int endYear; rrenkert@7983: private String evaluatedBy; rrenkert@7983: private String description; rrenkert@7983: rrenkert@7983: private TDoubleArrayList km; rrenkert@7983: private TDoubleArrayList middleHeight; rrenkert@7983: private TDoubleArrayList uncertainty; rrenkert@7983: private TDoubleArrayList soundingWidth; rrenkert@7983: private TDoubleArrayList dataGap; rrenkert@7983: private TDoubleArrayList width; rrenkert@7989: private String oldElevationModel; rrenkert@7989: private String curElevationModel; rrenkert@7983: private ArrayList empty; rrenkert@7983: rrenkert@7983: rrenkert@7989: protected MiddleBedHeightData(int start, int end, String eval, String desc, rrenkert@7989: String curElevationModel, String oldElevationModel) { rrenkert@7983: this.startYear = start; rrenkert@7983: this.endYear = end; rrenkert@7983: this.evaluatedBy = eval; rrenkert@7983: this.description = desc; rrenkert@7989: this.curElevationModel = curElevationModel; rrenkert@7989: this.oldElevationModel = oldElevationModel; rrenkert@7983: rrenkert@7983: this.km = new TDoubleArrayList(); rrenkert@7983: this.middleHeight = new TDoubleArrayList(); rrenkert@7983: this.uncertainty = new TDoubleArrayList(); rrenkert@7983: this.soundingWidth = new TDoubleArrayList(); rrenkert@7983: this.dataGap = new TDoubleArrayList(); rrenkert@7983: this.width = new TDoubleArrayList(); rrenkert@7983: this.empty = new ArrayList(); rrenkert@7983: } rrenkert@7983: rrenkert@7983: public void addAll(double station, double height, double uncertainty, rrenkert@7983: double soundingWidth, double dataGap, double width, boolean isEmpty) { rrenkert@7983: addKM(station); rrenkert@7983: addMiddleHeight(height); rrenkert@7983: addUncertainty(uncertainty); rrenkert@7983: addSoundingWidth(soundingWidth); rrenkert@7983: addDataGap(dataGap); rrenkert@7983: addWidth(width); rrenkert@7983: addIsEmpty(isEmpty); rrenkert@7983: } rrenkert@7983: rrenkert@7983: rrenkert@7983: public int getStartYear() { rrenkert@7983: return startYear; rrenkert@7983: } rrenkert@7983: rrenkert@7983: public int getEndYear() { rrenkert@7983: return endYear; rrenkert@7983: } rrenkert@7983: rrenkert@7983: public String getEvaluatedBy() { rrenkert@7983: return evaluatedBy; rrenkert@7983: } rrenkert@7983: rrenkert@7983: public String getDescription() { rrenkert@7983: return description; rrenkert@7983: } rrenkert@7983: rrenkert@7989: public String getCurElevationModel() { rrenkert@7989: return this.curElevationModel; rrenkert@7989: } rrenkert@7989: rrenkert@7989: public String getOldElevationModel() { rrenkert@7989: return this.oldElevationModel; rrenkert@7989: } rrenkert@7983: rrenkert@7983: protected void addKM(double km) { rrenkert@7983: this.km.add(km); rrenkert@7983: } rrenkert@7983: rrenkert@7983: public double getKM(int idx) { rrenkert@7983: return km.get(idx); rrenkert@7983: } rrenkert@7983: rrenkert@7983: public TDoubleArrayList getStations() { rrenkert@7983: return this.km; rrenkert@7983: } rrenkert@7983: rrenkert@7983: protected void addMiddleHeight(double middleHeight) { rrenkert@7983: this.middleHeight.add(middleHeight); rrenkert@7983: } rrenkert@7983: rrenkert@7983: public double getMiddleHeight(int idx) { rrenkert@7983: return middleHeight.get(idx); rrenkert@7983: } rrenkert@7983: rrenkert@7983: protected void addUncertainty(double uncertainty) { rrenkert@7983: this.uncertainty.add(uncertainty); rrenkert@7983: } rrenkert@7983: rrenkert@7983: public double getUncertainty(int idx) { rrenkert@7983: return uncertainty.get(idx); rrenkert@7983: } rrenkert@7983: rrenkert@7983: protected void addSoundingWidth(double soundingWidth) { rrenkert@7983: this.soundingWidth.add(soundingWidth); rrenkert@7983: } rrenkert@7983: rrenkert@7983: public double getSoundingWidth(int idx) { rrenkert@7983: return soundingWidth.get(idx); rrenkert@7983: } rrenkert@7983: rrenkert@7983: protected void addDataGap(double gap) { rrenkert@7983: this.dataGap.add(gap); rrenkert@7983: } rrenkert@7983: rrenkert@7983: public double getDataGap(int idx) { rrenkert@7983: return dataGap.get(idx); rrenkert@7983: } rrenkert@7983: rrenkert@7983: protected void addIsEmpty(boolean empty) { rrenkert@7983: this.empty.add(empty); rrenkert@7983: } rrenkert@7983: rrenkert@7983: public boolean isEmpty(int idx) { rrenkert@7983: return (Boolean) empty.get(idx); rrenkert@7983: } rrenkert@7983: rrenkert@7983: rrenkert@7983: protected void addWidth(double width) { rrenkert@7983: this.width.add(width); rrenkert@7983: } rrenkert@7983: rrenkert@7983: public double getWidth(int idx) { rrenkert@7983: return width.get(idx); rrenkert@7983: } rrenkert@7983: rrenkert@7983: public int size() { rrenkert@7983: return km.size(); rrenkert@7983: } rrenkert@7983: rrenkert@7983: rrenkert@7983: /** rrenkert@7983: * Get the points, ready to be drawn rrenkert@7983: * @return [[km1, km2,...],[height1,height2,...]] rrenkert@7983: */ rrenkert@7983: public double[][] getMiddleHeightsPoints() { rrenkert@7983: double[][] points = new double[2][size()]; rrenkert@7983: rrenkert@7983: for (int i = 0, n = size(); i < n; i++) { rrenkert@7983: if (isEmpty(i)) { rrenkert@7983: points[0][i] = getKM(i); rrenkert@7983: points[1][i] = Double.NaN; rrenkert@7983: } rrenkert@7983: else { rrenkert@7983: points[0][i] = getKM(i); rrenkert@7983: points[1][i] = getMiddleHeight(i); rrenkert@7983: } rrenkert@7983: } rrenkert@7983: rrenkert@7983: return points; rrenkert@7983: } rrenkert@7983: rrenkert@7983: rrenkert@7983: public String getSoundingName(CallContext context) { rrenkert@7983: if (getStartYear() == getEndYear()) { rrenkert@7983: return Resources.getMsg( rrenkert@7983: context.getMeta(), rrenkert@7983: I18N_SINGLE_NAME, rrenkert@7983: I18N_SINGLE_NAME, rrenkert@7983: new Object[] { getStartYear() } rrenkert@7983: ); rrenkert@7983: } rrenkert@7983: else { rrenkert@7983: return Resources.getMsg( rrenkert@7983: context.getMeta(), rrenkert@7983: I18N_EPOCH_NAME, rrenkert@7983: I18N_EPOCH_NAME, rrenkert@7983: new Object[] { getStartYear(), getEndYear() } rrenkert@7983: ); rrenkert@7983: } rrenkert@7983: } rrenkert@7983: rrenkert@7983: @Override rrenkert@7983: public int compareTo(MiddleBedHeightData other) { rrenkert@7983: rrenkert@7983: int descCompared = description.compareTo(other.getDescription()); rrenkert@7983: rrenkert@7983: if (descCompared != 0) { rrenkert@7983: return descCompared; rrenkert@7983: } rrenkert@7983: rrenkert@7983: if (size() == 0 || other.size() == 0) { rrenkert@7983: if (size() == 0 && other.size() > 0) { rrenkert@7983: return 1; rrenkert@7983: } else if (size() > 0 && other.size() == 0) { rrenkert@7983: return -1; rrenkert@7983: } else if (size() == 0 && other.size() == 0) { rrenkert@7983: return 0; rrenkert@7983: } rrenkert@7983: } rrenkert@7983: rrenkert@7983: if (getKM(0) < other.getKM(0)) { rrenkert@7983: return -1; rrenkert@7983: } else if (getKM(0) > other.getKM(0)) { rrenkert@7983: return 1; rrenkert@7983: } rrenkert@7983: return 0; rrenkert@7983: } rrenkert@7983: } rrenkert@7983: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :