ingo@2311: package de.intevation.flys.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 :