ingo@2217: package de.intevation.flys.artifacts.model;
ingo@2217: 
ingo@2217: import java.util.ArrayList;
ingo@4171: import java.util.Collections;
ingo@2217: import java.util.List;
ingo@2217: 
ingo@2217: 
ingo@2217: /**
felix@5343:  * A collection of triples W,Q,Timerange.
ingo@2217:  * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a>
ingo@2217:  */
ingo@2217: public class WQTimerange extends WQ {
ingo@2217: 
felix@5343:     /** Used to sort &lt;w,q,timerange&gt; triples. */
ingo@4171:     public static class TimerangeItem implements Comparable<TimerangeItem> {
ingo@4171:         public double q;
ingo@4171:         public double w;
ingo@4171:         public Timerange timerange;
ingo@4171: 
ingo@4171:         public TimerangeItem (Timerange timerange, double q, double w) {
ingo@4171:             this.timerange = timerange;
ingo@4171:             this.q = q;
ingo@4171:             this.w = w;
ingo@4171:         }
ingo@4171: 
felix@5335:         /** Sets [w,q] in wq. */
ingo@4171:         public double[] get(double[] wq) {
ingo@4171:             if (wq.length >= 2) {
ingo@4171:                 wq[0] = w;
ingo@4171:                 wq[1] = q;
ingo@4171:             }
ingo@4171: 
ingo@4171:             return wq;
ingo@4171:         }
ingo@4171: 
ingo@4171:         @Override
ingo@4171:         public int compareTo(TimerangeItem other) {
ingo@4171:             if (other.timerange.getStart() < timerange.getStart()) {
ingo@4171:                 return 1;
ingo@4171:             }
ingo@4171:             else if (other.timerange.getStart() > timerange.getStart()) {
ingo@4171:                 return -1;
ingo@4171:             }
ingo@4171:             else if (other.timerange.getEnd() < timerange.getEnd()) {
ingo@4171:                 return 1;
ingo@4171:             }
ingo@4171:             else if (other.timerange.getEnd() > timerange.getEnd()){
ingo@4171:                 return -1;
ingo@4171:             }
ingo@4171:             else {
ingo@4171:                 return 0;
ingo@4171:             }
ingo@4171:         }
ingo@4171:     }
ingo@4171: 
felix@5335:     protected List<Timerange> timeranges;
ingo@2217: 
ingo@2217: 
ingo@2217:     public WQTimerange() {
ingo@2217:         super("");
ingo@2217:     }
ingo@2217: 
ingo@2217: 
ingo@2217:     public WQTimerange(String name) {
ingo@2217:         super(name);
felix@5335:         timeranges = new ArrayList<Timerange>();
ingo@2217:     }
ingo@2217: 
ingo@2217: 
ingo@2217:     public void add(double w, double q, Timerange t) {
ingo@2217:         ws.add(w);
ingo@2217:         qs.add(q);
felix@5335:         timeranges.add(t);
ingo@2217:     }
ingo@2217: 
ingo@2217: 
ingo@2239:     public Timerange getTimerange(int idx) {
felix@5335:         return timeranges.get(idx);
ingo@2239:     }
ingo@2239: 
ingo@2239: 
ingo@2217:     public Timerange[] getTimeranges() {
felix@5335:         return timeranges.toArray(new Timerange[timeranges.size()]);
ingo@2217:     }
ingo@4171: 
ingo@4171:     public List<TimerangeItem> sort() {
felix@5335:         ArrayList<TimerangeItem> items = new ArrayList<TimerangeItem>(timeranges.size());
ingo@4171:         for (int i = 0, n = size(); i < n; i++) {
ingo@4171:             items.add(new TimerangeItem(getTimerange(i), getQ(i), getW(i)));
ingo@4171:         }
ingo@4171: 
ingo@4171:         Collections.sort(items);
ingo@4171:         return items;
ingo@4171:     }
ingo@2217: }
ingo@2217: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :