Mercurial > dive4elements > river
changeset 9486:ce13a2f07290
pdf exports added for fixation+bundu (waterlevel)
author | gernotbelger |
---|---|
date | Mon, 17 Sep 2018 19:07:57 +0200 |
parents | dd05a5eef210 |
children | 504f63512379 d6d5ca6d4af0 |
files | artifacts/doc/conf/jasper/templates/fix_waterlevel.jrxml artifacts/doc/conf/jasper/templates/waterlevel_new.jrxml artifacts/doc/conf/jasper/waterlevel.jasper artifacts/doc/conf/jasper/waterlevel.jrxml artifacts/doc/conf/jasper/waterlevel_en.jasper artifacts/doc/conf/jasper/waterlevel_en.jrxml artifacts/src/main/java/org/dive4elements/river/artifacts/AbstractFixBunduArtifact.java artifacts/src/main/java/org/dive4elements/river/artifacts/FixationArtifact.java artifacts/src/main/java/org/dive4elements/river/artifacts/bundu/BUNDUArtifact.java artifacts/src/main/java/org/dive4elements/river/exports/FixWaterlevelExporter.java artifacts/src/main/java/org/dive4elements/river/exports/WaterlevelExporter.java artifacts/src/main/resources/messages.properties artifacts/src/main/resources/messages_de.properties |
diffstat | 13 files changed, 515 insertions(+), 572 deletions(-) [+] |
line wrap: on
line diff
--- a/artifacts/doc/conf/jasper/templates/fix_waterlevel.jrxml Mon Sep 17 16:00:00 2018 +0200 +++ b/artifacts/doc/conf/jasper/templates/fix_waterlevel.jrxml Mon Sep 17 19:07:57 2018 +0200 @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- Created with Jaspersoft Studio version 6.6.0.final using JasperReports Library version 4.5.0 --> -<!-- 2018-08-28T11:58:49 --> +<!-- 2018-09-17T18:38:39 --> <jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="flysreport" language="groovy" pageWidth="595" pageHeight="842" columnWidth="545" leftMargin="30" rightMargin="20" topMargin="20" bottomMargin="20"> <property name="ireport.zoom" value="1.0"/> <property name="ireport.x" value="0"/> @@ -44,6 +44,7 @@ <field name="meta:flowdepthdevelopment_header_label" class="java.lang.String"/> <field name="meta:flowdepth_tkh_header" class="java.lang.String"/> <field name="meta:w_at_gauge_header" class="java.lang.String"/> + <field name="meta:w_at_gauge_header_2" class="java.lang.String"/> <field name="meta:tkh_header" class="java.lang.String"/> <field name="meta:tkhkind_header" class="java.lang.String"/> <field name="meta:waterlevel_header" class="java.lang.String"/> @@ -155,7 +156,7 @@ <textField isStretchWithOverflow="true"> <reportElement style="htmlStyle" positionType="Float" stretchType="RelativeToBandHeight" x="278" y="0" width="85" height="24"/> <box padding="5"/> - <textElement textAlignment="Left" verticalAlignment="Bottom"/> + <textElement textAlignment="Right" verticalAlignment="Bottom"/> <textFieldExpression><![CDATA[$F{meta:waterlevel_name_header}]]></textFieldExpression> </textField> <textField isStretchWithOverflow="true"> @@ -226,7 +227,7 @@ <bottomPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/> <rightPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/> </box> - <textElement textAlignment="Left" verticalAlignment="Top"/> + <textElement textAlignment="Right" verticalAlignment="Top"/> <textFieldExpression><![CDATA[$F{data:4}]]></textFieldExpression> </textField> <textField isStretchWithOverflow="true" isBlankWhenNull="true">
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/artifacts/doc/conf/jasper/templates/waterlevel_new.jrxml Mon Sep 17 19:07:57 2018 +0200 @@ -0,0 +1,272 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- Created with Jaspersoft Studio version 6.6.0.final using JasperReports Library version 4.5.0 --> +<!-- 2018-09-17T18:59:50 --> +<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="flysreport" language="groovy" pageWidth="595" pageHeight="842" columnWidth="545" leftMargin="30" rightMargin="20" topMargin="20" bottomMargin="20"> + <property name="ireport.zoom" value="1.0"/> + <property name="ireport.x" value="0"/> + <property name="ireport.y" value="0"/> + <style name="htmlStyle" isDefault="true" mode="Transparent" markup="html" fontName="Roboto"> + <paragraph lineSpacing="Single"/> + </style> + <field name="meta:header" class="java.lang.String"/> + <field name="meta:calcMode" class="java.lang.String"/> + <field name="meta:version_label" class="java.lang.String"/> + <field name="meta:version" class="java.lang.String"/> + <field name="meta:user_label" class="java.lang.String"/> + <field name="meta:user" class="java.lang.String"/> + <field name="meta:date_label" class="java.lang.String"/> + <field name="meta:date" class="java.lang.String"/> + <field name="meta:river_label" class="java.lang.String"/> + <field name="meta:river" class="java.lang.String"/> + <field name="meta:range_label" class="java.lang.String"/> + <field name="meta:range" class="java.lang.String"/> + <field name="meta:calculation_label" class="java.lang.String"/> + <field name="meta:calculation_name" class="java.lang.String"/> + <field name="meta:station_header" class="java.lang.String"/> + <field name="meta:flowdepthdevelopment_header" class="java.lang.String"/> + <field name="meta:flowdepthdevelopmentperyear_header" class="java.lang.String"/> + <field name="meta:waterleveldifference_header" class="java.lang.String"/> + <field name="meta:waterleveldifference_header2" class="java.lang.String"/> + <field name="meta:waterleveldifference_header_label" class="java.lang.String"/> + <field name="meta:bedheightdifference_header" class="java.lang.String"/> + <field name="meta:bedheightdifference_header2" class="java.lang.String"/> + <field name="meta:bedheightdifference_header_label" class="java.lang.String"/> + <field name="meta:flowdepthcurrent_header" class="java.lang.String"/> + <field name="meta:flowdepthcurrent_header2" class="java.lang.String"/> + <field name="meta:flowdepthhistorical_header" class="java.lang.String"/> + <field name="meta:flowdepthhistorical_header2" class="java.lang.String"/> + <field name="meta:flowdepthcurrent_header_label" class="java.lang.String"/> + <field name="meta:flowdepthhistorical_header_label" class="java.lang.String"/> + <field name="meta:flowdepth_header" class="java.lang.String"/> + <field name="meta:flowdepthdevelopment" class="java.lang.String"/> + <field name="meta:flowdepthmin_header" class="java.lang.String"/> + <field name="meta:flowdepthmax_header" class="java.lang.String"/> + <field name="meta:flowdepthdevelopment_header_label" class="java.lang.String"/> + <field name="meta:flowdepth_tkh_header" class="java.lang.String"/> + <field name="meta:w_at_gauge_header" class="java.lang.String"/> + <field name="meta:w_at_gauge_header_2" class="java.lang.String"/> + <field name="meta:tkh_header" class="java.lang.String"/> + <field name="meta:tkhkind_header" class="java.lang.String"/> + <field name="meta:waterlevel_header" class="java.lang.String"/> + <field name="meta:discharge_header" class="java.lang.String"/> + <field name="meta:waterlevel_name_header" class="java.lang.String"/> + <field name="meta:gauge_header" class="java.lang.String"/> + <field name="meta:bedheight_header" class="java.lang.String"/> + <field name="meta:sounding_name_header" class="java.lang.String"/> + <field name="meta:location_header" class="java.lang.String"/> + <field name="meta:fix_date" class="java.lang.String"/> + <field name="meta:fix_q" class="java.lang.String"/> + <field name="meta:fix_w" class="java.lang.String"/> + <field name="meta:fix_state" class="java.lang.String"/> + <field name="meta:fix_delta_w" class="java.lang.String"/> + <field name="data:0" class="java.lang.String"/> + <field name="data:1" class="java.lang.String"/> + <field name="data:2" class="java.lang.String"/> + <field name="data:3" class="java.lang.String"/> + <field name="data:4" class="java.lang.String"/> + <field name="data:5" class="java.lang.String"/> + <field name="data:6" class="java.lang.String"/> + <background> + <band splitType="Stretch"/> + </background> + <title> + <band height="169" splitType="Stretch"> + <textField> + <reportElement style="htmlStyle" x="0" y="0" width="515" height="30"/> + <textElement> + <font size="18"/> + </textElement> + <textFieldExpression><![CDATA[$F{meta:header} + " " + $F{meta:river}]]></textFieldExpression> + </textField> + <textField> + <reportElement style="htmlStyle" x="0" y="39" width="165" height="20"/> + <textFieldExpression><![CDATA[$F{meta:calcMode}]]></textFieldExpression> + </textField> + <textField> + <reportElement style="htmlStyle" x="0" y="69" width="123" height="20"/> + <textFieldExpression><![CDATA[$F{meta:version_label} + ":"]]></textFieldExpression> + </textField> + <textField> + <reportElement style="htmlStyle" x="123" y="69" width="392" height="20"/> + <textFieldExpression><![CDATA[$F{meta:version}]]></textFieldExpression> + </textField> + <textField> + <reportElement style="htmlStyle" x="0" y="89" width="123" height="20"/> + <textFieldExpression><![CDATA[$F{meta:user_label} + ":"]]></textFieldExpression> + </textField> + <textField> + <reportElement style="htmlStyle" x="123" y="89" width="392" height="20"/> + <textFieldExpression><![CDATA[$F{meta:user}]]></textFieldExpression> + </textField> + <textField> + <reportElement style="htmlStyle" x="0" y="109" width="123" height="20"/> + <textFieldExpression><![CDATA[$F{meta:date_label} + ":"]]></textFieldExpression> + </textField> + <textField> + <reportElement style="htmlStyle" x="123" y="109" width="392" height="20"/> + <textFieldExpression><![CDATA[$F{meta:date}]]></textFieldExpression> + </textField> + <textField> + <reportElement style="htmlStyle" x="0" y="129" width="123" height="20"/> + <textFieldExpression><![CDATA[$F{meta:river_label} + ":"]]></textFieldExpression> + </textField> + <textField> + <reportElement style="htmlStyle" x="123" y="129" width="392" height="20"/> + <textFieldExpression><![CDATA[$F{meta:river}]]></textFieldExpression> + </textField> + <textField> + <reportElement style="htmlStyle" x="0" y="149" width="123" height="20"/> + <textFieldExpression><![CDATA[$F{meta:range_label} + ":"]]></textFieldExpression> + </textField> + <textField> + <reportElement style="htmlStyle" x="123" y="149" width="392" height="20"/> + <textFieldExpression><![CDATA[$F{meta:range}]]></textFieldExpression> + </textField> + </band> + </title> + <columnHeader> + <band height="25" splitType="Stretch"> + <line> + <reportElement style="htmlStyle" positionType="FixRelativeToBottom" x="0" y="24" width="550" height="1"/> + </line> + <textField isStretchWithOverflow="true"> + <reportElement style="htmlStyle" positionType="Float" stretchType="RelativeToBandHeight" x="0" y="0" width="60" height="24"/> + <box padding="5"/> + <textElement textAlignment="Right" verticalAlignment="Bottom"/> + <textFieldExpression><![CDATA[$F{meta:station_header}]]></textFieldExpression> + </textField> + <textField isStretchWithOverflow="true"> + <reportElement style="htmlStyle" positionType="Float" stretchType="RelativeToBandHeight" x="60" y="0" width="77" height="24"/> + <box padding="5"/> + <textElement textAlignment="Right" verticalAlignment="Bottom"/> + <textFieldExpression><![CDATA[$F{meta:fix_w}]]></textFieldExpression> + </textField> + <textField isStretchWithOverflow="true"> + <reportElement key="delete" style="htmlStyle" positionType="Float" stretchType="RelativeToBandHeight" x="137" y="-1" width="0" height="24"/> + <box padding="5"/> + <textElement textAlignment="Right" verticalAlignment="Bottom"/> + <textFieldExpression><![CDATA[$F{meta:w_at_gauge_header}]]></textFieldExpression> + </textField> + <textField isStretchWithOverflow="true"> + <reportElement style="htmlStyle" positionType="Float" stretchType="RelativeToBandHeight" x="137" y="0" width="70" height="24"/> + <box padding="5"/> + <textElement textAlignment="Right" verticalAlignment="Bottom"/> + <textFieldExpression><![CDATA[$F{meta:fix_q}]]></textFieldExpression> + </textField> + <textField isStretchWithOverflow="true"> + <reportElement style="htmlStyle" positionType="Float" stretchType="RelativeToBandHeight" x="207" y="0" width="83" height="24"/> + <box padding="5"/> + <textElement textAlignment="Right" verticalAlignment="Bottom"/> + <textFieldExpression><![CDATA[$F{meta:w_at_gauge_header_2}]]></textFieldExpression> + </textField> + <textField isStretchWithOverflow="true"> + <reportElement style="htmlStyle" positionType="Float" stretchType="RelativeToBandHeight" x="290" y="0" width="120" height="24"/> + <box padding="5"/> + <textElement textAlignment="Left" verticalAlignment="Bottom"/> + <textFieldExpression><![CDATA[$F{meta:location_header}]]></textFieldExpression> + </textField> + <textField isStretchWithOverflow="true"> + <reportElement style="htmlStyle" positionType="Float" stretchType="RelativeToBandHeight" x="410" y="0" width="140" height="24"/> + <box padding="5"/> + <textElement textAlignment="Left" verticalAlignment="Bottom"/> + <textFieldExpression><![CDATA[$F{meta:gauge_header}]]></textFieldExpression> + </textField> + </band> + </columnHeader> + <detail> + <band height="15" splitType="Prevent"> + <textField isStretchWithOverflow="true" isBlankWhenNull="true"> + <reportElement style="htmlStyle" positionType="Float" stretchType="RelativeToBandHeight" x="0" y="0" width="60" height="15"/> + <box topPadding="2" leftPadding="5" bottomPadding="0" rightPadding="5"> + <topPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/> + <leftPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/> + <bottomPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/> + <rightPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/> + </box> + <textElement textAlignment="Right" verticalAlignment="Top"/> + <textFieldExpression><![CDATA[$F{data:0}]]></textFieldExpression> + </textField> + <textField isStretchWithOverflow="true" isBlankWhenNull="true"> + <reportElement style="htmlStyle" positionType="Float" stretchType="RelativeToBandHeight" x="60" y="0" width="77" height="15"/> + <box topPadding="2" leftPadding="5" bottomPadding="0" rightPadding="5"> + <topPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/> + <leftPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/> + <bottomPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/> + <rightPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/> + </box> + <textElement textAlignment="Right" verticalAlignment="Top"/> + <textFieldExpression><![CDATA[$F{data:1}]]></textFieldExpression> + </textField> + <textField isStretchWithOverflow="true" isBlankWhenNull="true"> + <reportElement key="delete" style="htmlStyle" positionType="Float" stretchType="RelativeToBandHeight" x="137" y="-1" width="0" height="15"/> + <box topPadding="2" leftPadding="5" bottomPadding="0" rightPadding="5"> + <topPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/> + <leftPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/> + <bottomPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/> + <rightPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/> + </box> + <textElement textAlignment="Right" verticalAlignment="Top"/> + <textFieldExpression><![CDATA[$F{data:2}]]></textFieldExpression> + </textField> + <textField isStretchWithOverflow="true" isBlankWhenNull="true"> + <reportElement style="htmlStyle" positionType="Float" stretchType="RelativeToBandHeight" x="137" y="0" width="70" height="15"/> + <box topPadding="2" leftPadding="5" bottomPadding="0" rightPadding="5"> + <topPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/> + <leftPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/> + <bottomPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/> + <rightPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/> + </box> + <textElement textAlignment="Right" verticalAlignment="Top"/> + <textFieldExpression><![CDATA[$F{data:3}]]></textFieldExpression> + </textField> + <textField isStretchWithOverflow="true" isBlankWhenNull="true"> + <reportElement style="htmlStyle" positionType="Float" stretchType="RelativeToBandHeight" x="207" y="0" width="83" height="15"/> + <box topPadding="2" leftPadding="5" bottomPadding="0" rightPadding="5"> + <topPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/> + <leftPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/> + <bottomPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/> + <rightPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/> + </box> + <textElement textAlignment="Right" verticalAlignment="Top"/> + <textFieldExpression><![CDATA[$F{data:4}]]></textFieldExpression> + </textField> + <textField isStretchWithOverflow="true" isBlankWhenNull="true"> + <reportElement style="htmlStyle" positionType="Float" stretchType="RelativeToBandHeight" x="290" y="0" width="120" height="15"/> + <box topPadding="2" leftPadding="5" bottomPadding="0" rightPadding="5"> + <topPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/> + <leftPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/> + <bottomPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/> + <rightPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/> + </box> + <textElement textAlignment="Left" verticalAlignment="Top"/> + <textFieldExpression><![CDATA[$F{data:5}]]></textFieldExpression> + </textField> + <textField isStretchWithOverflow="true" isBlankWhenNull="true"> + <reportElement style="htmlStyle" positionType="Float" stretchType="RelativeToBandHeight" x="410" y="0" width="140" height="15"/> + <box topPadding="2" leftPadding="5" bottomPadding="0" rightPadding="5"> + <topPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/> + <leftPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/> + <bottomPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/> + <rightPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/> + </box> + <textElement textAlignment="Left" verticalAlignment="Top"/> + <textFieldExpression><![CDATA[$F{data:6}]]></textFieldExpression> + </textField> + </band> + </detail> + <pageFooter> + <band height="15" splitType="Stretch"> + <textField isStretchWithOverflow="true"> + <reportElement style="htmlStyle" x="437" y="0" width="55" height="15"/> + <box topPadding="2" rightPadding="3"/> + <textElement textAlignment="Right"/> + <textFieldExpression><![CDATA[$V{PAGE_NUMBER}]]></textFieldExpression> + </textField> + <textField isStretchWithOverflow="true" evaluationTime="Report"> + <reportElement style="htmlStyle" x="493" y="0" width="57" height="15"/> + <box topPadding="2" leftPadding="0" bottomPadding="0" rightPadding="0"/> + <textFieldExpression><![CDATA["/ " + $V{PAGE_NUMBER}]]></textFieldExpression> + </textField> + </band> + </pageFooter> +</jasperReport>
--- a/artifacts/doc/conf/jasper/waterlevel.jrxml Mon Sep 17 16:00:00 2018 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,173 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="flysreport" language="groovy" pageWidth="595" pageHeight="842" columnWidth="515" leftMargin="60" rightMargin="20" topMargin="20" bottomMargin="20"> - <property name="ireport.zoom" value="1.0"/> - <property name="ireport.x" value="0"/> - <property name="ireport.y" value="0"/> - <field name="river" class="java.lang.String"/> - <field name="gauge" class="java.lang.String"/> - <field name="km" class="java.lang.String"/> - <field name="W" class="java.lang.String"/> - <field name="date" class="java.lang.String"/> - <field name="Q" class="java.lang.String"/> - <field name="calculation" class="java.lang.String"/> - <field name="range" class="java.lang.String"/> - <field name="description" class="java.lang.String"/> - <field name="location" class="java.lang.String"/> - <field name="gaugename" class="java.lang.String"/> - <background> - <band splitType="Stretch"/> - </background> - <title> - <band height="162" splitType="Stretch"> - <staticText> - <reportElement x="0" y="1" width="165" height="30"/> - <textElement> - <font size="18"/> - </textElement> - <text><![CDATA[Ergebnisausgabe]]></text> - </staticText> - <textField> - <reportElement x="165" y="0" width="350" height="31"/> - <textElement> - <font size="18"/> - </textElement> - <textFieldExpression><![CDATA[$F{river}]]></textFieldExpression> - </textField> - <textField> - <reportElement x="0" y="31" width="515" height="26"/> - <textElement> - <font size="14"/> - </textElement> - <textFieldExpression><![CDATA[$F{calculation}]]></textFieldExpression> - </textField> - <staticText> - <reportElement x="0" y="70" width="123" height="20"/> - <textElement/> - <text><![CDATA[Gewässer:]]></text> - </staticText> - <textField> - <reportElement x="123" y="70" width="392" height="20"/> - <textElement/> - <textFieldExpression><![CDATA[$F{river}]]></textFieldExpression> - </textField> - <staticText> - <reportElement x="0" y="90" width="123" height="20"/> - <textElement/> - <text><![CDATA[Bezugspegel:]]></text> - </staticText> - <textField> - <reportElement x="123" y="90" width="392" height="20"/> - <textElement/> - <textFieldExpression><![CDATA[$F{gauge}]]></textFieldExpression> - </textField> - <staticText> - <reportElement x="0" y="110" width="123" height="20"/> - <textElement/> - <text><![CDATA[Datum der Erstellung:]]></text> - </staticText> - <textField> - <reportElement x="123" y="110" width="392" height="20"/> - <textElement/> - <textFieldExpression><![CDATA[$F{date}]]></textFieldExpression> - </textField> - <staticText> - <reportElement x="0" y="130" width="123" height="20"/> - <textElement/> - <text><![CDATA[Ort/Bereich:]]></text> - </staticText> - <textField> - <reportElement x="123" y="130" width="392" height="20"/> - <textElement/> - <textFieldExpression><![CDATA[$F{range}]]></textFieldExpression> - </textField> - </band> - </title> - <columnHeader> - <band height="25" splitType="Stretch"> - <line> - <reportElement x="0" y="19" width="515" height="1"/> - </line> - <staticText> - <reportElement x="0" y="0" width="60" height="20"/> - <textElement/> - <text><![CDATA[Fluss-Km]]></text> - </staticText> - <staticText> - <reportElement x="60" y="0" width="65" height="20"/> - <textElement/> - <text><![CDATA[W [NN + m]]]></text> - </staticText> - <staticText> - <reportElement x="125" y="0" width="65" height="20"/> - <textElement/> - <text><![CDATA[Q [m³/s]]]></text> - </staticText> - <staticText> - <reportElement x="190" y="0" width="85" height="20"/> - <textElement/> - <text><![CDATA[Bezeichnung]]></text> - </staticText> - <staticText> - <reportElement x="275" y="0" width="110" height="20"/> - <textElement/> - <text><![CDATA[Lage]]></text> - </staticText> - <staticText> - <reportElement x="385" y="0" width="130" height="20"/> - <textElement/> - <text><![CDATA[Bezugspegel]]></text> - </staticText> - </band> - </columnHeader> - <detail> - <band height="14" splitType="Stretch"> - <textField isBlankWhenNull="true"> - <reportElement x="0" y="0" width="60" height="14"/> - <textElement/> - <textFieldExpression><![CDATA[$F{km}]]></textFieldExpression> - </textField> - <textField isBlankWhenNull="true"> - <reportElement x="60" y="0" width="65" height="14"/> - <textElement/> - <textFieldExpression><![CDATA[$F{W}]]></textFieldExpression> - </textField> - <textField isBlankWhenNull="true"> - <reportElement x="125" y="0" width="65" height="14"/> - <textElement/> - <textFieldExpression><![CDATA[$F{Q}]]></textFieldExpression> - </textField> - <textField isStretchWithOverflow="true" isBlankWhenNull="false"> - <reportElement stretchType="RelativeToBandHeight" x="190" y="0" width="85" height="14"/> - <textElement/> - <textFieldExpression><![CDATA[$F{description}]]></textFieldExpression> - </textField> - <textField isStretchWithOverflow="true" isBlankWhenNull="true"> - <reportElement stretchType="RelativeToBandHeight" x="275" y="0" width="110" height="14" isPrintWhenDetailOverflows="true"/> - <textElement/> - <textFieldExpression><![CDATA[$F{location}]]></textFieldExpression> - </textField> - <textField isStretchWithOverflow="true" isBlankWhenNull="true"> - <reportElement stretchType="RelativeToBandHeight" x="385" y="0" width="130" height="14"/> - <textElement/> - <textFieldExpression><![CDATA[$F{gaugename}]]></textFieldExpression> - </textField> - </band> - </detail> - <pageFooter> - <band height="29" splitType="Stretch"> - <textField evaluationTime="Report"> - <reportElement x="458" y="9" width="57" height="20"/> - <textElement/> - <textFieldExpression><![CDATA[" / " + $V{PAGE_NUMBER}]]></textFieldExpression> - </textField> - <textField> - <reportElement x="403" y="9" width="55" height="20"/> - <textElement textAlignment="Right"/> - <textFieldExpression><![CDATA[$V{PAGE_NUMBER}]]></textFieldExpression> - </textField> - </band> - </pageFooter> - <summary> - <band height="42" splitType="Stretch"/> - </summary> -</jasperReport>
--- a/artifacts/doc/conf/jasper/waterlevel_en.jrxml Mon Sep 17 16:00:00 2018 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,173 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="flysreport" language="groovy" pageWidth="595" pageHeight="842" columnWidth="515" leftMargin="60" rightMargin="20" topMargin="20" bottomMargin="20"> - <property name="ireport.zoom" value="1.5"/> - <property name="ireport.x" value="135"/> - <property name="ireport.y" value="0"/> - <field name="river" class="java.lang.String"/> - <field name="gauge" class="java.lang.String"/> - <field name="km" class="java.lang.String"/> - <field name="W" class="java.lang.String"/> - <field name="date" class="java.lang.String"/> - <field name="Q" class="java.lang.String"/> - <field name="calculation" class="java.lang.String"/> - <field name="range" class="java.lang.String"/> - <field name="description" class="java.lang.String"/> - <field name="location" class="java.lang.String"/> - <field name="gaugename" class="java.lang.String"/> - <background> - <band splitType="Stretch"/> - </background> - <title> - <band height="162" splitType="Stretch"> - <staticText> - <reportElement x="0" y="1" width="177" height="30"/> - <textElement> - <font size="18"/> - </textElement> - <text><![CDATA[Calculation result]]></text> - </staticText> - <textField> - <reportElement x="177" y="0" width="338" height="31"/> - <textElement> - <font size="18"/> - </textElement> - <textFieldExpression><![CDATA[$F{river}]]></textFieldExpression> - </textField> - <textField> - <reportElement x="0" y="31" width="515" height="26"/> - <textElement> - <font size="14"/> - </textElement> - <textFieldExpression><![CDATA[$F{calculation}]]></textFieldExpression> - </textField> - <staticText> - <reportElement x="0" y="70" width="123" height="20"/> - <textElement/> - <text><![CDATA[River:]]></text> - </staticText> - <textField> - <reportElement x="123" y="70" width="392" height="20"/> - <textElement/> - <textFieldExpression><![CDATA[$F{river}]]></textFieldExpression> - </textField> - <staticText> - <reportElement x="0" y="90" width="123" height="20"/> - <textElement/> - <text><![CDATA[Reference Gauge:]]></text> - </staticText> - <textField> - <reportElement x="123" y="90" width="392" height="20"/> - <textElement/> - <textFieldExpression><![CDATA[$F{gauge}]]></textFieldExpression> - </textField> - <staticText> - <reportElement x="0" y="110" width="123" height="20"/> - <textElement/> - <text><![CDATA[Date of creation:]]></text> - </staticText> - <textField> - <reportElement x="123" y="110" width="392" height="20"/> - <textElement/> - <textFieldExpression><![CDATA[$F{date}]]></textFieldExpression> - </textField> - <staticText> - <reportElement x="0" y="130" width="123" height="20"/> - <textElement/> - <text><![CDATA[Location/Distance:]]></text> - </staticText> - <textField> - <reportElement x="123" y="130" width="392" height="20"/> - <textElement/> - <textFieldExpression><![CDATA[$F{range}]]></textFieldExpression> - </textField> - </band> - </title> - <columnHeader> - <band height="25" splitType="Stretch"> - <line> - <reportElement x="0" y="19" width="515" height="1"/> - </line> - <staticText> - <reportElement x="0" y="0" width="62" height="20"/> - <textElement/> - <text><![CDATA[River-Km]]></text> - </staticText> - <staticText> - <reportElement x="205" y="0" width="76" height="20"/> - <textElement/> - <text><![CDATA[Description]]></text> - </staticText> - <staticText> - <reportElement x="281" y="0" width="113" height="20"/> - <textElement/> - <text><![CDATA[Location]]></text> - </staticText> - <staticText> - <reportElement x="62" y="0" width="67" height="20"/> - <textElement/> - <text><![CDATA[W [NN + m]]]></text> - </staticText> - <staticText> - <reportElement x="129" y="0" width="76" height="20"/> - <textElement/> - <text><![CDATA[Q [m³/s]]]></text> - </staticText> - <staticText> - <reportElement x="394" y="0" width="121" height="20"/> - <textElement/> - <text><![CDATA[Reference Gauge]]></text> - </staticText> - </band> - </columnHeader> - <detail> - <band height="14" splitType="Stretch"> - <textField isBlankWhenNull="true"> - <reportElement x="0" y="0" width="62" height="14"/> - <textElement/> - <textFieldExpression><![CDATA[$F{km}]]></textFieldExpression> - </textField> - <textField isStretchWithOverflow="true" isBlankWhenNull="false"> - <reportElement stretchType="RelativeToBandHeight" x="205" y="0" width="76" height="14"/> - <textElement/> - <textFieldExpression><![CDATA[$F{description}]]></textFieldExpression> - </textField> - <textField isStretchWithOverflow="true" isBlankWhenNull="true"> - <reportElement stretchType="RelativeToBandHeight" x="281" y="0" width="113" height="14" isPrintWhenDetailOverflows="true"/> - <textElement/> - <textFieldExpression><![CDATA[$F{location}]]></textFieldExpression> - </textField> - <textField isBlankWhenNull="true"> - <reportElement x="62" y="0" width="67" height="14"/> - <textElement/> - <textFieldExpression><![CDATA[$F{W}]]></textFieldExpression> - </textField> - <textField isBlankWhenNull="true"> - <reportElement x="129" y="0" width="76" height="14"/> - <textElement/> - <textFieldExpression><![CDATA[$F{Q}]]></textFieldExpression> - </textField> - <textField isStretchWithOverflow="true" isBlankWhenNull="true"> - <reportElement stretchType="RelativeToBandHeight" x="394" y="0" width="121" height="14"/> - <textElement/> - <textFieldExpression><![CDATA[$F{gaugename}]]></textFieldExpression> - </textField> - </band> - </detail> - <pageFooter> - <band height="29" splitType="Stretch"> - <textField evaluationTime="Report"> - <reportElement x="458" y="9" width="57" height="20"/> - <textElement/> - <textFieldExpression><![CDATA[" / " + $V{PAGE_NUMBER}]]></textFieldExpression> - </textField> - <textField> - <reportElement x="403" y="9" width="55" height="20"/> - <textElement textAlignment="Right"/> - <textFieldExpression><![CDATA[$V{PAGE_NUMBER}]]></textFieldExpression> - </textField> - </band> - </pageFooter> - <summary> - <band height="42" splitType="Stretch"/> - </summary> -</jasperReport>
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/AbstractFixBunduArtifact.java Mon Sep 17 16:00:00 2018 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/AbstractFixBunduArtifact.java Mon Sep 17 19:07:57 2018 +0200 @@ -56,4 +56,9 @@ return wAtKm; } + + public String getCalculationModeString() { + return null; // must be implemented in inheriting classes. cannot declare this class abstract + } + } \ No newline at end of file
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/FixationArtifact.java Mon Sep 17 16:00:00 2018 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/FixationArtifact.java Mon Sep 17 19:07:57 2018 +0200 @@ -44,4 +44,9 @@ return ARTIFACT_NAME; } + @Override + public String getCalculationModeString() { + return super.getDataAsString("calculation.mode"); + } + } \ No newline at end of file
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/bundu/BUNDUArtifact.java Mon Sep 17 16:00:00 2018 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/bundu/BUNDUArtifact.java Mon Sep 17 19:07:57 2018 +0200 @@ -80,7 +80,11 @@ return ARTIFACT_NAME; } - public BunduCalcMode getCalculationMode() { + protected String getCalculationModeStr() { + return String.valueOf(getCalculationMode()); + } + + BunduCalcMode getCalculationMode() { final String calc = getDataAsString(FIELD_MODE); if (calc == null) { @@ -99,4 +103,9 @@ return getDataAsString(FIELD_RIVER); } + @Override + public String getCalculationModeString() { + return String.valueOf(getCalculationMode()); + } + } \ No newline at end of file
--- a/artifacts/src/main/java/org/dive4elements/river/exports/FixWaterlevelExporter.java Mon Sep 17 16:00:00 2018 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/exports/FixWaterlevelExporter.java Mon Sep 17 19:07:57 2018 +0200 @@ -8,34 +8,14 @@ package org.dive4elements.river.exports; -import java.io.OutputStream; import java.text.NumberFormat; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; import org.apache.log4j.Logger; import org.dive4elements.river.artifacts.D4EArtifact; -import org.dive4elements.river.artifacts.access.RangeAccess; -import org.dive4elements.river.artifacts.common.DefaultCalculationResults; -import org.dive4elements.river.artifacts.common.ExportContextPDF; -import org.dive4elements.river.artifacts.common.GeneralResultType; -import org.dive4elements.river.artifacts.common.JasperReporter; -import org.dive4elements.river.artifacts.common.MetaAndTableJRDataSource; -import org.dive4elements.river.artifacts.model.ConstantWQKms; -import org.dive4elements.river.artifacts.model.DischargeTables; -import org.dive4elements.river.artifacts.model.WQKms; -import org.dive4elements.river.artifacts.sinfo.util.CalculationUtils; -import org.dive4elements.river.artifacts.sinfo.util.RiverInfo; -import org.dive4elements.river.model.DischargeTable; import org.dive4elements.river.model.Gauge; -import org.dive4elements.river.utils.Formatter; import org.dive4elements.river.utils.RiverUtils; -import org.dive4elements.river.utils.RiverUtils.WQ_MODE; import au.com.bytecode.opencsv.CSVWriter; -import net.sf.jasperreports.engine.JRException; /** * Generates different output formats (wst, csv, pdf) of data that resulted from @@ -48,8 +28,6 @@ /** The log used in this exporter. */ private static Logger log = Logger.getLogger(FixWaterlevelExporter.class); - private final Map<String, Double> gaugeQ_W_Map = new HashMap<>(); - @Override protected void writeRow4(final CSVWriter writer, final double wqkm[], final D4EArtifact flys, final Gauge gauge, final boolean isQ) { if (!isQ) { @@ -84,34 +62,6 @@ } } - private String getWaterlevel(final double discharge, final Gauge gauge) { - final NumberFormat formatter = Formatter.getWaterlevelW(this.context); - final Double waterlevel = this.getWforGaugeAndQ(gauge, discharge); - if (waterlevel != null) - return formatter.format(waterlevel); - return ""; - } - - private Double getWforGaugeAndQ(final Gauge gauge, final double q) { - - final String key = gauge.getName() + String.valueOf(q); - if (!this.gaugeQ_W_Map.containsKey(key)) { - - final DischargeTable dt = gauge.fetchMasterDischargeTable(); - final double[][] table = DischargeTables.loadDischargeTableValues(dt); - - final double[] qs = DischargeTables.getWsForQ(table, q); - - // final DischargeTables dct = new DischargeTables(gauge.getRiver().getName(), gauge.getName()); - // final double[] qs = DischargeTables.getWsForQ(dct.getFirstTable(), q); // TODO: KLÄREN, welche Abflusstabelle - // genommen werden soll! - if (qs != null && qs.length > 0) { - this.gaugeQ_W_Map.put(key, qs[0]); - } - } - return this.gaugeQ_W_Map.get(key); - } - /** * Write the header, with different headings depending on whether at a * gauge or at a location. @@ -142,145 +92,4 @@ } } - @Override - protected void writePDF(final OutputStream out) { - - log.debug("write PDF"); - - if (!isQ()) { - super.writePDF(out); - } else { - - final MetaAndTableJRDataSource source = new MetaAndTableJRDataSource(); - final String jasperFile = "/jasper/templates/fix_waterlevel.jrxml"; // "/jasper/fix_waterlevel_en.jasper"); - - addMetaData(source); - try { - final List<String[]> sorted = getRows(); // Custom Result could be nice, too... - for (final String[] list : sorted) { - source.addData(list); - } - - final JasperReporter reporter = new JasperReporter(); - reporter.addReport(jasperFile, source); - reporter.exportPDF(out); - } - catch (final JRException je) { - log.warn("Error generating PDF Report!", je); - } - } - } - - private void addMetaData(final MetaAndTableJRDataSource source) { - final D4EArtifact flys = (D4EArtifact) this.master; - final String user = CalculationUtils.findArtifactUser(this.context, flys); - final RangeAccess ra = new RangeAccess(flys); - final RiverInfo ri = new RiverInfo(ra.getRiver()); - - final DefaultCalculationResults results = new DefaultCalculationResults(msg("calculation.analysis"), user, ri, ra.getRange()); - final ExportContextPDF contextPdf = new ExportContextPDF(this.context, results); - contextPdf.addJRMetaDataDefaults(source); - contextPdf.addJRMetaDataForModules(source); - - /* column headings */ - contextPdf.addJRMetadata(source, "station_header", GeneralResultType.station); - contextPdf.addJRMetadata(source, "fix_w", msg(CSV_W_HEADER, DEFAULT_CSV_W_HEADER, new Object[] { ri.getWstUnit() })); - contextPdf.addJRMetadata(source, "w_at_gauge_header", msg("fix.export.csv.w_at_gauge")); - contextPdf.addJRMetadata(source, "fix_q", msg(CSV_Q_HEADER)); - contextPdf.addJRMetadata(source, "waterlevel_name_header", msg("common.export.csv.header.mainvalue_label")); - contextPdf.addJRMetadata(source, "location_header", msg("common.export.csv.header.location")); - contextPdf.addJRMetadata(source, "gauge_header", msg("common.export.csv.header.gauge")); - - } - - private List<String[]> getRows() { - final List<String[]> list = new ArrayList<>(); - final WQ_MODE mode = RiverUtils.getWQMode((D4EArtifact) this.master); - final boolean atGauge = mode == WQ_MODE.QGAUGE || mode == WQ_MODE.WGAUGE; - final boolean isQ = mode == WQ_MODE.QGAUGE || mode == WQ_MODE.QFREE; - - Double first = Double.NaN; - Double last = Double.NaN; - - for (final WQKms[] tmp : this.data) { - for (final WQKms wqkms : tmp) { - list.addAll(getRows2(wqkms, atGauge, isQ)); - final double[] firstLast = wqkms.getFirstLastKM(); - if (first.isNaN()) { - /* Initialize */ - first = firstLast[0]; - last = firstLast[1]; - } - if (firstLast[0] > firstLast[1]) { - /* - * Calculating upstream we assert that it is - * impossible that the direction changes during this - * loop - */ - first = Math.max(first, firstLast[0]); - last = Math.min(last, firstLast[1]); - } else if (firstLast[0] < firstLast[1]) { - first = Math.min(first, firstLast[0]); - last = Math.max(last, firstLast[1]); - } else { - first = last = firstLast[0]; - } - } - } - - /* Append the official fixing at the bottom */ - for (final WQKms wqkms : this.officalFixings) { - list.addAll(getRows2(filterWQKms(wqkms, first, last), atGauge, isQ)); - } - return list; - } - - private List<String[]> getRows2(final WQKms wqkms, final boolean atGauge, final boolean isQ) { - log.debug("WaterlevelExporter.addWKmsData"); // OLD CODE :-/ - - final List<String[]> list = new ArrayList<>(); - // Skip constant data. - if (wqkms instanceof ConstantWQKms) { - return null; - } - - final NumberFormat kmf = getKmFormatter(); - final NumberFormat wf = getWFormatter(); - final NumberFormat qf = getQFormatter(); - - final int size = wqkms.size(); - double[] result = new double[3]; - - final D4EArtifact flys = (D4EArtifact) this.master; - final RangeAccess rangeAccess = new RangeAccess(flys); - - final Gauge gauge = rangeAccess.getRiver().determineRefGauge(rangeAccess.getKmRange(), rangeAccess.isRange()); - - final String gaugeName = gauge.getName(); - String desc = ""; - final String notinrange = msg(CSV_NOT_IN_GAUGE_RANGE, DEFAULT_CSV_NOT_IN_GAUGE_RANGE); - - final double a = gauge.getRange().getA().doubleValue(); - final double b = gauge.getRange().getB().doubleValue(); - - desc = getDesc(wqkms, isQ); - final long startTime = System.currentTimeMillis(); - - for (int i = 0; i < size; i++) { - result = wqkms.get(i, result); - final double q = result[1]; - final String waterlevel = this.getWaterlevel(q, gauge); // THIS IS NEW (and makes common super method - // difficult) - if (atGauge) { - list.add(new String[] { kmf.format(result[2]), wf.format(result[0]), waterlevel, qf.format(RiverUtils.roundQ(result[1])), desc, - RiverUtils.getLocationDescription(flys, result[2]), result[2] >= a && result[2] <= b ? gaugeName : notinrange }); - } else { - list.add(new String[] { kmf.format(result[2]), wf.format(result[0]), waterlevel, qf.format(RiverUtils.roundQ(result[1])), desc, - RiverUtils.getLocationDescription(flys, result[2]), result[2] >= a && result[2] <= b ? gaugeName : notinrange }); - } - - } - - return list; - } } \ No newline at end of file
--- a/artifacts/src/main/java/org/dive4elements/river/exports/WaterlevelExporter.java Mon Sep 17 16:00:00 2018 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/exports/WaterlevelExporter.java Mon Sep 17 19:07:57 2018 +0200 @@ -24,7 +24,6 @@ import org.apache.log4j.Logger; import org.dive4elements.artifacts.Artifact; import org.dive4elements.artifacts.CallMeta; -import org.dive4elements.artifacts.common.utils.Config; import org.dive4elements.river.artifacts.AbstractFixBunduArtifact; import org.dive4elements.river.artifacts.D4EArtifact; import org.dive4elements.river.artifacts.StaticWQKmsArtifact; @@ -32,8 +31,15 @@ import org.dive4elements.river.artifacts.access.FixRealizingAccess; import org.dive4elements.river.artifacts.access.IsOfficialAccess; import org.dive4elements.river.artifacts.access.RangeAccess; +import org.dive4elements.river.artifacts.common.DefaultCalculationResults; +import org.dive4elements.river.artifacts.common.ExportContextPDF; +import org.dive4elements.river.artifacts.common.GeneralResultType; +import org.dive4elements.river.artifacts.common.JasperDesigner; +import org.dive4elements.river.artifacts.common.JasperReporter; +import org.dive4elements.river.artifacts.common.MetaAndTableJRDataSource; import org.dive4elements.river.artifacts.model.CalculationResult; import org.dive4elements.river.artifacts.model.ConstantWQKms; +import org.dive4elements.river.artifacts.model.DischargeTables; import org.dive4elements.river.artifacts.model.Segment; import org.dive4elements.river.artifacts.model.WKmsJRDataSource; import org.dive4elements.river.artifacts.model.WQCKms; @@ -41,6 +47,9 @@ import org.dive4elements.river.artifacts.model.WQKmsResult; import org.dive4elements.river.artifacts.model.WstLine; import org.dive4elements.river.artifacts.resources.Resources; +import org.dive4elements.river.artifacts.sinfo.util.CalculationUtils; +import org.dive4elements.river.artifacts.sinfo.util.RiverInfo; +import org.dive4elements.river.model.DischargeTable; import org.dive4elements.river.model.Gauge; import org.dive4elements.river.utils.Formatter; import org.dive4elements.river.utils.RiverUtils; @@ -49,9 +58,6 @@ import au.com.bytecode.opencsv.CSVWriter; import gnu.trove.TDoubleArrayList; import net.sf.jasperreports.engine.JRException; -import net.sf.jasperreports.engine.JasperExportManager; -import net.sf.jasperreports.engine.JasperFillManager; -import net.sf.jasperreports.engine.JasperPrint; /** * Generates different output formats (wst, csv, pdf) of data that resulted from @@ -129,7 +135,6 @@ public static final String DEFAULT_CSV_NOT_IN_GAUGE_RANGE = "außerhalb des gewählten Bezugspegels"; protected static final String PDF_HEADER_MODE = "export.waterlevel.pdf.mode"; - private static final String JASPER_FILE = "export.waterlevel.pdf.file"; /** The storage that contains all WQKms objects that are calculated. */ public List<WQKms[]> data; @@ -137,6 +142,8 @@ /** The storage that contains official fixings if available. */ public List<WQKms> officalFixings; + private final Map<String, Double> gaugeQ_W_Map = new HashMap<>(); + public WaterlevelExporter() { this.data = new ArrayList<>(); } @@ -308,7 +315,7 @@ } } - protected final boolean isQ() { + private final boolean isQ() { final WQ_MODE mode = RiverUtils.getWQMode((D4EArtifact) this.master); return mode == WQ_MODE.QGAUGE || mode == WQ_MODE.QFREE; } @@ -571,6 +578,16 @@ return colDesc == null ? "" : colDesc; } + private List<Segment> getSegments(final D4EArtifact flys) { + if (flys instanceof AbstractFixBunduArtifact) { + // Get W/Q input per gauge for this case. + final FixRealizingAccess fixAccess = new FixRealizingAccess(flys); + return fixAccess.getSegments(); + + } + return null; + } + /** * Write "rows" of csv data from wqkms with writer. */ @@ -596,8 +613,6 @@ // (it seems to) String desc = ""; final String notinrange = msg(CSV_NOT_IN_GAUGE_RANGE, DEFAULT_CSV_NOT_IN_GAUGE_RANGE); - List<Segment> segments = null; - boolean isFixRealize = false; final double a = gauge.getRange().getA().doubleValue(); final double b = gauge.getRange().getB().doubleValue(); @@ -605,15 +620,11 @@ desc = getDesc(wqkms, isQ); - if (flys instanceof AbstractFixBunduArtifact) { - // Get W/Q input per gauge for this case. - final FixRealizingAccess fixAccess = new FixRealizingAccess(flys); - segments = fixAccess.getSegments(); - if (segments != null && !segments.isEmpty()) { - isFixRealize = true; - } + boolean isFixRealize = false; + final List<Segment> segments = getSegments(flys); + if (segments != null && !segments.isEmpty()) { + isFixRealize = true; } - if (atGauge) { // "At gauge" needs more output. // Kms tend to be close together so caching the last sector @@ -757,27 +768,176 @@ } } - public void doWritePdf(final WKmsJRDataSource source, final String jasperFile) { - - final String confPath = Config.getConfigDirectory().toString(); + @Override + protected void writePDF(final OutputStream out) { + log.debug("write PDF"); - final Map parameters = new HashMap(); - parameters.put("ReportTitle", "Exported Data"); + final boolean isQ = isQ(); + final MetaAndTableJRDataSource source = new MetaAndTableJRDataSource(); + final String jasperFile = !isQ ? "/jasper/templates/waterlevel_new.jrxml" : "/jasper/templates/fix_waterlevel.jrxml"; + + ((D4EArtifact) this.master).getData("calculation.mode"); + if ((this.master instanceof WINFOArtifact)) { + addMetaData(source, "calc.surface.curve"); // Wasserspiegellage + } else if + + (this.master instanceof AbstractFixBunduArtifact) { + addMetaData(source, ((AbstractFixBunduArtifact) this.master).getCalculationModeString());// "calculation.vollmer"); // ausgelagerte + // Wasserspiegellage + // else + // addMetaData(source, "calculation.analysis"); // Fixierungsanalyse + } + try { - final JasperPrint print = JasperFillManager.fillReport(confPath + jasperFile, parameters, source); - JasperExportManager.exportReportToPdfStream(print, this.out); + final List<String[]> sorted = getRows(); // Custom Result could be nice, too... + for (final String[] list : sorted) { + source.addData(list); + } + + final JasperReporter reporter = new JasperReporter(); + + final JasperDesigner d = reporter.addReport(jasperFile, source); + d.removeColumn("delete"); // I don't want to mess with getRows(), so I prefer deleting the unwanted row directly in the report. + + reporter.exportPDF(this.out); } catch (final JRException je) { log.warn("Error generating PDF Report!", je); } + } - @Override - protected void writePDF(final OutputStream out) { - log.debug("write PDF"); - final WKmsJRDataSource source = createJRData(); - final String jasperFile = Resources.getMsg(this.context.getMeta(), JASPER_FILE, "/jasper/waterlevel_en.jasper"); - doWritePdf(source, jasperFile); + private List<String[]> getRows() { + final List<String[]> list = new ArrayList<>(); + final WQ_MODE mode = RiverUtils.getWQMode((D4EArtifact) this.master); + final boolean atGauge = mode == WQ_MODE.QGAUGE || mode == WQ_MODE.WGAUGE; + final boolean isQ = mode == WQ_MODE.QGAUGE || mode == WQ_MODE.QFREE; + + Double first = Double.NaN; + Double last = Double.NaN; + + for (final WQKms[] tmp : this.data) { + for (final WQKms wqkms : tmp) { + list.addAll(getRows2(wqkms, atGauge, isQ)); + final double[] firstLast = wqkms.getFirstLastKM(); + if (first.isNaN()) { + /* Initialize */ + first = firstLast[0]; + last = firstLast[1]; + } + if (firstLast[0] > firstLast[1]) { + /* + * Calculating upstream we assert that it is + * impossible that the direction changes during this + * loop + */ + first = Math.max(first, firstLast[0]); + last = Math.min(last, firstLast[1]); + } else if (firstLast[0] < firstLast[1]) { + first = Math.min(first, firstLast[0]); + last = Math.max(last, firstLast[1]); + } else { + first = last = firstLast[0]; + } + } + } + + /* Append the official fixing at the bottom */ + for (final WQKms wqkms : this.officalFixings) { + list.addAll(getRows2(filterWQKms(wqkms, first, last), atGauge, isQ)); + } + return list; + } + + private List<String[]> getRows2(final WQKms wqkms, final boolean atGauge, final boolean isQ) { + log.debug("WaterlevelExporter.addWKmsData"); // OLD CODE :-/ + + final List<String[]> list = new ArrayList<>(); + // Skip constant data. + if (wqkms instanceof ConstantWQKms) { + return null; + } + + final NumberFormat kmf = getKmFormatter(); + final NumberFormat wf = getWFormatter(); + final NumberFormat qf = getQFormatter(); + + final int size = wqkms.size(); + double[] result = new double[3]; + + final D4EArtifact flys = (D4EArtifact) this.master; + final RangeAccess rangeAccess = new RangeAccess(flys); + + final Gauge gauge = rangeAccess.getRiver().determineRefGauge(rangeAccess.getKmRange(), rangeAccess.isRange()); + + final String gaugeName = gauge.getName(); + String desc = ""; + final String notinrange = msg(CSV_NOT_IN_GAUGE_RANGE, DEFAULT_CSV_NOT_IN_GAUGE_RANGE); + + final double a = gauge.getRange().getA().doubleValue(); + final double b = gauge.getRange().getB().doubleValue(); + final WaterlevelDescriptionBuilder wldb = new WaterlevelDescriptionBuilder(flys, this.context); + + desc = wldb.getDesc(wqkms);// class getDesc(wqkms, isQ); + + Segment lastSegment = null; + final Gauge lastGauge = null; + final List<Segment> segments = getSegments(flys); + + final NumberFormat nf = Formatter.getFormatter(this.context.getMeta(), 0, 0); + + for (int i = 0; i < size; ++i) { + result = wqkms.get(i, result); + final double km = result[2]; + + if (segments != null) { + final Segment found = lastSegment != null && lastSegment.inside(km) ? lastSegment : findSegment(km, segments); + + if (found != null) { + desc = nf.format(found.getValues()[0]); + } + lastSegment = found; + } + + final double q = result[1]; + final String waterlevel = this.getWaterlevel(q, gauge); // THIS IS NEW (and makes common super method + // difficult) + if (atGauge) { + list.add(new String[] { kmf.format(result[2]), wf.format(result[0]), waterlevel, qf.format(RiverUtils.roundQ(result[1])), desc, + RiverUtils.getLocationDescription(flys, result[2]), result[2] >= a && result[2] <= b ? gaugeName : notinrange }); + } else { + list.add(new String[] { kmf.format(result[2]), wf.format(result[0]), waterlevel, qf.format(RiverUtils.roundQ(result[1])), desc, + RiverUtils.getLocationDescription(flys, result[2]), result[2] >= a && result[2] <= b ? gaugeName : notinrange }); + } + + } + + return list; + } + + protected final void addMetaData(final MetaAndTableJRDataSource source, final String calculation) { + final D4EArtifact flys = (D4EArtifact) this.master; + final String user = CalculationUtils.findArtifactUser(this.context, flys); + final RangeAccess ra = new RangeAccess(flys); + final RiverInfo ri = new RiverInfo(ra.getRiver()); + + final DefaultCalculationResults results = new DefaultCalculationResults(msg(calculation), user, ri, ra.getRange()); + final ExportContextPDF contextPdf = new ExportContextPDF(this.context, results); + contextPdf.addJRMetaDataDefaults(source); + contextPdf.addJRMetaDataForModules(source); + + /* column headings */ + contextPdf.addJRMetadata(source, "station_header", GeneralResultType.station); + contextPdf.addJRMetadata(source, "fix_w", msg(CSV_W_HEADER, DEFAULT_CSV_W_HEADER, new Object[] { ri.getWstUnit() })); + contextPdf.addJRMetadata(source, "w_at_gauge_header", msg("fix.export.csv.w_at_gauge")); + contextPdf.addJRMetadata(source, "fix_q", msg(CSV_Q_HEADER)); + contextPdf.addJRMetadata(source, "waterlevel_name_header", msg("common.export.csv.header.mainvalue_label")); + contextPdf.addJRMetadata(source, "location_header", msg("common.export.csv.header.location")); + + contextPdf.addJRMetadata(source, "w_at_gauge_header_2", msg("export.waterlevel.csv.header.w.desc")); + + contextPdf.addJRMetadata(source, "location_header", msg("common.export.csv.header.location")); + contextPdf.addJRMetadata(source, "gauge_header", msg("common.export.csv.header.gauge")); } @@ -901,5 +1061,33 @@ } } + protected final String getWaterlevel(final double discharge, final Gauge gauge) { + final NumberFormat formatter = Formatter.getWaterlevelW(this.context); + final Double waterlevel = this.getWforGaugeAndQ(gauge, discharge); + if (waterlevel != null) + return formatter.format(waterlevel); + return ""; + } + + private Double getWforGaugeAndQ(final Gauge gauge, final double q) { + + final String key = gauge.getName() + String.valueOf(q); + if (!this.gaugeQ_W_Map.containsKey(key)) { + + final DischargeTable dt = gauge.fetchMasterDischargeTable(); + final double[][] table = DischargeTables.loadDischargeTableValues(dt); + + final double[] qs = DischargeTables.getWsForQ(table, q); + + // final DischargeTables dct = new DischargeTables(gauge.getRiver().getName(), gauge.getName()); + // final double[] qs = DischargeTables.getWsForQ(dct.getFirstTable(), q); // TODO: KLÄREN, welche Abflusstabelle + // genommen werden soll! + if (qs != null && qs.length > 0) { + this.gaugeQ_W_Map.put(key, qs[0]); + } + } + return this.gaugeQ_W_Map.get(key); + } + } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
--- a/artifacts/src/main/resources/messages.properties Mon Sep 17 16:00:00 2018 +0200 +++ b/artifacts/src/main/resources/messages.properties Mon Sep 17 19:07:57 2018 +0200 @@ -443,7 +443,6 @@ export.reference_curve.pdf.mode = Reference Curve export.computed.discharge.pdf.file = /jasper/computed-discharge_en.jasper export.duration.pdf.file = /jasper/duration_en.jasper -export.waterlevel.pdf.file = /jasper/waterlevel_en.jasper export.wdifferences.pdf.file = /jasper/wdifferences_en.jasper export.historical.discharge.pdf.file = /jasper/historical-discharge_en.jasper export.reference_curve.pdf.file = /jasper/reference_en.jasper @@ -681,6 +680,7 @@ fix.mhq=around MHQ fix.hq5=over HQ5 fix.export.csv.w_at_gauge = W at Gauge [cm] +export.waterlevel.csv.header.w.desc = W/Gauge [cm] chart.fix.deltawt.title=Difference from compensating curve at kilometer {0} chart.fix.deltawt.subtitle=Water: {0}; Period: {1,date,short} to {2,date,short}; Reference period: {3,date,short} to {4,date,short}
--- a/artifacts/src/main/resources/messages_de.properties Mon Sep 17 16:00:00 2018 +0200 +++ b/artifacts/src/main/resources/messages_de.properties Mon Sep 17 19:07:57 2018 +0200 @@ -443,7 +443,6 @@ export.reference_curve.pdf.mode = Bezugslinie export.computed.discharge.pdf.file = /jasper/computed-discharge.jasper export.duration.pdf.file = /jasper/duration.jasper -export.waterlevel.pdf.file = /jasper/waterlevel.jasper export.wdifferences.pdf.file = /jasper/wdifferences.jasper export.historical.discharge.pdf.file = /jasper/historical-discharge.jasper export.reference_curve.pdf.file = /jasper/reference.jasper @@ -681,6 +680,7 @@ fix.mhq=um MHQ fix.hq5=um HQ5 fix.export.csv.w_at_gauge = W am Pegel [cm] +export.waterlevel.csv.header.w.desc = W/Pegel [cm] chart.fix.deltawt.title=Abweichungen von der Ausgleichskurve an Kilometer {0} chart.fix.deltawt.subtitle=Gew\u00e4sser: {0}; Darstellungszeitraum: {1,date,short} bis {2,date,short}; Bezugszeitraum: {3,date,short} bis {4,date,short}