# HG changeset patch
# User gernotbelger
# Date 1531475782 -7200
# Node ID 9be51f77679824d0e33aa0fb5024cb6619c7614f
# Parent 68ff4087b987ccff7a7c5c819389339f90b673a4# Parent 14200ded6d67ae314e18976ed5d20841aada2d63
Merge from 3.2.1
diff -r 14200ded6d67 -r 9be51f776798 .hgignore
--- a/.hgignore Fri Feb 09 15:39:49 2018 +0100
+++ b/.hgignore Fri Jul 13 11:56:22 2018 +0200
@@ -3,6 +3,10 @@
artifacts/\.classpath # eclipse
artifacts/\.project # eclipse
artifacts/\.settings # eclipse
+artifacts/doc/artifactsdb
+artifacts/doc/datacagedb
+artifacts/doc/cache
+artifacts/build
artifacts/test-output # eclipse junit/testng plugin output
backend/target # maven output
backend/\.classpath # eclipse
@@ -25,3 +29,12 @@
\.swo
\.pyc
TAGS
+syntax: glob
+.project
+.settings
+artifacts/doc/*.map
+artifacts/doc/*.log.*
+artifacts/doc/*.log
+artifacts/doc/shapefiles/*
+artifacts/doc/conf/sinfo_tkh_sohlhoehen_Elbe.properties
+artifacts/doc/conf/sinfo_tkh_sohlhoehen_Rhein.properties
diff -r 14200ded6d67 -r 9be51f776798 artifacts/TODO
--- a/artifacts/TODO Fri Feb 09 15:39:49 2018 +0100
+++ b/artifacts/TODO Fri Jul 13 11:56:22 2018 +0200
@@ -1,1 +1,1 @@
-- Validation of the input values of an incoming feed() call
+- Validation of the input values of an incoming feed() call
\ No newline at end of file
diff -r 14200ded6d67 -r 9be51f776798 artifacts/contrib/fonts/roboto.jar
Binary file artifacts/contrib/fonts/roboto.jar has changed
diff -r 14200ded6d67 -r 9be51f776798 artifacts/doc/conf/artifacts/bundu.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/artifacts/doc/conf/artifacts/bundu.xml Fri Jul 13 11:56:22 2018 +0200
@@ -0,0 +1,355 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff -r 14200ded6d67 -r 9be51f776798 artifacts/doc/conf/artifacts/fixanalysis.xml
--- a/artifacts/doc/conf/artifacts/fixanalysis.xml Fri Feb 09 15:39:49 2018 +0100
+++ b/artifacts/doc/conf/artifacts/fixanalysis.xml Fri Jul 13 11:56:22 2018 +0200
@@ -1,337 +1,306 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff -r 14200ded6d67 -r 9be51f776798 artifacts/doc/conf/artifacts/manualpoints.xml
--- a/artifacts/doc/conf/artifacts/manualpoints.xml Fri Feb 09 15:39:49 2018 +0100
+++ b/artifacts/doc/conf/artifacts/manualpoints.xml Fri Jul 13 11:56:22 2018 +0200
@@ -35,6 +35,14 @@
+
+
+
+
+
+
+
+
diff -r 14200ded6d67 -r 9be51f776798 artifacts/doc/conf/artifacts/sinfo.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/artifacts/doc/conf/artifacts/sinfo.xml Fri Jul 13 11:56:22 2018 +0200
@@ -0,0 +1,462 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff -r 14200ded6d67 -r 9be51f776798 artifacts/doc/conf/artifacts/uinfo.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/artifacts/doc/conf/artifacts/uinfo.xml Fri Jul 13 11:56:22 2018 +0200
@@ -0,0 +1,427 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff -r 14200ded6d67 -r 9be51f776798 artifacts/doc/conf/conf.xml
--- a/artifacts/doc/conf/conf.xml Fri Feb 09 15:39:49 2018 +0100
+++ b/artifacts/doc/conf/conf.xml Fri Jul 13 11:56:22 2018 +0200
@@ -22,6 +22,10 @@
+
+
+
+
]>
YOUR_SECRET
@@ -168,6 +172,40 @@
org.dive4elements.artifactdatabase.DefaultArtifactFactory
+
+
+ org.dive4elements.artifactdatabase.DefaultArtifactFactory
+
+ org.dive4elements.artifactdatabase.DefaultArtifactFactory
+
+
+ org.dive4elements.artifactdatabase.DefaultArtifactFactory
+
+ org.dive4elements.artifactdatabase.DefaultArtifactFactory
+ org.dive4elements.artifactdatabase.DefaultArtifactFactory
+ org.dive4elements.artifactdatabase.DefaultArtifactFactory
+ org.dive4elements.artifactdatabase.DefaultArtifactFactory
+ org.dive4elements.artifactdatabase.DefaultArtifactFactory
+ org.dive4elements.artifactdatabase.DefaultArtifactFactory
+
org.dive4elements.artifactdatabase.DefaultUserFactory
@@ -299,6 +337,10 @@
&gaugedischargecurve-artifact;
&sedimentload-artifact;
&sedimentload-ls-artifact;
+
+ &sinfo_artifact;
+ &uinfo_artifact;
+ &bundu_artifact;
&modules;
diff -r 14200ded6d67 -r 9be51f776798 artifacts/doc/conf/floodmap.xml
--- a/artifacts/doc/conf/floodmap.xml Fri Feb 09 15:39:49 2018 +0100
+++ b/artifacts/doc/conf/floodmap.xml Fri Jul 13 11:56:22 2018 +0200
@@ -12,9 +12,9 @@
-
+
-
+
diff -r 14200ded6d67 -r 9be51f776798 artifacts/doc/conf/generators/generators.xml
--- a/artifacts/doc/conf/generators/generators.xml Fri Feb 09 15:39:49 2018 +0100
+++ b/artifacts/doc/conf/generators/generators.xml Fri Jul 13 11:56:22 2018 +0200
@@ -3,60 +3,82 @@
&longitudinal-diagrams;
&discharge-diagrams;
-
-
-
-
-
+
+
+
+
+
-
-
+
+
-
+ -->
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff -r 14200ded6d67 -r 9be51f776798 artifacts/doc/conf/generators/longitudinal-diagram-defaults.xml
--- a/artifacts/doc/conf/generators/longitudinal-diagram-defaults.xml Fri Feb 09 15:39:49 2018 +0100
+++ b/artifacts/doc/conf/generators/longitudinal-diagram-defaults.xml Fri Jul 13 11:56:22 2018 +0200
@@ -14,8 +14,14 @@
-
+
+
+
+
+
+
+
+
@@ -42,4 +48,27 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff -r 14200ded6d67 -r 9be51f776798 artifacts/doc/conf/generators/longitudinal-diagrams.xml
--- a/artifacts/doc/conf/generators/longitudinal-diagrams.xml Fri Feb 09 15:39:49 2018 +0100
+++ b/artifacts/doc/conf/generators/longitudinal-diagrams.xml Fri Jul 13 11:56:22 2018 +0200
@@ -87,5 +87,109 @@
-
+
+
+ &longitudinal-defaults;
+
+
+
+
+
+
+
+
+ &longitudinal-defaults;
+
+
+
+
+
+
+
+
+ &longitudinal-defaults;
+
+
+
+
+
+
+
+
+ &longitudinal-defaults;
+
+
+
+
+
+
+
+
+ &longitudinal-defaults;
+
+
+
+
+
+
+
+
+ &longitudinal-defaults;
+
+
+
+
+
+
+
+
+ &longitudinal-defaults;
+
+
+
+
+
+
+
+
+ &longitudinal-defaults;
+
+
+
+
+
+
+
\ No newline at end of file
diff -r 14200ded6d67 -r 9be51f776798 artifacts/doc/conf/jasper/templates/sinfo.collision.detail.jrxml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/artifacts/doc/conf/jasper/templates/sinfo.collision.detail.jrxml Fri Jul 13 11:56:22 2018 +0200
@@ -0,0 +1,259 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff -r 14200ded6d67 -r 9be51f776798 artifacts/doc/conf/jasper/templates/sinfo.collision.overview.jrxml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/artifacts/doc/conf/jasper/templates/sinfo.collision.overview.jrxml Fri Jul 13 11:56:22 2018 +0200
@@ -0,0 +1,248 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff -r 14200ded6d67 -r 9be51f776798 artifacts/doc/conf/jasper/templates/sinfo.floodduration.jrxml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/artifacts/doc/conf/jasper/templates/sinfo.floodduration.jrxml Fri Jul 13 11:56:22 2018 +0200
@@ -0,0 +1,389 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff -r 14200ded6d67 -r 9be51f776798 artifacts/doc/conf/jasper/templates/sinfo.floodduration2.jrxml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/artifacts/doc/conf/jasper/templates/sinfo.floodduration2.jrxml Fri Jul 13 11:56:22 2018 +0200
@@ -0,0 +1,525 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff -r 14200ded6d67 -r 9be51f776798 artifacts/doc/conf/jasper/templates/sinfo.flowdepth.jrxml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/artifacts/doc/conf/jasper/templates/sinfo.flowdepth.jrxml Fri Jul 13 11:56:22 2018 +0200
@@ -0,0 +1,275 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ [m]"]]>
+
+
+
+
+
+
+
+
+
+
+
+ [cm]"]]>
+
+
+
+
+
+
+
+ [" + $F{meta:river_unit} + "]"]]>
+
+
+
+
+
+ [m³/s]"]]>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ [" + $F{meta:river_unit} + "]"]]>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff -r 14200ded6d67 -r 9be51f776798 artifacts/doc/conf/jasper/templates/sinfo.flowdepthdevelopment.jrxml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/artifacts/doc/conf/jasper/templates/sinfo.flowdepthdevelopment.jrxml Fri Jul 13 11:56:22 2018 +0200
@@ -0,0 +1,279 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ [cm]"]]>
+
+
+
+
+
+ [cm/a]"]]>
+
+
+
+
+
+ [m³/s]"]]>
+
+
+
+
+
+
+
+
+
+
+
+ [" + $F{meta:river_unit} + "]"]]>
+
+
+
+
+
+
+
+
+
+
+
+ [" + $F{meta:river_unit} + "]"]]>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ["+$F{meta:river_unit}+"]"]]>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff -r 14200ded6d67 -r 9be51f776798 artifacts/doc/conf/jasper/templates/sinfo.flowdepthminmax.jrxml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/artifacts/doc/conf/jasper/templates/sinfo.flowdepthminmax.jrxml Fri Jul 13 11:56:22 2018 +0200
@@ -0,0 +1,268 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ [m]"]]>
+
+
+
+
+
+ [m]"]]>
+
+
+
+
+
+ [" + $F{meta:river_unit} + "]"]]>
+
+
+
+
+
+ [m³/s]"]]>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ [" + $F{meta:river_unit} + "]"]]>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff -r 14200ded6d67 -r 9be51f776798 artifacts/doc/conf/jasper/templates/sinfo.tkh.jrxml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/artifacts/doc/conf/jasper/templates/sinfo.tkh.jrxml Fri Jul 13 11:56:22 2018 +0200
@@ -0,0 +1,309 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ [cm]"]]>
+
+
+
+
+
+
+
+
+
+
+
+ [" + $F{meta:river_unit} + "]"]]>
+
+
+
+
+
+ [m³/s]"]]>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ [" + $F{meta:river_unit} + "]"]]>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff -r 14200ded6d67 -r 9be51f776798 artifacts/doc/conf/jasper/templates/uinfo.salixline.jrxml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/artifacts/doc/conf/jasper/templates/uinfo.salixline.jrxml Fri Jul 13 11:56:22 2018 +0200
@@ -0,0 +1,200 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff -r 14200ded6d67 -r 9be51f776798 artifacts/doc/conf/jasper/templates/uinfo.vegetationzones.jrxml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/artifacts/doc/conf/jasper/templates/uinfo.vegetationzones.jrxml Fri Jul 13 11:56:22 2018 +0200
@@ -0,0 +1,204 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff -r 14200ded6d67 -r 9be51f776798 artifacts/doc/conf/log4j.properties
--- a/artifacts/doc/conf/log4j.properties Fri Feb 09 15:39:49 2018 +0100
+++ b/artifacts/doc/conf/log4j.properties Fri Jul 13 11:56:22 2018 +0200
@@ -4,7 +4,7 @@
log4j.category.org.hibernate=WARN
log4j.category.net.sf.ehcache=WARN
log4j.category.org.eclipse=WARN
-log4j.category.org.restlet=INFO
+log4j.category.org.restlet=WARN
########## APPENDER SETTINGS
@@ -12,10 +12,7 @@
log4j.appender.FLYS.layout.ConversionPattern=%d{HH:mm:ss} [%t] %-5p %c{1} - %m%n
-log4j.appender.FLYS=org.apache.log4j.RollingFileAppender
-log4j.appender.FLYS.File=/var/log/d4e-river/d4e-server.log
-log4j.appender.FLYS.MaxFileSize=5000KB
-log4j.appender.FLYS.MaxBackupIndex=1
+log4j.appender.FLYS=org.apache.log4j.ConsoleAppender
log4j.logger.org.dive4elements.artifactdatabase.rest.Standalone=INFO, START
log4j.appender.START=org.apache.log4j.ConsoleAppender
diff -r 14200ded6d67 -r 9be51f776798 artifacts/doc/conf/meta-data.xml
--- a/artifacts/doc/conf/meta-data.xml Fri Feb 09 15:39:49 2018 +0100
+++ b/artifacts/doc/conf/meta-data.xml Fri Jul 13 11:56:22 2018 +0200
@@ -2,9 +2,9 @@
-
+
-
+
@@ -14,14 +14,14 @@
WHERE lower(name) LIKE lower(${river})
-
+
-
+
@@ -39,83 +39,108 @@
Longitudinal sections
-
+
-
-
+
+
-
-
+
+
-
+
-
+
-
-
-
+
+
+
-
-
+
+
-
-
+
+
-
+
-
+
Discharge curves
-
-
+
+
-
-
+
+
-
-
-
+
+
+
-
-
+
+
-
+
-
+
Cross sections
-
-
-
+
+
+
Duration curve
-
+
Reference curve
-
+
Maps
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -129,118 +154,169 @@
Inline datacage panels
-
+
-
+
-
-
+
+
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
Longitudinal sections
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
Discharge curves
-
+
-
+
-
+
-
+
-
+
-
+
Cross sections
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
Duration curve
-
-
-
-
+
+
+
+
Reference curve
-
-
-
-
-
-
+
+
+
+
+
+
Maps
-
+
-
+
+
+
+ S-INFO
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -263,7 +339,7 @@
-
+
@@ -276,94 +352,113 @@
Inline datacage panels
-
-
+
+
-
+
-
+
-
+
-
+
Longitudinal sections
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Discharge curves
-
+
-
+
-
+
-
+
-
-
+
+
Time series
-
+
-
+
Cross sections
-
+
Duration curve
-
+
Reference curve
-
+
Maps
-
+
-
+
+
+
+
+
+
@@ -384,12 +479,12 @@
-
-
-
-
-
-
+
+
+
+
+
+
@@ -407,12 +502,12 @@
-
-
-
-
-
-
+
+
+
+
+
+
@@ -430,12 +525,12 @@
-
-
-
-
-
-
+
+
+
+
+
+
@@ -451,14 +546,14 @@
-
+
-
-
-
-
-
-
+
+
+
+
+
+
@@ -475,12 +570,12 @@
-
-
-
-
-
-
+
+
+
+
+
+
@@ -492,7 +587,7 @@
-
+
@@ -505,12 +600,12 @@
-
-
-
-
-
-
+
+
+
+
+
+
@@ -525,27 +620,40 @@
($facet_name = 'longitudinal_section.w' or
$facet_name = 'longitudinal_section.q')
">
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
@@ -587,12 +695,12 @@
-
-
-
-
-
-
+
+
+
+
+
+
@@ -603,7 +711,8 @@
-
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
@@ -651,12 +760,12 @@
-
-
-
-
-
-
+
+
+
+
+
+
@@ -672,12 +781,12 @@
-
-
-
-
-
-
+
+
+
+
+
+
@@ -693,12 +802,12 @@
-
-
-
-
-
-
+
+
+
+
+
+
@@ -719,23 +828,21 @@
-
+
-
+
-
-
-
-
-
-
+
+
+
+
+
+
@@ -747,7 +854,7 @@
-
+
@@ -756,20 +863,20 @@
-
+
+ $deffrom, ' bis KM ', $defto)" />
-
+
-
-
-
-
-
-
+
+
+
+
+
+
@@ -782,27 +889,27 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -816,12 +923,12 @@
-
-
-
-
-
-
+
+
+
+
+
+
@@ -837,12 +944,12 @@
-
-
-
-
-
-
+
+
+
+
+
+
@@ -861,12 +968,12 @@
-
-
-
-
-
-
+
+
+
+
+
+
@@ -884,12 +991,12 @@
-
-
-
-
-
-
+
+
+
+
+
+
@@ -908,12 +1015,12 @@
-
-
-
-
-
-
+
+
+
+
+
+
@@ -932,12 +1039,12 @@
-
-
-
-
-
-
+
+
+
+
+
+
@@ -948,7 +1055,8 @@
-
-
-
-
-
-
-
+
+
+
+
+
+
@@ -986,12 +1094,12 @@
-
-
-
-
-
-
+
+
+
+
+
+
@@ -1005,37 +1113,31 @@
-
+
-
-
+
+
-
-
+ dc:date-format('dd.MM.yyyy', $stop_time))" />
+
-
-
+
+
-
+
@@ -1055,8 +1157,7 @@
-
+
@@ -1070,7 +1171,7 @@
-
+
@@ -1082,16 +1183,15 @@
-
-
+
+
-
+
-
-
+
+
@@ -1099,35 +1199,35 @@
- SELECT g.name AS gauge_name,
- dt.id AS dt_id,
- t.start_time AS start_time,
- t.stop_time AS stop_time,
- dt.bfg_id AS bfg_id,
- dt.kind AS kind
- FROM gauges g
- JOIN discharge_tables dt ON g.id = dt.gauge_id
- LEFT JOIN time_intervals t ON dt.time_interval_id = t.id
- WHERE g.river_id = ${river_id}
- AND g.station BETWEEN ${fromkm} AND ${tokm}
- ORDER BY start_time
+ SELECT g.name AS gauge_name,
+ dt.id AS dt_id,
+ t.start_time AS start_time,
+ t.stop_time AS stop_time,
+ dt.bfg_id AS bfg_id,
+ dt.kind AS kind
+ FROM gauges g
+ JOIN discharge_tables dt ON g.id = dt.gauge_id
+ LEFT JOIN time_intervals t ON dt.time_interval_id = t.id
+ WHERE g.river_id = ${river_id}
+ AND g.station BETWEEN ${fromkm} AND ${tokm}
+ ORDER BY start_time
- SELECT g.name AS gauge_name,
- dt.id AS dt_id,
- t.start_time AS start_time,
- t.stop_time AS stop_time,
- dt.bfg_id AS bfg_id,
- dt.kind AS kind
- FROM gauges g
- JOIN discharge_tables dt ON g.id = dt.gauge_id
- LEFT JOIN time_intervals t ON dt.time_interval_id = t.id
- WHERE g.river_id = ${river_id}
- AND g.official_number = ${refgauge}
- ORDER BY start_time
+ SELECT g.name AS gauge_name,
+ dt.id AS dt_id,
+ t.start_time AS start_time,
+ t.stop_time AS stop_time,
+ dt.bfg_id AS bfg_id,
+ dt.kind AS kind
+ FROM gauges g
+ JOIN discharge_tables dt ON g.id = dt.gauge_id
+ LEFT JOIN time_intervals t ON dt.time_interval_id = t.id
+ WHERE g.river_id = ${river_id}
+ AND g.official_number = ${refgauge}
+ ORDER BY start_time
@@ -1137,17 +1237,15 @@
SELECT DISTINCT
- cs.id AS prot_id,
- cs.description AS prot_description
+ cs.id AS prot_id,
+ cs.description AS prot_description
FROM cross_sections cs
- JOIN cross_section_lines csl ON csl.cross_section_id = cs.id
+ JOIN cross_section_lines csl ON csl.cross_section_id = cs.id
WHERE cs.river_id = ${river_id}
- AND csl.km BETWEEN ${fromkm} AND ${tokm}
+ AND csl.km BETWEEN ${fromkm} AND ${tokm}
-
+
@@ -1158,17 +1256,15 @@
SELECT DISTINCT
- h.id AS hyk_id,
- h.description AS hyk_description
+ h.id AS hyk_id,
+ h.description AS hyk_description
FROM hyks h
- JOIN hyk_entries he ON he.hyk_id = h.id
+ JOIN hyk_entries he ON he.hyk_id = h.id
WHERE river_id = ${river_id}
- AND he.km BETWEEN ${fromkm} AND ${tokm}
+ AND he.km BETWEEN ${fromkm} AND ${tokm}
-
+
@@ -1185,7 +1281,7 @@
-
+
@@ -1196,19 +1292,13 @@
-
+
-
+
@@ -1218,9 +1308,9 @@
-
+
-
+
@@ -1231,28 +1321,64 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
+
@@ -1264,7 +1390,7 @@
-
+
@@ -1275,28 +1401,20 @@
-
+
+
-
+
-
+
@@ -1308,7 +1426,7 @@
-
+
@@ -1319,21 +1437,14 @@
-
+
+
-
+
@@ -1345,7 +1456,7 @@
-
+
@@ -1356,28 +1467,19 @@
-
+
-
+
-
+
@@ -1389,7 +1491,7 @@
-
+
@@ -1400,28 +1502,19 @@
-
+
-
+
-
+
@@ -1433,13 +1526,9 @@
-
+
-
+
@@ -1448,12 +1537,9 @@
-
+
-
+
@@ -1470,9 +1556,9 @@
-
+
-
+
@@ -1483,19 +1569,14 @@
-
+
+
-
+
@@ -1503,158 +1584,181 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
-
+
-
+
-
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SINFO
+
+
+
+
+
+
+
WINFO/DIFF/FIX
-
-
-
-
-
+
+
+
+
+
+
MINFO
-
-
-
-
-
+
+
+
+
+
-
-
-
+
+
SELECT DISTINCT
- p.id AS pid,
- p.description AS description,
- d.lower AS depth_lower,
- d.upper AS depth_upper,
- p.description || '<BR>' ||
- 'Tiefe: ' || d.lower || ' - ' || d.upper
- || ' cm <BR>' ||
- 'Zeitraum: ' AS info,
- t.start_time AS syear,
- t.stop_time AS eyear
- FROM porosity p
- JOIN depths d ON p.depth_id = d.id
- JOIN time_intervals t ON p.time_interval_id=t.id
- WHERE p.river_id = ${river_id}
+ p.id AS pid,
+ p.description AS description,
+ d.lower AS depth_lower,
+ d.upper AS depth_upper,
+ p.description || '<BR>' ||
+ 'Tiefe: ' || d.lower || ' - ' || d.upper
+ || ' cm <BR>' ||
+ 'Zeitraum: ' AS info,
+ t.start_time AS syear,
+ t.stop_time AS eyear
+ FROM porosity p
+ JOIN depths d ON p.depth_id = d.id
+ JOIN time_intervals t ON p.time_interval_id=t.id
+ WHERE p.river_id =
+ ${river_id}
ORDER BY depth_lower, depth_upper
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
+
+
SELECT DISTINCT
- sd.id AS sdid,
- d.lower AS depth_lower,
- d.upper AS depth_upper,
- min(sdv.year) AS year,
- sd.description || '<BR>Jahr: ' || min(sdv.year) AS info
- FROM sediment_density sd
- JOIN depths d ON sd.depth_id = d.id
- JOIN sediment_density_values sdv on sdv.sediment_density_id = sd.id
- WHERE sd.river_id = ${river_id}
+ sd.id AS sdid,
+ d.lower AS depth_lower,
+ d.upper AS depth_upper,
+ min(sdv.year) AS year,
+ sd.description || '<BR>Jahr: ' || min(sdv.year) AS info
+ FROM sediment_density sd
+ JOIN depths d ON sd.depth_id = d.id
+ JOIN sediment_density_values sdv on sdv.sediment_density_id = sd.id
+ WHERE sd.river_id = ${river_id}
GROUP BY sd.id, sd.description, d.upper, d.lower
- ORDER BY year, depth_lower, depth_upper
-
-
-
-
-
-
-
+ ORDER BY
+ year, depth_lower, depth_upper
+
+
+
+
+
+
+
-
+
-
+
@@ -1663,28 +1767,24 @@
dc:date-format('yyyy', $sqstop))">
-
+
-
+
-
+ dc:date-format('yyyy', $endyear))" />
-
+
-
+
@@ -1696,42 +1796,42 @@
-
+ $kind != 'official'">
+
-
+ $kind != 'official'">
+
-
-
+
+
-
+
-
+
-
+
-
+
-
+
@@ -1742,69 +1842,73 @@
SELECT DISTINCT
- sl.id AS slid,
- slk.kind AS kind,
- ti.start_time AS startyear,
- ti.stop_time AS endyear,
- sq.start_time AS sqstart,
- sq.stop_time AS sqstop,
- sq.id AS sqid,
- gf.name AS fraction,
- sl.description || '<BR>' ||
- 'Fraktion: ' || gf.lower || ' bis ' || gf.upper ||
- ' mm<BR>Einheit: t/a' AS info
- FROM sediment_load sl
- JOIN sediment_load_kinds slk ON slk.id = sl.kind
- JOIN sediment_load_values slv
- ON sl.id = slv.sediment_load_id
- JOIN measurement_station ms
- ON ms.id = slv.measurement_station_id
- JOIN ranges ra ON ms.range_id = ra.id
- JOIN rivers r ON ra.river_id = r.id
- JOIN time_intervals ti ON sl.time_interval_id = ti.id
- LEFT JOIN time_intervals sq ON sl.sq_time_interval_id = sq.id
- JOIN grain_fraction gf ON gf.id = sl.grain_fraction_id
+ sl.id AS slid,
+ slk.kind AS kind,
+ ti.start_time AS startyear,
+ ti.stop_time AS endyear,
+ sq.start_time AS sqstart,
+ sq.stop_time AS sqstop,
+ sq.id AS sqid,
+ gf.name AS fraction,
+ sl.description || '<BR>' ||
+ 'Fraktion: ' || gf.lower || ' bis ' || gf.upper ||
+ ' mm<BR>Einheit: t/a' AS info
+ FROM sediment_load sl
+ JOIN sediment_load_kinds slk ON slk.id = sl.kind
+ JOIN
+ sediment_load_values slv
+ ON sl.id = slv.sediment_load_id
+ JOIN measurement_station ms
+ ON ms.id =
+ slv.measurement_station_id
+ JOIN ranges ra ON ms.range_id = ra.id
+ JOIN rivers r ON ra.river_id = r.id
+ JOIN time_intervals ti ON sl.time_interval_id = ti.id
+ LEFT JOIN time_intervals sq ON sl.sq_time_interval_id = sq.id
+ JOIN grain_fraction gf ON gf.id = sl.grain_fraction_id
WHERE r.id = ${river_id}
- AND CASE WHEN r.km_up = 1 AND ra.b IS NOT NULL
- THEN ra.b ELSE ra.a END BETWEEN ${fromkm} AND ${tokm}
- ORDER BY sqstart DESC, sqstop DESC,
- fraction, startyear DESC, endyear DESC
+ AND CASE
+ WHEN r.km_up = 1 AND ra.b IS NOT NULL
+ THEN ra.b ELSE ra.a END BETWEEN ${fromkm} AND ${tokm}
+ ORDER BY sqstart DESC, sqstop DESC,
+ fraction, startyear DESC, endyear DESC
SELECT DISTINCT
- sl.id AS slid,
- slk.kind AS kind,
- ti.start_time AS startyear,
- ti.stop_time AS endyear,
- sq.start_time AS sqstart,
- sq.stop_time AS sqstop,
- sq.id AS sqid,
- gf.name AS fraction,
- sl.description || '<BR>' ||
- 'Fraktion: ' || gf.lower || ' bis ' || gf.upper ||
- ' mm<BR>Einheit: ' || u.name AS info
- FROM sediment_load_ls sl
- JOIN sediment_load_kinds slk ON slk.id = sl.kind
- JOIN rivers r ON sl.river_id = r.id
- JOIN sediment_load_ls_values slv
- ON sl.id = slv.sediment_load_ls_id
- JOIN time_intervals ti ON sl.time_interval_id = ti.id
- LEFT JOIN time_intervals sq ON sl.sq_time_interval_id = sq.id
- JOIN grain_fraction gf ON gf.id = sl.grain_fraction_id
- JOIN units u ON sl.unit_id = u.id
- WHERE r.id = ${river_id}
- AND slv.station BETWEEN ${fromkm} AND ${tokm}
- ORDER BY sqstart DESC, sqstop DESC,
- fraction, startyear DESC, endyear DESC
+ sl.id AS slid,
+ slk.kind AS kind,
+ ti.start_time AS startyear,
+ ti.stop_time AS endyear,
+ sq.start_time AS sqstart,
+ sq.stop_time AS sqstop,
+ sq.id AS sqid,
+ gf.name AS fraction,
+ sl.description || '<BR>' ||
+ 'Fraktion: ' || gf.lower || ' bis ' || gf.upper ||
+ ' mm<BR>Einheit: ' || u.name AS info
+ FROM sediment_load_ls sl
+ JOIN sediment_load_kinds slk ON slk.id = sl.kind
+ JOIN rivers r ON sl.river_id = r.id
+ JOIN sediment_load_ls_values slv
+ ON sl.id = slv.sediment_load_ls_id
+ JOIN time_intervals ti ON sl.time_interval_id = ti.id
+ LEFT JOIN time_intervals sq ON sl.sq_time_interval_id = sq.id
+ JOIN grain_fraction gf ON gf.id = sl.grain_fraction_id
+ JOIN units u ON sl.unit_id = u.id
+ WHERE r.id = ${river_id}
+ AND slv.station BETWEEN ${fromkm} AND ${tokm}
+ ORDER BY sqstart
+ DESC, sqstop DESC,
+ fraction, startyear DESC, endyear DESC
-
+
@@ -1812,14 +1916,12 @@
- SELECT id AS anno_id,
- name AS anno_description
+ SELECT id AS anno_id,
+ name AS anno_description
FROM annotation_types
-
+
@@ -1829,15 +1931,13 @@
- SELECT id AS anno_id,
- name AS anno_description
+ SELECT id AS anno_id,
+ name AS anno_description
FROM annotation_types
- WHERE name LIKE 'Quelle %' OR name LIKE 'Senke %'
+ WHERE name LIKE 'Quelle %' OR name LIKE 'Senke %'
-
+
@@ -1860,37 +1960,39 @@
- WITH sta
- AS (SELECT bhs.id,
- bhs.description,
- bhsv.station,
- bhs.year
- FROM bed_height bhs
- JOIN bed_height_values bhsv
- ON bhsv.bed_height_id = bhs.id
- WHERE bhs.river_id = ${river_id}
- AND bhsv.station BETWEEN ${fromkm} AND ${tokm}),
- 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
- AND (b1.year > b2.year OR b1.year IS NULL))
- SELECT DISTINCT b1id, b1desc, b1year,
- b2id, b2desc, b2year
- FROM csta
- ORDER BY b1desc, b2desc
+ WITH sta
+ AS (SELECT bhs.id,
+ bhs.description,
+ bhsv.station,
+ bhs.year
+ FROM bed_height bhs
+ JOIN bed_height_values bhsv
+ ON bhsv.bed_height_id = bhs.id
+ WHERE bhs.river_id = ${river_id}
+ AND bhsv.station BETWEEN ${fromkm} AND ${tokm}),
+ 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
+ AND (b1.year > b2.year OR b1.year IS NULL))
+ SELECT
+ DISTINCT b1id, b1desc, b1year,
+ b2id, b2desc, b2year
+ FROM csta
+ ORDER BY b1desc, b2desc
-
-
+
+
@@ -1899,7 +2001,7 @@
-
+
@@ -1907,7 +2009,7 @@
-
+
@@ -1918,23 +2020,11 @@
-
+
-
-
+
+
@@ -1944,30 +2034,79 @@
-
-
+
+
-
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -1979,9 +2118,9 @@
-
+
-
+
@@ -1989,20 +2128,16 @@
-
+
-
+
-
+
@@ -2010,33 +2145,43 @@
-
+
-
+
- SELECT bhs.id AS bedh_id,
- bhs.year AS bedh_year,
- bhs.description AS bedh_descr,
- bhs.description || '<BR>Jahr: ' || bhs.year ||
- '<BR>Aufnahmeart: ' || bht.name ||
- '<BR>Lagesystem: ' || ls.name ||
- '<BR>Höhensystem: ' || cur_em.name ||
- '<BR>ursprüngliches Höhensystem: ' || old_em.name ||
- '<BR>Strecke: ' || round(r.a, 1) || '-' || round(r.b, 1) ||
- '<BR>Auswerter: ' || bhs.evaluation_by AS info
+ SELECT bhs.id AS bedh_id,
+ bhs.year AS bedh_year,
+ bhs.description AS bedh_descr,
+ bhs.description || '<BR>Jahr: ' || bhs.year ||
+ '<BR>Aufnahmeart: ' || bht.name ||
+ '<BR>Lagesystem: ' || ls.name ||
+ '<BR>Höhensystem: ' || cur_em.name ||
+ '<BR>ursprüngliches Höhensystem: ' || old_em.name ||
+ '<BR>Strecke: ' || round(r.a, 1) || '-' || round(r.b, 1) ||
+ '<BR>Auswerter: ' || bhs.evaluation_by AS info,
+ COALESCE(bhv.height_count,0) AS bedh_height_count,
+ COALESCE(bhv.min_count,0) AS bedh_min_count,
+ COALESCE(bhv.max_count,0) AS bedh_max_count
FROM bed_height bhs
- JOIN bed_height_type bht ON bht.id = bhs.type_id
- JOIN location_system ls ON ls.id = location_system_id
- JOIN elevation_model cur_em ON cur_em.id = cur_elevation_model_id
- LEFT JOIN elevation_model old_em
- ON old_em.id = old_elevation_model_id
- LEFT JOIN ranges r ON r.id = range_id
- WHERE bhs.river_id = ${river_id}
+ JOIN bed_height_type bht ON bht.id = bhs.type_id
+ JOIN location_system ls ON ls.id = location_system_id
+ JOIN elevation_model cur_em ON cur_em.id = cur_elevation_model_id
+ LEFT JOIN
+ elevation_model old_em
+ ON old_em.id = old_elevation_model_id
+ LEFT JOIN ranges r ON r.id = range_id
+ LEFT JOIN (SELECT bed_height_id, COUNT(height) AS height_count, COUNT(min_height) AS min_count, COUNT(max_height) AS max_count
+ FROM bed_height_values
+ WHERE (station BETWEEN (${fromkm}-0.0001) AND (${tokm}+0.0001))
+ GROUP BY bed_height_id
+ ) bhv ON bhs.id = bhv.bed_height_id
+ WHERE bhs.river_id =
+ ${river_id}
@@ -2044,12 +2189,12 @@
- SELECT fvm.id AS fvmid,
- fvm.description AS fvmd,
- dz.gauge_name AS gauge,
- dz.value AS q,
- dz.upper_discharge AS upperQ,
- dz.lower_discharge AS lowerQ
+ SELECT fvm.id AS fvmid,
+ fvm.description AS fvmd,
+ dz.gauge_name AS gauge,
+ dz.value AS q,
+ dz.upper_discharge AS upperQ,
+ dz.lower_discharge AS lowerQ
FROM flow_velocity_model fvm
JOIN discharge_zone dz ON dz.id = fvm.discharge_zone_id
WHERE dz.river_id = ${river_id}
@@ -2058,13 +2203,9 @@
-
+ Q = {$q} m3/s" target_out="{$out}" />
@@ -2075,8 +2216,8 @@
- SELECT id AS fvmid,
- description AS fvmd
+ SELECT id AS fvmid,
+ description AS fvmd
FROM flow_velocity_measurements WHERE river_id = ${river_id}
@@ -2088,12 +2229,10 @@
SELECT id, description, station, datetime, v, w, q
FROM flow_velocity_measure_values
WHERE measurements_id = ${fvmid}
- AND station BETWEEN ${fromkm} AND ${tokm}
+ AND station BETWEEN ${fromkm} AND ${tokm}
-
+
@@ -2106,7 +2245,7 @@
- SELECT id AS width_id
+ SELECT id AS width_id
FROM morphologic_width
WHERE river_id = ${river_id}
@@ -2116,14 +2255,12 @@
SELECT min(station) AS from_station,
- max(station) AS to_station
+ max(station) AS to_station
FROM morphologic_width_values
WHERE morphologic_width_id = ${width_id}
-
+
@@ -2136,17 +2273,18 @@
SELECT
- ti.start_time AS start_time,
- ti.stop_time AS stop_time,
- ms.name AS station_name,
- lower(sqv.parameter) AS parameter,
- sqv.id AS sqvid,
- ra.a AS station_km
+ ti.start_time AS start_time,
+ ti.stop_time AS stop_time,
+ ms.name AS station_name,
+ lower(sqv.parameter) AS parameter,
+ sqv.id AS sqvid,
+ ra.a AS station_km
FROM sq_relation sq
JOIN time_intervals ti ON ti.id = sq.time_interval_id
JOIN sq_relation_value sqv ON sqv.sq_relation_id = sq.id
JOIN measurement_station ms ON sqv.measurement_station_id = ms.id
- JOIN ranges ra ON ms.range_id = ra.id
+ JOIN ranges ra ON ms.range_id =
+ ra.id
JOIN rivers r ON r.id = ra.river_id
WHERE r.id = ${river_id}
ORDER BY start_time, stop_time
@@ -2160,15 +2298,11 @@
$station_name)">
-
-
+ $stop_time))" />
+
@@ -2182,64 +2316,62 @@
-
-
-
+
+
+
-
-
+
+
-
+
-
-
+
+
-
+
-
-
-
-
+
+
+
+
-
-
+
+
-
+
- SELECT d.id AS dem_id,
- r.a AS dem_lower,
- r.b AS dem_upper,
- d.name AS name,
- t.start_time AS start_time,
- t.stop_time AS stop_time,
- 'Projektion: ' || d.projection || '<BR>' ||
- 'Rasterweite: ' || d.resolution || 'm<BR>' ||
- 'Format: ' || d.format || '<BR>' ||
- 'Zeitraum: '
- AS info
+ SELECT d.id AS dem_id,
+ r.a AS dem_lower,
+ r.b AS dem_upper,
+ d.name AS name,
+ t.start_time AS start_time,
+ t.stop_time AS stop_time,
+ 'Projektion: ' || d.projection || '<BR>' ||
+ 'Rasterweite: ' || d.resolution || 'm<BR>' ||
+ 'Format: ' || d.format || '<BR>' ||
+ 'Zeitraum: '
+ AS info
FROM dem d
- JOIN ranges r ON d.range_id = r.id
- LEFT JOIN time_intervals t ON d.time_interval_id = t.id
- WHERE d.river_id = ${river_id}
- AND NOT((${tokm} < r.a) or (${fromkm} > r.b))
-
-
-
+ JOIN ranges r ON d.range_id = r.id
+ LEFT JOIN time_intervals t ON d.time_interval_id
+ = t.id
+ WHERE d.river_id = ${river_id}
+ AND NOT((${tokm} < r.a) or (${fromkm} > r.b))
+
+
+
@@ -2255,19 +2387,25 @@
-
+
+
+
-
+
+
+
-
+
+
+
@@ -2275,7 +2413,7 @@
-
+
@@ -2283,7 +2421,7 @@
-
+
@@ -2293,15 +2431,15 @@
SELECT DISTINCT
- name AS hws_name,
+ name AS hws_name,
official AS hws_official,
- kind_id AS hws_kind
+ kind_id AS hws_kind
FROM hws_lines
WHERE river_id = ${river_id}
-
+
@@ -2311,15 +2449,15 @@
SELECT DISTINCT
- name AS hws_name,
+ name AS hws_name,
official AS hws_official,
- kind_id AS hws_kind
+ kind_id AS hws_kind
FROM hws_points
WHERE river_id = ${river_id}
-
+
@@ -2330,29 +2468,25 @@
SELECT DISTINCT
- name
+ name
FROM hydr_boundaries
WHERE river_id = ${river_id}
- AND kind = 2
+ AND kind = 2
-
+
SELECT DISTINCT
- name
+ name
FROM hydr_boundaries_poly
WHERE river_id = ${river_id}
- AND kind = 2
+ AND kind = 2
-
+
@@ -2362,18 +2496,16 @@
SELECT DISTINCT
- name
+ name
FROM hydr_boundaries
WHERE river_id = ${river_id}
- AND kind = 1
+ AND kind = 1
What about all other line kinds?
-
+
@@ -2385,19 +2517,17 @@
SELECT DISTINCT
- b.sectie AS sectie_id,
- sk.name AS sectie
+ b.sectie AS sectie_id,
+ sk.name AS sectie
FROM hydr_boundaries_poly b
- JOIN sectie_kinds sk ON b.sectie = sk.id
+ JOIN sectie_kinds sk ON b.sectie = sk.id
WHERE b.river_id = ${river_id}
- AND b.kind = 1
+ AND b.kind = 1
-
+
@@ -2405,19 +2535,17 @@
SELECT DISTINCT
- b.sobek AS sobek_id,
- sk.name AS sobek
+ b.sobek AS sobek_id,
+ sk.name AS sobek
FROM hydr_boundaries_poly b
- JOIN sobek_kinds sk ON b.sobek = sk.id
+ JOIN sobek_kinds sk ON b.sobek = sk.id
WHERE b.river_id = ${river_id}
- AND b.kind = 1
+ AND b.kind = 1
-
+
@@ -2425,17 +2553,15 @@
SELECT DISTINCT
- b.name AS name
+ b.name AS name
FROM hydr_boundaries_poly b
WHERE b.river_id = ${river_id}
- AND b.kind = 1
- AND b.sobek IS NULL
- AND b.sectie is NULL
+ AND b.kind = 1
+ AND b.sobek IS NULL
+ AND b.sectie is NULL
-
+
@@ -2447,126 +2573,116 @@
SELECT DISTINCT 1 FROM floodmaps WHERE river_id = ${river_id}
-
-
-
-
- SELECT DISTINCT 1 FROM floodmaps WHERE river_id = ${river_id}
- AND (kind = 112 OR kind = 111)
-
-
-
-
-
- SELECT DISTINCT name AS name
- FROM floodmaps
- WHERE river_id = ${river_id} AND kind = 111
-
-
-
-
-
-
-
-
-
-
-
- SELECT DISTINCT name AS name
- FROM floodmaps
- WHERE river_id = ${river_id} AND kind = 112
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- SELECT DISTINCT 1 from floodmaps where river_id = ${river_id}
- AND (kind = 122 OR kind = 121)
-
-
-
-
-
- SELECT DISTINCT name AS name
- FROM floodmaps
- WHERE river_id = ${river_id} AND kind = 121
-
-
-
-
-
-
-
-
-
-
-
- SELECT DISTINCT
- name AS name
- FROM floodmaps
- WHERE river_id = ${river_id} AND kind = 122
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- SELECT DISTINCT
- source AS source
- FROM floodmaps
- WHERE river_id = ${river_id} AND kind = 200
-
-
-
-
-
+
+
+
+
+ SELECT DISTINCT 1 FROM floodmaps WHERE river_id = ${river_id}
+ AND (kind = 112 OR kind = 111)
+
+
+
+
+
+ SELECT DISTINCT name AS name
+ FROM floodmaps
+ WHERE river_id = ${river_id} AND kind = 111
+
+
+
+
+
+
+
+
+
+
+
+ SELECT DISTINCT name AS name
+ FROM floodmaps
+ WHERE river_id = ${river_id} AND kind = 112
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SELECT DISTINCT 1 from floodmaps where river_id = ${river_id}
+ AND (kind = 122 OR kind = 121)
+
+
+
+
+
+ SELECT DISTINCT name AS name
+ FROM floodmaps
+ WHERE river_id = ${river_id} AND kind = 121
+
+
+
+
+
+
+
+
+
SELECT DISTINCT
- name AS name
+ name AS name
FROM floodmaps
- WHERE river_id = ${river_id} AND kind = 200 AND source =
- ${source}
+ WHERE river_id = ${river_id} AND kind = 122
-
-
-
+
+
+
+
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+ SELECT DISTINCT
+ source AS source
+ FROM floodmaps
+ WHERE river_id = ${river_id} AND kind = 200
+
+
+
+
+
+
+
+ SELECT DISTINCT
+ name AS name
+ FROM floodmaps
+ WHERE river_id = ${river_id} AND kind = 200 AND source =
+ ${source}
+
+
+
+
+
+
+
+
+
+
+
+
@@ -2574,28 +2690,24 @@
SELECT DISTINCT
- fp.kind_id AS kind_id,
- flk.name AS kind_name
+ fp.kind_id AS kind_id,
+ flk.name AS kind_name
FROM floodplain fp
- JOIN floodplain_kinds flk on fp.kind_id = flk.id
+ JOIN floodplain_kinds flk on fp.kind_id = flk.id
WHERE river_id = ${river_id}
-
+
-
+
@@ -2613,16 +2725,14 @@
-
+
-
+
@@ -2630,7 +2740,7 @@
-
+
@@ -2638,7 +2748,7 @@
-
+
@@ -2650,26 +2760,26 @@
SELECT DISTINCT
- fs.name AS fed_name,
- fs.id AS fed_id
+ fs.name AS fed_name,
+ fs.id AS fed_id
FROM hws_points hws
- JOIN fed_states fs ON hws.fed_state_id = fs.id
+ JOIN fed_states fs ON hws.fed_state_id = fs.id
WHERE river_id = ${river_id}
- AND hws.official=1
+ AND hws.official=1
SELECT DISTINCT
- name AS hws_name,
- kind_id AS hws_kind
+ name AS hws_name,
+ kind_id AS hws_kind
FROM hws_points
WHERE river_id = ${river_id}
- AND official=1
- AND fed_state_id = ${fed_id} ORDER BY name
+ AND official=1
+ AND fed_state_id = ${fed_id} ORDER BY name
-
+
@@ -2677,16 +2787,16 @@
SELECT distinct
- name AS hws_name,
- kind_id AS hws_kind
+ name AS hws_name,
+ kind_id AS hws_kind
FROM hws_points
WHERE river_id = ${river_id}
- AND official=1
- AND fed_state_id IS NULL
- ORDER BY name
+ AND official=1
+ AND fed_state_id IS NULL
+ ORDER BY name
-
+
@@ -2694,26 +2804,26 @@
SELECT DISTINCT
- fs.name AS fed_name,
- fs.id AS fed_id
+ fs.name AS fed_name,
+ fs.id AS fed_id
FROM hws_points hws
- JOIN fed_states fs ON hws.fed_state_id = fs.id
+ JOIN fed_states fs ON hws.fed_state_id = fs.id
WHERE river_id = ${river_id}
- AND hws.official=0
+ AND hws.official=0
SELECT DISTINCT
- name AS hws_name,
- kind_id AS hws_kind
+ name AS hws_name,
+ kind_id AS hws_kind
FROM hws_points
WHERE river_id = ${river_id}
- AND official=0
- AND fed_state_id = ${fed_id} ORDER BY name
+ AND official=0
+ AND fed_state_id = ${fed_id} ORDER BY name
-
+
@@ -2721,15 +2831,15 @@
SELECT distinct
- name AS hws_name,
- kind_id AS hws_kind
+ name AS hws_name,
+ kind_id AS hws_kind
FROM hws_points
WHERE river_id = ${river_id}
- AND official=0
- AND fed_state_id IS NULL ORDER BY name
+ AND official=0
+ AND fed_state_id IS NULL ORDER BY name
-
+
@@ -2744,16 +2854,14 @@
-
+
-
+
@@ -2761,7 +2869,7 @@
-
+
@@ -2769,7 +2877,7 @@
-
+
@@ -2781,26 +2889,26 @@
SELECT DISTINCT
- fs.name AS fed_name,
- fs.id AS fed_id
+ fs.name AS fed_name,
+ fs.id AS fed_id
FROM hws_lines hws
- JOIN fed_states fs ON hws.fed_state_id = fs.id
+ JOIN fed_states fs ON hws.fed_state_id = fs.id
WHERE river_id = ${river_id}
- AND hws.official=1
+ AND hws.official=1
SELECT DISTINCT
- name AS hws_name,
- kind_id AS hws_kind
+ name AS hws_name,
+ kind_id AS hws_kind
FROM hws_lines
WHERE river_id = ${river_id}
- AND official=1
- AND fed_state_id = ${fed_id} ORDER BY name
+ AND official=1
+ AND fed_state_id = ${fed_id} ORDER BY name
-
+
@@ -2808,16 +2916,16 @@
SELECT distinct
- name AS hws_name,
- kind_id AS hws_kind
+ name AS hws_name,
+ kind_id AS hws_kind
FROM hws_lines
WHERE river_id = ${river_id}
- AND official=1
- AND fed_state_id IS NULL
- ORDER BY name
+ AND official=1
+ AND fed_state_id IS NULL
+ ORDER BY name
-
+
@@ -2825,26 +2933,26 @@
SELECT DISTINCT
- fs.name AS fed_name,
- fs.id AS fed_id
+ fs.name AS fed_name,
+ fs.id AS fed_id
FROM hws_lines hws
- JOIN fed_states fs ON hws.fed_state_id = fs.id
+ JOIN fed_states fs ON hws.fed_state_id = fs.id
WHERE river_id = ${river_id}
- AND hws.official=0
+ AND hws.official=0
SELECT DISTINCT
- name AS hws_name,
- kind_id AS hws_kind
+ name AS hws_name,
+ kind_id AS hws_kind
FROM hws_lines
WHERE river_id = ${river_id}
- AND official=0
- AND fed_state_id = ${fed_id} ORDER BY name
+ AND official=0
+ AND fed_state_id = ${fed_id} ORDER BY name
-
+
@@ -2852,15 +2960,15 @@
SELECT distinct
- name AS hws_name,
- kind_id AS hws_kind
+ name AS hws_name,
+ kind_id AS hws_kind
FROM hws_lines
WHERE river_id = ${river_id}
- AND official=0
- AND fed_state_id IS NULL ORDER BY name
+ AND official=0
+ AND fed_state_id IS NULL ORDER BY name
-
+
@@ -2871,16 +2979,14 @@
SELECT DISTINCT
- COALESCE(CAST (year AS VARCHAR(64)), 'Unbekanntes Jahr') AS year
+ COALESCE(CAST (year AS VARCHAR(64)), 'Unbekanntes Jahr') AS year
FROM flood_marks
WHERE river_id = ${river_id}
-
+
@@ -2900,28 +3006,24 @@
SELECT DISTINCT
- ak.name AS kind_name,
- ax.kind_id AS kind_id,
- ax.name AS layer_name
+ ak.name AS kind_name,
+ ax.kind_id AS kind_id,
+ ax.name AS layer_name
FROM river_axes ax
- JOIN axis_kinds ak on ax.kind_id = ak.id
+ JOIN axis_kinds ak on ax.kind_id = ak.id
WHERE river_id = ${river_id}
-
+
-
+
@@ -2935,8 +3037,8 @@
SELECT DISTINCT 1 FROM river_axes_km WHERE river_id = ${river_id}
-
-
+
+
@@ -2947,11 +3049,10 @@
SELECT name AS name
FROM fixpoints
WHERE river_id = ${river_id}
- GROUP BY name
+ GROUP BY name
-
+
@@ -2960,29 +3061,25 @@
SELECT DISTINCT
- cs.kind_id AS kind_id,
- cs.name AS layer_name,
- ck.name AS kind_name
+ cs.kind_id AS kind_id,
+ cs.name AS layer_name,
+ ck.name AS kind_name
FROM cross_section_tracks cs
- JOIN cross_section_track_kinds ck ON cs.kind_id = ck.id
+ JOIN cross_section_track_kinds ck ON cs.kind_id = ck.id
WHERE river_id = ${river_id}
-
+
-
+
@@ -2997,27 +3094,23 @@
SELECT DISTINCT
- b.name AS building_name,
- bk.name AS building_kind,
- b.kind_id AS building_kind_id
+ b.name AS building_name,
+ bk.name AS building_kind,
+ b.kind_id AS building_kind_id
FROM buildings b
- JOIN building_kinds bk ON b.kind_id = bk.id
+ JOIN building_kinds bk ON b.kind_id = bk.id
WHERE river_id = ${river_id}
-
+
-
+
@@ -3026,18 +3119,16 @@
SELECT DISTINCT
- j.kind_id AS jetty_kind_id,
- jk.name AS jetty_kind
+ j.kind_id AS jetty_kind_id,
+ jk.name AS jetty_kind
FROM jetties j
- JOIN jetty_kinds jk ON j.kind_id = jk.id
+ JOIN jetty_kinds jk ON j.kind_id = jk.id
WHERE river_id = ${river_id}
-
+
@@ -3049,16 +3140,14 @@
-
-
-
+
+
+
-
+
@@ -3069,19 +3158,14 @@
-
+
-
-
+
+
-
-
+
+
-
+
-
+
-
+
-
+
-
+
@@ -3115,71 +3199,77 @@
-
- SELECT w.kind AS kind,
- w.id AS wst_id,
- wc.id AS wst_column_id,
- wc.position AS wst_column_position,
- wc.description AS info,
- w.description AS wst_description,
- COALESCE(wc.name, '') AS wst_column_name,
- wr.a AS deffrom,
- wr.b AS defto
+ SELECT w.kind AS kind,
+ w.id AS wst_id,
+ wc.id AS wst_column_id,
+ wc.position AS wst_column_position,
+ wc.description AS info,
+ w.description AS wst_description,
+ ti.start_time AS start_time,
+ ti.stop_time AS stop_time,
+ COALESCE(wc.name, '') AS wst_column_name,
+ wr.a AS deffrom,
+ wr.b AS defto,
+ w.sinfo_selection
FROM wst_columns wc
- JOIN wsts w ON wc.wst_id = w.id
- JOIN wst_ranges wr ON wc.id = wr.wst_column_id
+ JOIN wsts w ON wc.wst_id = w.id
+ JOIN wst_ranges wr ON wc.id = wr.wst_column_id
+ LEFT JOIN time_intervals ti ON wc.time_interval_id = ti.id
WHERE w.river_id = ${river_id} AND
- NOT((${tokm} < wr.a) or (${fromkm} > wr.b))
- ORDER BY wst_column_position
+ NOT((${tokm} < wr.a) or (${fromkm} > wr.b))
+ ORDER BY wst_column_position
-
+
-
- Select collections and masterartifacts.
- XXX: The cast is a quick hack because the ld_* values are
- now TEXT fields. To properly fix / asses the problems here
- an SLT evaluation is needed.
-
+
+ Select collections and masterartifacts.
+ XXX: The cast is a quick hack because the ld_* values are
+ now TEXT fields. To properly fix / asses the problems here
+ an SLT evaluation is needed.
+
- SELECT c.name AS collection_name,
- ma.id AS a_id,
- ma.state AS a_state,
- ma.gid AS a_gid,
- ma.creation AS a_creation,
- CAST(COALESCE(ma.ld_mode, '') AS VARCHAR(255)) AS ld_m,
- CAST(COALESCE(ma.ld_locations, '') AS VARCHAR(255)) AS ld_l,
- CAST(COALESCE(ma.ld_from, '') AS VARCHAR(255)) AS ld_f,
- CAST(COALESCE(ma.ld_to, '') AS VARCHAR(255)) AS ld_t,
- o.name AS out_name,
- o.id AS out_id,
- f.name AS facet_name,
- f.num AS facet_num,
- f.description AS facet_description,
- f.id AS fid
+ SELECT c.name AS collection_name,
+ ma.id AS a_id,
+ ma.state AS a_state,
+ ma.gid AS a_gid,
+ ma.creation AS a_creation,
+ CAST(COALESCE(ma.ld_mode, '') AS VARCHAR(255)) AS ld_m,
+ CAST(COALESCE(ma.ld_locations, '') AS VARCHAR(255)) AS ld_l,
+ CAST(COALESCE(ma.ld_from, '') AS VARCHAR(255)) AS ld_f,
+ CAST(COALESCE(ma.ld_to, '') AS VARCHAR(255)) AS ld_t,
+ o.name AS out_name,
+ o.id AS out_id,
+ f.name AS
+ facet_name,
+ f.num AS facet_num,
+ f.description AS facet_description,
+ f.id AS fid
FROM users u
- JOIN collections c ON c.user_id = u.id
- JOIN master_artifacts_range ma ON ma.collection_id = c.id
- JOIN outs o ON o.artifact_id = ma.id
- JOIN facets f ON f.out_id = o.id
- WHERE u.gid = CAST(${user-id} AS UUID)
- AND ma.gid <> CAST(${artifact-id} AS uuid)
- AND f.name NOT LIKE '%empty.facet%'
- AND EXISTS (
- SELECT id
- FROM artifact_data ad
- WHERE ad.artifact_id = ma.id
- AND k = 'river'
- AND v = ${river})
+ JOIN
+ collections c ON c.user_id = u.id
+ JOIN master_artifacts_range ma ON ma.collection_id = c.id
+ JOIN outs o ON o.artifact_id = ma.id
+ JOIN facets f ON f.out_id = o.id
+ WHERE u.gid = CAST(${user-id} AS UUID)
+ AND ma.gid <> CAST(${artifact-id} AS uuid)
+ AND f.name NOT LIKE '%empty.facet%'
+ AND EXISTS (
+ SELECT
+ id
+ FROM artifact_data ad
+ WHERE ad.artifact_id = ma.id
+ AND k = 'river'
+ AND v = ${river})
-
+
@@ -3192,40 +3282,371 @@
-
+
-
-
+
+
-
-
+
+
Inverting KM filter.
-
-
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SELECT s.id AS id, MIN(s.filename) AS seriesname, MIN(v.station) AS km_min, MAX(v.station) AS km_max,
+ MIN(s.filename) || '<br />'
+ || MIN(s.kmrange_info) || ']<br />'
+ || MIN(s.year_from) || ' - ' || MIN(s.year_to) || '<br />' AS info
+ FROM channel s
+ INNER JOIN channel_values v ON s.id=v.channel_id
+ WHERE (s.river_id=${river_id})
+ AND (v.station BETWEEN ${fromkm}-0.0001 AND ${tokm}+0.0001)
+ GROUP BY s.id
+ ORDER BY MIN(s.year_to) DESC
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SELECT sc.tkh_id AS tkh_id, sc.id AS tkh_col_id, MIN(sc.name) AS tkh_col_name,
+ MIN(s.filename) AS tkh_name, MIN(v.station) AS km_min, MAX(v.station) AS km_max,
+ MIN(s.filename) || '<br />'
+ || MIN(s.kmrange_info) || ']<br />'
+ || MIN(s.sounding_info) || '<br />'
+ || MIN(s.evaluation_by) AS info
+ FROM tkh_column sc
+ INNER JOIN tkh s ON sc.tkh_id=s.id
+ INNER JOIN tkh_values v ON sc.id=v.tkh_column_id
+ WHERE (s.river_id=${river_id})
+ AND (lower(s.groupname)=${tkh_groupname})
+ AND (v.station BETWEEN ${fromkm}-0.0001 AND ${tokm}+0.0001)
+ GROUP BY sc.tkh_id, sc.id
+ ORDER BY sc.id
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SELECT s.id AS depthevol_id, MIN(s.filename) AS depthevol_name, MIN(v.station) AS km_min, MAX(v.station) AS km_max,
+ MIN(s.filename) || '<br />'
+ || MIN(s.kmrange_info) || ']<br />'
+ || MIN(s.start_year) || ' - ' || MIN(s.reference_year) || '<br />'
+ || MIN(s.old_sounding) || ' - ' || MIN(s.curr_sounding) || '<br />'
+ || MIN(s.old_glw) || ' - ' ||
+ MIN(s.curr_glw) AS info
+ FROM depth_evolution s
+ INNER JOIN depth_evolution_values v ON s.id=v.depth_evolution_id
+ WHERE (s.river_id=${river_id})
+ AND (lower(s.groupname)=${depthevol_groupname})
+ AND (v.station BETWEEN ${fromkm}-0.0001 AND ${tokm}+0.0001)
+ GROUP BY s.id
+ ORDER BY s.id
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SELECT sc.flow_depth_id AS flowdepth_id, sc.id AS flowdepth_col_id, MIN(sc.name) AS flowdepth_col_name,
+ MIN(s.filename) AS flowdepth_name, MIN(v.station) AS km_min, MAX(v.station) AS km_max,
+ MIN(s.filename) || '<br />'
+ || MIN(s.kmrange_info) || ']<br />'
+ || MIN(s.sounding_info) || '<br />'
+ || MIN(s.evaluation_by) AS info
+ FROM flow_depth_column sc
+ INNER JOIN flow_depth s ON sc.flow_depth_id=s.id
+ INNER JOIN flow_depth_values v ON sc.id=v.flow_depth_column_id
+ WHERE (s.river_id=${river_id})
+ AND (v.station BETWEEN ${fromkm}-0.0001 AND ${tokm}+0.0001)
+ GROUP BY sc.flow_depth_id, sc.id
+ ORDER BY sc.id
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SELECT s.id AS id, MIN(s.filename) AS seriesname, MIN(v.station) AS km_min, MAX(v.station) AS km_max,
+ MIN(x.name) AS typename,
+ MIN(s.filename) || '<br />'
+ || MIN(s.kmrange_info) || '<br />'
+ || MIN(s.year) || '<br />' AS info
+ FROM infrastructure s
+ INNER JOIN infrastructure_values v ON s.id=v.infrastructure_id
+ INNER JOIN annotation_types x ON
+ s.annotation_type_id=x.id
+ WHERE (s.river_id=${river_id})
+ AND (v.station BETWEEN ${fromkm}-0.0001 AND ${tokm}+0.0001)
+ GROUP BY s.id
+ ORDER BY MIN(s.filename) DESC
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SELECT s.id AS id, MIN(s.filename) AS seriesname, MIN(v.station) AS km_min, MAX(v.station) AS km_max, MIN(s.year) AS year,
+ MIN(s.filename) || '<br />'
+ || MIN(s.kmrange_info) || '<br />'
+ || MIN(s.year) || '<br />' AS info
+ FROM collision s
+ INNER JOIN collision_values v ON s.id=v.collision_id
+ WHERE (s.river_id=${river_id})
+ AND (v.station BETWEEN ${fromkm}-0.0001 AND ${tokm}+0.0001)
+ GROUP BY s.id
+ ORDER BY MIN(s.year)
+
+
+
+
+
+
+
-
+
\ No newline at end of file
diff -r 14200ded6d67 -r 9be51f776798 artifacts/doc/conf/modules.xml
--- a/artifacts/doc/conf/modules.xml Fri Feb 09 15:39:49 2018 +0100
+++ b/artifacts/doc/conf/modules.xml Fri Jul 13 11:56:22 2018 +0200
@@ -1,19 +1,43 @@
-
-
-
-
-
-
-
+
+
+
-
-
+
+
+
+
-
-
+
+
+
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff -r 14200ded6d67 -r 9be51f776798 artifacts/doc/conf/sinfo_tkh_sohlhoehen_Beispielfluss.properties
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/artifacts/doc/conf/sinfo_tkh_sohlhoehen_Beispielfluss.properties Fri Jul 13 11:56:22 2018 +0200
@@ -0,0 +1,15 @@
+# Konfigurationsdatei f\u00fcr die in der Berechnungsart SINFO-Transportk\u00f6rperh\u00f6hen zu verwendenden Sohlh\u00f6hen.
+# Je Gew\u00e4sser ist eine Datei mit Namen "sinfo_tkh_sohlhoehen_.properties" anzulegen. Gro\u00df-/Kleinschriebung beim Gew\u00e4ssernamen ist zu beachten!
+# Die Datei ist im Charset 'ISO-8859-1' zu kodieren.
+
+# Die Datei definiert die Standardm\u00e4\u00dfig zu verwendenden Sohlh\u00f6hen und deren G\u00fcltigkeitsbereiche.
+# Pro Sohlh\u00f6he ist eine Zeile folgender Form anzulegen:
+# = ;
+
+# 'Sohlh\u00f6he' entspricht dem Feld 'description' in der Tabelle 'bed_height' der D4E Datenbank.
+# 'von km' entpsricht dem Start des G\u00fcltigkeitsbereichs in km
+# 'bis km' entpsricht dem Ende des G\u00fcltigkeitsbereichs in km
+
+# Der G\u00fcltigkeitsbereich schr\u00e4nkt den zu verwendenden Daten bereich der Sohlh\u00f6he f\u00fcr die TKH Berechnung ein, die Daten in der Datenbank k\u00f6nnen einen gr\u00f6\u00dferen G\u00fcltigkeitsbereich besitzen.
+# Leerzeichen im Namen der Sohlh\u00f6he m\u00fcssen mit u0020 kodiert werden.
+DGM-2004_Epoche-2-SOBEK = 0.0;182.4
diff -r 14200ded6d67 -r 9be51f776798 artifacts/doc/conf/themes.xml
--- a/artifacts/doc/conf/themes.xml Fri Feb 09 15:39:49 2018 +0100
+++ b/artifacts/doc/conf/themes.xml Fri Jul 13 11:56:22 2018 +0200
@@ -404,6 +404,69 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
\ No newline at end of file
diff -r 14200ded6d67 -r 9be51f776798 artifacts/doc/conf/themes/default.xml
--- a/artifacts/doc/conf/themes/default.xml Fri Feb 09 15:39:49 2018 +0100
+++ b/artifacts/doc/conf/themes/default.xml Fri Jul 13 11:56:22 2018 +0200
@@ -1,2875 +1,2886 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff -r 14200ded6d67 -r 9be51f776798 artifacts/doc/conf/themes/second.xml
--- a/artifacts/doc/conf/themes/second.xml Fri Feb 09 15:39:49 2018 +0100
+++ b/artifacts/doc/conf/themes/second.xml Fri Jul 13 11:56:22 2018 +0200
@@ -1,2872 +1,2874 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff -r 14200ded6d67 -r 9be51f776798 artifacts/doc/conf/themes/virtual.xml
--- a/artifacts/doc/conf/themes/virtual.xml Fri Feb 09 15:39:49 2018 +0100
+++ b/artifacts/doc/conf/themes/virtual.xml Fri Jul 13 11:56:22 2018 +0200
@@ -79,16 +79,20 @@
+
+
+
+
diff -r 14200ded6d67 -r 9be51f776798 artifacts/doc/conf/uinfo_uedauern_aue_Beispielfluss.properties
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/artifacts/doc/conf/uinfo_uedauern_aue_Beispielfluss.properties Fri Jul 13 11:56:22 2018 +0200
@@ -0,0 +1,10 @@
+jahre=1995,1996,1997
+#url=htps://geoportal.bafg.de/wms/${jahr}
+url=http://osm.intevation.de/bfg/service?
+scenario_url=htps://geoportal.bafg.de/wms/${jahr}_${scenario}
+
+#mittel_url=htps://geoportal.bafg.de/wms/${jahr}
+mittel_url=http://osm.intevation.de/bfg/service?
+mittel_scenario_url=htps://geoportal.bafg.de/wms/${scenario}
+mittel_start=8888
+mittel_ende=2000
\ No newline at end of file
diff -r 14200ded6d67 -r 9be51f776798 artifacts/doc/conf/uinfo_uedauern_aue_Elbe.properties
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/artifacts/doc/conf/uinfo_uedauern_aue_Elbe.properties Fri Jul 13 11:56:22 2018 +0200
@@ -0,0 +1,8 @@
+jahre=1995,1996,1997
+url=htps://geoportal.bafg.de/wms/${jahr}
+scenario_url=htps://geoportal.bafg.de/wms/${jahr}_${scenario}
+
+mittel_url=htps://geoportal.bafg.de/wms/
+mittel_start=1998
+mittel_ende=2000
+mittel_scenario_url=htps://geoportal.bafg.de/wms/${scenario}
diff -r 14200ded6d67 -r 9be51f776798 artifacts/pom-oracle.xml
--- a/artifacts/pom-oracle.xml Fri Feb 09 15:39:49 2018 +0100
+++ b/artifacts/pom-oracle.xml Fri Jul 13 11:56:22 2018 +0200
@@ -1,12 +1,10 @@
-
+
4.0.0
org.dive4elements.river
river-artifacts
1.0-SNAPSHOT
jar
-
river-artifacts
http://maven.apache.org
@@ -17,13 +15,13 @@
- org.apache.maven.plugins
- maven-compiler-plugin
- 2.0.2
-
-
- 1.7
-
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 2.0.2
+
+
+ 1.7
+
org.apache.maven.plugins
@@ -42,11 +40,40 @@
+
+ roboto.jar
+ roboto
+ 0
+ system
+ ${project.basedir}/contrib/fonts/roboto.jar
+
+
net.sf.ehcache
ehcache-core
2.4.2
@@ -113,9 +140,9 @@
1.3.158
- commons-io
- commons-io
- 2.4
+ commons-io
+ commons-io
+ 2.4
org.geotools
@@ -171,9 +198,9 @@
- jboss-repo2
- JBoss repo2
- http://repository.jboss.org/nexus/content/groups/public/
+ jboss-repo2
+ JBoss repo2
+ http://repository.jboss.org/nexus/content/groups/public/
gt2.repo
diff -r 14200ded6d67 -r 9be51f776798 artifacts/pom.xml
--- a/artifacts/pom.xml Fri Feb 09 15:39:49 2018 +0100
+++ b/artifacts/pom.xml Fri Jul 13 11:56:22 2018 +0200
@@ -1,12 +1,10 @@
-
+
4.0.0
org.dive4elements.river
river-artifacts
1.0-SNAPSHOT
jar
-
river-artifacts
http://maven.apache.org
@@ -17,13 +15,13 @@
- org.apache.maven.plugins
- maven-compiler-plugin
- 2.0.2
-
-
- 1.7
-
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 2.0.2
+
+
+ 1.7
+
org.apache.maven.plugins
@@ -42,33 +40,40 @@
-
+
+ roboto.jar
+ roboto
+ 0
+ system
+ ${project.basedir}/contrib/fonts/roboto.jar
+
+
net.sf.ehcache
ehcache-core
2.4.2
@@ -135,9 +140,9 @@
1.3.158
- commons-io
- commons-io
- 2.4
+ commons-io
+ commons-io
+ 2.4
org.geotools
@@ -193,9 +198,9 @@
- jboss-repo2
- JBoss repo2
- http://repository.jboss.org/nexus/content/groups/public/
+ jboss-repo2
+ JBoss repo2
+ http://repository.jboss.org/nexus/content/groups/public/
gt2.repo
diff -r 14200ded6d67 -r 9be51f776798 artifacts/src/assembly/assembly.xml
--- a/artifacts/src/assembly/assembly.xml Fri Feb 09 15:39:49 2018 +0100
+++ b/artifacts/src/assembly/assembly.xml Fri Jul 13 11:56:22 2018 +0200
@@ -13,6 +13,10 @@
/bin
+ ${project.basedir}/contrib/fonts
+ /bin/lib
+
+
${project.basedir}/doc/conf
/conf
@@ -30,10 +34,6 @@
${project.basedir}/../backend/doc/schema
/schema
-
- ${project.basedir}/../contrib/init.d
- /init.d
-
diff -r 14200ded6d67 -r 9be51f776798 artifacts/src/main/java/org/dive4elements/river/FLYS.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/artifacts/src/main/java/org/dive4elements/river/FLYS.java Fri Jul 13 11:56:22 2018 +0200
@@ -0,0 +1,18 @@
+/** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
+ * Software engineering by
+ * Björnsen Beratende Ingenieure GmbH
+ * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
+ *
+ * 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;
+
+/**
+ * @author Gernot Belger
+ *
+ */
+public interface FLYS {
+ static final String VERSION = "3.3.0";
+}
\ No newline at end of file
diff -r 14200ded6d67 -r 9be51f776798 artifacts/src/main/java/org/dive4elements/river/artifacts/BedHeightsArtifact.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/BedHeightsArtifact.java Fri Feb 09 15:39:49 2018 +0100
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/BedHeightsArtifact.java Fri Jul 13 11:56:22 2018 +0200
@@ -12,47 +12,42 @@
import java.util.List;
import org.apache.log4j.Logger;
-import org.w3c.dom.Document;
-
import org.dive4elements.artifactdatabase.state.DefaultOutput;
import org.dive4elements.artifactdatabase.state.Facet;
import org.dive4elements.artifactdatabase.state.FacetActivity;
+import org.dive4elements.artifacts.Artifact;
import org.dive4elements.artifacts.ArtifactFactory;
-import org.dive4elements.artifacts.Artifact;
import org.dive4elements.artifacts.CallMeta;
import org.dive4elements.artifacts.common.utils.XMLUtils;
import org.dive4elements.river.artifacts.model.FacetTypes;
import org.dive4elements.river.artifacts.model.minfo.BedHeightFacet;
-import org.dive4elements.river.artifacts.model.minfo.BedHeightFactory;
+import org.dive4elements.river.artifacts.model.minfo.BedHeightMinMaxFacet;
import org.dive4elements.river.artifacts.model.minfo.BedHeightSoundingWidthFacet;
+import org.dive4elements.river.artifacts.resources.Resources;
import org.dive4elements.river.artifacts.states.StaticState;
-
-import org.dive4elements.river.artifacts.resources.Resources;
+import org.dive4elements.river.exports.process.BedHeightProcessor;
+import org.dive4elements.river.model.BedHeightValueType;
+import org.w3c.dom.Document;
-public class BedHeightsArtifact
-extends AbstractStaticStateArtifact
-implements FacetTypes
-{
+public class BedHeightsArtifact extends AbstractStaticStateArtifact implements FacetTypes {
/** The log for this class. */
- private static Logger log =
- Logger.getLogger(BedHeightsArtifact.class);
+ private static Logger log = Logger.getLogger(BedHeightsArtifact.class);
/** Artifact name. */
private static final String NAME = "bedheights";
static {
// TODO: Move to configuration.
- FacetActivity.Registry.getInstance()
- .register(NAME, FacetActivity.INACTIVE);
+ FacetActivity.Registry.getInstance().register(NAME, FacetActivity.INACTIVE);
}
- public static final String STATIC_STATE_NAME =
- "state.additional_bedheights.static";
+ public static final String STATIC_STATE_NAME = "state.additional_bedheights.static";
- /** Data Item name to know whether we are Heighmarks and receive
- * some data slightly different. */
- public static final String DATA_HEIGHT_TYPE =
- "height_marks";
+ /**
+ * Data Item name to know whether we are Heighmarks and receive
+ * some data slightly different.
+ */
+ public static final String DATA_HEIGHT_TYPE = "height_marks";
/**
* Trivial Constructor.
@@ -70,74 +65,61 @@
* Gets called from factory, to set things up.
*/
@Override
- public void setup(
- String identifier,
- ArtifactFactory factory,
- Object context,
- CallMeta callMeta,
- Document data,
- List loadFacets)
- {
+ public void setup(final String identifier, final ArtifactFactory factory, final Object context, final CallMeta callMeta, final Document data,
+ final List loadFacets) {
log.debug("BedHeightsArtifact.setup");
if (log.isDebugEnabled()) {
log.debug(XMLUtils.toString(data));
}
- String code = getDatacageIDValue(data);
-
- if (code != null) {
- String [] parts = code.split("-");
-
- if (parts.length >= 3) {
- // The setting is a bit complicated:
- // This artifact can spawn epoch type bedheight facets,
- // 'singlevalue'/singleyear bedheight facets or
- // sounding-width facets. The type is indicated by
- // the ids-param which comes from datacage.
-
- String name = parts[0];
- String type = parts[1];
- String facetType = BEDHEIGHT;
- if (type.equals("soundings")) {
- type = "singlevalues";
- facetType = BEDHEIGHT_SOUNDING_WIDTH;
- }
- addStringData("height_id", parts[2]);
- addStringData("type", type);
- String btype = type;
- int hId = Integer.parseInt(parts[2]);
+ final String code = getDatacageIDValue(data);
- if (type.equals("singlevalues")) {
- btype = "single";
- }
-
- String bedHName = BedHeightFactory.getHeightName(btype, hId);
+ createFacets(callMeta, code);
- Facet facet = null;
- if (facetType.equals(BEDHEIGHT_SOUNDING_WIDTH)) {
- bedHName = Resources.getMsg(
- callMeta,
- "facet.bedheight.sounding_width",
- new Object[] { bedHName });
- facet = new BedHeightSoundingWidthFacet(
- facetType, bedHName);
- }
- else {
- facet = new BedHeightFacet(facetType, bedHName);
- }
+ super.setup(identifier, factory, context, callMeta, data, loadFacets);
+ }
-
- ArrayList facets = new ArrayList(1);
- facets.add(facet);
+ private void createFacets(final CallMeta callMeta, final String code) {
+ if (code == null)
+ return;
- addFacets(STATIC_STATE_NAME, facets);
- }
- else {
- log.error("Invalid datacage ID '" + code + "'");
- }
+ final String[] parts = code.split("-", 5);
+ if (parts.length < 5) {
+ log.error("Invalid datacage ID '" + code + "'");
+ return;
}
- super.setup(identifier, factory, context, callMeta, data, loadFacets);
+
+ // String name = parts[0];
+
+ // type may only be 'single' or 'soundings'
+ final String type = parts[1];
+
+ final String heightId = parts[2];
+ // final int hId = Integer.parseInt(heightId);
+
+ // final String year = parts[3];
+ final String bedHName = parts[4];
+
+ addStringData("height_id", heightId);
+ if (type.equals("soundings"))
+ addStringData("type", "singlevalues");
+ else
+ addStringData("type", type);
+
+ final ArrayList facets = new ArrayList<>(1);
+
+ if ("soundings".equals(type)) {
+ final String description = Resources.getMsg(callMeta, "facet.bedheight.sounding_width", new Object[] { bedHName });
+ facets.add(new BedHeightSoundingWidthFacet(BEDHEIGHT_SOUNDING_WIDTH, description));
+ } else if ("single".equals(type))
+ facets.add(new BedHeightFacet(BEDHEIGHT, bedHName));
+ else if ("singleMin".equals(type))
+ facets.add(new BedHeightMinMaxFacet(BedHeightProcessor.FACET_BED_HEIGHTS_MIN, bedHName, BedHeightValueType.min));
+ else if ("singleMax".equals(type))
+ facets.add(new BedHeightMinMaxFacet(BedHeightProcessor.FACET_BED_HEIGHTS_MAX, bedHName, BedHeightValueType.max));
+
+ addFacets(STATIC_STATE_NAME, facets);
}
@Override
@@ -145,14 +127,10 @@
log.debug("initStaticState " + getName() + " " + identifier());
- StaticState state = new StaticState(STATIC_STATE_NAME);
- DefaultOutput output = new DefaultOutput(
- "general",
- "general",
- "image/png",
- "chart");
+ final StaticState state = new StaticState(STATIC_STATE_NAME);
+ final DefaultOutput output = new DefaultOutput("general", "general", "image/png", "chart");
- List facets = getFacets(STATIC_STATE_NAME);
+ final List facets = getFacets(STATIC_STATE_NAME);
output.addFacets(facets);
state.addOutput(output);
@@ -160,20 +138,15 @@
}
@Override
- protected void initialize(
- Artifact artifact,
- Object context,
- CallMeta meta
- ) {
+ protected void initialize(final Artifact artifact, final Object context, final CallMeta meta) {
// do not clone facets, etc. from master artifact
log.debug("initialize");
- importData((D4EArtifact)artifact, "river");
- importData((D4EArtifact)artifact, "ld_from");
- importData((D4EArtifact)artifact, "ld_to");
+ importData((D4EArtifact) artifact, "river");
+ importData((D4EArtifact) artifact, "ld_from");
+ importData((D4EArtifact) artifact, "ld_to");
log.debug("ld_from " + getDataAsString("ld_from"));
log.debug("ld_to " + getDataAsString("ld_to"));
}
-}
-// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :
+}
\ No newline at end of file
diff -r 14200ded6d67 -r 9be51f776798 artifacts/src/main/java/org/dive4elements/river/artifacts/CollectionMonitor.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/CollectionMonitor.java Fri Feb 09 15:39:49 2018 +0100
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/CollectionMonitor.java Fri Jul 13 11:56:22 2018 +0200
@@ -89,9 +89,7 @@
} else { // Not found in cache -> generate it.
Element r = createElement(XMLUtils.newDocument());
- Recommendations.getInstance().recommend(
- artifact, null, outs,
- getNoneUserSpecificParameters(artifact, context), r);
+ Recommendations.getInstance().recommend( artifact, null, outs, getNoneUserSpecificParameters(artifact, context), r, context);
recommendations = (Element)doc.importNode(r, true);
@@ -101,10 +99,7 @@
recommendations = createElement(doc);
- Recommendations.getInstance().recommend(
- artifact, null, outs,
- getNoneUserSpecificParameters(artifact, context),
- recommendations);
+ Recommendations.getInstance().recommend( artifact, null, outs, getNoneUserSpecificParameters(artifact, context), recommendations, context);
}
return recommendations;
diff -r 14200ded6d67 -r 9be51f776798 artifacts/src/main/java/org/dive4elements/river/artifacts/D4EArtifact.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/D4EArtifact.java Fri Feb 09 15:39:49 2018 +0100
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/D4EArtifact.java Fri Jul 13 11:56:22 2018 +0200
@@ -1014,6 +1014,19 @@
log.debug("Bound to out: " + getBoundToOut());
log.debug("OutName: " + outName);
+ // REMARK: look for facets of the current state
+ final List currentFacets = facets.get(getCurrentStateId());
+ if( currentFacets != null ) {
+ for (Facet f: currentFacets) {
+ if (f.getIndex() == index && f.getName().equals(name))
+ return f;
+ }
+ }
+
+ // REMARK: this is old code, we should never get here actually.
+ // This posed leads to a problem when the user changes the calculation-mode after one calculation was executed.
+ // If both (new and old) calculations contained the same output-facet, it could happen that an old facet was executed
+ // with the calculation results of the new calculation.
for (List fs: facets.values()) {
for (Facet f: fs) {
if (f.getIndex() == index && f.getName().equals(name)) {
diff -r 14200ded6d67 -r 9be51f776798 artifacts/src/main/java/org/dive4elements/river/artifacts/StaticWQKmsArtifact.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/StaticWQKmsArtifact.java Fri Feb 09 15:39:49 2018 +0100
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/StaticWQKmsArtifact.java Fri Jul 13 11:56:22 2018 +0200
@@ -181,6 +181,24 @@
return res;
}
+ /**
+ * Get WQKms from factory.
+ * @return WQKms according to parameterization (can be null);
+ */
+ public WQKms getWQKms(final double from, final double to) {
+ log.debug("StaticWQKmsArtifact.getWQKms");
+
+ int col = Integer.parseInt(getDataAsString("col_pos"));
+ int wst = Integer.parseInt(getDataAsString("wst_id"));
+
+ /** TODO do not run twice against db to do this. */
+ String wkmsName = WKmsFactory.getWKmsName(col, wst);
+
+ WQKms res = WQKmsFactory.getWQKms(col, wst, from, to);
+ res.setName(wkmsName);
+ return res;
+ }
+
/** Return specific name. */
@Override
public String getName() {
diff -r 14200ded6d67 -r 9be51f776798 artifacts/src/main/java/org/dive4elements/river/artifacts/WINFOArtifact.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/WINFOArtifact.java Fri Feb 09 15:39:49 2018 +0100
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/WINFOArtifact.java Fri Jul 13 11:56:22 2018 +0200
@@ -20,7 +20,8 @@
import org.dive4elements.river.artifacts.access.Calculation4Access;
import org.dive4elements.river.artifacts.access.RangeAccess;
-
+import org.dive4elements.river.artifacts.access.RiverAccess;
+import org.dive4elements.river.artifacts.access.ComputationRangeAccess;
import org.dive4elements.river.artifacts.geom.Lines;
import org.dive4elements.river.artifacts.model.Calculation1;
@@ -42,8 +43,6 @@
import org.dive4elements.river.artifacts.states.DefaultState.ComputeType;
-import org.dive4elements.river.artifacts.states.LocationDistanceSelect;
-
import org.dive4elements.river.model.DischargeTable;
import org.dive4elements.river.model.FastCrossSectionLine;
import org.dive4elements.river.model.Gauge;
@@ -174,7 +173,7 @@
return this.getWaterlevelData(null);
}
- protected CalculationResult getDischargeLongitudinalSectionData() {
+ private CalculationResult getDischargeLongitudinalSectionData() {
// TODO: This caluclation should be cached as it is quite expensive.
return new Calculation4(new Calculation4Access(this)).calculate();
}
@@ -191,44 +190,51 @@
String calculationMode = getDataAsString("calculation_mode");
// If this WINFO-Artifact has a calculation trait.
- if (calculationMode != null) {
- if (calculationMode.equals("calc.discharge.longitudinal.section")
- ) {
+ if (calculationMode != null)
+ {
+ if (calculationMode.equals("calc.discharge.longitudinal.section"))
return getDischargeLongitudinalSectionData();
- }
- else if (calculationMode.equals("calc.extreme.curve")) {
- return (CalculationResult)
- this.compute(context, ComputeType.ADVANCE, false);
- }
- else if (calculationMode.equals("calc.w.differences")) {
- return (CalculationResult)
- this.compute(context, ComputeType.ADVANCE, true);
- }
- else {
- log.warn("Unhandled calculation_mode " + calculationMode);
- }
+
+ if (calculationMode.equals("calc.extreme.curve"))
+ return (CalculationResult)this.compute(context, ComputeType.ADVANCE, false);
+
+ if (calculationMode.equals("calc.w.differences"))
+ return (CalculationResult)this.compute(context, ComputeType.ADVANCE, true);
+
+ log.warn("Unhandled calculation_mode " + calculationMode);
}
-
+
// Otherwise get it from parameterization.
- River river = RiverUtils.getRiver(this);
- if (river == null) {
+ // TODO: wrong comment: now always a waterlevle computation is executed; actually there is a calc_mode for that, why dont check?
+ return computeWaterlevelData();
+ }
+
+ /** Execu5tes the calculation of 'waterlevel', fetches all input data from this artifact */
+ private CalculationResult computeWaterlevelData() {
+ final double[] kms = new ComputationRangeAccess(this).getKms();
+ if (kms == null)
+ return error(new WQKms[0], "no.kms.selected");
+
+ return computeWaterlevelData(kms);
+ }
+
+ /**
+ * Execu5tes the calculation of 'waterlevel'.
+ * Allows to override the stations for which the calculation is done. All other inputs are fetched from this artifact.
+ */
+ public final CalculationResult computeWaterlevelData(final double kms[]) {
+
+ final River river = new RiverAccess(this).getRiver();
+ if (river == null)
return error(new WQKms[0], "no.river.selected");
- }
-
- double[] kms = getKms();
- if (kms == null) {
- return error(new WQKms[0], "no.kms.selected");
- }
double[] qs = getQs();
double[] ws = null;
- boolean qSel = true;
Calculation report = new Calculation();
if (qs == null) {
log.debug("Determine Q values based on a set of W values.");
- qSel = false;
ws = getWs();
double [][] qws = getQsForWs(ws, report);
if (qws == null || qws.length == 0) {
@@ -273,10 +279,9 @@
"reference gauge: " + gauge.getName() + " (km " + refKm + ")");
}
- return computeWaterlevelData(kms, qs, ws, wst, refKm, report);
+ return computeWaterlevelData(kms, qs, ws, wst, refKm, report);
}
-
/**
* Computes the data of a waterlevel computation based on the interpolation
* in WstValueTable.
@@ -287,7 +292,7 @@
*
* @return an array of data triples that consist of W, Q and Kms.
*/
- public static CalculationResult computeWaterlevelData(
+ private static CalculationResult computeWaterlevelData(
double [] kms,
double [] qs,
double [] ws,
@@ -349,7 +354,7 @@
*
* @return the computed data.
*/
- public static CalculationResult computeDurationCurveData(
+ private static CalculationResult computeDurationCurveData(
Gauge gauge,
WstValueTable wst,
double location)
@@ -409,7 +414,7 @@
* @return an object that contains tuples of W/Q values at the specified
* location.
*/
- public static CalculationResult computeDischargeCurveData(
+ private static CalculationResult computeDischargeCurveData(
WstValueTable wst,
double location)
{
@@ -544,7 +549,7 @@
/**
* Get corrected waterline against surface/profile.
*/
- public Lines.LineData waterLineC(int idx, FastCrossSectionLine csl) {
+ private Lines.LineData waterLineC(int idx, FastCrossSectionLine csl) {
List points = csl.getPoints();
WQKms[] wqckms = (WQKms[])
@@ -665,7 +670,7 @@
*
* @return an array of Q values.
*/
- public double [][] getQsForWs(double[] ws, Calculation report) {
+ private double [][] getQsForWs(double[] ws, Calculation report) {
if (ws == null) {
log.error("getQsForWs: ws == null");
@@ -803,54 +808,6 @@
/**
- * Returns the selected Kms.
- *
- * @return the selected kms.
- */
- public double[] getKms() {
- RangeAccess rangeAccess = new RangeAccess(this);
- if (rangeAccess.isRange()) {
- return rangeAccess.getKmSteps();
- }
- else {
- return LocationDistanceSelect.getLocations(this);
- }
- }
-
-
- public double [] getFromToStep() {
- RangeAccess rangeAccess = new RangeAccess(this);
- if (!rangeAccess.isRange()) {
- return null;
- }
- double [] fromTo = rangeAccess.getKmRange();
-
- if (fromTo == null) {
- return null;
- }
-
- StateData dStep = getData("ld_step");
- if (dStep == null) {
- return null;
- }
-
- double [] result = new double[3];
- result[0] = fromTo[0];
- result[1] = fromTo[1];
-
- try {
- String step = (String)dStep.getValue();
- result[2] = DoubleUtil.round(Double.parseDouble(step) / 1000d);
- }
- catch (NumberFormatException nfe) {
- return null;
- }
-
- return result;
- }
-
-
- /**
* This method returns the Q values.
*
* @return the selected Q values or null, if no Q values are selected.
diff -r 14200ded6d67 -r 9be51f776798 artifacts/src/main/java/org/dive4elements/river/artifacts/access/ComputationRangeAccess.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/access/ComputationRangeAccess.java Fri Jul 13 11:56:22 2018 +0200
@@ -0,0 +1,84 @@
+/** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
+ * Software engineering by
+ * Björnsen Beratende Ingenieure GmbH
+ * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
+ *
+ * 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.access;
+
+import org.dive4elements.artifactdatabase.data.StateData;
+import org.dive4elements.river.artifacts.D4EArtifact;
+import org.dive4elements.river.artifacts.states.ComputationRangeState;
+import org.dive4elements.river.utils.DoubleUtil;
+
+/**
+ * Access to data handled by {@link ComputationRangeState}.
+ *
+ * @author Gernot Belger
+ */
+public class ComputationRangeAccess extends RangeAccess {
+
+ public ComputationRangeAccess(final D4EArtifact artifact) {
+ super(artifact);
+ }
+
+ public double[] getFromToStep() {
+
+ if (!isRange())
+ return null;
+
+ final double[] fromTo = getKmRange();
+
+ if (fromTo == null)
+ return null;
+
+ final StateData dStep = getArtifact().getData("ld_step");
+ if (dStep == null)
+ return null;
+
+ final double[] result = new double[3];
+ result[0] = fromTo[0];
+ result[1] = fromTo[1];
+
+ try {
+ final String dStepValue = (String) dStep.getValue();
+ result[2] = DoubleUtil.round(Double.parseDouble(dStepValue) / 1000d);
+ return result;
+ }
+ catch (final NumberFormatException nfe) {
+ nfe.printStackTrace();
+ return null;
+ }
+ }
+
+ public final double getStartKm() {
+
+ final KM_MODE mode = getKmRangeMode();
+ switch (mode) {
+ case RANGE:
+ case DISTANCE_ONLY:
+ return getFrom();
+
+ case LOCATIONS:
+ case NONE:
+ default:
+ final double[] locations = getLocations();
+ if( locations != null && locations.length > 0 )
+ // TODO: this is the old behaviour, but what happens if the user enters the values unsorted?
+ return locations[0];
+
+ return Double.NaN;
+ }
+ }
+
+ public double[] getKms() {
+
+ if (isRange())
+ return getKmSteps();
+
+ return getLocations();
+ }
+}
\ No newline at end of file
diff -r 14200ded6d67 -r 9be51f776798 artifacts/src/main/java/org/dive4elements/river/artifacts/access/DGMAccess.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/access/DGMAccess.java Fri Feb 09 15:39:49 2018 +0100
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/access/DGMAccess.java Fri Jul 13 11:56:22 2018 +0200
@@ -18,9 +18,6 @@
private String geoJSON;
- public DGMAccess() {
- }
-
public DGMAccess(D4EArtifact artifact) {
super(artifact);
}
diff -r 14200ded6d67 -r 9be51f776798 artifacts/src/main/java/org/dive4elements/river/artifacts/access/RangeAccess.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/access/RangeAccess.java Fri Feb 09 15:39:49 2018 +0100
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/access/RangeAccess.java Fri Jul 13 11:56:22 2018 +0200
@@ -8,68 +8,74 @@
package org.dive4elements.river.artifacts.access;
-import gnu.trove.TDoubleArrayList;
-
+import org.apache.commons.lang.math.DoubleRange;
import org.apache.log4j.Logger;
-
import org.dive4elements.river.artifacts.D4EArtifact;
import org.dive4elements.river.artifacts.WINFOArtifact;
-
+import org.dive4elements.river.utils.DoubleUtil;
import org.dive4elements.river.utils.RiverUtils;
-import org.dive4elements.river.utils.DoubleUtil;
+import gnu.trove.TDoubleArrayList;
/** For the moment, light-weight wrapper around RiverUtils. */
// TODO employ 'Caching' like other Accesses, remove usage of RiverUtils.
-public class RangeAccess
-extends RiverAccess
-{
+public class RangeAccess extends RiverAccess {
private static Logger log = Logger.getLogger(RangeAccess.class);
- public static enum KM_MODE { RANGE, LOCATIONS, NONE };
+ public static enum KM_MODE {
+ RANGE, LOCATIONS, NONE, DISTANCE_ONLY
+ }
/** The default step width between the start end end kilometer. */
public static final double DEFAULT_KM_STEPS = 0.1;
- double[] kmRange;
+ private Double from;
- Double from;
+ private Double to;
- Double to;
-
- Double step;
+ private Double step;
private KM_MODE mode;
- public RangeAccess() {
- }
-
- public RangeAccess(D4EArtifact artifact) {
+ public RangeAccess(final D4EArtifact artifact) {
super(artifact);
}
-
/** Evaluate the ld_mode data of artifact. */
public KM_MODE getKmRangeMode() {
- if (mode != null) {
- return mode;
- }
- String modeData = getString("ld_mode");
+ if (this.mode != null)
+ return this.mode;
- if (modeData == null || modeData.length() == 0) {
- mode = KM_MODE.NONE;
+ final String modeData = getString("ld_mode");
+ this.mode = parseRangeMode(modeData);
+
+ return this.mode;
+ }
+
+ private KM_MODE parseRangeMode(final String modeData) {
+
+ if (modeData == null)
+ return KM_MODE.NONE;
+
+ switch (modeData) {
+ case "distance":
+ return KM_MODE.RANGE;
+
+ case "distance_only":
+ return KM_MODE.DISTANCE_ONLY;
+
+ case "locations":
+ return KM_MODE.LOCATIONS;
+
+ default:
+ return KM_MODE.NONE;
}
- else if (modeData.equals("distance")) {
- mode = KM_MODE.RANGE;
- }
- else if (modeData.equals("locations")) {
- mode = KM_MODE.LOCATIONS;
- }
- else {
- mode = KM_MODE.NONE;
- }
+ }
- return mode;
+ public final DoubleRange getRange() {
+ final double from = getFrom();
+ final double to = getTo();
+ return new DoubleRange(from, to);
}
/** Check if the calculation mode is Range. */
@@ -82,39 +88,28 @@
* (from ld_locations data), null if not parameterized this way.
*/
public double[] getLocations() {
- String locationStr = getString("ld_locations");
+ final String locationStr = getString("ld_locations");
if (locationStr == null || locationStr.length() == 0) {
if (getArtifact() instanceof WINFOArtifact) {
- WINFOArtifact winfo = (WINFOArtifact) getArtifact();
- if (winfo.getReferenceStartKm() != null
- && winfo.getReferenceEndKms() != null
- ) {
- return new double[]
- {
- winfo.getReferenceStartKm().doubleValue(),
- winfo.getReferenceEndKms()[0]
- };
- }
- else if (winfo.getReferenceStartKm() != null) {
- return new double[]
- {
- winfo.getReferenceStartKm().doubleValue(),
- winfo.getReferenceStartKm().doubleValue()
- };
+ final WINFOArtifact winfo = (WINFOArtifact) getArtifact();
+ if (winfo.getReferenceStartKm() != null && winfo.getReferenceEndKms() != null) {
+ return new double[] { winfo.getReferenceStartKm().doubleValue(), winfo.getReferenceEndKms()[0] };
+ } else if (winfo.getReferenceStartKm() != null) {
+ return new double[] { winfo.getReferenceStartKm().doubleValue(), winfo.getReferenceStartKm().doubleValue() };
}
}
return null;
}
- String[] tmp = locationStr.split(" ");
- TDoubleArrayList locations = new TDoubleArrayList();
+ final String[] tmp = locationStr.split(" ");
+ final TDoubleArrayList locations = new TDoubleArrayList();
- for (String l: tmp) {
+ for (final String l : tmp) {
try {
locations.add(Double.parseDouble(l));
}
- catch (NumberFormatException nfe) {
+ catch (final NumberFormatException nfe) {
log.debug(nfe.getLocalizedMessage(), nfe);
}
}
@@ -125,87 +120,89 @@
}
public boolean hasFrom() {
- return from != null || (from = getDouble("ld_from")) != null;
+ return this.from != null || (this.from = getDouble("ld_from")) != null;
}
public boolean hasTo() {
- return to != null || (to = getDouble("ld_to")) != null;
+ return this.to != null || (this.to = getDouble("ld_to")) != null;
}
- /* If left_to_right is set to true this returns
- * the smaller value of from and to. */
- public double getFrom(boolean left_to_right) {
+ /*
+ * If left_to_right is set to true this returns
+ * the smaller value of from and to.
+ */
+ public double getFrom(final boolean left_to_right) {
if (!left_to_right) {
return getFrom();
}
- double from = getFrom();
- double to = getTo();
+ final double from = getFrom();
+ final double to = getTo();
return from > to ? to : from;
}
/** Return ld_from data (in km). If not found, the min. */
public double getFrom() {
- if (from == null) {
- from = getDouble("ld_from");
+ if (this.from == null) {
+ this.from = getDouble("ld_from");
}
if (log.isDebugEnabled()) {
- log.debug("from from data: '" + from + "'");
+ log.debug("from from data: '" + this.from + "'");
}
- if (from == null) {
+ if (this.from == null) {
log.warn("No 'from' found. Assume min of river.");
return getRiver().determineMinMaxDistance()[0];
}
- return from.doubleValue();
+ return this.from.doubleValue();
}
- /* If left_to_right is set to true this returns
- * the larger value of from and to. */
- public double getTo(boolean left_to_right) {
+ /*
+ * If left_to_right is set to true this returns
+ * the larger value of from and to.
+ */
+ public double getTo(final boolean left_to_right) {
if (!left_to_right) {
return getTo();
}
- double from = getFrom();
- double to = getTo();
+ final double from = getFrom();
+ final double to = getTo();
return from > to ? from : to;
}
/** Return ld_to data (in km), if not found, the max. */
public double getTo() {
- if (to == null) {
- to = getDouble("ld_to");
+ if (this.to == null) {
+ this.to = getDouble("ld_to");
}
if (log.isDebugEnabled()) {
- log.debug("to from data: '" + to + "'");
+ log.debug("to from data: '" + this.to + "'");
}
- if (to == null) {
+ if (this.to == null) {
log.warn("No 'to' found. Assume max of river.");
return getRiver().determineMinMaxDistance()[1];
}
- return to.doubleValue();
+ return this.to.doubleValue();
}
-
/** Step width for calculation. */
public Double getStep() {
- if (step == null) {
- step = getDouble("ld_step");
+ if (this.step == null) {
+ this.step = getDouble("ld_step");
}
if (log.isDebugEnabled()) {
- log.debug("step: '" + step + "'");
+ log.debug("step: '" + this.step + "'");
}
- return step;
+ return this.step;
}
-
/**
* Get min and max kilometer, independent of parametization
* (ld_from/to vs ld_locations).
@@ -213,37 +210,35 @@
public double[] getKmRange() {
// TODO store kmRange in field.
switch (getKmRangeMode()) {
- case RANGE: {
+ case RANGE:
+ case DISTANCE_ONLY:
+ return getKmFromTo();
+
+ case LOCATIONS: {
+ final double[] locs = getLocations();
+ // if no locations, nPE.
+ if (locs == null) {
+ log.warn("no locations to get km range from.");
+ return new double[] { Double.NaN, Double.NaN };
+ }
+ return new double[] { locs[0], locs[locs.length - 1] };
+ }
+
+ case NONE: {
+ final double[] locs = getLocations();
+ if (locs != null) {
+ return new double[] { locs[0], locs[locs.length - 1] };
+ } else {
return getKmFromTo();
}
-
- case LOCATIONS: {
- double[] locs = getLocations();
- // if no locations, nPE.
- if (locs == null) {
- log.warn("no locations to get km range from.");
- return new double[] { Double.NaN, Double.NaN };
- }
- return new double[] { locs[0], locs[locs.length-1] };
- }
-
- case NONE: {
- double[] locs = getLocations();
- if (locs != null) {
- return new double[] { locs[0], locs[locs.length-1] };
- }
- else {
- return getKmFromTo();
- }
- }
+ }
}
return new double[] { Double.NaN, Double.NaN };
}
-
public double[] getKmFromTo() {
- return RiverUtils.getKmFromTo(this.getArtifact());
+ return RiverUtils.getKmFromTo(this.getArtifact());
}
/**
@@ -263,5 +258,13 @@
return DoubleUtil.explode(getFrom(), getTo(), step);
}
+
+ public final double getLowerKm() {
+ return Math.min(this.getFrom(), this.getTo());
+ }
+
+ public final double getUpperKm() {
+ return Math.max(this.getFrom(), this.getTo());
+ }
}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :
diff -r 14200ded6d67 -r 9be51f776798 artifacts/src/main/java/org/dive4elements/river/artifacts/access/RiverAccess.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/access/RiverAccess.java Fri Feb 09 15:39:49 2018 +0100
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/access/RiverAccess.java Fri Jul 13 11:56:22 2018 +0200
@@ -24,11 +24,7 @@
private static Logger log = Logger.getLogger(RiverAccess.class);
/** River name. */
- protected String river;
-
-
- public RiverAccess() {
- }
+ private String river;
public RiverAccess(D4EArtifact artifact) {
super(artifact);
diff -r 14200ded6d67 -r 9be51f776798 artifacts/src/main/java/org/dive4elements/river/artifacts/access/SQRelationAccess.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/access/SQRelationAccess.java Fri Feb 09 15:39:49 2018 +0100
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/access/SQRelationAccess.java Fri Jul 13 11:56:22 2018 +0200
@@ -22,18 +22,15 @@
{
private static Logger log = Logger.getLogger(SQRelationAccess.class);
- protected Double location;
+ private Double location;
- protected DateRange period;
+ private DateRange period;
- protected Double outliers;
+ private Double outliers;
private String method;
- protected MeasurementStation measurementStation;
-
- public SQRelationAccess() {
- }
+ private MeasurementStation measurementStation;
public SQRelationAccess(D4EArtifact artifact) {
super(artifact);
diff -r 14200ded6d67 -r 9be51f776798 artifacts/src/main/java/org/dive4elements/river/artifacts/bundu/BUNDUArtifact.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/bundu/BUNDUArtifact.java Fri Jul 13 11:56:22 2018 +0200
@@ -0,0 +1,88 @@
+/* Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
+ * Software engineering by
+ * Björnsen Beratende Ingenieure GmbH
+ * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
+ *
+ * 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.bundu;
+
+import org.apache.commons.lang.StringUtils;
+import org.dive4elements.artifactdatabase.state.Facet;
+import org.dive4elements.artifactdatabase.state.FacetActivity;
+import org.dive4elements.artifacts.Artifact;
+import org.dive4elements.river.artifacts.D4EArtifact;
+
+/**
+ * The default BUNDU artifact.
+ *
+ * @author Gernot Belger
+ */
+public class BUNDUArtifact extends D4EArtifact {
+
+ private static final long serialVersionUID = 1L;
+
+ /** Error message that is thrown if no mode has been chosen. */
+ private static final String ERROR_NO_CALCULATION_MODE = "error_feed_no_calculation_mode";
+
+ /**
+ * Error message that is thrown if an invalid calculation mode has been chosen.
+ */
+ private static final String ERROR_INVALID_CALCULATION_MODE = "error_feed_invalid_calculation_mode";
+
+ /** The name of the artifact. */
+ private static final String ARTIFACT_NAME = "bundu";
+
+ private static final String FIELD_RIVER = "river";
+
+ private static final String FIELD_MODE = "calculation_mode";
+
+ static {
+ // Active/deactivate facets.
+ // BEWARE: we can only define one activity for "sinfo", so we use the artifact
+ // as place for this
+ FacetActivity.Registry.getInstance().register(ARTIFACT_NAME, new FacetActivity() {
+ @Override
+ public Boolean isInitialActive(final Artifact artifact, final Facet facet, final String output) {
+ return null;
+ }
+ });
+ }
+
+ /**
+ * Default constructor, because it's serializable.
+ */
+ public BUNDUArtifact() {
+ }
+
+ /**
+ * Returns the name of the concrete artifact.
+ *
+ * @return the name of the concrete artifact.
+ */
+ @Override
+ public String getName() {
+ return ARTIFACT_NAME;
+ }
+
+ public BunduCalcMode getCalculationMode() {
+
+ final String calc = getDataAsString(FIELD_MODE);
+ if (calc == null) {
+ throw new IllegalArgumentException(ERROR_NO_CALCULATION_MODE);
+ }
+
+ try {
+ return BunduCalcMode.valueOf(StringUtils.trimToEmpty(calc).toLowerCase());
+ }
+ catch (final Exception e) {
+ throw new IllegalArgumentException(ERROR_INVALID_CALCULATION_MODE, e);
+ }
+ }
+
+ public String getRiver() {
+ return getDataAsString(FIELD_RIVER);
+ }
+}
\ No newline at end of file
diff -r 14200ded6d67 -r 9be51f776798 artifacts/src/main/java/org/dive4elements/river/artifacts/bundu/BunduCalcMode.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/bundu/BunduCalcMode.java Fri Jul 13 11:56:22 2018 +0200
@@ -0,0 +1,16 @@
+/* Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
+ * Software engineering by
+ * Björnsen Beratende Ingenieure GmbH
+ * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
+ *
+ * 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.bundu;
+
+public enum BunduCalcMode {
+
+ bundu_analysis, bundu_vollmer, bundu_bezugswst
+}
\ No newline at end of file
diff -r 14200ded6d67 -r 9be51f776798 artifacts/src/main/java/org/dive4elements/river/artifacts/bundu/CalculationSelectBundu.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/bundu/CalculationSelectBundu.java Fri Jul 13 11:56:22 2018 +0200
@@ -0,0 +1,61 @@
+/* Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
+ * Software engineering by
+ * Björnsen Beratende Ingenieure GmbH
+ * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
+ *
+ * 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.bundu;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+import org.apache.log4j.Logger;
+import org.dive4elements.artifacts.Artifact;
+import org.dive4elements.artifacts.CallContext;
+import org.dive4elements.artifacts.CallMeta;
+import org.dive4elements.artifacts.common.utils.XMLUtils;
+import org.dive4elements.river.artifacts.resources.Resources;
+import org.dive4elements.river.artifacts.states.DefaultState;
+import org.w3c.dom.Element;
+
+/**
+ * @author Gernot Belger
+ */
+public class CalculationSelectBundu extends DefaultState {
+
+ private static final long serialVersionUID = 1L;
+
+ /** The log that is used in this class. */
+ private static Logger log = Logger.getLogger(CalculationSelectBundu.class);
+
+ @Override
+ protected Element[] createItems(final XMLUtils.ElementCreator cr, final Artifact artifact, final String name, final CallContext context) {
+ final CallMeta meta = context.getMeta();
+
+ final Collection calcs = new ArrayList<>(BunduCalcMode.values().length);
+
+ for (final BunduCalcMode calcMode : BunduCalcMode.values()) {
+ final String calc = calcMode.name();
+
+ final String label = Resources.getMsg(meta, calc, calc);
+
+ final Element element = createItem(cr, new String[] { label, calc });
+ calcs.add(element);
+ }
+
+ return calcs.toArray(new Element[calcs.size()]);
+ }
+
+ @Override
+ public boolean validate(final Artifact artifact) throws IllegalArgumentException {
+ log.debug("CalculationSelect.validate");
+
+ final BUNDUArtifact m_artifact = (BUNDUArtifact) artifact;
+ /* throws an exception if calculation mode is invalid */
+ m_artifact.getCalculationMode();
+ return true;
+ }
+}
\ No newline at end of file
diff -r 14200ded6d67 -r 9be51f776798 artifacts/src/main/java/org/dive4elements/river/artifacts/bundu/bezugswst/BezugswstState.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/bundu/bezugswst/BezugswstState.java Fri Jul 13 11:56:22 2018 +0200
@@ -0,0 +1,32 @@
+/** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
+ * Software engineering by
+ * Björnsen Beratende Ingenieure GmbH
+ * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
+ *
+ * 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.bundu.bezugswst;
+
+import org.dive4elements.river.artifacts.states.DefaultState;
+
+/**
+ * @author Domenico Nardi Tironi
+ */
+public class BezugswstState extends DefaultState {
+
+ /// ** The log that is used in this state. */
+ // private static Logger log = Logger.getLogger(FlowDepthState.class);
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * From this state can only be continued trivially.
+ */
+ @Override
+ protected String getUIProvider() {
+ return "continue";
+ }
+
+}
\ No newline at end of file
diff -r 14200ded6d67 -r 9be51f776798 artifacts/src/main/java/org/dive4elements/river/artifacts/bundu/bezugswst/FixationChoice.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/bundu/bezugswst/FixationChoice.java Fri Jul 13 11:56:22 2018 +0200
@@ -0,0 +1,31 @@
+/* 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.bundu.bezugswst;
+
+import java.util.LinkedHashMap;
+
+import org.dive4elements.artifacts.Artifact;
+import org.dive4elements.artifacts.CallMeta;
+import org.dive4elements.river.artifacts.states.RadioSelect;
+
+/**
+ * @author Ingo Weinzierl
+ */
+public class FixationChoice extends RadioSelect {
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ protected LinkedHashMap makeEntries(final CallMeta meta, final Artifact artifact) {
+ final LinkedHashMap entries = new LinkedHashMap<>();
+ entries.put("state.bundu.fix.auto", null);
+ entries.put("state.bundu.fix.manual", null);
+ return entries;
+ }
+
+}
\ No newline at end of file
diff -r 14200ded6d67 -r 9be51f776798 artifacts/src/main/java/org/dive4elements/river/artifacts/common/AbstractCalculationExportableResult.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/common/AbstractCalculationExportableResult.java Fri Jul 13 11:56:22 2018 +0200
@@ -0,0 +1,78 @@
+/** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
+ * Software engineering by
+ * Björnsen Beratende Ingenieure GmbH
+ * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
+ *
+ * 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.common;
+
+import java.util.Collection;
+
+import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
+
+import net.sf.jasperreports.engine.JRException;
+
+/**
+ * @author Domenico Nardi Tironi
+ */
+public abstract class AbstractCalculationExportableResult extends AbstractCalculationResult {
+
+ private static final long serialVersionUID = 1L;
+
+ public AbstractCalculationExportableResult(final String label, final Collection rows) {
+ super(label, rows);
+ }
+
+ public abstract void writeCSVHeader(ExportContextCSV exportContextCSV, final RiverInfo river);
+
+ public final void writeCsv(final ExportContextCSV exportContextCSV) {
+
+ writeCSVResultMetadata(exportContextCSV);
+ // wenn resultsmetadata null sind!? keine neue zeile
+ // writer.writeNext(new String[] { "" }); // break line in den Implementationen,
+ // weil es sein kann, dass KEINE ResultMetadata geschrieben werden; dann wäre eine Leerzeile überflüssig
+
+ /* now the value rows */
+ final Collection rows = getRows();
+ for (final ResultRow row : rows)
+ writeCSVRow(exportContextCSV, row);
+ }
+
+ protected abstract void writeCSVResultMetadata(final ExportContextCSV exportContextCSV);
+
+ protected void writeCSVRow(final ExportContextCSV exportContextCSV, final ResultRow row) {
+ final String[] formattedRow = formatCSVRow(exportContextCSV, row);
+ exportContextCSV.writeCSVLine(formattedRow);
+ }
+
+ protected abstract String[] formatCSVRow(ExportContextCSV exportContextCSV, final ResultRow row);
+
+ protected abstract String[] formatPDFRow(ExportContextPDF exportContextPDF, ResultRow row);
+
+ public JasperDesigner addReport(final ExportContextPDF exportContext, final JasperReporter reporter, final MetaAndTableJRDataSource source)
+ throws JRException {
+
+ final JasperDesigner design = reporter.addReport(getJasperFile(), source);
+ addJRTableHeader(exportContext, source);
+ addJRTableData(exportContext, source);
+ return design;
+ }
+
+ protected abstract String getJasperFile();
+
+ protected abstract void addJRTableHeader(ExportContextPDF exportContext, MetaAndTableJRDataSource source);
+
+ private void addJRTableData(final ExportContextPDF exportContext, final MetaAndTableJRDataSource source) {
+
+ final Collection rows = getRows();
+
+ for (final ResultRow row : rows) {
+
+ final String[] formattedRow = formatPDFRow(exportContext, row);
+ source.addData(formattedRow);
+ }
+ }
+}
\ No newline at end of file
diff -r 14200ded6d67 -r 9be51f776798 artifacts/src/main/java/org/dive4elements/river/artifacts/common/AbstractCalculationResult.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/common/AbstractCalculationResult.java Fri Jul 13 11:56:22 2018 +0200
@@ -0,0 +1,77 @@
+/** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
+ * Software engineering by
+ * Björnsen Beratende Ingenieure GmbH
+ * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
+ *
+ * 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.common;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+
+import gnu.trove.TDoubleArrayList;
+
+/**
+ * @author Gernot Belger
+ */
+public abstract class AbstractCalculationResult implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ protected final Collection rows;
+
+ private final String label;
+
+ public AbstractCalculationResult(final String label, final Collection rows) {
+ this.label = label;
+ this.rows = new ArrayList<>(rows);
+ }
+
+ public final String getLabel() {
+ return this.label;
+ }
+
+ public boolean isEmpty() {
+ return this.rows.isEmpty();
+ }
+
+ public Collection getRows() {
+ return Collections.unmodifiableCollection(this.rows);
+ }
+
+ public final double[][] getStationPoints(final IResultType type) { // gehört die Methode hier rein? oder in erbende Klassen?
+
+ final TDoubleArrayList xPoints = new TDoubleArrayList(this.rows.size());
+ final TDoubleArrayList yPoints = new TDoubleArrayList(this.rows.size());
+
+ for (final ResultRow row : this.rows) {
+
+ final double station = row.getDoubleValue(GeneralResultType.station); // TODO: move "station" (and others) to common
+ final double value = row.getDoubleValue(type);
+
+ xPoints.add(station);
+ yPoints.add(value);
+ }
+
+ return new double[][] { xPoints.toNativeArray(), yPoints.toNativeArray() };
+ }
+
+ protected final List getValues(final IResultType type) {
+
+ final List values = new ArrayList<>();
+
+ for (final ResultRow row : this.rows) {
+ @SuppressWarnings("unchecked")
+ final TYPE value = (TYPE) row.getValue(type);
+ values.add(value);
+ }
+
+ return values;
+ }
+}
\ No newline at end of file
diff -r 14200ded6d67 -r 9be51f776798 artifacts/src/main/java/org/dive4elements/river/artifacts/common/AbstractCalculationResults.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/common/AbstractCalculationResults.java Fri Jul 13 11:56:22 2018 +0200
@@ -0,0 +1,79 @@
+/** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
+ * Software engineering by
+ * Björnsen Beratende Ingenieure GmbH
+ * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
+ *
+ * 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.common;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.apache.commons.lang.math.DoubleRange;
+import org.dive4elements.river.artifacts.model.Calculation;
+import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
+
+/**
+ * @author Gernot Belger
+ */
+public abstract class AbstractCalculationResults implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ private final List results = new ArrayList<>();
+
+ private final String calcModeLabel;
+
+ private final String user;
+
+ private final RiverInfo river;
+
+ private final DoubleRange calcRange;
+
+ public AbstractCalculationResults(final String calcModeLabel, final String user, final RiverInfo river, final DoubleRange calcRange) {
+ this.calcModeLabel = calcModeLabel;
+ this.user = user;
+ this.river = river;
+ this.calcRange = calcRange;
+ }
+
+ public final String getCalcModeLabel() {
+ return this.calcModeLabel;
+ }
+
+ public final String getUser() {
+ return this.user;
+ }
+
+ public final RiverInfo getRiver() {
+ return this.river;
+ }
+
+ public final DoubleRange getCalcRange() {
+ return this.calcRange;
+ }
+
+ //// COPY FROM AbtractCalculationListResults -> further refactoring necessary?
+ public final void addResult(final RESULT result, final Calculation problems) {
+ /* we assume error reporting was already done in this case */
+ if (result == null)
+ return;
+
+ if (result.isEmpty()) {
+ problems.addProblem("abstractsinfocalculationresults.emptyResult", result.getLabel());
+ return;
+ }
+
+ this.results.add(result);
+ }
+
+ public final List getResults() {
+ return Collections.unmodifiableList(this.results);
+ }
+
+}
\ No newline at end of file
diff -r 14200ded6d67 -r 9be51f776798 artifacts/src/main/java/org/dive4elements/river/artifacts/common/AbstractCommonExporter.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/common/AbstractCommonExporter.java Fri Jul 13 11:56:22 2018 +0200
@@ -0,0 +1,132 @@
+/** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
+ * Software engineering by
+ * Björnsen Beratende Ingenieure GmbH
+ * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
+ *
+ * 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.common;
+
+import java.io.OutputStream;
+
+import org.apache.log4j.Logger;
+import org.dive4elements.artifacts.CallContext;
+import org.dive4elements.river.artifacts.model.CalculationResult;
+import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
+import org.dive4elements.river.exports.AbstractExporter;
+import org.w3c.dom.Document;
+
+import au.com.bytecode.opencsv.CSVWriter;
+import net.sf.jasperreports.engine.JRException;
+
+/**
+ * @author Gernot Belger
+ */
+public abstract class AbstractCommonExporter> extends AbstractExporter {
+
+ /** The log used in this exporter. */
+ private final Logger log = Logger.getLogger(getClass());
+
+ /** The log used in this exporter. */
+ protected final Logger getLog() {
+ return this.log;
+ }
+
+ private RESULTS results = null;
+
+ @Override
+ public void init(final String outName, final Document request, final OutputStream out, final CallContext context) {
+ super.init(outName, request, out, context);
+ }
+
+ @Override
+ protected final void addData(final Object d) {
+ /* reset */
+ this.results = null;
+
+ if (d instanceof CalculationResult) {
+
+ final Object dat = ((CalculationResult) d).getData();
+ if (dat != null) {
+ @SuppressWarnings("unchecked")
+ final RESULTS result = (RESULTS) dat;
+ this.results = result;
+ }
+ }
+ }
+
+ protected final RESULTS getResults() {
+ return this.results;
+ }
+
+ @Override
+ protected final void writeCSVData(final CSVWriter writer) {
+
+ final ExportContextCSV exportContext = new ExportContextCSV(this.context, writer, this.results);
+
+ doWriteCSVData(exportContext, this.results);
+ }
+
+ protected final void doWriteCSVData(final ExportContextCSV exportContext, final RESULTS results) {
+
+ writeCSVGlobalMetadata(exportContext, results);
+
+ final RiverInfo river = results.getRiver();
+
+ final Class> lastResultType = null;
+
+ for (final AbstractCalculationExportableResult result : results.getResults()) {
+
+ final Class> resultType = result.getClass();
+ if (lastResultType == null || lastResultType != resultType) {
+ exportContext.writeBlankLine();
+ result.writeCSVHeader(exportContext, river);
+ exportContext.writeBlankLine();
+ } else
+ exportContext.writeCSVLine(new String[] { "#" });
+
+ result.writeCsv(exportContext);
+ }
+ }
+
+ protected abstract void writeCSVGlobalMetadata(final ExportContextCSV exportContext, final RESULTS results);
+
+ @Override
+ protected final void writePDF(final OutputStream out) {
+ doWritePdf(out, this.results);
+ }
+
+ private final void doWritePdf(final OutputStream out, final RESULTS results) {
+
+ try {
+ final ExportContextPDF exportContext = new ExportContextPDF(this.context, results);
+
+ final JasperReporter reporter = new JasperReporter();
+
+ for (final RESULT result : results.getResults()) {
+
+ final MetaAndTableJRDataSource source = new MetaAndTableJRDataSource();
+
+ writePDFGlobalMetadata(exportContext, source);
+
+ final JasperDesigner design = result.addReport(exportContext, reporter, source);
+ configureDesign(result, design);
+ }
+
+ reporter.exportPDF(out);
+ }
+ catch (final JRException je) {
+ getLog().warn("Error generating PDF Report!", je);
+ }
+ }
+
+ /**
+ * Override to implement, does nothing by default.
+ */
+ protected void configureDesign(final RESULT result, final JasperDesigner design) {
+ }
+
+ protected abstract void writePDFGlobalMetadata(ExportContextPDF exportContext, MetaAndTableJRDataSource source);
+}
\ No newline at end of file
diff -r 14200ded6d67 -r 9be51f776798 artifacts/src/main/java/org/dive4elements/river/artifacts/common/AbstractExportContext.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/common/AbstractExportContext.java Fri Jul 13 11:56:22 2018 +0200
@@ -0,0 +1,92 @@
+/** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
+ * Software engineering by
+ * Björnsen Beratende Ingenieure GmbH
+ * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
+ *
+ * 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.common;
+
+import java.text.NumberFormat;
+
+import org.dive4elements.artifacts.CallContext;
+import org.dive4elements.river.artifacts.resources.Resources;
+import org.dive4elements.river.utils.Formatter;
+
+/**
+ * @author Domenico Nardi Tironi
+ */
+public abstract class AbstractExportContext implements IExportContext {
+
+ private NumberFormat qFormat = null;
+
+ private NumberFormat flowDepthFormat = null;
+ private NumberFormat salixScenFormat = null;
+ private NumberFormat kmFormat = null;
+
+ /** The CallContext object. */
+ private final CallContext context;
+
+ private final AbstractCalculationResults> results;
+
+ public AbstractExportContext(final CallContext context, final AbstractCalculationResults> results) {
+ this.context = context;
+ this.results = results;
+ }
+
+ protected final CallContext getContext() {
+ return this.context;
+ }
+
+ @Override
+ public final > RESULTS getResults() {
+ @SuppressWarnings("unchecked")
+ final RESULTS resultsCast = (RESULTS) this.results;
+ return resultsCast;
+ }
+
+ // copy from AbstractExporter TODO merge with ExportContextPDF
+ protected NumberFormat getKmFormatter() {
+
+ if (this.kmFormat == null)
+ this.kmFormat = Formatter.getWaterlevelKM(getContext());
+
+ return this.kmFormat;
+ }
+
+ public NumberFormat getQFormatter() {
+ if (this.qFormat == null)
+ this.qFormat = Formatter.getWaterlevelQ(this.context);
+
+ return this.qFormat;
+ }
+
+ public final NumberFormat getFlowDepthFormatter() {
+ if (this.flowDepthFormat == null)
+ this.flowDepthFormat = Formatter.getFlowDepth(this.context);
+
+ return this.flowDepthFormat;
+ }
+
+ public final NumberFormat getSalixScenFormatter() {
+ if (this.salixScenFormat == null)
+ this.salixScenFormat = Formatter.getSalixLine(this.context);
+
+ return this.salixScenFormat;
+ }
+
+ protected String msg(final String key) {
+ return Resources.getMsg(this.context.getMeta(), key, key);
+ }
+
+ public final String msg(final String key, final Object... args) {
+ return Resources.getMsg(this.context.getMeta(), key, key, args);
+ }
+
+ @Override
+ public final String formatRowValue(final ResultRow row, final IResultType type) {
+ return row.exportValue(this.context, type);
+ }
+}
\ No newline at end of file
diff -r 14200ded6d67 -r 9be51f776798 artifacts/src/main/java/org/dive4elements/river/artifacts/common/AbstractResultType.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/common/AbstractResultType.java Fri Jul 13 11:56:22 2018 +0200
@@ -0,0 +1,115 @@
+/** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
+ * Software engineering by
+ * Björnsen Beratende Ingenieure GmbH
+ * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
+ *
+ * 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.common;
+
+import java.text.DateFormat;
+import java.text.NumberFormat;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Locale;
+import java.util.Map;
+
+import org.apache.commons.lang.StringUtils;
+import org.dive4elements.artifacts.CallContext;
+import org.dive4elements.artifacts.CallMeta;
+import org.dive4elements.river.artifacts.resources.Resources;
+
+/**
+ * @author Domenico Nardi Tironi
+ */
+public abstract class AbstractResultType implements IResultType {
+
+ /* Cache for formatters because Formatter will always create new formats (which is very expensive) */
+ private final Map formatters = new HashMap<>();
+
+ private final String unit;
+
+ private final String csvHeader;
+
+ private final String pdfHeader;
+
+ protected AbstractResultType(final String unit, final String csvHeader, final String pdfHeader) {
+ this.unit = unit;
+ this.csvHeader = csvHeader;
+ this.pdfHeader = pdfHeader;
+
+ }
+
+ @Override
+ public abstract String exportValue(final CallContext context, final Object value);
+
+ protected final String exportStringValue(final Object value) {
+
+ if (value == null)
+ return StringUtils.EMPTY;
+
+ if (!(value instanceof String))
+ throw new IllegalStateException();
+
+ return (String) value;
+ }
+
+ @Override
+ public final double asDouble(final Object value) {
+ if (value == null)
+ return Double.NaN;
+
+ if (!(value instanceof Number))
+ throw new IllegalStateException();
+
+ final Number number = (Number) value;
+ return number.doubleValue();
+ }
+
+ protected final String exportDoubleValue(final CallContext context, final double value) {
+ if (Double.isNaN(value))
+ return StringUtils.EMPTY;
+
+ final NumberFormat formatter = getFormatter(context);
+ return formatter.format(value);
+ }
+
+ private NumberFormat getFormatter(final CallContext context) {
+ final CallMeta meta = context.getMeta();
+ final Locale locale = Resources.getLocale(meta);
+
+ if (!this.formatters.containsKey(locale))
+ this.formatters.put(locale, createFormatter(context));
+
+ return this.formatters.get(locale);
+ }
+
+ protected abstract NumberFormat createFormatter(CallContext context);
+
+ protected final String exportDateValue(final CallContext context, final Date value) {
+ final Locale locale = Resources.getLocale(context.getMeta());
+ final DateFormat df = DateFormat.getDateInstance(DateFormat.MEDIUM, locale);
+ return df.format(value);
+ }
+
+ @Override
+ public final String getCsvHeader() {
+ return this.csvHeader;
+ }
+
+ public final String getCsvHeader(final CallMeta meta) {
+ return Resources.getMsg(meta, this.csvHeader, this.csvHeader);
+ }
+
+ @Override
+ public final String getPdfHeader(final CallMeta meta) {
+ return Resources.getMsg(meta, this.pdfHeader, this.pdfHeader);
+ }
+
+ @Override
+ public final String getUnit() {
+ return this.unit;
+ }
+}
\ No newline at end of file
diff -r 14200ded6d67 -r 9be51f776798 artifacts/src/main/java/org/dive4elements/river/artifacts/common/DefaultCalculationResult.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/common/DefaultCalculationResult.java Fri Jul 13 11:56:22 2018 +0200
@@ -0,0 +1,26 @@
+/** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
+ * Software engineering by
+ * Björnsen Beratende Ingenieure GmbH
+ * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
+ *
+ * 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.common;
+
+import java.util.Collection;
+
+/**
+ * @author Domenico Nardi Tironi
+ *
+ */
+public class DefaultCalculationResult extends AbstractCalculationResult {
+
+ public DefaultCalculationResult(final String label, final Collection rows) {
+ super(label, rows);
+ // do nothing,
+ // this class only serves as instantiable version of AbstractCalculationResult
+ // not intended for pdf/csv-export
+ }
+}
\ No newline at end of file
diff -r 14200ded6d67 -r 9be51f776798 artifacts/src/main/java/org/dive4elements/river/artifacts/common/EpochYearAccessHelper.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/common/EpochYearAccessHelper.java Fri Jul 13 11:56:22 2018 +0200
@@ -0,0 +1,101 @@
+/** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
+ * Software engineering by
+ * Björnsen Beratende Ingenieure GmbH
+ * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
+ *
+ * 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.common;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.log4j.Logger;
+import org.dive4elements.artifacts.Artifact;
+import org.dive4elements.river.artifacts.D4EArtifact;
+import org.dive4elements.river.artifacts.access.Access;
+import org.dive4elements.river.artifacts.model.DateRange;
+import org.dive4elements.river.backend.utils.DateUtil;
+
+import gnu.trove.TIntArrayList;
+
+/**
+ * @author Domenico Nardi Tironi
+ *
+ */
+// TODO: rename?
+public class EpochYearAccessHelper extends Access {
+
+ private static Logger log = Logger.getLogger(EpochYearAccessHelper.class);
+
+ // private final Artifact artifact;
+
+ public EpochYearAccessHelper(final Artifact artifact) {
+ this.artifact = (D4EArtifact) artifact;
+ }
+
+ public String getYearEpoch() {
+ return getString("ye_select"); // ACHTUNG, Ergebniswerte wurden geändert in state.sinfo.epoch und state.sinfo.year
+ }
+
+ /** [year1, years2,..] if its about years. */
+ public int[] getYears(final String yearSelectedValue, final String yearKey) {
+ int[] years = null;
+
+ if (getYearEpoch().equals(yearSelectedValue)) {
+ final TIntArrayList ints = new TIntArrayList();
+ final String yearsData = getString(yearKey);
+ if (yearsData == null || yearsData.isEmpty()) {
+ log.warn("No years provided");
+ return null;
+ }
+ for (final String sValue : yearsData.split(" ")) {
+ try {
+ ints.add(Integer.parseInt(sValue));
+ }
+ catch (final NumberFormatException e) {
+ /* Client should prevent this */
+ log.warn("Invalid year value: " + sValue);
+ continue;
+ }
+ }
+
+ if (!ints.isEmpty()) {
+ ints.sort();
+ years = ints.toNativeArray();
+ }
+ return years;
+ }
+ return null;
+ }
+
+ public List getEpochs(final String epochSelectedValue, final String epochKey) {
+ final List epochs = new ArrayList<>();
+ // if (epochs != null) {
+ // return epochs;
+ // }
+
+ if (!getYearEpoch().equals(epochSelectedValue)) {
+ return null;
+ }
+
+ final String data = getString(epochKey);
+ if (data == null) {
+ log.warn("No 'epochs' parameter specified!");
+ return null;
+ }
+
+ for (final String part : data.split(";")) {
+ final String[] values = part.split(",");
+ try {
+ epochs.add(new DateRange(DateUtil.getStartDateFromYear(Integer.parseInt(values[0])), DateUtil.getEndDateFromYear(Integer.parseInt(values[1]))));
+ }
+ catch (final NumberFormatException nfe) {
+ log.warn("Cannot parse int from string: '" + values + "'");
+ }
+ }
+ return epochs;
+ }
+}
\ No newline at end of file
diff -r 14200ded6d67 -r 9be51f776798 artifacts/src/main/java/org/dive4elements/river/artifacts/common/ExportContextCSV.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/common/ExportContextCSV.java Fri Jul 13 11:56:22 2018 +0200
@@ -0,0 +1,186 @@
+/** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
+ * Software engineering by
+ * Björnsen Beratende Ingenieure GmbH
+ * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
+ *
+ * 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.common;
+
+import java.text.DateFormat;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Date;
+import java.util.Locale;
+
+import org.apache.commons.lang.math.DoubleRange;
+import org.dive4elements.artifacts.CallContext;
+import org.dive4elements.artifacts.CallMeta;
+import org.dive4elements.river.FLYS;
+import org.dive4elements.river.artifacts.resources.Resources;
+import org.dive4elements.river.artifacts.sinfo.common.SInfoI18NStrings;
+import org.dive4elements.river.artifacts.sinfo.util.BedHeightInfo;
+import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
+import org.dive4elements.river.artifacts.sinfo.util.WstInfo;
+
+import au.com.bytecode.opencsv.CSVWriter;
+
+/**
+ * @author Domenico Nardi Tironi
+ *
+ */
+public final class ExportContextCSV extends AbstractExportContext {
+
+ private static final String CSV_META_HEADER_EVALUATOR = "sinfo.export.flow_depth.csv.meta.header.sounding.evaluator";
+
+ private static final String CSV_META_HEADER_SOUNDING = "sinfo.export.flow_depth.csv.meta.header.sounding";
+
+ private static final String CSV_META_HEADER_SOUNDING_YEAR = "sinfo.export.flow_depth.csv.meta.header.sounding.year";
+
+ private static final String CSV_META_HEADER_SOUNDING_TYPE = "sinfo.export.flow_depth.csv.meta.header.sounding.type";
+
+ private static final String CSV_META_HEADER_SOUNDING_PRJ = "sinfo.export.flow_depth.csv.meta.header.sounding.prj";
+
+ private static final String CSV_META_HEADER_SOUNDING_ELEVATIOIN_MODEL = "sinfo.export.flow_depth.csv.meta.header.sounding.elevationmodel";
+
+ private static final String CSV_META_HEADER_SOUNDING_ELEVATIOIN_MODEL_ORIGINAL = "sinfo.export.flow_depth.csv.meta.header.sounding.elevationmodel.original";
+
+ private final CSVWriter writer;
+
+ private final AbstractCalculationResults> results;
+
+ public ExportContextCSV(final CallContext context, final CSVWriter writer, final AbstractCalculationResults> results) {
+ super(context, results);
+
+ this.writer = writer;
+ this.results = results;
+ }
+
+ public final void writeCSVMetaEntry(final String message, final Object... messageArgs) {
+
+ final CallMeta meta = getContext().getMeta();
+
+ this.writer.writeNext(new String[] { Resources.getMsg(meta, message, message, messageArgs) });
+ }
+
+ public void writeBlankLine() {
+ writeCSVLine(new String[] { "" });
+ }
+
+ // *** CUSTOM STUFF that is used multiple times ***///
+
+ public final void writeCSVSoundingMetadata(final BedHeightInfo sounding) {
+ // "##METADATEN PEILUNG"
+ writeCSVSoundingMetadata(sounding, CSV_META_HEADER_SOUNDING);
+
+ }
+
+ public void writeCSVLine(final String[] line) {
+ this.writer.writeNext(line);
+ }
+
+ public String formatCsvHeader(final IResultType type) {
+ return msg(type.getCsvHeader());
+ }
+
+ public final void writeCSVGlobalMetadataDefaults() {
+ // TODO: results as member
+ final String calcModeLabel = this.results.getCalcModeLabel();
+ final RiverInfo river = this.results.getRiver();
+ final DoubleRange calcRange = this.results.getCalcRange();
+
+ writeCSVMetaEntry(I18NStrings.CSV_META_HEADER_RESULT, msg(I18NStrings.CSV_META_HEADER_RESULT_LABEL), river.getName(), calcModeLabel);
+
+ // "# FLYS-Version: "
+ writeCSVMetaEntry(I18NStrings.CSV_META_VERSION, msg(I18NStrings.CSV_META_VERSION_LABEL), FLYS.VERSION);
+
+ // "# Bearbeiter: "
+ writeCSVMetaEntry(I18NStrings.CSV_META_USER, msg(I18NStrings.CSV_META_USER_LABEL), this.results.getUser());
+
+ // "# Datum der Erstellung: "
+ final Locale locale = Resources.getLocale(getContext().getMeta());
+ final DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, locale);
+ writeCSVMetaEntry(I18NStrings.CSV_META_CREATION, msg(I18NStrings.CSV_META_CREATION_LABEL), df.format(new Date()));
+
+ // "# Gewässer: "
+ writeCSVMetaEntry(I18NStrings.CSV_META_RIVER, msg(I18NStrings.CSV_META_RIVER_LABEL), river.getName());
+
+ // "# Höhensystem des Flusses: "
+ writeCSVMetaEntry(I18NStrings.CSV_META_HEIGHT_UNIT_RIVER, river.getWstUnit());
+
+ if (calcRange != null) {
+ // "# Ort/Bereich (km): "
+ writeCSVMetaEntry(I18NStrings.CSV_META_RANGE, msg(I18NStrings.CSV_META_RANGE_LABEL), getKmFormatter().format(calcRange.getMinimumDouble()),
+ getKmFormatter().format(calcRange.getMaximumDouble()));
+ }
+ }
+
+ public final void writeCSVWaterlevelMetadata(final WstInfo wst) {
+ writeCSVWaterlevelMetadata(wst, SInfoI18NStrings.CSV_META_HEADER_WATERLEVEL); // default Label; used in 99%
+ }
+
+ public final void writeCSVWaterlevelMetadata(final WstInfo wst, final String mainLabel) {
+ // "##METADATEN WASSERSPIEGELLAGE"
+ writeCSVMetaEntry(mainLabel);
+
+ // "# Bezeichnung der Wasserspiegellage: "
+ writeCSVMetaEntry(SInfoI18NStrings.CSV_META_HEADER_WATERLEVEL_NAME, wst.getLabel());
+
+ // "# Bezugspegel: "
+ writeCSVMetaEntry(SInfoI18NStrings.CSV_META_HEADER_WATERLEVEL_GAUGE, wst.getGauge());
+
+ // "# Jahr/Zeitraum der Wasserspiegellage: "
+ final int year = wst.getYear();
+ if (year > 0)
+ writeCSVMetaEntry(SInfoI18NStrings.CSV_META_HEADER_WATERLEVEL_YEAR, Integer.toString(year));
+ }
+
+ /**
+ * Formats header with unit: msg [unit]
+ */
+
+ public String msgUnitCSV(final IResultType typeWithUnit) { // TODO: use generic Type!
+ final String unit = msg(typeWithUnit.getUnit());
+ return msgUnitCSV(typeWithUnit, unit);
+ }
+
+ public String msgUnitCSV(final IResultType type, final String unit) {
+ final String msg = msg(type.getCsvHeader());
+ return String.format("%s [%s]", msg, unit);
+ }
+
+ public void writeCSVSoundingMetadata(final BedHeightInfo sounding, final String label) {
+
+ // "##METADATEN PEILUNG"
+ writeCSVMetaEntry(label);
+
+ // "# Jahr der Peilung: "
+ writeCSVMetaEntry(CSV_META_HEADER_SOUNDING_YEAR, Integer.toString(sounding.getYear()));
+ // "# Aufnahmeart: "
+ writeCSVMetaEntry(CSV_META_HEADER_SOUNDING_TYPE, sounding.getType());
+ // "# Auswerter: "
+ writeCSVMetaEntry(CSV_META_HEADER_EVALUATOR, sounding.getEvaluationBy());
+ // "# Lagesystem: "
+ writeCSVMetaEntry(CSV_META_HEADER_SOUNDING_PRJ, sounding.getLocationSystem());
+ // "# Höhensystem: "
+ writeCSVMetaEntry(CSV_META_HEADER_SOUNDING_ELEVATIOIN_MODEL, sounding.getCurElevationModelUnit());
+ // "# ursprüngliches Höhensystem: "
+ writeCSVMetaEntry(CSV_META_HEADER_SOUNDING_ELEVATIOIN_MODEL_ORIGINAL, sounding.getOldElevationModelUnit());
+
+ }
+
+ public final String msgUnitLabel(final IResultType typeWithUnit, final String label) {
+ final String msg = msg(typeWithUnit.getCsvHeader());
+ final String unit = msg(typeWithUnit.getUnit());
+ return String.format("%s [%s] (%s)", msg, unit, label);
+ }
+
+ public void writeTitleForTabs(final String tabTitleMsg, final int colSize) {
+
+ final Collection title = new ArrayList<>(colSize);
+ title.add(msg("export_csv_title") + msg(tabTitleMsg));
+ writeCSVLine(title.toArray(new String[colSize]));
+ }
+}
\ No newline at end of file
diff -r 14200ded6d67 -r 9be51f776798 artifacts/src/main/java/org/dive4elements/river/artifacts/common/ExportContextPDF.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/common/ExportContextPDF.java Fri Jul 13 11:56:22 2018 +0200
@@ -0,0 +1,83 @@
+/** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
+ * Software engineering by
+ * Björnsen Beratende Ingenieure GmbH
+ * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
+ *
+ * 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.common;
+
+import java.text.DateFormat;
+import java.text.NumberFormat;
+import java.util.Date;
+import java.util.Locale;
+
+import org.apache.commons.lang.math.DoubleRange;
+import org.dive4elements.artifacts.CallContext;
+import org.dive4elements.river.FLYS;
+import org.dive4elements.river.artifacts.resources.Resources;
+import org.dive4elements.river.artifacts.sinfo.common.SInfoResultType;
+import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
+
+/**
+ * @author Domenico Nardi Tironi
+ *
+ */
+public final class ExportContextPDF extends AbstractExportContext {
+
+ public ExportContextPDF(final CallContext context, final AbstractCalculationResults> results) {
+ super(context, results);
+ }
+
+ // TODO: rename
+ public String msgPdf(final SInfoResultType type) {
+ return type.getPdfHeader(getContext().getMeta());
+ }
+
+ public void addJRMetadata(final MetaAndTableJRDataSource source, final String key, final IResultType type) {
+ source.addMetaData(key, type.getPdfHeader(getContext().getMeta()));
+ }
+
+ public void addJRMetadata(final MetaAndTableJRDataSource source, final String key, final String msg) {
+ source.addMetaData(key, msg);
+ }
+
+ // *** CUSTOM STUFF that is used multiple times ***///
+ public void addJRMetaDataDefaults(final MetaAndTableJRDataSource source) {
+
+ source.addMetaData("header", msg(I18NStrings.CSV_META_HEADER_RESULT_LABEL));
+ source.addMetaData("calcMode", getResults().getCalcModeLabel());
+
+ source.addMetaData("version_label", msg(I18NStrings.CSV_META_VERSION_LABEL));
+ source.addMetaData("version", FLYS.VERSION);
+
+ source.addMetaData("user_label", msg(I18NStrings.CSV_META_USER_LABEL));
+ source.addMetaData("user", getResults().getUser());
+
+ final Locale locale = Resources.getLocale(getContext().getMeta());
+ final DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, locale);
+ source.addMetaData("date_label", msg(I18NStrings.CSV_META_CREATION_LABEL));
+ source.addMetaData("date", df.format(new Date()));
+ }
+
+ public void addJRMetaDataUSINFO(final MetaAndTableJRDataSource source) {
+
+ /* general metadata */
+ addJRMetaDataDefaults(source);
+
+ final RiverInfo river = getResults().getRiver();
+ final String wstUnitName = river.getWstUnit();
+
+ source.addMetaData("river_label", msg(I18NStrings.CSV_META_RIVER_LABEL));
+ source.addMetaData("river", river.getName());
+ source.addMetaData("river_unit", wstUnitName);
+
+ final DoubleRange calcRange = getResults().getCalcRange();
+ final NumberFormat kmFormatter = getKmFormatter();
+ final String rangeValue = String.format("%s - %s", kmFormatter.format(calcRange.getMinimumDouble()), kmFormatter.format(calcRange.getMaximumDouble()));
+ source.addMetaData("range_label", msg(I18NStrings.CSV_META_RANGE_LABEL));
+ source.addMetaData("range", rangeValue);
+ }
+}
\ No newline at end of file
diff -r 14200ded6d67 -r 9be51f776798 artifacts/src/main/java/org/dive4elements/river/artifacts/common/GeneralResultType.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/common/GeneralResultType.java Fri Jul 13 11:56:22 2018 +0200
@@ -0,0 +1,59 @@
+/** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
+ * Software engineering by
+ * Björnsen Beratende Ingenieure GmbH
+ * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
+ *
+ * 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.common;
+
+import java.text.NumberFormat;
+import java.util.Date;
+
+import org.dive4elements.artifacts.CallContext;
+import org.dive4elements.river.utils.Formatter;
+
+/**
+ * @author Domenico Nardi Tironi
+ *
+ */
+public abstract class GeneralResultType extends AbstractResultType {
+
+ private static final long serialVersionUID = 1L;
+
+ public static final GeneralResultType station = new GeneralResultType(I18NStrings.UNIT_KM, I18NStrings.CSV_KM_HEADER) {
+ @Override
+ public String exportValue(final CallContext context, final Object value) {
+ final double doubleValue = asDouble(value);
+ return exportDoubleValue(context, doubleValue);
+ }
+
+ @Override
+ protected NumberFormat createFormatter(final CallContext context) {
+ return Formatter.getWaterlevelKM(context);
+ }
+ };
+
+ public static final GeneralResultType date = new GeneralResultType(I18NStrings.UNIT_NONE, I18NStrings.CSV_META_DATE) {
+ @Override
+ public String exportValue(final CallContext context, final Object value) {
+ return exportDateValue(context, (Date) value);
+ }
+
+ @Override
+ protected NumberFormat createFormatter(final CallContext context) {
+ throw new UnsupportedOperationException();
+ }
+ };
+
+ private GeneralResultType(final String unit, final String csvHeader) {
+
+ super(unit, csvHeader, csvHeader);
+ }
+
+ private GeneralResultType(final String unit, final String csvHeader, final String pdfHeader) {
+ super(unit, csvHeader, pdfHeader);
+ }
+}
\ No newline at end of file
diff -r 14200ded6d67 -r 9be51f776798 artifacts/src/main/java/org/dive4elements/river/artifacts/common/I18NStrings.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/common/I18NStrings.java Fri Jul 13 11:56:22 2018 +0200
@@ -0,0 +1,67 @@
+/** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
+ * Software engineering by
+ * Björnsen Beratende Ingenieure GmbH
+ * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
+ *
+ * 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.common;
+
+/**
+ * @author Domenico Nardi Tironi
+ *
+ */
+public interface I18NStrings {
+ //////////// GENERIC TYPES + UNITS///////////////////////////////////////////////////////////////////////////////
+
+ // TODO: remove "sinfo" for these labels in messages.txt + de.messages.txt
+ // oder: die ganzen Strings hier raus und direkt verwenden
+
+ String CSV_KM_HEADER = "export.flow_depth.csv.header.km";
+
+ String CSV_META_HEADER_RESULT_LABEL = "sinfo.export.flow_depth.csv.meta.header.result.label";
+
+ String CSV_META_VERSION_LABEL = "sinfo.export.flow_depth.csv.meta.version.label";
+
+ String CSV_META_USER_LABEL = "sinfo.export.flow_depth.csv.meta.user.label";
+
+ String CSV_META_CREATION_LABEL = "sinfo.export.flow_depth.csv.meta.creation.label";
+
+ String CSV_META_RIVER_LABEL = "sinfo.export.flow_depth.csv.meta.river.label";
+
+ String CSV_META_RANGE_LABEL = "sinfo.export.flow_depth.csv.meta.range.label";
+
+ String CSV_META_HEADER_RESULT = "sinfo.export.flow_depth.csv.meta.header.result";
+
+ String CSV_META_VERSION = "sinfo.export.flow_depth.csv.meta.version";
+
+ String CSV_META_USER = "sinfo.export.flow_depth.csv.meta.user";
+
+ String CSV_META_CREATION = "sinfo.export.flow_depth.csv.meta.creation";
+
+ String CSV_META_RIVER = "sinfo.export.flow_depth.csv.meta.river";
+
+ String CSV_META_RANGE = "sinfo.export.flow_depth.csv.meta.range";
+
+ String CSV_META_HEIGHT_UNIT_RIVER = "sinfo.export.flow_depth.csv.meta.height_unit.river"; // move to child?
+
+ String CSV_META_DATE = "sinfo.export.csv.meta.date";
+
+ /// sonstiges:
+
+ // Einheiten:
+
+ String UNIT_NONE = "-";
+
+ String UNIT_M = "m";
+
+ String UNIT_KM = "km";
+
+ String UNIT_CM = "cm";
+
+ String UNIT_CM_A = "cm/a";
+
+ String UNIT_CUBIC_M = "m³/s";
+}
diff -r 14200ded6d67 -r 9be51f776798 artifacts/src/main/java/org/dive4elements/river/artifacts/common/IExportContext.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/common/IExportContext.java Fri Jul 13 11:56:22 2018 +0200
@@ -0,0 +1,20 @@
+/** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
+ * Software engineering by
+ * Björnsen Beratende Ingenieure GmbH
+ * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
+ *
+ * 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.common;
+
+/**
+ * @author Domenico Nardi Tironi
+ */
+public interface IExportContext {
+
+ String formatRowValue(ResultRow row, IResultType type);
+
+ > RESULTS getResults();
+}
\ No newline at end of file
diff -r 14200ded6d67 -r 9be51f776798 artifacts/src/main/java/org/dive4elements/river/artifacts/common/IResultType.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/common/IResultType.java Fri Jul 13 11:56:22 2018 +0200
@@ -0,0 +1,31 @@
+/** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
+ * Software engineering by
+ * Björnsen Beratende Ingenieure GmbH
+ * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
+ *
+ * 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.common;
+
+import java.io.Serializable;
+
+import org.dive4elements.artifacts.CallContext;
+import org.dive4elements.artifacts.CallMeta;
+
+/**
+ * @author Domenico Nardi Tironi
+ */
+public interface IResultType extends Serializable {
+
+ String exportValue(CallContext context, Object value);
+
+ double asDouble(Object value);
+
+ String getCsvHeader();
+
+ String getPdfHeader(CallMeta meta);
+
+ String getUnit();
+}
\ No newline at end of file
diff -r 14200ded6d67 -r 9be51f776798 artifacts/src/main/java/org/dive4elements/river/artifacts/common/JRReportSaxParserFactory.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/common/JRReportSaxParserFactory.java Fri Jul 13 11:56:22 2018 +0200
@@ -0,0 +1,59 @@
+/** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
+ * Software engineering by
+ * Björnsen Beratende Ingenieure GmbH
+ * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
+ *
+ * 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.common;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import net.sf.jasperreports.engine.component.ComponentsBundle;
+import net.sf.jasperreports.engine.component.ComponentsEnvironment;
+import net.sf.jasperreports.engine.component.ComponentsXmlParser;
+import net.sf.jasperreports.engine.xml.BaseSaxParserFactory;
+import net.sf.jasperreports.engine.xml.JRXmlConstants;
+
+/**
+ * Own sax parser factory, because:
+ * - we do not want xml validation (we know it's good)
+ * - xerxes sax parser complains about two schemas with same namespace...
+ *
+ * @author Domenico Nardi Tironi
+ */
+public class JRReportSaxParserFactory extends BaseSaxParserFactory {
+
+ @Override
+ protected boolean isValidating() {
+ return false;
+ }
+
+ @Override
+ protected List getSchemaLocations() {
+ final List schemas = new ArrayList<>();
+
+ schemas.add(getResourceURI(JRXmlConstants.JASPERREPORT_XSD_RESOURCE));
+ // schemas.add(getResourceURI(JRXmlConstants.JASPERREPORT_XSD_DTD_COMPAT_RESOURCE));
+
+ final Collection components = ComponentsEnvironment.getComponentBundles();
+ for (final ComponentsBundle componentManager : components) {
+ final ComponentsXmlParser xmlParser = componentManager.getXmlParser();
+
+ String schemaURI;
+ final String schemaResource = xmlParser.getInternalSchemaResource();
+ if (schemaResource != null) {
+ schemaURI = getResourceURI(schemaResource);
+ } else {
+ schemaURI = xmlParser.getPublicSchemaLocation();
+ }
+
+ schemas.add(schemaURI);
+ }
+ return schemas;
+ }
+}
\ No newline at end of file
diff -r 14200ded6d67 -r 9be51f776798 artifacts/src/main/java/org/dive4elements/river/artifacts/common/JasperDesigner.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/common/JasperDesigner.java Fri Jul 13 11:56:22 2018 +0200
@@ -0,0 +1,94 @@
+/** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
+ * Software engineering by
+ * Björnsen Beratende Ingenieure GmbH
+ * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
+ *
+ * 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.common;
+
+import net.sf.jasperreports.engine.JRBand;
+import net.sf.jasperreports.engine.JRChild;
+import net.sf.jasperreports.engine.JRElement;
+import net.sf.jasperreports.engine.design.JasperDesign;
+
+/**
+ * @author Domenico Nardi Tironi
+ */
+public class JasperDesigner {
+
+ private final JasperDesign design;
+ private final MetaAndTableJRDataSource source;
+ private int startpageOffset = 0;
+
+ public JasperDesigner(final JasperDesign design, final MetaAndTableJRDataSource source) {
+ this.design = design;
+ this.source = source;
+ }
+
+ public void removeColumn(final String key) {
+
+ final JRBand colchildren = this.design.getColumnHeader();
+ final JRBand datachildren = this.design.getDetailSection().getBands()[0];
+ int width = 0;
+ if (colchildren != null && datachildren != null) {
+
+ final JRElement elementCol = colchildren.getElementByKey(key);
+ final JRElement elementData = datachildren.getElementByKey(key);
+ if (elementCol != null && elementData != null) {
+ width = elementCol.getWidth() + width;
+ final int indexCol = colchildren.getChildren().indexOf(elementCol);
+ final int indexData = datachildren.getChildren().indexOf(elementData);
+
+ elementCol.getElementGroup().getChildren().remove(elementCol);
+ elementData.getElementGroup().getChildren().remove(elementData);
+
+ for (int j = indexCol; j < colchildren.getChildren().size(); j++) {
+ final JRChild element = colchildren.getChildren().get(j);
+ if (element instanceof JRElement) {
+ ((JRElement) element).setX(((JRElement) element).getX() - width);
+ }
+ }
+ for (int j = indexData; j < datachildren.getChildren().size(); j++) {
+ final JRChild element = datachildren.getChildren().get(j);
+ if (element instanceof JRElement) {
+ ((JRElement) element).setX(((JRElement) element).getX() - width);
+ }
+ }
+ }
+
+ // width auf letzte spalte schlagen
+ addWidthToElement(colchildren.getElements()[colchildren.getElements().length - 1], width);
+ addWidthToElement(datachildren.getElements()[datachildren.getElements().length - 1], width);
+
+ } else {
+ // TODO: LOG
+ System.out.print("Column not found for key: " + key);
+ }
+
+ }
+
+ private void addWidthToElement(final JRElement element, final int width) {
+ if (element != null)
+ element.setWidth(element.getWidth() + width);
+ }
+
+ JasperDesign getDesign() {
+ return this.design;
+ }
+
+ public MetaAndTableJRDataSource getSource() {
+ return this.source;
+ }
+
+ public void setPagesCount(final int pagesCount) {
+ this.startpageOffset = pagesCount;
+ }
+
+ public int getPagesCount() {
+
+ return this.startpageOffset;
+ }
+}
\ No newline at end of file
diff -r 14200ded6d67 -r 9be51f776798 artifacts/src/main/java/org/dive4elements/river/artifacts/common/JasperReporter.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/common/JasperReporter.java Fri Jul 13 11:56:22 2018 +0200
@@ -0,0 +1,125 @@
+/** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
+ * Software engineering by
+ * Björnsen Beratende Ingenieure GmbH
+ * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
+ *
+ * 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.common;
+
+import java.io.OutputStream;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.dive4elements.artifacts.common.utils.Config;
+
+import net.sf.jasperreports.engine.JRDataSource;
+import net.sf.jasperreports.engine.JRException;
+import net.sf.jasperreports.engine.JRExporterParameter;
+import net.sf.jasperreports.engine.JasperCompileManager;
+import net.sf.jasperreports.engine.JasperFillManager;
+import net.sf.jasperreports.engine.JasperPrint;
+import net.sf.jasperreports.engine.JasperReport;
+import net.sf.jasperreports.engine.design.JasperDesign;
+import net.sf.jasperreports.engine.export.JRPdfExporter;
+import net.sf.jasperreports.engine.export.JRPdfExporterParameter;
+import net.sf.jasperreports.engine.util.JRProperties;
+import net.sf.jasperreports.engine.xml.JRSaxParserFactory;
+import net.sf.jasperreports.engine.xml.JRXmlLoader;
+
+/**
+ * @author Domenico Nardi Tironi
+ */
+public class JasperReporter {
+
+ private final List designs = new ArrayList<>();
+
+ private final Map parameters = new HashMap<>();
+
+ private final String confPath;
+
+ public JasperReporter() {
+ this.confPath = Config.getConfigDirectory().toString();
+
+ this.parameters.put("ReportTitle", "Exported Data");
+ }
+
+ public JasperDesigner addReport(final String jasperFile, final MetaAndTableJRDataSource source) throws JRException {
+
+ JRProperties.setProperty(JRSaxParserFactory.PROPERTY_REPORT_PARSER_FACTORY, JRReportSaxParserFactory.class.getName());
+
+ final String jasperPath = this.confPath + jasperFile;
+ final JasperDesign design = JRXmlLoader.load(jasperPath);
+
+ final JasperDesigner designer = new JasperDesigner(design, source);
+ this.designs.add(designer);
+
+ return designer;
+ }
+
+ public void exportPDF(final OutputStream out) throws JRException {
+
+ final List compiledReports = new ArrayList<>();
+
+ final List sourcesWithPages = new ArrayList<>();
+
+ final List jasperPrintList = new ArrayList<>();
+
+ if (this.designs.size() == 1) {
+ final JasperDesigner designer = this.designs.get(0);
+ final JasperDesign jDesign = designer.getDesign();
+
+ final JasperReport compiled = JasperCompileManager.compileReport(jDesign);
+ compiledReports.add(compiled);
+ final MetaAndTableJRDataSource source = designer.getSource();
+ final JasperPrint print = JasperFillManager.fillReport(compiled, this.parameters, source);
+ jasperPrintList.add(print);
+ } else {
+ Integer totalpages = 0;
+
+ // erstes Rendern, um Seitenzahl zu ermitteln
+ for (final JasperDesigner designer : this.designs) {
+
+ final JasperReport compiled = JasperCompileManager.compileReport(designer.getDesign());
+ compiledReports.add(compiled);
+ final MetaAndTableJRDataSource source = designer.getSource();
+ final JasperPrint print = JasperFillManager.fillReport(compiled, this.parameters, source);
+
+ final Integer pagesCount = print.getPages().size();
+ designer.setPagesCount(totalpages);
+
+ totalpages += pagesCount;
+ }
+
+ // Sources mit pages machen
+ for (final JasperDesigner designer : this.designs) {
+ final JRDataSource sourceWithPages = designer.getSource().withPagePageOffsets(designer.getPagesCount(), totalpages);
+ sourcesWithPages.add(sourceWithPages);
+ }
+
+ for (int i = 0; i < compiledReports.size(); i++) {
+ final JasperReport compiledReport = compiledReports.get(i);
+ final JRDataSource source = sourcesWithPages.get(i);
+ final JasperPrint print = JasperFillManager.fillReport(compiledReport, this.parameters, source);
+ jasperPrintList.add(print);
+ }
+ }
+ doExport(jasperPrintList, out);
+ }
+
+ private void doExport(final List jasperPrintList, final OutputStream out) throws JRException {
+ final JRPdfExporter exporter = new JRPdfExporter();
+ exporter.setParameter(JRExporterParameter.JASPER_PRINT_LIST, jasperPrintList);
+ exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, out);
+ // this will make a bookmark in the exported PDF for each of the reports
+ exporter.setParameter(JRPdfExporterParameter.IS_CREATING_BATCH_MODE_BOOKMARKS, Boolean.TRUE);
+
+ exporter.exportReport();
+
+ }
+
+}
\ No newline at end of file
diff -r 14200ded6d67 -r 9be51f776798 artifacts/src/main/java/org/dive4elements/river/artifacts/common/MetaAndTableJRDataSource.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/common/MetaAndTableJRDataSource.java Fri Jul 13 11:56:22 2018 +0200
@@ -0,0 +1,74 @@
+/* Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
+ * Software engineering by
+ * Björnsen Beratende Ingenieure GmbH
+ * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
+ *
+ * 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.common;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import net.sf.jasperreports.engine.JRDataSource;
+import net.sf.jasperreports.engine.JRException;
+import net.sf.jasperreports.engine.JRField;
+
+/**
+ * @author Raimund Renkert
+ */
+public final class MetaAndTableJRDataSource implements JRDataSource {
+
+ private final List data = new ArrayList<>();
+
+ private final Map metaData = new HashMap<>();
+
+ private int index = -1;
+
+ public void addData(final String[] row) {
+ this.data.add(row);
+ }
+
+ public void addMetaData(final String key, final Object value) {
+ this.metaData.put(key, value);
+ }
+
+ @Override
+ public boolean next() throws JRException {
+ this.index++;
+
+ return this.index < this.data.size();
+ }
+
+ @Override
+ public Object getFieldValue(final JRField field) throws JRException {
+ final String fieldName = field.getName();
+
+ if (fieldName.startsWith("meta:"))
+ return this.metaData.get(fieldName.substring("meta:".length()));
+
+ if (fieldName.startsWith("data:")) {
+ final int column = Integer.valueOf(fieldName.substring("data:".length()));
+ if (column >= this.data.get(this.index).length)
+ return null;
+ return this.data.get(this.index)[column];
+ }
+ return null;
+ }
+
+ public JRDataSource withPagePageOffsets(final Integer startpageoffset, final Integer totalpages) {
+
+ final MetaAndTableJRDataSource newSource = new MetaAndTableJRDataSource();
+ newSource.data.addAll(this.data);
+ newSource.metaData.putAll(this.metaData);
+
+ newSource.addMetaData("startpageoffset", startpageoffset);
+ newSource.addMetaData("totalpages", totalpages);
+
+ return newSource;
+ }
+}
\ No newline at end of file
diff -r 14200ded6d67 -r 9be51f776798 artifacts/src/main/java/org/dive4elements/river/artifacts/common/ResultRow.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/common/ResultRow.java Fri Jul 13 11:56:22 2018 +0200
@@ -0,0 +1,62 @@
+/** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
+ * Software engineering by
+ * Björnsen Beratende Ingenieure GmbH
+ * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
+ *
+ * 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.common;
+
+import java.io.Serializable;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.dive4elements.artifacts.CallContext;
+
+/**
+ * Generic container for results that come in rows.
+ *
+ * @author Gernot Belger
+ */
+public class ResultRow implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ private final Map values = new HashMap<>();
+
+ public static ResultRow create() {
+ return new ResultRow();
+ }
+
+ public static ResultRow create(final ResultRow src) {
+ final ResultRow dst = create();
+ dst.values.putAll(src.values);
+ return dst;
+ }
+
+ protected ResultRow() {
+ }
+
+ public ResultRow putValue(final IResultType type, final Object value) {
+
+ this.values.put(type, value);
+
+ /* chain me */
+ return this;
+ }
+
+ public String exportValue(final CallContext context, final IResultType type) {
+ final Object value = this.values.get(type);
+ return type.exportValue(context, value);
+ }
+
+ public double getDoubleValue(final IResultType type) {
+ final Object value = this.values.get(type);
+ return type.asDouble(value);
+ }
+
+ public Object getValue(final IResultType type) {
+ return this.values.get(type);
+ }
+}
\ No newline at end of file
diff -r 14200ded6d67 -r 9be51f776798 artifacts/src/main/java/org/dive4elements/river/artifacts/context/RiverContextFactory.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/context/RiverContextFactory.java Fri Feb 09 15:39:49 2018 +0100
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/context/RiverContextFactory.java Fri Jul 13 11:56:22 2018 +0200
@@ -617,30 +617,34 @@
NodeList modulenodes = (NodeList) XMLUtils.xpath(
cfg, XPATH_MODULES, XPathConstants.NODESET);
- int num = modulenodes != null ? modulenodes.getLength() : 0;
- ArrayList modules = new ArrayList(num);
+ final int num = modulenodes != null ? modulenodes.getLength() : 0;
+
+ final List modules = new ArrayList<>(num);
for (int i = 0; i < num; i++) {
- Element e = (Element) modulenodes.item(i);
- String modulename = e.getAttribute("name");
- String attrselected = e.getAttribute("selected");
- boolean selected = attrselected == null ? false :
- attrselected.equalsIgnoreCase("true");
+ final Element e = (Element) modulenodes.item(i);
+ final String modulename = e.getAttribute("name");
+ final String attrselected = e.getAttribute("selected");
+ final boolean selected = Boolean.parseBoolean(attrselected);
+ final String group = e.getAttribute("group");
+
log.debug("Loaded module " + modulename);
- NodeList children = e.getChildNodes();
- List rivers = new ArrayList(children.getLength());
+
+ final NodeList children = e.getChildNodes();
+ final List rivers = new ArrayList<>(children.getLength());
for (int j = 0; j < children.getLength(); j++) {
if (children.item(j).getNodeType() != Node.ELEMENT_NODE) {
continue;
}
- Element ce = (Element)children.item(j);
+
+ final Element ce = (Element)children.item(j);
if (ce.hasAttribute("uuid")) {
rivers.add(ce.getAttribute("uuid"));
}
else if (ce.hasAttribute("name")) {
- List allRivers = RiverFactory.getRivers();
- String name = ce.getAttribute("name");
- for (River r: allRivers) {
+ final List allRivers = RiverFactory.getRivers();
+ final String name = ce.getAttribute("name");
+ for (final River r: allRivers) {
if (name.equals(r.getName())) {
rivers.add(r.getModelUuid());
break;
@@ -648,7 +652,7 @@
}
}
}
- modules.add(new Module(modulename, selected, rivers));
+ modules.add(new Module(modulename, selected, group, rivers));
}
context.put(RiverContext.MODULES, modules);
}
diff -r 14200ded6d67 -r 9be51f776798 artifacts/src/main/java/org/dive4elements/river/artifacts/datacage/Recommendations.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/datacage/Recommendations.java Fri Feb 09 15:39:49 2018 +0100
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/datacage/Recommendations.java Fri Jul 13 11:56:22 2018 +0200
@@ -31,7 +31,7 @@
import org.hibernate.SessionFactory;
import org.hibernate.jdbc.Work;
-
+import org.dive4elements.artifacts.CallContext;
import org.dive4elements.artifacts.common.utils.Config;
import org.dive4elements.artifacts.common.utils.XMLUtils;
import org.dive4elements.artifacts.common.utils.StringUtils;
@@ -175,13 +175,15 @@
/**
* Append recommendations to \param result.
* @param extraParameters parameters (typical example: 'recommended')
+ * @param context
*/
public void recommend(
D4EArtifact artifact,
String userId,
String [] outs,
Map extraParameters,
- Node result
+ Node result,
+ final CallContext context
) {
Map parameters = new HashMap();
@@ -201,27 +203,19 @@
parameters.put("PARAMETERS", parameters);
- recommend(parameters, userId, result);
+ recommend(parameters, userId, result, context);
}
/**
* Append recommendations to \param result.
+ * @param context
*/
- public void recommend(
- Map parameters,
- String userId,
- Node result
- ) {
- recommend(parameters, userId, result, SessionHolder.HOLDER.get());
+ public void recommend( final Map parameters, final String userId, final Node result, final CallContext context ) {
+ recommend(parameters, userId, result, SessionHolder.HOLDER.get(), context);
}
- public void recommend(
- final Map parameters,
- final String userId,
- final Node result,
- Session systemSession
- ) {
+ public void recommend( final Map parameters, final String userId, final Node result, final Session systemSession, final CallContext context ) {
systemSession.doWork(new Work() {
@Override
public void execute(final Connection systemConnection)
@@ -237,10 +231,7 @@
public void execute(Connection sedDBConnection)
throws SQLException
{
- recommend(
- parameters, userId, result,
- systemConnection,
- sedDBConnection);
+ recommend( parameters, userId, result, systemConnection, sedDBConnection, context);
}
});
}
@@ -252,11 +243,12 @@
}
public void recommend(
- Map parameters,
- String userId,
- Node result,
- Connection systemConnection,
- Connection seddbConnection
+ final Map parameters,
+ final String userId,
+ final Node result,
+ final Connection systemConnection,
+ final Connection seddbConnection,
+ final CallContext context
) throws SQLException
{
List connections =
@@ -285,7 +277,7 @@
CONNECTION_USER, userConnection, false));
}
- getBuilderPool().build(connections, result, parameters);
+ getBuilderPool().build(connections, result, parameters, context);
}
finally {
if (userConnection != null) {
diff -r 14200ded6d67 -r 9be51f776798 artifacts/src/main/java/org/dive4elements/river/artifacts/datacage/templating/App.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/datacage/templating/App.java Fri Feb 09 15:39:49 2018 +0100
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/datacage/templating/App.java Fri Jul 13 11:56:22 2018 +0200
@@ -8,60 +8,79 @@
package org.dive4elements.river.artifacts.datacage.templating;
-import java.util.Map;
-import java.util.HashMap;
-
+import java.io.File;
+import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
-import java.io.File;
-import java.io.FileOutputStream;
-
-import org.dive4elements.river.backend.SessionFactoryProvider;
-
-import org.hibernate.Session;
-
-import org.w3c.dom.Document;
+import java.net.MalformedURLException;
+import java.util.HashMap;
+import java.util.Map;
import org.apache.log4j.Logger;
-
+import org.apache.log4j.PropertyConfigurator;
+import org.dive4elements.artifacts.CallContext;
+import org.dive4elements.artifacts.common.utils.Config;
import org.dive4elements.artifacts.common.utils.XMLUtils;
+import org.dive4elements.river.artifacts.datacage.Recommendations;
+import org.dive4elements.river.backend.SessionFactoryProvider;
+import org.hibernate.Session;
+import org.slf4j.bridge.SLF4JBridgeHandler;
+import org.w3c.dom.Document;
-import org.dive4elements.river.artifacts.datacage.Recommendations;
-
-public class App
-{
+public class App {
private static Logger log = Logger.getLogger(App.class);
- public static final String template =
- System.getProperty("meta.data.template", "meta-data.xml");
+ /**
+ * The logging is done via Log4j. To configure the logging
+ * a file 'log4j.properties' is search in the configuration directory.
+ */
+ private static final String LOG4J_PROPERTIES = "log4j.properties";
- public static final String userId =
- System.getProperty("user.id");
+ public static final String template = System.getProperty("meta.data.template", "meta-data.xml");
- public static final String PARAMETERS =
- System.getProperty("meta.data.parameters", "");
+ public static final String userId = System.getProperty("user.id");
- public static final String OUTPUT =
- System.getProperty("meta.data.output");
+ public static final String PARAMETERS = System.getProperty("meta.data.parameters", "");
+
+ public static final String OUTPUT = System.getProperty("meta.data.output");
public static Map getParameters() {
- HashMap map = new HashMap();
- String [] parts = PARAMETERS.split("\\s*;\\s*");
- for (String part: parts) {
- String [] kv = part.split("\\s*:\\s*");
+ final HashMap map = new HashMap<>();
+ final String[] parts = PARAMETERS.split("\\s*;\\s*");
+ for (final String part : parts) {
+ final String[] kv = part.split("\\s*:\\s*");
if (kv.length < 2 || (kv[0] = kv[0].trim()).length() == 0) {
continue;
}
- String [] values = kv[1].split("\\s*,\\s*");
+ final String[] values = kv[1].split("\\s*,\\s*");
map.put(kv[0], values.length == 1 ? values[0] : values);
}
return map;
}
- public static void main(String [] args) {
+ /**
+ * Trys to load the Log4j configuration from ${config.dir}/log4j.properties.
+ */
+ private static final void configureLogging() {
+ final File configDir = Config.getConfigDirectory();
+ final File propFile = new File(configDir, LOG4J_PROPERTIES);
- Recommendations rec = Recommendations.createRecommendations(
- new File(template));
+ if (propFile.isFile() && propFile.canRead()) {
+ try {
+ PropertyConfigurator.configure(propFile.toURI().toURL());
+ SLF4JBridgeHandler.install();
+ }
+ catch (final MalformedURLException mue) {
+ mue.printStackTrace(System.err);
+ }
+ }
+ }
+
+ public static void main(final String[] args) {
+
+ configureLogging();
+
+ final Recommendations rec = Recommendations.createRecommendations(new File(template));
if (rec == null) {
System.err.println("No recommendations created");
@@ -71,15 +90,17 @@
final Document result = XMLUtils.newDocument();
final Map parameters = getParameters();
+ // REMARK/TODO: 'ARTIFACT-OUTS' needs a String-Array, should be handled by parser
+ parameters.put("ARTIFACT-OUTS", new String[] { "LONGITUDINAL_SECTION" });
+ parameters.put("PARAMETERS", parameters);
+ parameters.put("USER-ID", userId);
- Session session = SessionFactoryProvider
- .createSessionFactory()
- .openSession();
+ final Session session = SessionFactoryProvider.createSessionFactory().openSession();
try {
- rec.recommend(parameters, userId, result, session);
- }
- finally {
+ final CallContext context = null;
+ rec.recommend(parameters, userId, result, session, context);
+ } finally {
session.close();
}
@@ -87,26 +108,29 @@
if (OUTPUT == null) {
out = System.out;
- }
- else {
+ } else {
try {
out = new FileOutputStream(OUTPUT);
}
- catch (IOException ioe) {
+ catch (final IOException ioe) {
log.error(ioe);
return;
}
}
try {
+ out.write('\n');
XMLUtils.toStream(result, out);
+ out.write('\n');
}
- finally {
+ catch (final IOException e) {
+ log.error(e);
+ } finally {
if (OUTPUT != null) {
try {
out.close();
}
- catch (IOException ioe) {
+ catch (final IOException ioe) {
log.error(ioe);
}
}
diff -r 14200ded6d67 -r 9be51f776798 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 Fri Feb 09 15:39:49 2018 +0100
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/datacage/templating/Builder.java Fri Jul 13 11:56:22 2018 +0200
@@ -8,6 +8,7 @@
package org.dive4elements.river.artifacts.datacage.templating;
+import org.dive4elements.artifacts.CallContext;
import org.dive4elements.artifacts.common.utils.XMLUtils;
import org.dive4elements.river.utils.Pair;
@@ -138,31 +139,34 @@
protected Deque