# HG changeset patch # User Raimund Renkert # Date 1404120585 -7200 # Node ID 45cced06490c9f5309d44b857b631c7b7a75f765 # Parent 42076d94977e79fc96be28d684eaca28e96a615a# Parent cacff0246a81473c3dc13e2d1d319e73ce6847b9 merged with default. diff -r 42076d94977e -r 45cced06490c .hgtags --- a/.hgtags Wed May 21 11:43:10 2014 +0200 +++ b/.hgtags Mon Jun 30 11:29:45 2014 +0200 @@ -87,3 +87,12 @@ 0000000000000000000000000000000000000000 3.1.1 837b620b58b436f1eeb1a18fbe871a9de650dad5 3.1.1 242e790fb4eeb44ffec94fad9ef19fb6ca59d79f 3.1.2 +952b57b43e2fab1af900cc4019366df1378f47f9 3.1.3 +9d5385ccad0778e4867901b4e18a06a5cb90b0f6 3.1.13 +9d5385ccad0778e4867901b4e18a06a5cb90b0f6 3.1.13 +0000000000000000000000000000000000000000 3.1.13 +952b57b43e2fab1af900cc4019366df1378f47f9 3.1.3 +e0d06f4edaa6d0f3a15b8eecfe7696e825ff5062 3.1.3 +e0d06f4edaa6d0f3a15b8eecfe7696e825ff5062 3.1.3 +8333b9b06c981a231e0c92283de3bfa65b6cc0d9 3.1.3 +6fef38a526c705158f17fa16839ad216d5ec8afc 3.1.4 diff -r 42076d94977e -r 45cced06490c artifacts/contrib/find-obsolete-i18n-strings.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/artifacts/contrib/find-obsolete-i18n-strings.py Mon Jun 30 11:29:45 2014 +0200 @@ -0,0 +1,32 @@ +#!/usr/bin/env python + +import os +import re +import sys + +KEY_RE = re.compile(r"^\s*([^\s=]+)\s*=.*$") + +def main(): + content = [] + for root, dirs, files in os.walk('.'): + for f in files: + if not (f.endswith(".java") or f.endswith(".xml")): + continue + p = os.path.join(root, f) + with open(p, "rb") as jf: + content.append(jf.read()) + + content = ''.join(content) + + for arg in sys.argv[1:]: + with open(arg, "rb") as prop: + for line in prop: + m = KEY_RE.match(line) + if not m: + continue + key = m.group(1) + if content.find(key) == -1: + print key + +if __name__ == "__main__": + main() diff -r 42076d94977e -r 45cced06490c artifacts/doc/conf/artifacts/minfo.xml --- a/artifacts/doc/conf/artifacts/minfo.xml Wed May 21 11:43:10 2014 +0200 +++ b/artifacts/doc/conf/artifacts/minfo.xml Mon Jun 30 11:29:45 2014 +0200 @@ -35,7 +35,7 @@ - + @@ -51,10 +51,6 @@ - - - - @@ -82,11 +78,6 @@ - - - - - diff -r 42076d94977e -r 45cced06490c artifacts/doc/conf/generators.xml --- a/artifacts/doc/conf/generators.xml Wed May 21 11:43:10 2014 +0200 +++ b/artifacts/doc/conf/generators.xml Mon Jun 30 11:29:45 2014 +0200 @@ -147,8 +147,6 @@ - - diff -r 42076d94977e -r 45cced06490c artifacts/doc/conf/jasper/beddifference.jasper Binary file artifacts/doc/conf/jasper/beddifference.jasper has changed diff -r 42076d94977e -r 45cced06490c artifacts/doc/conf/jasper/beddifference.jrxml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/artifacts/doc/conf/jasper/beddifference.jrxml Mon Jun 30 11:29:45 2014 +0200 @@ -0,0 +1,156 @@ + + + + + + + + + + + + + + + + + + + + + + + + <band height="161" splitType="Stretch"> + <staticText> + <reportElement x="0" y="1" width="177" height="30"/> + <textElement> + <font size="18"/> + </textElement> + <text><![CDATA[Ergebnisausgabe]]></text> + </staticText> + <textField> + <reportElement x="177" y="0" width="338" height="31"/> + <textElement> + <font size="18"/> + </textElement> + <textFieldExpression><![CDATA[$F{river}]]></textFieldExpression> + </textField> + <textField> + <reportElement x="0" y="31" width="515" height="26"/> + <textElement> + <font size="14"/> + </textElement> + <textFieldExpression><![CDATA[$F{calculation}]]></textFieldExpression> + </textField> + <staticText> + <reportElement x="0" y="70" width="123" height="20"/> + <textElement/> + <text><![CDATA[Gewässer:]]></text> + </staticText> + <textField> + <reportElement x="123" y="70" width="392" height="20"/> + <textElement/> + <textFieldExpression><![CDATA[$F{river}]]></textFieldExpression> + </textField> + <staticText> + <reportElement x="0" y="90" width="123" height="20"/> + <textElement/> + <text><![CDATA[Datum der Erstellung:]]></text> + </staticText> + <textField> + <reportElement x="123" y="90" width="392" height="20"/> + <textElement/> + <textFieldExpression><![CDATA[$F{date}]]></textFieldExpression> + </textField> + <staticText> + <reportElement x="0" y="109" width="123" height="20"/> + <textElement/> + <text><![CDATA[Differenzen:]]></text> + </staticText> + <textField isStretchWithOverflow="true"> + <reportElement stretchType="RelativeToTallestObject" x="123" y="109" width="392" height="20"/> + <textElement/> + <textFieldExpression><![CDATA[$F{differences}]]></textFieldExpression> + </textField> + </band> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -r 42076d94977e -r 45cced06490c artifacts/doc/conf/jasper/sqrelation.jasper Binary file artifacts/doc/conf/jasper/sqrelation.jasper has changed diff -r 42076d94977e -r 45cced06490c artifacts/doc/conf/jasper/sqrelation.jrxml --- a/artifacts/doc/conf/jasper/sqrelation.jrxml Wed May 21 11:43:10 2014 +0200 +++ b/artifacts/doc/conf/jasper/sqrelation.jrxml Mon Jun 30 11:29:45 2014 +0200 @@ -1,9 +1,9 @@ - + - - - + + + @@ -30,357 +30,366 @@ <band height="562" splitType="Stretch"> <staticText> - <reportElement x="0" y="1" width="177" height="30" uuid="ea2c7f24-bfb8-4827-b578-4bd2b217a296"/> + <reportElement x="0" y="1" width="177" height="30"/> <textElement> <font size="18"/> </textElement> <text><![CDATA[Ergebnisausgabe]]></text> </staticText> <textField> - <reportElement x="177" y="0" width="338" height="31" uuid="91b15a29-a4bf-4623-868c-4dea6797f696"/> + <reportElement x="177" y="0" width="338" height="31"/> <textElement> <font size="18"/> </textElement> <textFieldExpression><![CDATA[$F{river}]]></textFieldExpression> </textField> <textField> - <reportElement x="0" y="31" width="515" height="26" uuid="4a262597-f5d6-458e-af8b-afe554fc0102"/> + <reportElement x="0" y="31" width="515" height="26"/> <textElement> <font size="14"/> </textElement> <textFieldExpression><![CDATA[$F{calculation}]]></textFieldExpression> </textField> <staticText> - <reportElement x="0" y="211" width="123" height="20" uuid="5939c51d-e441-490b-813e-14ef73d4a566"/> + <reportElement x="0" y="211" width="123" height="20"/> <textElement verticalAlignment="Middle"/> <text><![CDATA[Gewässer:]]></text> </staticText> <textField isBlankWhenNull="false"> - <reportElement x="123" y="211" width="392" height="20" isRemoveLineWhenBlank="true" uuid="1dc3bbce-49bc-4f21-90d0-f04690fc8f9e"/> + <reportElement x="123" y="211" width="392" height="20" isRemoveLineWhenBlank="true"/> <textElement verticalAlignment="Middle"/> <textFieldExpression><![CDATA[$F{river}]]></textFieldExpression> </textField> <staticText> - <reportElement x="0" y="231" width="123" height="20" uuid="7e0d3425-968a-4000-876c-a3fbbeb0a36c"/> + <reportElement x="0" y="231" width="123" height="20"/> <textElement verticalAlignment="Middle"/> <text><![CDATA[Ort:]]></text> </staticText> <textField isBlankWhenNull="false"> - <reportElement x="123" y="231" width="392" height="20" isRemoveLineWhenBlank="true" uuid="f9b20927-f244-4ed9-ab9f-a88cc2fd643b"/> + <reportElement x="123" y="231" width="392" height="20" isRemoveLineWhenBlank="true"/> <textElement verticalAlignment="Middle"/> <textFieldExpression><![CDATA[$F{location}]]></textFieldExpression> </textField> <staticText> - <reportElement x="0" y="291" width="123" height="20" uuid="629b34e1-8131-4202-950f-2811cb33982f"/> + <reportElement x="0" y="291" width="123" height="20"/> <textElement verticalAlignment="Middle"/> <text><![CDATA[Datum der Erstellung:]]></text> </staticText> <textField isBlankWhenNull="false"> - <reportElement x="123" y="291" width="392" height="20" isRemoveLineWhenBlank="true" uuid="6c88d0c9-e695-49c4-a6ec-c0dd4ddbb343"/> + <reportElement x="123" y="291" width="392" height="20" isRemoveLineWhenBlank="true"/> <textElement verticalAlignment="Middle"/> <textFieldExpression><![CDATA[$F{date}]]></textFieldExpression> </textField> <staticText> - <reportElement x="0" y="311" width="123" height="20" uuid="47d924ca-f38c-490a-aa3b-18838124e6af"/> + <reportElement x="0" y="311" width="123" height="20"/> <textElement verticalAlignment="Middle"/> <text><![CDATA[Zeitraum:]]></text> </staticText> <textField isBlankWhenNull="false"> - <reportElement x="123" y="311" width="392" height="20" isRemoveLineWhenBlank="true" uuid="f3602df3-74fe-40c1-ace6-f41e8216e221"/> + <reportElement x="123" y="311" width="392" height="20" isRemoveLineWhenBlank="true"/> <textElement verticalAlignment="Middle"/> <textFieldExpression><![CDATA[$F{periods}]]></textFieldExpression> </textField> <staticText> - <reportElement x="0" y="331" width="123" height="20" uuid="bb031cd0-2b45-43f4-88c4-7d6865208637"/> + <reportElement x="0" y="331" width="123" height="20"/> <textElement verticalAlignment="Middle"/> <text><![CDATA[Ausreißertest:]]></text> </staticText> <textField isBlankWhenNull="false"> - <reportElement x="123" y="331" width="392" height="20" isRemoveLineWhenBlank="true" uuid="b2eac7df-2616-4f2e-839c-731aaf0093c7"/> + <reportElement x="123" y="331" width="392" height="20" isRemoveLineWhenBlank="true"/> <textElement verticalAlignment="Middle"/> <textFieldExpression><![CDATA[$F{outliertest}]]></textFieldExpression> </textField> <staticText> - <reportElement x="0" y="351" width="123" height="20" uuid="f71b4e2d-a071-4f45-a058-7f4fe30ad408"/> + <reportElement x="0" y="351" width="123" height="20"/> <textElement verticalAlignment="Middle"/> <text><![CDATA[Ausreißer:]]></text> </staticText> <textField isBlankWhenNull="false"> - <reportElement x="123" y="351" width="392" height="20" isRemoveLineWhenBlank="true" uuid="5f453092-4a9a-497f-afd7-bee7be1290f7"/> + <reportElement x="123" y="351" width="392" height="20" isRemoveLineWhenBlank="true"/> <textElement verticalAlignment="Middle"/> <textFieldExpression><![CDATA[$F{outliers}]]></textFieldExpression> </textField> <staticText> - <reportElement x="0" y="57" width="346" height="20" uuid="d87807aa-6f27-492a-993a-5a49b7fccb83"/> + <reportElement x="0" y="57" width="346" height="20"/> <textElement markup="styled"> <font size="12"/> </textElement> <text><![CDATA[in der Funktion S = aQ<sup>b</sup>]]></text> </staticText> <staticText> - <reportElement x="0" y="81" width="62" height="20" uuid="10110bb0-9bfa-42b8-802c-ca07d747234c"/> + <reportElement x="0" y="81" width="62" height="20"/> <textElement verticalAlignment="Middle"/> <text><![CDATA[PARAMETER]]></text> </staticText> <staticText> - <reportElement x="84" y="81" width="400" height="20" uuid="d8c8dca8-b318-40f9-92bb-f707d5b7f848"/> + <reportElement x="84" y="81" width="400" height="20"/> <textElement verticalAlignment="Middle"/> <text><![CDATA[FESTSTOFFFRAKTION]]></text> </staticText> <staticText> - <reportElement x="0" y="101" width="62" height="15" uuid="330bd2dc-04f0-4c74-9f34-330bc6915735"/> + <reportElement x="0" y="101" width="62" height="15"/> <textElement textAlignment="Center"/> <text><![CDATA[A]]></text> </staticText> <staticText> - <reportElement x="0" y="116" width="62" height="15" uuid="9069990a-ce8d-46e2-838a-f77f19b4f55c"/> + <reportElement x="0" y="116" width="62" height="15"/> <textElement textAlignment="Center"/> <text><![CDATA[B]]></text> </staticText> <staticText> - <reportElement x="0" y="146" width="62" height="15" uuid="c7a8c453-f31a-4231-a444-07a39df7af73"/> + <reportElement x="0" y="146" width="62" height="15"/> <textElement textAlignment="Center"/> <text><![CDATA[D]]></text> </staticText> <staticText> - <reportElement x="0" y="161" width="62" height="15" uuid="4d1c30d1-6ae2-48c2-ad70-ebab733aa1c7"/> + <reportElement x="0" y="161" width="62" height="15"/> <textElement textAlignment="Center"/> <text><![CDATA[E]]></text> </staticText> <staticText> - <reportElement x="0" y="176" width="62" height="15" uuid="dfab2652-3ae1-4e6e-b57b-6b0d66949e05"/> + <reportElement x="0" y="176" width="62" height="15"/> <textElement textAlignment="Center"/> <text><![CDATA[F]]></text> </staticText> <staticText> - <reportElement x="0" y="191" width="62" height="15" uuid="870fe372-d364-4431-948a-7fc4c271d6da"/> + <reportElement x="0" y="191" width="62" height="15"/> <textElement textAlignment="Center"/> <text><![CDATA[G]]></text> </staticText> <staticText> - <reportElement x="0" y="131" width="62" height="15" uuid="e5ad6c96-cbf0-4614-afbd-b72fece107b0"/> + <reportElement x="0" y="131" width="62" height="15"/> <textElement textAlignment="Center"/> <text><![CDATA[C]]></text> </staticText> <staticText> - <reportElement x="84" y="146" width="426" height="15" uuid="4d5c1309-c06f-457d-9fc5-363de9e26bef"/> + <reportElement x="84" y="146" width="426" height="15"/> + <textElement/> <text><![CDATA[Sedimenttransport von Fein- und Mittelkies (Geschiebetransport) (2-16 mm)]]></text> </staticText> <staticText> - <reportElement x="84" y="176" width="442" height="15" uuid="f790bd5a-39cc-411d-b5a4-545c925edfe4"/> + <reportElement x="84" y="176" width="442" height="15"/> + <textElement/> <text><![CDATA[Sedimenttransport von Geschiebe-gesamt (0,000-125 mm)]]></text> </staticText> <staticText> - <reportElement x="84" y="161" width="461" height="15" uuid="c25f74ed-cc4a-470a-a44a-cee0b6de3095"/> + <reportElement x="84" y="161" width="461" height="15"/> + <textElement/> <text><![CDATA[Sedimenttransport von Grobkornanteil (Geschiebetransport) (> Mittelkies 16-125 mm)]]></text> </staticText> <staticText> - <reportElement x="84" y="131" width="426" height="15" uuid="b03ec9c2-9ae9-41d7-98b7-17da2c1dda3f"/> + <reportElement x="84" y="131" width="426" height="15"/> + <textElement/> <text><![CDATA[Sedimenttransport von Sand (Geschiebetransport) (0,063-2 mm)]]></text> </staticText> <staticText> - <reportElement x="84" y="101" width="431" height="15" uuid="62c83306-ddfc-42ca-88fa-142adf68b11c"/> + <reportElement x="84" y="101" width="431" height="15"/> + <textElement/> <text><![CDATA[Sedimenttransport von Feinkornanteil (Suspensionstransport) (< 0,063 mm)]]></text> </staticText> <staticText> - <reportElement x="84" y="191" width="426" height="15" uuid="98d7b609-084b-404e-9cb6-d387953e13e1"/> + <reportElement x="84" y="191" width="426" height="15"/> + <textElement/> <text><![CDATA[Sedimenttransport von Geschiebe-gesamt-Sohlhöhenrelevant (0,063-125 mm)]]></text> </staticText> <staticText> - <reportElement x="84" y="116" width="426" height="15" uuid="c7f56c71-6ab0-4fa3-8921-050dde3c744d"/> + <reportElement x="84" y="116" width="426" height="15"/> + <textElement/> <text><![CDATA[Sedimenttransport von Sand (Suspensionstransort) (0,063-2 mm)]]></text> </staticText> <line> - <reportElement x="0" y="210" width="515" height="1" uuid="c93e6486-0e68-41b4-8e37-1feb20c3ff1d"/> + <reportElement x="0" y="210" width="515" height="1"/> </line> <textField isBlankWhenNull="false"> - <reportElement x="123" y="251" width="392" height="20" isRemoveLineWhenBlank="true" uuid="00b164e3-ac40-4e38-8cb1-6e9fd27391c1"/> + <reportElement x="123" y="251" width="392" height="20" isRemoveLineWhenBlank="true"/> <textElement verticalAlignment="Middle"/> <textFieldExpression><![CDATA[$F{msName}]]></textFieldExpression> </textField> <staticText> - <reportElement x="0" y="251" width="123" height="20" uuid="a1052a1f-2e8b-4280-b99e-982aebfeaea8"/> + <reportElement x="0" y="251" width="123" height="20"/> <textElement verticalAlignment="Middle"/> <text><![CDATA[Messstellenname:]]></text> </staticText> <textField isBlankWhenNull="false"> - <reportElement x="123" y="271" width="392" height="20" isRemoveLineWhenBlank="true" uuid="e368adda-b9b8-4f6c-963c-af10b4555bd3"/> + <reportElement x="123" y="271" width="392" height="20" isRemoveLineWhenBlank="true"/> <textElement verticalAlignment="Middle"/> <textFieldExpression><![CDATA[$F{msGauge}]]></textFieldExpression> </textField> <staticText> - <reportElement x="0" y="271" width="123" height="20" uuid="400c6d08-b7ca-4e81-b301-d101c8f0237c"/> + <reportElement x="0" y="271" width="123" height="20"/> <textElement verticalAlignment="Middle"/> <text><![CDATA[hdyr. Bezugspegel:]]></text> </staticText> <line> - <reportElement x="0" y="371" width="515" height="1" uuid="cd7640a7-b7de-4e19-b7be-08a39e0b75d3"/> + <reportElement x="0" y="371" width="515" height="1"/> </line> - <elementGroup> - <staticText> - <reportElement mode="Transparent" x="18" y="512" width="76" height="20" forecolor="#000000" backcolor="#FFFFFF" uuid="bdfd6837-f8a6-4d83-9c67-63185810022b"/> - <textElement textAlignment="Left" verticalAlignment="Middle" rotation="None" markup="styled"> - <font fontName="SansSerif" size="10" isBold="false" isItalic="false" isUnderline="false" isStrikeThrough="false" pdfEncoding="Cp1252" isPdfEmbedded="false"/> - <paragraph lineSpacing="Single"/> - </textElement> - <text><![CDATA[C<sub>Duan</sub>]]></text> - </staticText> - <staticText> - <reportElement x="18" y="458" width="76" height="20" uuid="daf38337-b8d7-4272-8ba4-05a2189b2db1"/> - <textElement markup="none"/> - <text><![CDATA[r²]]></text> - </staticText> - <staticText> - <reportElement mode="Transparent" x="18" y="478" width="76" height="14" forecolor="#000000" backcolor="#FFFFFF" uuid="4865df94-3788-443b-b86b-1b44731fac34"/> - <textElement textAlignment="Left" verticalAlignment="Middle" rotation="None" markup="styled"> - <font fontName="SansSerif" size="10" isBold="false" isItalic="false" isUnderline="false" isStrikeThrough="false" pdfEncoding="Cp1252" isPdfEmbedded="false"/> - <paragraph lineSpacing="Single"/> - </textElement> - <text><![CDATA[n<sub>tot</sub>]]></text> - </staticText> - <staticText> - <reportElement x="109" y="492" width="100" height="20" uuid="acf7c8e0-a6ac-43ef-b598-c2315029e9d4"/> - <text><![CDATA[Anzahl Ausreißer]]></text> - </staticText> - <staticText> - <reportElement mode="Transparent" x="18" y="441" width="76" height="17" forecolor="#000000" backcolor="#FFFFFF" uuid="15f4318b-28bc-413a-b23e-f6b286317d86"/> - <textElement textAlignment="Left" verticalAlignment="Middle" rotation="None" markup="styled"> - <font fontName="SansSerif" size="10" isBold="false" isItalic="false" isUnderline="false" isStrikeThrough="false" pdfEncoding="Cp1252" isPdfEmbedded="false"/> - <paragraph lineSpacing="Single"/> - </textElement> - <text><![CDATA[Q<sub>max,gemessen</sub>]]></text> - </staticText> - <staticText> - <reportElement x="18" y="417" width="76" height="24" uuid="32e2af68-cec0-415c-b948-ad7073fc2471"/> - <textElement markup="none"/> - <text><![CDATA[Standardfehler]]></text> - </staticText> - <staticText> - <reportElement x="109" y="532" width="181" height="20" uuid="34ad1c35-e0dd-4391-a500-ff87ff80e776"/> - <text><![CDATA[Bias Korrektur nach Ferguson 1986]]></text> - </staticText> - <staticText> - <reportElement x="109" y="383" width="176" height="20" uuid="e0266375-b88c-4305-bd8a-855a062b940f"/> - <textElement markup="none"/> - <text><![CDATA[Transportkurvenkoeffizient]]></text> - </staticText> - <staticText> - <reportElement x="18" y="403" width="76" height="15" uuid="9c524667-e4e8-40e4-ae48-613c4135caa1"/> - <textElement markup="none"/> - <text><![CDATA[b]]></text> - </staticText> - <staticText> - <reportElement x="18" y="383" width="76" height="20" uuid="ac7f46ac-57d9-424e-a7a7-9f85dda492f6"/> - <textElement markup="none"/> - <text><![CDATA[a]]></text> - </staticText> - <staticText> - <reportElement x="109" y="512" width="181" height="20" uuid="836b4943-193f-4cf2-a866-13c35818dc7c"/> - <text><![CDATA[Bias Korrektur nach Duan 1983]]></text> - </staticText> - <staticText> - <reportElement mode="Transparent" x="109" y="441" width="285" height="17" forecolor="#000000" backcolor="#FFFFFF" uuid="6f74a211-c286-4025-88fe-b92a6de305b9"/> - <textElement textAlignment="Left" verticalAlignment="Top" rotation="None" markup="none"> - <font fontName="SansSerif" size="10" isBold="false" isItalic="false" isUnderline="false" isStrikeThrough="false" pdfEncoding="Cp1252" isPdfEmbedded="false"/> - <paragraph lineSpacing="Single"/> - </textElement> - <text><![CDATA[maximal gemessener Abfluss [m³/s]]]></text> - </staticText> - <staticText> - <reportElement x="109" y="403" width="143" height="19" uuid="3ac94bf9-2dff-4ea9-8258-799cbbf7717d"/> - <textElement markup="none"/> - <text><![CDATA[Transportkurvenexponent]]></text> - </staticText> - <staticText> - <reportElement mode="Transparent" x="18" y="492" width="76" height="20" forecolor="#000000" backcolor="#FFFFFF" uuid="79e5c3d5-c55b-416d-b8bd-2b3ec87ce047"/> - <textElement textAlignment="Left" verticalAlignment="Middle" rotation="None" markup="styled"> - <font fontName="SansSerif" size="10" isBold="false" isItalic="false" isUnderline="false" isStrikeThrough="false" pdfEncoding="Cp1252" isPdfEmbedded="false"/> - <paragraph lineSpacing="Single"/> - </textElement> - <text><![CDATA[n<sub>Ausreißer</sub>]]></text> - </staticText> - <staticText> - <reportElement x="109" y="422" width="265" height="19" uuid="336f35ad-f64c-410a-b6b7-c6d3d6a4b90c"/> - <textElement markup="none"/> - <text><![CDATA[natürlicher Logarithmus der Standardabweichung]]></text> - </staticText> - <staticText> - <reportElement x="109" y="458" width="100" height="20" uuid="51d33fdd-6ed9-4400-8faf-a037ce8b0c90"/> - <textElement markup="none"/> - <text><![CDATA[Bestimmtheitsmaß]]></text> - </staticText> - <staticText> - <reportElement mode="Transparent" x="18" y="532" width="76" height="20" forecolor="#000000" backcolor="#FFFFFF" uuid="7959337f-da23-416e-b7d6-c0d260ec6665"/> - <textElement textAlignment="Left" verticalAlignment="Middle" rotation="None" markup="styled"> - <font fontName="SansSerif" size="10" isBold="false" isItalic="false" isUnderline="false" isStrikeThrough="false" pdfEncoding="Cp1252" isPdfEmbedded="false"/> - <paragraph lineSpacing="Single"/> - </textElement> - <text><![CDATA[C <sub>Ferguson</sub>]]></text> - </staticText> - <staticText> - <reportElement x="109" y="477" width="100" height="14" uuid="b499f108-5cca-4f1e-8022-a9baf1210917"/> - <text><![CDATA[Anzahl Messwerte]]></text> - </staticText> - </elementGroup> + <staticText> + <reportElement x="18" y="383" width="76" height="20"/> + <textElement markup="none"/> + <text><![CDATA[a]]></text> + </staticText> + <staticText> + <reportElement x="109" y="383" width="176" height="20"/> + <textElement markup="none"/> + <text><![CDATA[Transportkurvenkoeffizient]]></text> + </staticText> + <staticText> + <reportElement x="18" y="403" width="76" height="15"/> + <textElement markup="none"/> + <text><![CDATA[b]]></text> + </staticText> + <staticText> + <reportElement x="109" y="403" width="143" height="19"/> + <textElement markup="none"/> + <text><![CDATA[Transportkurvenexponent]]></text> + </staticText> + <staticText> + <reportElement x="18" y="417" width="76" height="24"/> + <textElement markup="none"/> + <text><![CDATA[Standardfehler]]></text> + </staticText> + <staticText> + <reportElement mode="Transparent" x="18" y="441" width="76" height="17" forecolor="#000000" backcolor="#FFFFFF"/> + <textElement textAlignment="Left" verticalAlignment="Middle" rotation="None" markup="styled"> + <font fontName="SansSerif" size="10" isBold="false" isItalic="false" isUnderline="false" isStrikeThrough="false" pdfEncoding="Cp1252" isPdfEmbedded="false"/> + <paragraph lineSpacing="Single"/> + </textElement> + <text><![CDATA[Q<sub>max</sub>]]></text> + </staticText> + <staticText> + <reportElement x="109" y="422" width="265" height="19"/> + <textElement markup="none"/> + <text><![CDATA[natürlicher Logarithmus der Standardabweichung]]></text> + </staticText> + <staticText> + <reportElement mode="Transparent" x="109" y="441" width="285" height="17" forecolor="#000000" backcolor="#FFFFFF"/> + <textElement textAlignment="Left" verticalAlignment="Top" rotation="None" markup="none"> + <font fontName="SansSerif" size="10" isBold="false" isItalic="false" isUnderline="false" isStrikeThrough="false" pdfEncoding="Cp1252" isPdfEmbedded="false"/> + <paragraph lineSpacing="Single"/> + </textElement> + <text><![CDATA[maximal gemessener Abfluss [m³/s]]]></text> + </staticText> + <staticText> + <reportElement x="18" y="458" width="76" height="20"/> + <textElement markup="none"/> + <text><![CDATA[r²]]></text> + </staticText> + <staticText> + <reportElement x="109" y="458" width="100" height="20"/> + <textElement markup="none"/> + <text><![CDATA[Bestimmtheitsmaß]]></text> + </staticText> + <staticText> + <reportElement mode="Transparent" x="18" y="478" width="76" height="14" forecolor="#000000" backcolor="#FFFFFF"/> + <textElement textAlignment="Left" verticalAlignment="Middle" rotation="None" markup="styled"> + <font fontName="SansSerif" size="10" isBold="false" isItalic="false" isUnderline="false" isStrikeThrough="false" pdfEncoding="Cp1252" isPdfEmbedded="false"/> + <paragraph lineSpacing="Single"/> + </textElement> + <text><![CDATA[n<sub>tot</sub>]]></text> + </staticText> + <staticText> + <reportElement mode="Transparent" x="18" y="492" width="76" height="20" forecolor="#000000" backcolor="#FFFFFF"/> + <textElement textAlignment="Left" verticalAlignment="Middle" rotation="None" markup="styled"> + <font fontName="SansSerif" size="10" isBold="false" isItalic="false" isUnderline="false" isStrikeThrough="false" pdfEncoding="Cp1252" isPdfEmbedded="false"/> + <paragraph lineSpacing="Single"/> + </textElement> + <text><![CDATA[n<sub>Ausreißer</sub>]]></text> + </staticText> + <staticText> + <reportElement x="109" y="477" width="100" height="14"/> + <textElement/> + <text><![CDATA[Anzahl Messwerte]]></text> + </staticText> + <staticText> + <reportElement x="109" y="492" width="100" height="20"/> + <textElement/> + <text><![CDATA[Anzahl Ausreißer]]></text> + </staticText> + <staticText> + <reportElement mode="Transparent" x="18" y="512" width="76" height="20" forecolor="#000000" backcolor="#FFFFFF"/> + <textElement textAlignment="Left" verticalAlignment="Middle" rotation="None" markup="styled"> + <font fontName="SansSerif" size="10" isBold="false" isItalic="false" isUnderline="false" isStrikeThrough="false" pdfEncoding="Cp1252" isPdfEmbedded="false"/> + <paragraph lineSpacing="Single"/> + </textElement> + <text><![CDATA[C<sub>Duan</sub>]]></text> + </staticText> + <staticText> + <reportElement x="109" y="512" width="181" height="20"/> + <textElement/> + <text><![CDATA[Bias Korrektur nach Duan 1983]]></text> + </staticText> + <staticText> + <reportElement mode="Transparent" x="18" y="532" width="76" height="20" forecolor="#000000" backcolor="#FFFFFF"/> + <textElement textAlignment="Left" verticalAlignment="Middle" rotation="None" markup="styled"> + <font fontName="SansSerif" size="10" isBold="false" isItalic="false" isUnderline="false" isStrikeThrough="false" pdfEncoding="Cp1252" isPdfEmbedded="false"/> + <paragraph lineSpacing="Single"/> + </textElement> + <text><![CDATA[C <sub>Ferguson</sub>]]></text> + </staticText> + <staticText> + <reportElement x="109" y="532" width="181" height="20"/> + <textElement/> + <text><![CDATA[Bias Korrektur nach Ferguson 1986]]></text> + </staticText> </band> - + - + - + - + - + - + - + - max,gemessen]]> + max [m³/s]]]> - + Ausreißer]]> - + Duan]]> - + Ferguson]]> - + - + gesamt]]> @@ -389,57 +398,57 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -448,11 +457,12 @@ - + + - + diff -r 42076d94977e -r 45cced06490c artifacts/doc/conf/meta-data.xml --- a/artifacts/doc/conf/meta-data.xml Wed May 21 11:43:10 2014 +0200 +++ b/artifacts/doc/conf/meta-data.xml Mon Jun 30 11:29:45 2014 +0200 @@ -91,10 +91,6 @@ - - - - @@ -136,6 +132,9 @@ Non Rec out iteration for: {$out} + + + @@ -218,9 +217,6 @@ - - - @@ -399,9 +395,6 @@ - - - @@ -1038,8 +1031,8 @@ - + @@ -1334,12 +1327,16 @@ p.id AS pid, p.description AS description, d.lower AS depth_lower, - d.upper AS depth_upper + d.upper AS depth_upper, + p.description || '<BR>' || + 'Tiefe: ' || d.lower || ' - ' || d.upper + || ' cm <BR>' || + 'Zeitraum: ' || t.start_time || ' - ' || t.stop_time + AS info FROM porosity p JOIN depths d ON p.depth_id = d.id - JOIN porosity_values pv on pv.porosity_id = p.id + JOIN time_intervals t ON p.time_interval_id=t.id WHERE p.river_id = ${river_id} - GROUP BY p.id, p.description, d.upper, d.lower ORDER BY depth_lower, depth_upper @@ -1347,8 +1344,8 @@ + info="{$info}" + ids="{$pid};{$description}" /> @@ -1560,7 +1557,7 @@ SELECT id AS anno_id, name AS anno_description FROM annotation_types - WHERE name IN ('Quelle', 'Senke') + WHERE name LIKE 'Quelle %' OR name LIKE 'Senke %' + + + + + WITH sta + AS (SELECT bhs.id, + bhs.description, + bhsv.station, + bhs.year + FROM bed_height_single bhs + JOIN bed_height_single_values bhsv + ON bhsv.bed_height_single_id = bhs.id + WHERE bhs.river_id = ${river_id}), + csta + AS (SELECT b1.id AS b1id, + b1.description AS b1desc, + b1.year AS b1year, + b2.id AS b2id, + b2.description AS b2desc, + b2.year AS b2year + FROM sta b1 + JOIN sta b2 + ON b1.station = b2.station + AND b1.id <> b2.id) + SELECT DISTINCT b1id, b1desc, b1year, + b2id, b2desc, b2year + FROM csta + ORDER BY b1desc, b2desc + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + The input here is a list differenc ids noted in the form: @@ -1771,10 +1862,7 @@ - - - - + diff -r 42076d94977e -r 45cced06490c artifacts/doc/conf/themes/default.xml --- a/artifacts/doc/conf/themes/default.xml Wed May 21 11:43:10 2014 +0200 +++ b/artifacts/doc/conf/themes/default.xml Mon Jun 30 11:29:45 2014 +0200 @@ -51,7 +51,6 @@ - diff -r 42076d94977e -r 45cced06490c artifacts/doc/conf/themes/second.xml --- a/artifacts/doc/conf/themes/second.xml Wed May 21 11:43:10 2014 +0200 +++ b/artifacts/doc/conf/themes/second.xml Mon Jun 30 11:29:45 2014 +0200 @@ -51,7 +51,6 @@ - diff -r 42076d94977e -r 45cced06490c artifacts/doc/datacage_ref_de.rst --- a/artifacts/doc/datacage_ref_de.rst Wed May 21 11:43:10 2014 +0200 +++ b/artifacts/doc/datacage_ref_de.rst Mon Jun 30 11:29:45 2014 +0200 @@ -407,6 +407,16 @@ +Der Expr-Ausdruck kann mittels der Zeichenfolge '#!#' innerhalb des Ausdrucks +in mehrere Ausdrücke zerlegt werden. Damit ist es möglich, einen Wert +in mehrere Kategorien einzusortieren. Wird z.B. ein Film über den Zeitraum +von zwei Jahren gedreht und man möchte eine Liste von Filmen nach ihren +Produktionsjahren gruppieren, sollte der Film im Resulat in beiden Jahren auftauchen. + +.. code:: xml + + + Datensätze auffalten ~~~~~~~~~~~~~~~~~~~~ @@ -695,7 +705,7 @@ ``dc:date-format`` Formatierte Ausgabe eines Datums ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -``dc:date-format(Format, Datum)`` leifert für ein Datum Datum einen String, der +``dc:date-format(Format, Datum)`` liefert für ein Datum einen String, der nach den Formatierungsregeln aus Format formatiert wird. Für die Formatierungen gelten die in SimpleFormat_ beschriebenen Regeln. diff -r 42076d94977e -r 45cced06490c artifacts/src/main/java/org/dive4elements/river/artifacts/D4EArtifact.java --- a/artifacts/src/main/java/org/dive4elements/river/artifacts/D4EArtifact.java Wed May 21 11:43:10 2014 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/D4EArtifact.java Mon Jun 30 11:29:45 2014 +0200 @@ -210,7 +210,9 @@ handleInitModel(data, context, callMeta); - buildStaticFacets(data, facets, callMeta); + if (!facets.isEmpty()) { + buildStaticFacets(data, facets, callMeta); + } filterFacets = buildFilterFacets(data); diff -r 42076d94977e -r 45cced06490c artifacts/src/main/java/org/dive4elements/river/artifacts/GaugeDischargeArtifact.java --- a/artifacts/src/main/java/org/dive4elements/river/artifacts/GaugeDischargeArtifact.java Wed May 21 11:43:10 2014 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/GaugeDischargeArtifact.java Mon Jun 30 11:29:45 2014 +0200 @@ -25,6 +25,7 @@ import org.dive4elements.artifacts.CallMeta; import org.dive4elements.river.artifacts.model.FacetTypes; +import org.dive4elements.river.artifacts.model.W; import org.dive4elements.river.artifacts.model.WQKms; import org.dive4elements.river.artifacts.states.DefaultState; @@ -221,7 +222,7 @@ } double [] kms = new double[values[0].length]; Arrays.fill(kms, gauge.getStation().doubleValue()); - res.add(new WQKms(kms, values[0], values[1], name, WQKms.CENTIMETER_AT_GAUGE)); + res.add(new WQKms(kms, values[0], values[1], name, W.CENTIMETER_AT_GAUGE)); return new CalculationResult( res.toArray(new WQKms[res.size()]), diff -r 42076d94977e -r 45cced06490c artifacts/src/main/java/org/dive4elements/river/artifacts/access/BedHeightAccess.java --- a/artifacts/src/main/java/org/dive4elements/river/artifacts/access/BedHeightAccess.java Wed May 21 11:43:10 2014 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/access/BedHeightAccess.java Mon Jun 30 11:29:45 2014 +0200 @@ -95,46 +95,6 @@ return type; } - public String getYearEpoch() { - if (yearEpoch == null) { - yearEpoch = getString("ye_select"); - } - return yearEpoch; - } - - - public int[] getBedHeightEpochIDs() { - if (epochIDs == null) { - String data = getString("soundings"); - - if (data == null) { - logger.warn("No 'soundings' parameter specified!"); - return null; - } - - String[] parts = data.split(";"); - - TIntArrayList ids = new TIntArrayList(); - - for (String part: parts) { - if (part.indexOf(SoundingsSelect.PREFIX_EPOCH) >= 0) { - String tmp = part.replace(SoundingsSelect.PREFIX_EPOCH, ""); - - try { - ids.add(Integer.parseInt(tmp)); - } - catch (NumberFormatException nfe) { - logger.warn("Cannot parse int from string: '" + tmp + "'"); - } - } - } - - epochIDs = ids.toNativeArray(); - } - - return epochIDs; - } - public Integer getHeightId() { if (heightId == null) { heightId = getInteger("height_id"); diff -r 42076d94977e -r 45cced06490c artifacts/src/main/java/org/dive4elements/river/artifacts/datacage/templating/Builder.java --- a/artifacts/src/main/java/org/dive4elements/river/artifacts/datacage/templating/Builder.java Wed May 21 11:43:10 2014 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/datacage/templating/Builder.java Mon Jun 30 11:29:45 2014 +0200 @@ -54,6 +54,9 @@ { private static Logger log = Logger.getLogger(Builder.class); + public static final Pattern MAGIC_EXPR_SEPARATOR = + Pattern.compile("#!#"); + public static final Pattern STRIP_LINE_INDENT = Pattern.compile("\\s*\\r?\\n\\s*"); @@ -506,9 +509,14 @@ List rows = rd.getRows(); String [] columns = rd.getColumnLabels(); - XPathExpression x; + String [] exprs = MAGIC_EXPR_SEPARATOR.split(expr); + + XPathExpression [] xs = new XPathExpression[exprs.length]; + try { - x = getXPathExpression(expr); + for (int i = 0; i < exprs.length; ++i) { + xs[i] = getXPathExpression(exprs[i]); + } } catch (XPathExpressionException xee) { log.warn("Invalid expression '" + expr + "'."); @@ -524,16 +532,16 @@ try { frames.put(columns, row); - Object key = x.evaluate(EVAL_DOCUMENT, returnType); - - ResultData group = groups.get(key); + for (XPathExpression x: xs) { + Object key = x.evaluate(EVAL_DOCUMENT, returnType); + ResultData group = groups.get(key); - if (group == null) { - group = new ResultData(rd.getColumnLabels()); - groups.put(key, group); + if (group == null) { + group = new ResultData(rd.getColumnLabels()); + groups.put(key, group); + } + group.add(row); } - - group.add(row); } catch (XPathExpressionException xxe) { log.warn("unable to apply expression '" + diff -r 42076d94977e -r 45cced06490c artifacts/src/main/java/org/dive4elements/river/artifacts/datacage/templating/FunctionResolver.java --- a/artifacts/src/main/java/org/dive4elements/river/artifacts/datacage/templating/FunctionResolver.java Wed May 21 11:43:10 2014 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/datacage/templating/FunctionResolver.java Mon Jun 30 11:29:45 2014 +0200 @@ -86,6 +86,27 @@ functions = new HashMap(); + addFunction("coalesce", 2, new XPathFunction() { + @Override + public Object evaluate(List args) throws XPathFunctionException { + return coalesce(args); + } + }); + + addFunction("lowercase", 1, new XPathFunction() { + @Override + public Object evaluate(List args) throws XPathFunctionException { + return args.get(0).toString().toLowerCase(); + } + }); + + addFunction("uppercase", 1, new XPathFunction() { + @Override + public Object evaluate(List args) throws XPathFunctionException { + return args.get(0).toString().toUpperCase(); + } + }); + addFunction("contains", 2, new XPathFunction() { @Override public Object evaluate(List args) throws XPathFunctionException { @@ -234,7 +255,7 @@ } /** Implementation of case-ignoring dc:contains. */ - public Object contains(List args) throws XPathFunctionException { + public static Object contains(List args) throws XPathFunctionException { Object haystack = args.get(0); Object needle = args.get(1); @@ -278,7 +299,7 @@ /** Implementation for getting the minimum value of location or distance * dc:fromValue. */ - public Object fromValue(List args) throws XPathFunctionException { + public static Object fromValue(List args) throws XPathFunctionException { Object mode = args.get(0); Object locations = args.get(1); Object from = args.get(2); @@ -324,7 +345,7 @@ /** Implementation for getting the maximum value of location or distance * dc:toValue. */ - public Object toValue(List args) throws XPathFunctionException { + public static Object toValue(List args) throws XPathFunctionException { Object mode = args.get(0); Object locations = args.get(1); Object to = args.get(2); @@ -372,7 +393,7 @@ /** Implementation for doing a string replace * dc:replace . */ - public Object replace(List args) throws XPathFunctionException { + public static Object replace(List args) throws XPathFunctionException { Object haystack = args.get(0); Object needle = args.get(1); Object replacement = args.get(2); @@ -389,7 +410,7 @@ /** Implementation for doing a string replace * dc:replace-all */ - public Object replaceAll(List args) throws XPathFunctionException { + public static Object replaceAll(List args) throws XPathFunctionException { Object haystack = args.get(0); Object needle = args.get(1); Object replacement = args.get(2); @@ -403,7 +424,7 @@ return haystack; } - public Object dateFormat(List args) throws XPathFunctionException { + public static Object dateFormat(List args) throws XPathFunctionException { Object pattern = args.get(0); Object date = args.get(1); @@ -428,7 +449,7 @@ return ""; } - public Set allStateSuccessors(String artifactName, String stateId) { + public static Set allStateSuccessors(String artifactName, String stateId) { GlobalContext gc = RiverContextFactory.getGlobalContext(); if (gc == null) { return Collections.emptySet(); @@ -441,7 +462,7 @@ return Collections.emptySet(); } - public Collection findAll(String needle, String haystack) { + public static Collection findAll(String needle, String haystack) { ArrayList result = new ArrayList(); @@ -453,7 +474,7 @@ return result; } - public Number maxNumber(Object list) { + public static Number maxNumber(Object list) { if (list instanceof Collection) { Collection collection = (Collection)list; double max = -Double.MAX_VALUE; @@ -493,7 +514,7 @@ : Double.valueOf(Double.MAX_VALUE); } - public Number minNumber(Object list) { + public static Number minNumber(Object list) { if (list instanceof Collection) { Collection collection = (Collection)list; double min = Double.MAX_VALUE; @@ -532,5 +553,17 @@ ? (Number)list : Double.valueOf(-Double.MAX_VALUE); } + + public static Object coalesce(List list) { + for (Object x: list) { + if (x instanceof String && ((String)x).length() != 0) { + return x; + } + if (x instanceof Number && ((Number)x).doubleValue() != 0.0) { + return x; + } + } + return StackFrames.NULL; + } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : diff -r 42076d94977e -r 45cced06490c artifacts/src/main/java/org/dive4elements/river/artifacts/model/FacetTypes.java --- a/artifacts/src/main/java/org/dive4elements/river/artifacts/model/FacetTypes.java Wed May 21 11:43:10 2014 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/model/FacetTypes.java Mon Jun 30 11:29:45 2014 +0200 @@ -174,7 +174,6 @@ WD("wdifferences"), BHDY("bedheight_difference_height_year"), BDY("bed_difference_year"), - BDE("bed_difference_epoch"), FWQC("fix_wq_curve"), FDWC("fix_deltawt_curve"), FLSC("fix_longitudinal_section_curve"), @@ -338,8 +337,6 @@ String BED_DIFFERENCE_YEAR_FILTERED = "bedheight_difference.year.filtered"; String BED_DIFFERENCE_HEIGHT_YEAR = "bedheight_difference.height_year"; String BED_DIFFERENCE_HEIGHT_YEAR_FILTERED = "bedheight_difference.height_year.filtered"; - String BED_DIFFERENCE_EPOCH = "bedheight_difference.epoch"; - String BED_DIFFERENCE_EPOCH_FILTERED = "bedheight_difference.epoch.filtered"; String BED_DIFFERENCE_MORPH_WIDTH1 = "bedheight_difference.morph_width1"; String BED_DIFFERENCE_MORPH_WIDTH2 = "bedheight_difference.morph_width2"; String BED_DIFFERENCE_SOUNDING_WIDTH = "bedheight_difference.sounding_width"; @@ -347,10 +344,6 @@ String BED_DIFFERENCE_YEAR_HEIGHT2 = "bedheight_difference.year.height2"; String BED_DIFFERENCE_YEAR_HEIGHT1_FILTERED = "bedheight_difference.year.height1.filtered"; String BED_DIFFERENCE_YEAR_HEIGHT2_FILTERED = "bedheight_difference.year.height2.filtered"; - String BED_DIFFERENCE_EPOCH_HEIGHT1 = "bedheight_difference.epoch.height1"; - String BED_DIFFERENCE_EPOCH_HEIGHT2 = "bedheight_difference.epoch.height2"; - String BED_DIFFERENCE_EPOCH_HEIGHT1_FILTERED = "bedheight_difference.epoch.height1.filtered"; - String BED_DIFFERENCE_EPOCH_HEIGHT2_FILTERED = "bedheight_difference.epoch.height2.filtered"; String MORPHOLOGIC_WIDTH = "morph-width"; diff -r 42076d94977e -r 45cced06490c artifacts/src/main/java/org/dive4elements/river/artifacts/model/MiddleBedHeightCalculation.java --- a/artifacts/src/main/java/org/dive4elements/river/artifacts/model/MiddleBedHeightCalculation.java Wed May 21 11:43:10 2014 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/model/MiddleBedHeightCalculation.java Mon Jun 30 11:29:45 2014 +0200 @@ -16,8 +16,6 @@ import org.dive4elements.artifacts.Artifact; import org.dive4elements.artifacts.common.utils.DateUtils; -import org.dive4elements.river.model.BedHeightEpoch; -import org.dive4elements.river.model.BedHeightEpochValue; import org.dive4elements.river.model.BedHeightSingle; import org.dive4elements.river.model.BedHeightSingleValue; import org.dive4elements.river.model.TimeInterval; @@ -35,7 +33,6 @@ logger.info("MiddleBedHeightCalculation.calculate"); int[] singleIds = access.getBedHeightSingleIDs(); - int[] epochIds = access.getBedHeightEpochIDs(); if (logger.isDebugEnabled()) { @@ -45,16 +42,11 @@ if (singleIds != null) { logger.debug(" " + singleIds.length + " single bedheight ids"); } - - if (epochIds != null) { - logger.debug(" " + epochIds.length + " epoch bedheight ids"); - } } List singles = getSingles(access, singleIds); - List epochs = getEpochs(access, epochIds); - return buildCalculationResult(access, singles, epochs); + return buildCalculationResult(access, singles); } @@ -80,32 +72,9 @@ } - protected List getEpochs( - BedHeightAccess access, - int[] ids - ) { - List epochs = new ArrayList(); - - for (int id: ids) { - BedHeightEpoch e = BedHeightEpoch.getBedHeightEpochById(id); - - if (e != null) { - epochs.add(e); - } - else { - logger.warn("Cannot find Epoch by id: " + id); - // TODO ADD WARNING - } - } - - return epochs; - } - - protected CalculationResult buildCalculationResult( BedHeightAccess access, - List singles, - List epochs + List singles ) { logger.info("MiddleBedHeightCalculation.buildCalculationResult"); @@ -122,14 +91,6 @@ } } - for (BedHeightEpoch epoch: epochs) { - MiddleBedHeightData d = prepareEpochData(epoch, kmLo, kmHi); - - if (d != null) { - data.add(d); - } - } - logger.debug("Calculation results in " + data.size() + " data objects."); return new CalculationResult((MiddleBedHeightData[]) @@ -186,43 +147,5 @@ return data; } - - - /** Create MiddleBedHeightData to return. */ - protected MiddleBedHeightData prepareEpochData( - BedHeightEpoch epoch, - double kmLo, - double kmHi - ) { - logger.debug("Prepare data for epoch: " + epoch.getDescription()); - - TimeInterval ti = epoch.getTimeInterval(); - - List values = - BedHeightEpochValue.getBedHeightEpochValues(epoch, kmLo, kmHi); - - MiddleBedHeightData data = new MiddleBedHeightData( - DateUtils.getYearFromDate(ti.getStartTime()), - DateUtils.getYearFromDate(ti.getStopTime()), - epoch.getEvaluationBy(), - epoch.getDescription() - ); - - for (BedHeightEpochValue value: values) { - data.addKM(value.getStation().doubleValue()); - if (value.getHeight() != null) { - data.addMiddleHeight(value.getHeight().doubleValue()); - data.addIsEmpty(false); - } - else { - data.addMiddleHeight(Double.NaN); - data.addIsEmpty(true); - } - } - - logger.debug("Epoch contains " + values.size() + " values"); - - return data; - } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 : diff -r 42076d94977e -r 45cced06490c artifacts/src/main/java/org/dive4elements/river/artifacts/model/WKmsFactory.java --- a/artifacts/src/main/java/org/dive4elements/river/artifacts/model/WKmsFactory.java Wed May 21 11:43:10 2014 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/model/WKmsFactory.java Mon Jun 30 11:29:45 2014 +0200 @@ -60,7 +60,7 @@ JOIN wst_q_ranges wqr ON wcqr.wst_q_range_id = wqr.id JOIN wst_columns wc ON wcqr.wst_column_id = wc.id JOIN wsts ON wc.wst_id = wsts.id - WHERE wc.wst_id = 1817 AND wc.position = 29; + WHERE wc.wst_id = 1817 AND wc.position = 29; */ diff -r 42076d94977e -r 45cced06490c artifacts/src/main/java/org/dive4elements/river/artifacts/model/WQ.java --- a/artifacts/src/main/java/org/dive4elements/river/artifacts/model/WQ.java Wed May 21 11:43:10 2014 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/model/WQ.java Mon Jun 30 11:29:45 2014 +0200 @@ -121,13 +121,13 @@ * If a conversion takes place converted is set to true */ public static WQ getFixedWQforExportAtGauge(WQ wq, BigDecimal datum) { - if (wq.getReferenceSystem() == wq.CENTIMETER_AT_GAUGE) { + if (wq.getReferenceSystem() == W.CENTIMETER_AT_GAUGE) { // Do nothing return wq; } // If we convert we work on a copy to avoid side effects. WQ ret = new WQ(wq.size(), wq.getName()); - ret.setReferenceSystem(wq.CENTIMETER_AT_GAUGE); + ret.setReferenceSystem(W.CENTIMETER_AT_GAUGE); // When we convert and have a datum we have a calculated // result at a gauge so we must subtract the datum. diff -r 42076d94977e -r 45cced06490c artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/BedDiffCalculation.java --- a/artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/BedDiffCalculation.java Wed May 21 11:43:10 2014 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/BedDiffCalculation.java Mon Jun 30 11:29:45 2014 +0200 @@ -29,7 +29,6 @@ Logger.getLogger(BedDiffCalculation.class); protected String river; - protected String yearEpoch; protected int [][] heightIds; public BedDiffCalculation() { @@ -39,7 +38,6 @@ logger.info("BedDiffCalculation.calculate"); String river = access.getRiverName(); - String yearEpoch = access.getYearEpoch(); int [][] heightIds = access.extractHeightIds(context); if (river == null) { @@ -47,13 +45,8 @@ addProblem("minfo.missing.river"); } - if (yearEpoch == null) { - addProblem("minfo.missing.year_epoch"); - } - if (!hasProblems()) { this.river = river; - this.yearEpoch = yearEpoch; this.heightIds = heightIds; return internalCalculate(); } @@ -62,7 +55,6 @@ } private CalculationResult internalCalculate() { - BedDiffYearResult [] results = new BedDiffYearResult[heightIds.length]; for (int i = 0; i < heightIds.length; i++) { @@ -70,21 +62,6 @@ results[i] = calculateYearDifference(pair); } return new CalculationResult(results, this); - // Currently epochs are handled like single years. To handle epochs - // uncomment the follwing code and use an if-clause in the code above. -/* - if (yearEpoch.equals("epoch")) { - BedDiffEpochResult [] results = new BedDiffEpochResult[heightIds.length]; - - for (int i = 0; i < heightIds.length; i++) { - BedHeight[] pair = getHeightPair(heightIds[i], "epoch"); - results[i] = calculateEpochDifference(pair); - } - return new CalculationResult(results, this); - } - - return new CalculationResult(); - */ } /** Get two BedHeights from factory. */ @@ -95,36 +72,6 @@ }; } - private BedDiffEpochResult calculateEpochDifference(BedHeightData[] pair) { - - BedHeightData bh1 = pair[0]; - BedHeightData bh2 = pair[1]; - - TDoubleArrayList stations = bh1.getStations(); - int size = stations.size(); - - TDoubleArrayList diffRes = new TDoubleArrayList(size); - TDoubleArrayList kms = new TDoubleArrayList(size); - TDoubleArrayList heights1 = new TDoubleArrayList(size); - TDoubleArrayList heights2 = new TDoubleArrayList(size); - - for (int i = 0; i < size; i++) { - double station = stations.getQuick(i); - double h1 = bh1.getHeight(station); - double h2 = bh2.getHeight(station); - double hDiff = h1 - h2; - if (!Double.isNaN(hDiff)) { - diffRes.add(hDiff); - kms.add(station); - heights1.add(h1); - heights2.add(h2); - } - } - Date start = ((BedHeightEpochData)bh1).getStart(); - Date end = ((BedHeightEpochData)bh2).getEnd(); - return new BedDiffEpochResult(kms, diffRes, heights1, heights2, start, end); - } - private BedDiffYearResult calculateYearDifference(BedHeightData[] pair) { logger.debug("BedDiffCalculation.calculateYearDifference"); BedHeightSingleData s1 = (BedHeightSingleData) pair[0]; diff -r 42076d94977e -r 45cced06490c artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/BedDiffEpochFacet.java --- a/artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/BedDiffEpochFacet.java Wed May 21 11:43:10 2014 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,62 +0,0 @@ -/* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde - * Software engineering by Intevation GmbH - * - * This file is Free Software under the GNU AGPL (>=v3) - * and comes with ABSOLUTELY NO WARRANTY! Check out the - * documentation coming with Dive4Elements River for details. - */ - -package org.dive4elements.river.artifacts.model.minfo; - -import org.apache.log4j.Logger; - -import org.dive4elements.artifactdatabase.state.Facet; -import org.dive4elements.artifacts.Artifact; -import org.dive4elements.artifacts.CallContext; -import org.dive4elements.river.artifacts.D4EArtifact; -import org.dive4elements.river.artifacts.model.CalculationResult; -import org.dive4elements.river.artifacts.model.DataFacet; -import org.dive4elements.river.artifacts.states.DefaultState.ComputeType; - - -public class BedDiffEpochFacet -extends DataFacet -{ - private static Logger logger = Logger.getLogger(BedDiffEpochFacet.class); - - public BedDiffEpochFacet() { - } - - public BedDiffEpochFacet(int idx, String name, String description, - ComputeType type, String stateId, String hash) { - super(idx, name, description, type, hash, stateId); - this.metaData.put("X", "chart.longitudinal.section.xaxis.label"); - this.metaData.put("Y", "chart.beddifference.height.yaxis.label"); - } - - public Object getData(Artifact artifact, CallContext context) { - logger.debug("Get data for bed density at index: " + index); - - D4EArtifact flys = (D4EArtifact) artifact; - - CalculationResult res = (CalculationResult) flys.compute(context, hash, - stateId, type, false); - - BedDiffEpochResult[] data = - (BedDiffEpochResult[]) res.getData(); - - return data != null && data.length > index ? data[index] : null; - } - - /** Copy deeply. */ - @Override - public Facet deepCopy() { - BedDiffEpochFacet copy = new BedDiffEpochFacet(); - copy.set(this); - copy.type = type; - copy.hash = hash; - copy.stateId = stateId; - return copy; - } -} -// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : diff -r 42076d94977e -r 45cced06490c artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/BedDiffEpochFilterFacet.java --- a/artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/BedDiffEpochFilterFacet.java Wed May 21 11:43:10 2014 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,90 +0,0 @@ -/* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde - * Software engineering by Intevation GmbH - * - * This file is Free Software under the GNU AGPL (>=v3) - * and comes with ABSOLUTELY NO WARRANTY! Check out the - * documentation coming with Dive4Elements River for details. - */ - -package org.dive4elements.river.artifacts.model.minfo; - -import org.apache.log4j.Logger; - -import org.dive4elements.artifactdatabase.state.Facet; -import org.dive4elements.artifacts.Artifact; -import org.dive4elements.artifacts.CallContext; -import org.dive4elements.river.artifacts.D4EArtifact; -import org.dive4elements.river.artifacts.access.RiverAccess; -import org.dive4elements.river.artifacts.context.RiverContext; -import org.dive4elements.river.artifacts.model.CalculationResult; -import org.dive4elements.river.artifacts.model.DataFacet; -import org.dive4elements.river.artifacts.math.MovingAverage; -import org.dive4elements.river.artifacts.model.ZoomScale; -import org.dive4elements.river.artifacts.states.DefaultState.ComputeType; - - -public class BedDiffEpochFilterFacet -extends DataFacet -{ - private static Logger logger = Logger.getLogger(BedDiffEpochFilterFacet.class); - - public BedDiffEpochFilterFacet() { - } - - public BedDiffEpochFilterFacet(int idx, String name, String description, - ComputeType type, String stateId, String hash) { - super(idx, name, description, type, hash, stateId); - this.metaData.put("X", "chart.longitudinal.section.xaxis.label"); - this.metaData.put("Y", "chart.beddifference.height.yaxis.label"); - } - - public Object getData(Artifact artifact, CallContext context) { - logger.debug("Get data for bed density at index: " + index); - - D4EArtifact flys = (D4EArtifact) artifact; - - CalculationResult res = (CalculationResult) flys.compute(context, hash, - stateId, type, false); - - BedDiffEpochResult[] data = - (BedDiffEpochResult[]) res.getData(); // TODO CAST TO SPECIFIC CLASS - Double start = (Double)context.getContextValue("startkm"); - Double end = (Double)context.getContextValue("endkm"); - - if(start != null && end != null) { - RiverContext fc = (RiverContext)context.globalContext(); - ZoomScale scales = (ZoomScale)fc.get("zoomscale"); - RiverAccess access = new RiverAccess((D4EArtifact)artifact); - String river = access.getRiverName(); - - double radius = scales.getRadius(river, start, end); - BedDiffEpochResult oldData = data[index]; - BedDiffEpochResult newData = new BedDiffEpochResult(); - newData.setStart(oldData.getStart()); - newData.setEnd(oldData.getEnd()); - double[][] diffs = MovingAverage.weighted(oldData.getDifferencesData(), radius); - double[][] heights1 = MovingAverage.weighted(oldData.getHeights1Data(), radius); - double[][] heights2 = MovingAverage.weighted(oldData.getHeights2Data(), radius); - for(int j = 0; j < diffs[0].length; j++) { - newData.addKm(diffs[0][j]); - newData.addDifference(diffs[1][j]); - newData.addHeight1(heights1[1][j]); - newData.addHeight2(heights2[1][j]); - } - return newData; - } - return data != null && data.length > index ? data[index] : null; - } - - /** Copy deeply. */ - @Override - public Facet deepCopy() { - BedDiffEpochFilterFacet copy = new BedDiffEpochFilterFacet(); - copy.set(this); - copy.type = type; - copy.hash = hash; - copy.stateId = stateId; - return copy; - } -} -// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : diff -r 42076d94977e -r 45cced06490c artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/BedDiffEpochResult.java --- a/artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/BedDiffEpochResult.java Wed May 21 11:43:10 2014 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,55 +0,0 @@ -/* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde - * Software engineering by Intevation GmbH - * - * This file is Free Software under the GNU AGPL (>=v3) - * and comes with ABSOLUTELY NO WARRANTY! Check out the - * documentation coming with Dive4Elements River for details. - */ - -package org.dive4elements.river.artifacts.model.minfo; - -import java.util.Date; - -import gnu.trove.TDoubleArrayList; - - -public class BedDiffEpochResult -extends BedDifferencesResult -{ - - protected Date start; - protected Date end; - - public BedDiffEpochResult () { - super(); - } - - public BedDiffEpochResult ( - TDoubleArrayList kms, - TDoubleArrayList differences, - TDoubleArrayList heights1, - TDoubleArrayList heights2, - Date start, - Date end - ) { - super(kms, differences, heights1, heights2); - this.start = start; - this.end = end; - } - - public Date getStart() { - return this.start; - } - - public void setStart(Date value) { - this.start = value; - } - - public void setEnd(Date value) { - this.end = value; - } - - public Date getEnd() { - return this.end; - } -} diff -r 42076d94977e -r 45cced06490c artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/BedDiffYearResult.java --- a/artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/BedDiffYearResult.java Wed May 21 11:43:10 2014 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/BedDiffYearResult.java Mon Jun 30 11:29:45 2014 +0200 @@ -159,5 +159,10 @@ bedHeights.toNativeArray() }; } + + @Override + public String getDiffDescription() { + return nameFirst + " - " + nameSecond; + } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : diff -r 42076d94977e -r 45cced06490c artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/BedDifferenceJRDataSource.java --- a/artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/BedDifferenceJRDataSource.java Wed May 21 11:43:10 2014 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/BedDifferenceJRDataSource.java Mon Jun 30 11:29:45 2014 +0200 @@ -11,8 +11,6 @@ import java.util.ArrayList; import java.util.HashMap; -import org.apache.log4j.Logger; - import net.sf.jasperreports.engine.JRDataSource; import net.sf.jasperreports.engine.JRException; import net.sf.jasperreports.engine.JRField; @@ -23,9 +21,6 @@ */ public class BedDifferenceJRDataSource implements JRDataSource { - /** The logger used in this exporter.*/ - private static Logger logger = Logger.getLogger(BedDifferenceJRDataSource.class); - private ArrayList data; private HashMap metaData; @@ -58,21 +53,42 @@ else if ("calculation".equals(fieldName)) { value = metaData.get("calculation"); } - else if ("ye_mode".equals(fieldName)) { - value = metaData.get("ye_mode"); - } else if ("date".equals(fieldName)) { value = metaData.get("date"); } else if ("differences".equals(fieldName)) { value = metaData.get("differences"); } + else if ("kmheader".equals(fieldName)) { + value = metaData.get("kmheader"); + } + else if ("diffpairheader".equals(fieldName)) { + value = metaData.get("diffpairheader"); + } + else if ("diffheader".equals(fieldName)) { + value = metaData.get("diffheader"); + } + else if ("morph1header".equals(fieldName)) { + value = metaData.get("morph1header"); + } + else if ("morph2header".equals(fieldName)) { + value = metaData.get("morph2header"); + } else if ("km".equals(fieldName)) { value = data.get(index)[0]; } - else if ("meter".equals(fieldName)) { + else if ("diffpair".equals(fieldName)) { value = data.get(index)[1]; } + else if ("diff".equals(fieldName)) { + value = data.get(index)[2]; + } + else if ("morph1".equals(fieldName)) { + value = data.get(index)[3]; + } + else if ("morph2".equals(fieldName)) { + value = data.get(index)[4]; + } return value; } } diff -r 42076d94977e -r 45cced06490c artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/BedDifferencesResult.java --- a/artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/BedDifferencesResult.java Wed May 21 11:43:10 2014 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/BedDifferencesResult.java Mon Jun 30 11:29:45 2014 +0200 @@ -13,8 +13,8 @@ import java.io.Serializable; -public class BedDifferencesResult -implements Serializable +public abstract class BedDifferencesResult +implements Serializable { protected TDoubleArrayList kms; @@ -93,4 +93,6 @@ height2.toNativeArray() }; } + + public abstract String getDiffDescription(); } diff -r 42076d94977e -r 45cced06490c artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/BedHeightEpochData.java --- a/artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/BedHeightEpochData.java Wed May 21 11:43:10 2014 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,50 +0,0 @@ -/* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde - * Software engineering by Intevation GmbH - * - * This file is Free Software under the GNU AGPL (>=v3) - * and comes with ABSOLUTELY NO WARRANTY! Check out the - * documentation coming with Dive4Elements River for details. - */ - -package org.dive4elements.river.artifacts.model.minfo; - -import java.util.Date; - - -public class BedHeightEpochData -extends BedHeightData -{ - - protected Date start; - protected Date end; - - public BedHeightEpochData() { - this.start = new Date(); - this.end = new Date(); - } - - public BedHeightEpochData(String name) { - super(name); - this.start = new Date(); - this.end = new Date(); - } - - public void add( - double value, - double station, - Date start, - Date end - ) { - super.add(value, station); - this.start = start; - this.end = end; - } - - public Date getStart() { - return start; - } - - public Date getEnd() { - return end; - } -} diff -r 42076d94977e -r 45cced06490c artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/BedHeightFactory.java --- a/artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/BedHeightFactory.java Wed May 21 11:43:10 2014 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/BedHeightFactory.java Mon Jun 30 11:29:45 2014 +0200 @@ -40,26 +40,11 @@ " ORDER BY bhsv.station"; - /** Query to get name for wst_id and column_pos. */ - public static final String SQL_SELECT_EPOCH = - "SELECT bv.height, bv.station, ti.start_time, ti.stop_time" + - " FROM bed_height_epoch b" + - " JOIN bed_height_epoch_values bv ON b.id = bv.bed_height_epoch_id" + - " JOIN time_intervals ti ON b.time_interval_id = ti.id" + - " WHERE b.id = :height_id" + - " ORDER BY bhsv.station"; - /** Query to get name (description) for wst_id. */ public static final String SQL_SELECT_DESCR_SINGLE = "SELECT description FROM bed_height_single "+ "WHERE id = :height_id"; - /** Query to get name (description) for wst_id. */ - public static final String SQL_SELECT_DESCR_EPOCH = - "SELECT description from bed_height_epoch "+ - "WHERE id = :height_id"; - - private BedHeightFactory() { } @@ -108,11 +93,6 @@ .addScalar("description", StandardBasicTypes.STRING); nameQuery.setInteger("height_id", height_id); } - else if (type.equals("epoch")) { - nameQuery = session.createSQLQuery(SQL_SELECT_DESCR_EPOCH) - .addScalar("description", StandardBasicTypes.STRING); - nameQuery.setInteger("height_id", height_id); - } else { return "none"; } @@ -165,26 +145,6 @@ } return height; } - else if (type.equals("epoch")) { - BedHeightEpochData height = - new BedHeightEpochData(getHeightName(type, height_id)); - sqlQuery = session.createSQLQuery(SQL_SELECT_EPOCH) - .addScalar("height", StandardBasicTypes.DOUBLE) - .addScalar("station", StandardBasicTypes.DOUBLE) - .addScalar("start_time", StandardBasicTypes.DATE) - .addScalar("stop_time", StandardBasicTypes.DATE); - sqlQuery.setInteger("height_id", height_id); - List results = sqlQuery.list(); - - for (Object [] row: results) { - height.add( - (Double) row[0], - (Double) row[1], - (Date) row[2], - (Date) row[3]); - } - return height; - } return new BedHeightData(); } } diff -r 42076d94977e -r 45cced06490c artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/PorosityFacet.java --- a/artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/PorosityFacet.java Wed May 21 11:43:10 2014 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/PorosityFacet.java Mon Jun 30 11:29:45 2014 +0200 @@ -78,14 +78,22 @@ String code = D4EArtifact.getDatacageIDValue(data); + String[] split = code.split(";"); + String id = split[0]; + String desc = ""; + if (split.length >= 2) { + desc = split[1]; + } + if (code != null) { this.name = NAME; this.description = Resources.getMsg( callMeta, "facet.porosity", - "Porosity"); + "Porosity", + new Object[] { desc }); D4EArtifact d4e = (D4EArtifact) artifact; - d4e.addStringData("porosity_id", code); + d4e.addStringData("porosity_id", id); } } } diff -r 42076d94977e -r 45cced06490c artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/SedimentLoadCalculation.java --- a/artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/SedimentLoadCalculation.java Wed May 21 11:43:10 2014 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/SedimentLoadCalculation.java Mon Jun 30 11:29:45 2014 +0200 @@ -220,7 +220,7 @@ */ private SedimentLoadResult calculateEpoch(int i) { List epochLoads = new ArrayList(); - for (int j = epoch[i][0]; j < epoch[i][1]; j++) { + for (int j = epoch[i][0]; j <= epoch[i][1]; j++) { epochLoads.add(SedimentLoadFactory.getLoadWithData( this.river, this.yearEpoch, diff -r 42076d94977e -r 45cced06490c artifacts/src/main/java/org/dive4elements/river/artifacts/states/SoundingsSelect.java --- a/artifacts/src/main/java/org/dive4elements/river/artifacts/states/SoundingsSelect.java Wed May 21 11:43:10 2014 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/states/SoundingsSelect.java Mon Jun 30 11:29:45 2014 +0200 @@ -21,7 +21,6 @@ import org.dive4elements.artifacts.common.utils.XMLUtils; import org.dive4elements.artifacts.common.utils.XMLUtils.ElementCreator; -import org.dive4elements.river.model.BedHeightEpoch; import org.dive4elements.river.model.BedHeightSingle; import org.dive4elements.river.model.River; @@ -38,8 +37,6 @@ public static final String PREFIX_SINGLE = "single-"; - public static final String PREFIX_EPOCH = "epoch-"; - /** Private logger. */ private static final Logger logger = Logger.getLogger(SoundingsSelect.class); @@ -93,7 +90,6 @@ List> kvp = new ArrayList>(); appendSingles(river, kmLo, kmHi, creator, select, context); - appendEpochs(river, kmLo, kmHi, creator, select, context); return kvp.toArray(new KVP[kvp.size()]); } @@ -126,13 +122,13 @@ Element item = creator.create("item"); creator.addAttr(item, "label", value, true); creator.addAttr(item, "value", id, true); - creator.addAttr(item, "year", - year != null ? s.getYear().toString() : ""); - creator.addAttr(item, "type", s.getType().getName()); - creator.addAttr(item, "range", + creator.addAttr(item, "analyzed_range", nf.format(s.getRange().getA()) + " - " + nf.format(s.getRange().getB())); + creator.addAttr(item, "year", + year != null ? s.getYear().toString() : ""); + creator.addAttr(item, "minfo_type", s.getType().getName()); select.appendChild(item); } } @@ -140,44 +136,6 @@ logger.debug(XMLUtils.toString(select)); } - - protected void appendEpochs( - River river, - double kmLo, - double kmHi, - ElementCreator creator, - Element select, - CallContext context - ) { - List epochs = - BedHeightEpoch.getBedHeightEpochs(river, kmLo, kmHi); - - if (epochs != null) { - int size = epochs.size(); - - logger.debug("Found " + size + " epochs."); - - NumberFormat nf = Formatter.getCalculationKm(context.getMeta()); - for (int i = 0; i < size; i++) { - BedHeightEpoch e = epochs.get(i); - - String id = PREFIX_EPOCH + e.getId(); - String value = e.getDescription(); - - Element item = creator.create("item"); - creator.addAttr(item, "label", value, true); - creator.addAttr(item, "value", id, true); - creator.addAttr(item, "year", e.getTimeInterval().getStartTime().toString()); - creator.addAttr(item, "range", - nf.format(e.getRange().getA()) + - " - " + - nf.format(e.getRange().getB())); - select.appendChild(item); - } - } - logger.debug("appended epochs"); - } - @Override protected Element createStaticData( D4EArtifact flys, @@ -220,10 +178,6 @@ if (value.indexOf(PREFIX_SINGLE) >= 0) { return getLabelForSingle(cc, value); } - else if (value.indexOf(PREFIX_EPOCH) >= 0) { - return getLabelForEpoch(cc, value); - } - return value; } @@ -249,27 +203,6 @@ } - protected String getLabelForEpoch(CallContext cc, String value) { - String id = value.replace(PREFIX_EPOCH, ""); - try { - BedHeightEpoch e = BedHeightEpoch.getBedHeightEpochById( - Integer.parseInt(id)); - - if (e != null) { - return e.getDescription(); - } - else { - return "no value for '" + id + "'"; - } - } - catch (NumberFormatException nfe) { - logger.warn("Could not parse id from string '" + id + "'", nfe); - } - - return "n.A."; - } - - /** * This method might be used to test, if a parameter name is handled by this * state. diff -r 42076d94977e -r 45cced06490c artifacts/src/main/java/org/dive4elements/river/artifacts/states/minfo/DifferenceSelect.java --- a/artifacts/src/main/java/org/dive4elements/river/artifacts/states/minfo/DifferenceSelect.java Wed May 21 11:43:10 2014 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/states/minfo/DifferenceSelect.java Mon Jun 30 11:29:45 2014 +0200 @@ -55,23 +55,6 @@ return ""; } - @Override - protected Element[] createItems( - XMLUtils.ElementCreator ec, - Artifact artifact, - String name, - CallContext context) - { - Element[] elements = new Element[1]; - BedHeightAccess bha = new BedHeightAccess((D4EArtifact)artifact); - String time = bha.getYearEpoch(); - elements[0] = createItem( - ec, - new String[] {"year-epoch", time}); - - return elements; - } - /** * Creates the data element used for the static part of DESCRIBE document. */ diff -r 42076d94977e -r 45cced06490c artifacts/src/main/java/org/dive4elements/river/artifacts/states/minfo/DifferencesState.java --- a/artifacts/src/main/java/org/dive4elements/river/artifacts/states/minfo/DifferencesState.java Wed May 21 11:43:10 2014 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/states/minfo/DifferencesState.java Mon Jun 30 11:29:45 2014 +0200 @@ -25,9 +25,6 @@ import org.dive4elements.river.artifacts.model.DataFacet; import org.dive4elements.river.artifacts.model.FacetTypes; import org.dive4elements.river.artifacts.model.minfo.BedDiffCalculation; -import org.dive4elements.river.artifacts.model.minfo.BedDiffEpochFacet; -import org.dive4elements.river.artifacts.model.minfo.BedDiffEpochFilterFacet; -import org.dive4elements.river.artifacts.model.minfo.BedDiffEpochResult; import org.dive4elements.river.artifacts.model.minfo.BedDiffYearFacet; import org.dive4elements.river.artifacts.model.minfo.BedDiffYearFilterFacet; import org.dive4elements.river.artifacts.model.minfo.BedDiffYearResult; @@ -47,7 +44,6 @@ /** The logger used in this class. */ private static Logger logger = Logger.getLogger(DifferencesState.class); public static final String I18N_DIFF_YEAR = "beddifference.year"; - public static final String I18N_DIFF_EPOCH = "beddifference.epoch"; public static final String I18N_FACET_BED_DIFF_YEAR = "facet.bedheight.diff.year"; public static final String I18N_FACET_BED_DIFF_YEAR_RAW = "facet.bedheight.diff.year.raw"; @@ -56,8 +52,6 @@ public static final String I18N_FACET_BED_DIFF_SOUNDING = "facet.bedheight.diff.sounding"; public static final String I18N_FACET_BED_DIFF_MORPH1 = "facet.bedheight.diff.morph1"; public static final String I18N_FACET_BED_DIFF_MORPH2 = "facet.bedheight.diff.morph2"; - public static final String I18N_FACET_BED_DIFF_EPOCH = "facet.bedheight.diff.epoch"; - public static final String I18N_FACET_BED_DIFF_EPOCH_RAW = "facet.bedheight.diff.epoch.raw"; public static final String I18N_FACET_BED_DIFF_HEIGHT1 = "facet.bedheight.diff.height1"; public static final String I18N_FACET_BED_DIFF_HEIGHT1_RAW = "facet.bedheight.diff.height1.raw"; public static final String I18N_FACET_BED_DIFF_HEIGHT2 = "facet.bedheight.diff.height2"; @@ -224,72 +218,6 @@ stateId, hash)); } - if (results[idx] instanceof BedDiffEpochResult) { - newFacets.add(new BedDiffEpochFacet( - idx, - BED_DIFFERENCE_EPOCH, - createBedDiffEpochDescription( - meta, - (BedDiffEpochResult)results[idx], - true), - ComputeType.ADVANCE, - stateId, - hash)); - newFacets.add(new BedDiffEpochFacet( - idx, - BED_DIFFERENCE_EPOCH_HEIGHT1, - createBedDiffHeightEpochDescription( - meta, - (BedDiffEpochResult)results[idx], - 0, - true), - ComputeType.ADVANCE, - stateId, - hash)); - newFacets.add(new BedDiffEpochFacet( - idx, - BED_DIFFERENCE_EPOCH_HEIGHT2, - createBedDiffHeightEpochDescription( - meta, - (BedDiffEpochResult)results[idx], - 1, - true), - ComputeType.ADVANCE, - stateId, - hash)); - newFacets.add(new BedDiffEpochFilterFacet( - idx, - BED_DIFFERENCE_EPOCH_FILTERED, - createBedDiffEpochDescription( - meta, - (BedDiffEpochResult)results[idx], - false), - ComputeType.ADVANCE, - stateId, - hash)); - newFacets.add(new BedDiffEpochFilterFacet( - idx, - BED_DIFFERENCE_EPOCH_HEIGHT1_FILTERED, - createBedDiffHeightEpochDescription( - meta, - (BedDiffEpochResult)results[idx], - 0, - false), - ComputeType.ADVANCE, - stateId, - hash)); - newFacets.add(new BedDiffEpochFilterFacet( - idx, - BED_DIFFERENCE_EPOCH_HEIGHT2_FILTERED, - createBedDiffHeightEpochDescription( - meta, - (BedDiffEpochResult)results[idx], - 1, - false), - ComputeType.ADVANCE, - stateId, - hash)); - } } } @@ -315,34 +243,6 @@ } } - private String createBedDiffHeightEpochDescription( - CallMeta meta, - BedDiffEpochResult result, - int ndx, - boolean raw - ) { - DateFormat df = Formatter.getDateFormatter(meta, "yyyy"); - String range = - df.format(result.getStart()) - + " - " + - df.format(result.getEnd()); - - String i18nHeight1 = I18N_FACET_BED_DIFF_HEIGHT1; - String i18nHeight2 = I18N_FACET_BED_DIFF_HEIGHT2; - if (raw) { - i18nHeight1 = I18N_FACET_BED_DIFF_HEIGHT1_RAW; - i18nHeight2 = I18N_FACET_BED_DIFF_HEIGHT2_RAW; - } - if (ndx == 0) { - return Resources.getMsg(meta, i18nHeight1, - i18nHeight1, new Object[] { range }); - } - else { - return Resources.getMsg(meta, i18nHeight2, - i18nHeight2, new Object[] {range}); - } - } - protected String createBedDiffYearDescription( CallMeta meta, BedDiffYearResult result, @@ -389,23 +289,6 @@ return Resources.getMsg(meta, i18n, i18n, new Object[] { range }); } - protected String createBedDiffEpochDescription( - CallMeta meta, - BedDiffEpochResult result, - boolean raw) { - DateFormat df = Formatter.getDateFormatter(meta, "yyyy"); - String range = - df.format(result.getStart()) - + " - " + - df.format(result.getEnd()); - - String i18n = I18N_FACET_BED_DIFF_EPOCH; - if (raw) { - i18n = I18N_FACET_BED_DIFF_EPOCH_RAW; - } - return Resources.getMsg(meta, i18n, i18n, new Object[] { range }); - } - static { // Active/deactivate facets. FacetActivity.Registry.getInstance().register( @@ -418,12 +301,7 @@ String output ) { String name = facet.getName(); - if (name.equals(BED_DIFFERENCE_EPOCH) || - name.equals(BED_DIFFERENCE_EPOCH_HEIGHT1) || - name.equals(BED_DIFFERENCE_EPOCH_HEIGHT2) || - name.equals(BED_DIFFERENCE_EPOCH_HEIGHT1_FILTERED) || - name.equals(BED_DIFFERENCE_EPOCH_HEIGHT2_FILTERED) || - name.equals(BED_DIFFERENCE_HEIGHT_YEAR) || + if (name.equals(BED_DIFFERENCE_HEIGHT_YEAR) || name.equals(BED_DIFFERENCE_YEAR) || name.equals(BED_DIFFERENCE_YEAR_HEIGHT1) || name.equals(BED_DIFFERENCE_YEAR_HEIGHT2) || @@ -432,7 +310,6 @@ return Boolean.FALSE; } else if (name.equals(BED_DIFFERENCE_SOUNDING_WIDTH) || - name.equals(BED_DIFFERENCE_EPOCH_FILTERED) || name.equals(BED_DIFFERENCE_HEIGHT_YEAR_FILTERED) || name.equals(BED_DIFFERENCE_YEAR_FILTERED)) { return Boolean.TRUE; diff -r 42076d94977e -r 45cced06490c artifacts/src/main/java/org/dive4elements/river/artifacts/states/minfo/SedimentLoadCalculate.java --- a/artifacts/src/main/java/org/dive4elements/river/artifacts/states/minfo/SedimentLoadCalculate.java Wed May 21 11:43:10 2014 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/states/minfo/SedimentLoadCalculate.java Mon Jun 30 11:29:45 2014 +0200 @@ -32,7 +32,7 @@ import org.dive4elements.river.artifacts.model.minfo.SedimentLoadUnknownFacet; import org.dive4elements.river.artifacts.resources.Resources; import org.dive4elements.river.artifacts.states.DefaultState; -import org.dive4elements.river.utils.DateGuesser; +import org.dive4elements.river.utils.DateUtil; /** State in which Sediment Load(s) are calculated/retrieved. */ public class SedimentLoadCalculate @@ -103,9 +103,9 @@ for (int[] date: dates) { try { Date s = - DateGuesser.guessDate(String.valueOf(date[0])); + DateUtil.getStartDateFromYear(date[0]); Date e = - DateGuesser.guessDate(String.valueOf(date[1])); + DateUtil.getEndDateFromYear(date[1]); if (!(s.after(load.getEnd()) || e.before(load.getStart()))) { return Boolean.TRUE; diff -r 42076d94977e -r 45cced06490c artifacts/src/main/java/org/dive4elements/river/exports/AbstractExporter.java --- a/artifacts/src/main/java/org/dive4elements/river/exports/AbstractExporter.java Wed May 21 11:43:10 2014 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/exports/AbstractExporter.java Mon Jun 30 11:29:45 2014 +0200 @@ -62,6 +62,8 @@ /** The default separator for the CSV export. */ public static final char DEFAULT_CSV_SEPARATOR = ';'; + public static final String START_META_CHAR = "#"; + /** XPath that points to the desired export facet. */ public static final String XPATH_FACET = "/art:action/@art:type"; @@ -103,6 +105,25 @@ /** + * Write lines of informative content to CSV file. + * Usually this will be done above the column headers from within + * the implementation of writeCSVData in concret subclasses. + * + * @param writer The CSVWriter + * @param infolines Array of Strings with informative content. + * Each will be written to a separate line prefixed with START_META_CHAR. + */ + protected void writeCSVInfo(CSVWriter writer, String[] infolines) { + String[] metaline = new String[1]; + + for (String infoline: infolines) { + metaline[0] = START_META_CHAR + " " + infoline; + writer.writeNext(metaline); + } + + } + + /** * Concrete subclasses need to use this method to write their special data * objects into the PDF document. */ @@ -263,6 +284,9 @@ request, XPATH_FACET, ArtifactNamespaceContext.INSTANCE); } + protected String msg(String key) { + return Resources.getMsg(context.getMeta(), key, key); + } protected String msg(String key, String def) { return Resources.getMsg(context.getMeta(), key, def); diff -r 42076d94977e -r 45cced06490c artifacts/src/main/java/org/dive4elements/river/exports/ChartGenerator2.java --- a/artifacts/src/main/java/org/dive4elements/river/exports/ChartGenerator2.java Wed May 21 11:43:10 2014 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/exports/ChartGenerator2.java Mon Jun 30 11:29:45 2014 +0200 @@ -686,11 +686,8 @@ if (chartSettings != null) { String subTitle = getChartSubtitle(chartSettings); - String defSubTitle = getDefaultChartSubtitle(); - if (defSubTitle != null && - !defSubTitle.isEmpty() && - !subTitle.equals(defSubTitle)) { - return defSubTitle; + if (subTitle == null) { + return getDefaultChartSubtitle(); } else { return subTitle; diff -r 42076d94977e -r 45cced06490c artifacts/src/main/java/org/dive4elements/river/exports/DiagramGenerator.java --- a/artifacts/src/main/java/org/dive4elements/river/exports/DiagramGenerator.java Wed May 21 11:43:10 2014 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/exports/DiagramGenerator.java Mon Jun 30 11:29:45 2014 +0200 @@ -1047,15 +1047,27 @@ @Override public String getDefaultChartSubtitle() { String parts = ""; + DiagramAttributes.Title dTitle = diagramAttributes.getSubtitle(); + if (dTitle == null && + (subTitleParts == null || subTitleParts.isEmpty())) { + /* Subtitle is optional */ + return null; + } if (subTitleParts != null && !subTitleParts.isEmpty()) { + boolean first = true; + if (dTitle != null) { + first = false; + } for (String p : subTitleParts) { - parts += ", " + p; + if (!first) { + parts += ", "; + } + parts += p; + first = false; } } - DiagramAttributes.Title dTitle = diagramAttributes.getSubtitle(); - if (dTitle == null) { - /* Subtitle is optional */ - return null; + if (dTitle == null && parts.length() > 0) { + return parts; } return dTitle.evaluate((D4EArtifact)getMaster(), context) + parts; } diff -r 42076d94977e -r 45cced06490c artifacts/src/main/java/org/dive4elements/river/exports/DischargeCurveGenerator.java --- a/artifacts/src/main/java/org/dive4elements/river/exports/DischargeCurveGenerator.java Wed May 21 11:43:10 2014 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/exports/DischargeCurveGenerator.java Mon Jun 30 11:29:45 2014 +0200 @@ -374,7 +374,7 @@ * (in imported data they are set to -1 symbolically). * Return false if data is null or empty */ - private boolean hasNoDischarge(double[][] data) { + private static boolean hasNoDischarge(double[][] data) { if (data == null || data.length == 0) { return false; } diff -r 42076d94977e -r 45cced06490c artifacts/src/main/java/org/dive4elements/river/exports/HistoricalDischargeCurveGenerator.java --- a/artifacts/src/main/java/org/dive4elements/river/exports/HistoricalDischargeCurveGenerator.java Wed May 21 11:43:10 2014 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/exports/HistoricalDischargeCurveGenerator.java Mon Jun 30 11:29:45 2014 +0200 @@ -158,8 +158,14 @@ artifactFacet.getFacetDescription(), theme, visible); } else if (FacetTypes.IS.MANUALPOINTS(name)) { + HistoricalDischargeAccess.EvaluationMode mode = + new HistoricalDischargeAccess((D4EArtifact)getMaster()).getEvaluationMode(); + int axis = mode == HistoricalDischargeAccess.EvaluationMode.W + ? YAXIS.Q.idx + : YAXIS.W.idx; + doPoints(artifactFacet.getData(context), artifactFacet, theme, - visible, YAXIS.Q.idx); + visible, axis); } else { logger.warn("doOut(): unknown facet name: " + name); diff -r 42076d94977e -r 45cced06490c artifacts/src/main/java/org/dive4elements/river/exports/LongitudinalSectionGenerator2.java --- a/artifacts/src/main/java/org/dive4elements/river/exports/LongitudinalSectionGenerator2.java Wed May 21 11:43:10 2014 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/exports/LongitudinalSectionGenerator2.java Mon Jun 30 11:29:45 2014 +0200 @@ -63,22 +63,29 @@ * actually does the output and accesses the facet data. */ D4EArtifact artifact = (D4EArtifact)bundle.getArtifact(); - + if (context.getContextValue("bounds_defined") != null && + (Boolean)context.getContextValue("bounds_defined")) { + super.doOut(bundle, theme, visible); + return; + } if (getXBounds(0) != null && getDomainAxisRange() != null) { Bounds bounds = calculateZoom(getXBounds(0), getDomainAxisRange()); context.putContextValue("startkm", bounds.getLower()); context.putContextValue("endkm", bounds.getUpper()); + context.putContextValue("bounds_defined", true); } else if (getXBounds(0) != null && getDomainAxisRange() == null) { context.putContextValue("startkm", getXBounds(0).getLower()); context.putContextValue("endkm", getXBounds(0).getUpper()); + context.putContextValue("bounds_defined", true); } else if (getXBounds(0) == null && getDomainAxisRange() == null) { RangeAccess access = new RangeAccess(artifact); if (access.hasFrom() && access.hasTo()) { context.putContextValue("startkm", access.getFrom()); context.putContextValue("endkm", access.getTo()); + context.putContextValue("bounds_defined", true); } } else if (getXBounds(0) == null && getDomainAxisRange() != null){ @@ -89,6 +96,7 @@ calculateZoom(b, getDomainAxisRange()); context.putContextValue("startkm", bounds.getLower()); context.putContextValue("endkm", bounds.getUpper()); + context.putContextValue("bounds_defined", true); } } super.doOut(bundle, theme, visible); diff -r 42076d94977e -r 45cced06490c artifacts/src/main/java/org/dive4elements/river/exports/TimeseriesChartGenerator.java --- a/artifacts/src/main/java/org/dive4elements/river/exports/TimeseriesChartGenerator.java Wed May 21 11:43:10 2014 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/exports/TimeseriesChartGenerator.java Mon Jun 30 11:29:45 2014 +0200 @@ -46,7 +46,7 @@ import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer; import org.jfree.data.Range; import org.jfree.data.general.Series; -import org.jfree.data.time.Day; +import org.jfree.data.time.FixedMillisecond; import org.jfree.data.time.TimeSeries; import org.jfree.data.time.TimeSeriesCollection; import org.jfree.data.xy.XYDataset; @@ -634,7 +634,7 @@ // Add text annotations for single points. List xy = new ArrayList(); - HashMap names = new HashMap(); + HashMap names = new HashMap(); try { JSONArray points = new JSONArray((String) o); @@ -649,8 +649,12 @@ } Date date = decodeXAxisValue(array); + long ms = date.getTime(); - Day day = new Day(date); + FixedMillisecond day = new FixedMillisecond(ms); + while (names.containsKey(day)) { + day = new FixedMillisecond(++ms); + } series.add(day, y, false); names.put(day, name); } diff -r 42076d94977e -r 45cced06490c artifacts/src/main/java/org/dive4elements/river/exports/minfo/BedDiffEpochInfoGenerator.java --- a/artifacts/src/main/java/org/dive4elements/river/exports/minfo/BedDiffEpochInfoGenerator.java Wed May 21 11:43:10 2014 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,20 +0,0 @@ -/* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde - * Software engineering by Intevation GmbH - * - * This file is Free Software under the GNU AGPL (>=v3) - * and comes with ABSOLUTELY NO WARRANTY! Check out the - * documentation coming with Dive4Elements River for details. - */ - -package org.dive4elements.river.exports.minfo; - -import org.dive4elements.river.exports.ChartInfoGenerator; - - -public class BedDiffEpochInfoGenerator -extends ChartInfoGenerator -{ - public BedDiffEpochInfoGenerator() { - super(new BedDifferenceEpochGenerator()); - } -} diff -r 42076d94977e -r 45cced06490c artifacts/src/main/java/org/dive4elements/river/exports/minfo/BedDifferenceEpochGenerator.java --- a/artifacts/src/main/java/org/dive4elements/river/exports/minfo/BedDifferenceEpochGenerator.java Wed May 21 11:43:10 2014 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,269 +0,0 @@ -/* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde - * Software engineering by Intevation GmbH - * - * This file is Free Software under the GNU AGPL (>=v3) - * and comes with ABSOLUTELY NO WARRANTY! Check out the - * documentation coming with Dive4Elements River for details. - */ - -package org.dive4elements.river.exports.minfo; - -import org.apache.log4j.Logger; -import org.jfree.data.xy.XYSeries; - -import org.dive4elements.artifactdatabase.state.ArtifactAndFacet; -import org.dive4elements.artifactdatabase.state.Facet; -import org.dive4elements.river.artifacts.D4EArtifact; -import org.dive4elements.river.artifacts.access.FlowVelocityAccess; -import org.dive4elements.river.artifacts.model.FacetTypes; -import org.dive4elements.river.artifacts.model.WKms; -import org.dive4elements.river.artifacts.model.minfo.BedDiffEpochResult; -import org.dive4elements.river.exports.StyledSeriesBuilder; -import org.dive4elements.river.exports.fixings.FixChartGenerator; -import org.dive4elements.river.exports.process.KMIndexProcessor; -import org.dive4elements.river.exports.process.Processor; -import org.dive4elements.river.exports.process.WOutProcessor; -import org.dive4elements.river.jfree.Bounds; -import org.dive4elements.river.jfree.DoubleBounds; -import org.dive4elements.river.jfree.RiverAnnotation; -import org.dive4elements.river.jfree.StyledXYSeries; -import org.dive4elements.river.themes.ThemeDocument; -import org.dive4elements.river.utils.RiverUtils; - - -public class BedDifferenceEpochGenerator -extends FixChartGenerator -implements FacetTypes -{ - public enum YAXIS { - D(0), H(1), dW(2), W(3); - - protected int idx; - - private YAXIS(int c) { - idx = c; - } - } - - /** The logger that is used in this generator. */ - private static Logger logger = Logger.getLogger(BedDifferenceEpochGenerator.class); - - public static final String I18N_CHART_TITLE = "chart.beddifference.epoch.title"; - public static final String I18N_XAXIS_LABEL = "chart.beddifference.xaxis.label"; - public static final String I18N_YAXIS_LABEL = "chart.beddifference.yaxis.label.diff"; - public static final String I18N_SECOND_YAXIS_LABEL = "chart.beddifference.yaxis.label.height"; - - public static final String I18N_CHART_TITLE_DEFAULT = "Sohlenhöhen Differenz"; - public static final String I18N_XAXIS_LABEL_DEFAULT = "Fluss-Km"; - public static final String I18N_YAXIS_LABEL_DEFAULT = "delta S [m]"; - public static final String I18N_SECOND_YAXIS_LABEL_DEFAULT = "Höhe [m]"; - public static final String I18N_DW_YAXIS_LABEL_DEFAULT = - "delta W [cm]"; - public static final String I18N_DW_YAXIS_LABEL = - "chart.fixings.longitudinalsection.yaxis.label"; - - private static final String I18N_W_YAXIS_LABEL = - "chart.longitudinal.section.yaxis.label"; - private static final String I18N_W_YAXIS_LABEL_DEFAULT = "W [NN + m]"; - - - @Override - protected YAxisWalker getYAxisWalker() { - return new YAxisWalker() { - - @Override - public int length() { - return YAXIS.values().length; - } - - @Override - public String getId(int idx) { - YAXIS[] yaxes = YAXIS.values(); - return yaxes[idx].toString(); - } - }; - } - - @Override - public void doOut(ArtifactAndFacet bundle, ThemeDocument attr, boolean visible) { - String name = bundle.getFacetName(); - - logger.debug("doOut: " + name); - - if (name == null) { - logger.error("No facet name for doOut(). No output generated!"); - return; - } - - Facet facet = bundle.getFacet(); - - if (facet == null) { - return; - } - - setContextBoundsEpoch(bundle); - - Processor processor = new KMIndexProcessor(); - Processor woutp = new WOutProcessor(); - if (name.equals(BED_DIFFERENCE_EPOCH)) { - doBedDifferenceEpochOut( - (BedDiffEpochResult) bundle.getData(context), - bundle, attr, visible); - } - else if (name.equals(BED_DIFFERENCE_EPOCH_HEIGHT1)) { - doBedDifferenceHeightsOut((BedDiffEpochResult)bundle.getData(context), - bundle, attr, visible, 0); - } - else if (name.equals(BED_DIFFERENCE_EPOCH_HEIGHT2)) { - doBedDifferenceHeightsOut((BedDiffEpochResult)bundle.getData(context), - bundle, attr, visible, 1); - } - else if (name.equals(BED_DIFFERENCE_EPOCH_FILTERED)) { - doBedDifferenceEpochOut( - (BedDiffEpochResult) bundle.getData(context), - bundle, attr, visible); - } - else if (name.equals(BED_DIFFERENCE_EPOCH_HEIGHT1_FILTERED)) { - doBedDifferenceHeightsOut((BedDiffEpochResult)bundle.getData(context), - bundle, attr, visible, 0); - } - else if (name.equals(BED_DIFFERENCE_EPOCH_HEIGHT2_FILTERED)) { - doBedDifferenceHeightsOut((BedDiffEpochResult)bundle.getData(context), - bundle, attr, visible, 1); - } - else if (processor.canHandle(name)) { - processor.doOut(this, bundle, attr, visible, YAXIS.dW.idx); - } - else if (woutp.canHandle(name)) { - woutp.doOut(this, bundle, attr, visible, YAXIS.W.idx); - } - else if (name.equals(W_DIFFERENCES)) { - doWDifferencesOut( - (WKms) bundle.getData(context), - bundle, - attr, - visible); - } - else if (name.equals(LONGITUDINAL_ANNOTATION)) { - doAnnotations( - (RiverAnnotation) bundle.getData(context), - bundle, - attr, - visible); - } - else { - logger.warn("Unknown facet name " + name); - } - } - - protected void setContextBoundsEpoch(ArtifactAndFacet bundle) { - if (getXBounds(0) != null && getDomainAxisRange() != null) { - Bounds bounds = - calculateZoom(getXBounds(0), getDomainAxisRange()); - context.putContextValue("startkm", bounds.getLower()); - context.putContextValue("endkm", bounds.getUpper()); - } - else if (getXBounds(0) != null && getDomainAxisRange() == null) { - context.putContextValue("startkm", getXBounds(0).getLower()); - context.putContextValue("endkm", getXBounds(0).getUpper()); - } - else if (getXBounds(0) == null && getDomainAxisRange() == null) { - D4EArtifact artifact = (D4EArtifact)bundle.getArtifact(); - FlowVelocityAccess access = new FlowVelocityAccess(artifact); - context.putContextValue("startkm", access.getLowerKM()); - context.putContextValue("endkm", access.getUpperKM()); - } - else if (getXBounds(0) == null && getDomainAxisRange() != null){ - D4EArtifact artifact = (D4EArtifact)bundle.getArtifact(); - FlowVelocityAccess access = new FlowVelocityAccess(artifact); - Bounds b = new DoubleBounds(access.getLowerKM(), access.getUpperKM()); - Bounds bounds = - calculateZoom(b, getDomainAxisRange()); - context.putContextValue("startkm", bounds.getLower()); - context.putContextValue("endkm", bounds.getUpper()); - } - } - - @Override - protected String getDefaultChartTitle() { - return msg(I18N_CHART_TITLE, I18N_CHART_TITLE_DEFAULT); - } - - @Override - protected String getDefaultXAxisLabel() { - return msg(I18N_XAXIS_LABEL, - I18N_XAXIS_LABEL_DEFAULT, - new Object[] {getRiverName()}); - } - - @Override - protected String getDefaultYAxisLabel(int pos) { - String label = "default"; - if (pos == YAXIS.D.idx) { - label = msg(I18N_YAXIS_LABEL, I18N_YAXIS_LABEL_DEFAULT); - } - else if (pos == YAXIS.H.idx) { - D4EArtifact flys = (D4EArtifact) master; - label = msg(I18N_SECOND_YAXIS_LABEL, - I18N_SECOND_YAXIS_LABEL_DEFAULT, - new Object[] - { RiverUtils.getRiver(flys).getWstUnit().getName() }); - } - else if (pos == YAXIS.dW.idx) { - return msg(I18N_DW_YAXIS_LABEL, I18N_DW_YAXIS_LABEL_DEFAULT); - } - else if (pos == YAXIS.W.idx) { - return msg(I18N_W_YAXIS_LABEL, I18N_W_YAXIS_LABEL_DEFAULT); - } - return label; - } - - protected void doBedDifferenceEpochOut(BedDiffEpochResult data, - ArtifactAndFacet aandf, ThemeDocument theme, boolean visible) { - - XYSeries series = new StyledXYSeries(aandf.getFacetDescription(), theme); - StyledSeriesBuilder.addPoints(series, data.getDifferencesData(), true); - - addAxisSeries(series, YAXIS.D.idx, visible); - } - - private void doBedDifferenceHeightsOut( - BedDiffEpochResult data, - ArtifactAndFacet bundle, - ThemeDocument attr, - boolean visible, - int idx) { - logger.debug("doBedDifferenceHeightOut()"); - - XYSeries series = new StyledXYSeries(bundle.getFacetDescription(), attr); - if (idx == 0) { - StyledSeriesBuilder.addPoints(series, data.getHeights1Data(), true); - } - else { - StyledSeriesBuilder.addPoints(series, data.getHeights2Data(), true); - } - - addAxisSeries(series, YAXIS.H.idx, visible); - } - - protected void doWDifferencesOut( - WKms wkms, - ArtifactAndFacet aandf, - ThemeDocument theme, - boolean visible - ) { - if (wkms == null) { - logger.warn("No data to add to WDifferencesChart."); - return; - } - - XYSeries series = new StyledXYSeries(aandf.getFacetDescription(), theme); - StyledSeriesBuilder.addPoints(series, wkms); - - addAxisSeries(series, YAXIS.D.idx, visible); - if (wkms.guessWaterIncreasing()) { - setInverted(true); - } - } -} -// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : diff -r 42076d94977e -r 45cced06490c artifacts/src/main/java/org/dive4elements/river/exports/minfo/BedDifferenceExporter.java --- a/artifacts/src/main/java/org/dive4elements/river/exports/minfo/BedDifferenceExporter.java Wed May 21 11:43:10 2014 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/exports/minfo/BedDifferenceExporter.java Mon Jun 30 11:29:45 2014 +0200 @@ -11,7 +11,7 @@ import java.io.IOException; import java.io.OutputStream; import java.text.NumberFormat; -import java.util.LinkedList; +import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.HashMap; @@ -30,6 +30,7 @@ import org.dive4elements.artifacts.CallMeta; import org.dive4elements.river.artifacts.D4EArtifact; import org.dive4elements.river.artifacts.access.BedDifferencesAccess; +import org.dive4elements.river.artifacts.access.RiverAccess; import org.dive4elements.artifacts.common.utils.Config; import org.dive4elements.river.artifacts.resources.Resources; import org.dive4elements.river.artifacts.model.CalculationResult; @@ -38,7 +39,6 @@ import org.dive4elements.river.artifacts.model.minfo.BedDifferenceJRDataSource; import org.dive4elements.river.exports.AbstractExporter; import org.dive4elements.river.utils.Formatter; -import org.dive4elements.river.utils.RiverUtils; import au.com.bytecode.opencsv.CSVWriter; @@ -56,6 +56,9 @@ private static final String CSV_HEADER_DIFF = "export.minfo.beddifference.diff"; + private static final String CSV_HEADER_DIFF_PAIR = + "export.minfo.beddifference.diff.pair"; + private static final String CSV_HEADER_MORPH1 = "export.minfo.beddifference.morph1"; @@ -86,23 +89,29 @@ for (BedDifferencesResult result : results) { if (result instanceof BedDiffYearResult) { BedDiffYearResult yResult = (BedDiffYearResult) result; + String desc = result.getDiffDescription(); double[][] kms = yResult.getDifferencesData(); double[][] morph1 = yResult.getMorphWidth1Data(); double[][] morph2 = yResult.getMorphWidth2Data(); for (int j = 0; j < kms[0].length; j++) { writer.writeNext(new String[] { kmf.format(kms[0][j]), + desc, mf.format(kms[1][j]), mf.format(morph1[1][j]), - mf.format(morph2[1][j])}); + mf.format(morph2[1][j]), + }); } } else { double[][] kms = result.getDifferencesData(); + String desc = result.getDiffDescription(); for (int j = 0; j < kms[0].length; j++) { writer.writeNext(new String[] { kmf.format(kms[0][j]), - mf.format(kms[1][j])}); + desc, + mf.format(kms[1][j]), + }); } } } @@ -128,7 +137,8 @@ D4EArtifact arti = (D4EArtifact) master; - source.addMetaData ("river", RiverUtils.getRivername(arti)); + //source.addMetaData ("river", RiverUtils.getRivername(arti)); + source.addMetaData ("river", new RiverAccess(arti).getRiverName()); Locale locale = Resources.getLocale(meta); DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, locale); @@ -143,22 +153,30 @@ // Now the dynamic parts BedDifferencesAccess access = new BedDifferencesAccess(arti); - source.addMetaData("ye_mode", Resources.getMsg(locale, - "state.minfo." + access.getYearEpoch(), - access.getYearEpoch())); source.addMetaData("differences", StringUtils.join( access.getDifferenceArtifactNamePairs(), "\n")); + + source.addMetaData("kmheader", + msg(CSV_HEADER_KM, "km")); + source.addMetaData("diffpairheader", + msg(CSV_HEADER_DIFF_PAIR, "Difference pair")); + source.addMetaData("diffheader", msg(CSV_HEADER_DIFF, "cm")); + source.addMetaData("morph1header", + msg(CSV_HEADER_MORPH1, "Morph. active width minuend")); + source.addMetaData("morph2header", + msg(CSV_HEADER_MORPH2, "Morph. active width subtrahend")); } protected void writeCSVHeader(CSVWriter writer) { logger.debug("writeCSVHeader()"); - List header = new LinkedList(); + List header = new ArrayList(); if (results != null) { header.add(msg(CSV_HEADER_KM, "km")); - header.add(msg(CSV_HEADER_DIFF, "m")); + header.add(msg(CSV_HEADER_DIFF_PAIR, "difference pair")); + header.add(msg(CSV_HEADER_DIFF, "cm")); if (results.length > 0 && results[0] instanceof BedDiffYearResult) { header.add(msg(CSV_HEADER_MORPH1, "morph width minuend [m]")); @@ -175,10 +193,19 @@ NumberFormat kmf = Formatter.getCalculationKm(context.getMeta()); NumberFormat mf = Formatter.getMeterFormat(context); for (BedDifferencesResult result: results) { + BedDiffYearResult yResult = (BedDiffYearResult) result; double[][] kms = result.getDifferencesData(); + String desc = result.getDiffDescription(); + double[][] morph1 = yResult.getMorphWidth1Data(); + double[][] morph2 = yResult.getMorphWidth2Data(); for (int j = 0; j < kms[0].length; j++) { source.addData(new String[] { - kmf.format(kms[0][j]), mf.format(kms[1][j])}); + kmf.format(kms[0][j]), + desc, + mf.format(kms[1][j]), + mf.format(morph1[1][j]), + mf.format(morph2[1][j]) + }); } } return source; @@ -196,7 +223,7 @@ String confPath = Config.getConfigDirectory().toString(); - Map parameters = new HashMap(); + Map parameters = new HashMap(); parameters.put("ReportTitle", Resources.getMsg( context.getMeta(), PDF_TITLE, "Exported Data")); try { diff -r 42076d94977e -r 45cced06490c artifacts/src/main/java/org/dive4elements/river/exports/process/BedWidthProcessor.java --- a/artifacts/src/main/java/org/dive4elements/river/exports/process/BedWidthProcessor.java Wed May 21 11:43:10 2014 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/exports/process/BedWidthProcessor.java Mon Jun 30 11:29:45 2014 +0200 @@ -19,6 +19,7 @@ import org.dive4elements.river.artifacts.model.FacetTypes; import org.dive4elements.river.exports.DiagramGenerator; import org.dive4elements.river.exports.StyledSeriesBuilder; +import org.dive4elements.river.jfree.GapInserter; import org.dive4elements.river.jfree.StyledXYSeries; import org.dive4elements.river.themes.ThemeDocument; @@ -39,6 +40,9 @@ "chart.beddifference.yaxis.label.morph"; protected String yAxisLabel; + + public static final double GAP_WIDTH = 100.0; + @Override public void doOut( DiagramGenerator generator, @@ -78,8 +82,10 @@ double[] width = bData.getSoundingWidths(); double[] stations = bData.getStations().toNativeArray(); + GapInserter gi = new GapInserter(series, GAP_WIDTH); + for (int i = 0; i < width.length; i++) { - series.add(stations[i], width[i], false); + gi.add(stations[i], width[i]); } } else if (data instanceof List) { List bData = (List)data; diff -r 42076d94977e -r 45cced06490c artifacts/src/main/java/org/dive4elements/river/exports/process/FlowVelocityProcessor.java --- a/artifacts/src/main/java/org/dive4elements/river/exports/process/FlowVelocityProcessor.java Wed May 21 11:43:10 2014 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/exports/process/FlowVelocityProcessor.java Mon Jun 30 11:29:45 2014 +0200 @@ -15,7 +15,11 @@ import org.dive4elements.artifactdatabase.state.ArtifactAndFacet; import org.dive4elements.artifacts.CallContext; +import org.dive4elements.river.artifacts.D4EArtifact; +import org.dive4elements.river.artifacts.access.RiverAccess; +import org.dive4elements.river.artifacts.context.RiverContext; import org.dive4elements.river.artifacts.model.FacetTypes; +import org.dive4elements.river.artifacts.model.ZoomScale; import org.dive4elements.river.exports.DiagramGenerator; import org.dive4elements.river.exports.StyledSeriesBuilder; import org.dive4elements.river.jfree.StyledXYSeries; @@ -23,6 +27,7 @@ import org.dive4elements.river.model.FlowVelocityMeasurementValue.FastFlowVelocityMeasurementValue; import org.dive4elements.river.artifacts.model.FlowVelocityData; +import org.dive4elements.river.artifacts.resources.Resources; public class FlowVelocityProcessor extends DefaultProcessor { @@ -33,6 +38,8 @@ "chart.flow_velocity.section.yaxis.label"; public static final String I18N_AXIS_LABEL_DEFAULT = "Geschwindigkeit v [m/s]"; + public static final String I18N_SUBTITLE_RADIUS = + "chart.subtitle.radius"; protected String yAxisLabel; @@ -76,7 +83,24 @@ return; } StyledSeriesBuilder.addPoints(series, points, true); + Double start = (Double)context.getContextValue("startkm"); + Double end = (Double)context.getContextValue("endkm"); + if (start != null && end != null) { + logger.debug("start: " + start + " end: " + end); + D4EArtifact artifact = (D4EArtifact)bundle.getArtifact(); + RiverContext fc = (RiverContext)context.globalContext(); + // Adaptive smoothing, based on zoom factor/diagram extents. + ZoomScale scales = (ZoomScale)fc.get("zoomscale"); + RiverAccess access = new RiverAccess((D4EArtifact)artifact); + String river = access.getRiverName(); + double radius = scales.getRadius(river, start, end); + logger.debug("add a subtitle"); + generator.addSubtitle(Resources.getMsg( + context.getMeta(), + I18N_SUBTITLE_RADIUS, + new Object[] { radius })); + } generator.addAxisSeries(series, axisName, visible); } diff -r 42076d94977e -r 45cced06490c artifacts/src/main/java/org/dive4elements/river/exports/sq/SQRelationExporter.java --- a/artifacts/src/main/java/org/dive4elements/river/exports/sq/SQRelationExporter.java Wed May 21 11:43:10 2014 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/exports/sq/SQRelationExporter.java Mon Jun 30 11:29:45 2014 +0200 @@ -57,6 +57,50 @@ private static final Logger logger = Logger.getLogger(SQRelationExporter.class); + public static final String INFO_COEFF_A = + "export.sqrelation.csv.info.coeff.a"; + + public static final String INFO_COEFF_B = + "export.sqrelation.csv.info.coeff.b"; + + public static final String INFO_QMAX = + "export.sqrelation.csv.info.qmax"; + + public static final String INFO_STDERR = + "export.sqrelation.csv.info.stderr"; + + public static final String INFO_R2 = + "export.sqrelation.csv.info.r2"; + + public static final String INFO_NTOT = + "export.sqrelation.csv.info.ntot"; + + public static final String INFO_NOUTL = + "export.sqrelation.csv.info.noutl"; + + public static final String INFO_CFERGUSON = + "export.sqrelation.csv.info.cferguson"; + + public static final String INFO_CDUAN = + "export.sqrelation.csv.info.cduan"; + + public static final String INFO_PARAM_A = + "export.sqrelation.csv.info.param.a"; + + public static final String INFO_PARAM_B = + "export.sqrelation.csv.info.param.b"; + + public static final String INFO_PARAM_C = + "export.sqrelation.csv.info.param.c"; + + public static final String INFO_PARAM_D = + "export.sqrelation.csv.info.param.d"; + + public static final String INFO_PARAM_E = + "export.sqrelation.csv.info.param.e"; + + public static final String INFO_PARAM_F = + "export.sqrelation.csv.info.param.f"; public static final String CSV_PARAMETER = "export.sqrelation.csv.header.parameter"; @@ -130,17 +174,17 @@ protected void writeCSVHeader(CSVWriter writer) { writer.writeNext(new String[] { - msg(CSV_KM , CSV_KM), - msg(CSV_PARAMETER, CSV_PARAMETER), - msg(CSV_COEFF_A , CSV_COEFF_A), - msg(CSV_COEFF_B , CSV_COEFF_B), - msg(CSV_SD, CSV_SD), - msg(CSV_QMAX, CSV_QMAX), - msg(CSV_COEFF_R, CSV_COEFF_R), - msg(CSV_N_TOTAL , CSV_N_TOTAL), - msg(CSV_N_OUTLIERS, CSV_N_OUTLIERS), - msg(CSV_C_DUAN, CSV_C_DUAN), - msg(CSV_C_FERGUSON, CSV_C_FERGUSON) + msg(CSV_KM), + msg(CSV_PARAMETER), + msg(CSV_COEFF_A), + msg(CSV_COEFF_B), + msg(CSV_SD), + msg(CSV_QMAX), + msg(CSV_COEFF_R), + msg(CSV_N_TOTAL), + msg(CSV_N_OUTLIERS), + msg(CSV_C_DUAN), + msg(CSV_C_FERGUSON) }); } @@ -148,6 +192,24 @@ protected void writeCSVData(CSVWriter writer) { logger.debug("writeCSVData"); + writeCSVInfo(writer, new String[] { + msg(INFO_COEFF_A), + msg(INFO_COEFF_B), + msg(INFO_QMAX), + msg(INFO_STDERR), + msg(INFO_R2), + msg(INFO_NTOT), + msg(INFO_NOUTL), + msg(INFO_CFERGUSON), + msg(INFO_CDUAN), + msg(INFO_PARAM_A), + msg(INFO_PARAM_B), + msg(INFO_PARAM_C), + msg(INFO_PARAM_D), + msg(INFO_PARAM_E), + msg(INFO_PARAM_F) + }); + writeCSVHeader(writer); for (SQResult [] results: data) { diff -r 42076d94977e -r 45cced06490c artifacts/src/main/java/org/dive4elements/river/jfree/AnnotationHelper.java --- a/artifacts/src/main/java/org/dive4elements/river/jfree/AnnotationHelper.java Wed May 21 11:43:10 2014 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/jfree/AnnotationHelper.java Mon Jun 30 11:29:45 2014 +0200 @@ -83,6 +83,11 @@ color = Color.BLACK; } + Color textColor = theme.parseTextColor(); + if (textColor == null) { + textColor = Color.BLACK; + } + LegendItem newItem = new LegendItem(fa.getLabel(), color); LegendSection ls = (settings != null ? settings.getLegendSection() : null); @@ -92,6 +97,8 @@ ls != null ? ls.getFontSize() : null) ); + newItem.setLabelPaint(textColor); + lic.add(newItem); // (Re-)Add prior legend entries. if (old != null) { diff -r 42076d94977e -r 45cced06490c artifacts/src/main/java/org/dive4elements/river/jfree/GapInserter.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/artifacts/src/main/java/org/dive4elements/river/jfree/GapInserter.java Mon Jun 30 11:29:45 2014 +0200 @@ -0,0 +1,27 @@ +package org.dive4elements.river.jfree; + +import org.jfree.data.xy.XYSeries; + +public class GapInserter { + + private XYSeries series; + private double gap; + private double lastX; + + public GapInserter() { + } + + public GapInserter(XYSeries series, double gap) { + lastX = Double.NaN; + this.series = series; + this.gap = Math.abs(gap); + } + + public void add(double x, double y) { + if (!Double.isNaN(lastX) && !Double.isNaN(x) && Math.abs(x - lastX) > gap) { + series.add((x + lastX)/2.0, Double.NaN, false); + } + series.add(x, y, false); + lastX = x; + } +} diff -r 42076d94977e -r 45cced06490c artifacts/src/main/java/org/dive4elements/river/jfree/StableXYDifferenceRenderer.java --- a/artifacts/src/main/java/org/dive4elements/river/jfree/StableXYDifferenceRenderer.java Wed May 21 11:43:10 2014 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/jfree/StableXYDifferenceRenderer.java Mon Jun 30 11:29:45 2014 +0200 @@ -157,7 +157,7 @@ /** For serialization. */ private static final long serialVersionUID = -8447915602375584857L; - /** The paint used to highlight positive differences (y(0) > y(1)). */ + /** The paint used to highlight positive differences (y(0) > y(1)). */ private transient Paint positivePaint; /** The paint used to highlight negative differences (y(0) < y(1)). */ diff -r 42076d94977e -r 45cced06490c artifacts/src/main/java/org/dive4elements/river/utils/RiverMapfileGenerator.java --- a/artifacts/src/main/java/org/dive4elements/river/utils/RiverMapfileGenerator.java Wed May 21 11:43:10 2014 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/utils/RiverMapfileGenerator.java Mon Jun 30 11:29:45 2014 +0200 @@ -32,9 +32,6 @@ public class RiverMapfileGenerator extends MapfileGenerator { - public static final String XPATH_RIVERMAP_RIVER_PROJECTION = - "/artifact-database/rivermap/river[@name=$name]/srid/@value"; - public static final String XPATH_RIVERMAP_SHAPEFILE_DIR = "/artifact-database/rivermap/shapefile-path/@value"; diff -r 42076d94977e -r 45cced06490c artifacts/src/main/resources/messages.properties --- a/artifacts/src/main/resources/messages.properties Wed May 21 11:43:10 2014 +0200 +++ b/artifacts/src/main/resources/messages.properties Mon Jun 30 11:29:45 2014 +0200 @@ -333,6 +333,8 @@ facet.gauge_discharge_curve.gauge_location = Location of the gauge facet.morphologic.width = morphologic Width +facet.porosity = {0} + chart.beddifference.height.title = Bedheight Difference chart.beddifference.height.xaxis.label = {0}-km chart.beddifference.height.yaxis.label = Difference [cm/year] @@ -343,8 +345,7 @@ chart.beddifference.year.title = Bedheight Difference chart.beddifference.yaxis.label.morph = Width [m] chart.beddifference.yaxis.label.heights = Absolute Height [{0}] -chart.beddifference.subtitle.radius = Fensterbreite für gewichtete Mittel: {0}km -chart.subtitle.radius = Radius for weighted Average: {0}km +chart.subtitle.radius = Width of sample window for moving average: {0} km export.waterlevel.csv.header.km = River-Km export.waterlevel.csv.header.w = W [{0}] @@ -423,6 +424,21 @@ export.sedimentload_ls.csv.header.suspsediment = susp. sediment export.sedimentload_ls.csv.header.suspsandbb = susp. sand (BB) export.sedimentload_ls.csv.header.total = total +export.sqrelation.csv.info.coeff.a = a: coefficient of transport curve +export.sqrelation.csv.info.coeff.b = b: exponent of transport curve +export.sqrelation.csv.info.qmax = Q max, measured: maximum measured discharge [m\u00b3/s] +export.sqrelation.csv.info.stderr = standard error: natural logarithm of standard deviation +export.sqrelation.csv.info.r2 = r^2: coefficient of determination +export.sqrelation.csv.info.ntot = n total: number of measurements +export.sqrelation.csv.info.noutl = n outliers: number of outliers +export.sqrelation.csv.info.cferguson = CFERGUSON: bias correction (Ferguson, 1986) +export.sqrelation.csv.info.cduan = CDUAN: bias correction (Duan, 1983) +export.sqrelation.csv.info.param.a = Parameter A: transport of fine material (< 0.063 mm) +export.sqrelation.csv.info.param.b = Parameter B: transport of suspended sand (0.063-2 mm) +export.sqrelation.csv.info.param.c = Parameter C: transport of sand (0.063-2 mm) +export.sqrelation.csv.info.param.d = Parameter D: transport of fine and medium gravel (2-16 mm) +export.sqrelation.csv.info.param.e = Parameter E: transport of coarse gravel (> Mittelkies)(16-125 mm) +export.sqrelation.csv.info.param.f = Parameter F: transport of bed load (0.063-125 mm) export.sqrelation.csv.header.parameter = Parameter export.sqrelation.csv.header.station = Station export.sqrelation.csv.header.km = River-Km @@ -437,7 +453,7 @@ export.sqrelation.csv.header.c.duan = C (Duan) export.sqrelation.csv.header.c.ferguson = C (Ferguson) export.sqrelation.csv.header.sd = Standard error -export.sqrelation.csv.header.qmax = Q max,measured +export.sqrelation.csv.header.qmax = Q max, measured [m\u00b3/s] export.sqrelation.pdf.file = /jasper/sqrelation_en.jasper export.sqrelation.pdf.mode = Load Discharge Relation export.minfo.bedquality.km = km @@ -449,7 +465,8 @@ export.minfo.bedquality.bed_cap = Bed Diameter Toplayer export.minfo.bedquality.bed_sub = Bed Diameter Sublayer export.minfo.beddifference.km = km -export.minfo.beddifference.diff = m +export.minfo.beddifference.diff = Bedheight Difference [cm] +export.minfo.beddifference.diff.pair = Difference pair export.minfo.beddifference.pdf.file = /jasper/beddifference_en.jasper export.minfo.beddifference.pdf.title = Bedheight Difference export.minfo.beddifference.pdf.mode = Bedheight Difference @@ -572,6 +589,7 @@ help.state.minfo.dischargestate=${help.url}/OnlineHilfe/MINFO#help.state.minfo.dischargestate help.state.minfo.soundings=${help.url}/OnlineHilfe/MINFO#help.state.minfo.soundings help.state.minfo.bed.difference_select=${help.url}/OnlineHilfe/MINFO#help.state.minfo.bed.difference_select +help.state.minfo.sq.outliermethod=${help.url}/OnlineHilfe/MINFO#help.state.minfo.sq.outliermethod help.state.minfo.sq.outliers=${help.url}/OnlineHilfe/MINFO#help.state.minfo.sq.outliers help.state.minfo.sediment.load.year_epoch=${help.url}/OnlineHilfe/MINFO#help.state.minfo.sediment.load.year_epoch help.state.minfo.sediment.load.location=${help.url}/OnlineHilfe/MINFO#help.state.minfo.sediment.load.location diff -r 42076d94977e -r 45cced06490c artifacts/src/main/resources/messages_de.properties --- a/artifacts/src/main/resources/messages_de.properties Wed May 21 11:43:10 2014 +0200 +++ b/artifacts/src/main/resources/messages_de.properties Mon Jun 30 11:29:45 2014 +0200 @@ -315,7 +315,6 @@ facet.bedheight.sounding_width = gepeilte Breite ({0}) facet.bedheight.diff.morph1 = Morph. aktive Breite Minuend facet.bedheight.diff.morph2 = Morph. aktive Breite Subtrahend -facet.bedheight.sounding_width = gepeilte Breite ({0}) facet.bedheight.diff.sounding = gepeilte Breite facet.bedheight.diff.height1 = H\u00f6he Minuend {0} facet.bedheight.diff.height2 = H\u00f6he Subtrahend {0} @@ -334,6 +333,8 @@ facet.gauge_discharge_curve.gauge_location = Pegelort facet.morphologic.width = Morphologische Breite +facet.porosity = {0} + chart.beddifference.height.title = Sohlh\u00f6hendifferenz chart.beddifference.height.xaxis.label = {0}-km chart.beddifference.height.yaxis.label = Differenz [cm/Jahr] @@ -344,7 +345,7 @@ chart.beddifference.year.title = Sohlh\u00f6hendifferenz chart.beddifference.yaxis.label.morph = Breite [m] chart.beddifference.yaxis.label.heights = Absolute H\u00f6he [m] -chart.subtitle.radius = Fensterbreite f\u00fcr gewichtete Mittel: {0}km +chart.subtitle.radius = Fensterbreite f\u00fcr gleitenden Mittelwert: {0} km export.waterlevel.csv.header.km = Fluss-Km export.waterlevel.csv.header.w = W [{0}] @@ -424,6 +425,21 @@ export.sedimentload_ls.csv.header.suspsandbb = susp.Sand(BB) export.sedimentload_ls.csv.header.suspsediment = Schwebst. export.sedimentload_ls.csv.header.total = Gesamt +export.sqrelation.csv.info.coeff.a = a: Transportkurvenkoeffizient +export.sqrelation.csv.info.coeff.b = b: Transportkurvenexponent +export.sqrelation.csv.info.qmax = Q max, gemessen: maximal gemessener Abfluss [m\u00b3/s] +export.sqrelation.csv.info.stderr = Standardfehler: nat\u00fcrlicher Logarithmus der Standardabweichung +export.sqrelation.csv.info.r2 = r^2: Bestimmtheitsma\u00df +export.sqrelation.csv.info.ntot = n Gesamt: Anzahl Messwerte +export.sqrelation.csv.info.noutl = n Ausrei\u00dfer: Anzahl Ausrei\u00dfer +export.sqrelation.csv.info.cferguson = CFERGUSON: Bias Korrektur nach Ferguson 1986 +export.sqrelation.csv.info.cduan = CDUAN: Bias Korrektur nach Duan 1983 +export.sqrelation.csv.info.param.a = Parameter A: Sedimenttransport von Feinkornanteil (< 0.063 mm) +export.sqrelation.csv.info.param.b = Parameter B: Sedimenttransport von Sand (Suspensionstransort)(0.063-2 mm) +export.sqrelation.csv.info.param.c = Parameter C: Sedimenttransport von Sand (Geschiebetransport) (0.063-2 mm) +export.sqrelation.csv.info.param.d = Parameter D: Sedimenttransport von Fein- und Mittelkies (2-16 mm) +export.sqrelation.csv.info.param.e = Parameter E: Sedimenttransport von Grobkornanteil (> Mittelkies)(16-125 mm) +export.sqrelation.csv.info.param.f = Parameter F: Sedimenttransport von Geschiebtransportgesamt (0.063-125 mm) export.sqrelation.csv.header.parameter = Parameter export.sqrelation.csv.header.station = Station export.sqrelation.csv.header.km = Fluss-Km @@ -438,7 +454,7 @@ export.sqrelation.csv.header.c.duan = C (Duan) export.sqrelation.csv.header.c.ferguson = C (Ferguson) export.sqrelation.csv.header.sd = Standardfehler -export.sqrelation.csv.header.qmax = Q max,gemessen +export.sqrelation.csv.header.qmax = Q max, gemessen [m\u00b3/s] export.sqrelation.pdf.file = /jasper/sqrelation.jasper export.sqrelation.pdf.mode = Transport-Abfluss Beziehung export.minfo.bedquality.km = km @@ -450,7 +466,8 @@ export.minfo.bedquality.bed_cap = Sohldurchmesser Deckschicht [mm] export.minfo.bedquality.bed_sub = Sohldurchmesser Unterschicht [mm] export.minfo.beddifference.km = Fluss-km -export.minfo.beddifference.diff = m +export.minfo.beddifference.diff = Sohlh\u00f6hendifferenz [cm] +export.minfo.beddifference.diff.pair = Differenzenpaar export.minfo.beddifference.pdf.file = /jasper/beddifference.jasper export.minfo.beddifference.pdf.title = Sohlh\u00f6hendifferenz export.minfo.beddifference.pdf.mode = Sohlh\u00f6hendifferenz @@ -575,6 +592,7 @@ help.state.minfo.dischargestate=${help.url}/OnlineHilfe/MINFO#help.state.minfo.dischargestate help.state.minfo.soundings=${help.url}/OnlineHilfe/MINFO#help.state.minfo.soundings help.state.minfo.bed.difference_select=${help.url}/OnlineHilfe/MINFO#help.state.minfo.bed.difference_select +help.state.minfo.sq.outliermethod=${help.url}/OnlineHilfe/MINFO#help.state.minfo.sq.outliermethod help.state.minfo.sq.outliers=${help.url}/OnlineHilfe/MINFO#help.state.minfo.sq.outliers help.state.minfo.sediment.load.year_epoch=${help.url}/OnlineHilfe/MINFO#help.state.minfo.sediment.load.year_epoch help.state.minfo.sediment.load.location=${help.url}/OnlineHilfe/MINFO#help.state.minfo.sediment.load.location @@ -647,7 +665,7 @@ fix.cannot.load.data=Daten konnten nicht aus der Datenbank geladen werden fix.realize.missing.is.q=Kein Q-Wert verf\u00fcgbar -fix.realize.missing.segments=Werte für Pegelstrecken nicht angegeben +fix.realize.missing.segments=Werte f\u00fcr Pegelstrecken nicht angegeben fix.no.such.river=Gew\u00e4sser nicht gefunden fix.cannot.find.segment=Au\u00dferhalb der Pegelg\u00fcltigkeit fix.cannot.calculate.function=Funktionsauswerung fehlgeschlagen diff -r 42076d94977e -r 45cced06490c artifacts/src/main/resources/messages_de_DE.properties --- a/artifacts/src/main/resources/messages_de_DE.properties Wed May 21 11:43:10 2014 +0200 +++ b/artifacts/src/main/resources/messages_de_DE.properties Mon Jun 30 11:29:45 2014 +0200 @@ -331,6 +331,8 @@ facet.gauge_discharge_curve.gauge_location = Pegelort facet.morphologic.width = Morphologische Breite +facet.porosity = {0} + chart.beddifference.height.title = Sohlh\u00f6hendifferenz chart.beddifference.height.xaxis.label = {0}-km chart.beddifference.height.yaxis.label = Differenz [cm/Jahr] @@ -341,7 +343,7 @@ chart.beddifference.year.title = Sohlh\u00f6hendifferenz chart.beddifference.yaxis.label.morph = Breite [m] chart.beddifference.yaxis.label.heights = Absolute H\u00f6he [{0}] -chart.subtitle.radius = Fensterbreite f\u00fcr gewichtete Mittel: {0}km +chart.subtitle.radius = Fensterbreite f\u00fcr gleitenden Mittelwert: {0} km export.waterlevel.csv.header.km = Fluss-Km export.waterlevel.csv.header.w = W [{0}] @@ -420,6 +422,21 @@ export.sedimentload_ls.csv.header.suspsandbb = susp.Sand(BB) export.sedimentload_ls.csv.header.suspsediment = Schwebst. export.sedimentload_ls.csv.header.total = Gesamt +export.sqrelation.csv.info.coeff.a = a: Transportkurvenkoeffizient +export.sqrelation.csv.info.coeff.b = b: Transportkurvenexponent +export.sqrelation.csv.info.qmax = Q max, gemessen: maximal gemessener Abfluss [m\u00b3/s] +export.sqrelation.csv.info.stderr = Standardfehler: nat\u00fcrlicher Logarithmus der Standardabweichung +export.sqrelation.csv.info.r2 = r^2: Bestimmtheitsma\u00df +export.sqrelation.csv.info.ntot = n Gesamt: Anzahl Messwerte +export.sqrelation.csv.info.noutl = n Ausrei\u00dfer: Anzahl Ausrei\u00dfer +export.sqrelation.csv.info.cferguson = CFERGUSON: Bias Korrektur nach Ferguson 1986 +export.sqrelation.csv.info.cduan = CDUAN: Bias Korrektur nach Duan 1983 +export.sqrelation.csv.info.param.a = Parameter A: Sedimenttransport von Feinkornanteil (< 0.063 mm) +export.sqrelation.csv.info.param.b = Parameter B: Sedimenttransport von Sand (Suspensionstransort)(0.063-2 mm) +export.sqrelation.csv.info.param.c = Parameter C: Sedimenttransport von Sand (Geschiebetransport) (0.063-2 mm) +export.sqrelation.csv.info.param.d = Parameter D: Sedimenttransport von Fein- und Mittelkies (2-16 mm) +export.sqrelation.csv.info.param.e = Parameter E: Sedimenttransport von Grobkornanteil (> Mittelkies)(16-125 mm) +export.sqrelation.csv.info.param.f = Parameter F: Sedimenttransport von Geschiebtransportgesamt (0.063-125 mm) export.sqrelation.csv.header.parameter = Parameter export.sqrelation.csv.header.station = Station export.sqrelation.csv.header.km = Fluss-Km @@ -434,7 +451,7 @@ export.sqrelation.csv.header.c.duan = C (Duan) export.sqrelation.csv.header.c.ferguson = C (Ferguson) export.sqrelation.csv.header.sd = Standardfehler -export.sqrelation.csv.header.qmax = Q max,gemessen +export.sqrelation.csv.header.qmax = Q max, gemessen [m\u00b3/s] export.sqrelation.pdf.file = /jasper/sqrelation.jasper export.sqrelation.pdf.mode = Transport-Abfluss Beziehung export.minfo.bedquality.km = km @@ -446,7 +463,8 @@ export.minfo.bedquality.bed_cap = Sohldurchmesser Deckschicht [mm] export.minfo.bedquality.bed_sub = Sohldurchmesser Unterschicht [mm] export.minfo.beddifference.km = Fluss-km -export.minfo.beddifference.diff = m +export.minfo.beddifference.diff = Sohlh\u00f6hendifferenz [cm] +export.minfo.beddifference.diff.pair = Differenzenpaar export.minfo.beddifference.pdf.file = /jasper/beddifference.jasper export.minfo.beddifference.pdf.title = Sohlh\u00f6hendifferenz export.minfo.beddifference.pdf.mode = Sohlh\u00f6hendifferenz @@ -645,7 +663,7 @@ fix.cannot.load.data=Daten konnten nicht aus der Datenbank geladen werden fix.realize.missing.is.q=Kein Q-Wert verf\u00fcgbar -fix.realize.missing.segments=Werte für Pegelstrecken nicht angegeben +fix.realize.missing.segments=Werte f\u00fcr Pegelstrecken nicht angegeben fix.no.such.river=Gew\u00e4sser nicht gefunden fix.cannot.find.segment=Au\u00dferhalb der Pegelg\u00fcltigkeit fix.cannot.calculate.function=Funktionsauswerung fehlgeschlagen diff -r 42076d94977e -r 45cced06490c artifacts/src/main/resources/messages_en.properties --- a/artifacts/src/main/resources/messages_en.properties Wed May 21 11:43:10 2014 +0200 +++ b/artifacts/src/main/resources/messages_en.properties Mon Jun 30 11:29:45 2014 +0200 @@ -165,7 +165,6 @@ chart.longitudinal.section.yaxis.label = W [{0}] chart.longitudinal.section.yaxis.second.label = Q [m\u00b3/s] chart.longitudinal.annotations.label = {0}.km -chart.computed.discharge.curve.gauge = Discharge curve at gauge {0} (km {1}) chart.discharge.curve.title = Discharge Curve chart.discharge.curve.xaxis.label = Q [m\u00b3/s] chart.discharge.curve.yaxis.label = W [cm] @@ -337,6 +336,8 @@ facet.gauge_discharge_curve.gauge_location = Location of the gauge facet.morphologic.width = morphologic Width +facet.porosity = {0} + chart.beddifference.height.title = Bedheight Difference chart.beddifference.height.xaxis.label = {0}-km chart.beddifference.height.yaxis.label = Difference [cm/year] @@ -347,7 +348,7 @@ chart.beddifference.year.title = Bedheight Difference chart.beddifference.yaxis.label.morph = Width [m] chart.beddifference.yaxis.label.heights = Absolute Height [m] -chart.subtitle.radius = Radius for weighted Average: {0}km +chart.subtitle.radius = Radius for weighted Average: {0} km export.waterlevel.csv.header.km = River-Km export.waterlevel.csv.header.w = W [{0}] @@ -426,6 +427,21 @@ export.sedimentload_ls.csv.header.suspsand = susp. sand export.sedimentload_ls.csv.header.suspsediment = susp. sediment export.sedimentload_ls.csv.header.total = total +export.sqrelation.csv.info.coeff.a = a: coefficient of transport curve +export.sqrelation.csv.info.coeff.b = b: exponent of transport curve +export.sqrelation.csv.info.qmax = Q max, measured: maximum measured discharge [m\u00b3/s] +export.sqrelation.csv.info.stderr = standard error: natural logarithm of standard deviation +export.sqrelation.csv.info.r2 = r^2: coefficient of determination +export.sqrelation.csv.info.ntot = n total: number of measurements +export.sqrelation.csv.info.noutl = n outliers: number of outliers +export.sqrelation.csv.info.cferguson = CFERGUSON: bias correction (Ferguson, 1986) +export.sqrelation.csv.info.cduan = CDUAN: bias correction (Duan, 1983) +export.sqrelation.csv.info.param.a = Parameter A: transport of fine material (< 0.063 mm) +export.sqrelation.csv.info.param.b = Parameter B: transport of suspended sand (0.063-2 mm) +export.sqrelation.csv.info.param.c = Parameter C: transport of sand (0.063-2 mm) +export.sqrelation.csv.info.param.d = Parameter D: transport of fine and medium gravel (2-16 mm) +export.sqrelation.csv.info.param.e = Parameter E: transport of coarse gravel (> Mittelkies)(16-125 mm) +export.sqrelation.csv.info.param.f = Parameter F: transport of bed load (0.063-125 mm) export.sqrelation.csv.header.parameter = Parameter export.sqrelation.csv.header.station = Station export.sqrelation.csv.header.km = River-Km @@ -440,7 +456,7 @@ export.sqrelation.csv.header.c.duan = C (Duan) export.sqrelation.csv.header.c.ferguson = C (Ferguson) export.sqrelation.csv.header.sd = Standard error -export.sqrelation.csv.header.qmax = Q max,measured +export.sqrelation.csv.header.qmax = Q max, measured [m\u00b3/s] export.sqrelation.pdf.file = /jasper/sqrelation_en.jasper export.sqrelation.pdf.mode = Load Discharge Relation export.minfo.bedquality.km = km @@ -452,7 +468,8 @@ export.minfo.bedquality.bed_cap = Bed Diameter Toplayer [mm] export.minfo.bedquality.bed_sub = Bed Diameter Sublayer [mm] export.minfo.beddifference.km = km -export.minfo.beddifference.diff = m +export.minfo.beddifference.diff = Bedheight Difference [cm] +export.minfo.beddifference.diff.pair = Difference pair export.minfo.beddifference.pdf.file = /jasper/beddifference_en.jasper export.minfo.beddifference.pdf.title = Bedheight Difference export.minfo.beddifference.pdf.mode = Bedheight Difference @@ -576,6 +593,7 @@ help.state.minfo.dischargestate=${help.url}/OnlineHilfe/MINFO#help.state.minfo.dischargestate help.state.minfo.soundings=${help.url}/OnlineHilfe/MINFO#help.state.minfo.soundings help.state.minfo.bed.difference_select=${help.url}/OnlineHilfe/MINFO#help.state.minfo.bed.difference_select +help.state.minfo.sq.outliermethod=${help.url}/OnlineHilfe/MINFO#help.state.minfo.sq.outliermethod help.state.minfo.sq.outliers=${help.url}/OnlineHilfe/MINFO#help.state.minfo.sq.outliers help.state.minfo.sediment.load.year_epoch=${help.url}/OnlineHilfe/MINFO#help.state.minfo.sediment.load.year_epoch help.state.minfo.sediment.load.location=${help.url}/OnlineHilfe/MINFO#help.state.minfo.sediment.load.location diff -r 42076d94977e -r 45cced06490c backend/contrib/import_river.sh --- a/backend/contrib/import_river.sh Wed May 21 11:43:10 2014 +0200 +++ b/backend/contrib/import_river.sh Mon Jun 30 11:29:45 2014 +0200 @@ -239,7 +239,6 @@ -Dflys.backend.importer.skip.morphological.width=true \ -Dflys.backend.importer.skip.flow.velocity=true \ -Dflys.backend.importer.skip.bed.height.single=true \ - -Dflys.backend.importer.skip.bed.height.epoch=true \ $JAR } @@ -287,7 +286,6 @@ -Dflys.backend.importer.skip.morphological.width=false \ -Dflys.backend.importer.skip.flow.velocity=false \ -Dflys.backend.importer.skip.bed.height.single=false \ - -Dflys.backend.importer.skip.bed.height.epoch=false \ $JAR } @@ -335,7 +333,6 @@ -Dflys.backend.importer.skip.morphological.width=true \ -Dflys.backend.importer.skip.flow.velocity=true \ -Dflys.backend.importer.skip.bed.height.single=true \ - -Dflys.backend.importer.skip.bed.height.epoch=true \ $JAR } diff -r 42076d94977e -r 45cced06490c backend/contrib/run_hydr_morph.sh --- a/backend/contrib/run_hydr_morph.sh Wed May 21 11:43:10 2014 +0200 +++ b/backend/contrib/run_hydr_morph.sh Mon Jun 30 11:29:45 2014 +0200 @@ -43,9 +43,9 @@ IMPORTER_SKIP_MEASUREMENT_STATIONS=false IMPORTER_SKIP_BED_HEIGHT_SINGLE=false -IMPORTER_SKIP_BED_HEIGHT_EPOCH=false IMPORTER_SKIP_FLOW_VELOCITY=false IMPORTER_SKIP_MORPHOLOGICAL_WIDTH=false +IMPORTER_SKIP_POROSITY=false IMPORTER_SKIP_SEDIMENT_DENSITY=false IMPORTER_SKIP_SEDIMENT_YIELD=false IMPORTER_SKIP_SQ_RELATION=false @@ -78,7 +78,6 @@ -Dflys.backend.importer.dry.run=$IMPORTER_DRY_RUN \ -Dflys.backend.importer.skip.annotations=$IMPORTER_SKIP_ANNOTATIONS \ -Dflys.backend.importer.skip.bed.height.single=$IMPORTER_SKIP_BED_HEIGHT_SINGLE \ - -Dflys.backend.importer.skip.bed.height.epoch=$IMPORTER_SKIP_BED_HEIGHT_EPOCH \ -Dflys.backend.importer.skip.bwastr=$IMPORTER_SKIP_BWASTR \ -Dflys.backend.importer.skip.da50s=$IMPORTER_SKIP_DA50S \ -Dflys.backend.importer.skip.da66s=$IMPORTER_SKIP_DA66S \ @@ -92,6 +91,7 @@ -Dflys.backend.importer.skip.historical.discharge.tables=$IMPORTER_SKIP_HISTORICAL_DISCHARGE_GAUGES \ -Dflys.backend.importer.skip.hyks=$IMPORTER_SKIP_HYKS \ -Dflys.backend.importer.skip.morphological.width=$IMPORTER_SKIP_MORPHOLOGICAL_WIDTH \ + -Dflys.backend.importer.skip.porosity=$IMPORTER_SKIP_POROSITY \ -Dflys.backend.importer.skip.official.lines=$IMPORTER_SKIP_OFFICIAL_LINES \ -Dflys.backend.importer.skip.prfs=$IMPORTER_SKIP_PRFS \ -Dflys.backend.importer.skip.sediment.density=$IMPORTER_SKIP_SEDIMENT_DENSITY \ diff -r 42076d94977e -r 45cced06490c backend/doc/documentation/de/importer-hydr-morph.tex --- a/backend/doc/documentation/de/importer-hydr-morph.tex Wed May 21 11:43:10 2014 +0200 +++ b/backend/doc/documentation/de/importer-hydr-morph.tex Mon Jun 30 11:29:45 2014 +0200 @@ -186,17 +186,18 @@ Es werden die CSV-Dateien aus dem Verzeichnis \textit{Morphologie/Sohlhoehen/Einzeljahre} geladen. -\subsubsection{Sohlhöhen (Epochen)} -Der Import Sohlhöhen-Epochen kann mit \textbf{-Dflys.backend.importer.skip.bed.height.epoch=true} -unterdrückt werden. Es werden die CSV-Dateien aus dem Verzeichnis -\textit{Morphologie/Sohlhoehen/Epochen} geladen. - \subsubsection{Sedimentdichte} Der Import der Sedimentdichte kann mit \textbf{-Dflys.backend.importer.skip.sediment.density=true} unterdrückt werden. Es werden die CSV-Dateien aus dem Verzeichnis \textit{Morphologie/Sedimentdichte} geladen. +\subsubsection{Porosität} +Der Import der Porositätsdaten kann mit +\textbf{-Dflys.backend.importer.skip.porosity=true} +unterdrückt werden. Es werden die CSV-Dateien aus dem Verzeichnis +\textit{Morphologie/Porositaet} geladen. + \subsubsection{Morphologische Breite} Mit \textbf{-Dflys.backend.importer.skip.morphological.width=true} kann der Import der morphologischen Breite unterdrückt werden. @@ -882,7 +883,7 @@ \subsection{Starten des Fachdaten Importers} \label{start-hydr} Der Fachdaten Importer wird mit Hilfe eines Shellskripts von einer Konsole -gestartet. Dazu führen folgenden Befehl aus:\\ +gestartet. Dazu folgenden Befehl ausführen:\\ \begin{lstlisting} ./run_hydr_morph.sh pfad/zur/beispiel.gew @@ -896,6 +897,13 @@ Ebenfalls wichtig ist die Zeile beginnend mit \textit{Gewässer:} in der der Name des Gewässers festgelegt wird. +Zusätzlich kann die Datei eine Zeile beginnend mit \textit{uuid:} +enthalten. Dahinter kann eine +UUID\footnote{\url{http://de.wikipedia.org/wiki/UUID}} stehen, +die als eindeutiger Bezeichner des Datensatzes verwendet wird +(derzeit für die Zuordnung der Darstellung von Gewässern in der +interaktiven Einstiegskarte zu Datensätzen in der Datenbank). + Nachdem der Prompt der Konsole zurückkehrt, ist der Import abgeschlossen oder es ist ein Fehler aufgetreten. Weitere Informationen entnehmen Sie der Log-Datei. diff -r 42076d94977e -r 45cced06490c backend/doc/schema/oracle-minfo.sql --- a/backend/doc/schema/oracle-minfo.sql Wed May 21 11:43:10 2014 +0200 +++ b/backend/doc/schema/oracle-minfo.sql Mon Jun 30 11:29:45 2014 +0200 @@ -59,27 +59,6 @@ ); -CREATE SEQUENCE BED_HEIGHT_EPOCH_ID_SEQ; - -CREATE TABLE bed_height_epoch ( - id NUMBER(38,0) NOT NULL, - river_id NUMBER(38,0) NOT NULL, - time_interval_id NUMBER(38,0) NOT NULL, - -- sounding_with NUMBER(38,0) NOT NULL, - -- type_id NUMBER(38,0) NOT NULL, - cur_elevation_model_id NUMBER(38,0) NOT NULL, - old_elevation_model_id NUMBER(38,0), - range_id NUMBER(38,0), - evaluation_by VARCHAR(255), - description VARCHAR(255), - PRIMARY KEY(id), - CONSTRAINT fk_time_interval FOREIGN KEY (time_interval_id) REFERENCES time_intervals(id), - CONSTRAINT fk_epoch_cur_elevation_model FOREIGN KEY (cur_elevation_model_id) REFERENCES elevation_model(id), - CONSTRAINT fk_epoch_old_elevation_model FOREIGN KEY (old_elevation_model_id) REFERENCES elevation_model(id), - CONSTRAINT fk_epoch_range FOREIGN KEY (range_id) REFERENCES ranges(id) ON DELETE CASCADE -); - - CREATE SEQUENCE BED_SINGLE_VALUES_ID_SEQ; CREATE TABLE bed_height_single_values ( @@ -97,18 +76,6 @@ ); -CREATE SEQUENCE BED_EPOCH_VALUES_ID_SEQ; - -CREATE TABLE bed_height_epoch_values ( - id NUMBER(38,0) NOT NULL, - bed_height_epoch_id NUMBER(38,0) NOT NULL, - station NUMBER(38,2) NOT NULL, - height NUMBER(38,2), - PRIMARY KEY(id), - CONSTRAINT fk_bed_epoch_values_parent FOREIGN KEY (bed_height_epoch_id) REFERENCES bed_height_epoch(id) ON DELETE CASCADE -); - - CREATE SEQUENCE DEPTHS_ID_SEQ; CREATE TABLE depths ( diff -r 42076d94977e -r 45cced06490c backend/doc/schema/postgresql-minfo.sql --- a/backend/doc/schema/postgresql-minfo.sql Wed May 21 11:43:10 2014 +0200 +++ b/backend/doc/schema/postgresql-minfo.sql Mon Jun 30 11:29:45 2014 +0200 @@ -59,27 +59,6 @@ ); -CREATE SEQUENCE BED_HEIGHT_EPOCH_ID_SEQ; - -CREATE TABLE bed_height_epoch ( - id int NOT NULL, - river_id int NOT NULL, - time_interval_id int NOT NULL, - -- sounding_width int, - -- type_id int NOT NULL, - cur_elevation_model_id int NOT NULL, - old_elevation_model_id int, - range_id int, - evaluation_by VARCHAR(255), - description VARCHAR(255), - PRIMARY KEY(id), - CONSTRAINT fk_time_interval FOREIGN KEY (time_interval_id) REFERENCES time_intervals(id), - CONSTRAINT fk_epoch_cur_elevation_model FOREIGN KEY (cur_elevation_model_id) REFERENCES elevation_model(id), - CONSTRAINT fk_epoch_old_elevation_model FOREIGN KEY (old_elevation_model_id) REFERENCES elevation_model(id), - CONSTRAINT fk_epoch_range FOREIGN KEY (range_id) REFERENCES ranges(id) ON DELETE CASCADE -); - - CREATE SEQUENCE BED_SINGLE_VALUES_ID_SEQ; CREATE TABLE bed_height_single_values ( @@ -97,18 +76,6 @@ ); -CREATE SEQUENCE BED_EPOCH_VALUES_ID_SEQ; - -CREATE TABLE bed_height_epoch_values ( - id int NOT NULL, - bed_height_epoch_id int NOT NULL, - station NUMERIC NOT NULL, - height NUMERIC, - PRIMARY KEY(id), - CONSTRAINT fk_bed_epoch_values_parent FOREIGN KEY (bed_height_epoch_id) REFERENCES bed_height_epoch(id) ON DELETE CASCADE -); - - CREATE SEQUENCE DEPTHS_ID_SEQ; CREATE TABLE depths ( diff -r 42076d94977e -r 45cced06490c backend/src/main/java/org/dive4elements/river/backend/FLYSCredentials.java --- a/backend/src/main/java/org/dive4elements/river/backend/FLYSCredentials.java Wed May 21 11:43:10 2014 +0200 +++ b/backend/src/main/java/org/dive4elements/river/backend/FLYSCredentials.java Mon Jun 30 11:29:45 2014 +0200 @@ -14,8 +14,6 @@ import org.dive4elements.river.model.AnnotationType; import org.dive4elements.river.model.Attribute; import org.dive4elements.river.model.AxisKind; -import org.dive4elements.river.model.BedHeightEpoch; -import org.dive4elements.river.model.BedHeightEpochValue; import org.dive4elements.river.model.BedHeightSingle; import org.dive4elements.river.model.BedHeightSingleValue; import org.dive4elements.river.model.BedHeightType; @@ -139,8 +137,6 @@ AnnotationType.class, Attribute.class, AxisKind.class, - BedHeightEpoch.class, - BedHeightEpochValue.class, BedHeightSingle.class, BedHeightSingleValue.class, BedHeightType.class, diff -r 42076d94977e -r 45cced06490c backend/src/main/java/org/dive4elements/river/importer/Config.java --- a/backend/src/main/java/org/dive4elements/river/importer/Config.java Wed May 21 11:43:10 2014 +0200 +++ b/backend/src/main/java/org/dive4elements/river/importer/Config.java Mon Jun 30 11:29:45 2014 +0200 @@ -73,9 +73,6 @@ public static final String SKIP_DA66S = "flys.backend.importer.skip.da66s"; - public static final String SKIP_BED_HEIGHT_EPOCH = - "flys.backend.importer.skip.bed.height.epoch"; - public static final String SKIP_SEDIMENT_DENSITY = "flys.backend.importer.skip.sediment.density"; @@ -214,10 +211,6 @@ return getFlag(SKIP_BED_HEIGHT_SINGLE); } - public boolean skipBedHeightEpoch() { - return getFlag(SKIP_BED_HEIGHT_EPOCH); - } - public boolean skipSedimentDensity() { return getFlag(SKIP_SEDIMENT_DENSITY); } diff -r 42076d94977e -r 45cced06490c backend/src/main/java/org/dive4elements/river/importer/ImportBedHeightEpoch.java --- a/backend/src/main/java/org/dive4elements/river/importer/ImportBedHeightEpoch.java Wed May 21 11:43:10 2014 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,206 +0,0 @@ -/* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde - * Software engineering by Intevation GmbH - * - * This file is Free Software under the GNU AGPL (>=v3) - * and comes with ABSOLUTELY NO WARRANTY! Check out the - * documentation coming with Dive4Elements River for details. - */ - -package org.dive4elements.river.importer; - -import java.util.ArrayList; -import java.util.List; - -import org.apache.log4j.Logger; -import org.hibernate.Query; -import org.hibernate.Session; - -import org.dive4elements.river.model.BedHeightEpoch; -import org.dive4elements.river.model.ElevationModel; -import org.dive4elements.river.model.Range; -import org.dive4elements.river.model.River; -import org.dive4elements.river.model.TimeInterval; - - -/** Import Bed Height Data, 'epoch' type from csv file. */ -public class ImportBedHeightEpoch implements ImportBedHeight { - - /** Private logger. */ - private static Logger log = Logger.getLogger(ImportBedHeightEpoch.class); - - protected String evaluationBy; - - /** De facto the file name. */ - protected String description; - - protected ImportTimeInterval timeInterval; - protected ImportRange range; - protected ImportElevationModel curElevationModel; - protected ImportElevationModel oldElevationModel; - - protected List values; - - protected BedHeightEpoch peer; - - public ImportBedHeightEpoch(String description) { - this.description = description; - this.values = new ArrayList(); - } - - public String getDescription() { - return description; - } - - public int getValueCount() { - return values.size(); - } - - public void setTimeInterval(ImportTimeInterval timeInterval) { - this.timeInterval = timeInterval; - } - - public void setEvaluationBy(String evaluationBy) { - this.evaluationBy = evaluationBy; - } - - public void setDescription(String description) { - this.description = description; - } - - public void setRange(ImportRange range) { - this.range = range; - } - - public void setCurElevationModel(ImportElevationModel curElevationModel) { - this.curElevationModel = curElevationModel; - } - - public void setOldElevationModel(ImportElevationModel oldElevationModel) { - this.oldElevationModel = oldElevationModel; - } - - /** Does nothing. */ - public void setYear(int year) { - // do nothing - } - - /** Does nothing. */ - public void setSoundingWidth(int soundingWidth) { - // do nothing - } - - - /** Does nothing. */ - public void setLocationSystem(ImportLocationSystem locationSystem) { - // do nothing - } - - - /** Does nothing. */ - public void setType(ImportBedHeightType type) { - // do nothing - } - - @Override - public void addValue(ImportBedHeightValue value) { - values.add((ImportBedHeightEpochValue) value); - } - - @Override - public void storeDependencies(River river) { - log.info("Store dependencies for epoch: '" + getDescription() + "'"); - - BedHeightEpoch peer = getPeer(river); - - if (curElevationModel != null) { - curElevationModel.storeDependencies(); - } - - if (oldElevationModel != null) { - oldElevationModel.storeDependencies(); - } - - if (peer != null) { - log.debug("store values now..."); - - for (ImportBedHeightEpochValue value : values) { - value.storeDependencies(peer); - } - } - - Session session = ImporterSession.getInstance().getDatabaseSession(); - session.flush(); - } - - /** - * Asserts all dependent entities (ElevationModel, TimeInterval, Range, - * BedHeighEpoch) are in db and returns bound (either newly created or - * freshly fetched) BedHeightEpoch. - */ - @Override - public BedHeightEpoch getPeer(River river) { - if (peer == null) { - ElevationModel theCurModel = null; - if (curElevationModel != null) { - curElevationModel.storeDependencies(); - theCurModel = curElevationModel.getPeer(); - } - - if (theCurModel == null) { - log.warn("BHE: Skip file - invalid current elevation model."); - return null; - } - - TimeInterval theTime = null; - if (timeInterval != null) { - theTime = timeInterval.getPeer(); - } - - if (theTime == null) { - log.warn("BHE: Skip file - invalid time range."); - return null; - } - - Range theRange = range != null ? range.getPeer(river) : null; - - if (theRange == null) { - log.warn("BHE: invalid km range."); - } - - Session session = ImporterSession.getInstance() - .getDatabaseSession(); - - Query query = session.createQuery("from BedHeightEpoch where " - + " river=:river and " + " timeInterval=:timeInterval and " - + " curElevationModel=:curElevationModel and " - + " range=:range and " + " evaluationBy=:evaluationBy and " - + " description=:description"); - - query.setParameter("river", river); - query.setParameter("timeInterval", theTime); - query.setParameter("curElevationModel", theCurModel); - query.setParameter("range", theRange); - query.setParameter("evaluationBy", evaluationBy); - query.setParameter("description", description); - - List bedHeights = query.list(); - - if (bedHeights.isEmpty()) { - log.info("Create new BedHeightEpoch DB instance."); - - peer = new BedHeightEpoch(river, theTime, theRange, - theCurModel, - oldElevationModel != null ? oldElevationModel.getPeer() - : null, evaluationBy, description); - - session.save(peer); - } - else { - peer = bedHeights.get(0); - } - } - - return peer; - } -} -// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : diff -r 42076d94977e -r 45cced06490c backend/src/main/java/org/dive4elements/river/importer/ImportBedHeightEpochValue.java --- a/backend/src/main/java/org/dive4elements/river/importer/ImportBedHeightEpochValue.java Wed May 21 11:43:10 2014 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,83 +0,0 @@ -/* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde - * Software engineering by Intevation GmbH - * - * This file is Free Software under the GNU AGPL (>=v3) - * and comes with ABSOLUTELY NO WARRANTY! Check out the - * documentation coming with Dive4Elements River for details. - */ - -package org.dive4elements.river.importer; - -import java.util.List; - -import java.math.BigDecimal; - -import org.apache.log4j.Logger; - -import org.hibernate.Session; -import org.hibernate.Query; - -import org.dive4elements.river.model.BedHeightEpoch; -import org.dive4elements.river.model.BedHeightEpochValue; - - -public class ImportBedHeightEpochValue implements ImportBedHeightValue { - - private static final Logger log = - Logger.getLogger(ImportBedHeightEpochValue.class); - - - private BigDecimal station; - private BigDecimal height; - - private BedHeightEpochValue peer; - - - public ImportBedHeightEpochValue() { - } - - - public ImportBedHeightEpochValue(BigDecimal station, BigDecimal height) { - this.station = station; - this.height = height; - } - - - public void storeDependencies(BedHeightEpoch bedHeight) { - getPeer(bedHeight); - } - - - public BedHeightEpochValue getPeer(BedHeightEpoch bedHeight) { - if (peer == null) { - Session session = ImporterSession.getInstance().getDatabaseSession(); - - Query query = session.createQuery( - "from BedHeightEpochValue where " + - " bedHeight=:bedHeight and " + - " station=:station and " + - " height=:height"); - - query.setParameter("bedHeight", bedHeight); - query.setParameter("station", station); - query.setParameter("height", height); - - List values = query.list(); - - if (values.isEmpty()) { - peer = new BedHeightEpochValue( - bedHeight, - station, - height - ); - session.save(peer); - } - else { - peer = values.get(0); - } - } - - return peer; - } -} -// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : diff -r 42076d94977e -r 45cced06490c backend/src/main/java/org/dive4elements/river/importer/ImportRiver.java --- a/backend/src/main/java/org/dive4elements/river/importer/ImportRiver.java Wed May 21 11:43:10 2014 +0200 +++ b/backend/src/main/java/org/dive4elements/river/importer/ImportRiver.java Mon Jun 30 11:29:45 2014 +0200 @@ -14,7 +14,6 @@ import org.dive4elements.river.importer.parsers.AnnotationClassifier; import org.dive4elements.river.importer.parsers.AnnotationsParser; -import org.dive4elements.river.importer.parsers.BedHeightEpochParser; import org.dive4elements.river.importer.parsers.BedHeightSingleParser; import org.dive4elements.river.importer.parsers.CrossSectionParser; import org.dive4elements.river.importer.parsers.DA50Parser; @@ -93,8 +92,6 @@ public static final String BED_HEIGHT_SINGLE_DIR = "Einzeljahre"; - public static final String BED_HEIGHT_EPOCH_DIR = "Epochen"; - public static final String SEDIMENT_DENSITY_DIR = "Sedimentdichte"; public static final String POROSITY_DIR = "Porositaet"; @@ -450,7 +447,6 @@ File minfoDir = getMinfoDir(); File bedHeightDir = new File(minfoDir, BED_HEIGHT_DIR); File singlesDir = new File(bedHeightDir, BED_HEIGHT_SINGLE_DIR); - File epochDir = new File(bedHeightDir, BED_HEIGHT_EPOCH_DIR); if (Config.INSTANCE.skipBedHeightSingle()) { log.info("skip parsing bed height single."); @@ -459,14 +455,6 @@ log.info("Parse bed height single."); parseBedHeightSingles(singlesDir); } - - if (Config.INSTANCE.skipBedHeightEpoch()) { - log.info("skip parsing bed height epochs."); - } - else { - log.info("Parse bed height epochs."); - parseBedHeightEpochs(epochDir); - } } @@ -815,27 +803,6 @@ bedHeightSingles = parser.getBedHeights(); } - - protected void parseBedHeightEpochs(File dir) throws IOException { - log.debug("Parse bed height epochs"); - - File[] files = dir.listFiles(); - - if (files == null) { - log.warn("Cannot read directory '" + dir + "'"); - return; - } - - BedHeightEpochParser parser = new BedHeightEpochParser(); - - for (File file: files) { - parser.parse(file); - } - - bedHeightEpochs = parser.getBedHeights(); - } - - public void parseFloodWater() throws IOException { if (Config.INSTANCE.skipFloodWater()) { log.info("skip parsing flod water"); @@ -1444,11 +1411,6 @@ log.info("store bed heights single"); storeBedHeightSingle(); } - - if (!Config.INSTANCE.skipBedHeightEpoch()) { - log.info("store bed height epoch."); - storeBedHeightEpoch(); - } } @@ -1472,25 +1434,6 @@ } - private void storeBedHeightEpoch() { - River river = getPeer(); - - if (bedHeightEpochs != null) { - for (ImportBedHeight tmp: bedHeightEpochs) { - ImportBedHeightEpoch epoch = (ImportBedHeightEpoch) tmp; - - String desc = epoch.getDescription(); - - log.debug("name: " + desc); - - epoch.storeDependencies(river); - } - } - else { - log.info("No epoch bed heights to store."); - } - } - public void storeSedimentDensity() { if (!Config.INSTANCE.skipSedimentDensity()) { log.info("store sediment density"); diff -r 42076d94977e -r 45cced06490c backend/src/main/java/org/dive4elements/river/importer/parsers/BedHeightEpochParser.java --- a/backend/src/main/java/org/dive4elements/river/importer/parsers/BedHeightEpochParser.java Wed May 21 11:43:10 2014 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,85 +0,0 @@ -/* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde - * Software engineering by Intevation GmbH - * - * This file is Free Software under the GNU AGPL (>=v3) - * and comes with ABSOLUTELY NO WARRANTY! Check out the - * documentation coming with Dive4Elements River for details. - */ - -package org.dive4elements.river.importer.parsers; - -import java.math.BigDecimal; - -import java.text.ParseException; - -import org.apache.log4j.Logger; - -import org.dive4elements.river.importer.ImportBedHeight; -import org.dive4elements.river.importer.ImportBedHeightEpoch; -import org.dive4elements.river.importer.ImportBedHeightEpochValue; - - -/** Parses BedHeightEpochs from csv file. */ -public class BedHeightEpochParser extends BedHeightParser { - - /** Our own logger. */ - private static final Logger log = - Logger.getLogger(BedHeightEpochParser.class); - - - @Override - protected ImportBedHeight newImportBedHeight(String description) { - return new ImportBedHeightEpoch(description); - } - - - /** - * Handle a non-comment, none-Metadata line of csv file, adding - * ImportBedHeightEpochValues to the given ImportBedHeight object. - */ - @Override - protected void handleDataLine(ImportBedHeight obj, String line) { - String[] values = line.split(SEPERATOR_CHAR); - - if (values == null || values.length == 0 || values[0].length() == 0) { - // There might be quite some ";" found. - //log.warn("Skip invalid data line: " + line); - return; - } - - BigDecimal km; - - try { - km = new BigDecimal(nf.parse(values[0]).doubleValue()); - } - catch (ParseException e) { - log.warn("Unparseable number in data row: " + line); - return; - } - - - // Handle "gap" lines like '255,0;' - if (values.length < 2) { - ImportBedHeightEpochValue value = new ImportBedHeightEpochValue( - km, - null - ); - - obj.addValue(value); - return; - } - - try { - ImportBedHeightEpochValue value = new ImportBedHeightEpochValue( - km, - new BigDecimal(nf.parse(values[1]).doubleValue()) - ); - - obj.addValue(value); - } - catch (ParseException e) { - log.warn("Unparseable number in data row: " + line); - } - } -} -// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : diff -r 42076d94977e -r 45cced06490c backend/src/main/java/org/dive4elements/river/importer/parsers/BedHeightParser.java --- a/backend/src/main/java/org/dive4elements/river/importer/parsers/BedHeightParser.java Wed May 21 11:43:10 2014 +0200 +++ b/backend/src/main/java/org/dive4elements/river/importer/parsers/BedHeightParser.java Mon Jun 30 11:29:45 2014 +0200 @@ -41,6 +41,7 @@ import org.dive4elements.river.model.BedHeightType; import org.dive4elements.river.importer.ImporterSession; import org.dive4elements.river.utils.EpsilonComparator; +import org.dive4elements.river.utils.DateUtil; public abstract class BedHeightParser { @@ -233,8 +234,8 @@ int lower = Integer.valueOf(lo); int upper = Integer.valueOf(up); - Date fromYear = LineParser.getStartDateFromYear(lower); - Date toYear = LineParser.getEndDateFromYear(upper); + Date fromYear = DateUtil.getStartDateFromYear(lower); + Date toYear = DateUtil.getEndDateFromYear(upper); obj.setTimeInterval(new ImportTimeInterval(fromYear, toYear)); } diff -r 42076d94977e -r 45cced06490c backend/src/main/java/org/dive4elements/river/importer/parsers/LineParser.java --- a/backend/src/main/java/org/dive4elements/river/importer/parsers/LineParser.java Wed May 21 11:43:10 2014 +0200 +++ b/backend/src/main/java/org/dive4elements/river/importer/parsers/LineParser.java Mon Jun 30 11:29:45 2014 +0200 @@ -14,7 +14,6 @@ import java.text.NumberFormat; import java.text.ParseException; import java.text.SimpleDateFormat; -import java.util.Calendar; import java.util.Date; import java.util.Locale; @@ -135,25 +134,5 @@ return df.parse(dateString); } - - - /** Create Date on first moment (1st jan) of given year. */ - public static Date getStartDateFromYear(int year) { - Calendar cal = Calendar.getInstance(); - cal.clear(); - cal.set(year, 0, 1, 0, 0, 0); - - return cal.getTime(); - } - - - /** Create Date on last moment (31st dec) of given year. */ - public static Date getEndDateFromYear(int year) { - Calendar cal = Calendar.getInstance(); - cal.clear(); - cal.set(year, 11, 31, 23, 59, 59); - - return cal.getTime(); - } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : diff -r 42076d94977e -r 45cced06490c backend/src/main/java/org/dive4elements/river/importer/parsers/PorosityParser.java --- a/backend/src/main/java/org/dive4elements/river/importer/parsers/PorosityParser.java Wed May 21 11:43:10 2014 +0200 +++ b/backend/src/main/java/org/dive4elements/river/importer/parsers/PorosityParser.java Mon Jun 30 11:29:45 2014 +0200 @@ -12,6 +12,7 @@ import org.dive4elements.river.importer.ImportPorosity; import org.dive4elements.river.importer.ImportPorosityValue; import org.dive4elements.river.importer.ImportTimeInterval; +import org.dive4elements.river.utils.DateUtil; import java.io.File; import java.io.IOException; @@ -38,7 +39,7 @@ NumberFormat.getInstance(DEFAULT_LOCALE); public static final Pattern META_DEPTH = - Pattern.compile("^Tiefe: (\\w++)-(\\w++)( (\\w++))?.*"); + Pattern.compile("^Tiefe: (\\d++)-(\\d++).*"); public static final Pattern META_TIMEINTERVAL = Pattern.compile("^Zeitraum: (\\d{4})-(\\d{4}).*"); @@ -56,7 +57,7 @@ @Override public void parse(File file) throws IOException { - currentDescription = file.getName(); + currentDescription = file.getName().replaceAll("\\.csv", ""); super.parse(file); } @@ -110,8 +111,8 @@ int lower = Integer.valueOf(lo); int upper = Integer.valueOf(up); - Date fromYear = LineParser.getStartDateFromYear(lower); - Date toYear = LineParser.getEndDateFromYear(upper); + Date fromYear = DateUtil.getStartDateFromYear(lower); + Date toYear = DateUtil.getEndDateFromYear(upper); current.setTimeInterval(new ImportTimeInterval(fromYear, toYear)); } diff -r 42076d94977e -r 45cced06490c backend/src/main/java/org/dive4elements/river/importer/parsers/SQRelationParser.java --- a/backend/src/main/java/org/dive4elements/river/importer/parsers/SQRelationParser.java Wed May 21 11:43:10 2014 +0200 +++ b/backend/src/main/java/org/dive4elements/river/importer/parsers/SQRelationParser.java Mon Jun 30 11:29:45 2014 +0200 @@ -22,6 +22,7 @@ import org.dive4elements.river.importer.ImportSQRelation; import org.dive4elements.river.importer.ImportSQRelationValue; import org.dive4elements.river.importer.ImportTimeInterval; +import org.dive4elements.river.utils.DateUtil; public class SQRelationParser extends LineParser { @@ -99,8 +100,8 @@ int high = nf.parse(hi).intValue(); current.setTimeInterval(new ImportTimeInterval( - getStartDateFromYear(low), - getEndDateFromYear(high) + DateUtil.getStartDateFromYear(low), + DateUtil.getEndDateFromYear(high) )); } catch (ParseException nfe) { diff -r 42076d94977e -r 45cced06490c backend/src/main/java/org/dive4elements/river/importer/parsers/SedimentDensityParser.java --- a/backend/src/main/java/org/dive4elements/river/importer/parsers/SedimentDensityParser.java Wed May 21 11:43:10 2014 +0200 +++ b/backend/src/main/java/org/dive4elements/river/importer/parsers/SedimentDensityParser.java Mon Jun 30 11:29:45 2014 +0200 @@ -37,7 +37,7 @@ NumberFormat.getInstance(DEFAULT_LOCALE); public static final Pattern META_DEPTH = - Pattern.compile("^Tiefe: (\\w++)-(\\w++)( (\\w++))?.*"); + Pattern.compile("^Tiefe: (\\d++)-(\\d++).*"); public static final Pattern META_YEAR = Pattern.compile("^Jahr: (\\d{4}).*"); diff -r 42076d94977e -r 45cced06490c backend/src/main/java/org/dive4elements/river/importer/parsers/SedimentYieldParser.java --- a/backend/src/main/java/org/dive4elements/river/importer/parsers/SedimentYieldParser.java Wed May 21 11:43:10 2014 +0200 +++ b/backend/src/main/java/org/dive4elements/river/importer/parsers/SedimentYieldParser.java Mon Jun 30 11:29:45 2014 +0200 @@ -27,6 +27,7 @@ import org.dive4elements.river.importer.ImportTimeInterval; import org.dive4elements.river.importer.ImportUnit; import org.dive4elements.river.model.GrainFraction; +import org.dive4elements.river.utils.DateUtil; /** Parses Sediment Yield files. */ @@ -190,7 +191,7 @@ String newLine = line.replace(FRAKTION_START, "").trim(); if (newLine.length() == 0) { log.debug("Found total grain fraction."); - this.grainFraction = new ImportGrainFraction(GrainFraction.TOTAL); + this.grainFraction = new ImportGrainFraction(GrainFraction.UNKNOWN); return true; } @@ -275,8 +276,8 @@ int yearB = nf.parse(a.group(2)).intValue(); return new ImportTimeInterval( - getStartDateFromYear(yearA), - getEndDateFromYear(yearB) + DateUtil.getStartDateFromYear(yearA), + DateUtil.getEndDateFromYear(yearB) ); } @@ -284,7 +285,7 @@ if (b.matches()) { int year = nf.parse(b.group(1)).intValue(); - return new ImportTimeInterval(getStartDateFromYear(year)); + return new ImportTimeInterval(DateUtil.getStartDateFromYear(year)); } log.warn("SYP: Unknown time interval string: '" + column + "'"); @@ -372,8 +373,7 @@ } log.warn("SYP: Unknown grain fraction: '" + gfStr + "'"); - - return null; + return new ImportGrainFraction(GrainFraction.UNKNOWN); } @@ -402,7 +402,7 @@ } else { log.warn("SYP: Unknown grain fraction '" + filename + "'"); - return "unknown"; + return GrainFraction.UNKNOWN; } } diff -r 42076d94977e -r 45cced06490c backend/src/main/java/org/dive4elements/river/importer/parsers/WaterlevelDifferencesParser.java --- a/backend/src/main/java/org/dive4elements/river/importer/parsers/WaterlevelDifferencesParser.java Wed May 21 11:43:10 2014 +0200 +++ b/backend/src/main/java/org/dive4elements/river/importer/parsers/WaterlevelDifferencesParser.java Mon Jun 30 11:29:45 2014 +0200 @@ -27,6 +27,7 @@ import org.dive4elements.river.importer.ImportWstQRange; import org.dive4elements.river.importer.ImportWstColumn; import org.dive4elements.river.importer.ImportWstColumnValue; +import org.dive4elements.river.utils.DateUtil; /** @@ -102,8 +103,8 @@ // For all differences columns, add a single Q-Range with // -1. // Expand range to minimal length in case it would be 0 - // TODO: should otherwise be extended to - // (first station of next range - INTERVAL_GAP), + // TODO: should otherwise be extended to + // (first station of next range - INTERVAL_GAP), // assuming always ascending stations for (ImportWstColumn column: columns) { List cValues = column.getColumnValues(); @@ -199,8 +200,8 @@ int startYear = Integer.parseInt(m.group(1)); int endYear = Integer.parseInt(m.group(2)); ImportTimeInterval time = new ImportTimeInterval( - getStartDateFromYear(startYear), - getEndDateFromYear(endYear) + DateUtil.getStartDateFromYear(startYear), + DateUtil.getEndDateFromYear(endYear) ); column.setTimeInterval(time); } else { diff -r 42076d94977e -r 45cced06490c backend/src/main/java/org/dive4elements/river/importer/parsers/WaterlevelParser.java --- a/backend/src/main/java/org/dive4elements/river/importer/parsers/WaterlevelParser.java Wed May 21 11:43:10 2014 +0200 +++ b/backend/src/main/java/org/dive4elements/river/importer/parsers/WaterlevelParser.java Mon Jun 30 11:29:45 2014 +0200 @@ -28,6 +28,7 @@ import org.dive4elements.river.importer.ImportWstColumn; import org.dive4elements.river.importer.ImportWstColumnValue; import org.dive4elements.river.importer.ImportWstQRange; +import org.dive4elements.river.utils.DateUtil; /** @@ -102,8 +103,8 @@ int startYear = Integer.parseInt(m.group(1)); int endYear = Integer.parseInt(m.group(2)); ImportTimeInterval time = new ImportTimeInterval( - getStartDateFromYear(startYear), - getEndDateFromYear(endYear) + DateUtil.getStartDateFromYear(startYear), + DateUtil.getEndDateFromYear(endYear) ); column.setTimeInterval(time); } else { @@ -121,12 +122,12 @@ List cValues = 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), + // 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() + currentRange.setB(new BigDecimal(lastStation.doubleValue() + INTERVAL_GAP)); } else { diff -r 42076d94977e -r 45cced06490c backend/src/main/java/org/dive4elements/river/importer/parsers/WstParser.java --- a/backend/src/main/java/org/dive4elements/river/importer/parsers/WstParser.java Wed May 21 11:43:10 2014 +0200 +++ b/backend/src/main/java/org/dive4elements/river/importer/parsers/WstParser.java Mon Jun 30 11:29:45 2014 +0200 @@ -152,7 +152,7 @@ boolean columnHeaderChecked = false; - /* Default string for altitude reference + /* Default string for altitude reference * if none is found in WST-file. * Use in case no unit comment is found in file */ String einheit = "m ü. unbekannte Referenz"; @@ -343,10 +343,10 @@ } // check consistence of station ordering in file - if (kmHist2 != null && + if (kmHist2 != null && kmHist2.compareTo(kmHist1) != kmHist1.compareTo(kaem)) { - throw new ParseException("WST: Stations in " + file + - " near line " + in.getLineNumber() + + throw new ParseException("WST: Stations in " + file + + " near line " + in.getLineNumber() + " not ordered. File rejected."); } @@ -381,7 +381,7 @@ i, i+colNaWidths[j]).trim(); } } - else { // fetch column names from non-comment header line + else { // fetch column names from non-comment header line // (above first Qs) // first column begins at position 8 in line for (int i = 8, col = 0; i < input.length(); i += 9) { @@ -389,7 +389,7 @@ // but the last one may be shorter if (col < lsBezeichner.length) { lsBezeichner[col++] = - input.substring(i, + input.substring(i, Math.min(i + 9, input.length())).trim(); } if (col == lsBezeichner.length) { @@ -406,7 +406,7 @@ } wst.setUnit(new ImportUnit(einheit)); - // add Q-ranges obtained from previous lines + // add Q-ranges obtained from previous lines // in case there was no further Q-line // but only if there were values following the last Q-line if (minKm != MAX_RANGE && maxKm != MIN_RANGE) { @@ -535,7 +535,7 @@ if (pos >= line.length()) { break; } - strings.add(line.substring(pos, + strings.add(line.substring(pos, Math.min(pos + 8, line.length()))); } diff -r 42076d94977e -r 45cced06490c backend/src/main/java/org/dive4elements/river/model/BedHeightEpoch.java --- a/backend/src/main/java/org/dive4elements/river/model/BedHeightEpoch.java Wed May 21 11:43:10 2014 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,219 +0,0 @@ -/* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde - * Software engineering by Intevation GmbH - * - * This file is Free Software under the GNU AGPL (>=v3) - * and comes with ABSOLUTELY NO WARRANTY! Check out the - * documentation coming with Dive4Elements River for details. - */ - -package org.dive4elements.river.model; - -import java.io.Serializable; - -import java.util.ArrayList; -import java.util.List; - -import javax.persistence.Entity; -import javax.persistence.Id; -import javax.persistence.Table; -import javax.persistence.GeneratedValue; -import javax.persistence.Column; -import javax.persistence.SequenceGenerator; -import javax.persistence.GenerationType; -import javax.persistence.JoinColumn; -import javax.persistence.OneToOne; -import javax.persistence.OneToMany; - -import org.hibernate.Session; -import org.hibernate.Query; - -import org.dive4elements.river.backend.SessionHolder; - - -@Entity -@Table(name = "bed_height_epoch") -public class BedHeightEpoch implements Serializable { - - private Integer id; - - private River river; - - private TimeInterval timeInterval; - - private ElevationModel curElevationModel; - private ElevationModel oldElevationModel; - - private Range range; - - private String evaluationBy; - private String description; - - private List values; - - - public BedHeightEpoch() { - } - - - public BedHeightEpoch( - River river, - TimeInterval timeInterval, - Range range, - ElevationModel curElevationModel, - ElevationModel oldElevationModel, - String evaluationBy, - String description - ) { - this.river = river; - this.timeInterval = timeInterval; - this.range = range; - this.curElevationModel = curElevationModel; - this.oldElevationModel = oldElevationModel; - this.evaluationBy = evaluationBy; - this.description = description; - this.values = new ArrayList(); - } - - - @Id - @SequenceGenerator( - name = "SEQUENCE_BED_HEIGHT_EPOCH_ID_SEQ", - sequenceName = "BED_HEIGHT_EPOCH_ID_SEQ", - allocationSize = 1) - @GeneratedValue( - strategy = GenerationType.SEQUENCE, - generator = "SEQUENCE_BED_HEIGHT_EPOCH_ID_SEQ") - @Column(name = "id") - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - @OneToOne - @JoinColumn(name = "river_id" ) - public River getRiver() { - return river; - } - - public void setRiver(River river) { - this.river = river; - } - - @OneToOne - @JoinColumn(name = "time_interval_id") - public TimeInterval getTimeInterval() { - return timeInterval; - } - - public void setTimeInterval(TimeInterval timeInterval) { - this.timeInterval = timeInterval; - } - - @OneToOne - @JoinColumn(name = "cur_elevation_model_id") - public ElevationModel getCurElevationModel() { - return curElevationModel; - } - - public void setCurElevationModel(ElevationModel curElevationModel) { - this.curElevationModel = curElevationModel; - } - - @OneToOne - @JoinColumn(name = "old_elevation_model_id") - public ElevationModel getOldElevationModel() { - return oldElevationModel; - } - - public void setOldElevationModel(ElevationModel oldElevationModel) { - this.oldElevationModel = oldElevationModel; - } - - @OneToOne - @JoinColumn(name = "range_id") - public Range getRange() { - return range; - } - - public void setRange(Range range) { - this.range = range; - } - - @Column(name = "evaluation_by") - public String getEvaluationBy() { - return evaluationBy; - } - - public void setEvaluationBy(String evaluationBy) { - this.evaluationBy = evaluationBy; - } - - @Column(name = "description") - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - @OneToMany - @JoinColumn(name = "bed_height_epoch_id") - public List getValues() { - return values; - } - - public void setValues(List values) { - this.values = values; - } - - - public static List getBedHeightEpochs( - River river, - double kmLo, - double kmHi - ) { - Session session = SessionHolder.HOLDER.get(); - - Query query = session.createQuery( - "from BedHeightEpoch where river=:river"); - - query.setParameter("river", river); - - // TODO Do km range filtering in SQL statement - - List epochs = query.list(); - List good = new ArrayList(); - - OUTER: for (BedHeightEpoch e: epochs) { - for (BedHeightEpochValue value: e.getValues()) { - double station = value.getStation().doubleValue(); - - if (station >= kmLo && station <= kmHi) { - good.add(e); - continue OUTER; - } - } - } - - return good; - } - - - public static BedHeightEpoch getBedHeightEpochById(int id) { - Session session = SessionHolder.HOLDER.get(); - - Query query = session.createQuery( - "from BedHeightEpoch where id=:id"); - - query.setParameter("id", id); - - List singles = query.list(); - - return singles != null ? singles.get(0) : null; - } -} -// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : diff -r 42076d94977e -r 45cced06490c backend/src/main/java/org/dive4elements/river/model/BedHeightEpochValue.java --- a/backend/src/main/java/org/dive4elements/river/model/BedHeightEpochValue.java Wed May 21 11:43:10 2014 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,127 +0,0 @@ -/* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde - * Software engineering by Intevation GmbH - * - * This file is Free Software under the GNU AGPL (>=v3) - * and comes with ABSOLUTELY NO WARRANTY! Check out the - * documentation coming with Dive4Elements River for details. - */ - -package org.dive4elements.river.model; - -import java.util.List; - -import java.io.Serializable; -import java.math.BigDecimal; - -import javax.persistence.Entity; -import javax.persistence.Id; -import javax.persistence.Table; -import javax.persistence.GeneratedValue; -import javax.persistence.Column; -import javax.persistence.SequenceGenerator; -import javax.persistence.GenerationType; -import javax.persistence.JoinColumn; -import javax.persistence.OneToOne; - -import org.apache.log4j.Logger; - -import org.hibernate.Session; -import org.hibernate.Query; - -import org.dive4elements.river.backend.SessionHolder; - - -@Entity -@Table(name = "bed_height_epoch_values") -public class BedHeightEpochValue -implements Serializable -{ - private static Logger logger = - Logger.getLogger(BedHeightEpochValue.class); - - private Integer id; - - private BedHeightEpoch bedHeight; - - private BigDecimal station; - private BigDecimal height; - - - public BedHeightEpochValue() { - } - - public BedHeightEpochValue( - BedHeightEpoch bedHeight, - BigDecimal station, - BigDecimal height - ) { - this.bedHeight = bedHeight; - this.station = station; - this.height = height; - } - - @Id - @SequenceGenerator( - name = "SEQUENCE_BED_EPOCH_VALUE_ID_SEQ", - sequenceName = "BED_EPOCH_VALUES_ID_SEQ", - allocationSize = 1) - @GeneratedValue( - strategy = GenerationType.SEQUENCE, - generator = "SEQUENCE_BED_EPOCH_VALUE_ID_SEQ") - @Column(name = "id") - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - @OneToOne - @JoinColumn(name = "bed_height_epoch_id" ) - public BedHeightEpoch getBedHeight() { - return bedHeight; - } - - public void setBedHeight(BedHeightEpoch bedHeight) { - this.bedHeight = bedHeight; - } - - @Column(name = "station") - public BigDecimal getStation() { - return station; - } - - public void setStation(BigDecimal station) { - this.station = station; - } - - @Column(name = "height") - public BigDecimal getHeight() { - return height; - } - - public void setHeight(BigDecimal height) { - this.height = height; - } - - - public static List getBedHeightEpochValues( - BedHeightEpoch epoch, - double kmLo, - double kmHi - ) { - Session session = SessionHolder.HOLDER.get(); - - Query query = session.createQuery( - "from BedHeightEpochValue where bedHeight=:epoch " + - " and station >= :kmLo and station <= :kmHi"); - - query.setParameter("epoch", epoch); - query.setParameter("kmLo", new BigDecimal(kmLo)); - query.setParameter("kmHi", new BigDecimal(kmHi)); - - return query.list(); - } -} -// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : diff -r 42076d94977e -r 45cced06490c backend/src/main/java/org/dive4elements/river/model/GrainFraction.java --- a/backend/src/main/java/org/dive4elements/river/model/GrainFraction.java Wed May 21 11:43:10 2014 +0200 +++ b/backend/src/main/java/org/dive4elements/river/model/GrainFraction.java Mon Jun 30 11:29:45 2014 +0200 @@ -33,6 +33,7 @@ public static final String SUSP_SAND = "susp_sand"; public static final String SUSP_SAND_BED = "susp_sand_bed"; public static final String SUSPENDED_SEDIMENT = "suspended_sediment"; + public static final String UNKNOWN = "unknown"; private static Logger logger = Logger.getLogger(GrainFraction.class); diff -r 42076d94977e -r 45cced06490c backend/src/main/java/org/dive4elements/river/utils/DateUtil.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/backend/src/main/java/org/dive4elements/river/utils/DateUtil.java Mon Jun 30 11:29:45 2014 +0200 @@ -0,0 +1,37 @@ +/* Copyright (C) 2014 by Bundesanstalt für Gewässerkunde + * Software engineering by Intevation GmbH + * + * This file is Free Software under the GNU AGPL (>=v3) + * and comes with ABSOLUTELY NO WARRANTY! Check out the + * documentation coming with Dive4Elements River for details. + */ + +package org.dive4elements.river.utils; + +import java.util.Date; +import java.util.Calendar; + +public final class DateUtil { + + private DateUtil() { + } + + /** Create Date on first moment (1st jan) of given year. */ + public static Date getStartDateFromYear(int year) { + Calendar cal = Calendar.getInstance(); + cal.clear(); + cal.set(year, 0, 1, 0, 0, 0); + + return cal.getTime(); + } + + + /** Create Date on last moment (31st dec) of given year. */ + public static Date getEndDateFromYear(int year) { + Calendar cal = Calendar.getInstance(); + cal.clear(); + cal.set(year, 11, 31, 23, 59, 59); + + return cal.getTime(); + } +} diff -r 42076d94977e -r 45cced06490c contrib/make_flys_release/make_release.sh --- a/contrib/make_flys_release/make_release.sh Wed May 21 11:43:10 2014 +0200 +++ b/contrib/make_flys_release/make_release.sh Mon Jun 30 11:29:45 2014 +0200 @@ -65,7 +65,7 @@ # --seddb-pass Sediment db password. Default: $SEDDBPASS # --seddb-back Sediment db backend. Default: $SEDDBBACK TOMCAT_PORT=${TOMCAT_PORT:-8282} -MAPSERVER_URL=${MAPSERVER_URL:-http://flys-devel.intevation.de} +MAPSERVER_URL=${MAPSERVER_URL:-http://flys-devel.intevation.de/cgi-bin/flys} WIKI_URL=${WIKI_URL:-https://flys3-devel.bafg.de/wiki} # Prefix to FreeSans.ttf FONT_PATH=${FONT_PATH:-/opt/flys} @@ -264,6 +264,9 @@ fi cp -r $FLYS_SOURCE_DIR/OpenLayers-2.11 $FLYS_SOURCE_DIR/river/gwt-client/src/main/webapp/ +echo "INFO: Downloading smartGWT" +mvn com.isomorphic:isc-maven-plugin:install -Dproduct=SMARTGWT -Dlicense=LGPL -DbuildNumber=4.1p -DbuildDate=2014-06-17 -Dworkdir=$WORK_DIR + echo "INFO: compile and build sources" mvn -f $FLYS_SOURCE_DIR/framework/pom.xml clean compile package install mvn -f $FLYS_SOURCE_DIR/river/backend/pom.xml clean compile package install @@ -271,6 +274,9 @@ mvn -f $FLYS_SOURCE_DIR/http-client/pom.xml clean compile package install mvn -f $FLYS_SOURCE_DIR/river/gwt-client/pom.xml clean compile package +# remove unused Version of JFreeChart (it's a dependency of JasperReports +# that prevents diagram generation in D4E river) +rm $FLYS_SOURCE_DIR/river/artifacts/target/dependency/jfreechart-1.0.12.jar echo "INFO: copy dependencies and libs" cp $FLYS_SOURCE_DIR/framework/artifact-database/target/artifact-database-1.0-SNAPSHOT.jar $WORK_DIR/server/bin/lib/own/ @@ -321,10 +327,10 @@ sed -i "s/8181/$ARTIFACT_PORT/g" \ $WORK_DIR/server/conf/rest-server.xml -sed -i -e "s@http://yourhost:8081/@${MAPSERVER_URL}/@g" \ +sed -i -e "s@http://yourhost:8081/cgi-bin@${MAPSERVER_URL}-${VERSION}@g" \ $WORK_DIR/server/conf/floodmap.xml -sed -i -e "s@http://yourhost:8081/@${MAPSERVER_URL}/@g" \ +sed -i -e "s@http://yourhost:8081/cgi-bin@${MAPSERVER_URL}-${VERSION}@g" \ $WORK_DIR/server/conf/rivermap.xml sed -i -e "s@/usr/share/fonts/truetype/freefont@${FONT_PATH}@g" \ @@ -422,7 +428,7 @@ mv $WORK_DIR/server $WORK_DIR/client $WORK_DIR/flys-$VERSION cd $WORK_DIR tar cfz flys-$VERSION.tar.gz flys-$VERSION -echo "INFO: cleanup" +#echo "INFO: cleanup" #rm -r $WORK_DIR/flys-$VERSION echo "DONE: $WORK_DIR/flys-$VERSION.tar.gz" diff -r 42076d94977e -r 45cced06490c doc/INSTALL_DE --- a/doc/INSTALL_DE Wed May 21 11:43:10 2014 +0200 +++ b/doc/INSTALL_DE Mon Jun 30 11:29:45 2014 +0200 @@ -56,10 +56,22 @@ Installation von D4E-river aus Binärpaket ========================================= -Entpacken des Dive4Elements-river Installer-Pakets --------------------------------------------------- - $ tar -xzf d4e-river.tar.gz - @TODO: eventuell anpassen + Herunterladen von + - d4e-river-3.1.2.tar.bz2 + - d4river-3.1.2.war + + Als root-User: + # cd /opt/ + # tar xvjf d4e-river-3.1.2.tar.bz2 + # chown -R d4e d4e-river + + In das Verzeichnis /opt/d4e-river/dgm/ müssen noch die DGMs der + Demo-Daten kopiert werden. (s.u.) + + # mv d4river-3.1.2.war /var/lib/tomcat6/webapps/d4e-river.war + + Der Tomcat muss wie unten dokumentiert konfiguriert werden. + Gleiches gilt für die MapServer-Installation. Erfolgt die Installation von D4E-river aus den Binärpaketen, können die folgenden Schritte übersprungen werden. diff -r 42076d94977e -r 45cced06490c gwt-client/pom.xml --- a/gwt-client/pom.xml Wed May 21 11:43:10 2014 +0200 +++ b/gwt-client/pom.xml Mon Jun 30 11:29:45 2014 +0200 @@ -38,9 +38,9 @@ 2.5 - com.smartgwt - smartgwt - 3.0 + com.isomorphic.smartgwt.lgpl + smartgwt-lgpl + [4.1,5.0) org.dive4elements diff -r 42076d94977e -r 45cced06490c gwt-client/src/main/java/org/dive4elements/river/client/client/FLYSConstants.java --- a/gwt-client/src/main/java/org/dive4elements/river/client/client/FLYSConstants.java Wed May 21 11:43:10 2014 +0200 +++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/FLYSConstants.java Mon Jun 30 11:29:45 2014 +0200 @@ -108,6 +108,8 @@ String legend(); + String wms_legend(); + String chart_title(); String chart_subtitle(); @@ -610,6 +612,8 @@ String soundings_width(); + String porosities(); + String bed_difference_year(); String bed_difference_epoch(); @@ -1371,5 +1375,9 @@ String suggested_label(); String negative_values_not_allowed_for_to(); + + String analyzed_range(); + + String minfo_type(); } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : diff -r 42076d94977e -r 45cced06490c gwt-client/src/main/java/org/dive4elements/river/client/client/FLYSConstants.properties --- a/gwt-client/src/main/java/org/dive4elements/river/client/client/FLYSConstants.properties Wed May 21 11:43:10 2014 +0200 +++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/FLYSConstants.properties Mon Jun 30 11:29:45 2014 +0200 @@ -39,6 +39,7 @@ diagram = Chart axes = Axes legend = Legend +wms_legend= WMS Legend chart_title = Title chart_subtitle = Subtitle grid = Grid @@ -165,6 +166,8 @@ wq_value_q = Q [m\u00b3/s] river_km = River-Km uesk_profile_distance = Distance [m] +minfo_type = Type +analyzed_range = Analyzed Range wqTitle = Input for W/Q Data wqadaptedTitle = Input for W/Q Data @@ -260,6 +263,7 @@ bed_diameter = Bed Diameter soundings = Soundings soundings_width = Soundings Width +porosities = Porosity bed_difference_year = Bedheight Differences bed_difference_epoch = Epoch Bedheight Differences bed_difference_height_year = Bedheight Differences per year @@ -667,7 +671,7 @@ gauge_info_link = Gaugeinfo gauge_url = /PegelInfo/ gauge_river_url = /GewaesserInfo/ -gauge_curve_link = Dischargecurve/-table +gauge_curve_link = model dischargecurve/-table discharge_timeranges = DC-Timeranges discharge_chart = W/Q-Preview diff -r 42076d94977e -r 45cced06490c gwt-client/src/main/java/org/dive4elements/river/client/client/FLYSConstants_de.properties --- a/gwt-client/src/main/java/org/dive4elements/river/client/client/FLYSConstants_de.properties Wed May 21 11:43:10 2014 +0200 +++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/FLYSConstants_de.properties Mon Jun 30 11:29:45 2014 +0200 @@ -39,6 +39,7 @@ diagram = Diagramm axes = Achsen legend = Legende +wms_legend= WMS Legende chart_title = Titel chart_subtitle = Untertitel grid = Gitternetz @@ -81,6 +82,7 @@ cancelCalculationLabel = Aktuelle Berechnung abbrechen. calculationCanceled = Die Berechnung wurde abgebrochen. range = Bereich +analyzed_range = ausgewertete Strecke resultCount = Treffer bfg_id = BfG-ID start_year = Start @@ -142,6 +144,7 @@ riverside = Flussseite name = Name type = Typ +minfo_type = Aufnahmeart starttime = Reihe von stoptime = Reihe bis wq_waterlevel_label = Kennzeichnender Wassterstand @@ -261,6 +264,7 @@ bed_diameter = Sohldurchmesser soundings = Peilungen soundings_width = Gepeilte Breite +porosities = Porosit\u00e4t bed_difference_year = Sohlh\u00f6hendifferenz bed_difference_epoch = Sohlh\u00f6hendifferenz (Epoche) bed_difference_height_year = Sohlh\u00f6hendifferenz pro Jahr @@ -666,7 +670,7 @@ gauge_info_link = Pegelinfo gauge_url = /PegelInfo/ gauge_river_url = /GewaesserInfo/ -gauge_curve_link = Abflusskurve/-tafel +gauge_curve_link = Modell-Abflusskurve/-tafel discharge_timeranges = AK-Zeitr\u00e4ume discharge_chart = W/Q-Vorschau diff -r 42076d94977e -r 45cced06490c gwt-client/src/main/java/org/dive4elements/river/client/client/FLYSConstants_en.properties --- a/gwt-client/src/main/java/org/dive4elements/river/client/client/FLYSConstants_en.properties Wed May 21 11:43:10 2014 +0200 +++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/FLYSConstants_en.properties Mon Jun 30 11:29:45 2014 +0200 @@ -39,6 +39,7 @@ diagram = Chart axes = Axes legend = Legend +wms_legend= WMS Legend chart_title = Title chart_subtitle = Subtitle grid = Grid @@ -166,6 +167,9 @@ river_km = River-Km uesk_profile_distance = Distance [m] +minfo_type = Type +analyzed_range = Analyzed Range + wqTitle = Input for W/Q Data wqadaptedTitle = Input for W/Q Data noMainValueAtGauge = Selected main value not present at all gauges @@ -259,6 +263,7 @@ bed_diameter = Bed Diameter soundings = Soundings soundings_width = Soundings Width +porosities = Porosity bed_difference_year = Bedheight Differences bed_difference_epoch = Epoch Bedheight Differences bed_difference_height_year = Bedheight Difference per year @@ -641,7 +646,7 @@ gauge_info_link = Gaugeinfo gauge_url = /PegelInfo/ gauge_river_url = /GewaesserInfo/ -gauge_curve_link = Dischargecurve/-table +gauge_curve_link = model dischargecurve/-table discharge_timeranges = DC-Timeranges discharge_chart = W/Q-Preview diff -r 42076d94977e -r 45cced06490c gwt-client/src/main/java/org/dive4elements/river/client/client/ui/CollectionView.java --- a/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/CollectionView.java Wed May 21 11:43:10 2014 +0200 +++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/CollectionView.java Mon Jun 30 11:29:45 2014 +0200 @@ -513,7 +513,6 @@ if (export.getFacet("csv") != null) { hasCSV = true; - parameterList.contractInfoPanel(); } } } diff -r 42076d94977e -r 45cced06490c gwt-client/src/main/java/org/dive4elements/river/client/client/ui/DatacageWidget.java --- a/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/DatacageWidget.java Wed May 21 11:43:10 2014 +0200 +++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/DatacageWidget.java Mon Jun 30 11:29:45 2014 +0200 @@ -292,6 +292,20 @@ } + public List getPlainSelection() { + ListGridRecord [] selection = treeGrid.getSelectedRecords(); + List nodes = new ArrayList(); + if (selection != null) { + for (ListGridRecord record: selection) { + if (record instanceof TreeNode) { + nodes.add((TreeNode)record); + } + } + } + return nodes; + } + + /** * Returns the titles of selected items (if any). */ diff -r 42076d94977e -r 45cced06490c gwt-client/src/main/java/org/dive4elements/river/client/client/ui/GaugeTimeRangePanel.java --- a/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/GaugeTimeRangePanel.java Wed May 21 11:43:10 2014 +0200 +++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/GaugeTimeRangePanel.java Mon Jun 30 11:29:45 2014 +0200 @@ -295,9 +295,9 @@ }; - ListGridField addstart = new ListGridField ("", MESSAGES.from()); + ListGridField addstart = new ListGridField ("addstart", MESSAGES.from()); addstart.setType (ListGridFieldType.ICON); - addstart.setWidth (20); + addstart.setWidth (30); addstart.setCellIcon(baseUrl + MESSAGES.markerGreen()); addstart.addRecordClickHandler(new RecordClickHandler() { @Override @@ -312,9 +312,9 @@ } }); - ListGridField addend = new ListGridField ("", MESSAGES.to()); + ListGridField addend = new ListGridField ("addend", MESSAGES.to()); addend.setType (ListGridFieldType.ICON); - addend.setWidth (20); + addend.setWidth (30); addend.setCellIcon(baseUrl + MESSAGES.markerRed()); addend.addRecordClickHandler(new RecordClickHandler() { @Override diff -r 42076d94977e -r 45cced06490c gwt-client/src/main/java/org/dive4elements/river/client/client/ui/LinkSelection.java --- a/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/LinkSelection.java Wed May 21 11:43:10 2014 +0200 +++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/LinkSelection.java Mon Jun 30 11:29:45 2014 +0200 @@ -186,6 +186,7 @@ int counter = 0; for (DataItem item: d.getItems()) { HLayout row = new HLayout(); + row.setTitle(item.getLabel()); LinkItem link = new LinkItem("river"); link.setHoverDelay(0); link.setLinkTitle(item.getLabel()); @@ -312,7 +313,8 @@ private static void selectCallback(String name) { if (availableRiver(name)) { - trigger.trigger(name); + String river = riverList.get(name).getTitle(); + trigger.trigger(river); } } diff -r 42076d94977e -r 45cced06490c gwt-client/src/main/java/org/dive4elements/river/client/client/ui/LocationDistancePanel.java --- a/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/LocationDistancePanel.java Wed May 21 11:43:10 2014 +0200 +++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/LocationDistancePanel.java Mon Jun 30 11:29:45 2014 +0200 @@ -250,7 +250,7 @@ ListGridField addDistance = new ListGridField ("", ""); addDistance.setType (ListGridFieldType.ICON); - addDistance.setWidth (20); + addDistance.setWidth (30); addDistance.addRecordClickHandler (new RecordClickHandler () { @Override public void onRecordClick (RecordClickEvent e) { @@ -463,12 +463,12 @@ } }; - ListGridField addfrom = new ListGridField ("from", MESSAGES.from()); + ListGridField addfrom = new ListGridField ("fromIcon", MESSAGES.from()); addfrom.setType (ListGridFieldType.ICON); addfrom.setWidth (30); addfrom.setCellIcon(baseUrl + MESSAGES.markerGreen()); - ListGridField addto2 = new ListGridField ("to", MESSAGES.to()); + ListGridField addto2 = new ListGridField ("toIcon", MESSAGES.to()); addto2.setType (ListGridFieldType.ICON); addto2.setWidth (30); addto2.setCellIcon(baseUrl + MESSAGES.markerRed()); diff -r 42076d94977e -r 45cced06490c gwt-client/src/main/java/org/dive4elements/river/client/client/ui/LocationPicker.java --- a/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/LocationPicker.java Wed May 21 11:43:10 2014 +0200 +++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/LocationPicker.java Mon Jun 30 11:29:45 2014 +0200 @@ -156,13 +156,13 @@ locationTable.setEmptyMessage(MSG.empty_filter()); locationTable.setCanReorderFields(false); - ListGridField addLocation = new ListGridField ("", ""); + ListGridField addLocation = new ListGridField ("addlocation", ""); addLocation.setType (ListGridFieldType.ICON); - addLocation.setWidth (20); + addLocation.setWidth (30); addLocation.setCellIcon (baseUrl + MSG.markerGreen()); - ListGridField addTo = new ListGridField ("", ""); + ListGridField addTo = new ListGridField ("addto", ""); addTo.setType (ListGridFieldType.ICON); - addTo.setWidth (20); + addTo.setWidth (30); addTo.setCellIcon (baseUrl + MSG.markerRed()); ListGridField ldescr = new ListGridField("description", diff -r 42076d94977e -r 45cced06490c gwt-client/src/main/java/org/dive4elements/river/client/client/ui/MultiPeriodPanel.java --- a/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/MultiPeriodPanel.java Wed May 21 11:43:10 2014 +0200 +++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/MultiPeriodPanel.java Mon Jun 30 11:29:45 2014 +0200 @@ -11,6 +11,7 @@ import com.google.gwt.core.client.GWT; import com.google.gwt.i18n.client.DateTimeFormat; +import com.smartgwt.client.data.DateRange; import com.smartgwt.client.types.ListGridFieldType; import com.smartgwt.client.widgets.Button; import com.smartgwt.client.widgets.Canvas; @@ -70,8 +71,9 @@ add.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent ce) { - Date f = inputPanel.getFromDate(); - Date t = inputPanel.getToDate(); + DateRange range = inputPanel.getValue(); + Date f = range.getStartDate(); + Date t = range.getEndDate(); if (f == null || t == null) { return; } diff -r 42076d94977e -r 45cced06490c gwt-client/src/main/java/org/dive4elements/river/client/client/ui/ParameterList.java --- a/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/ParameterList.java Wed May 21 11:43:10 2014 +0200 +++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/ParameterList.java Mon Jun 30 11:29:45 2014 +0200 @@ -11,6 +11,7 @@ import com.google.gwt.core.client.GWT; import com.google.gwt.user.client.rpc.AsyncCallback; +import com.smartgwt.client.types.Overflow; import com.smartgwt.client.types.VerticalAlignment; import com.smartgwt.client.types.VisibilityMode; import com.smartgwt.client.util.SC; @@ -225,6 +226,7 @@ stack.setHeight100(); stack.setCanResizeSections(true); stack.setVisibilityMode(VisibilityMode.MULTIPLE); + stack.setOverflow(Overflow.SCROLL); // This canvas is used to render helper widgets. final SectionStackSection helperSection = new SectionStackSection(); @@ -256,6 +258,7 @@ public void addMember(Canvas component) { super.addMember(component); tableSection.setExpanded(true); + stack.getSection(InfoPanel.SECTION_ID).setExpanded(false); } @Override @@ -979,12 +982,17 @@ GWT.log("ParameterList - showInfoPanel"); /* Don't add InfoPanel twice */ - SectionStackSection exists = stack.getSection(InfoPanel.SECTION_ID); - if (exists == null) { - stack.addSection(infoPanel.getSection(), 0); + SectionStackSection info = stack.getSection(InfoPanel.SECTION_ID); + if (info == null) { + info = new SectionStackSection(); + info.setTitle(infoPanel.getSectionTitle()); + info.setID(InfoPanel.SECTION_ID); + info.setName(InfoPanel.SECTION_ID); + info.setItems(infoPanel); + stack.addSection(info, 0); } - infoPanel.show(); + info.setExpanded(true); } private void hideInfoPanel() { @@ -1017,16 +1025,5 @@ hideInfoPanel(); } } - - /** - * Allow to close all folds of the info panel. - * This is necessary e.g. if a csv result should be shown. - */ - public void contractInfoPanel() { - if (infoPanel != null) { - infoPanel.contract(); - } - } - } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : diff -r 42076d94977e -r 45cced06490c gwt-client/src/main/java/org/dive4elements/river/client/client/ui/PeriodPanel.java --- a/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/PeriodPanel.java Wed May 21 11:43:10 2014 +0200 +++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/PeriodPanel.java Mon Jun 30 11:29:45 2014 +0200 @@ -11,6 +11,7 @@ import com.google.gwt.core.client.GWT; import com.google.gwt.i18n.client.DateTimeFormat; +import com.smartgwt.client.data.DateRange; import com.smartgwt.client.util.SC; import com.smartgwt.client.widgets.Canvas; import com.smartgwt.client.widgets.Label; @@ -182,8 +183,9 @@ protected boolean saveDateValues() { - Date st = inputPanel.getFromDate(); - Date en = inputPanel.getToDate(); + DateRange range = inputPanel.getValue(); + Date st = range.getStartDate(); + Date en = range.getEndDate(); if (st == null || en == null) { SC.warn(MSG.error_wrong_date()); return false; diff -r 42076d94977e -r 45cced06490c gwt-client/src/main/java/org/dive4elements/river/client/client/ui/ProjectList.java --- a/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/ProjectList.java Wed May 21 11:43:10 2014 +0200 +++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/ProjectList.java Mon Jun 30 11:29:45 2014 +0200 @@ -494,7 +494,7 @@ SC.warn(msg); ListGridRecord[] rs = grid.getRecords(); - rs[row] = (ListGridRecord) event.getOldRecord(); + rs[row] = (ListGridRecord) event.getOldValues(); grid.setRecords(rs); return; diff -r 42076d94977e -r 45cced06490c gwt-client/src/main/java/org/dive4elements/river/client/client/ui/RiverInfoPanel.java --- a/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/RiverInfoPanel.java Wed May 21 11:43:10 2014 +0200 +++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/RiverInfoPanel.java Mon Jun 30 11:29:45 2014 +0200 @@ -10,12 +10,11 @@ import com.google.gwt.core.client.GWT; import com.google.gwt.i18n.client.NumberFormat; -import com.google.gwt.user.client.ui.HorizontalPanel; -import com.google.gwt.user.client.ui.Label; -import com.google.gwt.user.client.ui.Widget; +import com.smartgwt.client.types.Alignment; +import com.smartgwt.client.types.VerticalAlignment; +import com.smartgwt.client.widgets.Label; import com.smartgwt.client.widgets.form.DynamicForm; - -import java.util.Iterator; +import com.smartgwt.client.widgets.layout.HLayout; import org.dive4elements.river.client.client.Config; import org.dive4elements.river.client.client.FLYS; @@ -26,7 +25,7 @@ * Panel to display information about a river. * @author Björn Ricks */ -public class RiverInfoPanel extends HorizontalPanel { +public class RiverInfoPanel extends HLayout { /** The flys instance */ protected FLYS flys; @@ -43,9 +42,9 @@ this.flys = flys; setStyleName("riverinfopanel"); - setHeight("" + HEIGHT + "px"); - setVerticalAlignment(ALIGN_MIDDLE); - + setHeight(HEIGHT + "px"); + setAlign(VerticalAlignment.CENTER); + setAlign(Alignment.LEFT); setRiverInfo(riverinfo); } @@ -54,7 +53,7 @@ NumberFormat nf = NumberFormat.getDecimalFormat(); - removeAllLabels(); + //removeAllLabels(); addLabel(riverinfo.getName(), false); @@ -101,7 +100,8 @@ DynamicForm infoLink = WikiLinks.linkDynamicForm(this.flys, wikiBaseUrl + url, MSG.gauge_river_info_link()); infoLink.setTop(5); - add(infoLink); + infoLink.setMargin(5); + addMember(infoLink); } public static int getStaticHeight() { @@ -112,21 +112,9 @@ } private void addLabel(String text, boolean wordwrap) { - Label label = new Label(text, wordwrap); - add(label); - setCellHeight(label, "" + HEIGHT + "px"); - } - - private void removeAllLabels() { - GWT.log("RiverInfoPanel - removeAllLabels"); - - Iterator it = this.iterator(); - while(it.hasNext()) { - it.next(); - it.remove(); - } - /* for (Widget wid: this) { */ - /* this.remove(wid); */ - /* } */ + Label label = new Label("" + text + ""); + label.setWrap(wordwrap); + label.setMargin(5); + addMember(label); } } diff -r 42076d94977e -r 45cced06490c gwt-client/src/main/java/org/dive4elements/river/client/client/ui/WikiLinks.java --- a/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/WikiLinks.java Wed May 21 11:43:10 2014 +0200 +++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/WikiLinks.java Mon Jun 30 11:29:45 2014 +0200 @@ -74,7 +74,9 @@ DynamicForm form = new DynamicForm(); LinkItem item = new LinkItem(quotedText); item.setShowTitle(false); + item.setLinkTitle(quotedText); item.setTarget(quotedUrl); + form.setItems(item); return form; } diff -r 42076d94977e -r 45cced06490c gwt-client/src/main/java/org/dive4elements/river/client/client/ui/WspDatacagePanel.java --- a/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/WspDatacagePanel.java Wed May 21 11:43:10 2014 +0200 +++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/WspDatacagePanel.java Mon Jun 30 11:29:45 2014 +0200 @@ -161,7 +161,7 @@ protected String createDataString(String artifact, Recommendation recommendation) { Facet f = null; - + // The filter will only be available or previous calculation artifacts. Filter filter = recommendation.getFilter(); diff -r 42076d94977e -r 45cced06490c gwt-client/src/main/java/org/dive4elements/river/client/client/ui/map/ElevationWindow.java --- a/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/map/ElevationWindow.java Wed May 21 11:43:10 2014 +0200 +++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/map/ElevationWindow.java Mon Jun 30 11:29:45 2014 +0200 @@ -219,7 +219,7 @@ catch (NumberFormatException nfe) { SC.warn(MSG.ele_window_format_error() + " " + z); - PointRecord old = (PointRecord) evt.getOldRecord(); + PointRecord old = (PointRecord) evt.getOldValues(); ListGridRecord[] records = grid.getRecords(); records[evt.getRowNum()] = old; diff -r 42076d94977e -r 45cced06490c gwt-client/src/main/java/org/dive4elements/river/client/client/ui/map/LegendWindow.java --- a/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/map/LegendWindow.java Wed May 21 11:43:10 2014 +0200 +++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/map/LegendWindow.java Mon Jun 30 11:29:45 2014 +0200 @@ -10,6 +10,8 @@ import java.util.List; +import com.google.gwt.core.client.GWT; + import com.smartgwt.client.types.ImageStyle; import com.smartgwt.client.types.VerticalAlignment; import com.smartgwt.client.widgets.Canvas; @@ -19,6 +21,8 @@ import com.smartgwt.client.widgets.layout.HLayout; import com.smartgwt.client.widgets.layout.VLayout; +import org.dive4elements.river.client.client.FLYSConstants; + import org.dive4elements.river.client.shared.MapUtils; import org.dive4elements.river.client.shared.model.AttributedTheme; import org.dive4elements.river.client.shared.model.Theme; @@ -27,10 +31,13 @@ public class LegendWindow extends Window { + protected FLYSConstants MSG = GWT.create(FLYSConstants.class); + private ThemeList themeList; private VLayout legendContainer; + public LegendWindow(ThemeList themeList) { this.themeList = themeList; this.legendContainer = new VLayout(); @@ -92,7 +99,7 @@ legendContainer.setLayoutAlign(VerticalAlignment.TOP); legendContainer.setAlign(VerticalAlignment.CENTER); - setTitle("WMS Legend"); + setTitle(MSG.wms_legend()); setAutoSize(true); setCanDragResize(true); setIsModal(false); diff -r 42076d94977e -r 45cced06490c gwt-client/src/main/java/org/dive4elements/river/client/client/ui/minfo/BedHeightsDatacagePanel.java --- a/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/minfo/BedHeightsDatacagePanel.java Wed May 21 11:43:10 2014 +0200 +++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/minfo/BedHeightsDatacagePanel.java Mon Jun 30 11:29:45 2014 +0200 @@ -14,14 +14,17 @@ import com.smartgwt.client.data.Record; +import com.smartgwt.client.util.SC; +import com.smartgwt.client.widgets.Button; import com.smartgwt.client.widgets.Canvas; import com.smartgwt.client.widgets.events.ClickEvent; - +import com.smartgwt.client.widgets.events.ClickHandler; import com.smartgwt.client.widgets.grid.ListGridRecord; import com.smartgwt.client.widgets.layout.HLayout; import com.smartgwt.client.widgets.layout.VLayout; +import com.smartgwt.client.widgets.tree.TreeNode; import org.dive4elements.river.client.client.Config; import org.dive4elements.river.client.client.FLYSConstants; @@ -35,6 +38,7 @@ import org.dive4elements.river.client.client.ui.DatacagePairWidget; import org.dive4elements.river.client.client.ui.DatacageTwinPanel; +import org.dive4elements.river.client.client.ui.DatacageWidget; import org.dive4elements.river.client.client.ui.RecommendationPairRecord; import org.dive4elements.river.client.shared.model.Artifact; @@ -42,6 +46,7 @@ import org.dive4elements.river.client.shared.model.Data; import org.dive4elements.river.client.shared.model.DataItem; import org.dive4elements.river.client.shared.model.DataList; +import org.dive4elements.river.client.shared.model.ToLoad; import org.dive4elements.river.client.shared.model.Recommendation.Facet; import org.dive4elements.river.client.shared.model.Recommendation.Filter; @@ -80,6 +85,7 @@ RemoveArtifactServiceAsync removeArtifactService = GWT.create( org.dive4elements.river.client.client.services.RemoveArtifactService.class); + protected DatacageWidget datacage; public BedHeightsDatacagePanel(User user) { super(user); @@ -120,22 +126,25 @@ public Canvas create(DataList dataList) { GWT.log("createData()"); - Data data = dataList.get(0); - DataItem[] items = data.getItems(); - - String value = items[0].getStringValue(); - - String filter = "minfo-heights"; - if (value.equals("epoch")) { - filter = "minfo-heights-epoch"; - } + String filter = "minfo-heights-diff"; Canvas widget = createWidget(); Canvas submit = getNextButton(); + datacage = new DatacageWidget( + this.artifact, user, filter, "load-system:true", false); + + Button plusBtn = new Button(MSG.datacage_add_pair()); + plusBtn.setAutoFit(true); + plusBtn.addClickHandler(new ClickHandler() { + @Override + public void onClick(ClickEvent event) { + plusClicked(); + } + }); VLayout layout = new VLayout(); - HLayout helperLayout = new HLayout(); - helperLayout.addMember(new DatacagePairWidget(this.artifact, - user, filter, differencesList)); + VLayout helperLayout = new VLayout(); + helperLayout.addMember(datacage); + helperLayout.addMember(plusBtn); layout.addMember(widget); layout.addMember(submit); @@ -314,5 +323,53 @@ + recommendation.getDisplayName() + "]"; } } + + /** + * Callback for add-button. + * Fires to load for every selected element and handler. + */ + public void plusClicked() { + List selection = datacage.getPlainSelection(); + + if (selection == null || selection.isEmpty()) { + SC.say(MSG.warning()); + return; + } + + for (TreeNode node : selection) { + ToLoad toLoad1 = new ToLoad(); + ToLoad toLoad2 = new ToLoad(); + + String factory = node.getAttribute("factory"); + if (factory != null) { // we need at least a factory + String artifact = node.getAttribute("artifact-id"); + String out = node.getAttribute("out"); + String name = node.getAttribute("facet"); + String ids = node.getAttribute("ids"); + String info = node.getAttribute("info"); + String targetOut = node.getAttribute("target_out"); + + String[] splitIds = ids.split("#"); + String[] splitInfo = info.split("#"); + toLoad1.add(artifact, + factory, + out, + name, + splitIds[0], + splitInfo[0], + targetOut); + toLoad2.add(artifact, + factory, + out, + name, + splitIds[1], + splitInfo[1], + targetOut); + } + differencesList.addData(new RecommendationPairRecord( + toLoad1.toRecommendations().get(0), + toLoad2.toRecommendations().get(0))); + } + } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : diff -r 42076d94977e -r 45cced06490c gwt-client/src/main/java/org/dive4elements/river/client/client/ui/minfo/SedLoadEpochPanel.java --- a/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/minfo/SedLoadEpochPanel.java Wed May 21 11:43:10 2014 +0200 +++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/minfo/SedLoadEpochPanel.java Mon Jun 30 11:29:45 2014 +0200 @@ -93,7 +93,7 @@ catch(NumberFormatException nfe) { return; } - Record r = new Record(); + ListGridRecord r = new ListGridRecord(); r.setAttribute("from", v1); r.setAttribute("to", v2); elements.addData(r); diff -r 42076d94977e -r 45cced06490c gwt-client/src/main/java/org/dive4elements/river/client/client/ui/range/LocationsTable.java --- a/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/range/LocationsTable.java Wed May 21 11:43:10 2014 +0200 +++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/range/LocationsTable.java Mon Jun 30 11:29:45 2014 +0200 @@ -44,12 +44,12 @@ setEmptyMessage(MSG.empty_filter()); setCanReorderFields(false); - ListGridField addfrom = new ListGridField ("from", MSG.from()); + ListGridField addfrom = new ListGridField ("fromIcon", MSG.from()); addfrom.setType(ListGridFieldType.ICON); addfrom.setWidth(30); addfrom.setCellIcon(baseUrl + MSG.markerGreen()); - ListGridField addto = new ListGridField("to", MSG.to()); + ListGridField addto = new ListGridField("toIcon", MSG.to()); addto.setType(ListGridFieldType.ICON); addto.setWidth(30); addto.setCellIcon(baseUrl + MSG.markerRed()); diff -r 42076d94977e -r 45cced06490c gwt-client/src/main/java/org/dive4elements/river/client/client/ui/stationinfo/GaugeInfoPanel.java --- a/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/stationinfo/GaugeInfoPanel.java Wed May 21 11:43:10 2014 +0200 +++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/stationinfo/GaugeInfoPanel.java Mon Jun 30 11:29:45 2014 +0200 @@ -9,10 +9,11 @@ package org.dive4elements.river.client.client.ui.stationinfo; import com.google.gwt.core.client.GWT; -import com.google.gwt.event.dom.client.ClickEvent; -import com.google.gwt.event.dom.client.ClickHandler; +import com.smartgwt.client.widgets.form.DynamicForm; +import com.smartgwt.client.widgets.form.fields.events.ClickEvent; +import com.smartgwt.client.widgets.form.fields.events.ClickHandler; +import com.smartgwt.client.widgets.form.fields.LinkItem; import com.google.gwt.i18n.client.NumberFormat; -import com.google.gwt.user.client.ui.Anchor; import com.smartgwt.client.widgets.layout.HLayout; import com.smartgwt.client.widgets.layout.VLayout; import com.smartgwt.client.widgets.Label; @@ -83,7 +84,9 @@ } HLayout line5 = new HLayout(); - line5.addMember(new GaugeMainValueAnchor(flys, gauge)); + DynamicForm line5Form = new DynamicForm(); + line5Form.setItems(new GaugeMainValueAnchor(flys, gauge)); + line5.addMember(line5Form); if (minw != null && maxw != null) { grid.addMember(line1); @@ -105,16 +108,17 @@ * Clickable anchor that asks application to show window with * main values for gauge. */ - class GaugeMainValueAnchor extends Anchor implements ClickHandler { + class GaugeMainValueAnchor extends LinkItem implements ClickHandler { private FLYS flys; private GaugeInfo gauge; public GaugeMainValueAnchor(FLYS flys, GaugeInfo gauge) { - super(MSG.show_mainvalues()); + super(); + this.setLinkTitle(MSG.show_mainvalues()); + this.setShowTitle(false); this.flys = flys; this.gauge = gauge; - this.setHeight("5"); addClickHandler(this); } diff -r 42076d94977e -r 45cced06490c gwt-client/src/main/java/org/dive4elements/river/client/client/ui/stationinfo/GaugeListGrid.java --- a/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/stationinfo/GaugeListGrid.java Wed May 21 11:43:10 2014 +0200 +++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/stationinfo/GaugeListGrid.java Mon Jun 30 11:29:45 2014 +0200 @@ -304,7 +304,7 @@ @Override protected Canvas getExpandPanel(ListGridRecord record) { GaugeRecord item = (GaugeRecord)record; - return new WidgetCanvas(new GaugeInfoPanel(item, flys)); + return new GaugeInfoPanel(item, flys); } /** diff -r 42076d94977e -r 45cced06490c gwt-client/src/main/java/org/dive4elements/river/client/client/ui/stationinfo/GaugePanel.java --- a/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/stationinfo/GaugePanel.java Wed May 21 11:43:10 2014 +0200 +++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/stationinfo/GaugePanel.java Mon Jun 30 11:29:45 2014 +0200 @@ -42,7 +42,6 @@ * Loads the river info and renders it afterwards. */ public void refresh() { - contract(); riverInfoService.getGauges(this.river, new AsyncCallback() { @Override @@ -54,7 +53,6 @@ public void onSuccess(RiverInfo riverinfo) { GWT.log("Loaded river info"); render(riverinfo); - expand(); } }); } diff -r 42076d94977e -r 45cced06490c gwt-client/src/main/java/org/dive4elements/river/client/client/ui/stationinfo/InfoListGrid.java --- a/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/stationinfo/InfoListGrid.java Wed May 21 11:43:10 2014 +0200 +++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/stationinfo/InfoListGrid.java Mon Jun 30 11:29:45 2014 +0200 @@ -79,10 +79,7 @@ @Override protected Canvas getExpansionComponent(ListGridRecord record) { - VLayout layout = new VLayout(); - layout.setPadding(5); - layout.addMember(this.getExpandPanel(record)); - return layout; + return this.getExpandPanel(record); } public abstract void open(); diff -r 42076d94977e -r 45cced06490c gwt-client/src/main/java/org/dive4elements/river/client/client/ui/stationinfo/InfoPanel.java --- a/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/stationinfo/InfoPanel.java Wed May 21 11:43:10 2014 +0200 +++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/stationinfo/InfoPanel.java Mon Jun 30 11:29:45 2014 +0200 @@ -11,8 +11,6 @@ import com.google.gwt.core.client.GWT; import com.smartgwt.client.types.Overflow; -import com.smartgwt.client.widgets.Canvas; -import com.smartgwt.client.widgets.layout.SectionStackSection; import com.smartgwt.client.widgets.layout.VLayout; import org.dive4elements.river.client.client.FLYS; import org.dive4elements.river.client.client.FLYSConstants; @@ -30,9 +28,6 @@ /** The instance of FLYS */ protected FLYS flys; - /** SectionStackSection where this InfoPanel belongs in*/ - protected SectionStackSection section; - /** Name of the river */ protected String river; @@ -49,20 +44,11 @@ public final static String SECTION_ID = "InfoPanelSection"; public InfoPanel(FLYS flys, InfoListGrid listgrid) { - SectionStackSection section = new SectionStackSection(); - section.setExpanded(false); - section.setTitle(getSectionTitle()); - section.setName(SECTION_ID); - section.setID(SECTION_ID); - setOverflow(Overflow.HIDDEN); setStyleName("infopanel"); this.flys = flys; - section.setHidden(true); - section.setItems(this); - this.section = section; this.listgrid = listgrid; this.addMember(listgrid); } @@ -96,59 +82,11 @@ this.listgrid.setRiverInfo(riverinfo); } - /** - * Hide the section stack section. - */ - @Override - public void hide() { - GWT.log("InfoPanel - hide"); - this.section.setHidden(true); - } - - /** - * Show the section stack section. - */ - @Override - public void show() { - GWT.log("InfoPanel - show"); - this.section.setHidden(false); - } - - @Override - public void addMember(Canvas component) { - super.addMember(component); - expand(); - } - - @Override - public void removeMembers(Canvas[] components) { - super.removeMembers(components); - contract(); - } - - public SectionStackSection getSection() { - return this.section; - } - protected void removeAllMembers() { removeMembers(getMembers()); } - /** - * Expands the gauge section. - */ - public void expand() { - section.setExpanded(true); - } - - /** - * Contracts/shrinks the expanded gauge section. - */ - public void contract() { - section.setExpanded(false); - } - protected abstract void refresh(); - protected abstract String getSectionTitle(); + public abstract String getSectionTitle(); } diff -r 42076d94977e -r 45cced06490c gwt-client/src/main/java/org/dive4elements/river/client/client/ui/stationinfo/MeasurementStationInfoPanel.java --- a/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/stationinfo/MeasurementStationInfoPanel.java Wed May 21 11:43:10 2014 +0200 +++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/stationinfo/MeasurementStationInfoPanel.java Mon Jun 30 11:29:45 2014 +0200 @@ -13,7 +13,8 @@ import com.google.gwt.core.client.GWT; import com.google.gwt.i18n.client.DateTimeFormat; import com.google.gwt.i18n.client.DateTimeFormat.PredefinedFormat; -import com.google.gwt.user.client.ui.Grid; +import com.smartgwt.client.widgets.Label; +import com.smartgwt.client.widgets.layout.HLayout; import com.smartgwt.client.widgets.layout.VLayout; import org.dive4elements.river.client.client.FLYSConstants; @@ -28,39 +29,64 @@ setStyleName("infopanel"); setWidth100(); - Grid grid = new Grid(5, 2); + VLayout grid = new VLayout(); + HLayout line1 = new HLayout(); String type = station.getMeasurementType(); if (type != null) { - grid.setText(0, 0, MSG.measurement_station_type()); - grid.setText(0, 1, type); + Label key = new Label(MSG.measurement_station_type()); + Label value = new Label(type); + key.setWidth(150); + line1.addMember(key); + line1.addMember(value); + grid.addMember(line1); } + HLayout line2 = new HLayout(); String riverside = station.getRiverSide(); if (riverside != null) { - grid.setText(1, 0, MSG.riverside()); - grid.setText(1, 1, riverside); + Label key = new Label(MSG.riverside()); + Label value = new Label(riverside); + key.setWidth(150); + line2.addMember(key); + line2.addMember(value); + grid.addMember(line2); } + HLayout line3 = new HLayout(); String gaugename = station.getGaugeName(); if (gaugename != null) { - grid.setText(2, 0, MSG.measurement_station_gauge_name()); - grid.setText(2, 1, gaugename); + Label key = new Label(MSG.measurement_station_gauge_name()); + Label value = new Label(gaugename); + key.setWidth(150); + line3.addMember(key); + line3.addMember(value); + grid.addMember(line3); } + HLayout line4 = new HLayout(); DateTimeFormat df = DateTimeFormat.getFormat( - PredefinedFormat.DATE_MEDIUM); + PredefinedFormat.DATE_MEDIUM); Date starttime = station.getStartTime(); if (starttime != null) { - grid.setText(3, 0, MSG.measurement_station_start_time()); - grid.setText(3, 1, df.format(starttime)); + Label key = new Label(MSG.measurement_station_start_time()); + Label value = new Label(df.format(starttime)); + key.setWidth(150); + line4.addMember(key); + line4.addMember(value); + grid.addMember(line4); } + HLayout line5 = new HLayout(); String moperator = station.getOperator(); if (moperator != null) { - grid.setText(4, 0, MSG.measurement_station_operator()); - grid.setText(4, 1, moperator); + Label key = new Label(MSG.measurement_station_operator()); + Label value = new Label(moperator); + key.setWidth(150); + line5.addMember(key); + line5.addMember(value); + grid.addMember(line5); } addMember(grid); diff -r 42076d94977e -r 45cced06490c gwt-client/src/main/java/org/dive4elements/river/client/client/ui/stationinfo/MeasurementStationListGrid.java --- a/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/stationinfo/MeasurementStationListGrid.java Wed May 21 11:43:10 2014 +0200 +++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/stationinfo/MeasurementStationListGrid.java Mon Jun 30 11:29:45 2014 +0200 @@ -11,7 +11,6 @@ import com.google.gwt.core.client.GWT; import com.smartgwt.client.widgets.Canvas; -import com.smartgwt.client.widgets.WidgetCanvas; import com.smartgwt.client.widgets.grid.ListGridField; import com.smartgwt.client.widgets.grid.ListGridRecord; import com.smartgwt.client.widgets.grid.events.RecordClickEvent; @@ -38,8 +37,8 @@ ListGridField sfield = new ListGridField("kmstart", "Start [km]", 60); ListGridField efield = new ListGridField("kmend", "Ende [km]", 60); ListGridField stfield = new ListGridField("station", "Station [km]"); - ListGridField lfield = new ListGridField("infolink", "Link"); - ListGridField cfield = new ListGridField("curvelink", "SQ"); + ListGridField lfield = new ListGridField("infolink", "Info"); + ListGridField cfield = new ListGridField("curvelink", "Feststofftransport-Abfluss-Beziehung"); cfield.addRecordClickHandler(this); this.setShowRecordComponents(true); @@ -102,7 +101,7 @@ @Override protected Canvas getExpandPanel(ListGridRecord record) { MeasurementStationRecord station = (MeasurementStationRecord)record; - return new WidgetCanvas(new MeasurementStationInfoPanel(station)); + return new MeasurementStationInfoPanel(station); } @Override diff -r 42076d94977e -r 45cced06490c gwt-client/src/main/java/org/dive4elements/river/client/client/ui/stationinfo/MeasurementStationPanel.java --- a/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/stationinfo/MeasurementStationPanel.java Wed May 21 11:43:10 2014 +0200 +++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/stationinfo/MeasurementStationPanel.java Mon Jun 30 11:29:45 2014 +0200 @@ -44,7 +44,6 @@ @Override public void refresh() { GWT.log("MeasurementStationPanel - refresh"); - contract(); riverInfoService.getMeasurementStations(this.river, new AsyncCallback() { @@ -57,7 +56,6 @@ public void onSuccess(RiverInfo riverinfo) { GWT.log("MeasurementStationPanel - Loaded river info"); render(riverinfo); - expand(); } }); }