teichmann@5863: /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde teichmann@5863: * Software engineering by Intevation GmbH teichmann@5863: * teichmann@5994: * This file is Free Software under the GNU AGPL (>=v3) teichmann@5863: * and comes with ABSOLUTELY NO WARRANTY! Check out the teichmann@5994: * documentation coming with Dive4Elements River for details. teichmann@5863: */ teichmann@5863: teichmann@5831: package org.dive4elements.river.artifacts.model; ingo@2311: ingo@2311: import gnu.trove.TDoubleArrayList; ingo@2311: ingo@4171: import java.util.ArrayList; ingo@4171: import java.util.Collections; ingo@4171: import java.util.List; ingo@4171: ingo@2311: ingo@2311: /** ingo@2311: * A subclass of WQTimerange that stores besides W, Q and Timerange values felix@5343: * another double value (difference to something). ingo@2311: * ingo@2311: * @author Ingo Weinzierl ingo@2311: */ ingo@2311: public class HistoricalWQTimerange extends WQTimerange { ingo@2311: ingo@4171: public static class HistoricalTimerangeItem extends TimerangeItem { ingo@4171: public double diff; ingo@4171: ingo@4171: public HistoricalTimerangeItem (Timerange timerange, double q, double w, double diff) { ingo@4171: super(timerange, q, w); ingo@4171: this.diff = diff; ingo@4171: } ingo@4171: ingo@4171: public double[] get(double[] wq) { ingo@4171: if (wq.length >= 3) { ingo@4171: wq[0] = w; ingo@4171: wq[1] = q; ingo@4172: wq[2] = diff; ingo@4171: } ingo@4171: else if (wq.length >= 2) { ingo@4171: return super.get(wq); ingo@4171: } ingo@4171: ingo@4171: return wq; ingo@4171: } ingo@4171: } ingo@4171: ingo@2311: protected TDoubleArrayList diffs; ingo@2311: ingo@2311: ingo@2311: public HistoricalWQTimerange(String name) { ingo@2311: super(name); ingo@2311: ingo@2311: diffs = new TDoubleArrayList(); ingo@2311: } ingo@2311: ingo@2311: ingo@2311: public void add(double w, double q, double diff, Timerange t) { ingo@2311: ws.add(w); ingo@2311: qs.add(q); felix@5335: timeranges.add(t); ingo@2311: diffs.add(diff); ingo@2311: } ingo@2311: ingo@2311: ingo@2311: /** ingo@2311: * This method requires a 3dim double array for res! ingo@2311: */ ingo@2311: @Override ingo@2311: public double[] get(int idx, double[] res) { ingo@2311: res[0] = ws.getQuick(idx); ingo@2311: res[1] = qs.getQuick(idx); ingo@2311: res[2] = diffs.getQuick(idx); ingo@2311: ingo@2311: return res; ingo@2311: } ingo@2311: ingo@2311: ingo@2311: public double[] getDiffs() { ingo@2311: return diffs.toNativeArray(); ingo@2311: } ingo@4171: ingo@4171: @Override ingo@4171: public List sort() { felix@5335: ArrayList items = new ArrayList(timeranges.size()); ingo@4171: for (int i = 0, n = size(); i < n; i++) { ingo@4171: items.add(new HistoricalTimerangeItem(getTimerange(i), getQ(i), getW(i), diffs.get(i))); ingo@4171: } ingo@4171: ingo@4171: Collections.sort(items); ingo@4171: return items; ingo@4171: } ingo@2311: } ingo@2311: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :