Mercurial > dive4elements > river
diff artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/SedimentLoadFactory.java @ 6374:48e92ff57f23
SedimentLoad*: Set range to fraction/fractions values.
author | Felix Wolfsteller <felix.wolfsteller@intevation.de> |
---|---|
date | Thu, 20 Jun 2013 09:06:23 +0200 |
parents | af13ceeba52a |
children | fa8425c8694c |
line wrap: on
line diff
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/SedimentLoadFactory.java Wed Jun 19 16:53:27 2013 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/SedimentLoadFactory.java Thu Jun 20 09:06:23 2013 +0200 @@ -13,6 +13,8 @@ import java.util.Calendar; import java.util.Date; import java.util.List; +import java.util.Map; +import java.util.TreeMap; import net.sf.ehcache.Cache; import net.sf.ehcache.Element; @@ -22,7 +24,12 @@ import org.hibernate.Session; import org.hibernate.type.StandardBasicTypes; +import org.dive4elements.river.model.MeasurementStation; + import org.dive4elements.river.artifacts.cache.CacheFactory; + +import org.dive4elements.river.artifacts.model.Range; +import org.dive4elements.river.artifacts.model.RiverFactory; import org.dive4elements.river.artifacts.model.StaticSedimentLoadCacheKey; import org.dive4elements.river.backend.SessionHolder; @@ -264,6 +271,22 @@ Session session = SessionHolder.HOLDER.get(); SQLQuery sqlQuery = null; + List<MeasurementStation> allStations = RiverFactory.getRiver(river).getMeasurementStations(); + TreeMap<Double,MeasurementStation> floatStations = new TreeMap<Double, MeasurementStation>(); + TreeMap<Double,MeasurementStation> suspStations = new TreeMap<Double, MeasurementStation>(); + for (MeasurementStation measurementStation: allStations) { + if (measurementStation.getMeasurementType() == null || + measurementStation.getRange() == null) { + continue; + } + if (measurementStation.getMeasurementType().equals("Schwebstoff")) { + suspStations.put(measurementStation.getRange().getA().doubleValue(), measurementStation); + } + else if (measurementStation.getMeasurementType().equals("Geschiebe")) { + floatStations.put(measurementStation.getRange().getA().doubleValue(), measurementStation); + } + } + Calendar start = Calendar.getInstance(); start.set(syear - 1, 11, 31); Calendar end = Calendar.getInstance(); @@ -289,12 +312,12 @@ (Date) row[1], null, false); - getValues("coarse", sqlQuery, load); - getValues("fine_middle", sqlQuery, load); - getValues("sand", sqlQuery, load); - getValues("suspended_sediment", sqlQuery, load); - getValues("susp_sand_bed", sqlQuery, load); - getValues("susp_sand", sqlQuery, load); + getValues("coarse", sqlQuery, load, floatStations); + getValues("fine_middle", sqlQuery, load, floatStations); + getValues("sand", sqlQuery, load, floatStations); + getValues("suspended_sediment", sqlQuery, load, suspStations); + getValues("susp_sand_bed", sqlQuery, load, suspStations); + getValues("susp_sand", sqlQuery, load, suspStations); return load; } @@ -334,12 +357,12 @@ kms.add((Double)row[3]); load.setLoadTotal((Double)row[3], (Double)row[2]); } - getValues("coarse", sqlQuery, load); - getValues("fine_middle", sqlQuery, load); - getValues("sand", sqlQuery, load); - getValues("suspended_sediment", sqlQuery, load); - getValues("susp_sand_bed", sqlQuery, load); - getValues("susp_sand", sqlQuery, load); + getValues("coarse", sqlQuery, load, floatStations); + getValues("fine_middle", sqlQuery, load, floatStations); + getValues("sand", sqlQuery, load, floatStations); + getValues("suspended_sediment", sqlQuery, load, suspStations); + getValues("susp_sand_bed", sqlQuery, load, suspStations); + getValues("susp_sand", sqlQuery, load, floatStations); return load; } return new SedimentLoad(); @@ -356,34 +379,51 @@ protected static void getValues ( String fraction, SQLQuery query, - SedimentLoad load + SedimentLoad load, + TreeMap<Double, MeasurementStation> stations ) { query.setString("grain", fraction); List<Object[]> results = query.list(); for (int i = 0; i < results.size(); i++) { Object[] row = results.get(i); double km = (Double)row[3]; + MeasurementStation station = stations.get(km); + MeasurementStation nextStation = stations.ceilingEntry(km + 0.1d).getValue(); + Range range = null; + if (station == null) { + log.warn("No measurement station for " + fraction + " km " + km); + } + else { + if (nextRange != null) + range = new Range(station.getRange().getA().doubleValue(), + nextStation.getRange().getA().doubleValue()); + else { + // TODO end-of-river instead of B. + range = new Range(station.getRange().getA().doubleValue(), + station.getRange().getB().doubleValue()); + } + } double v = -1; if (row[2] != null) { v = ((Double)row[2]).doubleValue(); } if (fraction.equals("coarse")) { - load.setCoarse(km, v); + load.setCoarse(km, v, range); } else if (fraction.equals("sand")) { - load.setSand(km, v); + load.setSand(km, v, range); } else if (fraction.equals("fine_middle")) { - load.setFineMiddle(km, v); + load.setFineMiddle(km, v, range); } else if (fraction.equals("suspended_sediment")) { - load.setSuspSediment(km, v); + load.setSuspSediment(km, v, range); } else if (fraction.equals("susp_sand")) { - load.setSuspSand(km, v); + load.setSuspSand(km, v, range); } else if (fraction.equals("susp_sand_bed")) { - load.setSuspSandBed(km, v); + load.setSuspSandBed(km, v, range); } } }