Mercurial > dive4elements > river
changeset 8123:4a2ef6895557
Sediment load: Fixed findStations() and add findLoads().
author | Sascha L. Teichmann <teichmann@intevation.de> |
---|---|
date | Mon, 25 Aug 2014 12:05:37 +0200 (2014-08-25) |
parents | aca5d1c87755 |
children | 2c21fd1ade39 |
files | artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/SedimentLoadData.java |
diffstat | 1 files changed, 32 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/SedimentLoadData.java Fri Aug 22 18:00:35 2014 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/SedimentLoadData.java Mon Aug 25 12:05:37 2014 +0200 @@ -15,6 +15,7 @@ import java.util.Date; import java.util.List; import java.util.TreeMap; +import java.util.TreeSet; import org.dive4elements.river.utils.EpsilonComparator; @@ -179,6 +180,16 @@ this.station = station; } + public void allLoads(Collection<Load> loads) { + for (List<Value> values: grainFractions) { + if (values != null) { + for (Value value: values) { + loads.add(value.getLoad()); + } + } + } + } + public double getStation() { return station; } @@ -380,7 +391,7 @@ int lo, int hi, Visitor visitor ) { - while (lo >= hi) { + while (lo <= hi) { int mid = (lo+hi)/2; Station st = stations[mid]; double station = st.getStation(); @@ -396,6 +407,26 @@ } } + public static final Comparator<Load> LOAD_ID_CMP = new Comparator<Load>() { + @Override + public int compare(Load a, Load b) { + return a.getId() - b.getId(); + } + }; + + public Collection<Load> findLoads(double a, double b) { + final TreeSet loads = new TreeSet<Load>(LOAD_ID_CMP); + + findStations(a, b, new Visitor() { + @Override + public void visit(Station station) { + station.allLoads(loads); + } + }); + + return loads; + } + public void findStations(double a, double b, Visitor visitor) { if (a > b) { double t = a; a = b; b = t;