Mercurial > dive4elements > river
changeset 6305:40c77429319d
Update PDF/CSV export for discharge curves
- Unit is now dynamic, also adds gauge and datum
- Chose output unit depending on weather we are at a gauge or not
author | Andre Heinecke <aheinecke@intevation.de> |
---|---|
date | Wed, 12 Jun 2013 16:10:56 +0200 |
parents | 152e1ba8e5bd |
children | cb045ccba9b2 |
files | artifacts/doc/conf/jasper/computed-discharge.jasper artifacts/doc/conf/jasper/computed-discharge_en.jasper artifacts/src/main/java/org/dive4elements/river/artifacts/model/WKmsJRDataSource.java artifacts/src/main/java/org/dive4elements/river/exports/ComputedDischargeCurveExporter.java artifacts/src/main/resources/messages.properties artifacts/src/main/resources/messages_de.properties artifacts/src/main/resources/messages_de_DE.properties artifacts/src/main/resources/messages_en.properties |
diffstat | 8 files changed, 97 insertions(+), 25 deletions(-) [+] |
line wrap: on
line diff
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/model/WKmsJRDataSource.java Wed Jun 12 16:07:28 2013 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/model/WKmsJRDataSource.java Wed Jun 12 16:10:56 2013 +0200 @@ -90,12 +90,18 @@ else if ("gauge".equals(fieldName)) { value = metaData.get("gauge"); } + else if ("datum".equals(fieldName)) { + value = metaData.get("datum"); + } else if ("calculation".equals(fieldName)) { value = metaData.get("calculation"); } else if ("differences".equals(fieldName)) { value = metaData.get("differences"); } + else if ("wUnit".equals(fieldName)) { + value = metaData.get("wUnit"); + } else if ("km".equals(fieldName)) { value = data.get(index)[0]; }
--- a/artifacts/src/main/java/org/dive4elements/river/exports/ComputedDischargeCurveExporter.java Wed Jun 12 16:07:28 2013 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/exports/ComputedDischargeCurveExporter.java Wed Jun 12 16:10:56 2013 +0200 @@ -40,11 +40,14 @@ import org.dive4elements.river.artifacts.access.RangeAccess; import org.dive4elements.river.artifacts.model.CalculationResult; import org.dive4elements.river.artifacts.model.GaugesFactory; +import org.dive4elements.river.artifacts.model.WQ; import org.dive4elements.river.artifacts.model.WQKms; import org.dive4elements.river.artifacts.model.WKmsJRDataSource; import org.dive4elements.river.artifacts.resources.Resources; import org.dive4elements.river.model.Gauge; +import org.dive4elements.river.model.River; + import org.dive4elements.river.utils.RiverUtils; import org.dive4elements.river.utils.Formatter; @@ -68,10 +71,17 @@ public static final String DEFAULT_CSV_Q_HEADER = "Q [m\u00b3/s]"; public static final String PDF_HEADER_MODE = "export.computed.discharge.pdf.mode"; + public static final String PDF_HEADER_CALC_MODE = "export.computed.discharge.pdf.calc.mode"; public static final String JASPER_FILE = "export.computed.discharge.pdf.file"; protected List<WQKms> data; + protected String wUnit; + protected String riverUnit; + protected String gaugeName; + protected double gaugeDatum; + protected boolean isCalculated; + public void init(Document request, OutputStream out, CallContext context) { logger.debug("ComputedDischargeCurveExporter.init"); @@ -87,19 +97,58 @@ if (d instanceof CalculationResult) { d = ((CalculationResult)d).getData(); } + WQKms referenceWQ = null; // used for gauge / unit observations if (d instanceof WQKms[]){ data.addAll(Arrays.asList((WQKms [])d)); - return; + // If there is a unit mix in this list + // we are screwed anyway. + referenceWQ = ((WQKms[])d)[0]; } else if (d instanceof WQKms) { data.add((WQKms)d); + referenceWQ = (WQKms)d; + } else { + logger.warn("Can't add data for export. Unkown data type " + + d.getClass().getName()); return; } - logger.warn("Can't add data for csv export. Unkown data type " + - d.getClass().getName()); + logger.debug("Andre 1"); + if (referenceWQ != null) { + wUnit = referenceWQ.getWUnit(); + D4EArtifact arti = (D4EArtifact)master; + River river = RiverUtils.getRiver(arti); + riverUnit = river.getWstUnit().getName(); + RangeAccess rangeAccess = new RangeAccess(arti); + + double[] kms = rangeAccess.getKmRange(); + + Gauge gauge = river.determineGaugeByPosition(kms[0]); + logger.debug("Kms 0: " + kms[0]); + if (Math.abs(kms[0] - gauge.getStation().doubleValue()) < 1e-4) { + logger.debug("At Gauge"); + gaugeName = gauge.getName(); + gaugeDatum = gauge.getDatum().doubleValue(); + + // Assumption is that values at a gauge that are in the meter + // reference system are calculated. + isCalculated = wUnit.equals("m"); + + // Now convert the data to cm because we are at gauge + List<WQKms> newData = new ArrayList<WQKms>(); + for (WQKms d2: data) { + newData.add(new WQKms(d2.getKms(), + WQ.getFixedWQforExportAtGauge((WQ)d2, gauge.getDatum()))); + } + data = newData; // All hail the garbage collector + wUnit = "cm"; + logger.debug("Setting gauge / datum to: " + gaugeName + " / " + gaugeDatum); + } else { + gaugeName = ""; + gaugeDatum = Double.NaN; + } + } } - protected void writeCSVData(CSVWriter writer) { logger.info("ComputedDischargeCurveExporter.writeData"); @@ -128,21 +177,11 @@ protected void writeCSVHeader(CSVWriter writer) { logger.debug("ComputedDischargeCurveExporter.writeCSVHeader"); - String unit = RiverUtils.getRiver((D4EArtifact) master).getWstUnit().getName(); RangeAccess access = new RangeAccess((D4EArtifact)master); double[] km = access.getLocations(); String header = - msg(CSV_W_HEADER, DEFAULT_CSV_W_HEADER, new Object[] { unit }); + msg(CSV_W_HEADER, DEFAULT_CSV_W_HEADER, new Object[] { wUnit }); - if (km != null) { - List<Gauge>gauges = GaugesFactory.getGauges(access.getRiver()); - for (Gauge g: gauges) { - if (Math.abs(g.getStation().doubleValue() - km[0]) < 0.0001d) { - header = "W [cm]"; - break; - } - } - } writer.writeNext(new String[] { header, msg(CSV_Q_HEADER, DEFAULT_CSV_Q_HEADER) @@ -156,6 +195,9 @@ * @return the number formatter for W values. */ protected NumberFormat getWFormatter() { + if (wUnit.equals("cm")) { + return Formatter.getFormatter(context, 0, 0); + } return Formatter.getComputedDischargeW(context); } @@ -210,6 +252,13 @@ CallMeta meta = context.getMeta(); D4EArtifact flys = (D4EArtifact) master; + source.addMetaData("gauge", gaugeName); + if (!Double.isNaN(gaugeDatum)) { + NumberFormat mf = Formatter.getMeterFormat(context); + source.addMetaData("datum", mf.format(gaugeDatum) + " " + riverUnit); + } else { + source.addMetaData("datum", ""); + } source.addMetaData ("river", RiverUtils.getRivername(flys)); @@ -218,14 +267,23 @@ source.addMetaData("date", df.format(new Date())); + source.addMetaData("wUnit", wUnit.equals("m") ? riverUnit : "cm"); + RangeAccess rangeAccess = new RangeAccess(flys); double[] kms = rangeAccess.getKmRange(); source.addMetaData("range", String.valueOf(kms[0])); - source.addMetaData("calculation", Resources.getMsg( - locale, - PDF_HEADER_MODE, - "Computed Discharge")); + if (isCalculated) { + source.addMetaData("calculation", Resources.getMsg( + locale, + PDF_HEADER_CALC_MODE, + "Computed Discharge")); + } else { + source.addMetaData("calculation", Resources.getMsg( + locale, + PDF_HEADER_MODE, + "Discharge")); + } } protected void addWQData(WKmsJRDataSource source) {
--- a/artifacts/src/main/resources/messages.properties Wed Jun 12 16:07:28 2013 +0200 +++ b/artifacts/src/main/resources/messages.properties Wed Jun 12 16:10:56 2013 +0200 @@ -339,7 +339,8 @@ export.discharge.longitudinal.section.csv.header.cw = W corr. [NN +m] export.discharge.longitudinal.section.csv.header.q = Q [m\u00b3/s] export.discharge.curve.at.header = Computed Discharge Curve for {0} {0}-km: {1} -export.discharge.curve.at.gauge.header = Discharge Table for {1}/{0} since {2} PNP[NN+m] = {3} +export.discharge.curve.at.gauge.header = Discharge Table for {1}/{0} since {2} PNP[{4}] = {3} +export.discharge.curve.at.gauge.calc.header = Computed Discharge Curve for {0}, Gauge: {1} PNP[{3}] = {2} export.historical.discharge.csv.header.timerange = Timerange export.historical.discharge.csv.header.waterlevel = Waterlevel [cm] export.historical.discharge.csv.header.discharge = Discharge [m\u00b3/s] @@ -351,7 +352,8 @@ export.reference_curve.csv.header.w.q = equiv. Q (m\u00b3/s) export.waterlevel.pdf.mode = Waterlevel -export.computed.discharge.pdf.mode = Computed Dischargecurve +export.computed.discharge.pdf.mode = Dischargecurve +export.computed.discharge.pdf.calc.mode = Computed Dischargecurve export.duration.pdf.mode = Durationcurve export.wdifferences.pdf.mode = W Differences export.historical.discharge.pdf.mode = Historical Discharge
--- a/artifacts/src/main/resources/messages_de.properties Wed Jun 12 16:07:28 2013 +0200 +++ b/artifacts/src/main/resources/messages_de.properties Wed Jun 12 16:10:56 2013 +0200 @@ -339,7 +339,8 @@ export.discharge.longitudinal.section.csv.header.cw = W korr. [NN + m] export.discharge.longitudinal.section.csv.header.q = Q [m\u00b3/s] export.discharge.curve.at.header = Berechnete Abflusstafel f\u00fcr {0}, km {1} -export.discharge.curve.at.gauge.header = Abflusstafel f\u00fcr {1}/{0} ab {2} PNP[NN+m] = {3} +export.discharge.curve.at.gauge.header = Abflusstafel f\u00fcr {1}/{0} ab {2} PNP[{4}] = {3} +export.discharge.curve.at.gauge.calc.header = Berechnete Abflusstafel f\u00fcr {0}, Pegel: {1} PNP[{3}] = {2} export.historical.discharge.csv.header.timerange = Zeitraum export.historical.discharge.csv.header.waterlevel = Wasserstand [cm] export.historical.discharge.csv.header.discharge = Abfluss [m\u00b3/s] @@ -353,6 +354,7 @@ export.waterlevel.pdf.mode = Wasserstand export.computed.discharge.pdf.mode = Abflusskurve +export.computed.discharge.pdf.calc.mode = Berechnete Abflusskurve export.duration.pdf.mode = Dauerlinie export.wdifferences.pdf.mode = W Differenzen export.historical.discharge.pdf.mode = Historischer Abfluss
--- a/artifacts/src/main/resources/messages_de_DE.properties Wed Jun 12 16:07:28 2013 +0200 +++ b/artifacts/src/main/resources/messages_de_DE.properties Wed Jun 12 16:10:56 2013 +0200 @@ -335,7 +335,8 @@ export.discharge.longitudinal.section.csv.header.w = W [NN + m] export.discharge.longitudinal.section.csv.header.cw = W korr. [NN + m] export.discharge.longitudinal.section.csv.header.q = Q [m\u00b3/s] -export.discharge.curve.at.gauge.header = Abflusstafel f\u00fcr {1}/{0} ab {2} PNP[NN+m] = {3} +export.discharge.curve.at.gauge.header = Abflusstafel f\u00fcr {1}/{0} ab {2} PNP[{4}] = {3} +export.discharge.curve.at.gauge.calc.header = Berechnete Abflusstafel f\u00fcr {0}, Pegel: {1} PNP[{3}] = {2} export.discharge.curve.at.header = Berechnete Abflusstafel f\u00fcr {0}, km {1} export.historical.discharge.csv.header.timerange = Zeitraum export.historical.discharge.csv.header.waterlevel = Wasserstand [cm] @@ -349,6 +350,7 @@ export.waterlevel.pdf.mode = Wasserstand export.computed.discharge.pdf.mode = Abflusskurve +export.computed.discharge.pdf.calc.mode = Berechnete Abflusskurve export.duration.pdf.mode = Dauerline export.wdifferences.pdf.mode = W Differenzen export.historical.discharge.pdf.mode = Historischer Abfluss
--- a/artifacts/src/main/resources/messages_en.properties Wed Jun 12 16:07:28 2013 +0200 +++ b/artifacts/src/main/resources/messages_en.properties Wed Jun 12 16:10:56 2013 +0200 @@ -341,7 +341,8 @@ export.discharge.longitudinal.section.csv.header.cw = W corr. [NN + m] export.discharge.longitudinal.section.csv.header.q = Q [m\u00b3/s] export.discharge.curve.at.header = Computed Discharge Curve for {0} {0}-km: {1} -export.discharge.curve.at.gauge.header = Dischargetable for {1}/{0} since {2} Datum[NN+m] = {3} +export.discharge.curve.at.gauge.header = Dischargetable for {1}/{0} since {2} Datum[{4}] = {3} +export.discharge.curve.at.gauge.calc.header = Computed Discharge Curve for {0}, Gauge: {1} Datum[{3}] = {2} export.historical.discharge.csv.header.timerange = Timerange export.historical.discharge.csv.header.waterlevel = Waterlevel [cm] export.historical.discharge.csv.header.discharge = Discharge [m\u00b3/s] @@ -353,7 +354,8 @@ export.reference_curve.csv.header.w.q = equiv. Q (m\u00b3/s) export.waterlevel.pdf.mode = Waterlevel -export.computed.discharge.pdf.mode = Computed Dischargecurve +export.computed.discharge.pdf.mode = Dischargecurve +export.computed.discharge.pdf.calc.mode = Computed Dischargecurve export.duration.pdf.mode = Durationcurve export.wdifferences.pdf.mode = W Differences export.historical.discharge.pdf.mode = Historical Discharge