[PATCH 2 of 2] Zusammenführen
Wald Commits
scm-commit at wald.intevation.org
Wed Apr 11 14:24:29 CEST 2018
# HG changeset patch
# User gernotbelger
# Date 1523449201 -7200
# Node ID 2bb38e25091bfab248f5d4beafbe4ecd9587a454
# Parent 0adc6d04de95d172eab6c63016cadd3f4e041c80
# Parent d046997281bc8c13d7a770fea3f442b425a46bff
Zusammenführen
diff -r 0adc6d04de95 -r 2bb38e25091b artifacts/doc/conf/jasper/sinfo.flowdepth.jasper
Binary file artifacts/doc/conf/jasper/sinfo.flowdepth.jasper has changed
diff -r 0adc6d04de95 -r 2bb38e25091b artifacts/doc/conf/jasper/sinfo.flowdepthdevelopment.jasper
Binary file artifacts/doc/conf/jasper/sinfo.flowdepthdevelopment.jasper has changed
diff -r 0adc6d04de95 -r 2bb38e25091b artifacts/doc/conf/jasper/sinfo.flowdepthminmax.jasper
Binary file artifacts/doc/conf/jasper/sinfo.flowdepthminmax.jasper has changed
diff -r 0adc6d04de95 -r 2bb38e25091b artifacts/doc/conf/jasper/sinfo.tkh.jasper
Binary file artifacts/doc/conf/jasper/sinfo.tkh.jasper has changed
diff -r 0adc6d04de95 -r 2bb38e25091b artifacts/doc/conf/jasper/templates/sinfo.flowdepth.jrxml
--- a/artifacts/doc/conf/jasper/templates/sinfo.flowdepth.jrxml Wed Apr 11 14:09:13 2018 +0200
+++ b/artifacts/doc/conf/jasper/templates/sinfo.flowdepth.jrxml Wed Apr 11 14:20:01 2018 +0200
@@ -1,11 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
+<!-- Created with Jaspersoft Studio version 6.5.1.final using JasperReports Library version 4.5.0 -->
+<!-- 2018-04-06T11:41:23 -->
<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="842" pageHeight="595" 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"/>
-
- <style name="htmlStyle" markup="html" />
-
+ <style name="htmlStyle" markup="html"/>
<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"/>
@@ -18,7 +18,6 @@
<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:station_header" class="java.lang.String"/>
<field name="meta:flowdepth_header" class="java.lang.String"/>
<field name="meta:flowdepth_tkh_header" class="java.lang.String"/>
@@ -31,7 +30,6 @@
<field name="meta:sounding_name_header" class="java.lang.String"/>
<field name="meta:location_header" class="java.lang.String"/>
<field name="meta:river_unit" 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"/>
@@ -43,22 +41,11 @@
<field name="data:8" class="java.lang.String"/>
<field name="data:9" class="java.lang.String"/>
<field name="data:10" class="java.lang.String"/>
-
-<!--
- <field name="data:6" class="java.lang.String"/>
- <field name="data:7" class="java.lang.String"/>
- <field name="data:8" class="java.lang.String"/>
- <field name="data:9" class="java.lang.String"/>
- <field name="data:10" class="java.lang.String"/>
- <field name="data:11" class="java.lang.String"/>
--->
-
<background>
<band splitType="Stretch"/>
</background>
<title>
- <band height="182" splitType="Stretch">
-
+ <band height="170" splitType="Stretch">
<textField>
<reportElement x="0" y="1" width="515" height="30"/>
<textElement>
@@ -66,188 +53,193 @@
</textElement>
<textFieldExpression><![CDATA[$F{meta:header} + " " + $F{meta:river}]]></textFieldExpression>
</textField>
-
<textField>
<reportElement x="0" y="40" width="165" height="20"/>
- <textElement/>
<textFieldExpression><![CDATA[$F{meta:calcMode}]]></textFieldExpression>
</textField>
-
<textField>
<reportElement x="0" y="70" width="123" height="20"/>
- <textElement/>
<textFieldExpression><![CDATA[$F{meta:version_label} + ":"]]></textFieldExpression>
</textField>
<textField>
<reportElement x="123" y="70" width="392" height="20"/>
- <textElement/>
<textFieldExpression><![CDATA[$F{meta:version}]]></textFieldExpression>
</textField>
-
<textField>
<reportElement x="0" y="90" width="123" height="20"/>
- <textElement/>
<textFieldExpression><![CDATA[$F{meta:user_label} + ":"]]></textFieldExpression>
</textField>
<textField>
<reportElement x="123" y="90" width="392" height="20"/>
- <textElement/>
<textFieldExpression><![CDATA[$F{meta:user}]]></textFieldExpression>
</textField>
-
<textField>
<reportElement x="0" y="110" width="123" height="20"/>
- <textElement/>
<textFieldExpression><![CDATA[$F{meta:date_label} + ":"]]></textFieldExpression>
</textField>
<textField>
<reportElement x="123" y="110" width="392" height="20"/>
- <textElement/>
<textFieldExpression><![CDATA[$F{meta:date}]]></textFieldExpression>
</textField>
-
<textField>
<reportElement x="0" y="130" width="123" height="20"/>
- <textElement/>
<textFieldExpression><![CDATA[$F{meta:river_label} + ":"]]></textFieldExpression>
</textField>
<textField>
<reportElement x="123" y="130" width="392" height="20"/>
- <textElement/>
<textFieldExpression><![CDATA[$F{meta:river}]]></textFieldExpression>
</textField>
-
<textField>
<reportElement x="0" y="150" width="123" height="20"/>
- <textElement/>
<textFieldExpression><![CDATA[$F{meta:range_label} + ":"]]></textFieldExpression>
</textField>
-
-
<textField>
<reportElement x="123" y="150" width="392" height="20"/>
- <textElement/>
<textFieldExpression><![CDATA[$F{meta:range}]]></textFieldExpression>
</textField>
</band>
</title>
<columnHeader>
- <band height="30" splitType="Stretch">
+ <band height="25" splitType="Stretch">
<line>
- <reportElement x="0" y="29" width="762" height="1"/>
+ <reportElement positionType="FixRelativeToBottom" x="0" y="24" width="762" height="1"/>
</line>
- <textField>
- <reportElement x="0" y="0" width="50" height="30" style="htmlStyle"/>
- <textElement/>
+ <textField isStretchWithOverflow="true">
+ <reportElement style="htmlStyle" positionType="Float" stretchType="RelativeToBandHeight" x="0" y="0" width="50" height="24"/>
+ <box padding="5"/>
+ <textElement textAlignment="Right" verticalAlignment="Bottom"/>
<textFieldExpression><![CDATA[$F{meta:station_header}]]></textFieldExpression>
</textField>
- <textField>
- <reportElement x="50" y="0" width="50" height="30" style="htmlStyle"/>
- <textElement />
+ <textField isStretchWithOverflow="true">
+ <reportElement style="htmlStyle" positionType="Float" stretchType="RelativeToBandHeight" x="50" y="0" width="55" height="24"/>
+ <box padding="5"/>
+ <textElement textAlignment="Right" verticalAlignment="Bottom"/>
<textFieldExpression><![CDATA[$F{meta:flowdepth_header} + "<br/>[m]"]]></textFieldExpression>
</textField>
- <textField>
- <reportElement x="100" y="0" width="85" height="30" style="htmlStyle"/>
- <textElement/>
- <textFieldExpression><![CDATA[$F{meta:flowdepth_tkh_header} + "<br/>[m]"]]></textFieldExpression>
+ <textField isStretchWithOverflow="true">
+ <reportElement style="htmlStyle" positionType="Float" stretchType="RelativeToBandHeight" x="105" y="0" width="54" height="24"/>
+ <box padding="5"/>
+ <textElement textAlignment="Right" verticalAlignment="Bottom"/>
+ <textFieldExpression><![CDATA[$F{meta:flowdepth_tkh_header} + " [m]"]]></textFieldExpression>
</textField>
- <textField>
- <reportElement x="185" y="0" width="25" height="30" style="htmlStyle"/>
- <textElement/>
+ <textField isStretchWithOverflow="true">
+ <reportElement style="htmlStyle" positionType="Float" stretchType="RelativeToBandHeight" x="159" y="0" width="31" height="24"/>
+ <box padding="5"/>
+ <textElement textAlignment="Right" verticalAlignment="Bottom"/>
<textFieldExpression><![CDATA[$F{meta:tkh_header} + "<br/>[cm]"]]></textFieldExpression>
</textField>
- <textField>
- <reportElement x="210" y="0" width="65" height="30" style="htmlStyle"/>
- <textElement/>
- <textFieldExpression><![CDATA[$F{meta:waterlevel_header} + "[" + $F{meta:river_unit} + "]"]]></textFieldExpression>
+ <textField isStretchWithOverflow="true">
+ <reportElement style="htmlStyle" positionType="Float" stretchType="RelativeToBandHeight" x="190" y="0" width="60" height="24"/>
+ <box padding="5">
+ <pen lineStyle="Solid"/>
+ </box>
+ <textElement textAlignment="Right" verticalAlignment="Bottom"/>
+ <textFieldExpression><![CDATA[$F{meta:waterlevel_header} + "<br/>[" + $F{meta:river_unit} + "]"]]></textFieldExpression>
</textField>
- <textField>
- <reportElement x="275" y="0" width="40" height="30" style="htmlStyle"/>
- <textElement/>
+ <textField isStretchWithOverflow="true">
+ <reportElement style="htmlStyle" positionType="Float" stretchType="RelativeToBandHeight" x="250" y="0" width="40" height="24"/>
+ <box padding="5"/>
+ <textElement textAlignment="Right" verticalAlignment="Bottom"/>
<textFieldExpression><![CDATA[$F{meta:discharge_header} + "<br/>[m³/s]"]]></textFieldExpression>
</textField>
- <textField>
- <reportElement x="315" y="0" width="85" height="30" style="htmlStyle"/>
- <textElement/>
+ <textField isStretchWithOverflow="true">
+ <reportElement style="htmlStyle" positionType="Float" stretchType="RelativeToBandHeight" x="290" y="0" width="80" height="24"/>
+ <box padding="5"/>
+ <textElement verticalAlignment="Bottom"/>
<textFieldExpression><![CDATA[$F{meta:waterlevel_name_header}]]></textFieldExpression>
</textField>
- <textField>
- <reportElement x="400" y="0" width="100" height="30" style="htmlStyle"/>
- <textElement/>
+ <textField isStretchWithOverflow="true">
+ <reportElement style="htmlStyle" positionType="Float" stretchType="RelativeToBandHeight" x="370" y="0" width="115" height="24"/>
+ <box padding="5"/>
+ <textElement verticalAlignment="Bottom"/>
<textFieldExpression><![CDATA[$F{meta:gauge_header}]]></textFieldExpression>
</textField>
- <textField>
- <reportElement x="500" y="0" width="65" height="30" style="htmlStyle"/>
- <textElement/>
- <textFieldExpression><![CDATA[$F{meta:bedheight_header} + "[" + $F{meta:river_unit} + "]"]]></textFieldExpression>
+ <textField isStretchWithOverflow="true">
+ <reportElement style="htmlStyle" positionType="Float" stretchType="RelativeToBandHeight" x="485" y="0" width="60" height="24"/>
+ <box padding="5"/>
+ <textElement textAlignment="Right" verticalAlignment="Bottom"/>
+ <textFieldExpression><![CDATA[$F{meta:bedheight_header} + "<br/>[" + $F{meta:river_unit} + "]"]]></textFieldExpression>
</textField>
- <textField>
- <reportElement x="565" y="0" width="85" height="30" style="htmlStyle"/>
- <textElement/>
- <textFieldExpression><![CDATA[$F{meta:sounding_name_header}]]></textFieldExpression>
- </textField>
- <textField>
- <reportElement x="650" y="0" width="110" height="30" style="htmlStyle"/>
- <textElement/>
+ <textField isStretchWithOverflow="true">
+ <reportElement style="htmlStyle" positionType="Float" stretchType="RelativeToBandHeight" x="545" y="0" width="85" height="24"/>
+ <box padding="5"/>
+ <textElement verticalAlignment="Bottom"/>
+ <textFieldExpression><![CDATA[$F{meta:sounding_name_header}]]></textFieldExpression>
+ </textField>
+ <textField isStretchWithOverflow="true">
+ <reportElement style="htmlStyle" positionType="Float" stretchType="RelativeToBandHeight" x="630" y="0" width="132" height="24"/>
+ <box padding="5"/>
+ <textElement verticalAlignment="Bottom"/>
<textFieldExpression><![CDATA[$F{meta:location_header}]]></textFieldExpression>
</textField>
</band>
</columnHeader>
<detail>
- <band height="14" splitType="Stretch">
- <textField isBlankWhenNull="true">
- <reportElement x="0" y="0" width="40" height="14"/>
- <textElement textAlignment="Right"/>
+ <band height="20" splitType="Prevent">
+ <textField isStretchWithOverflow="true" isBlankWhenNull="true">
+ <reportElement positionType="Float" stretchType="RelativeToBandHeight" x="0" y="0" width="50" height="20"/>
+ <box topPadding="5" leftPadding="5" bottomPadding="0" rightPadding="5"/>
+ <textElement textAlignment="Right" verticalAlignment="Top"/>
<textFieldExpression><![CDATA[$F{data:0}]]></textFieldExpression>
</textField>
- <textField isBlankWhenNull="true">
- <reportElement x="50" y="0" width="40" height="14" />
- <textElement textAlignment="Right"/>
+ <textField isStretchWithOverflow="true" isBlankWhenNull="true">
+ <reportElement positionType="Float" stretchType="RelativeToBandHeight" x="50" y="0" width="55" height="20"/>
+ <box topPadding="5" leftPadding="5" bottomPadding="0" rightPadding="5"/>
+ <textElement textAlignment="Right" verticalAlignment="Top"/>
<textFieldExpression><![CDATA[$F{data:1}]]></textFieldExpression>
</textField>
- <textField isBlankWhenNull="true">
- <reportElement x="100" y="0" width="75" height="14"/>
- <textElement textAlignment="Right"/>
+ <textField isStretchWithOverflow="true" isBlankWhenNull="true">
+ <reportElement positionType="Float" stretchType="RelativeToBandHeight" x="105" y="0" width="54" height="20"/>
+ <box topPadding="5" leftPadding="5" bottomPadding="0" rightPadding="5"/>
+ <textElement textAlignment="Right" verticalAlignment="Top"/>
<textFieldExpression><![CDATA[$F{data:2}]]></textFieldExpression>
</textField>
- <textField isBlankWhenNull="true">
- <reportElement x="185" y="0" width="15" height="14"/>
- <textElement textAlignment="Right"/>
+ <textField isStretchWithOverflow="true" isBlankWhenNull="true">
+ <reportElement positionType="Float" stretchType="RelativeToBandHeight" x="159" y="0" width="31" height="20"/>
+ <box topPadding="5" leftPadding="5" bottomPadding="0" rightPadding="5"/>
+ <textElement textAlignment="Right" verticalAlignment="Top"/>
<textFieldExpression><![CDATA[$F{data:3}]]></textFieldExpression>
</textField>
- <textField isBlankWhenNull="true">
- <reportElement x="210" y="0" width="55" height="14"/>
- <textElement textAlignment="Right"/>
+ <textField isStretchWithOverflow="true" isBlankWhenNull="true">
+ <reportElement positionType="Float" stretchType="RelativeToBandHeight" x="190" y="0" width="60" height="20"/>
+ <box topPadding="5" leftPadding="5" bottomPadding="0" rightPadding="5"/>
+ <textElement textAlignment="Right" verticalAlignment="Top"/>
<textFieldExpression><![CDATA[$F{data:4}]]></textFieldExpression>
</textField>
- <textField isBlankWhenNull="true">
- <reportElement x="275" y="0" width="30" height="14"/>
- <textElement textAlignment="Right"/>
+ <textField isStretchWithOverflow="true" isBlankWhenNull="true">
+ <reportElement positionType="Float" stretchType="RelativeToBandHeight" x="250" y="0" width="40" height="20"/>
+ <box topPadding="5" leftPadding="5" bottomPadding="0" rightPadding="5"/>
+ <textElement textAlignment="Right" verticalAlignment="Top"/>
<textFieldExpression><![CDATA[$F{data:5}]]></textFieldExpression>
</textField>
- <textField isBlankWhenNull="true">
- <reportElement x="315" y="0" width="85" height="14"/>
- <textElement/>
+ <textField isStretchWithOverflow="true" isBlankWhenNull="true">
+ <reportElement positionType="Float" stretchType="RelativeToBandHeight" x="290" y="0" width="80" height="20"/>
+ <box topPadding="5" leftPadding="5" bottomPadding="0" rightPadding="5"/>
+ <textElement verticalAlignment="Top"/>
<textFieldExpression><![CDATA[$F{data:6}]]></textFieldExpression>
</textField>
- <textField isBlankWhenNull="true">
- <reportElement x="400" y="0" width="100" height="14"/>
- <textElement/>
+ <textField isStretchWithOverflow="true" isBlankWhenNull="true">
+ <reportElement positionType="Float" stretchType="RelativeToBandHeight" x="370" y="0" width="115" height="20"/>
+ <box topPadding="5" leftPadding="5" bottomPadding="0" rightPadding="5"/>
+ <textElement verticalAlignment="Top"/>
<textFieldExpression><![CDATA[$F{data:7}]]></textFieldExpression>
</textField>
- <textField isBlankWhenNull="true">
- <reportElement x="500" y="0" width="55" height="14"/>
- <textElement textAlignment="Right"/>
+ <textField isStretchWithOverflow="true" isBlankWhenNull="true">
+ <reportElement positionType="Float" stretchType="RelativeToBandHeight" x="485" y="0" width="60" height="20"/>
+ <box topPadding="5" leftPadding="5" rightPadding="5"/>
+ <textElement textAlignment="Right" verticalAlignment="Top"/>
<textFieldExpression><![CDATA[$F{data:8}]]></textFieldExpression>
</textField>
- <textField isBlankWhenNull="true">
- <reportElement x="565" y="0" width="85" height="14"/>
- <textElement/>
+ <textField isStretchWithOverflow="true" isBlankWhenNull="true">
+ <reportElement positionType="Float" stretchType="RelativeToBandHeight" x="545" y="0" width="85" height="20"/>
+ <box topPadding="5" leftPadding="5" bottomPadding="0" rightPadding="5"/>
+ <textElement verticalAlignment="Top"/>
<textFieldExpression><![CDATA[$F{data:9}]]></textFieldExpression>
</textField>
- <textField isBlankWhenNull="true">
- <reportElement x="650" y="0" width="110" height="14" stretchType="RelativeToBandHeight"/>
- <textElement/>
+ <textField isStretchWithOverflow="true" isBlankWhenNull="true">
+ <reportElement positionType="Float" stretchType="RelativeToBandHeight" x="630" y="0" width="132" height="20"/>
+ <box topPadding="5" leftPadding="5" bottomPadding="0" rightPadding="5"/>
+ <textElement verticalAlignment="Top"/>
<textFieldExpression><![CDATA[$F{data:10}]]></textFieldExpression>
</textField>
</band>
@@ -256,7 +248,6 @@
<band height="29" splitType="Stretch">
<textField evaluationTime="Report">
<reportElement x="705" y="9" width="57" height="20"/>
- <textElement/>
<textFieldExpression><![CDATA[" / " + $V{PAGE_NUMBER}]]></textFieldExpression>
</textField>
<textField>
diff -r 0adc6d04de95 -r 2bb38e25091b artifacts/doc/conf/jasper/templates/sinfo.flowdepthdevelopment.jrxml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/artifacts/doc/conf/jasper/templates/sinfo.flowdepthdevelopment.jrxml Wed Apr 11 14:20:01 2018 +0200
@@ -0,0 +1,272 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Created with Jaspersoft Studio version 6.5.1.final using JasperReports Library version 4.5.0 -->
+<!-- 2018-04-05T10:22:02 -->
+<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="842" pageHeight="595" 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"/>
+ <property name="com.jaspersoft.studio.data.defaultdataadapter" value="One Empty Record"/>
+ <style name="htmlStyle" isDefault="true" mode="Transparent" markup="html"/>
+ <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: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:flowdepthdevelopment_header_label" class="java.lang.String"/>
+ <field name="meta:flowdepth_tkh_header" class="java.lang.String"/>
+ <field name="meta:tkh_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:river_unit" 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"/>
+ <field name="data:7" class="java.lang.String"/>
+ <background>
+ <band splitType="Stretch"/>
+ </background>
+ <title>
+ <band height="222" splitType="Stretch">
+ <textField>
+ <reportElement style="htmlStyle" x="0" y="1" 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="40" width="165" height="20"/>
+ <textFieldExpression><![CDATA[$F{meta:calcMode}]]></textFieldExpression>
+ </textField>
+ <textField>
+ <reportElement style="htmlStyle" x="0" y="70" width="123" height="20"/>
+ <textFieldExpression><![CDATA[$F{meta:version_label} + ":"]]></textFieldExpression>
+ </textField>
+ <textField>
+ <reportElement style="htmlStyle" x="123" y="70" width="392" height="20"/>
+ <textFieldExpression><![CDATA[$F{meta:version}]]></textFieldExpression>
+ </textField>
+ <textField>
+ <reportElement style="htmlStyle" x="0" y="90" width="123" height="20"/>
+ <textFieldExpression><![CDATA[$F{meta:user_label} + ":"]]></textFieldExpression>
+ </textField>
+ <textField>
+ <reportElement style="htmlStyle" x="123" y="90" width="392" height="20"/>
+ <textFieldExpression><![CDATA[$F{meta:user}]]></textFieldExpression>
+ </textField>
+ <textField>
+ <reportElement style="htmlStyle" x="0" y="110" width="123" height="20"/>
+ <textFieldExpression><![CDATA[$F{meta:date_label} + ":"]]></textFieldExpression>
+ </textField>
+ <textField>
+ <reportElement style="htmlStyle" x="123" y="110" width="392" height="20"/>
+ <textFieldExpression><![CDATA[$F{meta:date}]]></textFieldExpression>
+ </textField>
+ <textField>
+ <reportElement style="htmlStyle" x="0" y="130" width="123" height="20"/>
+ <textFieldExpression><![CDATA[$F{meta:river_label} + ":"]]></textFieldExpression>
+ </textField>
+ <textField>
+ <reportElement style="htmlStyle" x="123" y="130" width="392" height="20"/>
+ <textFieldExpression><![CDATA[$F{meta:river}]]></textFieldExpression>
+ </textField>
+ <textField>
+ <reportElement style="htmlStyle" x="0" y="150" width="123" height="20"/>
+ <textFieldExpression><![CDATA[$F{meta:range_label} + ":"]]></textFieldExpression>
+ </textField>
+ <textField>
+ <reportElement style="htmlStyle" x="123" y="150" width="392" height="20"/>
+ <textFieldExpression><![CDATA[$F{meta:range}]]></textFieldExpression>
+ </textField>
+ <textField>
+ <reportElement style="htmlStyle" x="0" y="170" width="123" height="20"/>
+ <textFieldExpression><![CDATA[$F{meta:flowdepthdevelopment_header_label}]]></textFieldExpression>
+ </textField>
+ <textField>
+ <reportElement style="htmlStyle" x="123" y="170" width="392" height="20"/>
+ <textFieldExpression><![CDATA[$F{meta:flowdepthdevelopment}]]></textFieldExpression>
+ </textField>
+ </band>
+ </title>
+ <columnHeader>
+ <band height="75" splitType="Stretch">
+ <textField>
+ <reportElement style="htmlStyle" x="0" y="0" width="60" height="75"/>
+ <box padding="5"/>
+ <textElement verticalAlignment="Bottom"/>
+ <textFieldExpression><![CDATA[$F{meta:station_header}]]></textFieldExpression>
+ </textField>
+ <textField>
+ <reportElement style="htmlStyle" x="60" y="0" width="80" height="75"/>
+ <box padding="5"/>
+ <textElement verticalAlignment="Bottom"/>
+ <textFieldExpression><![CDATA[$F{meta:flowdepthdevelopment_header} + "<br/>[cm]"]]></textFieldExpression>
+ </textField>
+ <textField>
+ <reportElement key="" style="htmlStyle" x="140" y="0" width="80" height="75"/>
+ <box padding="5"/>
+ <textElement verticalAlignment="Bottom"/>
+ <textFieldExpression><![CDATA[$F{meta:flowdepthdevelopmentperyear_header} + "<br/>[cm/a]"]]></textFieldExpression>
+ </textField>
+ <textField>
+ <reportElement key="" style="htmlStyle" x="220" y="40" width="85" height="35"/>
+ <box topPadding="0" leftPadding="5" bottomPadding="5" rightPadding="5"/>
+ <textElement verticalAlignment="Bottom"/>
+ <textFieldExpression><![CDATA[$F{meta:waterleveldifference_header2}]]></textFieldExpression>
+ </textField>
+ <textField>
+ <reportElement key="" style="htmlStyle" x="305" y="0" width="85" height="40"/>
+ <box topPadding="0" leftPadding="5" bottomPadding="0" rightPadding="5"/>
+ <textElement verticalAlignment="Bottom"/>
+ <textFieldExpression><![CDATA[$F{meta:bedheightdifference_header} + "<br/>[m³/s]"]]></textFieldExpression>
+ </textField>
+ <textField>
+ <reportElement key="" style="htmlStyle" x="305" y="40" width="85" height="35"/>
+ <box topPadding="0" leftPadding="5" bottomPadding="5" rightPadding="5"/>
+ <textElement verticalAlignment="Bottom"/>
+ <textFieldExpression><![CDATA[$F{meta:bedheightdifference_header2}]]></textFieldExpression>
+ </textField>
+ <textField>
+ <reportElement style="htmlStyle" x="390" y="0" width="85" height="40"/>
+ <box topPadding="0" leftPadding="5" bottomPadding="0" rightPadding="5"/>
+ <textElement verticalAlignment="Bottom"/>
+ <textFieldExpression><![CDATA[$F{meta:flowdepthcurrent_header} + "<br/>[" + $F{meta:river_unit} + "]"]]></textFieldExpression>
+ </textField>
+ <textField>
+ <reportElement style="htmlStyle" x="390" y="40" width="85" height="35"/>
+ <box topPadding="0" leftPadding="5" bottomPadding="5" rightPadding="5"/>
+ <textElement verticalAlignment="Bottom"/>
+ <textFieldExpression><![CDATA[$F{meta:flowdepthcurrent_header2}]]></textFieldExpression>
+ </textField>
+ <textField>
+ <reportElement style="htmlStyle" x="475" y="0" width="85" height="40"/>
+ <box topPadding="0" leftPadding="5" bottomPadding="0" rightPadding="5"/>
+ <textElement verticalAlignment="Bottom"/>
+ <textFieldExpression><![CDATA[$F{meta:flowdepthhistorical_header}+"<br/>[" + $F{meta:river_unit} + "]"]]></textFieldExpression>
+ </textField>
+ <textField>
+ <reportElement style="htmlStyle" x="475" y="40" width="85" height="35"/>
+ <box topPadding="0" leftPadding="5" bottomPadding="5" rightPadding="5"/>
+ <textElement verticalAlignment="Bottom"/>
+ <textFieldExpression><![CDATA[$F{meta:flowdepthhistorical_header2}]]></textFieldExpression>
+ </textField>
+ <textField>
+ <reportElement style="htmlStyle" x="560" y="0" width="180" height="75"/>
+ <box padding="5"/>
+ <textElement verticalAlignment="Bottom"/>
+ <textFieldExpression><![CDATA[$F{meta:location_header}]]></textFieldExpression>
+ </textField>
+ <line>
+ <reportElement style="htmlStyle" x="0" y="74" width="762" height="1"/>
+ </line>
+ <textField>
+ <reportElement key="" style="htmlStyle" x="220" y="0" width="85" height="40"/>
+ <box topPadding="0" leftPadding="5" bottomPadding="0" rightPadding="5"/>
+ <textElement verticalAlignment="Bottom">
+ <font pdfEncoding=""/>
+ </textElement>
+ <textFieldExpression><![CDATA[$F{meta:waterleveldifference_header}+"<br/>["+$F{meta:river_unit}+"]"]]></textFieldExpression>
+ </textField>
+ </band>
+ </columnHeader>
+ <detail>
+ <band height="20" splitType="Stretch">
+ <textField isBlankWhenNull="true">
+ <reportElement style="htmlStyle" x="475" y="0" width="85" height="20"/>
+ <box topPadding="5" leftPadding="5" bottomPadding="0" rightPadding="5"/>
+ <textElement textAlignment="Right"/>
+ <textFieldExpression><![CDATA[$F{data:6}]]></textFieldExpression>
+ </textField>
+ <textField isBlankWhenNull="true">
+ <reportElement style="htmlStyle" x="560" y="0" width="180" height="20"/>
+ <box topPadding="5" leftPadding="5" bottomPadding="0" rightPadding="5"/>
+ <textFieldExpression><![CDATA[$F{data:7}]]></textFieldExpression>
+ </textField>
+ <textField isBlankWhenNull="true">
+ <reportElement style="htmlStyle" x="390" y="0" width="85" height="20"/>
+ <box topPadding="5" leftPadding="5" bottomPadding="0" rightPadding="5"/>
+ <textElement textAlignment="Right"/>
+ <textFieldExpression><![CDATA[$F{data:5}]]></textFieldExpression>
+ </textField>
+ <textField isBlankWhenNull="true">
+ <reportElement style="htmlStyle" x="0" y="0" width="60" height="20"/>
+ <box topPadding="5" leftPadding="5" bottomPadding="0" rightPadding="5"/>
+ <textElement textAlignment="Right"/>
+ <textFieldExpression><![CDATA[$F{data:0}]]></textFieldExpression>
+ </textField>
+ <textField isBlankWhenNull="true">
+ <reportElement style="htmlStyle" x="60" y="0" width="80" height="20"/>
+ <box topPadding="5" leftPadding="5" bottomPadding="0" rightPadding="5"/>
+ <textElement textAlignment="Right"/>
+ <textFieldExpression><![CDATA[$F{data:1}]]></textFieldExpression>
+ </textField>
+ <textField isBlankWhenNull="true">
+ <reportElement key="" style="htmlStyle" x="140" y="0" width="80" height="20"/>
+ <box topPadding="5" leftPadding="5" bottomPadding="0" rightPadding="5"/>
+ <textElement textAlignment="Right"/>
+ <textFieldExpression><![CDATA[$F{data:2}]]></textFieldExpression>
+ </textField>
+ <textField isBlankWhenNull="true">
+ <reportElement key="" style="htmlStyle" x="220" y="0" width="85" height="20"/>
+ <box topPadding="5" leftPadding="5" bottomPadding="0" rightPadding="5"/>
+ <textElement textAlignment="Right"/>
+ <textFieldExpression><![CDATA[$F{data:3}]]></textFieldExpression>
+ </textField>
+ <textField isBlankWhenNull="true">
+ <reportElement key="" style="htmlStyle" x="305" y="0" width="85" height="20"/>
+ <box topPadding="5" leftPadding="5" bottomPadding="0" rightPadding="5"/>
+ <textElement textAlignment="Right"/>
+ <textFieldExpression><![CDATA[$F{data:4}]]></textFieldExpression>
+ </textField>
+ </band>
+ </detail>
+ <pageFooter>
+ <band height="30" splitType="Stretch">
+ <textField evaluationTime="Report">
+ <reportElement style="htmlStyle" x="705" y="9" width="57" height="20"/>
+ <textFieldExpression><![CDATA[" / " + $V{PAGE_NUMBER}]]></textFieldExpression>
+ </textField>
+ <textField>
+ <reportElement style="htmlStyle" x="650" 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>
diff -r 0adc6d04de95 -r 2bb38e25091b artifacts/doc/conf/jasper/templates/sinfo.flowdepthminmax.jrxml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/artifacts/doc/conf/jasper/templates/sinfo.flowdepthminmax.jrxml Wed Apr 11 14:20:01 2018 +0200
@@ -0,0 +1,264 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Created with Jaspersoft Studio version 6.5.1.final using JasperReports Library version 4.5.0 -->
+<!-- 2018-04-05T16:21:40 -->
+<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="842" pageHeight="595" 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"/>
+ <property name="com.jaspersoft.studio.data.defaultdataadapter" value="One Empty Record"/>
+ <style name="htmlStyle" isDefault="true" mode="Transparent" markup="html"/>
+ <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: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:tkh_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:river_unit" 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"/>
+ <field name="data:7" class="java.lang.String"/>
+ <field name="data:8" class="java.lang.String"/>
+ <field name="data:9" class="java.lang.String"/>
+ <background>
+ <band splitType="Stretch"/>
+ </background>
+ <title>
+ <band height="180" splitType="Stretch">
+ <textField>
+ <reportElement style="htmlStyle" x="0" y="1" 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="40" width="165" height="20"/>
+ <textFieldExpression><![CDATA[$F{meta:calcMode}]]></textFieldExpression>
+ </textField>
+ <textField>
+ <reportElement style="htmlStyle" x="0" y="70" width="123" height="20"/>
+ <textFieldExpression><![CDATA[$F{meta:version_label} + ":"]]></textFieldExpression>
+ </textField>
+ <textField>
+ <reportElement style="htmlStyle" x="123" y="70" width="392" height="20"/>
+ <textFieldExpression><![CDATA[$F{meta:version}]]></textFieldExpression>
+ </textField>
+ <textField>
+ <reportElement style="htmlStyle" x="0" y="90" width="123" height="20"/>
+ <textFieldExpression><![CDATA[$F{meta:user_label} + ":"]]></textFieldExpression>
+ </textField>
+ <textField>
+ <reportElement style="htmlStyle" x="123" y="90" width="392" height="20"/>
+ <textFieldExpression><![CDATA[$F{meta:user}]]></textFieldExpression>
+ </textField>
+ <textField>
+ <reportElement style="htmlStyle" x="0" y="110" width="123" height="20"/>
+ <textFieldExpression><![CDATA[$F{meta:date_label} + ":"]]></textFieldExpression>
+ </textField>
+ <textField>
+ <reportElement style="htmlStyle" x="123" y="110" width="392" height="20"/>
+ <textFieldExpression><![CDATA[$F{meta:date}]]></textFieldExpression>
+ </textField>
+ <textField>
+ <reportElement style="htmlStyle" x="0" y="130" width="123" height="20"/>
+ <textFieldExpression><![CDATA[$F{meta:river_label} + ":"]]></textFieldExpression>
+ </textField>
+ <textField>
+ <reportElement style="htmlStyle" x="123" y="130" width="392" height="20"/>
+ <textFieldExpression><![CDATA[$F{meta:river}]]></textFieldExpression>
+ </textField>
+ <textField>
+ <reportElement style="htmlStyle" x="0" y="150" width="123" height="20"/>
+ <textFieldExpression><![CDATA[$F{meta:range_label} + ":"]]></textFieldExpression>
+ </textField>
+ <textField>
+ <reportElement style="htmlStyle" x="123" y="150" width="392" height="20"/>
+ <textFieldExpression><![CDATA[$F{meta:range}]]></textFieldExpression>
+ </textField>
+ </band>
+ </title>
+ <columnHeader>
+ <band height="75" splitType="Stretch">
+ <textField>
+ <reportElement style="htmlStyle" x="0" y="0" width="50" height="75"/>
+ <box padding="5"/>
+ <textElement verticalAlignment="Bottom"/>
+ <textFieldExpression><![CDATA[$F{meta:station_header}]]></textFieldExpression>
+ </textField>
+ <textField>
+ <reportElement style="htmlStyle" x="50" y="0" width="60" height="74"/>
+ <box padding="5"/>
+ <textElement verticalAlignment="Bottom"/>
+ <textFieldExpression><![CDATA[$F{meta:flowdepthmin_header} + "<br/>[m]"]]></textFieldExpression>
+ </textField>
+ <textField>
+ <reportElement key="" style="htmlStyle" x="110" y="0" width="60" height="75"/>
+ <box padding="5"/>
+ <textElement verticalAlignment="Bottom"/>
+ <textFieldExpression><![CDATA[$F{meta:flowdepthmax_header} + "<br/>[m]"]]></textFieldExpression>
+ </textField>
+ <textField>
+ <reportElement key="" style="htmlStyle" x="170" y="0" width="70" height="75"/>
+ <box topPadding="0" leftPadding="5" bottomPadding="5" rightPadding="5"/>
+ <textElement verticalAlignment="Bottom"/>
+ <textFieldExpression><![CDATA[$F{meta:waterlevel_header}+ "<br/>[" + $F{meta:river_unit} + "]"]]></textFieldExpression>
+ </textField>
+ <textField>
+ <reportElement key="" style="htmlStyle" x="240" y="0" width="50" height="75"/>
+ <box topPadding="0" leftPadding="5" bottomPadding="5" rightPadding="5"/>
+ <textElement verticalAlignment="Bottom"/>
+ <textFieldExpression><![CDATA[$F{meta:discharge_header}+ "<br/>[m³/s]"]]></textFieldExpression>
+ </textField>
+ <textField>
+ <reportElement style="htmlStyle" x="290" y="0" width="80" height="75"/>
+ <box topPadding="0" leftPadding="5" bottomPadding="5" rightPadding="5"/>
+ <textElement verticalAlignment="Bottom"/>
+ <textFieldExpression><![CDATA[$F{meta:waterlevel_name_header}]]></textFieldExpression>
+ </textField>
+ <textField>
+ <reportElement style="htmlStyle" x="370" y="0" width="90" height="75"/>
+ <box topPadding="0" leftPadding="5" bottomPadding="5" rightPadding="5"/>
+ <textElement verticalAlignment="Bottom"/>
+ <textFieldExpression><![CDATA[$F{meta:gauge_header}]]></textFieldExpression>
+ </textField>
+ <textField>
+ <reportElement style="htmlStyle" x="641" y="0" width="120" height="74"/>
+ <box padding="5"/>
+ <textElement verticalAlignment="Bottom"/>
+ <textFieldExpression><![CDATA[$F{meta:location_header}]]></textFieldExpression>
+ </textField>
+ <textField>
+ <reportElement style="htmlStyle" x="541" y="0" width="100" height="74"/>
+ <box padding="5"/>
+ <textElement verticalAlignment="Bottom"/>
+ <textFieldExpression><![CDATA[$F{meta:sounding_name_header}]]></textFieldExpression>
+ </textField>
+ <textField>
+ <reportElement style="htmlStyle" x="460" y="0" width="81" height="74"/>
+ <box padding="5"/>
+ <textElement verticalAlignment="Bottom"/>
+ <textFieldExpression><![CDATA[$F{meta:bedheight_header}+ "<br/>[" + $F{meta:river_unit} + "]"]]></textFieldExpression>
+ </textField>
+ <line>
+ <reportElement style="htmlStyle" x="0" y="74" width="762" height="1"/>
+ </line>
+ </band>
+ </columnHeader>
+ <detail>
+ <band height="20" splitType="Stretch">
+ <textField isBlankWhenNull="true">
+ <reportElement style="htmlStyle" x="370" y="0" width="90" height="20"/>
+ <box topPadding="5" leftPadding="5" bottomPadding="0" rightPadding="5"/>
+ <textElement textAlignment="Right"/>
+ <textFieldExpression><![CDATA[$F{data:6}]]></textFieldExpression>
+ </textField>
+ <textField isBlankWhenNull="true">
+ <reportElement style="htmlStyle" x="460" y="0" width="81" height="20"/>
+ <box topPadding="5" leftPadding="5" bottomPadding="0" rightPadding="5"/>
+ <textFieldExpression><![CDATA[$F{data:7}]]></textFieldExpression>
+ </textField>
+ <textField isBlankWhenNull="true">
+ <reportElement style="htmlStyle" x="290" y="0" width="80" height="20"/>
+ <box topPadding="5" leftPadding="5" bottomPadding="0" rightPadding="5"/>
+ <textElement textAlignment="Right"/>
+ <textFieldExpression><![CDATA[$F{data:5}]]></textFieldExpression>
+ </textField>
+ <textField isBlankWhenNull="true">
+ <reportElement style="htmlStyle" x="0" y="0" width="50" height="20"/>
+ <box topPadding="5" leftPadding="5" bottomPadding="0" rightPadding="5"/>
+ <textElement textAlignment="Right"/>
+ <textFieldExpression><![CDATA[$F{data:0}]]></textFieldExpression>
+ </textField>
+ <textField isBlankWhenNull="true">
+ <reportElement style="htmlStyle" x="50" y="0" width="60" height="20"/>
+ <box topPadding="5" leftPadding="5" bottomPadding="0" rightPadding="5"/>
+ <textElement textAlignment="Right"/>
+ <textFieldExpression><![CDATA[$F{data:1}]]></textFieldExpression>
+ </textField>
+ <textField isBlankWhenNull="true">
+ <reportElement key="" style="htmlStyle" x="110" y="0" width="60" height="20"/>
+ <box topPadding="5" leftPadding="5" bottomPadding="0" rightPadding="5"/>
+ <textElement textAlignment="Right"/>
+ <textFieldExpression><![CDATA[$F{data:2}]]></textFieldExpression>
+ </textField>
+ <textField isBlankWhenNull="true">
+ <reportElement key="" style="htmlStyle" x="170" y="0" width="70" height="20"/>
+ <box topPadding="5" leftPadding="5" bottomPadding="0" rightPadding="5"/>
+ <textElement textAlignment="Right"/>
+ <textFieldExpression><![CDATA[$F{data:3}]]></textFieldExpression>
+ </textField>
+ <textField isBlankWhenNull="true">
+ <reportElement key="" style="htmlStyle" x="240" y="0" width="50" height="20"/>
+ <box topPadding="5" leftPadding="5" bottomPadding="0" rightPadding="5"/>
+ <textElement textAlignment="Right"/>
+ <textFieldExpression><![CDATA[$F{data:4}]]></textFieldExpression>
+ </textField>
+ <textField isBlankWhenNull="true">
+ <reportElement style="htmlStyle" x="541" y="0" width="100" height="20"/>
+ <box topPadding="5" leftPadding="5" bottomPadding="0" rightPadding="5"/>
+ <textFieldExpression><![CDATA[$F{data:8}]]></textFieldExpression>
+ </textField>
+ <textField isBlankWhenNull="true">
+ <reportElement style="htmlStyle" x="641" y="0" width="120" height="20"/>
+ <box topPadding="5" leftPadding="5" bottomPadding="0" rightPadding="5"/>
+ <textFieldExpression><![CDATA[$F{data:9}]]></textFieldExpression>
+ </textField>
+ </band>
+ </detail>
+ <pageFooter>
+ <band height="30" splitType="Stretch">
+ <textField evaluationTime="Report">
+ <reportElement style="htmlStyle" x="705" y="9" width="57" height="20"/>
+ <textFieldExpression><![CDATA[" / " + $V{PAGE_NUMBER}]]></textFieldExpression>
+ </textField>
+ <textField>
+ <reportElement style="htmlStyle" x="650" 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>
diff -r 0adc6d04de95 -r 2bb38e25091b artifacts/doc/conf/jasper/templates/sinfo.tkh.jrxml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/artifacts/doc/conf/jasper/templates/sinfo.tkh.jrxml Wed Apr 11 14:20:01 2018 +0200
@@ -0,0 +1,308 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Created with Jaspersoft Studio version 6.5.1.final using JasperReports Library version 4.5.0 -->
+<!-- 2018-04-06T11:26:49 -->
+<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"/>
+ <property name="com.jaspersoft.studio.data.defaultdataadapter" value="One Empty Record"/>
+ <style name="htmlStyle" isDefault="true" mode="Transparent" markup="html"/>
+ <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: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:river_unit" 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"/>
+ <field name="data:7" class="java.lang.String"/>
+ <field name="data:8" class="java.lang.String"/>
+ <background>
+ <band splitType="Stretch"/>
+ </background>
+ <title>
+ <band height="189" 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>
+ <textField>
+ <reportElement style="htmlStyle" x="0" y="169" width="123" height="20"/>
+ <textFieldExpression><![CDATA[$F{meta:calculation_label} + ":"]]></textFieldExpression>
+ </textField>
+ <textField>
+ <reportElement style="htmlStyle" x="123" y="169" width="392" height="20"/>
+ <textFieldExpression><![CDATA[$F{meta:calculation_name}]]></textFieldExpression>
+ </textField>
+ </band>
+ </title>
+ <columnHeader>
+ <band height="25" splitType="Stretch">
+ <textField isStretchWithOverflow="true">
+ <reportElement style="htmlStyle" positionType="Float" stretchType="RelativeToBandHeight" x="0" y="0" width="50" 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="50" y="0" width="50" height="24"/>
+ <box padding="5"/>
+ <textElement textAlignment="Right" verticalAlignment="Bottom"/>
+ <textFieldExpression><![CDATA[$F{meta:tkh_header} + "<br/>[cm]"]]></textFieldExpression>
+ </textField>
+ <textField isStretchWithOverflow="true">
+ <reportElement key="" style="htmlStyle" positionType="Float" stretchType="RelativeToBandHeight" x="100" y="0" width="60" height="24"/>
+ <box padding="5"/>
+ <textElement verticalAlignment="Bottom"/>
+ <textFieldExpression><![CDATA[$F{meta:tkhkind_header}]]></textFieldExpression>
+ </textField>
+ <textField isStretchWithOverflow="true">
+ <reportElement key="" style="htmlStyle" positionType="Float" stretchType="RelativeToBandHeight" x="160" y="0" width="60" height="24"/>
+ <box topPadding="0" leftPadding="5" bottomPadding="5" rightPadding="5"/>
+ <textElement textAlignment="Right" verticalAlignment="Bottom"/>
+ <textFieldExpression><![CDATA[$F{meta:waterlevel_header}+ "<br/>[NHN + m]"]]></textFieldExpression>
+ </textField>
+ <textField isStretchWithOverflow="true">
+ <reportElement key="" style="htmlStyle" positionType="Float" stretchType="RelativeToBandHeight" x="220" y="0" width="50" height="24"/>
+ <box topPadding="0" leftPadding="5" bottomPadding="5" rightPadding="5"/>
+ <textElement textAlignment="Right" verticalAlignment="Bottom"/>
+ <textFieldExpression><![CDATA[$F{meta:discharge_header}+ "<br/>[m³/s]"]]></textFieldExpression>
+ </textField>
+ <textField isStretchWithOverflow="true">
+ <reportElement style="htmlStyle" positionType="Float" stretchType="RelativeToBandHeight" x="270" y="0" width="70" height="24"/>
+ <box topPadding="0" leftPadding="5" bottomPadding="5" rightPadding="5"/>
+ <textElement textAlignment="Right" verticalAlignment="Bottom"/>
+ <textFieldExpression><![CDATA[$F{meta:waterlevel_name_header}]]></textFieldExpression>
+ </textField>
+ <textField isStretchWithOverflow="true">
+ <reportElement style="htmlStyle" positionType="Float" stretchType="RelativeToBandHeight" x="340" y="0" width="70" height="24"/>
+ <box topPadding="0" leftPadding="5" bottomPadding="5" rightPadding="5"/>
+ <textElement textAlignment="Right" verticalAlignment="Bottom"/>
+ <textFieldExpression><![CDATA[$F{meta:gauge_header}]]></textFieldExpression>
+ </textField>
+ <textField isStretchWithOverflow="true">
+ <reportElement style="htmlStyle" positionType="Float" stretchType="RelativeToBandHeight" x="470" y="0" width="80" height="24"/>
+ <box padding="5"/>
+ <textElement 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="60" height="24"/>
+ <box padding="5"/>
+ <textElement verticalAlignment="Bottom"/>
+ <textFieldExpression><![CDATA[$F{meta:bedheight_header}+ "<br/>[NHN + m]"]]></textFieldExpression>
+ </textField>
+ <line>
+ <reportElement style="htmlStyle" positionType="FixRelativeToBottom" x="0" y="24" width="550" height="1"/>
+ </line>
+ </band>
+ </columnHeader>
+ <detail>
+ <band height="20" splitType="Prevent">
+ <textField isStretchWithOverflow="true" isBlankWhenNull="true">
+ <reportElement style="htmlStyle" positionType="Float" stretchType="RelativeToBandHeight" x="340" y="0" width="70" height="20"/>
+ <box topPadding="5" 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"/>
+ <textFieldExpression><![CDATA[$F{data:6}]]></textFieldExpression>
+ </textField>
+ <textField isStretchWithOverflow="true" isBlankWhenNull="true">
+ <reportElement style="htmlStyle" positionType="Float" stretchType="RelativeToBandHeight" x="410" y="0" width="60" height="20"/>
+ <box topPadding="5" 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>
+ <textFieldExpression><![CDATA[$F{data:7}]]></textFieldExpression>
+ </textField>
+ <textField isStretchWithOverflow="true" isBlankWhenNull="true">
+ <reportElement style="htmlStyle" positionType="Float" stretchType="RelativeToBandHeight" x="270" y="0" width="70" height="20"/>
+ <box topPadding="5" 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"/>
+ <textFieldExpression><![CDATA[$F{data:5}]]></textFieldExpression>
+ </textField>
+ <textField isStretchWithOverflow="true" isBlankWhenNull="true">
+ <reportElement style="htmlStyle" positionType="Float" stretchType="RelativeToBandHeight" x="0" y="0" width="50" height="20"/>
+ <box topPadding="5" 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="50" y="0" width="50" height="20"/>
+ <box topPadding="5" 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"/>
+ <textFieldExpression><![CDATA[$F{data:1}]]></textFieldExpression>
+ </textField>
+ <textField isStretchWithOverflow="true" isBlankWhenNull="true">
+ <reportElement key="" style="htmlStyle" positionType="Float" stretchType="RelativeToBandHeight" x="100" y="0" width="60" height="20"/>
+ <box topPadding="5" 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"/>
+ <textFieldExpression><![CDATA[$F{data:2}]]></textFieldExpression>
+ </textField>
+ <textField isStretchWithOverflow="true" isBlankWhenNull="true">
+ <reportElement key="" style="htmlStyle" positionType="Float" stretchType="RelativeToBandHeight" x="160" y="0" width="60" height="20"/>
+ <box topPadding="5" 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"/>
+ <textFieldExpression><![CDATA[$F{data:3}]]></textFieldExpression>
+ </textField>
+ <textField isStretchWithOverflow="true" isBlankWhenNull="true">
+ <reportElement key="" style="htmlStyle" positionType="Float" stretchType="RelativeToBandHeight" x="220" y="0" width="50" height="20"/>
+ <box topPadding="5" 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"/>
+ <textFieldExpression><![CDATA[$F{data:4}]]></textFieldExpression>
+ </textField>
+ <textField isStretchWithOverflow="true" isBlankWhenNull="true">
+ <reportElement style="htmlStyle" positionType="Float" stretchType="RelativeToBandHeight" x="470" y="0" width="80" height="20"/>
+ <box topPadding="5" 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>
+ <textFieldExpression><![CDATA[$F{data:8}]]></textFieldExpression>
+ </textField>
+ </band>
+ </detail>
+ <pageFooter>
+ <band height="30" splitType="Stretch">
+ <textField isStretchWithOverflow="true">
+ <reportElement style="htmlStyle" x="437" y="10" width="55" height="20"/>
+ <textElement textAlignment="Right"/>
+ <textFieldExpression><![CDATA[$V{PAGE_NUMBER}]]></textFieldExpression>
+ </textField>
+ <textField isStretchWithOverflow="true" evaluationTime="Report">
+ <reportElement style="htmlStyle" x="493" y="10" width="57" height="20"/>
+ <textFieldExpression><![CDATA[" / " + $V{PAGE_NUMBER}]]></textFieldExpression>
+ </textField>
+ </band>
+ </pageFooter>
+ <summary>
+ <band height="42" splitType="Stretch"/>
+ </summary>
+</jasperReport>
diff -r 0adc6d04de95 -r 2bb38e25091b artifacts/doc/conf/jasper/waterlevel.jasper
Binary file artifacts/doc/conf/jasper/waterlevel.jasper has changed
diff -r 0adc6d04de95 -r 2bb38e25091b artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/SInfoI18NStrings.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/SInfoI18NStrings.java Wed Apr 11 14:09:13 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/SInfoI18NStrings.java Wed Apr 11 14:20:01 2018 +0200
@@ -70,6 +70,8 @@
String CSV_FLOWDEPTH_DEVELOPMENT_HEADER = "sinfo.export.csv.header.flowdepth.development";
+ String PDF_FLOWDEPTH_DEVELOPMENT_HEADER = "sinfo.export.pdf.header.flowdepth.development";
+
String CSV_FLOWDEPTH_DEVELOPMENT_PER_YEAR_HEADER = "sinfo.export.csv.header.flowdepth.development.per.year";
String CSV_WATERLEVEL_DIFFERENCE_HEADER = "sinfo.export.csv.header.waterlevel.difference";
diff -r 0adc6d04de95 -r 2bb38e25091b artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/common/SInfoResultType.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/common/SInfoResultType.java Wed Apr 11 14:09:13 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/common/SInfoResultType.java Wed Apr 11 14:20:01 2018 +0200
@@ -43,7 +43,7 @@
}
},
- waterlevel(null, SInfoI18NStrings.CSV_WATERLEVEL_HEADER) {
+ waterlevel(null, SInfoI18NStrings.CSV_WATERLEVEL_HEADER,"sinfo.export.flow_depth.pdf.header.waterlevel") {
@Override
public String exportValue(final CallContext context, final Object value) {
final double doubleValue = asDouble(value);
@@ -159,7 +159,7 @@
}
},
- soilkind(SInfoI18NStrings.UNIT_NONE, SInfoI18NStrings.CSV_TKHKIND_HEADER) {
+ soilkind(SInfoI18NStrings.UNIT_NONE, SInfoI18NStrings.CSV_TKHKIND_HEADER, "sinfo.export.tkh.pdf.header.tkhkind") {
@Override
public String exportValue(final CallContext context, final Object value) {
@@ -281,7 +281,8 @@
return Formatter.getFlowDepth(context);
}
},
- flowdepthDevelopment(SInfoI18NStrings.UNIT_CM, SInfoI18NStrings.CSV_FLOWDEPTH_DEVELOPMENT_HEADER) {
+
+ flowdepthDevelopment(SInfoI18NStrings.UNIT_CM, SInfoI18NStrings.CSV_FLOWDEPTH_DEVELOPMENT_HEADER, SInfoI18NStrings.PDF_FLOWDEPTH_DEVELOPMENT_HEADER) {
@Override
public String exportValue(final CallContext context, final Object value) {
final double doubleValue = asDouble(value);
@@ -305,7 +306,7 @@
return Formatter.getFlowDepthDevelopmentPerYear(context);
}
},
- waterlevelDifference(SInfoI18NStrings.UNIT_CM, SInfoI18NStrings.CSV_WATERLEVEL_DIFFERENCE_HEADER) {
+ waterlevelDifference(SInfoI18NStrings.UNIT_CM, SInfoI18NStrings.CSV_WATERLEVEL_DIFFERENCE_HEADER, "sinfo.export.pdf.header.waterlevel.difference") {
@Override
public String exportValue(final CallContext context, final Object value) {
final double doubleValue = asDouble(value);
@@ -317,7 +318,7 @@
return Formatter.getTkh(context);
}
},
- bedHeightDifference(SInfoI18NStrings.UNIT_CM, SInfoI18NStrings.CSV_MEAN_BED_HEIGHT_DIFFERENCE_HEADER) {
+ bedHeightDifference(SInfoI18NStrings.UNIT_CM, SInfoI18NStrings.CSV_MEAN_BED_HEIGHT_DIFFERENCE_HEADER, "sinfo.export.pdf.header.mean_bed_height.difference") {
@Override
public String exportValue(final CallContext context, final Object value) {
final double doubleValue = asDouble(value);
@@ -420,6 +421,10 @@
public final String getCsvHeader() {
return this.csvHeader;
}
+
+ public final String getCsvHeader(final CallMeta meta) {
+ return Resources.getMsg(meta, this.csvHeader, this.csvHeader);
+ }
public final String getPdfHeader(final CallMeta meta) {
return Resources.getMsg(meta, this.pdfHeader, this.pdfHeader);
diff -r 0adc6d04de95 -r 2bb38e25091b artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepthdev/FlowDepthDevelopmentExporter.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepthdev/FlowDepthDevelopmentExporter.java Wed Apr 11 14:09:13 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepthdev/FlowDepthDevelopmentExporter.java Wed Apr 11 14:20:01 2018 +0200
@@ -40,7 +40,7 @@
/** The log used in this exporter. */
private static Logger log = Logger.getLogger(FlowDepthDevelopmentExporter.class);
- private static final String JASPER_FILE = "/jasper/sinfo.flowdepthminmax.jasper";
+ private static final String JASPER_FILE = "/jasper/sinfo.flowdepthdevelopment.jasper";
@Override
protected Logger getLog() {
@@ -138,23 +138,25 @@
super.addJRMetaDataDefaults(source, results);
final FlowDepthDevelopmentCalculationResult result = results.getResult();
+ source.addMetaData("flowdepthdevelopment", result.getLabel());
+ source.addMetaData("flowdepthdevelopment_header_label",SInfoResultType.flowdepthDevelopment.getCsvHeader(this.context.getMeta()));//(this.context.getMeta()));
/* column headings */
source.addMetaData("station_header", SInfoResultType.station.getPdfHeader(this.context.getMeta()));
- source.addMetaData("flowdeptdevelopment_header", SInfoResultType.flowdepthDevelopment.getPdfHeader(this.context.getMeta()));
- source.addMetaData("flowdeptdevelopmentperyear_header", SInfoResultType.flowdepthDevelopmentPerYear.getPdfHeader(this.context.getMeta()));
+ source.addMetaData("flowdepthdevelopment_header", SInfoResultType.flowdepthDevelopment.getPdfHeader(this.context.getMeta()));
+ source.addMetaData("flowdepthdevelopmentperyear_header", SInfoResultType.flowdepthDevelopmentPerYear.getPdfHeader(this.context.getMeta()));
source.addMetaData("waterleveldifference_header", SInfoResultType.waterlevelDifference.getPdfHeader(this.context.getMeta()));
- source.addMetaData("waterleveldifference_header_label", result.getWaterlevelDifferenceLabel());
+ source.addMetaData("waterleveldifference_header2", result.getWaterlevelDifferenceLabel());
source.addMetaData("bedheightdifference_header", SInfoResultType.bedHeightDifference.getPdfHeader(this.context.getMeta()));
- source.addMetaData("bedheightdifference_header_label", result.getBedHeightDifferenceLabel());
+ source.addMetaData("bedheightdifference_header2", result.getBedHeightDifferenceLabel());
source.addMetaData("flowdepthcurrent_header", SInfoResultType.flowdepthCurrent.getPdfHeader(this.context.getMeta()));
- source.addMetaData("flowdepthcurrent_header_label", result.getFlowDepthCurrentLabel());
+ source.addMetaData("flowdepthcurrent_header2", result.getFlowDepthCurrentLabel());
source.addMetaData("flowdepthhistorical_header", SInfoResultType.flowdepthHistorical.getPdfHeader(this.context.getMeta()));
- source.addMetaData("flowdepthhistorical_header_label", result.getFlowDepthHistoricalLabel());
+ source.addMetaData("flowdepthhistorical_header2", result.getFlowDepthHistoricalLabel());
source.addMetaData("location_header", SInfoResultType.location.getPdfHeader(this.context.getMeta()));
}
diff -r 0adc6d04de95 -r 2bb38e25091b artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/tkhcalculation/DischargeValuesFinder.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/tkhcalculation/DischargeValuesFinder.java Wed Apr 11 14:09:13 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/tkhcalculation/DischargeValuesFinder.java Wed Apr 11 14:20:01 2018 +0200
@@ -91,7 +91,6 @@
return this.qInterpolator.value(station);
}
catch (final FunctionEvaluationException e) {
- e.printStackTrace();
return Double.NaN;
}
}
diff -r 0adc6d04de95 -r 2bb38e25091b artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/tkhstate/TkhExporter.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/tkhstate/TkhExporter.java Wed Apr 11 14:09:13 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/tkhstate/TkhExporter.java Wed Apr 11 14:20:01 2018 +0200
@@ -38,7 +38,7 @@
private static final String CSV_META_CALCULATION_FORMULA = "sinfo.export.tkh.calculation.formula";
- private static final String JASPER_FILE = "/jasper/sinfo.flowdepth.jasper";
+ private static final String JASPER_FILE = "/jasper/sinfo.tkh.jasper";
@Override
protected Logger getLog() {
@@ -140,13 +140,17 @@
/* general metadata */
super.addJRMetaDataDefaults(source, results);
+ source.addMetaData("calculation_label",msg( "sinfo.export.flow_depth.pdf.meta.calculation.label" ));
+ source.addMetaData("calculation_name",msg( "sinfo.export.flow_depth.pdf.meta.calculation.name" ));
+
/* column headings */
source.addMetaData("station_header", SInfoResultType.station.getPdfHeader(this.context.getMeta()));
source.addMetaData("tkh_header", SInfoResultType.tkh.getPdfHeader(this.context.getMeta()));
+ source.addMetaData("tkhkind_header", SInfoResultType.soilkind.getPdfHeader(this.context.getMeta()));
source.addMetaData("bedheight_header", SInfoResultType.meanBedHeight.getPdfHeader(this.context.getMeta()));
source.addMetaData("waterlevel_header", SInfoResultType.waterlevel.getPdfHeader(this.context.getMeta()));
source.addMetaData("discharge_header", SInfoResultType.discharge.getPdfHeader(this.context.getMeta()));
-
+
// REMARK: actually the column makes no sense if description header is null. But (software symmetry...) WINFO also
// writes an empty column into the pdf in that case (most probably to avoid the need for two jasper templates).
final String descriptionHeader = results.getDescriptionHeader();
diff -r 0adc6d04de95 -r 2bb38e25091b artifacts/src/main/resources/messages.properties
--- a/artifacts/src/main/resources/messages.properties Wed Apr 11 14:09:13 2018 +0200
+++ b/artifacts/src/main/resources/messages.properties Wed Apr 11 14:20:01 2018 +0200
@@ -855,6 +855,8 @@
sinfo.export.flow_depth.csv.meta.header.waterlevel.year = # Jahr/Zeitraum der Wasserspiegellage: {0}
sinfo.export.flow_depth.csv.meta.range = # {0}: {1} - {2}
sinfo.export.flow_depth.csv.meta.range.label = Range (km)
+sinfo.export.flow_depth.pdf.meta.calculation.label = Angewandte Gleichung
+sinfo.export.flow_depth.pdf.meta.calculation.name = Gill (1971)
sinfo.export.flow_depth.csv.meta.height_unit.river = # H\u00f6hensystem des Flusses: {0}
sinfo.export.flow_depth.csv.header.km = Fluss-km
@@ -862,6 +864,7 @@
sinfo.export.flow_depth.csv.header.flowdepthTkh = Flie\u00dftiefe mit TKH
sinfo.export.flow_depth.csv.header.tkh = TKH
sinfo.export.flow_depth.csv.header.waterlevel = Wasserstand
+sinfo.export.flow_depth.pdf.header.waterlevel = Wasser-stand
sinfo.export.flow_depth.csv.header.discharge = Q
sinfo.export.flow_depth.csv.header.label = Bezeichnung
sinfo.export.flow_depth.csv.header.gauge = Bezugspegel
@@ -895,6 +898,7 @@
sinfo.export.tkh.calculation.formula = # Berechnungsgrundlage: Gleichung nach GILL (1971)
sinfo.export.tkh.csv.header.tkh = Transportk\u00f6rperh\u00f6he
sinfo.export.tkh.csv.header.tkhkind = Einteilung der Gew\u00e4ssersohle
+sinfo.export.tkh.pdf.header.tkhkind = Einteilung der Gew\u00e4sser-sohle
sinfo.export.tkh.soilkind.mobil = Mobil
sinfo.export.tkh.soilkind.starr = Starr
@@ -963,9 +967,12 @@
sinfo.export.csv.meta.header.waterlevel.historical = ##METADATEN WASSERSPIEGELLAGE historisch
sinfo.export.csv.header.flowdepth.development = Flie\u00dftiefenentwicklung
+sinfo.export.pdf.header.flowdepth.development = Flie\u00dftiefen-entwicklung
sinfo.export.csv.header.flowdepth.development.per.year = Flie\u00dftiefenent-wicklung pro Jahr
sinfo.export.csv.header.waterlevel.difference = \u0394WSPL
+sinfo.export.pdf.header.waterlevel.difference = dWSPL
sinfo.export.csv.header.mean_bed_height.difference = \u0394MSH
+sinfo.export.pdf.header.mean_bed_height.difference = dMSH
sinfo.export.csv.header.flowdepth.current = Flie\u00dftiefe h-aktuell
sinfo.export.csv.header.flowdepth.historical = Flie\u00dftiefe h-historisch
diff -r 0adc6d04de95 -r 2bb38e25091b artifacts/src/main/resources/messages_de.properties
--- a/artifacts/src/main/resources/messages_de.properties Wed Apr 11 14:09:13 2018 +0200
+++ b/artifacts/src/main/resources/messages_de.properties Wed Apr 11 14:20:01 2018 +0200
@@ -855,6 +855,8 @@
sinfo.export.flow_depth.csv.meta.header.waterlevel.year = # Jahr/Zeitraum der Wasserspiegellage: {0}
sinfo.export.flow_depth.csv.meta.range = # {0}: {1} - {2}
sinfo.export.flow_depth.csv.meta.range.label = Bereich (km)
+sinfo.export.flow_depth.pdf.meta.calculation.label = Angewandte Gleichung
+sinfo.export.flow_depth.pdf.meta.calculation.name = Gill (1971)
sinfo.export.flow_depth.csv.meta.height_unit.river = # H\u00f6hensystem des Flusses: {0}
sinfo.export.flow_depth.csv.header.km = Fluss-km
@@ -862,6 +864,7 @@
sinfo.export.flow_depth.csv.header.flowdepthTkh = Flie\u00dftiefe mit TKH
sinfo.export.flow_depth.csv.header.tkh = TKH
sinfo.export.flow_depth.csv.header.waterlevel = Wasserstand
+sinfo.export.flow_depth.pdf.header.waterlevel = Wasser-stand
sinfo.export.flow_depth.csv.header.discharge = Q
sinfo.export.flow_depth.csv.header.label = Bezeichnung
sinfo.export.flow_depth.csv.header.gauge = Bezugspegel
@@ -895,6 +898,7 @@
sinfo.export.tkh.calculation.formula = # Berechnungsgrundlage: Gleichung nach GILL (1971)
sinfo.export.tkh.csv.header.tkh = Transportk\u00f6rperh\u00f6he
sinfo.export.tkh.csv.header.tkhkind = Einteilung der Gew\u00e4ssersohle
+sinfo.export.tkh.pdf.header.tkhkind = Einteilung der Gew\u00e4sser-sohle
sinfo.export.tkh.soilkind.mobil = Mobil
sinfo.export.tkh.soilkind.starr = Starr
@@ -962,10 +966,13 @@
sinfo.export.csv.meta.header.waterlevel.current = ##METADATEN WASSERSPIEGELLAGE aktuell
sinfo.export.csv.meta.header.waterlevel.historical = ##METADATEN WASSERSPIEGELLAGE historisch
+sinfo.export.pdf.header.flowdepth.development = Flie\u00dftiefen-entwicklung
sinfo.export.csv.header.flowdepth.development = Flie\u00dftiefenentwicklung
sinfo.export.csv.header.flowdepth.development.per.year = Flie\u00dftiefenent-wicklung pro Jahr
sinfo.export.csv.header.waterlevel.difference = \u0394WSPL
+sinfo.export.pdf.header.waterlevel.difference = dWSPL
sinfo.export.csv.header.mean_bed_height.difference = \u0394MSH
+sinfo.export.pdf.header.mean_bed_height.difference = dMSH
sinfo.export.csv.header.flowdepth.current = Flie\u00dftiefe h-aktuell
sinfo.export.csv.header.flowdepth.historical = Flie\u00dftiefe h-historisch
diff -r 0adc6d04de95 -r 2bb38e25091b backend/doc/schema/oracle-sinfo-uinfo.sql
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/backend/doc/schema/oracle-sinfo-uinfo.sql Wed Apr 11 14:20:01 2018 +0200
@@ -0,0 +1,402 @@
+BEGIN;
+
+
+CREATE TABLE bed_mobility (
+ id NUMBER(9,0) PRIMARY KEY,
+ river_id NUMBER(38,0) NOT NULL CONSTRAINT cBedMobilityRivers REFERENCES rivers(id) ON DELETE CASCADE,
+ kmrange_info VARCHAR2(32),
+ filename VARCHAR2(256) NOT NULL,
+ "comment" VARCHAR2(256)
+);
+COMMENT ON TABLE bed_mobility IS 'Longitudinal section of the bed mobility of a river' ;
+COMMENT ON COLUMN bed_mobility.kmrange_info IS 'File header line info "Strecke"' ;
+COMMENT ON COLUMN bed_mobility.filename IS 'Name without type extension of the imported file' ;
+COMMENT ON COLUMN bed_mobility."comment" IS 'File header line info "weitere Bemerkungen"' ;
+
+CREATE SEQUENCE BED_MOBILITY_ID_SEQ ;
+
+
+CREATE TABLE bed_mobility_values (
+ id NUMBER(9,0) PRIMARY KEY,
+ bed_mobility_id NUMBER(9,0) NOT NULL CONSTRAINT cBedMobilityValuesBedMobility REFERENCES bed_mobility(id) ON DELETE CASCADE,
+ station NUMBER(7,3) NOT NULL,
+ moving NUMBER(1,0) DEFAULT 0 NOT NULL CHECK(moving IN (0,1))
+);
+COMMENT ON TABLE bed_mobility_values IS 'Bed mobility of a km' ;
+COMMENT ON COLUMN bed_mobility_values.station IS 'River km' ;
+COMMENT ON COLUMN bed_mobility_values.moving IS 'Whether the river bed at the station is moving' ;
+
+CREATE SEQUENCE BED_MOBILITY_VALUES_ID_SEQ ;
+
+
+CREATE TABLE infrastructure (
+ id NUMBER(9,0) PRIMARY KEY,
+ river_id NUMBER(38,0) NOT NULL CONSTRAINT cInfrastructureRivers REFERENCES rivers(id) ON DELETE CASCADE,
+ annotation_type_id NUMBER(38,0) NOT NULL CONSTRAINT cInfrastructureAnnotationType REFERENCES annotation_types(id),
+ year NUMBER(4,0) CHECK((year >= 1700) AND (year <= 2199)),
+ dataprovider VARCHAR2(256),
+ evaluation_by VARCHAR2(256),
+ kmrange_info VARCHAR2(32),
+ filename VARCHAR2(256) NOT NULL,
+ "comment" VARCHAR2(256)
+);
+COMMENT ON TABLE infrastructure IS 'Longitudinal section of infrastructures of a river and a type' ;
+COMMENT ON COLUMN infrastructure.year IS 'File header line info "Stand"' ;
+COMMENT ON COLUMN infrastructure.dataprovider IS 'File header line info "Datenherkunft"' ;
+COMMENT ON COLUMN infrastructure.evaluation_by IS 'File header line info "Auswerter"' ;
+COMMENT ON COLUMN infrastructure.kmrange_info IS 'File header line info "Strecke"' ;
+COMMENT ON COLUMN infrastructure.filename IS 'Name without type extension of the imported file' ;
+COMMENT ON COLUMN infrastructure."comment" IS 'File header line info "weitere Bemerkungen"' ;
+
+CREATE SEQUENCE INFRASTRUCTURE_ID_SEQ ;
+
+
+CREATE TABLE infrastructure_values (
+ id NUMBER(9,0) PRIMARY KEY,
+ infrastructure_id NUMBER(9,0) CONSTRAINT cInfrastructureValuesInfrastructure REFERENCES infrastructure(id) ON DELETE CASCADE,
+ station NUMBER(7,3) NOT NULL,
+ attribute_id NUMBER(38,0) CONSTRAINT cInfrastructureValuesAttributes REFERENCES attributes(id),
+ height NUMBER(6,2)
+);
+COMMENT ON TABLE infrastructure_values IS 'Infrastructure at a river station' ;
+COMMENT ON COLUMN infrastructure_values.station IS 'River km' ;
+COMMENT ON COLUMN infrastructure_values.height IS 'Geodetic height of the top of the infrastructure in m' ;
+
+CREATE SEQUENCE INFRASTRUCTURE_VALUES_ID_SEQ ;
+
+
+CREATE TABLE channel (
+ id NUMBER(9,0) PRIMARY KEY,
+ river_id NUMBER(38,0) NOT NULL CONSTRAINT cChannelRivers REFERENCES rivers(id) ON DELETE CASCADE,
+ kmrange_info VARCHAR2(32),
+ filename VARCHAR2(256) NOT NULL,
+ "comment" VARCHAR2(256),
+ year_from NUMBER(4,0),
+ year_to NUMBER(4,0)
+);
+COMMENT ON TABLE channel IS 'Longitudinal section of the navigable channel of a river' ;
+COMMENT ON COLUMN channel.kmrange_info IS 'File header line info "Strecke"' ;
+COMMENT ON COLUMN channel.filename IS 'Name without type extension of the imported file' ;
+COMMENT ON COLUMN channel."comment" IS 'File header line info "weitere Bemerkungen"' ;
+COMMENT ON COLUMN channel.year_from IS 'Start year of the period for which the channel values are valid, NULL when valid for the whole past';
+COMMENT ON COLUMN channel.year_to IS 'End year of the period for which the channel values are valid, NULL when unlimited';
+
+
+CREATE SEQUENCE CHANNEL_ID_SEQ ;
+
+
+CREATE TABLE channel_values (
+ id NUMBER(9,0) PRIMARY KEY,
+ channel_id NUMBER(9,0) CONSTRAINT cChannelValuesChannel REFERENCES channel(id) ON DELETE CASCADE,
+ station NUMBER(7,3) NOT NULL,
+ width NUMBER(6,2),
+ depth NUMBER(6,2)
+);
+COMMENT ON TABLE channel_values IS 'Nominal size of the navigable channel at a river station' ;
+COMMENT ON COLUMN channel_values.station IS 'River km' ;
+COMMENT ON COLUMN channel_values.width IS 'Nominal width of the channel in m' ;
+COMMENT ON COLUMN channel_values.depth IS 'Nominal depth of the channel in m' ;
+
+CREATE SEQUENCE CHANNEL_VALUES_ID_SEQ ;
+
+
+CREATE TABLE collision_type (
+ id NUMBER(9,0) PRIMARY KEY,
+ name VARCHAR2(64) NOT NULL UNIQUE
+);
+COMMENT ON TABLE collision_type IS 'Type of a ship collision' ;
+COMMENT ON COLUMN collision_type.name IS 'Name of the collision type' ;
+
+CREATE SEQUENCE COLLISION_TYPE_ID_SEQ ;
+
+
+CREATE TABLE collision (
+ id NUMBER(9,0) PRIMARY KEY,
+ river_id NUMBER(38,0) NOT NULL CONSTRAINT cCollisionRivers REFERENCES rivers(id) ON DELETE CASCADE,
+ year NUMBER(4,0) NOT NULL,
+ kmrange_info VARCHAR2(32),
+ filename VARCHAR2(256) NOT NULL,
+ "comment" VARCHAR2(256)
+);
+COMMENT ON TABLE collision IS 'Longitudinal section of ship collisions with the river bed' ;
+COMMENT ON COLUMN collision.year IS 'File header line info "Jahr"' ;
+COMMENT ON COLUMN collision.kmrange_info IS 'File header line info "Strecke"' ;
+COMMENT ON COLUMN collision.filename IS 'Name without type extension of the imported file' ;
+COMMENT ON COLUMN collision."comment" IS 'File header line info "weitere Bemerkungen"' ;
+
+CREATE SEQUENCE COLLISION_ID_SEQ ;
+
+
+CREATE TABLE collision_values (
+ id NUMBER(9,0) PRIMARY KEY,
+ collision_id NUMBER(9,0) NOT NULL CONSTRAINT cCollisionValueCollision REFERENCES collision(id) ON DELETE CASCADE,
+ station NUMBER(7,3) NOT NULL,
+ event_date DATE NOT NULL,
+ gauge_w NUMBER(6,2),
+ gauge_name VARCHAR2(64),
+ collision_type_id NUMBER(9,0) NOT NULL CONSTRAINT cCollisionValuesCollisionType REFERENCES collision_type(id)
+);
+COMMENT ON TABLE collision_values IS 'Collision event' ;
+COMMENT ON COLUMN collision_values.station IS 'River km' ;
+COMMENT ON COLUMN collision_values.event_date IS 'Date of the collision' ;
+COMMENT ON COLUMN collision_values.gauge_w IS 'Waterlevel during the collision' ;
+COMMENT ON COLUMN collision_values.gauge_name IS 'Name of the gauge' ;
+
+CREATE SEQUENCE COLLISION_VALUES_ID_SEQ ;
+
+
+CREATE TABLE tkh (
+ id NUMBER(9,0) PRIMARY KEY,
+ river_id NUMBER(38,0) NOT NULL CONSTRAINT cTkhRivers REFERENCES rivers(id) ON DELETE CASCADE,
+ year NUMBER(4,0) NOT NULL,
+ kmrange_info VARCHAR2(32),
+ filename VARCHAR2(256) NOT NULL,
+ sounding_info VARCHAR2(64),
+ evaluation_by VARCHAR2(256),
+ "comment" VARCHAR2(256)
+);
+COMMENT ON TABLE tkh IS 'Longitudinal section of computed Transportkörperhöhe of a river' ;
+COMMENT ON COLUMN tkh.year IS 'File header line info "Bezugsjahr"' ;
+COMMENT ON COLUMN tkh.kmrange_info IS 'File header line info "Strecke"' ;
+COMMENT ON COLUMN tkh.filename IS 'Name without type extension of the imported file' ;
+COMMENT ON COLUMN tkh.sounding_info IS 'File header line info "Peilung"' ;
+COMMENT ON COLUMN tkh.evaluation_by IS 'File header line info "Auswerter"' ;
+COMMENT ON COLUMN tkh."comment" IS 'File header line info "weitere Bemerkungen"' ;
+
+CREATE SEQUENCE TKH_ID_SEQ ;
+
+
+CREATE TABLE tkh_column (
+ id NUMBER(9,0) PRIMARY KEY,
+ tkh_id NUMBER(9,0) NOT NULL CONSTRAINT cTkhColumnTkh REFERENCES tkh(id) ON DELETE CASCADE,
+ name VARCHAR2(64) NOT NULL
+);
+COMMENT ON TABLE tkh_column IS 'Longitudinal section of computed Transportkörperhöhe for a waterlevel series' ;
+COMMENT ON COLUMN tkh_column.name IS 'Name of the tkh computation column' ;
+
+CREATE SEQUENCE TKH_COLUMN_ID_SEQ ;
+
+
+CREATE TABLE tkh_values (
+ id NUMBER(9,0) PRIMARY KEY,
+ tkh_column_id NUMBER(9,0) NOT NULL CONSTRAINT cTkhValuesTkhColumn REFERENCES tkh_column(id) ON DELETE CASCADE,
+ station NUMBER(7,3) NOT NULL,
+ tkheight NUMBER(7,3)
+);
+COMMENT ON TABLE tkh_values IS 'Transportkörperhöhe of a river station and referenced file column' ;
+COMMENT ON COLUMN tkh_values.station IS 'River km' ;
+COMMENT ON COLUMN tkh_values.tkheight IS 'Transportkörperhöhe of a river station computed for a waterlevel in m' ;
+
+CREATE SEQUENCE TKH_VALUES_ID_SEQ ;
+
+
+CREATE TABLE flow_depth (
+ id NUMBER(9,0) PRIMARY KEY,
+ river_id NUMBER(38,0) NOT NULL CONSTRAINT cFlowDepthRivers REFERENCES rivers(id) ON DELETE CASCADE,
+ year NUMBER(4,0) NOT NULL,
+ kmrange_info VARCHAR2(32),
+ filename VARCHAR2(256) NOT NULL,
+ sounding_info VARCHAR2(64),
+ evaluation_by VARCHAR2(255),
+ "comment" VARCHAR2(256)
+);
+
+COMMENT ON TABLE flow_depth IS 'Longitudinal section of computed flow depth of a river' ;
+COMMENT ON COLUMN flow_depth.year IS 'File header line info "Bezugsjahr"' ;
+COMMENT ON COLUMN flow_depth.kmrange_info IS 'File header line info "Strecke"' ;
+COMMENT ON COLUMN flow_depth.filename IS 'Name without type extension of the imported file' ;
+COMMENT ON COLUMN flow_depth.sounding_info IS 'File header line info "Peilung"' ;
+COMMENT ON COLUMN flow_depth.evaluation_by IS 'File header line info "Auswerter"' ;
+COMMENT ON COLUMN flow_depth."comment" IS 'File header line info "weitere Bemerkungen"' ;
+
+CREATE SEQUENCE FLOW_DEPTH_ID_SEQ ;
+
+
+CREATE TABLE flow_depth_column (
+ id NUMBER(9,0) PRIMARY KEY,
+ flow_depth_id NUMBER(9,0) NOT NULL CONSTRAINT cFlowDepthColumnFlowDepth REFERENCES flow_depth(id) ON DELETE CASCADE,
+ name VARCHAR2(64) NOT NULL
+);
+
+COMMENT ON TABLE flow_depth_column IS 'Longitudinal section of computed flow depth for a waterlevel series' ;
+COMMENT ON COLUMN flow_depth_column.name IS 'Name of the flow depth computation column' ;
+
+CREATE SEQUENCE FLOW_DEPTH_COLUMN_ID_SEQ ;
+
+
+CREATE TABLE flow_depth_values (
+ id NUMBER(9,0) PRIMARY KEY,
+ flow_depth_column_id NUMBER(9,0) NOT NULL CONSTRAINT cFlowDepthValuesFlowDepthColumn REFERENCES flow_depth_column(id) ON DELETE CASCADE,
+ station NUMBER(7,3) NOT NULL,
+ depth NUMBER(7,3)
+);
+
+COMMENT ON TABLE flow_depth_values IS 'Flow depth of a river station and referenced file column' ;
+COMMENT ON COLUMN flow_depth_values.station IS 'River km' ;
+COMMENT ON COLUMN flow_depth_values.depth IS 'Flow depth of a river station computed for a waterlevel in m' ;
+
+CREATE SEQUENCE FLOW_DEPTH_VALUES_ID_SEQ ;
+
+
+CREATE TABLE depth_evolution (
+ id NUMBER(9,0) PRIMARY KEY,
+ river_id NUMBER(38,0) NOT NULL CONSTRAINT cDepthEvolutionRivers REFERENCES rivers(id) ON DELETE CASCADE,
+ reference_year NUMBER(4,0) NOT NULL,
+ start_year NUMBER(4,0) NOT NULL,
+ curr_sounding VARCHAR2(64) NOT NULL,
+ old_sounding VARCHAR2(64) NOT NULL,
+ kmrange_info VARCHAR2(32),
+ curr_glw VARCHAR2(64) NOT NULL,
+ old_glw VARCHAR2(64) NOT NULL,
+ filename VARCHAR2(256) NOT NULL,
+ "comment" VARCHAR2(256)
+);
+COMMENT ON TABLE depth_evolution IS 'Longitudinal section of the evolution of the flow depth of a river' ;
+COMMENT ON COLUMN depth_evolution.reference_year IS 'File header line info "Bezugsjahr" (GlW)' ;
+COMMENT ON COLUMN depth_evolution.start_year IS 'File header line info "Ausgangsjahr" (GlW)' ;
+COMMENT ON COLUMN depth_evolution.curr_sounding IS 'File header line info "Aktuelle Peilung / Epoche"' ;
+COMMENT ON COLUMN depth_evolution.old_sounding IS 'File header line info "Historische Peilung / Epoche"' ;
+COMMENT ON COLUMN depth_evolution.kmrange_info IS 'File header line info "Strecke"' ;
+COMMENT ON COLUMN depth_evolution.curr_glw IS 'File header line info "Aktuelle Wasserspiegellage"' ;
+COMMENT ON COLUMN depth_evolution.old_glw IS 'File header line info "Historische Wasserspiegellage"' ;
+COMMENT ON COLUMN depth_evolution.filename IS 'Name without type extension of the imported file' ;
+COMMENT ON COLUMN depth_evolution."comment" IS 'File header line info "weitere Bemerkungen"' ;
+
+CREATE SEQUENCE DEPTH_EVOLUTION_ID_SEQ ;
+
+
+CREATE TABLE depth_evolution_values (
+ id NUMBER(9,0) PRIMARY KEY,
+ depth_evolution_id NUMBER(9,0) NOT NULL CONSTRAINT cDepthEvolutionValuesDepthEvolution REFERENCES depth_evolution(id) ON DELETE CASCADE,
+ station NUMBER(7,3) NOT NULL,
+ total_change NUMBER(8,4),
+ change_per_year NUMBER(8,4)
+);
+COMMENT ON TABLE depth_evolution_values IS 'Evolution of the flow depth of a river station in a referenced period of time' ;
+COMMENT ON COLUMN depth_evolution_values.station IS 'River km' ;
+COMMENT ON COLUMN depth_evolution_values.total_change IS 'Flow depth change of the whole period of time in m' ;
+COMMENT ON COLUMN depth_evolution_values.change_per_year IS 'Average yearly flow depth change in the referenced period of time in m' ;
+
+CREATE SEQUENCE DEPTH_EVOLUTION_VALUES_ID_SEQ ;
+
+
+CREATE TABLE daily_discharge (
+ id NUMBER(9,0) PRIMARY KEY,
+ gauge_id NUMBER(38,0) NOT NULL CONSTRAINT cDailyDischargeGauge REFERENCES gauges(id) ON DELETE CASCADE,
+ filename VARCHAR2(256) NOT NULL
+);
+
+COMMENT ON TABLE daily_discharge IS 'Daily discharge value series' ;
+COMMENT ON COLUMN daily_discharge.filename IS 'Name without type extension of the imported file' ;
+
+CREATE SEQUENCE DAILY_DISCHARGE_ID_SEQ ;
+
+
+CREATE TABLE daily_discharge_values (
+ id NUMBER(9,0) PRIMARY KEY,
+ daily_discharge_id NUMBER(9,0) NOT NULL CONSTRAINT cDailyDischargeValueDailyDischarge REFERENCES daily_discharge(id) ON DELETE CASCADE,
+ day DATE NOT NULL,
+ discharge NUMBER(8,3) NOT NULL
+);
+
+COMMENT ON TABLE daily_discharge_values IS 'Mean daily discharge of a date and a gauge' ;
+COMMENT ON COLUMN daily_discharge_values.day IS 'Date of the discharge value' ;
+COMMENT ON COLUMN daily_discharge_values.discharge IS 'Mean daily discharge in m^3/s' ;
+
+CREATE SEQUENCE DAILY_DISCHARGE_VALUES_ID_SEQ ;
+
+
+CREATE TABLE salix (
+ id NUMBER(9,0) PRIMARY KEY,
+ river_id NUMBER(38,0) NOT NULL CONSTRAINT cSalixRivers REFERENCES rivers(id) ON DELETE CASCADE,
+ evaluation_by VARCHAR2(255),
+ kmrange_info VARCHAR2(32),
+ filename VARCHAR2(256) NOT NULL,
+ "comment" VARCHAR2(256)
+);
+
+COMMENT ON TABLE salix IS 'Longitudinal section of the salix line parameters of a river' ;
+COMMENT ON COLUMN salix.evaluation_by IS 'File header line info "Auswerter"' ;
+COMMENT ON COLUMN salix.kmrange_info IS 'File header line info "Strecke"' ;
+COMMENT ON COLUMN salix.filename IS 'Name without type extension of the imported file' ;
+COMMENT ON COLUMN salix."comment" IS 'File header line info "weitere Bemerkungen"' ;
+
+CREATE SEQUENCE SALIX_ID_SEQ ;
+
+
+CREATE TABLE salix_values (
+ id NUMBER(9,0) PRIMARY KEY,
+ salix_id NUMBER(9,0) NOT NULL CONSTRAINT cSalixValuesSalix REFERENCES salix(id) ON DELETE CASCADE,
+ station NUMBER(7,3) NOT NULL,
+ factor NUMBER(6,2) NOT NULL,
+ mnw_mw_diff NUMBER(6,2)
+);
+
+COMMENT ON COLUMN salix_values.station IS 'River km' ;
+COMMENT ON COLUMN salix_values.factor IS 'Salix "factor" of the station in m' ;
+COMMENT ON COLUMN salix_values.mnw_mw_diff IS 'Difference between MNW and MW in m (less than zero)' ;
+
+CREATE SEQUENCE SALIX_VALUES_ID_SEQ ;
+
+
+CREATE TABLE salix_rank (
+ id NUMBER(9,0) PRIMARY KEY,
+ min_value NUMBER(6,2),
+ max_value NUMBER(6,2),
+ name VARCHAR2(16) NOT NULL
+);
+INSERT INTO salix_rank (id, min_value, max_value, name) VALUES (1, NULL, -0.3, 'invalid');
+INSERT INTO salix_rank (id, min_value, max_value, name) VALUES (2, -0.3, 0.3, 'very good');
+INSERT INTO salix_rank (id, min_value, max_value, name) VALUES (3, 0.3, 0.5, 'good');
+INSERT INTO salix_rank (id, min_value, max_value, name) VALUES (4, 0.5, 1.0, 'moderate');
+INSERT INTO salix_rank (id, min_value, max_value, name) VALUES (5, 1.0, 1.5, 'bad');
+INSERT INTO salix_rank (id, min_value, max_value, name) VALUES (6, 1.5, NULL, 'very bad');
+
+
+CREATE TABLE vegetation_type (
+ id NUMBER(9,0) PRIMARY KEY,
+ name VARCHAR2(256) NOT NULL
+);
+INSERT INTO vegetation_type (id, name) VALUES (1, 'zonal forest');
+INSERT INTO vegetation_type (id, name) VALUES (2, 'dry hartwood forest floodplain');
+INSERT INTO vegetation_type (id, name) VALUES (3, 'wet hartwood forest floodplain');
+INSERT INTO vegetation_type (id, name) VALUES (4, 'salix alba forest');
+INSERT INTO vegetation_type (id, name) VALUES (5, 'salix shrubs');
+INSERT INTO vegetation_type (id, name) VALUES (6, 'reed bed');
+INSERT INTO vegetation_type (id, name) VALUES (7, 'bank pioneers');
+INSERT INTO vegetation_type (id, name) VALUES (8, 'no vegetation');
+INSERT INTO vegetation_type (id, name) VALUES (9, 'water');
+
+
+CREATE TABLE vegetation (
+ id NUMBER(9,0) PRIMARY KEY,
+ river_id NUMBER(38,0) NOT NULL CONSTRAINT cVegetationRivers REFERENCES rivers(id) ON DELETE CASCADE,
+ name VARCHAR2(256),
+ filename VARCHAR2(256) NOT NULL,
+ "comment" VARCHAR2(256)
+);
+
+COMMENT ON TABLE vegetation IS 'Classification of the vegetation of a river' ;
+COMMENT ON COLUMN vegetation.name IS 'File header line info "Einteilung"' ;
+COMMENT ON COLUMN vegetation.filename IS 'Name without type extension of the imported file' ;
+COMMENT ON COLUMN vegetation."comment" IS 'File header line info "weitere Bemerkungen"' ;
+
+CREATE SEQUENCE VEGETATION_ID_SEQ ;
+
+
+CREATE TABLE vegetation_zone (
+ id NUMBER(9,0) PRIMARY KEY,
+ vegetation_id NUMBER(9,0) NOT NULL CONSTRAINT cVegetationZoneVegetation REFERENCES vegetation(id) ON DELETE CASCADE,
+ vegetation_type_id NUMBER(9,0) NOT NULL CONSTRAINT cVegetationZoneVegetationType REFERENCES vegetation_type(id) ON DELETE CASCADE,
+ min_overflow_days NUMBER(3,0) NOT NULL,
+ max_overflow_days NUMBER(3,0) NOT NULL
+);
+
+COMMENT ON TABLE vegetation_zone IS 'Vegetation zone of a river station' ;
+COMMENT ON COLUMN vegetation_zone.min_overflow_days IS 'Minimum number (inclusive) of overflow days in a year for the zone type' ;
+COMMENT ON COLUMN vegetation_zone.max_overflow_days IS 'Maximum number (exclusive) of overflow days in a year for the zone type' ;
+
+CREATE SEQUENCE VEGETATION_ZONE_ID_SEQ ;
+
+
+COMMIT;
diff -r 0adc6d04de95 -r 2bb38e25091b backend/doc/schema/postgresql-alter-bed_height.sql
--- a/backend/doc/schema/postgresql-alter-bed_height.sql Wed Apr 11 14:09:13 2018 +0200
+++ b/backend/doc/schema/postgresql-alter-bed_height.sql Wed Apr 11 14:20:01 2018 +0200
@@ -3,7 +3,7 @@
--Add further bed height file header info columns
-ALTER TABLE bed_height ADD COLUMN sounding_width_info VARCHAR(32);
+ALTER TABLE bed_height ADD COLUMN sounding_width_info VARCHAR(256);
COMMENT ON COLUMN bed_height.sounding_width_info IS 'File header line info "ausgewertete Peilbreite"' ;
ALTER TABLE bed_height ADD COLUMN "comment" VARCHAR(256);
diff -r 0adc6d04de95 -r 2bb38e25091b backend/doc/schema/postgresql-sinfo-uinfo.sql
--- a/backend/doc/schema/postgresql-sinfo-uinfo.sql Wed Apr 11 14:09:13 2018 +0200
+++ b/backend/doc/schema/postgresql-sinfo-uinfo.sql Wed Apr 11 14:20:01 2018 +0200
@@ -155,7 +155,7 @@
evaluation_by VARCHAR(256),
"comment" VARCHAR(256)
);
-COMMENT ON TABLE tkh IS 'Longitudinal section of computed Transportkörperhöhe of a river' ;
+COMMENT ON TABLE tkh IS 'Longitudinal section of computed Transportkörperhöhe of a river' ;
COMMENT ON COLUMN tkh.year IS 'File header line info "Bezugsjahr"' ;
COMMENT ON COLUMN tkh.kmrange_info IS 'File header line info "Strecke"' ;
COMMENT ON COLUMN tkh.filename IS 'Name without type extension of the imported file' ;
@@ -171,7 +171,7 @@
tkh_id NUMERIC(9,0) NOT NULL CONSTRAINT cTkhColumnTkh REFERENCES tkh(id) ON DELETE CASCADE,
name VARCHAR(64) NOT NULL
);
-COMMENT ON TABLE tkh_column IS 'Longitudinal section of computed Transportkörperhöhe for a waterlevel series' ;
+COMMENT ON TABLE tkh_column IS 'Longitudinal section of computed Transportkörperhöhe for a waterlevel series' ;
COMMENT ON COLUMN tkh_column.name IS 'Name of the tkh computation column' ;
CREATE SEQUENCE TKH_COLUMN_ID_SEQ ;
@@ -183,9 +183,9 @@
station NUMERIC(7,3) NOT NULL,
tkheight NUMERIC(7,3)
);
-COMMENT ON TABLE tkh_values IS 'Transportkörperhöhe of a river station and referenced file column' ;
+COMMENT ON TABLE tkh_values IS 'Transportkörperhöhe of a river station and referenced file column' ;
COMMENT ON COLUMN tkh_values.station IS 'River km' ;
-COMMENT ON COLUMN tkh_values.tkheight IS 'Transportkörperhöhe of a river station computed for a waterlevel in m' ;
+COMMENT ON COLUMN tkh_values.tkheight IS 'Transportkörperhöhe of a river station computed for a waterlevel in m' ;
CREATE SEQUENCE TKH_VALUES_ID_SEQ ;
@@ -326,7 +326,7 @@
CREATE TABLE salix_values (
id NUMERIC(9,0) PRIMARY KEY,
- salix_id integer NOT NULL CONSTRAINT cSalixValuesSalix REFERENCES salix(id) ON DELETE CASCADE,
+ salix_id NUMERIC(9,0) NOT NULL CONSTRAINT cSalixValuesSalix REFERENCES salix(id) ON DELETE CASCADE,
station NUMERIC(7,3) NOT NULL,
factor NUMERIC(6,2) NOT NULL,
mnw_mw_diff NUMERIC(6,2)
diff -r 0adc6d04de95 -r 2bb38e25091b backend/src/main/java/org/dive4elements/river/importer/ImportBedHeight.java
--- a/backend/src/main/java/org/dive4elements/river/importer/ImportBedHeight.java Wed Apr 11 14:09:13 2018 +0200
+++ b/backend/src/main/java/org/dive4elements/river/importer/ImportBedHeight.java Wed Apr 11 14:20:01 2018 +0200
@@ -12,6 +12,7 @@
import java.util.List;
import org.apache.log4j.Logger;
+import org.dive4elements.river.importer.common.StoreMode;
import org.dive4elements.river.model.BedHeight;
import org.dive4elements.river.model.BedHeightType;
import org.dive4elements.river.model.ElevationModel;
@@ -40,12 +41,15 @@
protected List<ImportBedHeightValue> values;
+ protected StoreMode storeMode;
+
protected BedHeight peer;
public ImportBedHeight(final String description) {
this.description = description;
this.values = new ArrayList<>();
+ this.storeMode = StoreMode.NONE;
}
@@ -178,9 +182,11 @@
(this.oldElevationModel != null) ? this.oldElevationModel.getPeer() : null, this.range.getPeer(river),
this.evaluationBy, this.description, this.sounding_width_info, this.comment);
session.save(this.peer);
+ this.storeMode = StoreMode.INSERT;
}
else {
this.peer = bedHeights.get(0);
+ this.storeMode = StoreMode.UPDATE;
}
return this.peer;
diff -r 0adc6d04de95 -r 2bb38e25091b backend/src/main/java/org/dive4elements/river/importer/ImportBedHeightValue.java
--- a/backend/src/main/java/org/dive4elements/river/importer/ImportBedHeightValue.java Wed Apr 11 14:09:13 2018 +0200
+++ b/backend/src/main/java/org/dive4elements/river/importer/ImportBedHeightValue.java Wed Apr 11 14:20:01 2018 +0200
@@ -11,6 +11,7 @@
import java.util.List;
import org.apache.log4j.Logger;
+import org.dive4elements.river.importer.common.StoreMode;
import org.dive4elements.river.model.BedHeight;
import org.dive4elements.river.model.BedHeightValue;
import org.hibernate.Query;
@@ -61,13 +62,18 @@
if (this.peer != null)
return this.peer;
+ List<BedHeightValue> values;
final Session session = ImporterSession.getInstance().getDatabaseSession();
- final Query query = session.createQuery("FROM BedHeightValue WHERE (bedHeight=:bedHeight)"
- + " AND (station BETWEEN (:station-0.0001) AND (:station+0.0001))");
- query.setParameter("bedHeight", bedHeight);
- query.setParameter("station", this.station);
- final List<BedHeightValue> values = query.list();
- if (values.isEmpty()) {
+ if (this.bedHeight.storeMode == StoreMode.INSERT)
+ values = null;
+ else {
+ final Query query = session.createQuery("FROM BedHeightValue WHERE (bedHeight=:bedHeight)"
+ + " AND (station BETWEEN (:station-0.0001) AND (:station+0.0001))");
+ query.setParameter("bedHeight", bedHeight);
+ query.setParameter("station", this.station);
+ values = query.list();
+ }
+ if ((values == null) || values.isEmpty()) {
this.peer = new BedHeightValue(bedHeight, this.station, this.height, this.uncertainty, this.dataGap, this.soundingWidth,
this.minHeight, this.maxHeight);
session.save(this.peer);
diff -r 0adc6d04de95 -r 2bb38e25091b backend/src/main/java/org/dive4elements/river/importer/ImportCrossSection.java
--- a/backend/src/main/java/org/dive4elements/river/importer/ImportCrossSection.java Wed Apr 11 14:09:13 2018 +0200
+++ b/backend/src/main/java/org/dive4elements/river/importer/ImportCrossSection.java Wed Apr 11 14:20:01 2018 +0200
@@ -8,16 +8,15 @@
package org.dive4elements.river.importer;
-import org.dive4elements.river.model.River;
-import org.dive4elements.river.model.CrossSection;
-import org.dive4elements.river.model.TimeInterval;
-
-import org.hibernate.Session;
-import org.hibernate.Query;
-
import java.util.List;
import org.apache.log4j.Logger;
+import org.dive4elements.river.importer.common.StoreMode;
+import org.dive4elements.river.model.CrossSection;
+import org.dive4elements.river.model.River;
+import org.dive4elements.river.model.TimeInterval;
+import org.hibernate.Query;
+import org.hibernate.Session;
/** CrossSection to be imported, holds list of ImportCrossSectionLines. */
public class ImportCrossSection
@@ -28,6 +27,7 @@
protected String description;
protected ImportTimeInterval timeInterval;
protected List<ImportCrossSectionLine> lines;
+ protected StoreMode storeMode;
protected CrossSection peer;
@@ -35,94 +35,97 @@
}
public ImportCrossSection(
- ImportRiver river,
- String description,
- ImportTimeInterval timeInterval,
- List<ImportCrossSectionLine> lines
- ) {
+ final ImportRiver river,
+ final String description,
+ final ImportTimeInterval timeInterval,
+ final List<ImportCrossSectionLine> lines
+ ) {
this.river = river;
this.description = description;
this.timeInterval = timeInterval;
this.lines = lines;
+ this.storeMode = StoreMode.NONE;
wireWithLines();
}
public void wireWithLines() {
- for (ImportCrossSectionLine line: lines) {
+ for (final ImportCrossSectionLine line: this.lines) {
line.setCrossSection(this);
}
}
public ImportRiver getRiver() {
- return river;
+ return this.river;
}
- public void setRiver(ImportRiver river) {
+ public void setRiver(final ImportRiver river) {
this.river = river;
}
public String getDescription() {
- return description;
+ return this.description;
}
- public void setDescription(String description) {
+ public void setDescription(final String description) {
this.description = description;
}
public ImportTimeInterval getTimeInterval() {
- return timeInterval;
+ return this.timeInterval;
}
- public void setTimeInterval(ImportTimeInterval timeInterval) {
+ public void setTimeInterval(final ImportTimeInterval timeInterval) {
this.timeInterval = timeInterval;
}
public void storeDependencies() {
- log.info("store cross section '" + description + "'");
+ log.info("store cross section '" + this.description + "'");
getPeer();
- int i = 1, N = lines.size();
+ // int i = 1;
+ // final int N = this.lines.size();
- for (ImportCrossSectionLine line: lines) {
+ for (final ImportCrossSectionLine line: this.lines) {
line.storeDependencies();
- log.info(" stored " + i + " lines. remaining: " + (N-i));
- ++i;
+ // log.info(" stored " + i + " lines. remaining: " + (N-i));
+ // ++i;
}
+ log.info(" lines stored: " + this.lines.size());
}
public CrossSection getPeer() {
- if (peer == null) {
- River r = river.getPeer();
- TimeInterval t = timeInterval != null
- ? timeInterval.getPeer()
- : null;
+ if (this.peer == null) {
+ final River r = this.river.getPeer();
+ final TimeInterval t = (this.timeInterval != null) ? this.timeInterval.getPeer() : null;
- Session session =
- ImporterSession.getInstance().getDatabaseSession();
+ final Session session =
+ ImporterSession.getInstance().getDatabaseSession();
- Query query = session.createQuery(
- "from CrossSection where " +
- "river=:r and " +
- "timeInterval=:t and " +
- "description=:d");
+ final Query query = session.createQuery(
+ "from CrossSection where " +
+ "river=:r and " +
+ "timeInterval=:t and " +
+ "description=:d");
query.setParameter("r", r);
query.setParameter("t", t);
- query.setParameter("d", description);
+ query.setParameter("d", this.description);
- List<CrossSection> crossSections = query.list();
+ final List<CrossSection> crossSections = query.list();
if (crossSections.isEmpty()) {
- peer = new CrossSection(r, t, description);
- session.save(peer);
+ this.peer = new CrossSection(r, t, this.description);
+ session.save(this.peer);
+ this.storeMode = StoreMode.INSERT;
}
else {
- peer = crossSections.get(0);
+ this.peer = crossSections.get(0);
+ this.storeMode = StoreMode.UPDATE;
}
}
- return peer;
+ return this.peer;
}
}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
diff -r 0adc6d04de95 -r 2bb38e25091b backend/src/main/java/org/dive4elements/river/importer/ImportCrossSectionLine.java
--- a/backend/src/main/java/org/dive4elements/river/importer/ImportCrossSectionLine.java Wed Apr 11 14:09:13 2018 +0200
+++ b/backend/src/main/java/org/dive4elements/river/importer/ImportCrossSectionLine.java Wed Apr 11 14:20:01 2018 +0200
@@ -8,18 +8,18 @@
package org.dive4elements.river.importer;
-import org.dive4elements.river.model.CrossSection;
-import org.dive4elements.river.model.CrossSectionPoint;
-import org.dive4elements.river.model.CrossSectionLine;
-
-import org.hibernate.Session;
-import org.hibernate.Query;
-
+import java.util.Comparator;
import java.util.List;
-import java.util.Comparator;
import java.util.Map;
import java.util.TreeMap;
+import org.dive4elements.river.importer.common.StoreMode;
+import org.dive4elements.river.model.CrossSection;
+import org.dive4elements.river.model.CrossSectionLine;
+import org.dive4elements.river.model.CrossSectionPoint;
+import org.hibernate.Query;
+import org.hibernate.Session;
+
/**
* A CrossSectionLine (containing points) ready to be transformed into a mapped
* object and written to db (used in importer).
@@ -27,39 +27,42 @@
public class ImportCrossSectionLine
{
public static final Comparator<CrossSectionPoint> INDEX_CMP =
- new Comparator<CrossSectionPoint>() {
- public int compare(CrossSectionPoint a, CrossSectionPoint b) {
- return a.getColPos().compareTo(b.getColPos());
- }
- };
+ new Comparator<CrossSectionPoint>() {
+ @Override
+ public int compare(final CrossSectionPoint a, final CrossSectionPoint b) {
+ return a.getColPos().compareTo(b.getColPos());
+ }
+ };
protected Double km;
protected ImportCrossSection crossSection;
protected List<XY> points;
+ protected StoreMode storeMode;
protected CrossSectionLine peer;
public ImportCrossSectionLine() {
}
- public ImportCrossSectionLine(Double km, List<XY> points) {
+ public ImportCrossSectionLine(final Double km, final List<XY> points) {
this.km = km;
this.points = points;
+ this.storeMode = StoreMode.NONE;
}
public ImportCrossSection getCrossSection() {
- return crossSection;
+ return this.crossSection;
}
- public void setCrossSection(ImportCrossSection crossSection) {
+ public void setCrossSection(final ImportCrossSection crossSection) {
this.crossSection = crossSection;
}
public Double getKm() {
- return km;
+ return this.km;
}
- public void setKm(Double km) {
+ public void setKm(final Double km) {
this.km = km;
}
@@ -70,35 +73,37 @@
/** Write a line and its points. */
protected void storePoints() {
- CrossSectionLine csl = getPeer();
-
- Map<CrossSectionPoint, CrossSectionPoint> map =
- new TreeMap<CrossSectionPoint, CrossSectionPoint>(INDEX_CMP);
+ final CrossSectionLine csl = getPeer();
+ if (this.storeMode == StoreMode.INSERT) {
+ insertPoints();
+ return;
+ }
+ final Map<CrossSectionPoint, CrossSectionPoint> map =
+ new TreeMap<>(INDEX_CMP);
// Build index for faster (index) collision lookup.
- List<CrossSectionPoint> ps = csl.getPoints();
+ final List<CrossSectionPoint> ps = csl.getPoints();
if (ps != null) {
- for (CrossSectionPoint point: ps) {
+ for (final CrossSectionPoint point: ps) {
map.put(point, point);
}
}
- Session session =
- ImporterSession.getInstance().getDatabaseSession();
+ final Session session = ImporterSession.getInstance().getDatabaseSession();
- CrossSectionPoint key = new CrossSectionPoint();
+ final CrossSectionPoint key = new CrossSectionPoint();
// Somehow it looks as if even with the map it is still possible that
// multiple points with same id enter hibernate (and then violate a
// constraint). -> TODO
- for (XY xy: points) {
+ for (final XY xy: this.points) {
key.setColPos(xy.getIndex());
CrossSectionPoint csp = map.get(key);
if (csp == null) { // create new
csp = new CrossSectionPoint(
- csl, key.getColPos(),
- Double.valueOf(xy.getX()),
- Double.valueOf(xy.getY()));
+ csl, key.getColPos(),
+ Double.valueOf(xy.getX()),
+ Double.valueOf(xy.getY()));
}
else { // update old
csp.setX(Double.valueOf(xy.getX()));
@@ -108,29 +113,41 @@
}
}
+ /**
+ * Insert the points of a new line into the database without previously querying the database
+ */
+ private void insertPoints() {
+ final Session session = ImporterSession.getInstance().getDatabaseSession();
+ for (final XY xy : this.points) {
+ session.save(new CrossSectionPoint(getPeer(), xy.getIndex(), xy.getX(), xy.getY()));
+ }
+ }
+
/** Pull database-mapped object from db, or create (and save) one. */
public CrossSectionLine getPeer() {
- if (peer == null) {
- CrossSection cs = crossSection.getPeer();
-
- Session session =
- ImporterSession.getInstance().getDatabaseSession();
-
- Query query = session.createQuery(
- "from CrossSectionLine where crossSection=:cs and km=:km");
- query.setParameter("cs", cs);
- query.setParameter("km", km);
-
- List<CrossSectionLine> lines = query.list();
- if (lines.isEmpty()) {
- peer = new CrossSectionLine(cs, km);
- session.save(peer);
+ if (this.peer == null) {
+ final CrossSection cs = this.crossSection.getPeer();
+ final Session session = ImporterSession.getInstance().getDatabaseSession();
+ List<CrossSectionLine> lines;
+ if (this.crossSection.storeMode == StoreMode.INSERT)
+ lines = null;
+ else {
+ final Query query = session.createQuery("from CrossSectionLine where crossSection=:cs and km=:km");
+ query.setParameter("cs", cs);
+ query.setParameter("km", this.km);
+ lines = query.list();
+ }
+ if ((lines == null) || lines.isEmpty()) {
+ this.peer = new CrossSectionLine(cs, this.km);
+ session.save(this.peer);
+ this.storeMode = StoreMode.INSERT;
}
else {
- peer = lines.get(0);
+ this.peer = lines.get(0);
+ this.storeMode = StoreMode.UPDATE;
}
}
- return peer;
+ return this.peer;
}
}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
diff -r 0adc6d04de95 -r 2bb38e25091b backend/src/main/java/org/dive4elements/river/importer/ImportFlowVelocityModel.java
--- a/backend/src/main/java/org/dive4elements/river/importer/ImportFlowVelocityModel.java Wed Apr 11 14:09:13 2018 +0200
+++ b/backend/src/main/java/org/dive4elements/river/importer/ImportFlowVelocityModel.java Wed Apr 11 14:20:01 2018 +0200
@@ -12,75 +12,75 @@
import java.util.List;
import org.apache.log4j.Logger;
-
-import org.hibernate.Session;
-import org.hibernate.Query;
-
+import org.dive4elements.river.importer.common.StoreMode;
import org.dive4elements.river.model.DischargeZone;
import org.dive4elements.river.model.FlowVelocityModel;
import org.dive4elements.river.model.River;
+import org.hibernate.Query;
+import org.hibernate.Session;
public class ImportFlowVelocityModel {
private static final Logger log = Logger
- .getLogger(ImportFlowVelocityModel.class);
+ .getLogger(ImportFlowVelocityModel.class);
private String description;
private ImportDischargeZone dischargeZone;
- private List<ImportFlowVelocityModelValue> values;
+ private final List<ImportFlowVelocityModelValue> values;
+
+ protected StoreMode storeMode;
private FlowVelocityModel peer;
public ImportFlowVelocityModel() {
- values = new ArrayList<ImportFlowVelocityModelValue>();
+ this.values = new ArrayList<>();
+ this.storeMode = StoreMode.NONE;
}
- public ImportFlowVelocityModel(String description) {
+ public ImportFlowVelocityModel(final String description) {
this();
-
this.description = description;
}
- public ImportFlowVelocityModel(ImportDischargeZone dischargeZone,
- String description) {
+ public ImportFlowVelocityModel(final ImportDischargeZone dischargeZone,
+ final String description) {
this();
-
this.dischargeZone = dischargeZone;
this.description = description;
}
- public void setDischargeZone(ImportDischargeZone dischargeZone) {
+ public void setDischargeZone(final ImportDischargeZone dischargeZone) {
this.dischargeZone = dischargeZone;
}
- public void setDescription(String description) {
+ public void setDescription(final String description) {
this.description = description;
}
- public void addValue(ImportFlowVelocityModelValue value) {
+ public void addValue(final ImportFlowVelocityModelValue value) {
this.values.add(value);
}
- public void storeDependencies(River river) {
+ public void storeDependencies(final River river) {
log.debug("store dependencies");
- if (dischargeZone == null) {
+ if (this.dischargeZone == null) {
log.warn("skip flow velocity model: No discharge zone specified.");
return;
}
- dischargeZone.storeDependencies(river);
+ this.dischargeZone.storeDependencies(river);
- FlowVelocityModel peer = getPeer(river);
+ final FlowVelocityModel peer = getPeer(river);
if (peer != null) {
int i = 0;
- for (ImportFlowVelocityModelValue value : values) {
- value.storeDependencies(peer);
+ for (final ImportFlowVelocityModelValue value : this.values) {
+ value.storeDependencies(peer, this.storeMode);
i++;
}
@@ -88,30 +88,32 @@
}
}
- public FlowVelocityModel getPeer(River river) {
- if (peer == null) {
- Session session = ImporterSession.getInstance()
- .getDatabaseSession();
+ public FlowVelocityModel getPeer(final River river) {
+ if (this.peer == null) {
+ final Session session = ImporterSession.getInstance()
+ .getDatabaseSession();
- DischargeZone zone = dischargeZone.getPeer(river);
+ final DischargeZone zone = this.dischargeZone.getPeer(river);
- Query query = session.createQuery("from FlowVelocityModel where "
- + " dischargeZone=:dischargeZone");
+ final Query query = session.createQuery("from FlowVelocityModel where "
+ + " dischargeZone=:dischargeZone");
query.setParameter("dischargeZone", zone);
- List<FlowVelocityModel> model = query.list();
+ final List<FlowVelocityModel> model = query.list();
if (model.isEmpty()) {
- peer = new FlowVelocityModel(zone, description);
- session.save(peer);
+ this.peer = new FlowVelocityModel(zone, this.description);
+ session.save(this.peer);
+ this.storeMode = StoreMode.INSERT;
}
else {
- peer = model.get(0);
+ this.peer = model.get(0);
+ this.storeMode = StoreMode.UPDATE;
}
}
- return peer;
+ return this.peer;
}
}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
diff -r 0adc6d04de95 -r 2bb38e25091b backend/src/main/java/org/dive4elements/river/importer/ImportFlowVelocityModelValue.java
--- a/backend/src/main/java/org/dive4elements/river/importer/ImportFlowVelocityModelValue.java Wed Apr 11 14:09:13 2018 +0200
+++ b/backend/src/main/java/org/dive4elements/river/importer/ImportFlowVelocityModelValue.java Wed Apr 11 14:20:01 2018 +0200
@@ -9,34 +9,33 @@
package org.dive4elements.river.importer;
import java.math.BigDecimal;
-
import java.util.List;
-import org.hibernate.Session;
-import org.hibernate.Query;
-
+import org.dive4elements.river.importer.common.StoreMode;
import org.dive4elements.river.model.FlowVelocityModel;
import org.dive4elements.river.model.FlowVelocityModelValue;
+import org.hibernate.Query;
+import org.hibernate.Session;
public class ImportFlowVelocityModelValue {
- private BigDecimal station;
- private BigDecimal q;
- private BigDecimal totalChannel;
- private BigDecimal mainChannel;
- private BigDecimal shearStress;
+ private final BigDecimal station;
+ private final BigDecimal q;
+ private final BigDecimal totalChannel;
+ private final BigDecimal mainChannel;
+ private final BigDecimal shearStress;
private FlowVelocityModelValue peer;
public ImportFlowVelocityModelValue(
- BigDecimal station,
- BigDecimal q,
- BigDecimal totalChannel,
- BigDecimal mainChannel,
- BigDecimal shearStress
- ) {
+ final BigDecimal station,
+ final BigDecimal q,
+ final BigDecimal totalChannel,
+ final BigDecimal mainChannel,
+ final BigDecimal shearStress
+ ) {
this.station = station;
this.q = q;
this.totalChannel = totalChannel;
@@ -45,39 +44,41 @@
}
- public void storeDependencies(FlowVelocityModel model) {
- getPeer(model);
+ public void storeDependencies(final FlowVelocityModel model, final StoreMode parentStoreMode) {
+ getPeer(model, parentStoreMode);
}
- public FlowVelocityModelValue getPeer(FlowVelocityModel model) {
- if (peer == null) {
- Session session = ImporterSession.getInstance()
- .getDatabaseSession();
+ public FlowVelocityModelValue getPeer(final FlowVelocityModel model, final StoreMode parentStoreMode) {
+ if (this.peer == null) {
+ List<FlowVelocityModelValue> values;
+ final Session session = ImporterSession.getInstance().getDatabaseSession();
+ if (parentStoreMode == StoreMode.INSERT)
+ values = null;
+ else {
+ final Query query = session.createQuery(
+ "from FlowVelocityModelValue where " +
+ " flowVelocity=:model and " +
+ " station between :station - 0.00001 and :station + 0.00001"
+ );
- Query query = session.createQuery(
- "from FlowVelocityModelValue where " +
- " flowVelocity=:model and " +
- " station between :station - 0.00001 and :station + 0.00001"
- );
+ query.setParameter("model", model);
+ query.setParameter("station", this.station.doubleValue());
- query.setParameter("model", model);
- query.setParameter("station", station.doubleValue());
+ values = query.list();
+ }
+ if ((values == null) || values.isEmpty()) {
+ this.peer = new FlowVelocityModelValue(
+ model, this.station, this.q, this.totalChannel, this.mainChannel, this.shearStress);
- List<FlowVelocityModelValue> values = query.list();
-
- if (values.isEmpty()) {
- peer = new FlowVelocityModelValue(
- model, station, q, totalChannel, mainChannel, shearStress);
-
- session.save(peer);
+ session.save(this.peer);
}
else {
- peer = values.get(0);
+ this.peer = values.get(0);
}
}
- return peer;
+ return this.peer;
}
}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
diff -r 0adc6d04de95 -r 2bb38e25091b backend/src/main/java/org/dive4elements/river/importer/ImportHYK.java
--- a/backend/src/main/java/org/dive4elements/river/importer/ImportHYK.java Wed Apr 11 14:09:13 2018 +0200
+++ b/backend/src/main/java/org/dive4elements/river/importer/ImportHYK.java Wed Apr 11 14:20:01 2018 +0200
@@ -8,16 +8,15 @@
package org.dive4elements.river.importer;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.log4j.Logger;
+import org.dive4elements.river.importer.common.StoreMode;
import org.dive4elements.river.model.HYK;
import org.dive4elements.river.model.River;
-
-import java.util.List;
-import java.util.ArrayList;
-
+import org.hibernate.Query;
import org.hibernate.Session;
-import org.hibernate.Query;
-
-import org.apache.log4j.Logger;
public class ImportHYK
{
@@ -28,61 +27,66 @@
protected List<ImportHYKEntry> entries;
+ protected StoreMode storeMode;
+
protected HYK peer;
public ImportHYK() {
- entries = new ArrayList<ImportHYKEntry>();
+ this.entries = new ArrayList<>();
+ this.storeMode = StoreMode.NONE;
}
- public ImportHYK(ImportRiver river, String description) {
+ public ImportHYK(final ImportRiver river, final String description) {
this();
this.river = river;
this.description = description;
}
public ImportRiver getRiver() {
- return river;
+ return this.river;
}
- public void setRiver(ImportRiver river) {
+ public void setRiver(final ImportRiver river) {
this.river = river;
}
- public void addEntry(ImportHYKEntry entry) {
- entries.add(entry);
+ public void addEntry(final ImportHYKEntry entry) {
+ this.entries.add(entry);
entry.setHYK(this);
}
public void storeDependencies() {
- log.info("store HYK '" + description + "'");
+ log.info("store HYK '" + this.description + "'");
getPeer();
- for (int i = 0, N = entries.size(); i < N; ++i) {
- ImportHYKEntry entry = entries.get(i);
+ for (int i = 0, N = this.entries.size(); i < N; ++i) {
+ final ImportHYKEntry entry = this.entries.get(i);
log.info(" store km " + entry.getKm() +
- " (" + (i+1) + " of " + N + ")");
+ " (" + (i+1) + " of " + N + ")");
entry.storeDependencies();
}
}
public HYK getPeer() {
- if (peer == null) {
- River r = river.getPeer();
- Session session = ImporterSession.getInstance()
- .getDatabaseSession();
- Query query = session.createQuery(
- "from HYK where river=:river and description=:description");
+ if (this.peer == null) {
+ final River r = this.river.getPeer();
+ final Session session = ImporterSession.getInstance()
+ .getDatabaseSession();
+ final Query query = session.createQuery(
+ "from HYK where river=:river and description=:description");
query.setParameter("river", r);
- query.setParameter("description", description);
- List<HYK> hyks = query.list();
+ query.setParameter("description", this.description);
+ final List<HYK> hyks = query.list();
if (hyks.isEmpty()) {
- peer = new HYK(r, description);
- session.save(peer);
+ this.peer = new HYK(r, this.description);
+ session.save(this.peer);
+ this.storeMode = StoreMode.INSERT;
}
else {
- peer = hyks.get(0);
+ this.peer = hyks.get(0);
+ this.storeMode = StoreMode.UPDATE;
}
}
- return peer;
+ return this.peer;
}
}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
diff -r 0adc6d04de95 -r 2bb38e25091b backend/src/main/java/org/dive4elements/river/importer/ImportHYKEntry.java
--- a/backend/src/main/java/org/dive4elements/river/importer/ImportHYKEntry.java Wed Apr 11 14:09:13 2018 +0200
+++ b/backend/src/main/java/org/dive4elements/river/importer/ImportHYKEntry.java Wed Apr 11 14:20:01 2018 +0200
@@ -8,17 +8,16 @@
package org.dive4elements.river.importer;
-import org.dive4elements.river.model.HYKEntry;
-import org.dive4elements.river.model.HYK;
-
+import java.math.BigDecimal;
+import java.util.ArrayList;
import java.util.Date;
import java.util.List;
-import java.util.ArrayList;
-import java.math.BigDecimal;
-
+import org.dive4elements.river.importer.common.StoreMode;
+import org.dive4elements.river.model.HYK;
+import org.dive4elements.river.model.HYKEntry;
+import org.hibernate.Query;
import org.hibernate.Session;
-import org.hibernate.Query;
public class ImportHYKEntry
{
@@ -28,17 +27,20 @@
protected List<ImportHYKFormation> formations;
+ protected StoreMode storeMode;
+
protected HYKEntry peer;
public ImportHYKEntry() {
- formations = new ArrayList<ImportHYKFormation>();
+ this.formations = new ArrayList<>();
+ this.storeMode = StoreMode.NONE;
}
public ImportHYKEntry(
- ImportHYK hyk,
- BigDecimal km,
- Date measure
- ) {
+ final ImportHYK hyk,
+ final BigDecimal km,
+ final Date measure
+ ) {
this();
this.hyk = hyk;
this.km = km;
@@ -46,56 +48,63 @@
}
public ImportHYK getHYK() {
- return hyk;
+ return this.hyk;
}
- public void setHYK(ImportHYK hyk) {
+ public void setHYK(final ImportHYK hyk) {
this.hyk = hyk;
}
public BigDecimal getKm() {
- return km;
+ return this.km;
}
- public void setKm(BigDecimal km) {
+ public void setKm(final BigDecimal km) {
this.km = km;
}
- public void addFormation(ImportHYKFormation formation) {
- int numFormation = formations.size();
- formations.add(formation);
+ public void addFormation(final ImportHYKFormation formation) {
+ final int numFormation = this.formations.size();
+ this.formations.add(formation);
formation.setFormationNum(numFormation);
formation.setEntry(this);
}
public void storeDependencies() {
getPeer();
- for (ImportHYKFormation formation: formations) {
+ for (final ImportHYKFormation formation: this.formations) {
formation.storeDependencies();
}
}
public HYKEntry getPeer() {
- if (peer == null) {
- HYK h = hyk.getPeer();
- Session session = ImporterSession.getInstance()
- .getDatabaseSession();
- Query query = session.createQuery(
- "from HYKEntry where HYK=:hyk " +
- "and km=:km and measure=:measure");
- query.setParameter("hyk", h);
- query.setParameter("km", km);
- query.setParameter("measure", measure);
- List<HYKEntry> entries = query.list();
- if (entries.isEmpty()) {
- peer = new HYKEntry(h, km, measure);
- session.save(peer);
+ if (this.peer == null) {
+ final HYK h = this.hyk.getPeer();
+ final Session session = ImporterSession.getInstance()
+ .getDatabaseSession();
+ List<HYKEntry> entries;
+ if (this.hyk.storeMode == StoreMode.INSERT)
+ entries = null;
+ else {
+ final Query query = session.createQuery(
+ "from HYKEntry where HYK=:hyk " +
+ "and km=:km and measure=:measure");
+ query.setParameter("hyk", h);
+ query.setParameter("km", this.km);
+ query.setParameter("measure", this.measure);
+ entries = query.list();
+ }
+ if ((entries == null) || entries.isEmpty()) {
+ this.peer = new HYKEntry(h, this.km, this.measure);
+ session.save(this.peer);
+ this.storeMode = StoreMode.INSERT;
}
else {
- peer = entries.get(0);
+ this.peer = entries.get(0);
+ this.storeMode = StoreMode.UPDATE;
}
}
- return peer;
+ return this.peer;
}
}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
diff -r 0adc6d04de95 -r 2bb38e25091b backend/src/main/java/org/dive4elements/river/importer/ImportHYKFlowZone.java
--- a/backend/src/main/java/org/dive4elements/river/importer/ImportHYKFlowZone.java Wed Apr 11 14:09:13 2018 +0200
+++ b/backend/src/main/java/org/dive4elements/river/importer/ImportHYKFlowZone.java Wed Apr 11 14:20:01 2018 +0200
@@ -8,16 +8,15 @@
package org.dive4elements.river.importer;
-import org.dive4elements.river.model.HYKFormation;
+import java.math.BigDecimal;
+import java.util.List;
+
+import org.dive4elements.river.importer.common.StoreMode;
import org.dive4elements.river.model.HYKFlowZone;
import org.dive4elements.river.model.HYKFlowZoneType;
-
+import org.dive4elements.river.model.HYKFormation;
+import org.hibernate.Query;
import org.hibernate.Session;
-import org.hibernate.Query;
-
-import java.util.List;
-
-import java.math.BigDecimal;
public class ImportHYKFlowZone
{
@@ -32,11 +31,11 @@
}
public ImportHYKFlowZone(
- ImportHYKFormation formation,
- ImportHYKFlowZoneType type,
- BigDecimal a,
- BigDecimal b
- ) {
+ final ImportHYKFormation formation,
+ final ImportHYKFlowZoneType type,
+ final BigDecimal a,
+ final BigDecimal b
+ ) {
this.formation = formation;
this.type = type;
this.a = a;
@@ -44,10 +43,10 @@
}
public ImportHYKFormation getFormation() {
- return formation;
+ return this.formation;
}
- public void setFormation(ImportHYKFormation formation) {
+ public void setFormation(final ImportHYKFormation formation) {
this.formation = formation;
}
@@ -56,29 +55,34 @@
}
public HYKFlowZone getPeer() {
- if (peer == null) {
- HYKFormation f = formation.getPeer();
- HYKFlowZoneType t = type.getPeer();
- Session session = ImporterSession.getInstance()
- .getDatabaseSession();
- Query query = session.createQuery(
- "from HYKFlowZone where formation=:formation " +
- "and type=:type and a=:a and b=:b");
- query.setParameter("formation", f);
- query.setParameter("type", t);
- query.setParameter("a", a);
- query.setParameter("b", b);
- List<HYKFlowZone> zones = query.list();
- if (zones.isEmpty()) {
- peer = new HYKFlowZone(f, t, a, b);
- session.save(peer);
+ if (this.peer == null) {
+ final HYKFormation f = this.formation.getPeer();
+ final HYKFlowZoneType t = this.type.getPeer();
+ final Session session = ImporterSession.getInstance()
+ .getDatabaseSession();
+ List<HYKFlowZone> zones;
+ if (this.formation.storeMode == StoreMode.INSERT)
+ zones = null;
+ {
+ final Query query = session.createQuery(
+ "from HYKFlowZone where formation=:formation " +
+ "and type=:type and a=:a and b=:b");
+ query.setParameter("formation", f);
+ query.setParameter("type", t);
+ query.setParameter("a", this.a);
+ query.setParameter("b", this.b);
+ zones = query.list();
+ }
+ if ((zones == null) || zones.isEmpty()) {
+ this.peer = new HYKFlowZone(f, t, this.a, this.b);
+ session.save(this.peer);
}
else {
- peer = zones.get(0);
+ this.peer = zones.get(0);
}
}
- return peer;
+ return this.peer;
}
}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
diff -r 0adc6d04de95 -r 2bb38e25091b backend/src/main/java/org/dive4elements/river/importer/ImportHYKFormation.java
--- a/backend/src/main/java/org/dive4elements/river/importer/ImportHYKFormation.java Wed Apr 11 14:09:13 2018 +0200
+++ b/backend/src/main/java/org/dive4elements/river/importer/ImportHYKFormation.java Wed Apr 11 14:20:01 2018 +0200
@@ -8,16 +8,15 @@
package org.dive4elements.river.importer;
-import org.dive4elements.river.model.HYKFormation;
-import org.dive4elements.river.model.HYKEntry;
-
+import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
+import org.dive4elements.river.importer.common.StoreMode;
+import org.dive4elements.river.model.HYKEntry;
+import org.dive4elements.river.model.HYKFormation;
+import org.hibernate.Query;
import org.hibernate.Session;
-import org.hibernate.Query;
-
-import java.math.BigDecimal;
public class ImportHYKFormation
{
@@ -31,21 +30,24 @@
protected List<ImportHYKFlowZone> zones;
+ protected StoreMode storeMode;
+
protected HYKFormation peer;
public ImportHYKFormation() {
- zones = new ArrayList<ImportHYKFlowZone>();
+ this.zones = new ArrayList<>();
+ this.storeMode = StoreMode.NONE;
}
public ImportHYKFormation(
- int formationNum,
- ImportHYKEntry entry,
- BigDecimal top,
- BigDecimal bottom,
- BigDecimal distanceVL,
- BigDecimal distanceHF,
- BigDecimal distanceVR
- ) {
+ final int formationNum,
+ final ImportHYKEntry entry,
+ final BigDecimal top,
+ final BigDecimal bottom,
+ final BigDecimal distanceVL,
+ final BigDecimal distanceHF,
+ final BigDecimal distanceVR
+ ) {
this();
this.formationNum = formationNum;
this.entry = entry;
@@ -56,103 +58,110 @@
this.distanceVR = distanceVR;
}
- public void addFlowZone(ImportHYKFlowZone zone) {
- zones.add(zone);
+ public void addFlowZone(final ImportHYKFlowZone zone) {
+ this.zones.add(zone);
zone.setFormation(this);
}
public int getFormationNum() {
- return formationNum;
+ return this.formationNum;
}
- public void setFormationNum(int formationNum) {
+ public void setFormationNum(final int formationNum) {
this.formationNum = formationNum;
}
public ImportHYKEntry getEntry() {
- return entry;
+ return this.entry;
}
- public void setEntry(ImportHYKEntry entry) {
+ public void setEntry(final ImportHYKEntry entry) {
this.entry = entry;
}
public BigDecimal getTop() {
- return top;
+ return this.top;
}
- public void setTop(BigDecimal top) {
+ public void setTop(final BigDecimal top) {
this.top = top;
}
public BigDecimal getBottom() {
- return bottom;
+ return this.bottom;
}
- public void setBottom(BigDecimal bottom) {
+ public void setBottom(final BigDecimal bottom) {
this.bottom = bottom;
}
public BigDecimal getDistanceVL() {
- return distanceVL;
+ return this.distanceVL;
}
- public void setDistanceVL(BigDecimal distanceVL) {
+ public void setDistanceVL(final BigDecimal distanceVL) {
this.distanceVL = distanceVL;
}
public BigDecimal getDistanceHF() {
- return distanceHF;
+ return this.distanceHF;
}
- public void setDistanceHF(BigDecimal distanceHF) {
+ public void setDistanceHF(final BigDecimal distanceHF) {
this.distanceHF = distanceHF;
}
public BigDecimal getDistanceVR() {
- return distanceVR;
+ return this.distanceVR;
}
- public void setDistanceVR(BigDecimal distanceVR) {
+ public void setDistanceVR(final BigDecimal distanceVR) {
this.distanceVR = distanceVR;
}
public void storeDependencies() {
getPeer();
- for (ImportHYKFlowZone zone: zones) {
+ for (final ImportHYKFlowZone zone: this.zones) {
zone.storeDependencies();
}
}
public HYKFormation getPeer() {
- if (peer == null) {
- HYKEntry e = entry.getPeer();
- Session session = ImporterSession.getInstance()
- .getDatabaseSession();
- Query query = session.createQuery(
- "from HYKFormation where formationNum=:formationNum " +
- "and entry=:entry and top=:top and bottom=:bottom " +
- "and distanceVL=:distanceVL and distanceHF=:distanceHF " +
- "and distanceVR=:distanceVR");
- query.setParameter("formationNum", formationNum);
- query.setParameter("entry", e);
- query.setParameter("top", top);
- query.setParameter("bottom", bottom);
- query.setParameter("distanceVL", distanceVL);
- query.setParameter("distanceHF", distanceHF);
- query.setParameter("distanceVR", distanceVR);
- List<HYKFormation> formations = query.list();
- if (formations.isEmpty()) {
- peer = new HYKFormation(
- formationNum, e, top, bottom,
- distanceVL, distanceHF, distanceVR);
- session.save(peer);
+ if (this.peer == null) {
+ final HYKEntry e = this.entry.getPeer();
+ final Session session = ImporterSession.getInstance()
+ .getDatabaseSession();
+ List<HYKFormation> formations;
+ if (this.entry.storeMode == StoreMode.INSERT)
+ formations = null;
+ else {
+ final Query query = session.createQuery(
+ "from HYKFormation where formationNum=:formationNum " +
+ "and entry=:entry and top=:top and bottom=:bottom " +
+ "and distanceVL=:distanceVL and distanceHF=:distanceHF " +
+ "and distanceVR=:distanceVR");
+ query.setParameter("formationNum", this.formationNum);
+ query.setParameter("entry", e);
+ query.setParameter("top", this.top);
+ query.setParameter("bottom", this.bottom);
+ query.setParameter("distanceVL", this.distanceVL);
+ query.setParameter("distanceHF", this.distanceHF);
+ query.setParameter("distanceVR", this.distanceVR);
+ formations = query.list();
+ }
+ if ((formations == null) || formations.isEmpty()) {
+ this.peer = new HYKFormation(
+ this.formationNum, e, this.top, this.bottom,
+ this.distanceVL, this.distanceHF, this.distanceVR);
+ session.save(this.peer);
+ this.storeMode = StoreMode.INSERT;
}
else {
- peer = formations.get(0);
+ this.peer = formations.get(0);
+ this.storeMode = StoreMode.UPDATE;
}
}
- return peer;
+ return this.peer;
}
}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
diff -r 0adc6d04de95 -r 2bb38e25091b backend/src/main/java/org/dive4elements/river/importer/ImportPorosity.java
--- a/backend/src/main/java/org/dive4elements/river/importer/ImportPorosity.java Wed Apr 11 14:09:13 2018 +0200
+++ b/backend/src/main/java/org/dive4elements/river/importer/ImportPorosity.java Wed Apr 11 14:20:01 2018 +0200
@@ -12,12 +12,12 @@
import java.util.List;
import org.apache.log4j.Logger;
+import org.dive4elements.river.importer.common.StoreMode;
+import org.dive4elements.river.model.Porosity;
+import org.dive4elements.river.model.River;
import org.hibernate.Query;
import org.hibernate.Session;
-import org.dive4elements.river.model.River;
-import org.dive4elements.river.model.Porosity;
-
public class ImportPorosity {
@@ -33,82 +33,88 @@
protected List<ImportPorosityValue> values;
- public ImportPorosity(String description) {
+ protected StoreMode storeMode;
+
+ public ImportPorosity(final String description) {
this.description = description;
- this.values = new ArrayList<ImportPorosityValue>();
+ this.values = new ArrayList<>();
+ this.storeMode = StoreMode.NONE;
}
public String getDescription() {
- return description;
+ return this.description;
}
- public void setDepth(ImportDepth depth) {
+ public void setDepth(final ImportDepth depth) {
this.depth = depth;
}
- public void setTimeInterval(ImportTimeInterval importTimeInterval) {
+ public void setTimeInterval(final ImportTimeInterval importTimeInterval) {
this.timeInterval = importTimeInterval;
}
- public void addValue(ImportPorosityValue value) {
- values.add(value);
+ public void addValue(final ImportPorosityValue value) {
+ this.values.add(value);
}
- public void storeDependencies(River river) {
- log.info("store dependencies");
+ public void storeDependencies(final River river) {
+ log.info("store dependencies for '" + getDescription() + "'");
- if (depth != null) {
- depth.storeDependencies();
+ if (this.depth != null) {
+ this.depth.storeDependencies();
}
- Porosity peer = getPeer(river);
+ final Porosity peer = getPeer(river);
if (peer != null) {
- log.info("store porosity values.");
- for (ImportPorosityValue value : values) {
- value.storeDependencies(peer);
+ // log.info("store porosity values.");
+ for (final ImportPorosityValue value : this.values) {
+ value.storeDependencies(peer, this.storeMode);
}
+ log.info("Porosity values processed: " + this.values.size());
}
}
- public Porosity getPeer(River river) {
- log.info("get peer");
+ public Porosity getPeer(final River river) {
+ // log.info("get peer");
- if (depth == null) {
- log.warn("cannot store porosity '" + description
- + "': no depth");
+ if (this.depth == null) {
+ log.warn("cannot store porosity '" + this.description
+ + "': no depth");
return null;
}
- if (peer == null) {
- Session session = ImporterSession.getInstance()
- .getDatabaseSession();
+ if (this.peer == null) {
+ final Session session = ImporterSession.getInstance()
+ .getDatabaseSession();
- Query query = session.createQuery("from Porosity where "
- + " river=:river and "
- + " depth=:depth and "
- + " description=:description");
+ final Query query = session.createQuery("from Porosity where "
+ + " river=:river and "
+ + " depth=:depth and "
+ + " description=:description");
query.setParameter("river", river);
- query.setParameter("depth", depth.getPeer());
- query.setParameter("description", description);
+ query.setParameter("depth", this.depth.getPeer());
+ query.setParameter("description", this.description);
- List<Porosity> porosity = query.list();
+ final List<Porosity> porosity = query.list();
if (porosity.isEmpty()) {
log.debug("Create new Porosity DB instance.");
- peer = new Porosity(river, depth.getPeer(),
- description, timeInterval.getPeer());
+ this.peer = new Porosity(river, this.depth.getPeer(),
+ this.description, this.timeInterval.getPeer());
- session.save(peer);
+ session.save(this.peer);
+ this.storeMode = StoreMode.INSERT;
}
else {
- peer = porosity.get(0);
+ this.peer = porosity.get(0);
+ this.storeMode = StoreMode.UPDATE;
}
}
- return peer;
+ return this.peer;
}
}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
diff -r 0adc6d04de95 -r 2bb38e25091b backend/src/main/java/org/dive4elements/river/importer/ImportPorosityValue.java
--- a/backend/src/main/java/org/dive4elements/river/importer/ImportPorosityValue.java Wed Apr 11 14:09:13 2018 +0200
+++ b/backend/src/main/java/org/dive4elements/river/importer/ImportPorosityValue.java Wed Apr 11 14:20:01 2018 +0200
@@ -9,22 +9,20 @@
package org.dive4elements.river.importer;
import java.math.BigDecimal;
-
import java.util.List;
import org.apache.log4j.Logger;
-
-import org.hibernate.Session;
-import org.hibernate.Query;
-
+import org.dive4elements.river.importer.common.StoreMode;
import org.dive4elements.river.model.Porosity;
import org.dive4elements.river.model.PorosityValue;
+import org.hibernate.Query;
+import org.hibernate.Session;
public class ImportPorosityValue {
private static final Logger log =
- Logger.getLogger(ImportPorosityValue.class);
+ Logger.getLogger(ImportPorosityValue.class);
protected PorosityValue peer;
@@ -39,11 +37,11 @@
public ImportPorosityValue(
- BigDecimal station,
- BigDecimal shoreOffset,
- BigDecimal porosity,
- String description
- ) {
+ final BigDecimal station,
+ final BigDecimal shoreOffset,
+ final BigDecimal porosity,
+ final String description
+ ) {
this.station = station;
this.shoreOffset = shoreOffset;
this.porosity = porosity;
@@ -51,53 +49,57 @@
}
- public void storeDependencies(Porosity porosity) {
- log.info("store dependencies");
+ public void storeDependencies(final Porosity porosity, final StoreMode parentStoreMode) {
+ // log.info("store dependencies");
- getPeer(porosity);
+ getPeer(porosity, parentStoreMode);
}
- public PorosityValue getPeer(Porosity porosity) {
+ public PorosityValue getPeer(final Porosity porosity, final StoreMode parentStoreMode) {
log.info("get peer");
- if (peer == null) {
- Session session = ImporterSession.getInstance()
- .getDatabaseSession();
+ if (this.peer == null) {
+ final Session session = ImporterSession.getInstance()
+ .getDatabaseSession();
+ List<PorosityValue> values;
+ if (parentStoreMode == StoreMode.INSERT)
+ values = null;
+ else {
+ final Query query = session.createQuery(
+ "from PorosityValue "
+ + "where porosity=:porosity "
+ + "and station between :station - 0.0001f "
+ + " and :station + 0.0001f "
+ + "and porosityValue between :poros -0.0001f "
+ + " and :poros + 0.0001f "
+ + "and description=:description");
- Query query = session.createQuery(
- "from PorosityValue "
- + "where porosity=:porosity "
- + "and station between :station - 0.0001f "
- + " and :station + 0.0001f "
- + "and porosityValue between :poros -0.0001f "
- + " and :poros + 0.0001f "
- + "and description=:description");
+ query.setParameter("porosity", porosity);
+ query.setParameter("station", this.station.floatValue());
+ query.setParameter("poros", this.porosity.floatValue());
+ query.setParameter("description", this.description);
- query.setParameter("porosity", porosity);
- query.setParameter("station", station.floatValue());
- query.setParameter("poros", this.porosity.floatValue());
- query.setParameter("description", description);
+ values = query.list();
+ }
+ if ((values == null) || values.isEmpty()) {
+ // log.debug("Create new PorosityValue DB instance.");
- List<PorosityValue> values = query.list();
- if (values.isEmpty()) {
- log.debug("Create new PorosityValue DB instance.");
+ this.peer = new PorosityValue(
+ porosity,
+ this.station,
+ this.shoreOffset,
+ this.porosity,
+ this.description);
- peer = new PorosityValue(
- porosity,
- station,
- shoreOffset,
- this.porosity,
- description);
-
- session.save(peer);
+ session.save(this.peer);
}
else {
- peer = values.get(0);
+ this.peer = values.get(0);
}
}
- return peer;
+ return this.peer;
}
}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
diff -r 0adc6d04de95 -r 2bb38e25091b backend/src/main/java/org/dive4elements/river/importer/ImportRiver.java
--- a/backend/src/main/java/org/dive4elements/river/importer/ImportRiver.java Wed Apr 11 14:09:13 2018 +0200
+++ b/backend/src/main/java/org/dive4elements/river/importer/ImportRiver.java Wed Apr 11 14:20:01 2018 +0200
@@ -391,6 +391,10 @@
return this.wstFile.getParentFile().getParentFile().getParentFile();
}
+ public AnnotationClassifier getAnnotationClassifier() {
+ return this.annotationClassifier;
+ }
+
public void parseDependencies() throws IOException {
log.info("Root dir is '" + getRiverDir() + "'");
parseGauges();
diff -r 0adc6d04de95 -r 2bb38e25091b backend/src/main/java/org/dive4elements/river/importer/ImportSedimentLoad.java
--- a/backend/src/main/java/org/dive4elements/river/importer/ImportSedimentLoad.java Wed Apr 11 14:09:13 2018 +0200
+++ b/backend/src/main/java/org/dive4elements/river/importer/ImportSedimentLoad.java Wed Apr 11 14:20:01 2018 +0200
@@ -8,9 +8,11 @@
package org.dive4elements.river.importer;
+import java.util.ArrayList;
import java.util.List;
-import java.util.ArrayList;
+import org.apache.log4j.Logger;
+import org.dive4elements.river.importer.common.StoreMode;
import org.dive4elements.river.model.GrainFraction;
import org.dive4elements.river.model.SedimentLoad;
import org.dive4elements.river.model.TimeInterval;
@@ -19,6 +21,8 @@
public class ImportSedimentLoad
{
+ private static Logger log = Logger.getLogger(ImportSedimentLoad.class);
+
private SedimentLoad peer;
private ImportGrainFraction grainFraction;
@@ -27,92 +31,98 @@
private String description;
private Integer kind;
- private List<ImportSedimentLoadValue> values;
+ private final List<ImportSedimentLoadValue> values;
+
+ protected StoreMode storeMode;
public ImportSedimentLoad() {
- this.values = new ArrayList<ImportSedimentLoadValue>();
+ this.values = new ArrayList<>();
}
public ImportSedimentLoad(
- ImportGrainFraction grainFraction,
- ImportTimeInterval timeInterval,
- ImportTimeInterval sqTimeInterval,
- String description,
- Integer kind
- ) {
+ final ImportGrainFraction grainFraction,
+ final ImportTimeInterval timeInterval,
+ final ImportTimeInterval sqTimeInterval,
+ final String description,
+ final Integer kind
+ ) {
this.grainFraction = grainFraction;
this.timeInterval = timeInterval;
this.sqTimeInterval = sqTimeInterval;
this.description = description;
this.kind = kind;
- this.values = new ArrayList<ImportSedimentLoadValue>();
+ this.values = new ArrayList<>();
+ this.storeMode = StoreMode.NONE;
}
- public void addValue(ImportSedimentLoadValue value) {
- values.add(value);
+ public void addValue(final ImportSedimentLoadValue value) {
+ this.values.add(value);
}
public void storeDependencies() {
- grainFraction.getPeer();
- timeInterval.getPeer();
+ log.info("store dependencies for '" + this.description + "'");
+ this.grainFraction.getPeer();
+ this.timeInterval.getPeer();
- if (sqTimeInterval != null) {
- sqTimeInterval.getPeer();
+ if (this.sqTimeInterval != null) {
+ this.sqTimeInterval.getPeer();
}
getPeer();
- for (ImportSedimentLoadValue value : values) {
- value.storeDependencies(peer);
+ for (final ImportSedimentLoadValue value : this.values) {
+ value.storeDependencies(this.peer, this.storeMode);
}
-
+ log.info("Values processed: " + this.values.size());
}
public SedimentLoad getPeer() {
- if (peer == null) {
- Session session = ImporterSession.getInstance()
- .getDatabaseSession();
+ if (this.peer == null) {
+ final Session session = ImporterSession.getInstance()
+ .getDatabaseSession();
- String sqtquery = sqTimeInterval == null
- ? "sq_time_interval_id is null"
- : "sqTimeInterval = :sqTimeInterval";
- Query query = session.createQuery(
- "from SedimentLoad where " +
- " grainFraction = :grainFraction and " +
- " timeInterval = :timeInterval and " +
- " description = :description and " +
- " kind = :kind and " +
- sqtquery);
+ final String sqtquery = this.sqTimeInterval == null
+ ? "sq_time_interval_id is null"
+ : "sqTimeInterval = :sqTimeInterval";
+ final Query query = session.createQuery(
+ "from SedimentLoad where " +
+ " grainFraction = :grainFraction and " +
+ " timeInterval = :timeInterval and " +
+ " description = :description and " +
+ " kind = :kind and " +
+ sqtquery);
- GrainFraction gf = grainFraction.getPeer();
- TimeInterval ti = timeInterval.getPeer();
+ final GrainFraction gf = this.grainFraction.getPeer();
+ final TimeInterval ti = this.timeInterval.getPeer();
- TimeInterval sqti = sqTimeInterval != null
- ? sqTimeInterval.getPeer()
- : null;
+ final TimeInterval sqti = this.sqTimeInterval != null
+ ? this.sqTimeInterval.getPeer()
+ : null;
- query.setParameter("grainFraction", gf);
- query.setParameter("timeInterval", ti);
+ query.setParameter("grainFraction", gf);
+ query.setParameter("timeInterval", ti);
- if (sqti != null) {
- query.setParameter("sqTimeInterval", sqti);
- }
- query.setParameter("description", description);
- query.setParameter("kind", kind);
+ if (sqti != null) {
+ query.setParameter("sqTimeInterval", sqti);
+ }
+ query.setParameter("description", this.description);
+ query.setParameter("kind", this.kind);
- List<SedimentLoad> loads = query.list();
- if (loads.isEmpty()) {
- peer = new SedimentLoad(gf, ti, sqti, description, kind);
- session.save(peer);
- }
- else {
- peer = loads.get(0);
- }
+ final List<SedimentLoad> loads = query.list();
+ if (loads.isEmpty()) {
+ this.peer = new SedimentLoad(gf, ti, sqti, this.description, this.kind);
+ session.save(this.peer);
+ this.storeMode = StoreMode.INSERT;
+ }
+ else {
+ this.peer = loads.get(0);
+ this.storeMode = StoreMode.UPDATE;
+ }
}
- return peer;
+ return this.peer;
}
}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
diff -r 0adc6d04de95 -r 2bb38e25091b backend/src/main/java/org/dive4elements/river/importer/ImportSedimentLoadLS.java
--- a/backend/src/main/java/org/dive4elements/river/importer/ImportSedimentLoadLS.java Wed Apr 11 14:09:13 2018 +0200
+++ b/backend/src/main/java/org/dive4elements/river/importer/ImportSedimentLoadLS.java Wed Apr 11 14:20:01 2018 +0200
@@ -12,15 +12,14 @@
import java.util.List;
import org.apache.log4j.Logger;
-
-import org.hibernate.Session;
-import org.hibernate.Query;
-
+import org.dive4elements.river.importer.common.StoreMode;
import org.dive4elements.river.model.GrainFraction;
import org.dive4elements.river.model.River;
import org.dive4elements.river.model.SedimentLoadLS;
import org.dive4elements.river.model.TimeInterval;
import org.dive4elements.river.model.Unit;
+import org.hibernate.Query;
+import org.hibernate.Session;
public class ImportSedimentLoadLS {
@@ -35,53 +34,56 @@
private ImportTimeInterval sqTimeInterval;
- private String description;
+ private final String description;
private Integer kind;
- private List<ImportSedimentLoadLSValue> values;
+ private final List<ImportSedimentLoadLSValue> values;
+
+ protected StoreMode storeMode;
private SedimentLoadLS peer;
- public ImportSedimentLoadLS(String description) {
- this.values = new ArrayList<ImportSedimentLoadLSValue>();
+ public ImportSedimentLoadLS(final String description) {
+ this.values = new ArrayList<>();
this.description = description;
+ this.storeMode = StoreMode.NONE;
}
- public void setTimeInterval(ImportTimeInterval timeInterval) {
+ public void setTimeInterval(final ImportTimeInterval timeInterval) {
this.timeInterval = timeInterval;
}
- public void setSQTimeInterval(ImportTimeInterval sqTimeInterval) {
+ public void setSQTimeInterval(final ImportTimeInterval sqTimeInterval) {
this.sqTimeInterval = sqTimeInterval;
}
- public void setUnit(ImportUnit unit) {
+ public void setUnit(final ImportUnit unit) {
this.unit = unit;
}
- public void setGrainFraction(ImportGrainFraction grainFraction) {
+ public void setGrainFraction(final ImportGrainFraction grainFraction) {
this.grainFraction = grainFraction;
}
- public void setKind(Integer kind) {
+ public void setKind(final Integer kind) {
this.kind = kind;
}
- public void addValue(ImportSedimentLoadLSValue value) {
+ public void addValue(final ImportSedimentLoadLSValue value) {
this.values.add(value);
}
- public void storeDependencies(River river) {
- log.debug("store dependencies");
+ public void storeDependencies(final River river) {
+ log.info("store dependencies for '" + this.description + "'");
- SedimentLoadLS peer = getPeer(river);
+ final SedimentLoadLS peer = getPeer(river);
if (peer != null) {
int i = 0;
- for (ImportSedimentLoadLSValue value : values) {
- value.storeDependencies(peer);
+ for (final ImportSedimentLoadLSValue value : this.values) {
+ value.storeDependencies(peer, this.storeMode);
i++;
}
@@ -89,40 +91,38 @@
}
}
- public SedimentLoadLS getPeer(River river) {
+ public SedimentLoadLS getPeer(final River river) {
log.debug("get peer");
- GrainFraction gf = grainFraction != null ? grainFraction.getPeer()
- : null;
+ final GrainFraction gf = this.grainFraction != null ? this.grainFraction.getPeer()
+ : null;
- Unit u = unit != null ? unit.getPeer() : null;
+ final Unit u = this.unit != null ? this.unit.getPeer() : null;
- TimeInterval ti = timeInterval != null ? timeInterval.getPeer() : null;
- TimeInterval sqti = sqTimeInterval != null
- ? sqTimeInterval.getPeer()
- : null;
+ final TimeInterval ti = (this.timeInterval != null) ? this.timeInterval.getPeer() : null;
+ final TimeInterval sqti = (this.sqTimeInterval != null) ? this.sqTimeInterval.getPeer() : null;
if (ti == null || u == null) {
log.warn(
- "Skip invalid SedimentLoadLS: time interval or unit null!");
+ "Skip invalid SedimentLoadLS: time interval or unit null!");
return null;
}
- if (peer == null) {
- Session session = ImporterSession.getInstance()
- .getDatabaseSession();
+ if (this.peer == null) {
+ final Session session = ImporterSession.getInstance()
+ .getDatabaseSession();
- String sqtquery = sqTimeInterval == null ?
- "sq_time_interval_id is null" :
- "sqTimeInterval = :sqTimeInterval";
- Query query = session.createQuery("from SedimentLoadLS where "
- + " river=:river and "
- + " grainFraction=:grainFraction and "
- + " unit=:unit and "
- + " timeInterval=:timeInterval and "
- + " description=:description and "
- + " kind = :kind and " +
- sqtquery);
+ final String sqtquery = this.sqTimeInterval == null ?
+ "sq_time_interval_id is null" :
+ "sqTimeInterval = :sqTimeInterval";
+ final Query query = session.createQuery("from SedimentLoadLS where "
+ + " river=:river and "
+ + " grainFraction=:grainFraction and "
+ + " unit=:unit and "
+ + " timeInterval=:timeInterval and "
+ + " description=:description and "
+ + " kind = :kind and " +
+ sqtquery);
query.setParameter("river", river);
query.setParameter("grainFraction", gf);
@@ -131,23 +131,25 @@
if (sqti != null) {
query.setParameter("sqTimeInterval", sqti);
}
- query.setParameter("description", description);
- query.setParameter("kind", kind);
+ query.setParameter("description", this.description);
+ query.setParameter("kind", this.kind);
- List<SedimentLoadLS> loads = query.list();
+ final List<SedimentLoadLS> loads = query.list();
if (loads.isEmpty()) {
log.debug("create new SedimentLoadLS");
- peer = new SedimentLoadLS(river, u, ti, sqti, gf, description);
- peer.setKind(this.kind);
- session.save(peer);
+ this.peer = new SedimentLoadLS(river, u, ti, sqti, gf, this.description);
+ this.peer.setKind(this.kind);
+ session.save(this.peer);
+ this.storeMode = StoreMode.INSERT;
}
else {
- peer = loads.get(0);
+ this.peer = loads.get(0);
+ this.storeMode = StoreMode.UPDATE;
}
}
- return peer;
+ return this.peer;
}
}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
diff -r 0adc6d04de95 -r 2bb38e25091b backend/src/main/java/org/dive4elements/river/importer/ImportSedimentLoadLSValue.java
--- a/backend/src/main/java/org/dive4elements/river/importer/ImportSedimentLoadLSValue.java Wed Apr 11 14:09:13 2018 +0200
+++ b/backend/src/main/java/org/dive4elements/river/importer/ImportSedimentLoadLSValue.java Wed Apr 11 14:20:01 2018 +0200
@@ -10,58 +10,60 @@
import java.util.List;
-import org.hibernate.Session;
-import org.hibernate.Query;
-
+import org.dive4elements.river.importer.common.StoreMode;
import org.dive4elements.river.model.SedimentLoadLS;
import org.dive4elements.river.model.SedimentLoadLSValue;
+import org.hibernate.Query;
+import org.hibernate.Session;
public class ImportSedimentLoadLSValue {
- private Double station;
- private Double value;
+ private final Double station;
+ private final Double value;
private SedimentLoadLSValue peer;
- public ImportSedimentLoadLSValue(Double station, Double value) {
+ public ImportSedimentLoadLSValue(final Double station, final Double value) {
this.station = station;
this.value = value;
}
- public void storeDependencies(SedimentLoadLS sedimentLoadLS) {
- getPeer(sedimentLoadLS);
+ public void storeDependencies(final SedimentLoadLS sedimentLoadLS, final StoreMode parentStoreMode) {
+ getPeer(sedimentLoadLS, parentStoreMode);
}
- public SedimentLoadLSValue getPeer(SedimentLoadLS sedimentLoadLS) {
- if (peer == null) {
- Session session = ImporterSession.getInstance()
- .getDatabaseSession();
- Query query = session.createQuery(
- "from SedimentLoadLSValue where " +
- " sedimentLoadLS=:sedimentLoadLS and " +
- " station=:station and " +
- " value=:value"
- );
-
- query.setParameter("sedimentLoadLS", sedimentLoadLS);
- query.setParameter("station", station);
- query.setParameter("value", value);
-
- List<SedimentLoadLSValue> values = query.list();
- if (values.isEmpty()) {
- peer = new SedimentLoadLSValue(sedimentLoadLS, station, value);
- session.save(peer);
+ public SedimentLoadLSValue getPeer(final SedimentLoadLS sedimentLoadLS, final StoreMode parentStoreMode) {
+ if (this.peer == null) {
+ List<SedimentLoadLSValue> values;
+ final Session session = ImporterSession.getInstance().getDatabaseSession();
+ if (parentStoreMode == StoreMode.INSERT)
+ values = null;
+ else {
+ final Query query = session.createQuery(
+ "from SedimentLoadLSValue where " +
+ " sedimentLoadLS=:sedimentLoadLS and " +
+ " station=:station and " +
+ " value=:value"
+ );
+ query.setParameter("sedimentLoadLS", sedimentLoadLS);
+ query.setParameter("station", this.station);
+ query.setParameter("value", this.value);
+ values = query.list();
+ }
+ if ((values == null) || values.isEmpty()) {
+ this.peer = new SedimentLoadLSValue(sedimentLoadLS, this.station, this.value);
+ session.save(this.peer);
}
else {
- peer = values.get(0);
+ this.peer = values.get(0);
}
}
- return peer;
+ return this.peer;
}
}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
diff -r 0adc6d04de95 -r 2bb38e25091b backend/src/main/java/org/dive4elements/river/importer/ImportSedimentLoadValue.java
--- a/backend/src/main/java/org/dive4elements/river/importer/ImportSedimentLoadValue.java Wed Apr 11 14:09:13 2018 +0200
+++ b/backend/src/main/java/org/dive4elements/river/importer/ImportSedimentLoadValue.java Wed Apr 11 14:20:01 2018 +0200
@@ -10,6 +10,7 @@
import java.util.List;
+import org.dive4elements.river.importer.common.StoreMode;
import org.dive4elements.river.model.MeasurementStation;
import org.dive4elements.river.model.SedimentLoad;
import org.dive4elements.river.model.SedimentLoadValue;
@@ -27,43 +28,48 @@
}
public ImportSedimentLoadValue(
- MeasurementStation station,
- Double value
- ) {
+ final MeasurementStation station,
+ final Double value
+ ) {
this.station = station;
this.value = value;
}
- protected SedimentLoadValue getPeer(SedimentLoad sedimentLoad) {
+ protected SedimentLoadValue getPeer(final SedimentLoad sedimentLoad, final StoreMode parentStoreMode) {
- if (peer == null) {
- Session session = ImporterSession.getInstance()
- .getDatabaseSession();
- Query query = session.createQuery(
- "from SedimentLoadValue where " +
- " measurementStation = :station and " +
- " sedimentLoad = :sedimentLoad and " +
- " value = :value");
+ if (this.peer == null) {
+ final Session session = ImporterSession.getInstance()
+ .getDatabaseSession();
+ List<SedimentLoadValue> values;
+ if (parentStoreMode == StoreMode.INSERT)
+ values = null;
+ else {
+ final Query query = session.createQuery(
+ "from SedimentLoadValue where " +
+ " measurementStation = :station and " +
+ " sedimentLoad = :sedimentLoad and " +
+ " value = :value");
- query.setParameter("station", station);
- query.setParameter("sedimentLoad", sedimentLoad);
- query.setParameter("value", value);
+ query.setParameter("station", this.station);
+ query.setParameter("sedimentLoad", sedimentLoad);
+ query.setParameter("value", this.value);
- List<SedimentLoadValue> values = query.list();
- if (values.isEmpty()) {
- peer = new SedimentLoadValue(sedimentLoad, station, value);
- session.save(peer);
+ values = query.list();
+ }
+ if ((values == null) || values.isEmpty()) {
+ this.peer = new SedimentLoadValue(sedimentLoad, this.station, this.value);
+ session.save(this.peer);
}
else {
- peer = values.get(0);
+ this.peer = values.get(0);
}
}
- return peer;
+ return this.peer;
}
- public void storeDependencies(SedimentLoad sedimentLoad) {
- getPeer(sedimentLoad);
+ public void storeDependencies(final SedimentLoad sedimentLoad, final StoreMode parentStoreMode) {
+ getPeer(sedimentLoad, parentStoreMode);
}
}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
diff -r 0adc6d04de95 -r 2bb38e25091b backend/src/main/java/org/dive4elements/river/importer/ImportWst.java
--- a/backend/src/main/java/org/dive4elements/river/importer/ImportWst.java Wed Apr 11 14:09:13 2018 +0200
+++ b/backend/src/main/java/org/dive4elements/river/importer/ImportWst.java Wed Apr 11 14:20:01 2018 +0200
@@ -8,16 +8,15 @@
package org.dive4elements.river.importer;
-import org.dive4elements.river.model.Wst;
-import org.dive4elements.river.model.River;
+import java.util.ArrayList;
+import java.util.List;
import org.apache.log4j.Logger;
-
+import org.dive4elements.river.importer.common.StoreMode;
+import org.dive4elements.river.model.River;
+import org.dive4elements.river.model.Wst;
+import org.hibernate.Query;
import org.hibernate.Session;
-import org.hibernate.Query;
-
-import java.util.ArrayList;
-import java.util.List;
/** Not (yet) db-mapped WST object. */
public class ImportWst
@@ -29,12 +28,12 @@
}
public static final ImportWstColumnFactory COLUMN_FACTORY =
- new ImportWstColumnFactory() {
- @Override
- public ImportWstColumn create(ImportWst importWst, int position) {
- return new ImportWstColumn(importWst, null, null, position);
- }
- };
+ new ImportWstColumnFactory() {
+ @Override
+ public ImportWstColumn create(final ImportWst importWst, final int position) {
+ return new ImportWstColumn(importWst, null, null, position);
+ }
+ };
protected String description;
@@ -48,6 +47,8 @@
protected boolean kmUp;
+ protected StoreMode storeMode;
+
/** Wst as in db. */
protected Wst peer;
@@ -55,123 +56,126 @@
this(COLUMN_FACTORY);
}
- public ImportWst(ImportWstColumnFactory columnFactory) {
+ public ImportWst(final ImportWstColumnFactory columnFactory) {
this.columnFactory = columnFactory;
- kind = 0;
- columns = new ArrayList<ImportWstColumn>();
+ this.kind = 0;
+ this.columns = new ArrayList<>();
+ this.storeMode = StoreMode.NONE;
}
- public ImportWst(String description) {
+ public ImportWst(final String description) {
this(description, COLUMN_FACTORY);
}
public ImportWst(
- String description,
- ImportWstColumnFactory columnFactory
- ) {
+ final String description,
+ final ImportWstColumnFactory columnFactory
+ ) {
this(columnFactory);
this.description = description;
}
public String getDescription() {
- return description;
+ return this.description;
}
public Integer getKind() {
- return kind;
+ return this.kind;
}
- public void setKind(Integer kind) {
+ public void setKind(final Integer kind) {
this.kind = kind;
}
public boolean getKmUp() {
- return kmUp;
+ return this.kmUp;
}
- public void setKmUp(boolean kmUp) {
+ public void setKmUp(final boolean kmUp) {
this.kmUp = kmUp;
}
- public void setDescription(String description) {
+ public void setDescription(final String description) {
this.description = description;
}
/** Create columns that can be accessed with getColumn. */
- public void setNumberColumns(int numColumns) {
+ public void setNumberColumns(final int numColumns) {
for (int i = 0; i < numColumns; ++i) {
- columns.add(columnFactory.create(this, i));
+ this.columns.add(this.columnFactory.create(this, i));
}
}
public int getNumberColumns() {
- return columns.size();
+ return this.columns.size();
}
- public ImportWstColumn getColumn(int index) {
- return columns.get(index);
+ public ImportWstColumn getColumn(final int index) {
+ return this.columns.get(index);
}
public List<ImportWstColumn> getColumns() {
- return columns;
+ return this.columns;
}
/** Adds a column. Assumes that columns wst is this instance. */
- public void addColumn(ImportWstColumn column) {
- columns.add(column);
+ public void addColumn(final ImportWstColumn column) {
+ this.columns.add(column);
}
public ImportUnit getUnit() {
- return unit;
+ return this.unit;
}
- public void setUnit(ImportUnit unit) {
+ public void setUnit(final ImportUnit unit) {
this.unit = unit;
}
- public void storeDependencies(River river) {
+ public void storeDependencies(final River river) {
- log.info("store '" + description + "'");
+ log.info("store '" + this.description + "'");
getPeer(river);
- for (ImportWstColumn column: columns) {
+ for (final ImportWstColumn column: this.columns) {
column.storeDependencies(river);
}
- Session session = ImporterSession.getInstance().getDatabaseSession();
+ final Session session = ImporterSession.getInstance().getDatabaseSession();
session.flush();
}
public boolean guessWaterLevelIncreasing() {
int up = 0;
- for (ImportWstColumn column: columns) {
+ for (final ImportWstColumn column: this.columns) {
if (column.guessWaterLevelIncreasing()) ++up;
}
- return up > columns.size() - up;
+ return up > this.columns.size() - up;
}
/** Get corresponding mapped wst (from database). */
- public Wst getPeer(River river) {
- if (peer == null) {
- Session session = ImporterSession.getInstance()
- .getDatabaseSession();
- Query query = session.createQuery(
- "from Wst where " +
- "river=:river and description=:description and kind=:kind");
+ public Wst getPeer(final River river) {
+ if (this.peer == null) {
+ final Session session = ImporterSession.getInstance()
+ .getDatabaseSession();
+ final Query query = session.createQuery(
+ "from Wst where " +
+ "river=:river and description=:description and kind=:kind");
query.setParameter("river", river);
- query.setParameter("description", description);
- query.setParameter("kind", kind);
- List<Wst> wsts = query.list();
+ query.setParameter("description", this.description);
+ query.setParameter("kind", this.kind);
+ final List<Wst> wsts = query.list();
if (wsts.isEmpty()) {
- peer = new Wst(river, description, kind);
- session.save(peer);
+ this.peer = new Wst(river, this.description, this.kind);
+ session.save(this.peer);
+ this.storeMode = StoreMode.INSERT;
}
else {
- peer = wsts.get(0);
+ this.peer = wsts.get(0);
+ this.storeMode = StoreMode.UPDATE;
}
}
- return peer;
+ return this.peer;
}
}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
diff -r 0adc6d04de95 -r 2bb38e25091b backend/src/main/java/org/dive4elements/river/importer/ImportWstColumn.java
--- a/backend/src/main/java/org/dive4elements/river/importer/ImportWstColumn.java Wed Apr 11 14:09:13 2018 +0200
+++ b/backend/src/main/java/org/dive4elements/river/importer/ImportWstColumn.java Wed Apr 11 14:20:01 2018 +0200
@@ -8,21 +8,19 @@
package org.dive4elements.river.importer;
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Random;
+
+import org.apache.log4j.Logger;
+import org.dive4elements.river.importer.common.StoreMode;
+import org.dive4elements.river.model.River;
+import org.dive4elements.river.model.TimeInterval;
import org.dive4elements.river.model.Wst;
import org.dive4elements.river.model.WstColumn;
-import org.dive4elements.river.model.River;
-import org.dive4elements.river.model.TimeInterval;
-
+import org.hibernate.Query;
import org.hibernate.Session;
-import org.hibernate.Query;
-
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Random;
-
-import java.math.BigDecimal;
-
-import org.apache.log4j.Logger;
/** Unmapped column of a WST. */
@@ -41,20 +39,23 @@
protected List<ImportWstColumnQRange> columnQRanges;
protected List<ImportWstColumnValue> columnValues;
+ protected StoreMode storeMode;
+
protected WstColumn peer;
public ImportWstColumn() {
- columnQRanges = new ArrayList<ImportWstColumnQRange>();
- columnValues = new ArrayList<ImportWstColumnValue>();
+ this.columnQRanges = new ArrayList<>();
+ this.columnValues = new ArrayList<>();
+ this.storeMode = StoreMode.NONE;
}
public ImportWstColumn(
- ImportWst wst,
- String name,
- String description,
- Integer position,
- String source
- ) {
+ final ImportWst wst,
+ final String name,
+ final String description,
+ final Integer position,
+ final String source
+ ) {
this();
this.wst = wst;
this.name = name;
@@ -63,114 +64,114 @@
}
public ImportWstColumn(
- ImportWst wst,
- String name,
- String description,
- Integer position
- ) {
+ final ImportWst wst,
+ final String name,
+ final String description,
+ final Integer position
+ ) {
this(wst, name, description, position, null);
}
public ImportWst getWst() {
- return wst;
+ return this.wst;
}
- public void setWst(ImportWst wst) {
+ public void setWst(final ImportWst wst) {
this.wst = wst;
}
public String getName() {
- return name;
+ return this.name;
}
- public void setName(String name) {
+ public void setName(final String name) {
this.name = name;
}
public String getDescription() {
- return description;
+ return this.description;
}
- public void setDescription(String description) {
+ public void setDescription(final String description) {
this.description = description;
}
public Integer getPosition() {
- return position;
+ return this.position;
}
- public void setPosition(Integer position) {
+ public void setPosition(final Integer position) {
this.position = position;
}
public String getSource() {
- return source;
+ return this.source;
}
- public void setSource(String source) {
+ public void setSource(final String source) {
this.source = source;
}
- public void addColumnValue(BigDecimal position, BigDecimal w) {
- columnValues.add(
- new ImportWstColumnValue(this, position, w));
+ public void addColumnValue(final BigDecimal position, final BigDecimal w) {
+ this.columnValues.add(
+ new ImportWstColumnValue(this, position, w));
}
- public void addColumnQRange(ImportWstQRange columnQRange) {
- columnQRanges.add(
- new ImportWstColumnQRange(this, columnQRange));
+ public void addColumnQRange(final ImportWstQRange columnQRange) {
+ this.columnQRanges.add(
+ new ImportWstColumnQRange(this, columnQRange));
}
/** Get the Column Values stored in this column. */
public List<ImportWstColumnValue> getColumnValues() {
- return columnValues;
+ return this.columnValues;
}
- public void storeDependencies(River river) {
- log.info("store column '" + name + "'");
+ public void storeDependencies(final River river) {
+ log.info("store column '" + this.name + "'");
getPeer(river);
- for (ImportWstColumnQRange columnQRange: columnQRanges) {
+ for (final ImportWstColumnQRange columnQRange: this.columnQRanges) {
columnQRange.getPeer(river);
}
- for (ImportWstColumnValue columnValue: columnValues) {
+ for (final ImportWstColumnValue columnValue: this.columnValues) {
columnValue.getPeer(river);
}
}
public ImportTimeInterval getTimeInterval() {
- return timeInterval;
+ return this.timeInterval;
}
- public void setTimeInterval(ImportTimeInterval timeInterval) {
+ public void setTimeInterval(final ImportTimeInterval timeInterval) {
this.timeInterval = timeInterval;
}
public boolean guessWaterLevelIncreasing() {
- int N = columnValues.size();
+ final int N = this.columnValues.size();
if (N < 2) {
return true;
}
- Random r = new Random();
+ final Random r = new Random();
int up = 0;
- int S = N < 50 ? N : (int)(0.1f * N)+1;
+ final int S = N < 50 ? N : (int)(0.1f * N)+1;
for (int s = 0; s < S; ++s) {
int i1, i2;
do {
i1 = r.nextInt(N-1);
i2 = r.nextInt(N-1);
} while (i1 == i2);
- ImportWstColumnValue b = columnValues.get(i1);
- ImportWstColumnValue a = columnValues.get(i2);
+ ImportWstColumnValue b = this.columnValues.get(i1);
+ ImportWstColumnValue a = this.columnValues.get(i2);
if (b.getPosition().compareTo(a.getPosition()) < 0) {
- ImportWstColumnValue t = a; a = b; b = t;
+ final ImportWstColumnValue t = a; a = b; b = t;
}
if (a.getW().compareTo(b.getW()) < 0) ++up;
@@ -180,37 +181,42 @@
}
/** Get corresponding mapped wst-column (from database). */
- public WstColumn getPeer(River river) {
- if (peer == null) {
- Wst w = wst.getPeer(river);
- Session session = ImporterSession.getInstance()
- .getDatabaseSession();
- Query query = session.createQuery(
- "from WstColumn where" +
- " wst=:wst and name=:name" +
- " and source=:source" +
- " and position=:position");
- query.setParameter("wst", w);
- query.setParameter("name", name);
- query.setParameter("position", position);
- query.setParameter("source", source);
+ public WstColumn getPeer(final River river) {
+ if (this.peer == null) {
+ final Wst w = this.wst.getPeer(river);
+ List<WstColumn> columns;
+ final Session session = ImporterSession.getInstance()
+ .getDatabaseSession();
+ if (this.wst.storeMode == StoreMode.INSERT)
+ columns = null;
+ else {
+ final Query query = session.createQuery(
+ "from WstColumn where" +
+ " wst=:wst and name=:name" +
+ " and source=:source" +
+ " and position=:position");
+ query.setParameter("wst", w);
+ query.setParameter("name", this.name);
+ query.setParameter("position", this.position);
+ query.setParameter("source", this.source);
+ columns = query.list();
+ }
- TimeInterval ti = timeInterval != null
- ? timeInterval.getPeer()
- : null;
+ final TimeInterval ti = (this.timeInterval != null) ? this.timeInterval.getPeer() : null;
- List<WstColumn> columns = query.list();
- if (columns.isEmpty()) {
- log.debug("source: " + source);
- peer = new WstColumn(
- w, name, description, source, position, ti);
- session.save(peer);
+ if ((columns == null) || columns.isEmpty()) {
+ log.debug("source: " + this.source);
+ this.peer = new WstColumn(
+ w, this.name, this.description, this.source, this.position, ti);
+ session.save(this.peer);
+ this.storeMode = StoreMode.INSERT;
}
else {
- peer = columns.get(0);
+ this.peer = columns.get(0);
+ this.storeMode = StoreMode.UPDATE;
}
}
- return peer;
+ return this.peer;
}
}
diff -r 0adc6d04de95 -r 2bb38e25091b backend/src/main/java/org/dive4elements/river/importer/ImportWstColumnQRange.java
--- a/backend/src/main/java/org/dive4elements/river/importer/ImportWstColumnQRange.java Wed Apr 11 14:09:13 2018 +0200
+++ b/backend/src/main/java/org/dive4elements/river/importer/ImportWstColumnQRange.java Wed Apr 11 14:20:01 2018 +0200
@@ -8,71 +8,81 @@
package org.dive4elements.river.importer;
+import java.util.List;
+
+import org.dive4elements.river.importer.common.StoreMode;
+import org.dive4elements.river.model.River;
+import org.dive4elements.river.model.WstColumn;
import org.dive4elements.river.model.WstColumnQRange;
import org.dive4elements.river.model.WstQRange;
-import org.dive4elements.river.model.WstColumn;
-import org.dive4elements.river.model.River;
-
+import org.hibernate.Query;
import org.hibernate.Session;
-import org.hibernate.Query;
-
-import java.util.List;
public class ImportWstColumnQRange
{
protected ImportWstColumn wstColumn;
protected ImportWstQRange qRange;
+ protected StoreMode storeMode;
+
protected WstColumnQRange peer;
public ImportWstColumnQRange() {
}
public ImportWstColumnQRange(
- ImportWstColumn wstColumn,
- ImportWstQRange qRange
- ) {
+ final ImportWstColumn wstColumn,
+ final ImportWstQRange qRange
+ ) {
this.wstColumn = wstColumn;
this.qRange = qRange;
+ this.storeMode = StoreMode.NONE;
}
public ImportWstColumn getWstColumn() {
- return wstColumn;
+ return this.wstColumn;
}
- public void setWstColumn(ImportWstColumn wstColumn) {
+ public void setWstColumn(final ImportWstColumn wstColumn) {
this.wstColumn = wstColumn;
}
public ImportWstQRange getQRange() {
- return qRange;
+ return this.qRange;
}
- public void setQRange(ImportWstQRange qRange) {
+ public void setQRange(final ImportWstQRange qRange) {
this.qRange = qRange;
}
- public WstColumnQRange getPeer(River river) {
- if (peer == null) {
- WstColumn c = wstColumn.getPeer(river);
- WstQRange q = qRange.getPeer(river);
- Session session = ImporterSession.getInstance()
- .getDatabaseSession();
- Query query = session.createQuery(
- "from WstColumnQRange where " +
- "wstColumn=:c and wstQRange=:q");
- query.setParameter("c", c);
- query.setParameter("q", q);
- List<WstColumnQRange> cols = query.list();
- if (cols.isEmpty()) {
- peer = new WstColumnQRange(c, q);
- session.save(peer);
+ public WstColumnQRange getPeer(final River river) {
+ if (this.peer == null) {
+ final WstColumn c = this.wstColumn.getPeer(river);
+ final WstQRange q = this.qRange.getPeer(river);
+ List<WstColumnQRange> cols;
+ final Session session = ImporterSession.getInstance()
+ .getDatabaseSession();
+ if (this.wstColumn.storeMode == StoreMode.INSERT)
+ cols = null;
+ else {
+ final Query query = session.createQuery(
+ "from WstColumnQRange where " +
+ "wstColumn=:c and wstQRange=:q");
+ query.setParameter("c", c);
+ query.setParameter("q", q);
+ cols = query.list();
+ }
+ if ((cols == null) || cols.isEmpty()) {
+ this.peer = new WstColumnQRange(c, q);
+ session.save(this.peer);
+ this.storeMode = StoreMode.INSERT;
}
else {
- peer = cols.get(0);
+ this.peer = cols.get(0);
+ this.storeMode = StoreMode.UPDATE;
}
}
- return peer;
+ return this.peer;
}
}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
diff -r 0adc6d04de95 -r 2bb38e25091b backend/src/main/java/org/dive4elements/river/importer/common/AbstractKmLineImport.java
--- a/backend/src/main/java/org/dive4elements/river/importer/common/AbstractKmLineImport.java Wed Apr 11 14:09:13 2018 +0200
+++ b/backend/src/main/java/org/dive4elements/river/importer/common/AbstractKmLineImport.java Wed Apr 11 14:20:01 2018 +0200
@@ -29,10 +29,12 @@
protected StoreMode storeMode;
+
/***** CONSTRUCTOR *****/
public AbstractKmLineImport(final double km) {
this.station = km;
+ this.storeMode = StoreMode.NONE;
}
@@ -52,10 +54,8 @@
* it
*/
protected KMTUPLE getPeer(final SERIES parent, final StoreMode parentStoreMode) {
- if (this.peer != null) {
- this.storeMode = StoreMode.NONE;
+ if (this.peer != null)
return this.peer;
- }
final Session session = ImporterSession.getInstance().getDatabaseSession();
KMTUPLE value = null;
if (parentStoreMode != StoreMode.INSERT) {
diff -r 0adc6d04de95 -r 2bb38e25091b backend/src/main/java/org/dive4elements/river/importer/common/AbstractParser.java
--- a/backend/src/main/java/org/dive4elements/river/importer/common/AbstractParser.java Wed Apr 11 14:09:13 2018 +0200
+++ b/backend/src/main/java/org/dive4elements/river/importer/common/AbstractParser.java Wed Apr 11 14:20:01 2018 +0200
@@ -16,6 +16,8 @@
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.LineNumberReader;
+import java.math.BigDecimal;
+import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.text.ParseException;
import java.util.ArrayList;
@@ -72,6 +74,13 @@
private static NumberFormat numberFormat = NumberFormat.getInstance(Locale.ROOT);
+ private static DecimalFormat bigDecimalFormat;
+
+ static {
+ bigDecimalFormat = (DecimalFormat) NumberFormat.getInstance(Locale.ROOT);
+ bigDecimalFormat.setParseBigDecimal(true);
+ }
+
/**
* Path of the file or directory to import from
*/
@@ -262,6 +271,13 @@
}
/**
+ * Parses a number string as a BigDecimal, replacing a comma with a dot first
+ */
+ public static BigDecimal parseDecimal(final String text) throws ParseException {
+ return (BigDecimal) bigDecimalFormat.parse(text.replace(',', '.'));
+ }
+
+ /**
* Gets the class's logger
*/
protected abstract Logger getLog();
diff -r 0adc6d04de95 -r 2bb38e25091b backend/src/main/java/org/dive4elements/river/importer/common/AbstractSeriesImport.java
--- a/backend/src/main/java/org/dive4elements/river/importer/common/AbstractSeriesImport.java Wed Apr 11 14:09:13 2018 +0200
+++ b/backend/src/main/java/org/dive4elements/river/importer/common/AbstractSeriesImport.java Wed Apr 11 14:20:01 2018 +0200
@@ -45,7 +45,7 @@
protected Map<StoreMode, Integer> valueStoreCount;
- protected StoreMode seriesStoreMode;
+ protected StoreMode storeMode;
/***** CONSTRUCTORS *****/
@@ -55,6 +55,7 @@
this.valueStoreCount = new EnumMap<>(StoreMode.class);
for (final StoreMode mode : StoreMode.values())
this.valueStoreCount.put(mode, Integer.valueOf(0));
+ this.storeMode = StoreMode.NONE;
}
public AbstractSeriesImport(final String filename) {
@@ -118,11 +119,11 @@
final SERIES peer = getPeer(river);
if (peer != null) {
for (final KMLINE value : this.values) {
- incrementValueStoreCount(value.store(peer, this.seriesStoreMode));
+ incrementValueStoreCount(value.store(peer, this.storeMode));
}
}
ImporterSession.getInstance().getDatabaseSession().flush();
- return this.seriesStoreMode;
+ return this.storeMode;
}
/**
@@ -139,21 +140,19 @@
/**
* Gets the model object of the data series, inserting it into the database if not already existing
*/
- public SERIES getPeer(final River river) {
- if (this.peer != null) {
- this.seriesStoreMode = StoreMode.NONE;
+ protected SERIES getPeer(final River river) {
+ if (this.peer != null)
return this.peer;
- }
final Session session = ImporterSession.getInstance().getDatabaseSession();
final List<SERIES> rows = querySeriesItem(session, river);
if (rows.isEmpty()) {
getLog().info("Create new database instance");
this.peer = createSeriesItem(river);
session.save(this.peer);
- this.seriesStoreMode = StoreMode.INSERT;
+ this.storeMode = StoreMode.INSERT;
} else {
this.peer = rows.get(0);
- this.seriesStoreMode = StoreMode.UPDATE;
+ this.storeMode = StoreMode.UPDATE;
}
return this.peer;
}
diff -r 0adc6d04de95 -r 2bb38e25091b backend/src/main/java/org/dive4elements/river/importer/parsers/BedHeightParser.java
--- a/backend/src/main/java/org/dive4elements/river/importer/parsers/BedHeightParser.java Wed Apr 11 14:09:13 2018 +0200
+++ b/backend/src/main/java/org/dive4elements/river/importer/parsers/BedHeightParser.java Wed Apr 11 14:20:01 2018 +0200
@@ -37,6 +37,7 @@
import org.dive4elements.river.importer.ImportTimeInterval;
import org.dive4elements.river.importer.ImportUnit;
import org.dive4elements.river.importer.ImporterSession;
+import org.dive4elements.river.importer.common.AbstractParser;
import org.dive4elements.river.model.BedHeightType;
public class BedHeightParser {
@@ -284,12 +285,12 @@
final String a = m.group(1).replace(";", "").trim();
final String b = m.group(2).replace(";", "").trim();
try {
- final BigDecimal lower = new BigDecimal(nf.parse(a).doubleValue());
- final BigDecimal upper = new BigDecimal(nf.parse(b).doubleValue());
+ final BigDecimal lower = AbstractParser.parseDecimal(a);
+ final BigDecimal upper = AbstractParser.parseDecimal(b);
obj.setRange(new ImportRange(lower, upper));
return true;
}
- catch (final ParseException e) {
+ catch (final Exception e) {
log.warn("BHP: could not parse range", e);
}
}
diff -r 0adc6d04de95 -r 2bb38e25091b backend/src/main/java/org/dive4elements/river/importer/parsers/FlowVelocityMeasurementParser.java
--- a/backend/src/main/java/org/dive4elements/river/importer/parsers/FlowVelocityMeasurementParser.java Wed Apr 11 14:09:13 2018 +0200
+++ b/backend/src/main/java/org/dive4elements/river/importer/parsers/FlowVelocityMeasurementParser.java Wed Apr 11 14:20:01 2018 +0200
@@ -8,61 +8,58 @@
package org.dive4elements.river.importer.parsers;
-import org.dive4elements.river.importer.ImportFlowVelocityMeasurement;
-import org.dive4elements.river.importer.ImportFlowVelocityMeasurementValue;
-
import java.math.BigDecimal;
-
import java.text.DateFormat;
import java.text.NumberFormat;
-import java.text.ParseException;
import java.text.SimpleDateFormat;
-
import java.util.ArrayList;
import java.util.List;
import org.apache.log4j.Logger;
+import org.dive4elements.river.importer.ImportFlowVelocityMeasurement;
+import org.dive4elements.river.importer.ImportFlowVelocityMeasurementValue;
+import org.dive4elements.river.importer.common.AbstractParser;
public class FlowVelocityMeasurementParser extends LineParser {
private static final Logger log =
- Logger.getLogger(FlowVelocityMeasurementParser.class);
+ Logger.getLogger(FlowVelocityMeasurementParser.class);
private static final NumberFormat nf =
- NumberFormat.getInstance(DEFAULT_LOCALE);
+ NumberFormat.getInstance(DEFAULT_LOCALE);
private static final DateFormat df =
- new SimpleDateFormat("dd.MM.yyyy HH:mm:ss");
+ new SimpleDateFormat("dd.MM.yyyy HH:mm:ss");
- private List<ImportFlowVelocityMeasurement> measurements;
+ private final List<ImportFlowVelocityMeasurement> measurements;
private ImportFlowVelocityMeasurement current;
public FlowVelocityMeasurementParser() {
- measurements = new ArrayList<ImportFlowVelocityMeasurement>();
+ this.measurements = new ArrayList<>();
}
public List<ImportFlowVelocityMeasurement> getMeasurements() {
- return measurements;
+ return this.measurements;
}
@Override
protected void reset() {
- current = new ImportFlowVelocityMeasurement();
+ this.current = new ImportFlowVelocityMeasurement();
}
@Override
protected void finish() {
- current.setDescription(fileName);
- measurements.add(current);
+ this.current.setDescription(this.fileName);
+ this.measurements.add(this.current);
}
@Override
- protected void handleLine(int lineNum, String line) {
+ protected void handleLine(final int lineNum, final String line) {
if (line.startsWith(START_META_CHAR)) {
handleMetaLine(stripMetaLine(line));
}
@@ -72,12 +69,12 @@
}
- public void handleMetaLine(String line) {
+ public void handleMetaLine(final String line) {
}
- public void handleDataLine(String line) {
- String[] cols = line.split(SEPERATOR_CHAR);
+ public void handleDataLine(final String line) {
+ final String[] cols = line.split(SEPERATOR_CHAR);
if (cols.length < 8) {
log.warn("skip invalid data line: '" + line + "'");
@@ -85,24 +82,17 @@
}
try {
- double km = nf.parse(cols[1]).doubleValue();
- double w = nf.parse(cols[5]).doubleValue();
- double q = nf.parse(cols[6]).doubleValue();
- double v = nf.parse(cols[7]).doubleValue();
+ final BigDecimal km = AbstractParser.parseDecimal(cols[1]);
+ final BigDecimal w = AbstractParser.parseDecimal(cols[5]);
+ final BigDecimal q = AbstractParser.parseDecimal(cols[6]);
+ final BigDecimal v = AbstractParser.parseDecimal(cols[7]);
- String timestr = cols[3] + " " + cols[4];
- String description = cols.length > 8 ? cols[8] : null;
+ final String timestr = cols[3] + " " + cols[4];
+ final String description = cols.length > 8 ? cols[8] : null;
- current.addValue(new ImportFlowVelocityMeasurementValue(
- df.parse(timestr),
- new BigDecimal(km),
- new BigDecimal(w),
- new BigDecimal(q),
- new BigDecimal(v),
- description
- ));
+ this.current.addValue(new ImportFlowVelocityMeasurementValue(df.parse(timestr), km, w, q, v, description));
}
- catch (ParseException pe) {
+ catch (final Exception pe) {
log.warn("Unparseable flow velocity values:", pe);
}
}
diff -r 0adc6d04de95 -r 2bb38e25091b backend/src/main/java/org/dive4elements/river/importer/parsers/FlowVelocityModelParser.java
--- a/backend/src/main/java/org/dive4elements/river/importer/parsers/FlowVelocityModelParser.java Wed Apr 11 14:09:13 2018 +0200
+++ b/backend/src/main/java/org/dive4elements/river/importer/parsers/FlowVelocityModelParser.java Wed Apr 11 14:20:01 2018 +0200
@@ -10,7 +10,6 @@
import java.io.File;
import java.io.IOException;
-
import java.math.BigDecimal;
import java.text.NumberFormat;
import java.text.ParseException;
@@ -21,48 +20,48 @@
import java.util.regex.Pattern;
import org.apache.log4j.Logger;
-
+import org.dive4elements.river.backend.utils.EpsilonComparator;
import org.dive4elements.river.importer.ImportDischargeZone;
import org.dive4elements.river.importer.ImportFlowVelocityModel;
import org.dive4elements.river.importer.ImportFlowVelocityModelValue;
-import org.dive4elements.river.backend.utils.EpsilonComparator;
+import org.dive4elements.river.importer.common.AbstractParser;
public class FlowVelocityModelParser extends LineParser {
private static final Logger log =
- Logger.getLogger(FlowVelocityModelParser.class);
+ Logger.getLogger(FlowVelocityModelParser.class);
private static final Pattern META_REGEX =
- Pattern.compile(".*Rechnung [unter ]*(.*) \\(Pegel (.*)\\).*");
+ Pattern.compile(".*Rechnung [unter ]*(.*) \\(Pegel (.*)\\).*");
private static final Pattern META_GAUGE =
- Pattern.compile("(.*) Q=(\\w*)m3/s");
+ Pattern.compile("(.*) Q=(\\w*)m3/s");
private static final Pattern META_MAINVALUE_A =
- Pattern.compile("([a-zA-Z]+)+(\\d+)*[\\w()]*");
+ Pattern.compile("([a-zA-Z]+)+(\\d+)*[\\w()]*");
private static final Pattern META_MAINVALUE_B =
- Pattern.compile(
- "(([a-zA-Z]+)+(\\d+)*)\\s*-\\s*(([a-zA-Z]+)+(\\d+)*\\S*)");
+ Pattern.compile(
+ "(([a-zA-Z]+)+(\\d+)*)\\s*-\\s*(([a-zA-Z]+)+(\\d+)*\\S*)");
private static final Pattern META_MAINVALUE_C =
- Pattern.compile("([0-9]++)\\s?(\\S*)|([0-9]++,[0-9]++)\\s?(\\S*)");
+ Pattern.compile("([0-9]++)\\s?(\\S*)|([0-9]++,[0-9]++)\\s?(\\S*)");
private static final Pattern META_MAINVALUE_D =
- Pattern.compile(
- "(([0-9]*)\\s?(\\w*)|([0-9]++,[0-9]++)\\s?(\\w*))\\s*"
- + "bis (([0-9]*)\\s?(\\S*)|([0-9]++,[0-9]++)\\s?(\\S*))");
+ Pattern.compile(
+ "(([0-9]*)\\s?(\\w*)|([0-9]++,[0-9]++)\\s?(\\w*))\\s*"
+ + "bis (([0-9]*)\\s?(\\S*)|([0-9]++,[0-9]++)\\s?(\\S*))");
private static final Pattern META_MAINVALUE_E =
- Pattern.compile(
- "(([a-zA-Z]+)+(\\d+)*)\\s*bis (([a-zA-Z]+)+(\\d+)*\\S*)");
+ Pattern.compile(
+ "(([a-zA-Z]+)+(\\d+)*)\\s*bis (([a-zA-Z]+)+(\\d+)*\\S*)");
private static final NumberFormat nf =
- NumberFormat.getInstance(DEFAULT_LOCALE);
+ NumberFormat.getInstance(DEFAULT_LOCALE);
- private List<ImportFlowVelocityModel> models;
+ private final List<ImportFlowVelocityModel> models;
private ImportFlowVelocityModel current;
@@ -72,38 +71,38 @@
public FlowVelocityModelParser() {
- models = new ArrayList<ImportFlowVelocityModel>();
- kmExists = new TreeSet<Double>(EpsilonComparator.CMP);
+ this.models = new ArrayList<>();
+ this.kmExists = new TreeSet<>(EpsilonComparator.CMP);
}
public List<ImportFlowVelocityModel> getModels() {
- return models;
+ return this.models;
}
@Override
- public void parse(File file) throws IOException {
- description = file.getName();
+ public void parse(final File file) throws IOException {
+ this.description = file.getName();
super.parse(file);
}
@Override
protected void reset() {
- current = new ImportFlowVelocityModel(description);
- kmExists.clear();
+ this.current = new ImportFlowVelocityModel(this.description);
+ this.kmExists.clear();
}
@Override
protected void finish() {
- models.add(current);
+ this.models.add(this.current);
// description = null;
}
@Override
- protected void handleLine(int lineNum, String line) {
+ protected void handleLine(final int lineNum, final String line) {
if (line.startsWith(START_META_CHAR)) {
handleMetaLine(stripMetaLine(line));
}
@@ -113,16 +112,16 @@
}
- protected void handleMetaLine(String line) {
- Matcher m = META_REGEX.matcher(line);
+ protected void handleMetaLine(final String line) {
+ final Matcher m = META_REGEX.matcher(line);
if (m.matches()) {
- String mainValueStr = m.group(1);
+ final String mainValueStr = m.group(1);
log.debug("mainValueStr = '" + mainValueStr + "'");
- String gaugeStr = m.group(2);
+ final String gaugeStr = m.group(2);
- Object[] valueData = handleMainValueString(mainValueStr);
- Object[] gaugeData = handleGaugeString(gaugeStr);
+ final Object[] valueData = handleMainValueString(mainValueStr);
+ final Object[] gaugeData = handleGaugeString(gaugeStr);
if (valueData == null || valueData.length < 2) {
log.warn("skip invalid MainValue part in '" + line + "'");
@@ -142,102 +141,102 @@
log.debug(" upper: " + valueData[1]);
}
- current.setDischargeZone(new ImportDischargeZone(
- (String) gaugeData[0],
- (BigDecimal) gaugeData[1],
- (String) valueData[0],
- (String) valueData[1]
- ));
+ this.current.setDischargeZone(new ImportDischargeZone(
+ (String) gaugeData[0],
+ (BigDecimal) gaugeData[1],
+ (String) valueData[0],
+ (String) valueData[1]
+ ));
}
}
- protected Object[] handleMainValueString(String mainValueStr) {
- Matcher mA = META_MAINVALUE_A.matcher(mainValueStr.trim());
+ protected Object[] handleMainValueString(final String mainValueStr) {
+ final Matcher mA = META_MAINVALUE_A.matcher(mainValueStr.trim());
if (mA.matches()) {
log.debug("mainValueStr matches META_MAINVALUE_A");
- String name = mA.group(0);
+ final String name = mA.group(0);
return new Object[] { name, name };
}
- Matcher mB = META_MAINVALUE_B.matcher(mainValueStr.trim());
+ final Matcher mB = META_MAINVALUE_B.matcher(mainValueStr.trim());
if (mB.matches()) {
log.debug("mainValueStr matches META_MAINVALUE_B");
- String lower = mB.group(1);
- String upper = mB.group(4);
+ final String lower = mB.group(1);
+ final String upper = mB.group(4);
return new Object[] { lower, upper };
}
- Matcher mC = META_MAINVALUE_C.matcher(mainValueStr.trim());
+ final Matcher mC = META_MAINVALUE_C.matcher(mainValueStr.trim());
if (mC.matches()) {
log.debug("mainValueStr matches META_MAINVALUE_C");
- String facA = mC.group(1);
- String nameA = mC.group(2);
- String facB = mC.group(3);
- String nameB = mC.group(4);
+ final String facA = mC.group(1);
+ final String nameA = mC.group(2);
+ final String facB = mC.group(3);
+ final String nameB = mC.group(4);
- String fac = facA != null ? facA : facB;
- String name = nameA != null ? nameA : nameB;
+ final String fac = facA != null ? facA : facB;
+ final String name = nameA != null ? nameA : nameB;
- String mainValue = fac + " " + name;
+ final String mainValue = fac + " " + name;
return new Object[] { mainValue, mainValue };
}
- Matcher mD = META_MAINVALUE_D.matcher(mainValueStr.trim());
+ final Matcher mD = META_MAINVALUE_D.matcher(mainValueStr.trim());
if (mD.matches()) {
log.debug("mainValueStr matches META_MAINVALUE_D");
- String loFacA = mD.group(2);
- String loNameA = mD.group(3);
- String loFacB = mD.group(4);
- String loNameB = mD.group(5);
+ final String loFacA = mD.group(2);
+ final String loNameA = mD.group(3);
+ final String loFacB = mD.group(4);
+ final String loNameB = mD.group(5);
- String upFacA = mD.group(7);
- String upNameA = mD.group(8);
- String upFacB = mD.group(9);
- String upNameB = mD.group(10);
+ final String upFacA = mD.group(7);
+ final String upNameA = mD.group(8);
+ final String upFacB = mD.group(9);
+ final String upNameB = mD.group(10);
- String loFac = loFacA != null ? loFacA : loFacB;
- String loName = loNameA != null ? loNameA : loNameB;
+ final String loFac = loFacA != null ? loFacA : loFacB;
+ final String loName = loNameA != null ? loNameA : loNameB;
- String upFac = upFacA != null ? upFacA : upFacB;
- String upName = upNameA != null ? upNameA : upNameB;
+ final String upFac = upFacA != null ? upFacA : upFacB;
+ final String upName = upNameA != null ? upNameA : upNameB;
- String loMainValue = loFac + " " + loName;
- String upMainValue = upFac + " " + upName;
+ final String loMainValue = loFac + " " + loName;
+ final String upMainValue = upFac + " " + upName;
return new Object[] { loMainValue, upMainValue };
}
- Matcher mE = META_MAINVALUE_E.matcher(mainValueStr.trim());
+ final Matcher mE = META_MAINVALUE_E.matcher(mainValueStr.trim());
if (mE.matches()) {
log.debug("mainValueStr matches META_MAINVALUE_E");
- String lower = mE.group(1);
- String upper = mE.group(4);
+ final String lower = mE.group(1);
+ final String upper = mE.group(4);
return new Object[] { lower, upper };
}
- log.debug("mainValueStr not matched");
+ log.debug("mainValueStr not matched");
return null;
}
- protected Object[] handleGaugeString(String gaugeStr) {
- Matcher m = META_GAUGE.matcher(gaugeStr);
+ protected Object[] handleGaugeString(final String gaugeStr) {
+ final Matcher m = META_GAUGE.matcher(gaugeStr);
if (m.matches()) {
- String name = m.group(1);
- String qStr = m.group(2);
+ final String name = m.group(1);
+ final String qStr = m.group(2);
try {
return new Object[] {
- name,
- new BigDecimal(nf.parse(qStr).doubleValue()) };
+ name,
+ AbstractParser.parseDecimal(qStr) };
}
- catch (ParseException pe) {
+ catch (final ParseException pe) {
log.warn("Could not parse Q value: '" + qStr + "'");
}
}
@@ -246,8 +245,8 @@
}
- protected void handleDataLine(String line) {
- String[] cols = line.split(SEPERATOR_CHAR);
+ protected void handleDataLine(final String line) {
+ final String[] cols = line.split(SEPERATOR_CHAR);
if (cols.length < 5) {
log.warn("skip invalid data line: '" + line + "'");
@@ -255,31 +254,25 @@
}
try {
- double km = nf.parse(cols[0]).doubleValue();
+ final BigDecimal km = AbstractParser.parseDecimal(cols[0]);
- Double key = Double.valueOf(km);
+ final Double key = Double.valueOf(km.doubleValue());
- if (kmExists.contains(key)) {
+ if (this.kmExists.contains(key)) {
log.warn("duplicate station '" + km + "': -> ignored");
return;
}
- double q = nf.parse(cols[1]).doubleValue();
- double total = nf.parse(cols[2]).doubleValue();
- double main = nf.parse(cols[3]).doubleValue();
- double stress = nf.parse(cols[4]).doubleValue();
+ final BigDecimal q = AbstractParser.parseDecimal(cols[1]);
+ final BigDecimal total = AbstractParser.parseDecimal(cols[2]);
+ final BigDecimal main = AbstractParser.parseDecimal(cols[3]);
+ final BigDecimal stress = AbstractParser.parseDecimal(cols[4]);
- current.addValue(new ImportFlowVelocityModelValue(
- new BigDecimal(km),
- new BigDecimal(q),
- new BigDecimal(total),
- new BigDecimal(main),
- new BigDecimal(stress)
- ));
+ this.current.addValue(new ImportFlowVelocityModelValue(km, q, total, main, stress));
- kmExists.add(key);
+ this.kmExists.add(key);
}
- catch (ParseException pe) {
+ catch (final ParseException pe) {
log.warn("Unparseable flow velocity values:", pe);
}
}
diff -r 0adc6d04de95 -r 2bb38e25091b backend/src/main/java/org/dive4elements/river/importer/parsers/MeasurementStationsParser.java
--- a/backend/src/main/java/org/dive4elements/river/importer/parsers/MeasurementStationsParser.java Wed Apr 11 14:09:13 2018 +0200
+++ b/backend/src/main/java/org/dive4elements/river/importer/parsers/MeasurementStationsParser.java Wed Apr 11 14:20:01 2018 +0200
@@ -8,19 +8,17 @@
package org.dive4elements.river.importer.parsers;
-import java.math.BigDecimal;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.apache.log4j.Logger;
-
-import org.dive4elements.river.model.MeasurementStation;
-
import org.dive4elements.river.importer.ImportMeasurementStation;
import org.dive4elements.river.importer.ImportRange;
import org.dive4elements.river.importer.ImportTimeInterval;
+import org.dive4elements.river.importer.common.AbstractParser;
+import org.dive4elements.river.model.MeasurementStation;
public class MeasurementStationsParser extends LineParser {
@@ -29,7 +27,7 @@
private static final long serialVersionUID = 1L;
- public MeasurementStationParserException(String msg) {
+ public MeasurementStationParserException(final String msg) {
super(msg);
}
}
@@ -39,14 +37,14 @@
public static final int MAX_COMMENT_LENGTH = 512;
private static final Logger log = Logger
- .getLogger(MeasurementStationsParser.class);
+ .getLogger(MeasurementStationsParser.class);
private List<ImportMeasurementStation> measurementStations;
private ImportMeasurementStation current;
@Override
protected void reset() {
- this.measurementStations = new ArrayList<ImportMeasurementStation>();
+ this.measurementStations = new ArrayList<>();
}
@Override
@@ -54,114 +52,109 @@
}
@Override
- protected void handleLine(int lineNum, String line) {
+ protected void handleLine(final int lineNum, final String line) {
if (line == null || line.startsWith(START_META_CHAR)) {
log.info("skip meta information at line " + lineNum);
return;
}
try {
- current = new ImportMeasurementStation();
+ this.current = new ImportMeasurementStation();
handleDataLine(lineNum, line);
- measurementStations.add(current);
+ this.measurementStations.add(this.current);
}
- catch (MeasurementStationParserException e) {
+ catch (final MeasurementStationParserException e) {
log.warn("Problem in line " + lineNum + ": " + e.getMessage());
}
}
public List<ImportMeasurementStation> getMeasurementStations() {
- return measurementStations;
+ return this.measurementStations;
}
- protected void handleDataLine(int lineNum, String line)
- throws MeasurementStationParserException {
- String[] cols = line.split(SEPERATOR_CHAR);
+ protected void handleDataLine(final int lineNum, final String line)
+ throws MeasurementStationParserException {
+ final String[] cols = line.split(SEPERATOR_CHAR);
if (cols == null || cols.length < MIN_COLUMNS) {
- int num = cols != null ? cols.length : 0;
+ final int num = cols != null ? cols.length : 0;
throw new MeasurementStationParserException("Not enough columns: "
- + num);
+ + num);
}
- current.name = getName(cols, lineNum);
- current.range = getRange(cols, lineNum);
- current.measurementType = getMeasurementType(cols, lineNum);
- current.riverside = getRiverside(cols, lineNum);
- current.gauge = getGauge(cols, lineNum);
- current.observationTimerange = getObservationTimerange(cols, lineNum);
- current.operator = getOperator(cols, lineNum);
- current.comment = getComment(cols, lineNum);
+ this.current.name = getName(cols, lineNum);
+ this.current.range = getRange(cols, lineNum);
+ this.current.measurementType = getMeasurementType(cols, lineNum);
+ this.current.riverside = getRiverside(cols, lineNum);
+ this.current.gauge = getGauge(cols, lineNum);
+ this.current.observationTimerange = getObservationTimerange(cols, lineNum);
+ this.current.operator = getOperator(cols, lineNum);
+ this.current.comment = getComment(cols, lineNum);
}
- protected String getName(String[] cols, int lineNum)
- throws MeasurementStationParserException {
+ protected String getName(final String[] cols, final int lineNum)
+ throws MeasurementStationParserException {
if (cols[0] == null || cols[0].length() == 0) {
throw new MeasurementStationParserException("invalid name in line "
- + lineNum);
+ + lineNum);
}
return cols[0];
}
- protected ImportRange getRange(String[] cols, int lineNum) {
- String from = cols[1];
- String to = cols[4];
+ protected ImportRange getRange(final String[] cols, final int lineNum) {
+ final String from = cols[1];
+ final String to = cols[4];
if (from == null || from.length() == 0) {
log.error("No station found in line" + lineNum);
return null;
}
try {
- double lower = getDouble(from);
-
if (to == null || to.length() == 0) {
log.warn("No end km found in line " + lineNum);
- return new ImportRange(new BigDecimal(lower));
+ return new ImportRange(AbstractParser.parseDecimal(from));
}
try {
- double upper = getDouble(to);
-
- return new ImportRange(new BigDecimal(lower),
- new BigDecimal(upper));
+ return new ImportRange(AbstractParser.parseDecimal(from), AbstractParser.parseDecimal(to));
}
- catch (ParseException e) {
+ catch (final NumberFormatException e) {
log.warn("Unparseable end km in line " + lineNum +
- ". Error: " + e.getMessage());
- return new ImportRange(new BigDecimal(lower));
+ ". Error: " + e.getMessage());
+ return new ImportRange(AbstractParser.parseDecimal(from));
}
}
- catch (ParseException e) {
+ catch (final ParseException e) {
log.error("Unparseable station in line " + lineNum +
". Error: " + e.getMessage());
return null;
}
}
- protected String getMeasurementType(String[] cols, int lineNum)
- throws MeasurementStationParserException {
- String mtype = cols[2].trim();
+ protected String getMeasurementType(final String[] cols, final int lineNum)
+ throws MeasurementStationParserException {
+ final String mtype = cols[2].trim();
if (!(MeasurementStation.MEASUREMENT_TYPE_BEDLOAD.equals(mtype) ||
MeasurementStation.MEASUREMENT_TYPE_SUSP.equals(mtype))) {
throw new MeasurementStationParserException(
- "invalid measurement type in line " + lineNum);
+ "invalid measurement type in line " + lineNum);
}
return mtype;
}
- protected String getRiverside(String[] cols, int lineNum) {
- String col = cols[3];
+ protected String getRiverside(final String[] cols, final int lineNum) {
+ final String col = cols[3];
if (col == null || col.length() == 0) {
log.warn("No river side given in line " + lineNum);
}
return col;
}
- protected String getGauge(String[] cols, int lineNum) {
- String col = cols[5];
+ protected String getGauge(final String[] cols, final int lineNum) {
+ final String col = cols[5];
if (col == null || col.length() == 0) {
log.warn("Invalid gauge found in line " + lineNum);
}
@@ -169,45 +162,45 @@
}
protected ImportTimeInterval getObservationTimerange(
- String[] cols,
- int lineNum
- ) {
- String col = cols[7];
+ final String[] cols,
+ final int lineNum
+ ) {
+ final String col = cols[7];
if (col == null || col.length() == 0) {
log.warn("Observation time invalid in line " + lineNum);
return null;
}
try {
- Date date = getDate(col);
+ final Date date = getDate(col);
if (date != null) {
return new ImportTimeInterval(date);
}
log.warn("Observation time invalid in line " + lineNum);
}
- catch (ParseException pe) {
+ catch (final ParseException pe) {
log.warn("Unparseable observation time '" + col +
- "' in line " + lineNum);
+ "' in line " + lineNum);
}
return null;
}
- protected String getOperator(String[] cols, int lineNum) {
- String col = cols[8];
+ protected String getOperator(final String[] cols, final int lineNum) {
+ final String col = cols[8];
if (col == null || col.length() == 0) {
log.warn("No operator given in line " + lineNum);
}
return col;
}
- protected String getComment(String[] cols, int lineNum) {
+ protected String getComment(final String[] cols, final int lineNum) {
if (cols.length > MIN_COLUMNS) {
- String col = cols[9];
+ final String col = cols[9];
if (col.length() > MAX_COMMENT_LENGTH) {
log.warn("Comment in line " + lineNum +
- " longer than allowed " + MAX_COMMENT_LENGTH +
- " characters. Truncated.");
+ " longer than allowed " + MAX_COMMENT_LENGTH +
+ " characters. Truncated.");
return col.substring(0, MAX_COMMENT_LENGTH);
}
return col;
diff -r 0adc6d04de95 -r 2bb38e25091b backend/src/main/java/org/dive4elements/river/importer/parsers/MorphologicalWidthParser.java
--- a/backend/src/main/java/org/dive4elements/river/importer/parsers/MorphologicalWidthParser.java Wed Apr 11 14:09:13 2018 +0200
+++ b/backend/src/main/java/org/dive4elements/river/importer/parsers/MorphologicalWidthParser.java Wed Apr 11 14:20:01 2018 +0200
@@ -9,32 +9,30 @@
package org.dive4elements.river.importer.parsers;
import java.math.BigDecimal;
-
import java.text.NumberFormat;
import java.text.ParseException;
-
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.log4j.Logger;
-
import org.dive4elements.river.importer.ImportMorphWidth;
import org.dive4elements.river.importer.ImportMorphWidthValue;
import org.dive4elements.river.importer.ImportUnit;
+import org.dive4elements.river.importer.common.AbstractParser;
public class MorphologicalWidthParser extends LineParser {
private static final Logger log =
- Logger.getLogger(MorphologicalWidthParser.class);
+ Logger.getLogger(MorphologicalWidthParser.class);
public static final NumberFormat nf = NumberFormat.getInstance(
- DEFAULT_LOCALE);
+ DEFAULT_LOCALE);
public static final Pattern META_UNIT =
- Pattern.compile("^Einheit: \\[(.*)\\].*");
+ Pattern.compile("^Einheit: \\[(.*)\\].*");
protected List<ImportMorphWidth> morphWidths;
@@ -42,26 +40,26 @@
public MorphologicalWidthParser() {
- morphWidths = new ArrayList<ImportMorphWidth>();
+ this.morphWidths = new ArrayList<>();
}
@Override
protected void reset() {
- current = new ImportMorphWidth();
+ this.current = new ImportMorphWidth();
}
@Override
protected void finish() {
- if (current != null) {
- morphWidths.add(current);
+ if (this.current != null) {
+ this.morphWidths.add(this.current);
}
}
@Override
- protected void handleLine(int lineNum, String line) {
+ protected void handleLine(final int lineNum, final String line) {
if (line.startsWith(START_META_CHAR)) {
handleMetaLine(stripMetaLine(line));
}
@@ -71,7 +69,7 @@
}
- protected void handleMetaLine(String line) {
+ protected void handleMetaLine(final String line) {
if (handleMetaUnit(line)) {
return;
}
@@ -81,13 +79,13 @@
}
- protected boolean handleMetaUnit(String line) {
- Matcher m = META_UNIT.matcher(line);
+ protected boolean handleMetaUnit(final String line) {
+ final Matcher m = META_UNIT.matcher(line);
if (m.matches()) {
- String unit = m.group(1);
+ final String unit = m.group(1);
- current.setUnit(new ImportUnit(unit));
+ this.current.setUnit(new ImportUnit(unit));
return true;
}
@@ -96,8 +94,8 @@
}
- protected void handleDataLine(String line) {
- String[] vals = line.split(SEPERATOR_CHAR);
+ protected void handleDataLine(final String line) {
+ final String[] vals = line.split(SEPERATOR_CHAR);
if (vals == null || vals.length < 2) {
log.warn("MWP: skip invalid data line: '" + line + "'");
@@ -105,25 +103,25 @@
}
try {
- BigDecimal km = new BigDecimal(nf.parse(vals[0]).doubleValue());
- BigDecimal width = new BigDecimal(nf.parse(vals[1]).doubleValue());
+ final BigDecimal km = AbstractParser.parseDecimal(vals[0]);
+ final BigDecimal width = AbstractParser.parseDecimal(vals[1]);
- String desc = vals.length > 2 ? vals[2] : null;
+ final String desc = vals.length > 2 ? vals[2] : null;
- current.addValue(new ImportMorphWidthValue(
- km,
- width,
- desc
- ));
+ this.current.addValue(new ImportMorphWidthValue(
+ km,
+ width,
+ desc
+ ));
}
- catch (ParseException pe) {
+ catch (final ParseException pe) {
log.warn("MWP: unparseable number in data row: " + line);
}
}
public List<ImportMorphWidth> getMorphologicalWidths() {
- return morphWidths;
+ return this.morphWidths;
}
}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
diff -r 0adc6d04de95 -r 2bb38e25091b backend/src/main/java/org/dive4elements/river/importer/parsers/SedimentDensityParser.java
--- a/backend/src/main/java/org/dive4elements/river/importer/parsers/SedimentDensityParser.java Wed Apr 11 14:09:13 2018 +0200
+++ b/backend/src/main/java/org/dive4elements/river/importer/parsers/SedimentDensityParser.java Wed Apr 11 14:20:01 2018 +0200
@@ -8,39 +8,35 @@
package org.dive4elements.river.importer.parsers;
-import org.dive4elements.river.importer.ImportDepth;
-import org.dive4elements.river.importer.ImportSedimentDensity;
-import org.dive4elements.river.importer.ImportSedimentDensityValue;
-
import java.io.File;
import java.io.IOException;
-
import java.math.BigDecimal;
-
import java.text.NumberFormat;
import java.text.ParseException;
-
import java.util.ArrayList;
import java.util.List;
-
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.log4j.Logger;
+import org.dive4elements.river.importer.ImportDepth;
+import org.dive4elements.river.importer.ImportSedimentDensity;
+import org.dive4elements.river.importer.ImportSedimentDensityValue;
+import org.dive4elements.river.importer.common.AbstractParser;
public class SedimentDensityParser extends LineParser {
private static final Logger log =
- Logger.getLogger(SedimentDensityParser.class);
+ Logger.getLogger(SedimentDensityParser.class);
public static final NumberFormat nf =
- NumberFormat.getInstance(DEFAULT_LOCALE);
+ NumberFormat.getInstance(DEFAULT_LOCALE);
public static final Pattern META_DEPTH =
- Pattern.compile("^Tiefe: (\\d++)-(\\d++).*");
+ Pattern.compile("^Tiefe: (\\d++)-(\\d++).*");
public static final Pattern META_YEAR =
- Pattern.compile("^Jahr: (\\d{4}).*");
+ Pattern.compile("^Jahr: (\\d{4}).*");
protected List<ImportSedimentDensity> sedimentDensities;
@@ -51,13 +47,13 @@
protected String yearString;
public SedimentDensityParser() {
- sedimentDensities = new ArrayList<ImportSedimentDensity>();
+ this.sedimentDensities = new ArrayList<>();
}
@Override
- public void parse(File file) throws IOException {
- currentDescription = file.getName();
+ public void parse(final File file) throws IOException {
+ this.currentDescription = file.getName();
super.parse(file);
}
@@ -65,20 +61,20 @@
@Override
protected void reset() {
- current = new ImportSedimentDensity(currentDescription);
+ this.current = new ImportSedimentDensity(this.currentDescription);
}
@Override
protected void finish() {
- if (current != null) {
- sedimentDensities.add(current);
+ if (this.current != null) {
+ this.sedimentDensities.add(this.current);
}
}
@Override
- protected void handleLine(int lineNum, String line) {
+ protected void handleLine(final int lineNum, final String line) {
if (line.startsWith(START_META_CHAR)) {
handleMetaLine(stripMetaLine(line));
}
@@ -88,7 +84,7 @@
}
- protected void handleMetaLine(String line) {
+ protected void handleMetaLine(final String line) {
if (handleMetaDepth(line)) {
return;
}
@@ -99,27 +95,26 @@
}
- protected boolean handleMetaDepth(String line) {
- Matcher m = META_DEPTH.matcher(line);
+ protected boolean handleMetaDepth(final String line) {
+ final Matcher m = META_DEPTH.matcher(line);
if (m.matches()) {
- String lo = m.group(1);
- String up = m.group(2);
+ final String lo = m.group(1);
+ final String up = m.group(2);
log.info("Found sediment density depth: "
- + lo + " - " + up + " cm");
+ + lo + " - " + up + " cm");
try {
- ImportDepth depth = new ImportDepth(
- new BigDecimal(nf.parse(lo).doubleValue()),
- new BigDecimal(nf.parse(up).doubleValue())
- );
+ final ImportDepth depth = new ImportDepth(
+ AbstractParser.parseDecimal(lo),
+ AbstractParser.parseDecimal(up));
- current.setDepth(depth);
+ this.current.setDepth(depth);
return true;
}
- catch (ParseException pe) {
+ catch (final ParseException pe) {
log.warn("Unparseable numbers in: '" + line + "'");
}
}
@@ -130,13 +125,13 @@
return false;
}
- protected boolean handleMetaYear(String line) {
- Matcher m = META_YEAR.matcher(line);
+ protected boolean handleMetaYear(final String line) {
+ final Matcher m = META_YEAR.matcher(line);
if (m.matches()) {
- yearString = m.group(1);
+ this.yearString = m.group(1);
- log.info("Found sediment density year: " + yearString);
+ log.info("Found sediment density year: " + this.yearString);
return true;
}
@@ -147,8 +142,8 @@
}
- protected void handleDataLine(String line) {
- String[] vals = line.split(SEPERATOR_CHAR);
+ protected void handleDataLine(final String line) {
+ final String[] vals = line.split(SEPERATOR_CHAR);
if (vals == null || vals.length < 3) {
log.warn("skip invalid data line: '" + line + "'");
@@ -159,13 +154,13 @@
BigDecimal shoreOffset = null;
BigDecimal density = null;
try {
- km = new BigDecimal(nf.parse(vals[0]).doubleValue());
- density = new BigDecimal(nf.parse(vals[2]).doubleValue());
+ km = AbstractParser.parseDecimal(vals[0]);
+ density = AbstractParser.parseDecimal(vals[2]);
if (!vals[1].isEmpty()) {
- shoreOffset = new BigDecimal(nf.parse(vals[1]).doubleValue());
+ shoreOffset = AbstractParser.parseDecimal(vals[1]);
}
}
- catch (ParseException pe) {
+ catch (final ParseException pe) {
log.warn("Unparseable numbers in '" + line + "'");
}
@@ -175,26 +170,26 @@
}
BigDecimal year = null;
- if (yearString != null) {
+ if (this.yearString != null) {
try {
- year = new BigDecimal(nf.parse(yearString).doubleValue());
+ year = AbstractParser.parseDecimal(this.yearString);
}
- catch (ParseException pe) {
+ catch (final ParseException pe) {
log.warn("Unparseable year string");
}
}
- current.addValue(new ImportSedimentDensityValue(
- km,
- shoreOffset,
- density,
- year,
- currentDescription));
+ this.current.addValue(new ImportSedimentDensityValue(
+ km,
+ shoreOffset,
+ density,
+ year,
+ this.currentDescription));
}
public List<ImportSedimentDensity> getSedimentDensities() {
- return sedimentDensities;
+ return this.sedimentDensities;
}
}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
diff -r 0adc6d04de95 -r 2bb38e25091b backend/src/main/java/org/dive4elements/river/importer/parsers/WaterlevelDifferencesParser.java
--- a/backend/src/main/java/org/dive4elements/river/importer/parsers/WaterlevelDifferencesParser.java Wed Apr 11 14:09:13 2018 +0200
+++ b/backend/src/main/java/org/dive4elements/river/importer/parsers/WaterlevelDifferencesParser.java Wed Apr 11 14:20:01 2018 +0200
@@ -19,15 +19,14 @@
import java.util.regex.Pattern;
import org.apache.log4j.Logger;
-
+import org.dive4elements.river.backend.utils.DateUtil;
import org.dive4elements.river.importer.ImportTimeInterval;
import org.dive4elements.river.importer.ImportUnit;
-
import org.dive4elements.river.importer.ImportWst;
-import org.dive4elements.river.importer.ImportWstQRange;
import org.dive4elements.river.importer.ImportWstColumn;
import org.dive4elements.river.importer.ImportWstColumnValue;
-import org.dive4elements.river.backend.utils.DateUtil;
+import org.dive4elements.river.importer.ImportWstQRange;
+import org.dive4elements.river.importer.common.AbstractParser;
/**
@@ -36,21 +35,21 @@
public class WaterlevelDifferencesParser extends LineParser {
private static final Logger log =
- Logger.getLogger(WaterlevelDifferencesParser.class);
+ Logger.getLogger(WaterlevelDifferencesParser.class);
private static final NumberFormat nf =
- NumberFormat.getInstance(DEFAULT_LOCALE);
+ NumberFormat.getInstance(DEFAULT_LOCALE);
public static final Pattern META_UNIT =
- Pattern.compile("^Einheit: \\[(.*)\\].*");
+ Pattern.compile("^Einheit: \\[(.*)\\].*");
public static final Pattern YEARS_IN_COLUMN =
- Pattern.compile(".*(\\d{4})-(\\d{4})$");
+ Pattern.compile(".*(\\d{4})-(\\d{4})$");
- public static final double INTERVAL_GAP = 0.00001d;
+ public static final BigDecimal INTERVAL_GAP = new BigDecimal("0.00001");
/** List of parsed differences as ImportWst s. */
- private List<ImportWst> differences;
+ private final List<ImportWst> differences;
private ImportWstColumn[] columns;
@@ -59,13 +58,13 @@
public WaterlevelDifferencesParser() {
- differences = new ArrayList<ImportWst>();
+ this.differences = new ArrayList<>();
}
/** Get the differences as wst parsed so far. */
public List<ImportWst> getDifferences() {
- return differences;
+ return this.differences;
}
@@ -74,9 +73,9 @@
* from it.
*/
@Override
- public void parse(File file) throws IOException {
- current = new ImportWst(file.getName());
- current.setKind(6);
+ public void parse(final File file) throws IOException {
+ this.current = new ImportWst(file.getName());
+ this.current.setKind(6);
super.parse(file);
}
@@ -90,14 +89,14 @@
@Override
protected void finish() {
- if (columns != null && current != null) {
+ if (this.columns != null && this.current != null) {
// TODO figure out if its needed, as the columns
// are registered at their construction time.
- for (ImportWstColumn col: columns) {
+ for (final ImportWstColumn col: this.columns) {
// TODO place a current.addColumn(col); here?
}
- differences.add(current);
+ this.differences.add(this.current);
}
// For all differences columns, add a single Q-Range with
@@ -106,27 +105,27 @@
// TODO: should otherwise be extended to
// (first station of next range - INTERVAL_GAP),
// assuming always ascending stations
- for (ImportWstColumn column: columns) {
- List<ImportWstColumnValue> cValues = column.getColumnValues();
- BigDecimal a = cValues.get(0).getPosition();
+ for (final ImportWstColumn column: this.columns) {
+ final List<ImportWstColumnValue> cValues = column.getColumnValues();
+ final BigDecimal a = cValues.get(0).getPosition();
BigDecimal b = cValues.get(cValues.size() - 1).getPosition();
if (a.compareTo(b) == 0) {
- b = new BigDecimal(b.doubleValue() + INTERVAL_GAP);
+ b = b.add(INTERVAL_GAP);
}
column.addColumnQRange(
- new ImportWstQRange(
- a,
- b,
- new BigDecimal(-1d))
- );
+ new ImportWstQRange(
+ a,
+ b,
+ new BigDecimal(-1d))
+ );
}
- current = null;
- columns = null;
+ this.current = null;
+ this.columns = null;
}
@Override
- protected void handleLine(int lineNum, String line) {
+ protected void handleLine(final int lineNum, final String line) {
if (line.startsWith(START_META_CHAR)) {
handleMetaLine(stripMetaLine(line));
}
@@ -136,7 +135,7 @@
}
- private void handleMetaLine(String meta) {
+ private void handleMetaLine(final String meta) {
if (handleMetaUnit(meta)) {
return;
}
@@ -146,14 +145,14 @@
}
- private boolean handleMetaUnit(String meta) {
- Matcher m = META_UNIT.matcher(meta);
+ private boolean handleMetaUnit(final String meta) {
+ final Matcher m = META_UNIT.matcher(meta);
if (m.matches()) {
- String unit = m.group(1);
+ final String unit = m.group(1);
log.debug("Found unit: '" + unit + "'");
- current.setUnit(new ImportUnit(unit));
+ this.current.setUnit(new ImportUnit(unit));
return true;
}
@@ -162,13 +161,13 @@
}
- private boolean handleMetaColumnNames(String meta) {
- Pattern META_COLUMN_NAMES = Pattern.compile("Fluss-km;(.*)");
- Matcher m = META_COLUMN_NAMES.matcher(meta);
+ private boolean handleMetaColumnNames(final String meta) {
+ final Pattern META_COLUMN_NAMES = Pattern.compile("Fluss-km;(.*)");
+ final Matcher m = META_COLUMN_NAMES.matcher(meta);
if (m.matches()) {
- String colStr = m.group(1);
- String[] cols = colStr.split(SEPERATOR_CHAR);
+ final String colStr = m.group(1);
+ final String[] cols = colStr.split(SEPERATOR_CHAR);
log.debug("Found " + cols.length + " columns.");
@@ -182,28 +181,28 @@
/** Setup column structures with name, description and time interval. */
- private void initColumns(String[] cols) {
- current.setNumberColumns(cols.length);
- columns = current.getColumns().toArray(
- new ImportWstColumn[cols.length]);
+ private void initColumns(final String[] cols) {
+ this.current.setNumberColumns(cols.length);
+ this.columns = this.current.getColumns().toArray(
+ new ImportWstColumn[cols.length]);
for (int i = 0; i < cols.length; i++) {
- String name = cols[i].replace("\"", "");
+ final String name = cols[i].replace("\"", "");
log.debug("Create new column '" + name + "'");
- ImportWstColumn column = current.getColumn(i);
+ final ImportWstColumn column = this.current.getColumn(i);
column.setName(name);
column.setDescription(name);
- Matcher m = YEARS_IN_COLUMN.matcher(name);
+ final Matcher m = YEARS_IN_COLUMN.matcher(name);
if (m.matches()) {
- int startYear = Integer.parseInt(m.group(1));
- int endYear = Integer.parseInt(m.group(2));
- ImportTimeInterval time = new ImportTimeInterval(
- DateUtil.getStartDateFromYear(startYear),
- DateUtil.getEndDateFromYear(endYear)
- );
+ final int startYear = Integer.parseInt(m.group(1));
+ final int endYear = Integer.parseInt(m.group(2));
+ final ImportTimeInterval time = new ImportTimeInterval(
+ DateUtil.getStartDateFromYear(startYear),
+ DateUtil.getEndDateFromYear(endYear)
+ );
column.setTimeInterval(time);
} else {
log.debug("No time interval in column header found: " + name);
@@ -215,9 +214,9 @@
/** Handle one line of data, add one value for all columns.
* @param line the line to parse
*/
- private void handleDataLine(String line) {
+ private void handleDataLine(final String line) {
// Split by separator, do not exclude trailing empty string.
- String[] cols = line.split(SEPERATOR_CHAR, -1);
+ final String[] cols = line.split(SEPERATOR_CHAR, -1);
if (cols == null || cols.length < 2) {
log.warn("skip invalid waterlevel-diff line: '" + line + "'");
@@ -227,31 +226,31 @@
try {
// The first value in a line like 12,9;4,3;4,5 is the station,
// later real values.
- Double station = nf.parse(cols[0]).doubleValue();
+ final BigDecimal station = AbstractParser.parseDecimal(cols[0]);
- for (int i = 0; i < columns.length; i++) {
- int idx = i+1;
+ for (int i = 0; i < this.columns.length; i++) {
+ final int idx = i+1;
if (idx >= cols.length) {
log.warn("Insufficient column numbers: " + line);
continue;
}
- String value = cols[idx];
+ final String value = cols[idx];
if (value != null && !value.equals("")) {
try {
- columns[i].addColumnValue(
- new BigDecimal(station),
- new BigDecimal(nf.parse(value).doubleValue()));
+ this.columns[i].addColumnValue(
+ station,
+ AbstractParser.parseDecimal(value));
}
- catch (ParseException pe) {
+ catch (final ParseException pe) {
log.warn("Could not parse value: '" + value + "'");
}
}
}
}
- catch (ParseException pe) {
+ catch (final ParseException pe) {
log.warn("Could not parse station: '" + line + "'");
}
}
diff -r 0adc6d04de95 -r 2bb38e25091b backend/src/main/java/org/dive4elements/river/importer/parsers/WaterlevelParser.java
--- a/backend/src/main/java/org/dive4elements/river/importer/parsers/WaterlevelParser.java Wed Apr 11 14:09:13 2018 +0200
+++ b/backend/src/main/java/org/dive4elements/river/importer/parsers/WaterlevelParser.java Wed Apr 11 14:20:01 2018 +0200
@@ -19,16 +19,15 @@
import java.util.regex.Pattern;
import org.apache.log4j.Logger;
-
+import org.dive4elements.river.backend.utils.DateUtil;
+import org.dive4elements.river.importer.ImportRange;
import org.dive4elements.river.importer.ImportTimeInterval;
import org.dive4elements.river.importer.ImportUnit;
-
-import org.dive4elements.river.importer.ImportRange;
import org.dive4elements.river.importer.ImportWst;
import org.dive4elements.river.importer.ImportWstColumn;
import org.dive4elements.river.importer.ImportWstColumnValue;
import org.dive4elements.river.importer.ImportWstQRange;
-import org.dive4elements.river.backend.utils.DateUtil;
+import org.dive4elements.river.importer.common.AbstractParser;
/**
@@ -43,17 +42,17 @@
private static final Logger log = Logger.getLogger(WaterlevelParser.class);
private static final NumberFormat nf =
- NumberFormat.getInstance(DEFAULT_LOCALE);
+ NumberFormat.getInstance(DEFAULT_LOCALE);
private static final Pattern META_Q_RANGE =
- Pattern.compile("Abfluss\\s\\[(.*)\\];(.*)");
+ Pattern.compile("Abfluss\\s\\[(.*)\\];(.*)");
public static final Pattern META_UNIT =
- Pattern.compile("^Einheit: \\[(.*)\\].*");
+ Pattern.compile("^Einheit: \\[(.*)\\].*");
- public static final double INTERVAL_GAP = 0.00001d;
+ public static final BigDecimal INTERVAL_GAP = new BigDecimal("0.00001");
- private List<ImportWst> waterlevels;
+ private final List<ImportWst> waterlevels;
private ImportWst current;
@@ -70,18 +69,18 @@
public WaterlevelParser() {
- waterlevels = new ArrayList<ImportWst>();
+ this.waterlevels = new ArrayList<>();
}
public List<ImportWst> getWaterlevels() {
- return waterlevels;
+ return this.waterlevels;
}
@Override
- public void parse(File file) throws IOException {
- currentDescription = file.getName();
+ public void parse(final File file) throws IOException {
+ this.currentDescription = file.getName();
super.parse(file);
}
@@ -89,64 +88,63 @@
@Override
protected void reset() {
- currentQRange = null;
- current = new ImportWst(currentDescription);
- current.setNumberColumns(1);
- column = current.getColumn(0);
- column.setName(currentDescription);
- column.setDescription(currentDescription);
+ this.currentQRange = null;
+ this.current = new ImportWst(this.currentDescription);
+ this.current.setNumberColumns(1);
+ this.column = this.current.getColumn(0);
+ this.column.setName(this.currentDescription);
+ this.column.setDescription(this.currentDescription);
// Try to extract and set the TimeInterval.
- Matcher m = WaterlevelDifferencesParser.YEARS_IN_COLUMN.matcher(
- currentDescription);
+ final Matcher m = WaterlevelDifferencesParser.YEARS_IN_COLUMN.matcher(
+ this.currentDescription);
if (m.matches()) {
- int startYear = Integer.parseInt(m.group(1));
- int endYear = Integer.parseInt(m.group(2));
- ImportTimeInterval time = new ImportTimeInterval(
- DateUtil.getStartDateFromYear(startYear),
- DateUtil.getEndDateFromYear(endYear)
- );
- column.setTimeInterval(time);
+ final int startYear = Integer.parseInt(m.group(1));
+ final int endYear = Integer.parseInt(m.group(2));
+ final ImportTimeInterval time = new ImportTimeInterval(
+ DateUtil.getStartDateFromYear(startYear),
+ DateUtil.getEndDateFromYear(endYear)
+ );
+ this.column.setTimeInterval(time);
} else {
log.debug("No time interval in column header found: "
- + currentDescription);
+ + this.currentDescription);
}
- current.setKind(7);
+ this.current.setKind(7);
}
@Override
protected void finish() {
- if (current != null) {
- if (currentQRange != null) {
- List<ImportWstColumnValue> cValues = column.getColumnValues();
+ if (this.current != null) {
+ if (this.currentQRange != null) {
+ final List<ImportWstColumnValue> cValues = this.column.getColumnValues();
// Set end of range to last station
// or expand range to minimal length in case it would be 0
// TODO: should otherwise be extended to
// (first station of next range - INTERVAL_GAP),
// assuming always ascending stations
- BigDecimal lastStation = cValues.get(cValues.size() -1)
- .getPosition();
- if (lastStation.compareTo(currentRange.getA()) == 0) {
- currentRange.setB(new BigDecimal(lastStation.doubleValue()
- + INTERVAL_GAP));
+ final BigDecimal lastStation = cValues.get(cValues.size() -1)
+ .getPosition();
+ if (lastStation.compareTo(this.currentRange.getA()) == 0) {
+ this.currentRange.setB(lastStation.add(INTERVAL_GAP));
}
else {
- currentRange.setB(lastStation);
+ this.currentRange.setB(lastStation);
}
- currentQRange.setRange(currentRange);
- column.addColumnQRange(currentQRange);
+ this.currentQRange.setRange(this.currentRange);
+ this.column.addColumnQRange(this.currentQRange);
}
- waterlevels.add(current);
+ this.waterlevels.add(this.current);
}
}
@Override
- protected void handleLine(int lineNum, String line) {
+ protected void handleLine(final int lineNum, final String line) {
if (line.startsWith(START_META_CHAR)) {
handleMetaLine(stripMetaLine(line));
return;
@@ -161,44 +159,44 @@
}
- private void handleMetaLine(String meta) {
- Matcher m = META_UNIT.matcher(meta);
+ private void handleMetaLine(final String meta) {
+ final Matcher m = META_UNIT.matcher(meta);
if (m.matches()) {
- String unit = m.group(1);
+ final String unit = m.group(1);
log.debug("Found unit: '" + unit + "'");
- current.setUnit(new ImportUnit(unit));
+ this.current.setUnit(new ImportUnit(unit));
}
}
- private boolean handleQRange(String line) {
- Matcher m = META_Q_RANGE.matcher(line);
+ private boolean handleQRange(final String line) {
+ final Matcher m = META_Q_RANGE.matcher(line);
if (m.matches()) {
- String unitStr = m.group(1);
- String valueStr = m.group(2);
+ final String unitStr = m.group(1);
+ final String valueStr = m.group(2);
try {
- if (currentQRange != null) {
+ if (this.currentQRange != null) {
// Finish off the last one.
- List<ImportWstColumnValue> cValues = column
- .getColumnValues();
+ final List<ImportWstColumnValue> cValues = this.column
+ .getColumnValues();
// Set end of range to last station.
- currentRange.setB(cValues.get(cValues.size() -1)
- .getPosition());
- currentQRange.setRange(currentRange);
- column.addColumnQRange(currentQRange);
+ this.currentRange.setB(cValues.get(cValues.size() -1)
+ .getPosition());
+ this.currentQRange.setRange(this.currentRange);
+ this.column.addColumnQRange(this.currentQRange);
}
- currentQRange = new ImportWstQRange(null,
- new BigDecimal(nf.parse(valueStr).doubleValue()));
- currentRange = new ImportRange();
+ this.currentQRange = new ImportWstQRange(null,
+ AbstractParser.parseDecimal(valueStr));
+ this.currentRange = new ImportRange();
log.debug("Found new Q range: Q=" + valueStr);
return true;
}
- catch (ParseException pe) {
+ catch (final ParseException pe) {
log.warn("Unparseable Q range: '" + line + "'");
}
}
@@ -207,8 +205,8 @@
}
- private void handleDataLine(String line) {
- String[] cols = line.split(SEPERATOR_CHAR);
+ private void handleDataLine(final String line) {
+ final String[] cols = line.split(SEPERATOR_CHAR);
if (cols == null || cols.length < 2) {
log.warn("skip invalid waterlevel line: '" + line + "'");
@@ -217,18 +215,16 @@
try {
// Store the value and remember the position for QRange, if needed.
- Double station = nf.parse(cols[0]).doubleValue();
- Double value = nf.parse(cols[1]).doubleValue();
+ final BigDecimal station = AbstractParser.parseDecimal(cols[0]);
+ final BigDecimal value = AbstractParser.parseDecimal(cols[1]);
- BigDecimal stationBD = new BigDecimal(station);
+ this.column.addColumnValue(station, value);
- column.addColumnValue(stationBD, new BigDecimal(value));
-
- if (currentRange.getA() == null) {
- currentRange.setA(stationBD);
+ if (this.currentRange.getA() == null) {
+ this.currentRange.setA(station);
}
}
- catch (ParseException pe) {
+ catch (final ParseException pe) {
log.warn("Unparseable number in data row: " + line);
}
}
diff -r 0adc6d04de95 -r 2bb38e25091b backend/src/main/java/org/dive4elements/river/importer/parsers/WstParser.java
--- a/backend/src/main/java/org/dive4elements/river/importer/parsers/WstParser.java Wed Apr 11 14:09:13 2018 +0200
+++ b/backend/src/main/java/org/dive4elements/river/importer/parsers/WstParser.java Wed Apr 11 14:20:01 2018 +0200
@@ -63,6 +63,8 @@
protected ImportWst wst;
protected ImportRange lastRange;
+ protected Double lastA;
+ protected Double lastB;
public WstParser() {
}
@@ -450,9 +452,8 @@
protected void addInterval(
final BigDecimal from,
- final BigDecimal to,
- final BigDecimal[] values
- ) {
+ BigDecimal to,
+ final BigDecimal[] values) {
log.debug("addInterval: " + from + " " + to);
if (values == null || from == MAX_RANGE || from == MIN_RANGE) {
@@ -460,28 +461,38 @@
}
// expand single-line i.e. 0-lenght Q-range to minimal length
+ if (from == to) {
+ if (this.lastRange != null && this.lastA > this.lastB) {
+ to = from.subtract(INTERVAL_GAP);
+ }
+ else {
+ to = from.add(INTERVAL_GAP);
+ }
+ }
+
final ImportRange range = new ImportRange(from, to);
- if (from == to) {
- if ((this.lastRange != null) && (this.lastRange.difference() < 0.0))
- range.setB(from.subtract(INTERVAL_GAP));
- else
- range.setB(from.add(INTERVAL_GAP));
- }
// little workaround to make the q ranges tightly fit.
// Leave a very small gap to ensure that the range queries
// still work.
if (this.lastRange != null) {
- if (this.lastRange.difference() > 0.0)
+ if (this.lastA < this.lastB) {
this.lastRange.setB(range.getA().subtract(INTERVAL_GAP));
- else // lastA >= lastB
+ }
+ else { // lastA >= lastB
this.lastRange.setA(range.getB().add(INTERVAL_GAP));
+ }
}
- for (int i = 0; i < values.length; ++i)
- this.wst.getColumn(i).addColumnQRange(new ImportWstQRange(range, values[i]));
+ for (int i = 0; i < values.length; ++i) {
+ final ImportWstColumn column = this.wst.getColumn(i);
+ final ImportWstQRange wstQRange = new ImportWstQRange(range, values[i]);
+ column.addColumnQRange(wstQRange);
+ }
+ this.lastA = from.doubleValue();
+ this.lastB = to.doubleValue();
this.lastRange = range;
}
diff -r 0adc6d04de95 -r 2bb38e25091b backend/src/main/java/org/dive4elements/river/importer/sinfo/SInfoImporter.java
--- a/backend/src/main/java/org/dive4elements/river/importer/sinfo/SInfoImporter.java Wed Apr 11 14:09:13 2018 +0200
+++ b/backend/src/main/java/org/dive4elements/river/importer/sinfo/SInfoImporter.java Wed Apr 11 14:20:01 2018 +0200
@@ -48,9 +48,8 @@
BASICS("Basisdaten"), //
SELECTED_ADDITIONAL("Selektierte_Zusaetzliche_Laengsschnitte"), //
INFRASTRUCTURE("Infrastrukturen_BWaStr"), //
- CHANNEL("Fahrrinnenverhaeltnisse"), //
+ CHANNEL("Zu_gewaehrleistende_Fahrrinnenverhaeltnisse"), //
COLLISION_EINZEL("Grundberuehrungen" + File.separator + "Einzeljahre"), //
- COLLISION_EPOCHE("Grundberuehrungen" + File.separator + "Epoche"), //
TKH_EINZEL("Transportkoerperhoehen" + File.separator + "Einzeljahre"), //
TKH_EPOCHE("Transportkoerperhoehen" + File.separator + "Epochen"), //
TKH_MODELL("Transportkoerperhoehen" + File.separator + "Modellergebnisse"), //
@@ -136,8 +135,6 @@
boolean added = false;
added = this.parsers.addAll(CollisionParser.createParsers(SInfoDirName.COLLISION_EINZEL.buildPath(this.rootDir),
SInfoDirName.COLLISION_EINZEL.getFile(), river));
- added |= this.parsers.addAll(CollisionParser.createParsers(SInfoDirName.COLLISION_EPOCHE.buildPath(this.rootDir),
- SInfoDirName.COLLISION_EPOCHE.getFile(), river));
if (!added)
log.info("Collision: no files found");
}
diff -r 0adc6d04de95 -r 2bb38e25091b backend/src/main/java/org/dive4elements/river/importer/sinfo/parsers/BedMobilityParser.java
--- a/backend/src/main/java/org/dive4elements/river/importer/sinfo/parsers/BedMobilityParser.java Wed Apr 11 14:09:13 2018 +0200
+++ b/backend/src/main/java/org/dive4elements/river/importer/sinfo/parsers/BedMobilityParser.java Wed Apr 11 14:20:01 2018 +0200
@@ -66,7 +66,9 @@
*/
public static List<BedMobilityParser> createParsers(final File importDir, final File relativeDir, final ImportRiver river) {
final List<BedMobilityParser> parsers = new ArrayList<>();
- parsers.add(new BedMobilityParser(new File(importDir, IMPORT_FILENAME), new File(relativeDir, IMPORT_FILENAME), river));
+ final File importFile = new File(importDir, IMPORT_FILENAME);
+ if (importFile.exists())
+ parsers.add(new BedMobilityParser(importFile, new File(relativeDir, IMPORT_FILENAME), river));
return parsers;
}
diff -r 0adc6d04de95 -r 2bb38e25091b backend/src/main/java/org/dive4elements/river/importer/sinfo/parsers/ChannelParser.java
--- a/backend/src/main/java/org/dive4elements/river/importer/sinfo/parsers/ChannelParser.java Wed Apr 11 14:09:13 2018 +0200
+++ b/backend/src/main/java/org/dive4elements/river/importer/sinfo/parsers/ChannelParser.java Wed Apr 11 14:20:01 2018 +0200
@@ -79,7 +79,9 @@
*/
public static List<ChannelParser> createParsers(final File importDir, final File relativeDir, final ImportRiver river) {
final List<ChannelParser> parsers = new ArrayList<>();
- parsers.add(new ChannelParser(new File(importDir, IMPORT_FILENAME), new File(relativeDir, IMPORT_FILENAME), river));
+ final File importFile = new File(importDir, IMPORT_FILENAME);
+ if (importFile.exists())
+ parsers.add(new ChannelParser(importFile, new File(relativeDir, IMPORT_FILENAME), river));
return parsers;
}
diff -r 0adc6d04de95 -r 2bb38e25091b backend/src/main/java/org/dive4elements/river/importer/sinfo/parsers/CollisionParser.java
--- a/backend/src/main/java/org/dive4elements/river/importer/sinfo/parsers/CollisionParser.java Wed Apr 11 14:09:13 2018 +0200
+++ b/backend/src/main/java/org/dive4elements/river/importer/sinfo/parsers/CollisionParser.java Wed Apr 11 14:20:01 2018 +0200
@@ -100,8 +100,10 @@
*/
public static List<CollisionParser> createParsers(final File importDir, final File relativeDir, final ImportRiver river) {
final List<CollisionParser> parsers = new ArrayList<>();
- for (final File file : listFiles(importDir, ".csv"))
- parsers.add(new CollisionParser(file, new File(relativeDir, file.getName()), river));
+ if (importDir.exists()) {
+ for (final File file : listFiles(importDir, ".csv"))
+ parsers.add(new CollisionParser(file, new File(relativeDir, file.getName()), river));
+ }
return parsers;
}
diff -r 0adc6d04de95 -r 2bb38e25091b backend/src/main/java/org/dive4elements/river/importer/sinfo/parsers/DailyDischargeParser.java
--- a/backend/src/main/java/org/dive4elements/river/importer/sinfo/parsers/DailyDischargeParser.java Wed Apr 11 14:09:13 2018 +0200
+++ b/backend/src/main/java/org/dive4elements/river/importer/sinfo/parsers/DailyDischargeParser.java Wed Apr 11 14:20:01 2018 +0200
@@ -79,14 +79,16 @@
*/
public static List<DailyDischargeParser> createParsers(final File importDir, final File relativeDir, final ImportRiver river) {
final List<DailyDischargeParser> parsers = new ArrayList<>();
- final File[] files = importDir.listFiles(new FilenameFilter() {
- @Override
- public boolean accept(final File dir, final String name) {
- return IMPORT_FILENAME.matcher(name).matches();
- }
- });
- for (final File file : files)
- parsers.add(new DailyDischargeParser(file, new File(relativeDir, file.getName()), river));
+ if (importDir.exists()) {
+ final File[] files = importDir.listFiles(new FilenameFilter() {
+ @Override
+ public boolean accept(final File dir, final String name) {
+ return IMPORT_FILENAME.matcher(name).matches();
+ }
+ });
+ for (final File file : files)
+ parsers.add(new DailyDischargeParser(file, new File(relativeDir, file.getName()), river));
+ }
return parsers;
}
diff -r 0adc6d04de95 -r 2bb38e25091b backend/src/main/java/org/dive4elements/river/importer/sinfo/parsers/DepthEvolutionParser.java
--- a/backend/src/main/java/org/dive4elements/river/importer/sinfo/parsers/DepthEvolutionParser.java Wed Apr 11 14:09:13 2018 +0200
+++ b/backend/src/main/java/org/dive4elements/river/importer/sinfo/parsers/DepthEvolutionParser.java Wed Apr 11 14:20:01 2018 +0200
@@ -77,8 +77,9 @@
*/
public static List<DepthEvolutionParser> createParsers(final File importDir, final File relativeDir, final ImportRiver river) {
final List<DepthEvolutionParser> parsers = new ArrayList<>();
- for (final File file : listFiles(importDir, ".csv"))
- parsers.add(new DepthEvolutionParser(file, new File(relativeDir, file.getName()), river));
+ if (importDir.exists())
+ for (final File file : listFiles(importDir, ".csv"))
+ parsers.add(new DepthEvolutionParser(file, new File(relativeDir, file.getName()), river));
return parsers;
}
diff -r 0adc6d04de95 -r 2bb38e25091b backend/src/main/java/org/dive4elements/river/importer/sinfo/parsers/FlowDepthParser.java
--- a/backend/src/main/java/org/dive4elements/river/importer/sinfo/parsers/FlowDepthParser.java Wed Apr 11 14:09:13 2018 +0200
+++ b/backend/src/main/java/org/dive4elements/river/importer/sinfo/parsers/FlowDepthParser.java Wed Apr 11 14:20:01 2018 +0200
@@ -87,8 +87,9 @@
*/
public static List<FlowDepthParser> createParsers(final File importDir, final File relativeDir, final ImportRiver river) {
final List<FlowDepthParser> parsers = new ArrayList<>();
- for (final File file : listFiles(importDir, ".csv"))
- parsers.add(new FlowDepthParser(file, new File(relativeDir, file.getName()), river));
+ if (importDir.exists())
+ for (final File file : listFiles(importDir, ".csv"))
+ parsers.add(new FlowDepthParser(file, new File(relativeDir, file.getName()), river));
return parsers;
}
diff -r 0adc6d04de95 -r 2bb38e25091b backend/src/main/java/org/dive4elements/river/importer/sinfo/parsers/InfrastructureParser.java
--- a/backend/src/main/java/org/dive4elements/river/importer/sinfo/parsers/InfrastructureParser.java Wed Apr 11 14:09:13 2018 +0200
+++ b/backend/src/main/java/org/dive4elements/river/importer/sinfo/parsers/InfrastructureParser.java Wed Apr 11 14:20:01 2018 +0200
@@ -26,7 +26,6 @@
import org.dive4elements.river.importer.common.ParsingState;
import org.dive4elements.river.importer.sinfo.importitem.InfrastructureKmLineImport;
import org.dive4elements.river.importer.sinfo.importitem.InfrastructureSeriesImport;
-import org.dive4elements.river.model.AnnotationType;
import org.dive4elements.river.model.sinfo.Infrastructure;
import org.dive4elements.river.model.sinfo.InfrastructureValue;
@@ -66,8 +65,6 @@
private final HashMap<String, ImportAttribute> bankAttributes;
- private final HashMap<String, ImportAnnotationType> types;
-
/***** CONSTRUCTORS *****/
@@ -79,9 +76,6 @@
this.bankAttributes.put("links", new ImportAttribute(DB_BANK_LEFT));
this.bankAttributes.put("rechts", new ImportAttribute(DB_BANK_RIGHT));
this.bankAttributes.put("", new ImportAttribute(DB_BANK_NULL));
- this.types = new HashMap<>();
- for (final AnnotationType type : AnnotationType.getTypes())
- this.types.put(type.getName().trim().toLowerCase(), new ImportAnnotationType(type.getName()));
}
@@ -104,8 +98,9 @@
*/
public static List<InfrastructureParser> createParsers(final File importDir, final File relativeDir, final ImportRiver river) {
final List<InfrastructureParser> parsers = new ArrayList<>();
- for (final File file : listFiles(importDir, ".csv"))
- parsers.add(new InfrastructureParser(file, new File(relativeDir, file.getName()), river));
+ if (importDir.exists())
+ for (final File file : listFiles(importDir, ".csv"))
+ parsers.add(new InfrastructureParser(file, new File(relativeDir, file.getName()), river));
return parsers;
}
@@ -137,12 +132,15 @@
final Matcher m = META_TYPE.matcher(this.currentLine);
if (m.matches()) {
this.metaPatternsMatched.add(META_TYPE);
- if (this.types.containsKey(m.group(1).trim().toLowerCase()))
- this.seriesHeader.setType(this.types.get(m.group(1).trim().toLowerCase()));
+ if (this.river.getAnnotationClassifier() != null) {
+ final ImportAnnotationType type = this.river.getAnnotationClassifier().classifyDescription(m.group(1).trim(),
+ this.river.getAnnotationClassifier().getDefaultType());
+ this.seriesHeader.setType(type);
+ log.info(String.format("Type name in file: '%s', will be assigned to database name '%s'", m.group(1).trim(), type.getName()));
+ }
else {
- final ImportAnnotationType type = new ImportAnnotationType(m.group(1).trim());
- this.types.put(m.group(1).trim().toLowerCase(), type);
- this.seriesHeader.setType(type);
+ log.error("No annotation types file configured, cannot process type '" + m.group(1).trim() + "'");
+ this.headerParsingState = ParsingState.STOP;
}
return true;
}
diff -r 0adc6d04de95 -r 2bb38e25091b backend/src/main/java/org/dive4elements/river/importer/sinfo/parsers/SelectedAdditionalParser.java
--- a/backend/src/main/java/org/dive4elements/river/importer/sinfo/parsers/SelectedAdditionalParser.java Wed Apr 11 14:09:13 2018 +0200
+++ b/backend/src/main/java/org/dive4elements/river/importer/sinfo/parsers/SelectedAdditionalParser.java Wed Apr 11 14:20:01 2018 +0200
@@ -17,6 +17,7 @@
import java.io.LineNumberReader;
import java.io.Serializable;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.List;
import org.apache.log4j.Logger;
@@ -43,9 +44,7 @@
private static final Logger log = Logger.getLogger(SelectedAdditionalParser.class);
- private static final String IMPORT_Q_FILENAME = "Mit_Abflussdaten.txt";
-
- private static final String IMPORT_W_FILENAME = "Ohne_Abflussdaten.txt";
+ private static final String IMPORT_FILENAME = "Zus_Laengsschnitte.txt";
private enum SelectionType {
WITH_Q("Q", "with discharge"), //
@@ -66,6 +65,13 @@
public String getLogText() {
return this.logText;
}
+
+ public static SelectionType parse(final String path) {
+ if (path.toLowerCase().endsWith(".wst"))
+ return WITH_Q;
+ else
+ return WITHOUT_Q;
+ }
}
private final File importPath;
@@ -74,19 +80,16 @@
private final ImportRiver river;
- private final SelectionType selectionType;
-
- private final List<String> links;
+ private final HashMap<String, SelectionType> links;
/***** CONSTRUCTORS *****/
- public SelectedAdditionalParser(final File importPath, final File rootRelativePath, final ImportRiver river, final SelectionType selectionType) {
+ public SelectedAdditionalParser(final File importPath, final File rootRelativePath, final ImportRiver river) {
this.importPath = importPath;
this.rootRelativePath = rootRelativePath;
this.river = river;
- this.selectionType = selectionType;
- this.links = new ArrayList<>();
+ this.links = new HashMap<>();
}
@@ -104,10 +107,9 @@
*/
public static List<SelectedAdditionalParser> createParsers(final File importDir, final File relativeDir, final ImportRiver river) {
final List<SelectedAdditionalParser> parsers = new ArrayList<>();
- parsers.add(new SelectedAdditionalParser(new File(importDir, IMPORT_Q_FILENAME), new File(relativeDir, IMPORT_Q_FILENAME),
- river, SelectionType.WITH_Q));
- parsers.add(new SelectedAdditionalParser(new File(importDir, IMPORT_W_FILENAME), new File(relativeDir, IMPORT_W_FILENAME),
- river, SelectionType.WITHOUT_Q));
+ final File importFile = new File(importDir, IMPORT_FILENAME);
+ if (importFile.exists())
+ parsers.add(new SelectedAdditionalParser(importFile, new File(relativeDir, IMPORT_FILENAME), river));
return parsers;
}
@@ -123,8 +125,8 @@
line = in.readLine();
if (line == null)
break;
- if (!line.trim().isEmpty() && !line.trim().startsWith(AbstractParser.START_META_CHAR))
- this.links.add(line.trim());
+ if (!line.trim().isEmpty() && !line.trim().startsWith(AbstractParser.START_META_CHAR) && !this.links.containsKey(line.trim()))
+ this.links.put(line.trim(), SelectionType.parse(line.trim()));
}
log.info("Number of file links found: " + this.links.size());
}
@@ -138,17 +140,16 @@
public void store() {
final Session session = ImporterSession.getInstance().getDatabaseSession();
final SQLQuery reset = session.createSQLQuery("UPDATE wsts SET sinfo_selection = NULL WHERE (river_id=:river_id) AND (kind=1)"
- + " AND (sinfo_selection=:seltype)");
+ + " AND (sinfo_selection IS NOT NULL)");
reset.setParameter("river_id", this.river.getPeer().getId());
- reset.setParameter("seltype", this.selectionType.getKey());
reset.executeUpdate();
final Query query = session.createQuery("FROM Wst WHERE (river=:river) AND (kind=1) AND (lower(description) LIKE :path)");
query.setParameter("river", this.river.getPeer());
int count = 0;
- for (final String wstfile : this.links) {
- count += updateWst(session, query, this.river.getPeer(), wstfile, this.selectionType);
+ for (final String wstfile : this.links.keySet()) {
+ count += updateWst(session, query, this.river.getPeer(), wstfile, this.links.get(wstfile));
}
- log.info("Updated " + count + " wsts for selected additionals " + this.selectionType.getLogText());
+ log.info("Updated " + count + " wsts for selected additionals");
}
private int updateWst(final Session session, final Query query, final River river, final String path, final SelectionType selectionType) {
diff -r 0adc6d04de95 -r 2bb38e25091b backend/src/main/java/org/dive4elements/river/importer/sinfo/parsers/TkhParser.java
--- a/backend/src/main/java/org/dive4elements/river/importer/sinfo/parsers/TkhParser.java Wed Apr 11 14:09:13 2018 +0200
+++ b/backend/src/main/java/org/dive4elements/river/importer/sinfo/parsers/TkhParser.java Wed Apr 11 14:20:01 2018 +0200
@@ -87,8 +87,9 @@
*/
public static List<TkhParser> createParsers(final File importDir, final File relativeDir, final ImportRiver river) {
final List<TkhParser> parsers = new ArrayList<>();
- for (final File file : listFiles(importDir, ".csv"))
- parsers.add(new TkhParser(file, new File(relativeDir, file.getName()), river));
+ if (importDir.exists())
+ for (final File file : listFiles(importDir, ".csv"))
+ parsers.add(new TkhParser(file, new File(relativeDir, file.getName()), river));
return parsers;
}
diff -r 0adc6d04de95 -r 2bb38e25091b backend/src/main/java/org/dive4elements/river/importer/uinfo/UInfoImporter.java
--- a/backend/src/main/java/org/dive4elements/river/importer/uinfo/UInfoImporter.java Wed Apr 11 14:09:13 2018 +0200
+++ b/backend/src/main/java/org/dive4elements/river/importer/uinfo/UInfoImporter.java Wed Apr 11 14:20:01 2018 +0200
@@ -38,7 +38,7 @@
private enum UInfoDirName {
BASICS("Basisdaten"), //
- SALIX("Salix-Linie_Fluss-Aue-Konnektivitaet" + File.separator + "Salix-Linie");
+ SALIX("Salix-Linie" + File.separator + "Salix-Linie");
private final String dirname;
diff -r 0adc6d04de95 -r 2bb38e25091b backend/src/main/java/org/dive4elements/river/importer/uinfo/parsers/SalixParser.java
--- a/backend/src/main/java/org/dive4elements/river/importer/uinfo/parsers/SalixParser.java Wed Apr 11 14:09:13 2018 +0200
+++ b/backend/src/main/java/org/dive4elements/river/importer/uinfo/parsers/SalixParser.java Wed Apr 11 14:20:01 2018 +0200
@@ -87,7 +87,9 @@
*/
public static List<SalixParser> createParsers(final File importDir, final File relativeDir, final ImportRiver river) {
final List<SalixParser> parsers = new ArrayList<>();
- parsers.add(new SalixParser(new File(importDir, IMPORT_FILENAME), new File(relativeDir, IMPORT_FILENAME), river));
+ final File importFile = new File(importDir, IMPORT_FILENAME);
+ if (importFile.exists())
+ parsers.add(new SalixParser(importFile, new File(relativeDir, IMPORT_FILENAME), river));
return parsers;
}
More information about the Dive4Elements-commits
mailing list