changeset 9082:42c15e2f95fb

2.3.4.1.4 Wasserstand falsche Einheit FixAnalysis PDF start
author gernotbelger
date Fri, 25 May 2018 10:44:24 +0200
parents a0feac6ea1ba
children 3828c7d820ef
files artifacts/doc/conf/artifacts/bundu.xml artifacts/doc/conf/artifacts/fixanalysis.xml artifacts/doc/conf/jasper/waterlevel.jasper artifacts/src/main/java/org/dive4elements/river/artifacts/states/fixation/FixAnalysisCompute.java artifacts/src/main/java/org/dive4elements/river/artifacts/states/fixation/FixRealizingCompute.java artifacts/src/main/java/org/dive4elements/river/exports/WaterlevelExporter.java artifacts/src/main/java/org/dive4elements/river/exports/fixings/DeltaWtExporter.java artifacts/src/main/resources/messages.properties artifacts/src/main/resources/messages_de.properties
diffstat 9 files changed, 828 insertions(+), 1217 deletions(-) [+]
line wrap: on
line diff
--- a/artifacts/doc/conf/artifacts/bundu.xml	Fri May 25 09:10:19 2018 +0200
+++ b/artifacts/doc/conf/artifacts/bundu.xml	Fri May 25 10:44:24 2018 +0200
@@ -122,8 +122,9 @@
         <outputmode name="fix_deltawt_export" description="output.fix_deltawt_export" mine-type="text/plain" type="export">
           <facets>
             <facet name="csv" description="facet.fix_deltawt.csv" />
+            <facet name="pdf" description="facet.fix_deltawt.pdf" />
           </facets>
-        </outputmode>
+        </outputmode> 
         <outputmode name="fix_parameters_export" description="output.fix_parameters_export" mine-type="text/plain" type="export">
           <facets>
             <facet name="fix_parameters" description="facet.fix_parameters.csv" />
--- a/artifacts/doc/conf/artifacts/fixanalysis.xml	Fri May 25 09:10:19 2018 +0200
+++ b/artifacts/doc/conf/artifacts/fixanalysis.xml	Fri May 25 10:44:24 2018 +0200
@@ -1,337 +1,306 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <artifact name="fixanalysis">
-    <states>
-        <state id="state.fix.river" description="state.fix.river"
-            helpText="help.state.fix.river"
-            state="org.dive4elements.river.artifacts.states.RiverSelect">
-            <data name="river" type="String" />
-        </state>
-
-        <transition transition="org.dive4elements.river.artifacts.transitions.DefaultTransition">
-            <from state="state.fix.river"/>
-            <to state="state.fix.calculation.mode"/>
-        </transition>
-
-        <state id="state.fix.calculation.mode"
-            helpText="help.state.fix.calculation.mode"
-            description="state.fix.calcuation.mode"
-            state="org.dive4elements.river.artifacts.states.fixation.FixationSelect">
-            <data name="calculation.mode" type="String"/>
-        </state>
-
-        <transition transition="org.dive4elements.river.artifacts.transitions.DefaultTransition">
-            <from state="state.fix.calculation.mode"/>
-            <to state="state.fix.location"/>
-        </transition>
-
-        <state id="state.fix.location" description="state.fix.location"
-            helpText="help.state.fix.location"
-            state="org.dive4elements.river.artifacts.states.fixation.LocationSelect">
-            <data name="ld_from" type="Double"/>
-            <data name="ld_to" type="Double"/>
-            <data name="ld_step" type="Double"/>
-        </state>
-
-        <transition transition="org.dive4elements.river.artifacts.transitions.DefaultTransition">
-            <from state="state.fix.location"/>
-            <to state="state.fix.period"/>
-        </transition>
-
-        <state id="state.fix.period" description="state.fix.period"
-            helpText="help.state.fix.period"
-            state="org.dive4elements.river.artifacts.states.fixation.FixationPeriod">
-            <data name="start" type="Long"/>
-            <data name="end" type="Long"/>
-        </state>
-
-        <transition transition="org.dive4elements.river.artifacts.transitions.DefaultTransition">
-            <from state="state.fix.period"/>
-            <to state="state.fix.gaugerange"/>
-        </transition>
-
-        <state id="state.fix.gaugerange" description="state.fix.gaugerange"
-            helpText="help.state.fix.gaugerange"
-            state="org.dive4elements.river.artifacts.states.fixation.GaugeRange">
-            <data name="q1" type="Integer"/>
-            <data name="q2" type="Integer"/>
-        </state>
-
-        <transition transition="org.dive4elements.river.artifacts.transitions.DefaultTransition">
-            <from state="state.fix.gaugerange"/>
-            <to state="state.fix.eventselect"/>
-        </transition>
-
-        <state id="state.fix.eventselect" description="state.fix.eventselect"
-            helpText="help.state.fix.eventselect"
-            state="org.dive4elements.river.artifacts.states.fixation.EventSelect">
-            <data name="events" type="intarray"/>
-        </state>
-
-        <transition transition="org.dive4elements.river.artifacts.transitions.ValueCompareTransition">
-            <from state="state.fix.eventselect"/>
-            <to state="state.fix.analysis.referenceperiod"/>
-            <condition data="calculation.mode" value="calculation.analysis"
-                operator="equal"/>
-        </transition>
-
-        <transition transition="org.dive4elements.river.artifacts.transitions.ValueCompareTransition">
-            <from state="state.fix.eventselect"/>
-            <to state="state.fix.vollmer.function"/>
-            <condition data="calculation.mode" value="calculation.vollmer"
-                operator="equal"/>
-        </transition>
-
-        <state id="state.fix.analysis.referenceperiod"
-            helpText="help.state.fix.analysis.referenceperiod"
-            description="state.fix.analysis.referenceperiod"
-            state="org.dive4elements.river.artifacts.states.fixation.ReferencePeriod">
-            <data name="ref_start" type="Long"/>
-            <data name="ref_end" type="Long"/>
-        </state>
-
-        <transition transition="org.dive4elements.river.artifacts.transitions.DefaultTransition">
-            <from state="state.fix.analysis.referenceperiod"/>
-            <to state="state.fix.analysis.analysisperiods"/>
-        </transition>
-
-        <state id="state.fix.analysis.analysisperiods"
-            helpText="help.state.fix.analysis.analysisperiods"
-            description="state.fix.analysis.analysisperiods"
-            state="org.dive4elements.river.artifacts.states.fixation.AnalysisPeriods">
-            <data name="ana_data" type="String"/>
-        </state>
-
-        <transition transition="org.dive4elements.river.artifacts.transitions.DefaultTransition">
-            <from state="state.fix.analysis.analysisperiods"/>
-            <to state="state.fix.analysis.function"/>
-        </transition>
-
-        <state id="state.fix.analysis.function"
-            helpText="help.state.fix.analysis.function"
-            description="state.fix.analysis.function"
-            state="org.dive4elements.river.artifacts.states.fixation.FunctionSelect">
-            <data name="function" type="String"/>
-        </state>
-
-        <transition transition="org.dive4elements.river.artifacts.transitions.DefaultTransition">
-            <from state="state.fix.analysis.function"/>
-            <to state="state.fix.analysis.preprocessing"/>
-        </transition>
-
-        <state id="state.fix.analysis.preprocessing"
-            helpText="help.state.fix.analysis.preprocessing"
-            description="state.fix.analysis.preprocessing"
-            state="org.dive4elements.river.artifacts.states.fixation.PreprocessingSelect">
-            <data name="preprocessing" type="Boolean"/>
-        </state>
-
-        <transition transition="org.dive4elements.river.artifacts.transitions.DefaultTransition">
-            <from state="state.fix.analysis.preprocessing"/>
-            <to state="state.fix.analysis.compute"/>
-        </transition>
+  <states>
+    <state id="state.fix.river" description="state.fix.river" helpText="help.state.fix.river" state="org.dive4elements.river.artifacts.states.RiverSelect">
+      <data name="river" type="String" />
+    </state>
 
-        <state id="state.fix.analysis.compute"
-            helpText="help.state.fix.analysis.compute"
-            description="state.fix.analysis.compute"
-            state="org.dive4elements.river.artifacts.states.fixation.FixAnalysisCompute">
-            <outputmodes>
-                <outputmode name="fix_deltawt_export" description="output.fix_deltawt_export" mine-type="text/plain" type="export">
-                    <facets>
-                        <facet name="csv" description="facet.fix_deltawt.csv" />
-                    </facets>
-                </outputmode>
-                <outputmode name="fix_parameters_export" description="output.fix_parameters_export" mine-type="text/plain" type="export">
-                    <facets>
-                        <facet name="fix_parameters" description="facet.fix_parameters.csv" />
-                    </facets>
-                </outputmode>
-                <outputmode name="fix_wq_curve_at_export" description="output.fix_wq_curve_at_export" mime-type="text/plain" type="export">
-                    <facets>
-                        <facet name="at" description="facet.fix_wq_curve_export.at"/>
-                    </facets>
-                </outputmode>
-                <outputmode name="fix_wq_curve" description="output.fix_wq_curve" mine-type="image/png" type="chart">
-                    <facets>
-                        <facet name="fix_sector_average_wq_0" description="Average values for Ws in Q sectors."/>
-                        <facet name="fix_sector_average_wq_1" description="Average values for Ws in Q sectors."/>
-                        <facet name="fix_sector_average_wq_2" description="Average values for Ws in Q sectors."/>
-                        <facet name="fix_sector_average_wq_3" description="Average values for Ws in Q sectors."/>
-                        <facet name="fix_analysis_events_wq" description="Raw event values used in the calculation"/>
-                        <facet name="fix_reference_events_wq" description="Raw event values used in the calculation"/>
-                        <facet name="fix_wq_curve" description="WQ curve"/>
-                        <facet name="qsectors" description="qsectors."/>
-                        <facet name="fix_outlier" description="The outliers"/>
-                        <facet name="other.wqkms.q"          description="W-Type of data" />
-                        <facet name="other.wqkms.w"          description="W-Type of data" />
-                        <facet name="other.wkms" description="facet.other.wkms"/>
-                        <facet name="other.wkms.marks" description="facet.other.wkms.makrs"/>
-                        <facet name="other.wqkms" description="facet.other.wqkms"/>
-                        <facet name="longitudinal_section.w" description="facet.longitudinal_section.w"/>
-                        <facet name="other.wq"    description="Point-like data like fixations"/>
-                        <facet name="heightmarks_points" description="facet.other.wkms.heightmarks_points"/>
-                        <facet name="discharge_curve.curve" description="facet.discharge_curve.curve"/>
-                        <facet name="fix_wq_curve.manualpoints" description="Manual points"/>
-                        <facet name="mainvalues.q" description="mainvalues.q"/>
-                        <facet name="mainvalues.w" description="mainvalues.w"/>
-                    </facets>
-                </outputmode>
-                <outputmode name="fix_deltawt_curve" description="output.fix_deltawt_curve" mine-type="image/png" type="chart">
-                    <facets>
-                        <facet name="fix_sector_average_dwt_0" description="Average values for Ws in Q sectors."/>
-                        <facet name="fix_sector_average_dwt_1" description="Average values for Ws in Q sectors."/>
-                        <facet name="fix_sector_average_dwt_2" description="Average values for Ws in Q sectors."/>
-                        <facet name="fix_sector_average_dwt_3" description="Average values for Ws in Q sectors."/>
-                        <facet name="fix_analysis_events_dwt" description="Raw event values used in the calculation"/>
-                        <facet name="fix_reference_events_dwt" description="Raw event values used in the calculation"/>
-                        <facet name="fix_analysis_periods_dwt" description="Dateranges of analysis periods."/>
-                        <facet name="fix_deviation_dwt" description="The standard variance"/>
-                        <facet name="fix_deltawt_curve.manualpoints" description="Manual points"/>
-                        <facet name="fix_reference_period_dwt" description="Reference period"/>
-                    </facets>
-                </outputmode>
-                <outputmode name="fix_longitudinal_section_curve" description="output.fix_longitudinal_section_curve" mine-type="image/png" type="chart">
-                    <facets>
-                        <facet name="fix_sector_average_ls_0" description="Average values for Ws in Q sectors."/>
-                        <facet name="fix_sector_average_ls_1" description="Average values for Ws in Q sectors."/>
-                        <facet name="fix_sector_average_ls_2" description="Average values for Ws in Q sectors."/>
-                        <facet name="fix_sector_average_ls_3" description="Average values for Ws in Q sectors."/>
-                        <facet name="fix_sector_average_ls_deviation_0" description="Average values for Ws in Q sectors."/>
-                        <facet name="fix_sector_average_ls_deviation_1" description="Average values for Ws in Q sectors."/>
-                        <facet name="fix_sector_average_ls_deviation_2" description="Average values for Ws in Q sectors."/>
-                        <facet name="fix_sector_average_ls_deviation_3" description="Average values for Ws in Q sectors."/>
-                        <facet name="longitudinal_section.annotations" description="facet.longitudinal_section.annotations"/>
-                        <facet name="fix_deviation_ls" description="The standard variance"/>
-                        <facet name="fix_analysis_events_ls" description="Average values for Ws in Q sectors."/>
-                        <facet name="fix_reference_events_ls" description="Average values for Ws in Q sectors."/>
-                        <facet name="fix_longitudinal_section_curve.manualpoints" description="Manual points"/>
-                        <facet name="other.wqkms.q"          description="W-Type of data" />
-                        <facet name="other.wqkms.w"          description="W-Type of data" />
-                    </facets>
-                </outputmode>
-                <outputmode name="fix_derivate_curve" description="output.fix_derivate_curve" mine-type="image/png" type="chart">
-                    <facets>
-                        <facet name="fix_derivate_curve" description="Derivate curve"/>
-                        <facet name="fix_derivate_curve.manualpoints" description="Manual points"/>
-                    </facets>
-                </outputmode>
-                <outputmode name="fix_report" description="output.fix_report.report" mime-type="text/plain" type="report">
-                    <facets>
-                        <facet name="report" description="facet.fix.report" />
-                    </facets>
-                </outputmode>
-            </outputmodes>
-        </state>
-
-        <state id="state.fix.vollmer.function"
-            helpText="help.state.fix.vollmer.function"
-            description="state.fix.vollmer.function"
-            state="org.dive4elements.river.artifacts.states.fixation.FunctionSelect">
-            <data name="function" type="String"/>
-        </state>
+    <transition transition="org.dive4elements.river.artifacts.transitions.DefaultTransition">
+      <from state="state.fix.river" />
+      <to state="state.fix.calculation.mode" />
+    </transition>
 
-        <transition transition="org.dive4elements.river.artifacts.transitions.DefaultTransition">
-            <from state="state.fix.vollmer.function"/>
-            <to state="state.fix.vollmer.preprocessing"/>
-        </transition>
-
-        <state id="state.fix.vollmer.preprocessing"
-            helpText="help.state.fix.vollmer.preprocessing"
-            description="state.fix.vollmer.preprocessing"
-            state="org.dive4elements.river.artifacts.states.fixation.PreprocessingSelect">
-            <data name="preprocessing" type="Boolean"/>
-        </state>
-
-        <transition transition="org.dive4elements.river.artifacts.transitions.DefaultTransition">
-            <from state="state.fix.vollmer.preprocessing"/>
-            <to state="state.fix.vollmer.qs"/>
-        </transition>
-
-        <state id="state.fix.vollmer.qs" description="state.fix.vollmer.qs"
-            helpText="help.state.fix.vollmer.qs"
-            state="org.dive4elements.river.artifacts.states.WQFixing">
-            <data name="wq_isq"   type="String" />
-            <data name="wq_values" type="WQTriple" />
-        </state>
-
-        <transition transition="org.dive4elements.river.artifacts.transitions.DefaultTransition">
-            <from state="state.fix.vollmer.qs"/>
-            <to state="state.fix.vollmer.compute"/>
-        </transition>
+    <state id="state.fix.calculation.mode" helpText="help.state.fix.calculation.mode" description="state.fix.calcuation.mode" state="org.dive4elements.river.artifacts.states.fixation.FixationSelect">
+      <data name="calculation.mode" type="String" />
+    </state>
 
-        <state id="state.fix.vollmer.compute"
-            helpText="help.state.fix.vollmer.compute"
-            description="state.fix.vollmer.compute"
-            state="org.dive4elements.river.artifacts.states.fixation.FixRealizingCompute">
-            <outputmodes>
-                <outputmode name="longitudinal_section" description="output.longitudinal_section" mime-type="image/png" type="chart">
-                    <facets>
-                    	<facet name="longitudinal_section.w" description="facet.longitudinal_section.w"/>
-                    	<facet name="longitudinal_section.q" description="facet.longitudinal_section.q"/>
-                        <facet name="w_differences" description="facet.w_differences"/>
-                        <facet name="other.wkms" description="facet.other.wkms"/>
-                        <facet name="other.wq"               description="WQ-Type of data" />
-                        <facet name="other.wqkms" description="facet.other.wqkms"/>
-                        <facet name="other.wqkms.q"          description="W-Type of data" />
-                        <facet name="other.wqkms.w"          description="W-Type of data" />
-                        <facet name="heightmarks_points" description="facet.other.wkms.heightmarks_points"/>
-                        <facet name="longitudinal_section.annotations" description="facet.longitudinal_section.annotations"/>
-                        <facet name="longitudinal_section.area" description="facet.longitudinal_section.area"/>
-                        <facet name="longitudinal_section.manualpoints" description="Manuelle Punkte"/>
-                    </facets>
-                </outputmode>
-                <outputmode name="fix_wq_curve" description="output.fix_wq_curve" mine-type="image/png" type="chart">
-                    <facets>
-                        <facet name="fix_sector_average_wq_0" description="Average values for Ws in Q sectors."/>
-                        <facet name="fix_sector_average_wq_1" description="Average values for Ws in Q sectors."/>
-                        <facet name="fix_sector_average_wq_2" description="Average values for Ws in Q sectors."/>
-                        <facet name="fix_sector_average_wq_3" description="Average values for Ws in Q sectors."/>
-                        <facet name="fix_analysis_events_wq" description="Raw event values used in the calculation"/>
-                        <facet name="fix_wq_curve" description="WQ curve"/>
-                        <facet name="fix_wq_ls" description="WQ LS curve"/>
-                        <facet name="fix_outlier" description="The outliers"/>
-                        <facet name="qsectors" description="qsectors."/>
-                        <facet name="fix_events_wqkms"          description="WQKMS-Type of data" />
-                        <facet name="other.wqkms.q"          description="W-Type of data" />
-                        <facet name="other.wqkms.w"          description="W-Type of data" />
-                        <facet name="other.wkms" description="facet.other.wqkms"/>
-                        <facet name="other.wqkms" description="facet.other.wqkms"/>
-                        <!--issue1383: facet name="longitudinal_section.w" description="facet.longitudinal_section.w"/-->
-                        <facet name="other.wq"    description="Point-like data like fixations"/>
-                        <facet name="heightmarks_points" description="facet.other.wkms.heightmarks_points"/>
-                        <facet name="discharge_curve.curve" description="facet.discharge_curve.curve"/>
-                        <facet name="mainvalues.w" description="facet.fix_wq.mainvalues.w"/>
-                        <facet name="mainvalues.q" description="facet.fix_wq.mainvalues.q"/>
-                    </facets>
-                </outputmode>
-                <outputmode name="cross_section" description="output.cross_section" mime-type="image/png" type="chart">
-                  <facets>
-                    <facet name="cross_section_water_line"   description="facet.cross_section_water_line"/>
-                    <facet name="cross_section"              description="facet.cross_section"/>
-                    <facet name="area"                       description="an area"/>
-                    <facet name="cross_section.area"         description="an area"/>
-                    <facet name="cross_section.manualpoints" description="points"/>
-                    <facet name="cross_section.manualline"   description="line"/>
-                    <facet name="hyk"                        description="hyks"/>
-                  </facets>
-                </outputmode>
-                <outputmode name="fix_wq_curve_at_export" description="output.fix_wq_curve_at_export" mime-type="text/plain" type="export">
-                    <facets>
-                        <facet name="at" description="facet.fix_wq_curve_export.at"/>
-                    </facets>
-                </outputmode>
-                <outputmode name="fix_waterlevel_export" description="output.fix_waterlevel_export" mine-type="text/plain" type="export">
-                    <facets>
-                        <facet name="csv" description="facet.waterlevel_export.csv" />
-                        <facet name="wst" description="facet.waterlevel_export.wst" />
-                        <facet name="pdf" description="facet.waterlevel_export.pdf" />
-                    </facets>
-                </outputmode>
-                <outputmode name="fix_report" description="output.fix_report.report" mime-type="text/plain" type="report">
-                    <facets>
-                        <facet name="report" description="facet.fix.report" />
-                    </facets>
-                </outputmode>
-            </outputmodes>
-        </state>
-    </states>
+    <transition transition="org.dive4elements.river.artifacts.transitions.DefaultTransition">
+      <from state="state.fix.calculation.mode" />
+      <to state="state.fix.location" />
+    </transition>
+
+    <state id="state.fix.location" description="state.fix.location" helpText="help.state.fix.location" state="org.dive4elements.river.artifacts.states.fixation.LocationSelect">
+      <data name="ld_from" type="Double" />
+      <data name="ld_to" type="Double" />
+      <data name="ld_step" type="Double" />
+    </state>
+
+    <transition transition="org.dive4elements.river.artifacts.transitions.DefaultTransition">
+      <from state="state.fix.location" />
+      <to state="state.fix.period" />
+    </transition>
+
+    <state id="state.fix.period" description="state.fix.period" helpText="help.state.fix.period" state="org.dive4elements.river.artifacts.states.fixation.FixationPeriod">
+      <data name="start" type="Long" />
+      <data name="end" type="Long" />
+    </state>
+
+    <transition transition="org.dive4elements.river.artifacts.transitions.DefaultTransition">
+      <from state="state.fix.period" />
+      <to state="state.fix.gaugerange" />
+    </transition>
+
+    <state id="state.fix.gaugerange" description="state.fix.gaugerange" helpText="help.state.fix.gaugerange" state="org.dive4elements.river.artifacts.states.fixation.GaugeRange">
+      <data name="q1" type="Integer" />
+      <data name="q2" type="Integer" />
+    </state>
+
+    <transition transition="org.dive4elements.river.artifacts.transitions.DefaultTransition">
+      <from state="state.fix.gaugerange" />
+      <to state="state.fix.eventselect" />
+    </transition>
+
+    <state id="state.fix.eventselect" description="state.fix.eventselect" helpText="help.state.fix.eventselect" state="org.dive4elements.river.artifacts.states.fixation.EventSelect">
+      <data name="events" type="intarray" />
+    </state>
+
+    <transition transition="org.dive4elements.river.artifacts.transitions.ValueCompareTransition">
+      <from state="state.fix.eventselect" />
+      <to state="state.fix.analysis.referenceperiod" />
+      <condition data="calculation.mode" value="calculation.analysis" operator="equal" />
+    </transition>
+
+    <transition transition="org.dive4elements.river.artifacts.transitions.ValueCompareTransition">
+      <from state="state.fix.eventselect" />
+      <to state="state.fix.vollmer.function" />
+      <condition data="calculation.mode" value="calculation.vollmer" operator="equal" />
+    </transition>
+
+    <state id="state.fix.analysis.referenceperiod" helpText="help.state.fix.analysis.referenceperiod" description="state.fix.analysis.referenceperiod" state="org.dive4elements.river.artifacts.states.fixation.ReferencePeriod">
+      <data name="ref_start" type="Long" />
+      <data name="ref_end" type="Long" />
+    </state>
+
+    <transition transition="org.dive4elements.river.artifacts.transitions.DefaultTransition">
+      <from state="state.fix.analysis.referenceperiod" />
+      <to state="state.fix.analysis.analysisperiods" />
+    </transition>
+
+    <state id="state.fix.analysis.analysisperiods" helpText="help.state.fix.analysis.analysisperiods" description="state.fix.analysis.analysisperiods" state="org.dive4elements.river.artifacts.states.fixation.AnalysisPeriods">
+      <data name="ana_data" type="String" />
+    </state>
+
+    <transition transition="org.dive4elements.river.artifacts.transitions.DefaultTransition">
+      <from state="state.fix.analysis.analysisperiods" />
+      <to state="state.fix.analysis.function" />
+    </transition>
+
+    <state id="state.fix.analysis.function" helpText="help.state.fix.analysis.function" description="state.fix.analysis.function" state="org.dive4elements.river.artifacts.states.fixation.FunctionSelect">
+      <data name="function" type="String" />
+    </state>
+
+    <transition transition="org.dive4elements.river.artifacts.transitions.DefaultTransition">
+      <from state="state.fix.analysis.function" />
+      <to state="state.fix.analysis.preprocessing" />
+    </transition>
+
+    <state id="state.fix.analysis.preprocessing" helpText="help.state.fix.analysis.preprocessing" description="state.fix.analysis.preprocessing" state="org.dive4elements.river.artifacts.states.fixation.PreprocessingSelect">
+      <data name="preprocessing" type="Boolean" />
+    </state>
+
+    <transition transition="org.dive4elements.river.artifacts.transitions.DefaultTransition">
+      <from state="state.fix.analysis.preprocessing" />
+      <to state="state.fix.analysis.compute" />
+    </transition>
+
+    <state id="state.fix.analysis.compute" helpText="help.state.fix.analysis.compute" description="state.fix.analysis.compute" state="org.dive4elements.river.artifacts.states.fixation.FixAnalysisCompute">
+        <outputmodes>
+          <outputmode name="fix_deltawt_export" description="output.fix_deltawt_export" mime-type="text/plain" type="export">
+          <facets>
+            <facet name="csv" description="facet.fix_deltawt.csv" /> 
+          </facets>
+        </outputmode>
+         <outputmode name="fix_waterlevel_export" description="output.fix_waterlevel_export" mime-type="text/plain" type="export">
+          <facets>
+            <facet name="csv" description="facet.waterlevel_export.csv" />
+            <facet name="wst" description="facet.waterlevel_export.wst" />
+            <facet name="pdf" description="facet.waterlevel_export.pdf" />
+          </facets>
+        </outputmode>
+
+        <outputmode name="fix_parameters_export" description="output.fix_parameters_export" mime-type="text/plain" type="export">
+          <facets>
+            <facet name="fix_parameters" description="facet.fix_parameters.csv" />
+          </facets>
+        </outputmode>
+        <outputmode name="fix_wq_curve_at_export" description="output.fix_wq_curve_at_export" mime-type="text/plain" type="export">
+          <facets>
+            <facet name="at" description="facet.fix_wq_curve_export.at" />
+          </facets>
+        </outputmode>
+ 
+        <outputmode name="fix_wq_curve" description="output.fix_wq_curve" mime-type="image/png" type="chart">
+          <facets>
+            <facet name="fix_sector_average_wq_0" description="Average values for Ws in Q sectors." />
+            <facet name="fix_sector_average_wq_1" description="Average values for Ws in Q sectors." />
+            <facet name="fix_sector_average_wq_2" description="Average values for Ws in Q sectors." />
+            <facet name="fix_sector_average_wq_3" description="Average values for Ws in Q sectors." />
+            <facet name="fix_analysis_events_wq" description="Raw event values used in the calculation" />
+            <facet name="fix_reference_events_wq" description="Raw event values used in the calculation" />
+            <facet name="fix_wq_curve" description="WQ curve" />
+            <facet name="qsectors" description="qsectors." />
+            <facet name="fix_outlier" description="The outliers" />
+            <facet name="other.wqkms.q" description="W-Type of data" />
+            <facet name="other.wqkms.w" description="W-Type of data" />
+            <facet name="other.wkms" description="facet.other.wkms" />
+            <facet name="other.wkms.marks" description="facet.other.wkms.makrs" />
+            <facet name="other.wqkms" description="facet.other.wqkms" />
+            <facet name="longitudinal_section.w" description="facet.longitudinal_section.w" />
+            <facet name="other.wq" description="Point-like data like fixations" />
+            <facet name="heightmarks_points" description="facet.other.wkms.heightmarks_points" />
+            <facet name="discharge_curve.curve" description="facet.discharge_curve.curve" />
+            <facet name="fix_wq_curve.manualpoints" description="Manual points" />
+            <facet name="mainvalues.q" description="mainvalues.q" />
+            <facet name="mainvalues.w" description="mainvalues.w" />
+          </facets>
+        </outputmode>
+        <outputmode name="fix_deltawt_curve" description="output.fix_deltawt_curve" mime-type="image/png" type="chart">
+          <facets>
+            <facet name="fix_sector_average_dwt_0" description="Average values for Ws in Q sectors." />
+            <facet name="fix_sector_average_dwt_1" description="Average values for Ws in Q sectors." />
+            <facet name="fix_sector_average_dwt_2" description="Average values for Ws in Q sectors." />
+            <facet name="fix_sector_average_dwt_3" description="Average values for Ws in Q sectors." />
+            <facet name="fix_analysis_events_dwt" description="Raw event values used in the calculation" />
+            <facet name="fix_reference_events_dwt" description="Raw event values used in the calculation" />
+            <facet name="fix_analysis_periods_dwt" description="Dateranges of analysis periods." />
+            <facet name="fix_deviation_dwt" description="The standard variance" />
+            <facet name="fix_deltawt_curve.manualpoints" description="Manual points" />
+            <facet name="fix_reference_period_dwt" description="Reference period" />
+          </facets>
+        </outputmode>
+        <outputmode name="fix_longitudinal_section_curve" description="output.fix_longitudinal_section_curve" mime-type="image/png" type="chart">
+          <facets>
+            <facet name="fix_sector_average_ls_0" description="Average values for Ws in Q sectors." />
+            <facet name="fix_sector_average_ls_1" description="Average values for Ws in Q sectors." />
+            <facet name="fix_sector_average_ls_2" description="Average values for Ws in Q sectors." />
+            <facet name="fix_sector_average_ls_3" description="Average values for Ws in Q sectors." />
+            <facet name="fix_sector_average_ls_deviation_0" description="Average values for Ws in Q sectors." />
+            <facet name="fix_sector_average_ls_deviation_1" description="Average values for Ws in Q sectors." />
+            <facet name="fix_sector_average_ls_deviation_2" description="Average values for Ws in Q sectors." />
+            <facet name="fix_sector_average_ls_deviation_3" description="Average values for Ws in Q sectors." />
+            <facet name="longitudinal_section.annotations" description="facet.longitudinal_section.annotations" />
+            <facet name="fix_deviation_ls" description="The standard variance" />
+            <facet name="fix_analysis_events_ls" description="Average values for Ws in Q sectors." />
+            <facet name="fix_reference_events_ls" description="Average values for Ws in Q sectors." />
+            <facet name="fix_longitudinal_section_curve.manualpoints" description="Manual points" />
+            <facet name="other.wqkms.q" description="W-Type of data" />
+            <facet name="other.wqkms.w" description="W-Type of data" />
+          </facets>
+        </outputmode>
+        <outputmode name="fix_derivate_curve" description="output.fix_derivate_curve" mime-type="image/png" type="chart">
+          <facets>
+            <facet name="fix_derivate_curve" description="Derivate curve" />
+            <facet name="fix_derivate_curve.manualpoints" description="Manual points" />
+          </facets>
+        </outputmode>
+        <outputmode name="fix_report" description="output.fix_report.report" mime-type="text/plain" type="report">
+          <facets>
+            <facet name="report" description="facet.fix.report" />
+          </facets>
+        </outputmode>
+      </outputmodes>
+    </state>
+
+    <state id="state.fix.vollmer.function" helpText="help.state.fix.vollmer.function" description="state.fix.vollmer.function" state="org.dive4elements.river.artifacts.states.fixation.FunctionSelect">
+      <data name="function" type="String" />
+    </state>
+
+    <transition transition="org.dive4elements.river.artifacts.transitions.DefaultTransition">
+      <from state="state.fix.vollmer.function" />
+      <to state="state.fix.vollmer.preprocessing" />
+    </transition>
+
+    <state id="state.fix.vollmer.preprocessing" helpText="help.state.fix.vollmer.preprocessing" description="state.fix.vollmer.preprocessing" state="org.dive4elements.river.artifacts.states.fixation.PreprocessingSelect">
+      <data name="preprocessing" type="Boolean" />
+    </state>
+
+    <transition transition="org.dive4elements.river.artifacts.transitions.DefaultTransition">
+      <from state="state.fix.vollmer.preprocessing" />
+      <to state="state.fix.vollmer.qs" />
+    </transition>
+
+    <state id="state.fix.vollmer.qs" description="state.fix.vollmer.qs" helpText="help.state.fix.vollmer.qs" state="org.dive4elements.river.artifacts.states.WQFixing">
+      <data name="wq_isq" type="String" />
+      <data name="wq_values" type="WQTriple" />
+    </state>
+
+    <transition transition="org.dive4elements.river.artifacts.transitions.DefaultTransition">
+      <from state="state.fix.vollmer.qs" />
+      <to state="state.fix.vollmer.compute" />
+    </transition>
+
+    <state id="state.fix.vollmer.compute" helpText="help.state.fix.vollmer.compute" description="state.fix.vollmer.compute" state="org.dive4elements.river.artifacts.states.fixation.FixRealizingCompute">
+      <outputmodes>
+        <outputmode name="longitudinal_section" description="output.longitudinal_section" mime-type="image/png" type="chart">
+          <facets>
+            <facet name="longitudinal_section.w" description="facet.longitudinal_section.w" />
+            <facet name="longitudinal_section.q" description="facet.longitudinal_section.q" />
+            <facet name="w_differences" description="facet.w_differences" />
+            <facet name="other.wkms" description="facet.other.wkms" />
+            <facet name="other.wq" description="WQ-Type of data" />
+            <facet name="other.wqkms" description="facet.other.wqkms" />
+            <facet name="other.wqkms.q" description="W-Type of data" />
+            <facet name="other.wqkms.w" description="W-Type of data" />
+            <facet name="heightmarks_points" description="facet.other.wkms.heightmarks_points" />
+            <facet name="longitudinal_section.annotations" description="facet.longitudinal_section.annotations" />
+            <facet name="longitudinal_section.area" description="facet.longitudinal_section.area" />
+            <facet name="longitudinal_section.manualpoints" description="Manuelle Punkte" />
+          </facets>
+        </outputmode>
+        <outputmode name="fix_wq_curve" description="output.fix_wq_curve" mime-type="image/png" type="chart">
+          <facets>
+            <facet name="fix_sector_average_wq_0" description="Average values for Ws in Q sectors." />
+            <facet name="fix_sector_average_wq_1" description="Average values for Ws in Q sectors." />
+            <facet name="fix_sector_average_wq_2" description="Average values for Ws in Q sectors." />
+            <facet name="fix_sector_average_wq_3" description="Average values for Ws in Q sectors." />
+            <facet name="fix_analysis_events_wq" description="Raw event values used in the calculation" />
+            <facet name="fix_wq_curve" description="WQ curve" />
+            <facet name="fix_wq_ls" description="WQ LS curve" />
+            <facet name="fix_outlier" description="The outliers" />
+            <facet name="qsectors" description="qsectors." />
+            <facet name="fix_events_wqkms" description="WQKMS-Type of data" />
+            <facet name="other.wqkms.q" description="W-Type of data" />
+            <facet name="other.wqkms.w" description="W-Type of data" />
+            <facet name="other.wkms" description="facet.other.wqkms" />
+            <facet name="other.wqkms" description="facet.other.wqkms" />
+            <!--issue1383: facet name="longitudinal_section.w" description="facet.longitudinal_section.w"/ -->
+            <facet name="other.wq" description="Point-like data like fixations" />
+            <facet name="heightmarks_points" description="facet.other.wkms.heightmarks_points" />
+            <facet name="discharge_curve.curve" description="facet.discharge_curve.curve" />
+            <facet name="mainvalues.w" description="facet.fix_wq.mainvalues.w" />
+            <facet name="mainvalues.q" description="facet.fix_wq.mainvalues.q" />
+          </facets>
+        </outputmode>
+        <outputmode name="cross_section" description="output.cross_section" mime-type="image/png" type="chart">
+          <facets>
+            <facet name="cross_section_water_line" description="facet.cross_section_water_line" />
+            <facet name="cross_section" description="facet.cross_section" />
+            <facet name="area" description="an area" />
+            <facet name="cross_section.area" description="an area" />
+            <facet name="cross_section.manualpoints" description="points" />
+            <facet name="cross_section.manualline" description="line" />
+            <facet name="hyk" description="hyks" />
+          </facets>
+        </outputmode>
+        <outputmode name="fix_wq_curve_at_export" description="output.fix_wq_curve_at_export" mime-type="text/plain" type="export">
+          <facets>
+            <facet name="at" description="facet.fix_wq_curve_export.at" />
+          </facets>
+        </outputmode>
+        <outputmode name="fix_waterlevel_export" description="output.fix_waterlevel_export" mime-type="text/plain" type="export">
+          <facets>
+            <facet name="csv" description="facet.waterlevel_export.csv" />
+            <facet name="wst" description="facet.waterlevel_export.wst" />
+            <facet name="pdf" description="facet.waterlevel_export.pdf" />
+          </facets>
+        </outputmode>
+        <outputmode name="fix_report" description="output.fix_report.report" mime-type="text/plain" type="report">
+          <facets>
+            <facet name="report" description="facet.fix.report" />
+          </facets>
+        </outputmode>
+      </outputmodes>
+    </state>
+    
+  </states>
 </artifact>
Binary file artifacts/doc/conf/jasper/waterlevel.jasper has changed
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/states/fixation/FixAnalysisCompute.java	Fri May 25 09:10:19 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/states/fixation/FixAnalysisCompute.java	Fri May 25 10:44:24 2018 +0200
@@ -14,7 +14,6 @@
 import java.util.List;
 
 import org.apache.log4j.Logger;
-
 import org.dive4elements.artifactdatabase.state.Facet;
 import org.dive4elements.artifactdatabase.state.FacetActivity;
 import org.dive4elements.artifacts.Artifact;
@@ -49,15 +48,11 @@
 /**
  * @author <a href="mailto:raimund.renkert@intevation.de">Raimund Renkert</a>
  */
-public class FixAnalysisCompute
-extends      DefaultState
-implements   FacetTypes
-{
+public class FixAnalysisCompute extends DefaultState implements FacetTypes {
     /** The log used in this class. */
     private static Logger log = Logger.getLogger(FixAnalysisCompute.class);
 
-    private static final String I18N_REFERENCEPERIOD_SHORT =
-        "fix.reference.period.event.short";
+    private static final String I18N_REFERENCEPERIOD_SHORT = "fix.reference.period.event.short";
 
     private static final String I18N_ANALYSISPERIODS = "fix.analysis.periods";
 
@@ -69,84 +64,54 @@
 
     private static final String I18N_DEVIATION = "fix.deviation";
 
-    private static final String I18N_REFERENCEDEVIATION =
-        "fix.reference.deviation";
-
-    private static final String I18N_REFERENCEPERIOD =
-        "state.fix.analysis.referenceperiod";
+    private static final String I18N_REFERENCEDEVIATION = "fix.reference.deviation";
 
-    public static final String [] SECTOR_LABELS = {
-        "fix.mnq",
-        "fix.mq",
-        "fix.mhq",
-        "fix.hq5"
-    };
+    private static final String I18N_REFERENCEPERIOD = "state.fix.analysis.referenceperiod";
+
+    public static final String[] SECTOR_LABELS = { "fix.mnq", "fix.mq", "fix.mhq", "fix.hq5" };
 
     static {
         // Active/deactivate facets.
-        FacetActivity.Registry.getInstance().register(
-            "fixanalysis",
-            new FacetActivity() {
-                @Override
-                public Boolean isInitialActive(
-                    Artifact artifact,
-                    Facet    facet,
-                    String   output
-                ) {
-                    if (
-                        output.contains(FacetTypes.ChartType.FLSC.toString())
-                    ) {
-                        // Longitudinal section chart
-                        String name = facet.getName();
+        FacetActivity.Registry.getInstance().register("fixanalysis", new FacetActivity() {
+            @Override
+            public Boolean isInitialActive(final Artifact artifact, final Facet facet, final String output) {
+                if (output.contains(FacetTypes.ChartType.FLSC.toString())) {
+                    // Longitudinal section chart
+                    final String name = facet.getName();
 
-                        if (name.contains(FacetTypes.FIX_ANALYSIS_EVENTS_DWT)
-                         || name.contains(FacetTypes.FIX_ANALYSIS_EVENTS_LS)
-                         || name.contains(FacetTypes.FIX_ANALYSIS_EVENTS_WQ)
-                         || name.contains(FacetTypes.FIX_REFERENCE_EVENTS_DWT)
-                         || name.contains(FacetTypes.FIX_REFERENCE_EVENTS_LS)
-                         || name.contains(FacetTypes.FIX_REFERENCE_EVENTS_WQ)
-                        ) {
-                            return Boolean.FALSE;
-                        }
-                    }
-                    if (output.contains(FacetTypes.ChartType.FDWC.toString())
-                        && facet.getName().contains(
-                            FacetTypes.FIX_SECTOR_AVERAGE_DWT)) {
+                    if (name.contains(FacetTypes.FIX_ANALYSIS_EVENTS_DWT) || name.contains(FacetTypes.FIX_ANALYSIS_EVENTS_LS)
+                            || name.contains(FacetTypes.FIX_ANALYSIS_EVENTS_WQ) || name.contains(FacetTypes.FIX_REFERENCE_EVENTS_DWT)
+                            || name.contains(FacetTypes.FIX_REFERENCE_EVENTS_LS) || name.contains(FacetTypes.FIX_REFERENCE_EVENTS_WQ)) {
                         return Boolean.FALSE;
                     }
-
-                    return Boolean.TRUE;
                 }
-            });
+                if (output.contains(FacetTypes.ChartType.FDWC.toString()) && facet.getName().contains(FacetTypes.FIX_SECTOR_AVERAGE_DWT)) {
+                    return Boolean.FALSE;
+                }
+
+                return Boolean.TRUE;
+            }
+        });
     }
 
-
     /**
      * The default constructor that initializes an empty State object.
      */
     public FixAnalysisCompute() {
     }
 
-
     @Override
-    public Object computeAdvance(
-        D4EArtifact artifact,
-        String       hash,
-        CallContext  context,
-        List<Facet>  facets,
-        Object       old
-    ) {
+    public Object computeAdvance(final D4EArtifact artifact, final String hash, final CallContext context, final List<Facet> facets, final Object old) {
         log.debug("FixAnalysisCompute.computeAdvance");
 
         CalculationResult res;
 
-        FixAnalysisAccess access = new FixAnalysisAccess(artifact);
+        final FixAnalysisAccess access = new FixAnalysisAccess(artifact);
 
         if (old instanceof CalculationResult) {
-            res = (CalculationResult)old;
-        }
-        else {
-            FixAnalysisCalculation calc = new FixAnalysisCalculation(access);
+            res = (CalculationResult) old;
+        } else {
+            final FixAnalysisCalculation calc = new FixAnalysisCalculation(access);
             res = calc.calculate();
         }
 
@@ -155,40 +120,35 @@
         }
 
         if (res.getReport().hasProblems()) {
-            facets.add(new ReportFacet(ComputeType.ADVANCE, hash, id));
+            facets.add(new ReportFacet(ComputeType.ADVANCE, hash, this.id));
         }
 
-        FixAnalysisResult fr = (FixAnalysisResult)res.getData();
+        final FixAnalysisResult fr = (FixAnalysisResult) res.getData();
         if (fr == null) {
             return res;
         }
 
-        facets.add(
-            new DataFacet(CSV, "CSV data", ComputeType.ADVANCE, hash, id));
-        facets.add(
-            new DataFacet(
-                FIX_PARAMETERS, "parameters", ComputeType.ADVANCE, hash, id));
-        facets.add(
-            new DataFacet(AT, "AT data", ComputeType.ADVANCE, hash, id));
+        facets.add(new DataFacet(CSV, "CSV data", ComputeType.ADVANCE, hash, this.id));
+        facets.add(new DataFacet(FIX_PARAMETERS, "parameters", ComputeType.ADVANCE, hash, this.id));
+        facets.add(new DataFacet(AT, "AT data", ComputeType.ADVANCE, hash, this.id));
+        facets.add(new DataFacet(PDF, "PDF data", ComputeType.ADVANCE, hash, this.id));
 
         int maxId = -100;
 
-        int sectorMask = fr.getUsedSectorsInAnalysisPeriods();
-
-        int qsS = access.getQSectorStart();
-        int qsE = access.getQSectorEnd();
+        final int sectorMask = fr.getUsedSectorsInAnalysisPeriods();
 
-        DateFormat df = Formatter.getDateFormatter(
-            context.getMeta(), "dd.MM.yyyy");
-        DateFormat lf = Formatter.getDateFormatter(
-            context.getMeta(), "dd.MM.yyyy'T'HH:mm");
+        final int qsS = access.getQSectorStart();
+        final int qsE = access.getQSectorEnd();
 
-        DateRange [] periods = access.getAnalysisPeriods();
+        final DateFormat df = Formatter.getDateFormatter(context.getMeta(), "dd.MM.yyyy");
+        final DateFormat lf = Formatter.getDateFormatter(context.getMeta(), "dd.MM.yyyy'T'HH:mm");
+
+        final DateRange[] periods = access.getAnalysisPeriods();
 
         for (int i = 0; i < periods.length; i++) {
-            DateRange period = periods[i];
-            String startDate = df.format(period.getFrom());
-            String endDate   = df.format(period.getTo());
+            final DateRange period = periods[i];
+            final String startDate = df.format(period.getFrom());
+            final String endDate = df.format(period.getTo());
 
             for (int j = qsS; j <= qsE; j++) {
 
@@ -197,14 +157,10 @@
                     continue;
                 }
 
-                String sector = SECTOR_LABELS[j];
-                String description = "\u0394W (" +
-                    Resources.getMsg(context.getMeta(),
-                        sector,
-                        sector) +
-                        ")";
+                final String sector = SECTOR_LABELS[j];
+                final String description = "\u0394W (" + Resources.getMsg(context.getMeta(), sector, sector) + ")";
 
-                int sectorNdx = j - qsS;
+                final int sectorNdx = j - qsS;
                 int facetNdx = i << 2;
                 facetNdx = facetNdx | j;
 
@@ -212,139 +168,75 @@
                     maxId = facetNdx;
                 }
 
+                facets.add(new FixAvSectorFacet(facetNdx, FIX_SECTOR_AVERAGE_DWT + "_" + sectorNdx, description));
                 facets.add(
-                    new FixAvSectorFacet(
-                        facetNdx,
-                        FIX_SECTOR_AVERAGE_DWT + "_" + sectorNdx,
-                        description));
-                facets.add(
-                    new FixLongitudinalAvSectorFacet(
-                        facetNdx,
-                        FIX_SECTOR_AVERAGE_LS + "_" + sectorNdx,
-                        description + ":" + startDate + " - " + endDate));
+                        new FixLongitudinalAvSectorFacet(facetNdx, FIX_SECTOR_AVERAGE_LS + "_" + sectorNdx, description + ":" + startDate + " - " + endDate));
                 // TODO: i18n
-                String dev = "Abweichung: " + description;
-                facets.add(
-                    new FixLongitudinalAvSectorFacet(
-                        facetNdx,
-                        FIX_SECTOR_AVERAGE_LS_DEVIATION + "_" + sectorNdx,
-                        dev));
-                facets.add(
-                    new FixAvSectorFacet(
-                        facetNdx,
-                        FIX_SECTOR_AVERAGE_WQ + "_" + sectorNdx,
-                        description));
+                final String dev = "Abweichung: " + description;
+                facets.add(new FixLongitudinalAvSectorFacet(facetNdx, FIX_SECTOR_AVERAGE_LS_DEVIATION + "_" + sectorNdx, dev));
+                facets.add(new FixAvSectorFacet(facetNdx, FIX_SECTOR_AVERAGE_WQ + "_" + sectorNdx, description));
 
             }
 
-            String eventDesc =
-                Resources.getMsg(context.getMeta(),
-                                 I18N_ANALYSIS,
-                                 I18N_ANALYSIS);
+            final String eventDesc = Resources.getMsg(context.getMeta(), I18N_ANALYSIS, I18N_ANALYSIS);
 
-            Collection<Date> aeds = fr.getAnalysisEventsDates(i);
-            UniqueDateFormatter cf = new UniqueDateFormatter(df, lf, aeds);
+            final Collection<Date> aeds = fr.getAnalysisEventsDates(i);
+            final UniqueDateFormatter cf = new UniqueDateFormatter(df, lf, aeds);
 
             int k = 0;
-            for (Date d: aeds) {
+            for (final Date d : aeds) {
                 int anaNdx = i << 8;
                 anaNdx = anaNdx | k;
-                facets.add(new FixAnalysisEventsFacet(anaNdx,
-                    FIX_ANALYSIS_EVENTS_DWT,
-                    eventDesc + (i+1) + " - " + cf.format(d)));
-                facets.add(new FixLongitudinalAnalysisFacet(anaNdx,
-                    FIX_ANALYSIS_EVENTS_LS,
-                    eventDesc + (i+1) + " - " + cf.format(d)));
-                facets.add(new FixAnalysisEventsFacet(anaNdx,
-                    FIX_ANALYSIS_EVENTS_WQ,
-                    eventDesc + (i+1) +" - " + cf.format(d)));
+                facets.add(new FixAnalysisEventsFacet(anaNdx, FIX_ANALYSIS_EVENTS_DWT, eventDesc + (i + 1) + " - " + cf.format(d)));
+                facets.add(new FixLongitudinalAnalysisFacet(anaNdx, FIX_ANALYSIS_EVENTS_LS, eventDesc + (i + 1) + " - " + cf.format(d)));
+                facets.add(new FixAnalysisEventsFacet(anaNdx, FIX_ANALYSIS_EVENTS_WQ, eventDesc + (i + 1) + " - " + cf.format(d)));
                 k++;
             }
         }
 
-        IdGenerator idg = new IdGenerator(maxId + 1);
+        final IdGenerator idg = new IdGenerator(maxId + 1);
 
-        String i18n_ref = Resources.getMsg(context.getMeta(),
-                I18N_REFERENCEPERIOD_SHORT,
-                I18N_REFERENCEPERIOD_SHORT);
-        String i18n_dev = Resources.getMsg(context.getMeta(),
-                I18N_REFERENCEDEVIATION,
-                I18N_REFERENCEDEVIATION);
+        final String i18n_ref = Resources.getMsg(context.getMeta(), I18N_REFERENCEPERIOD_SHORT, I18N_REFERENCEPERIOD_SHORT);
+        final String i18n_dev = Resources.getMsg(context.getMeta(), I18N_REFERENCEDEVIATION, I18N_REFERENCEDEVIATION);
 
-        Collection<Date> reds = fr.getReferenceEventsDates();
-        UniqueDateFormatter cf = new UniqueDateFormatter(df, lf, reds);
+        final Collection<Date> reds = fr.getReferenceEventsDates();
+        final UniqueDateFormatter cf = new UniqueDateFormatter(df, lf, reds);
 
         int i = 0;
-        for (Date d: reds) {
+        for (final Date d : reds) {
             int refNdx = idg.next() << 8;
-            refNdx |=  i;
-            facets.add(new FixReferenceEventsFacet(refNdx,
-                FIX_REFERENCE_EVENTS_DWT,
-                i18n_ref + " - " + cf.format(d)));
+            refNdx |= i;
+            facets.add(new FixReferenceEventsFacet(refNdx, FIX_REFERENCE_EVENTS_DWT, i18n_ref + " - " + cf.format(d)));
             refNdx = idg.next() << 8;
             refNdx = refNdx | i;
-            facets.add(new FixLongitudinalReferenceFacet(refNdx,
-                FIX_REFERENCE_EVENTS_LS,
-                i18n_ref + " - " + cf.format(d)));
+            facets.add(new FixLongitudinalReferenceFacet(refNdx, FIX_REFERENCE_EVENTS_LS, i18n_ref + " - " + cf.format(d)));
             refNdx = idg.next() << 8;
             refNdx |= i;
-            facets.add(new FixReferenceEventsFacet(refNdx,
-                FIX_REFERENCE_EVENTS_WQ,
-                i18n_ref + " - " + cf.format(d)));
+            facets.add(new FixReferenceEventsFacet(refNdx, FIX_REFERENCE_EVENTS_WQ, i18n_ref + " - " + cf.format(d)));
             i++;
         }
 
-        facets.add(new FixLongitudinalDeviationFacet(idg.next(),
-            FIX_DEVIATION_LS,
-            i18n_dev));
+        facets.add(new FixLongitudinalDeviationFacet(idg.next(), FIX_DEVIATION_LS, i18n_dev));
 
-        String i18n_ana = Resources.getMsg(context.getMeta(),
-                I18N_ANALYSISPERIODS,
-                I18N_ANALYSISPERIODS);
-        facets.add(new FixAnalysisPeriodsFacet(idg.next(),
-            FIX_ANALYSIS_PERIODS_DWT,
-            i18n_ana));
-        facets.add(new FixAnalysisPeriodsFacet(idg.next(),
-            FIX_ANALYSIS_PERIODS_LS,
-            i18n_ana));
-        facets.add(new FixAnalysisPeriodsFacet(idg.next(),
-            FIX_ANALYSIS_PERIODS_WQ,
-            i18n_ana));
+        final String i18n_ana = Resources.getMsg(context.getMeta(), I18N_ANALYSISPERIODS, I18N_ANALYSISPERIODS);
+        facets.add(new FixAnalysisPeriodsFacet(idg.next(), FIX_ANALYSIS_PERIODS_DWT, i18n_ana));
+        facets.add(new FixAnalysisPeriodsFacet(idg.next(), FIX_ANALYSIS_PERIODS_LS, i18n_ana));
+        facets.add(new FixAnalysisPeriodsFacet(idg.next(), FIX_ANALYSIS_PERIODS_WQ, i18n_ana));
 
-        String i18n_refp = Resources.getMsg(context.getMeta(),
-                I18N_REFERENCEPERIOD,
-                I18N_REFERENCEPERIOD);
-        facets.add(new DataFacet(idg.next(),
-            FIX_REFERENCE_PERIOD_DWT,
-            i18n_refp,
-            ComputeType.ADVANCE, null, null));
+        final String i18n_refp = Resources.getMsg(context.getMeta(), I18N_REFERENCEPERIOD, I18N_REFERENCEPERIOD);
+        facets.add(new DataFacet(idg.next(), FIX_REFERENCE_PERIOD_DWT, i18n_refp, ComputeType.ADVANCE, null, null));
 
         facets.add(new FixWQCurveFacet(idg.next(), "W/Q"));
 
-        Boolean preprocessing = access.getPreprocessing();
+        final Boolean preprocessing = access.getPreprocessing();
 
         if (preprocessing != null && preprocessing) {
-            facets.add(new FixOutlierFacet(
-                idg.next(),
-                FIX_OUTLIER,
-                Resources.getMsg(
-                    context.getMeta(), I18N_OUTLIER, I18N_OUTLIER)));
+            facets.add(new FixOutlierFacet(idg.next(), FIX_OUTLIER, Resources.getMsg(context.getMeta(), I18N_OUTLIER, I18N_OUTLIER)));
         }
 
-        facets.add(new FixDerivateFacet(
-            idg.next(),
-            FIX_DERIVATE_CURVE,
-            Resources.getMsg(
-                context.getMeta(),
-                I18N_DERIVATIVE,
-                I18N_DERIVATIVE)));
+        facets.add(new FixDerivateFacet(idg.next(), FIX_DERIVATE_CURVE, Resources.getMsg(context.getMeta(), I18N_DERIVATIVE, I18N_DERIVATIVE)));
 
-        facets.add(new FixDeviationFacet(
-            idg.next(),
-            FIX_DEVIATION_DWT,
-            Resources.getMsg(context.getMeta(),
-                I18N_DEVIATION,
-                I18N_DEVIATION)));
+        facets.add(new FixDeviationFacet(idg.next(), FIX_DEVIATION_DWT, Resources.getMsg(context.getMeta(), I18N_DEVIATION, I18N_DEVIATION)));
         return res;
     }
 }
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/states/fixation/FixRealizingCompute.java	Fri May 25 09:10:19 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/states/fixation/FixRealizingCompute.java	Fri May 25 10:44:24 2018 +0200
@@ -14,7 +14,6 @@
 import java.util.List;
 
 import org.apache.log4j.Logger;
-
 import org.dive4elements.artifactdatabase.state.Facet;
 import org.dive4elements.artifacts.CallContext;
 import org.dive4elements.artifacts.CallMeta;
@@ -58,26 +57,18 @@
     public FixRealizingCompute() {
     }
 
-
     @Override
-    public Object computeAdvance(
-        D4EArtifact artifact,
-        String       hash,
-        CallContext  context,
-        List<Facet>  facets,
-        Object       old
-    ) {
+    public Object computeAdvance(final D4EArtifact artifact, final String hash, final CallContext context, final List<Facet> facets, final Object old) {
         log.debug("FixRealizingCompute.computeAdvance");
 
         CalculationResult res;
 
-        FixRealizingAccess access = new FixRealizingAccess(artifact);
+        final FixRealizingAccess access = new FixRealizingAccess(artifact);
 
         if (old instanceof CalculationResult) {
             res = (CalculationResult) old;
-        }
-        else {
-            FixRealizingCalculation calc = new FixRealizingCalculation(access);
+        } else {
+            final FixRealizingCalculation calc = new FixRealizingCalculation(access);
             res = calc.calculate();
         }
 
@@ -89,11 +80,11 @@
             facets.add(new ReportFacet());
         }
 
-        String   id   = getID();
-        CallMeta meta = context.getMeta();
+        final String id = getID();
+        final CallMeta meta = context.getMeta();
 
-        FixRealizingResult fixRes = (FixRealizingResult) res.getData();
-        WQKms [] wqkms = fixRes != null ? fixRes.getWQKms() : new WQKms[0];
+        final FixRealizingResult fixRes = (FixRealizingResult) res.getData();
+        final WQKms[] wqkms = fixRes != null ? fixRes.getWQKms() : new WQKms[0];
 
         for (int i = 0; i < wqkms.length; i++) {
             String nameW = null;
@@ -102,21 +93,17 @@
             if (access.isQ()) {
                 nameQ = wqkms[i].getName();
                 nameW = "W(" + nameQ + ")";
-            }
-            else {
+            } else {
                 nameW = wqkms[i].getName();
                 nameQ = "Q(" + nameW + ")";
             }
 
-            Facet wq = new FixWaterlevelFacet(
-                i, FIX_WQ_LS, nameW, ComputeType.ADVANCE, hash, id);
+            final Facet wq = new FixWaterlevelFacet(i, FIX_WQ_LS, nameW, ComputeType.ADVANCE, hash, id);
 
-            Facet w = new FixWaterlevelFacet(
-                i, LONGITUDINAL_W, nameW, ComputeType.ADVANCE, hash, id);
+            final Facet w = new FixWaterlevelFacet(i, LONGITUDINAL_W, nameW, ComputeType.ADVANCE, hash, id);
 
-            Facet q = new FixWaterlevelFacet(
-                i, LONGITUDINAL_Q, nameQ, ComputeType.ADVANCE, hash, id);
-            Facet csFacet = new CrossSectionWaterLineFacet(i, nameW);
+            final Facet q = new FixWaterlevelFacet(i, LONGITUDINAL_Q, nameQ, ComputeType.ADVANCE, hash, id);
+            final Facet csFacet = new CrossSectionWaterLineFacet(i, nameW);
 
             facets.add(wq);
             facets.add(w);
@@ -125,61 +112,42 @@
 
             // XXX: THIS CAN NOT HAPPEN! REMOVE IT!
             if (wqkms[i] instanceof WQCKms) {
-                String nameC = nameW.replace(
-                    "benutzerdefiniert",
-                    "benutzerdefiniert [korrigiert]");
+                final String nameC = nameW.replace("benutzerdefiniert", "benutzerdefiniert [korrigiert]");
 
-                Facet c = new FixWaterlevelFacet(
-                    i, DISCHARGE_LONGITUDINAL_C, nameC);
+                final Facet c = new FixWaterlevelFacet(i, DISCHARGE_LONGITUDINAL_C, nameC);
 
                 facets.add(c);
             }
         }
 
         if (wqkms.length > 0) {
-            DateFormat df = Formatter.getDateFormatter(context.getMeta(),
-                "dd.MM.yyyy");
-            DateFormat lf = Formatter.getDateFormatter(context.getMeta(),
-                "dd.MM.yyyy'T'HH:mm");
+            final DateFormat df = Formatter.getDateFormatter(context.getMeta(), "dd.MM.yyyy");
+            final DateFormat lf = Formatter.getDateFormatter(context.getMeta(), "dd.MM.yyyy'T'HH:mm");
 
-            Collection<Date> reds = fixRes.getReferenceEventsDates();
-            UniqueDateFormatter cf = new UniqueDateFormatter(df, lf, reds);
+            final Collection<Date> reds = fixRes.getReferenceEventsDates();
+            final UniqueDateFormatter cf = new UniqueDateFormatter(df, lf, reds);
 
             int i = 0;
-            for (Date d: reds) {
-                facets.add(new FixReferenceEventsFacet(
-                        (1 << 9) | i,
-                    FIX_EVENTS,
-                    cf.format(d)));
+            for (final Date d : reds) {
+                facets.add(new FixReferenceEventsFacet((1 << 9) | i, FIX_EVENTS, cf.format(d)));
                 i++;
             }
 
-            facets.add(
-                new DataFacet(CSV, "CSV data", ComputeType.ADVANCE, hash, id));
+            facets.add(new DataFacet(CSV, "CSV data", ComputeType.ADVANCE, hash, id));
 
-            facets.add(
-                new DataFacet(WST, "WST data", ComputeType.ADVANCE, hash, id));
+            facets.add(new DataFacet(WST, "WST data", ComputeType.ADVANCE, hash, id));
 
-            facets.add(
-                new DataFacet(PDF, "PDF data", ComputeType.ADVANCE, hash, id));
+            facets.add(new DataFacet(PDF, "PDF data", ComputeType.ADVANCE, hash, id));
         }
 
-        facets.add(
-            new DataFacet(AT, "AT data", ComputeType.ADVANCE, hash, id));
+        facets.add(new DataFacet(AT, "AT data", ComputeType.ADVANCE, hash, id));
 
-        facets.add(new FixWQCurveFacet(
-            0,
-            Resources.getMsg(meta, I18N_WQ_CURVE, I18N_WQ_CURVE) + " ("
-                + access.getFunction() + ")"));
+        facets.add(new FixWQCurveFacet(0, Resources.getMsg(meta, I18N_WQ_CURVE, I18N_WQ_CURVE) + " (" + access.getFunction() + ")"));
 
         if (access.getPreprocessing()) {
-            facets.add(new FixOutlierFacet(
-                0,
-                FIX_OUTLIER,
-                Resources.getMsg(meta, I18N_WQ_OUTLIER, I18N_WQ_OUTLIER)));
+            facets.add(new FixOutlierFacet(0, FIX_OUTLIER, Resources.getMsg(meta, I18N_WQ_OUTLIER, I18N_WQ_OUTLIER)));
         }
 
         return res;
     }
 }
-// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :
--- a/artifacts/src/main/java/org/dive4elements/river/exports/WaterlevelExporter.java	Fri May 25 09:10:19 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/exports/WaterlevelExporter.java	Fri May 25 10:44:24 2018 +0200
@@ -13,52 +13,45 @@
 import java.text.DateFormat;
 import java.text.NumberFormat;
 import java.util.ArrayList;
-import java.util.Map;
+import java.util.Date;
 import java.util.HashMap;
-import java.util.Date;
 import java.util.List;
 import java.util.Locale;
+import java.util.Map;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
 import org.apache.log4j.Logger;
-
-import au.com.bytecode.opencsv.CSVWriter;
-
-import gnu.trove.TDoubleArrayList;
-
-import org.dive4elements.river.artifacts.model.ConstantWQKms;
-
-import net.sf.jasperreports.engine.JasperExportManager;
-import net.sf.jasperreports.engine.JasperFillManager;
-import net.sf.jasperreports.engine.JasperPrint;
-import net.sf.jasperreports.engine.JRException;
-
 import org.dive4elements.artifacts.Artifact;
 import org.dive4elements.artifacts.CallMeta;
 import org.dive4elements.artifacts.common.utils.Config;
-
-import org.dive4elements.river.model.Gauge;
-
+import org.dive4elements.river.artifacts.D4EArtifact;
+import org.dive4elements.river.artifacts.FixationArtifact;
+import org.dive4elements.river.artifacts.StaticWQKmsArtifact;
+import org.dive4elements.river.artifacts.WINFOArtifact;
 import org.dive4elements.river.artifacts.access.FixRealizingAccess;
 import org.dive4elements.river.artifacts.access.IsOfficialAccess;
 import org.dive4elements.river.artifacts.access.RangeAccess;
-import org.dive4elements.river.artifacts.FixationArtifact;
-import org.dive4elements.river.artifacts.D4EArtifact;
-import org.dive4elements.river.artifacts.WINFOArtifact;
-import org.dive4elements.river.artifacts.StaticWQKmsArtifact;
 import org.dive4elements.river.artifacts.model.CalculationResult;
+import org.dive4elements.river.artifacts.model.ConstantWQKms;
 import org.dive4elements.river.artifacts.model.Segment;
+import org.dive4elements.river.artifacts.model.WKmsJRDataSource;
 import org.dive4elements.river.artifacts.model.WQCKms;
 import org.dive4elements.river.artifacts.model.WQKms;
+import org.dive4elements.river.artifacts.model.WQKmsResult;
 import org.dive4elements.river.artifacts.model.WstLine;
-import org.dive4elements.river.artifacts.model.WKmsJRDataSource;
-import org.dive4elements.river.artifacts.model.WQKmsResult;
 import org.dive4elements.river.artifacts.resources.Resources;
-
+import org.dive4elements.river.model.Gauge;
+import org.dive4elements.river.utils.Formatter;
 import org.dive4elements.river.utils.RiverUtils;
 import org.dive4elements.river.utils.RiverUtils.WQ_MODE;
-import org.dive4elements.river.utils.Formatter;
+
+import au.com.bytecode.opencsv.CSVWriter;
+import gnu.trove.TDoubleArrayList;
+import net.sf.jasperreports.engine.JRException;
+import net.sf.jasperreports.engine.JasperExportManager;
+import net.sf.jasperreports.engine.JasperFillManager;
+import net.sf.jasperreports.engine.JasperPrint;
 
 /**
  * Generates different output formats (wst, csv, pdf) of data that resulted from
@@ -68,7 +61,7 @@
  */
 public class WaterlevelExporter extends AbstractExporter {
 
-    /** The log used in this exporter.*/
+    /** The log used in this exporter. */
     private static Logger log = Logger.getLogger(WaterlevelExporter.class);
 
     public static final String FACET_WST = "wst";
@@ -76,166 +69,141 @@
     /* This should be the same as in the StaticWQKmsArtifact */
     public static final String STATICWQKMSNAME = "staticwqkms";
 
-    public static final String CSV_KM_HEADER =
-        "export.waterlevel.csv.header.km";
-
-    public static final String CSV_W_HEADER =
-        "export.waterlevel.csv.header.w";
+    public static final String CSV_KM_HEADER = "export.waterlevel.csv.header.km";
 
-    public static final String CSV_Q_HEADER =
-        "export.waterlevel.csv.header.q";
+    public static final String CSV_W_HEADER = "export.waterlevel.csv.header.w";
 
-    /**
-     * @deprecated Use {@link WaterlevelDescriptionBuilder} instead.
-     */
-    @Deprecated
-    public static final String CSV_Q_DESC_HEADER =
-        "export.waterlevel.csv.header.q.desc";
+    public static final String CSV_Q_HEADER = "export.waterlevel.csv.header.q";
 
     /**
      * @deprecated Use {@link WaterlevelDescriptionBuilder} instead.
      */
     @Deprecated
-    public static final String CSV_W_DESC_HEADER =
-        "export.waterlevel.csv.header.w.desc";
-
-    public static final String CSV_LOCATION_HEADER =
-        "export.waterlevel.csv.header.location";
-
-    public static final String CSV_GAUGE_HEADER =
-        "export.waterlevel.csv.header.gauge";
-
-    public static final String CSV_META_RESULT =
-        "export.waterlevel.csv.meta.result";
-
-    public static final String CSV_META_CREATION =
-        "export.waterlevel.csv.meta.creation";
-
-    public static final String CSV_META_CALCULATIONBASE =
-        "export.waterlevel.csv.meta.calculationbase";
-
-    public static final String CSV_META_RIVER =
-        "export.waterlevel.csv.meta.river";
+    public static final String CSV_Q_DESC_HEADER = "export.waterlevel.csv.header.q.desc";
 
-    public static final String CSV_META_RANGE =
-        "export.waterlevel.csv.meta.range";
-
-    public static final String CSV_META_GAUGE =
-        "export.waterlevel.csv.meta.gauge";
-
-    public static final String CSV_META_Q =
-        "export.waterlevel.csv.meta.q";
-
-    public static final String CSV_META_W =
-        "export.waterlevel.csv.meta.w";
-
-    public static final String CSV_NOT_IN_GAUGE_RANGE =
-        "export.waterlevel.csv.not.in.gauge.range";
-
-    public static final Pattern NUMBERS_PATTERN =
-        Pattern.compile("\\D*(\\d++.\\d*)\\D*");
-
-    public static final String DEFAULT_CSV_KM_HEADER       = "Fluss-Km";
-    public static final String DEFAULT_CSV_W_HEADER        = "W [NN + m]";
-    public static final String DEFAULT_CSV_Q_HEADER        = "Q [m\u00b3/s]";
     /**
      * @deprecated Use {@link WaterlevelDescriptionBuilder} instead.
      */
     @Deprecated
-    public static final String DEFAULT_CSV_Q_DESC_HEADER   = "Bezeichnung";
+    public static final String CSV_W_DESC_HEADER = "export.waterlevel.csv.header.w.desc";
+
+    public static final String CSV_LOCATION_HEADER = "export.waterlevel.csv.header.location";
+
+    public static final String CSV_GAUGE_HEADER = "export.waterlevel.csv.header.gauge";
+
+    public static final String CSV_META_RESULT = "export.waterlevel.csv.meta.result";
+
+    public static final String CSV_META_CREATION = "export.waterlevel.csv.meta.creation";
+
+    public static final String CSV_META_CALCULATIONBASE = "export.waterlevel.csv.meta.calculationbase";
+
+    public static final String CSV_META_RIVER = "export.waterlevel.csv.meta.river";
+
+    public static final String CSV_META_RANGE = "export.waterlevel.csv.meta.range";
+
+    public static final String CSV_META_GAUGE = "export.waterlevel.csv.meta.gauge";
+
+    public static final String CSV_META_Q = "export.waterlevel.csv.meta.q";
+
+    public static final String CSV_META_W = "export.waterlevel.csv.meta.w";
+
+    public static final String CSV_NOT_IN_GAUGE_RANGE = "export.waterlevel.csv.not.in.gauge.range";
+
+    public static final Pattern NUMBERS_PATTERN = Pattern.compile("\\D*(\\d++.\\d*)\\D*");
+
+    public static final String DEFAULT_CSV_KM_HEADER = "Fluss-Km";
+    public static final String DEFAULT_CSV_W_HEADER = "W [NN + m]";
+    public static final String DEFAULT_CSV_Q_HEADER = "Q [m\u00b3/s]";
     /**
      * @deprecated Use {@link WaterlevelDescriptionBuilder} instead.
      */
     @Deprecated
-    public static final String DEFAULT_CSV_W_DESC_HEADER   = "W/Pegel [cm]";
+    public static final String DEFAULT_CSV_Q_DESC_HEADER = "Bezeichnung";
+    /**
+     * @deprecated Use {@link WaterlevelDescriptionBuilder} instead.
+     */
+    @Deprecated
+    public static final String DEFAULT_CSV_W_DESC_HEADER = "W/Pegel [cm]";
     public static final String DEFAULT_CSV_LOCATION_HEADER = "Lage";
-    public static final String DEFAULT_CSV_GAUGE_HEADER    = "Bezugspegel";
-    public static final String DEFAULT_CSV_NOT_IN_GAUGE_RANGE =
-        "außerhalb des gewählten Bezugspegels";
+    public static final String DEFAULT_CSV_GAUGE_HEADER = "Bezugspegel";
+    public static final String DEFAULT_CSV_NOT_IN_GAUGE_RANGE = "außerhalb des gewählten Bezugspegels";
 
     public static final String PDF_HEADER_MODE = "export.waterlevel.pdf.mode";
-    public static final String JASPER_FILE     = "export.waterlevel.pdf.file";
+    public static final String JASPER_FILE = "export.waterlevel.pdf.file";
 
-    /** The storage that contains all WQKms objects that are calculated.*/
+    /** The storage that contains all WQKms objects that are calculated. */
     protected List<WQKms[]> data;
 
-    /** The storage that contains official fixings if available.*/
+    /** The storage that contains official fixings if available. */
     protected List<WQKms> officalFixings;
 
     public WaterlevelExporter() {
-        data = new ArrayList<WQKms[]>();
+        this.data = new ArrayList<>();
     }
 
     @Override
-    public void generate()
-    throws IOException
-    {
+    public void generate() throws IOException {
         log.debug("WaterlevelExporter.generate");
 
-        /* Check for official fixings. They should also be included in the
-         * export but only the calculation result is added with addData */
-
-        officalFixings = new ArrayList<WQKms>();
+        /*
+         * Check for official fixings. They should also be included in the
+         * export but only the calculation result is added with addData
+         */
 
-        for (Artifact art: collection.getArtifactsByName(
-                STATICWQKMSNAME, context)
-        ) {
+        this.officalFixings = new ArrayList<>();
+
+        for (final Artifact art : this.collection.getArtifactsByName(STATICWQKMSNAME, this.context)) {
             if (art instanceof StaticWQKmsArtifact) {
-                IsOfficialAccess access =
-                    new IsOfficialAccess((D4EArtifact)art);
-                StaticWQKmsArtifact sart = (StaticWQKmsArtifact) art;
+                final IsOfficialAccess access = new IsOfficialAccess((D4EArtifact) art);
+                final StaticWQKmsArtifact sart = (StaticWQKmsArtifact) art;
                 if (!access.isOfficial()) {
                     continue;
                 }
 
                 /* Check that we add the data only once */
-                WQKms toAdd = sart.getWQKms();
-                String newName = toAdd.getName();
+                final WQKms toAdd = sart.getWQKms();
+                final String newName = toAdd.getName();
 
                 boolean exists = false;
-                for (WQKms wqkm: officalFixings) {
-                    /* The same official fixing could be in two
-                       artifacts/outs so let's deduplicate */
+                for (final WQKms wqkm : this.officalFixings) {
+                    /*
+                     * The same official fixing could be in two
+                     * artifacts/outs so let's deduplicate
+                     */
                     if (wqkm.getName().equals(newName)) {
                         exists = true;
                     }
                 }
                 if (!exists) {
-                    officalFixings.add(toAdd);
+                    this.officalFixings.add(toAdd);
                     log.debug("Adding additional offical fixing: " + newName);
                 }
             }
         }
 
-        if (facet != null && facet.equals(AbstractExporter.FACET_CSV)) {
+        if (this.facet != null && this.facet.equals(AbstractExporter.FACET_CSV)) {
             generateCSV();
-        }
-        else if (facet != null && facet.equals(FACET_WST)) {
+        } else if (this.facet != null && this.facet.equals(FACET_WST)) {
             generateWST();
-        }
-        else if (facet != null && facet.equals(AbstractExporter.FACET_PDF)) {
+        } else if (this.facet != null && this.facet.equals(AbstractExporter.FACET_PDF)) {
             generatePDF();
-        }
-        else {
+        } else {
             throw new IOException("invalid facet for exporter");
         }
     }
 
-
     @Override
     protected void addData(Object d) {
         if (d instanceof CalculationResult) {
-            d = ((CalculationResult)d).getData();
-            if (d instanceof WQKms []) {
-                data.add((WQKms [])d);
-            }
-            else if (d instanceof WQKmsResult) {
-                data.add(((WQKmsResult) d).getWQKms());
+            d = ((CalculationResult) d).getData();
+            if (d instanceof WQKms[]) {
+                this.data.add((WQKms[]) d);
+            } else if (d instanceof WQKmsResult) {
+                this.data.add(((WQKmsResult) d).getWQKms());
             }
         }
     }
 
-
     /**
      * Prepare the column titles of waterlevel exports.
      * Titles in this export include the Q value. If a Q value matches a named
@@ -243,13 +211,15 @@
      * title. This method resets the name of the <i>wqkms</i> object if such
      * named main value fits to the chosen Q.
      *
-     * @param winfo A WINFO Artifact.
-     * @param wqkms A WQKms object that should be prepared.
+     * @param winfo
+     *            A WINFO Artifact.
+     * @param wqkms
+     *            A WQKms object that should be prepared.
      */
-    protected String getColumnTitle(WINFOArtifact winfo, WQKms wqkms) {
+    protected String getColumnTitle(final WINFOArtifact winfo, final WQKms wqkms) {
         log.debug("WaterlevelExporter.getColumnTitle");
 
-        String name = wqkms.getName();
+        final String name = wqkms.getName();
 
         log.debug("Name of WQKms = '" + name + "'");
 
@@ -257,25 +227,25 @@
             return name;
         }
 
-        Matcher m = NUMBERS_PATTERN.matcher(name);
+        final Matcher m = NUMBERS_PATTERN.matcher(name);
 
         if (m.matches()) {
-            String raw = m.group(1);
+            final String raw = m.group(1);
 
             try {
-                double v = Double.valueOf(raw);
+                final double v = Double.valueOf(raw);
 
                 String nmv = RiverUtils.getNamedMainValue(winfo, v);
 
                 if (nmv != null && nmv.length() > 0) {
-                    nmv  = RiverUtils.stripNamedMainValue(nmv);
+                    nmv = RiverUtils.stripNamedMainValue(nmv);
                     nmv += "=" + String.valueOf(v);
                     log.debug("Set named main value '" + nmv + "'");
 
                     return nmv;
                 }
             }
-            catch (NumberFormatException nfe) {
+            catch (final NumberFormatException nfe) {
                 // do nothing here
             }
         }
@@ -283,25 +253,24 @@
         return name;
     }
 
-
     /**
      * @deprecated Use {@link WaterlevelDescriptionBuilder} instead.
      */
     @Deprecated
-    protected String getCSVRowTitle(WINFOArtifact winfo, WQKms wqkms) {
+    protected String getCSVRowTitle(final WINFOArtifact winfo, final WQKms wqkms) {
         log.debug("WaterlevelExporter.prepareNamedValue");
 
-        String name = wqkms.getName();
+        final String name = wqkms.getName();
 
         log.debug("Name of WQKms = '" + name + "'");
 
-        WQ_MODE wqmode = RiverUtils.getWQMode(winfo);
+        final WQ_MODE wqmode = RiverUtils.getWQMode(winfo);
 
         if (wqmode == WQ_MODE.WFREE || wqmode == WQ_MODE.QGAUGE) {
             return localizeWQKms(winfo, wqkms);
         }
 
-        Double v = wqkms.getRawValue();
+        final Double v = wqkms.getRawValue();
 
         String nmv = RiverUtils.getNamedMainValue(winfo, v);
 
@@ -315,42 +284,38 @@
         return localizeWQKms(winfo, wqkms);
     }
 
-
     /**
      * Get a string like 'W=' or 'Q=' with a number following in localized
      * format.
-     * 
+     *
      * @deprecated Use {@link WaterlevelDescriptionBuilder} instead.
      */
     @Deprecated
-    protected String localizeWQKms(WINFOArtifact winfo, WQKms wqkms) {
-        WQ_MODE wqmode   = RiverUtils.getWQMode(winfo);
-        Double  rawValue = wqkms.getRawValue();
+    protected String localizeWQKms(final WINFOArtifact winfo, final WQKms wqkms) {
+        final WQ_MODE wqmode = RiverUtils.getWQMode(winfo);
+        final Double rawValue = wqkms.getRawValue();
 
         if (rawValue == null) {
             return wqkms.getName();
         }
 
-        NumberFormat nf = Formatter.getRawFormatter(context);
+        final NumberFormat nf = Formatter.getRawFormatter(this.context);
 
         if (wqmode == WQ_MODE.WFREE || wqmode == WQ_MODE.WGAUGE) {
             return "W=" + nf.format(rawValue);
-        }
-        else {
+        } else {
             return "Q=" + nf.format(rawValue);
         }
     }
 
-
     @Override
-    protected void writeCSVData(CSVWriter writer) {
+    protected void writeCSVData(final CSVWriter writer) {
         log.info("WaterlevelExporter.writeData");
 
-        WQ_MODE mode    = RiverUtils.getWQMode((D4EArtifact)master);
-        boolean atGauge = mode == WQ_MODE.QGAUGE || mode == WQ_MODE.WGAUGE;
-        boolean isQ     = mode == WQ_MODE.QGAUGE || mode == WQ_MODE.QFREE;
-        RiverUtils.WQ_INPUT input
-            = RiverUtils.getWQInputMode((D4EArtifact)master);
+        final WQ_MODE mode = RiverUtils.getWQMode((D4EArtifact) this.master);
+        final boolean atGauge = mode == WQ_MODE.QGAUGE || mode == WQ_MODE.WGAUGE;
+        final boolean isQ = mode == WQ_MODE.QGAUGE || mode == WQ_MODE.QFREE;
+        final RiverUtils.WQ_INPUT input = RiverUtils.getWQInputMode((D4EArtifact) this.master);
 
         writeCSVMeta(writer);
         writeCSVHeader(writer, atGauge, isQ);
@@ -358,19 +323,21 @@
         Double first = Double.NaN;
         Double last = Double.NaN;
 
-        for (WQKms[] tmp: data) {
-            for (WQKms wqkms: tmp) {
+        for (final WQKms[] tmp : this.data) {
+            for (final WQKms wqkms : tmp) {
                 wQKms2CSV(writer, wqkms, atGauge, isQ);
-                double[] firstLast = wqkms.getFirstLastKM();
+                final double[] firstLast = wqkms.getFirstLastKM();
                 if (first.isNaN()) {
                     /* Initialize */
                     first = firstLast[0];
                     last = firstLast[1];
                 }
                 if (firstLast[0] > firstLast[1]) {
-                    /* Calculating upstream we assert that it is
+                    /*
+                     * Calculating upstream we assert that it is
                      * impossible that the direction changes during this
-                     * loop */
+                     * loop
+                     */
                     first = Math.max(first, firstLast[0]);
                     last = Math.min(last, firstLast[1]);
                 } else if (firstLast[0] < firstLast[1]) {
@@ -382,35 +349,38 @@
             }
         }
         /* Append the official fixing at the bottom */
-        for (WQKms wqkms: officalFixings) {
+        for (final WQKms wqkms : this.officalFixings) {
             wQKms2CSV(writer, filterWQKms(wqkms, first, last), atGauge, isQ);
         }
     }
 
-
-    /** Filter a wqkms object to a distance.
+    /**
+     * Filter a wqkms object to a distance.
      *
      * To handle upstream / downstream and to limit
      * the officialFixings to the calculation distance
      * we create a new wqkms object here and fill it only
      * with the relevant data.
      *
-     * @param wqkms: The WQKms Object to filter
-     * @param first: The fist kilometer of the range
-     * @param last: The last kilometer of the range
+     * @param wqkms:
+     *            The WQKms Object to filter
+     * @param first:
+     *            The fist kilometer of the range
+     * @param last:
+     *            The last kilometer of the range
      *
      * @return A new WQKms with the relevant data sorted by direction
      */
-    private WQKms filterWQKms(WQKms wqkms, Double first, Double last) {
+    private WQKms filterWQKms(final WQKms wqkms, final Double first, final Double last) {
         if (first.isNaN() || last.isNaN()) {
             log.warn("Filtering official fixing without valid first/last.");
             return wqkms;
         }
-        int firstIdx = first > last ? wqkms.size() - 1 : 0;
-        int lastIdx  = first > last ? 0 : wqkms.size() -1;
-        WQKms filtered = new WQKms (wqkms.size());
+        final int firstIdx = first > last ? wqkms.size() - 1 : 0;
+        final int lastIdx = first > last ? 0 : wqkms.size() - 1;
+        final WQKms filtered = new WQKms(wqkms.size());
         filtered.setName(wqkms.getName());
-        double [] dp = new double [3];
+        double[] dp = new double[3];
 
         if (first > last) {
             for (int i = wqkms.size() - 1; i >= 0; i--) {
@@ -430,172 +400,101 @@
         return filtered;
     }
 
-
-    protected void writeCSVMeta(CSVWriter writer) {
+    protected void writeCSVMeta(final CSVWriter writer) {
         log.info("WaterlevelExporter.writeCSVMeta");
 
         // TODO use Access instead of RiverUtils
 
-        CallMeta meta = context.getMeta();
-
-        D4EArtifact flys = (D4EArtifact) master;
-
-        writer.writeNext(new String[] {
-            Resources.getMsg(
-                meta,
-                CSV_META_RESULT,
-                CSV_META_RESULT,
-                new Object[] { RiverUtils.getRivername(flys) })
-        });
+        final CallMeta meta = this.context.getMeta();
 
-        Locale locale = Resources.getLocale(meta);
-        DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, locale);
+        final D4EArtifact flys = (D4EArtifact) this.master;
 
-        writer.writeNext(new String[] {
-            Resources.getMsg(
-                meta,
-                CSV_META_CREATION,
-                CSV_META_CREATION,
-                new Object[] { df.format(new Date()) })
-        });
+        writer.writeNext(new String[] { Resources.getMsg(meta, CSV_META_RESULT, CSV_META_RESULT, new Object[] { RiverUtils.getRivername(flys) }) });
 
-        writer.writeNext(new String[] {
-            Resources.getMsg(
-                meta,
-                CSV_META_CALCULATIONBASE,
-                CSV_META_CALCULATIONBASE,
-                new Object[] { "" }) // TODO what is required at this place?
+        final Locale locale = Resources.getLocale(meta);
+        final DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, locale);
+
+        writer.writeNext(new String[] { Resources.getMsg(meta, CSV_META_CREATION, CSV_META_CREATION, new Object[] { df.format(new Date()) }) });
+
+        writer.writeNext(new String[] { Resources.getMsg(meta, CSV_META_CALCULATIONBASE, CSV_META_CALCULATIONBASE, new Object[] { "" }) // TODO what is required
+                                                                                                                                        // at this place?
         });
 
-        writer.writeNext(new String[] {
-            Resources.getMsg(
-                meta,
-                CSV_META_RIVER,
-                CSV_META_RIVER,
-                new Object[] { RiverUtils.getRivername(flys) })
-        });
+        writer.writeNext(new String[] { Resources.getMsg(meta, CSV_META_RIVER, CSV_META_RIVER, new Object[] { RiverUtils.getRivername(flys) }) });
 
-        RangeAccess rangeAccess = new RangeAccess(flys);
-        double[] kms = rangeAccess.getKmRange();
-        writer.writeNext(new String[] {
-            Resources.getMsg(
-                meta,
-                CSV_META_RANGE,
-                CSV_META_RANGE,
-                new Object[] { kms[0], kms[kms.length-1] })
-        });
+        final RangeAccess rangeAccess = new RangeAccess(flys);
+        final double[] kms = rangeAccess.getKmRange();
+        writer.writeNext(new String[] { Resources.getMsg(meta, CSV_META_RANGE, CSV_META_RANGE, new Object[] { kms[0], kms[kms.length - 1] }) });
 
-        writer.writeNext(new String[] {
-            Resources.getMsg(
-                meta,
-                CSV_META_GAUGE,
-                CSV_META_GAUGE,
-                new Object[] { RiverUtils.getGaugename(flys) })
-        });
+        writer.writeNext(new String[] { Resources.getMsg(meta, CSV_META_GAUGE, CSV_META_GAUGE, new Object[] { RiverUtils.getGaugename(flys) }) });
 
         // TODO: code extracted into WaterlevelDescriptionBuilder, should be used instead.
-        RiverUtils.WQ_MODE wq = RiverUtils.getWQMode(flys);
+        final RiverUtils.WQ_MODE wq = RiverUtils.getWQMode(flys);
         if (wq == RiverUtils.WQ_MODE.QFREE || wq == RiverUtils.WQ_MODE.QGAUGE) {
-            double[] qs  = RiverUtils.getQs(flys);
-            RiverUtils.WQ_INPUT input = RiverUtils.getWQInputMode(flys);
+            final double[] qs = RiverUtils.getQs(flys);
+            final RiverUtils.WQ_INPUT input = RiverUtils.getWQInputMode(flys);
 
             String data = "";
 
-            if ((input == RiverUtils.WQ_INPUT.ADAPTED ||
-                input == RiverUtils.WQ_INPUT.RANGE) &&
-                qs != null && qs.length > 0)
-            {
+            if ((input == RiverUtils.WQ_INPUT.ADAPTED || input == RiverUtils.WQ_INPUT.RANGE) && qs != null && qs.length > 0) {
                 data = String.valueOf(qs[0]);
-                data += " - " + String.valueOf(qs[qs.length-1]);
-            }
-            else if (input == RiverUtils.WQ_INPUT.SINGLE && qs != null){
+                data += " - " + String.valueOf(qs[qs.length - 1]);
+            } else if (input == RiverUtils.WQ_INPUT.SINGLE && qs != null) {
                 data = String.valueOf(qs[0]);
                 for (int i = 1; i < qs.length; i++) {
                     data += ", " + String.valueOf(qs[i]);
                 }
-            }
-            else {
+            } else {
                 log.warn("Could not determine Q range!");
             }
 
-            writer.writeNext(new String[] {
-                Resources.getMsg(
-                    meta,
-                    CSV_META_Q,
-                    CSV_META_Q,
-                    new Object[] {data})
-            });
-        }
-        else {
-            double[] ws = RiverUtils.getWs(flys);
+            writer.writeNext(new String[] { Resources.getMsg(meta, CSV_META_Q, CSV_META_Q, new Object[] { data }) });
+        } else {
+            final double[] ws = RiverUtils.getWs(flys);
 
             String lower = "";
             String upper = "";
 
             if (ws != null && ws.length > 0) {
                 lower = String.valueOf(ws[0]);
-                upper = String.valueOf(ws[ws.length-1]);
-            }
-            else {
+                upper = String.valueOf(ws[ws.length - 1]);
+            } else {
                 log.warn("Could not determine W range!");
             }
 
-            writer.writeNext(new String[] {
-                Resources.getMsg(
-                    meta,
-                    CSV_META_W,
-                    CSV_META_W,
-                    new Object[] { lower, upper })
-            });
+            writer.writeNext(new String[] { Resources.getMsg(meta, CSV_META_W, CSV_META_W, new Object[] { lower, upper }) });
         }
 
         writer.writeNext(new String[] { "" });
     }
 
-
     /**
      * Write the header, with different headings depending on whether at a
      * gauge or at a location.
      */
-    protected void writeCSVHeader(
-        CSVWriter writer,
-        boolean   atGauge,
-        boolean   isQ
-    ) {
+    protected void writeCSVHeader(final CSVWriter writer, final boolean atGauge, final boolean isQ) {
         log.info("WaterlevelExporter.writeCSVHeader");
 
-        String unit = RiverUtils.getRiver(
-            (D4EArtifact) master).getWstUnit().getName();
+        final String unit = RiverUtils.getRiver((D4EArtifact) this.master).getWstUnit().getName();
 
         if (atGauge) {
-            writer.writeNext(new String[] {
-                msg(CSV_KM_HEADER, DEFAULT_CSV_KM_HEADER),
-                msg(CSV_W_HEADER, DEFAULT_CSV_W_HEADER, new Object[] { unit }),
-                msg(CSV_Q_HEADER, DEFAULT_CSV_Q_HEADER),
-                
-                // FIXME: use WaterlevelDescriptionBuilder instead and also remove all this duplicate code.
-                (isQ
-                    ? msg(CSV_Q_DESC_HEADER, DEFAULT_CSV_Q_DESC_HEADER)
-                    : msg(CSV_W_DESC_HEADER, DEFAULT_CSV_W_DESC_HEADER)),
-                msg(CSV_LOCATION_HEADER, DEFAULT_CSV_LOCATION_HEADER),
-                msg(CSV_GAUGE_HEADER, DEFAULT_CSV_GAUGE_HEADER)
-            });
-        }
-        else {
-            writer.writeNext(new String[] {
-                msg(CSV_KM_HEADER, DEFAULT_CSV_KM_HEADER),
+            writer.writeNext(new String[] { msg(CSV_KM_HEADER, DEFAULT_CSV_KM_HEADER), msg(CSV_W_HEADER, DEFAULT_CSV_W_HEADER, new Object[] { unit }),
+                    msg(CSV_Q_HEADER, DEFAULT_CSV_Q_HEADER),
+
+                    // FIXME: use WaterlevelDescriptionBuilder instead and also remove all this duplicate code.
+                    (isQ ? msg(CSV_Q_DESC_HEADER, DEFAULT_CSV_Q_DESC_HEADER) : msg(CSV_W_DESC_HEADER, DEFAULT_CSV_W_DESC_HEADER)),
+                    msg(CSV_LOCATION_HEADER, DEFAULT_CSV_LOCATION_HEADER), msg(CSV_GAUGE_HEADER, DEFAULT_CSV_GAUGE_HEADER) });
+        } else {
+            writer.writeNext(new String[] { msg(CSV_KM_HEADER, DEFAULT_CSV_KM_HEADER),
                     // TODO flys/issue1128 (unit per river)
-                msg(CSV_W_HEADER, DEFAULT_CSV_W_HEADER, new Object[] { unit }),
-                msg(CSV_Q_HEADER, DEFAULT_CSV_Q_HEADER),
-                msg(CSV_LOCATION_HEADER, DEFAULT_CSV_LOCATION_HEADER)
-            });
+                    msg(CSV_W_HEADER, DEFAULT_CSV_W_HEADER, new Object[] { unit }), msg(CSV_Q_HEADER, DEFAULT_CSV_Q_HEADER),
+                    msg(CSV_LOCATION_HEADER, DEFAULT_CSV_LOCATION_HEADER) });
         }
     }
 
-
     /** Linearly search for gauge which is valid at km. */
-    private static Gauge findGauge(double km, List<Gauge> gauges) {
-        for (Gauge gauge: gauges) {
+    private static Gauge findGauge(final double km, final List<Gauge> gauges) {
+        for (final Gauge gauge : gauges) {
             if (gauge.getRange().contains(km)) {
                 return gauge;
             }
@@ -603,8 +502,8 @@
         return null;
     }
 
-    private static Segment findSegment(double km, List<Segment> segments) {
-        for (Segment segment: segments) {
+    private static Segment findSegment(final double km, final List<Segment> segments) {
+        for (final Segment segment : segments) {
             if (segment.inside(km)) {
                 return segment;
             }
@@ -612,70 +511,55 @@
         return null;
     }
 
-
-    private void writeRow4(CSVWriter writer, double wqkm[], D4EArtifact flys) {
-        NumberFormat kmf = getKmFormatter();
-        NumberFormat wf  = getWFormatter();
-        NumberFormat qf  = getQFormatter();
-        writer.writeNext(new String[] {
-            kmf.format(wqkm[2]),
-            wf.format(wqkm[0]),
-            qf.format(RiverUtils.roundQ(wqkm[1])),
-            RiverUtils.getLocationDescription(flys, wqkm[2])
-        });
+    private void writeRow4(final CSVWriter writer, final double wqkm[], final D4EArtifact flys) {
+        final NumberFormat kmf = getKmFormatter();
+        final NumberFormat wf = getWFormatter();
+        final NumberFormat qf = getQFormatter();
+        writer.writeNext(new String[] { kmf.format(wqkm[2]), wf.format(wqkm[0]), qf.format(RiverUtils.roundQ(wqkm[1])),
+                RiverUtils.getLocationDescription(flys, wqkm[2]) });
     }
 
     /** Write an csv-row at gauge location. */
-    private void writeRow6(CSVWriter writer, double wqkm[], String wOrQDesc,
-        D4EArtifact flys, String gaugeName) {
-        NumberFormat kmf = getKmFormatter();
-        NumberFormat wf  = getWFormatter();
-        NumberFormat qf  = getQFormatter();
+    private void writeRow6(final CSVWriter writer, final double wqkm[], final String wOrQDesc, final D4EArtifact flys, final String gaugeName) {
+        final NumberFormat kmf = getKmFormatter();
+        final NumberFormat wf = getWFormatter();
+        final NumberFormat qf = getQFormatter();
 
-        writer.writeNext(new String[] {
-            kmf.format(wqkm[2]),
-            wf.format(wqkm[0]),
-            qf.format(RiverUtils.roundQ(wqkm[1])),
-            wOrQDesc,
-            RiverUtils.getLocationDescription(flys, wqkm[2]),
-            gaugeName
-        });
+        writer.writeNext(new String[] { kmf.format(wqkm[2]), wf.format(wqkm[0]), qf.format(RiverUtils.roundQ(wqkm[1])), wOrQDesc,
+                RiverUtils.getLocationDescription(flys, wqkm[2]), gaugeName });
     }
 
     /**
      * @deprecated Use {@link WaterlevelDescriptionBuilder} instead.
      */
     @Deprecated
-    private String getDesc(WQKms wqkms, boolean isQ)
-    {
-        D4EArtifact flys = (D4EArtifact) master;
+    private String getDesc(final WQKms wqkms, final boolean isQ) {
+        final D4EArtifact flys = (D4EArtifact) this.master;
         String colDesc = "";
 
         if (flys instanceof WINFOArtifact && isQ) {
-            colDesc = getCSVRowTitle((WINFOArtifact)flys, wqkms);
-        }
-        else if (!isQ) {
-            Double value = RiverUtils.getValueFromWQ(wqkms);
-            colDesc = (value != null) ?
-                Formatter.getWaterlevelW(context).format(value) : null;
+            colDesc = getCSVRowTitle((WINFOArtifact) flys, wqkms);
+        } else if (!isQ) {
+            final Double value = RiverUtils.getValueFromWQ(wqkms);
+            colDesc = (value != null) ? Formatter.getWaterlevelW(this.context).format(value) : null;
         }
 
         if (flys instanceof WINFOArtifact) {
             if (wqkms != null && wqkms.getRawValue() != null) {
-                WINFOArtifact winfo = (WINFOArtifact) flys;
-                colDesc = RiverUtils.getNamedMainValue(
-                    winfo, wqkms.getRawValue());
+                final WINFOArtifact winfo = (WINFOArtifact) flys;
+                colDesc = RiverUtils.getNamedMainValue(winfo, wqkms.getRawValue());
                 // For 'W am Pegel' s
                 if (colDesc == null) {
-                    Double value = RiverUtils.getValueFromWQ(wqkms);
-                    colDesc = (value != null) ?
-                        Formatter.getWaterlevelW(context).format(value) : null;
+                    final Double value = RiverUtils.getValueFromWQ(wqkms);
+                    colDesc = (value != null) ? Formatter.getWaterlevelW(this.context).format(value) : null;
                 }
             }
         }
         if (colDesc != null) {
-            /* Quick hack. Can be removed when database strings are
-             * adapted or left in here as it should never be harmful. */
+            /*
+             * Quick hack. Can be removed when database strings are
+             * adapted or left in here as it should never be harmful.
+             */
             colDesc = colDesc.replace("Amtl.Festlegung_", "Amtl. ");
         }
 
@@ -685,12 +569,7 @@
     /**
      * Write "rows" of csv data from wqkms with writer.
      */
-    protected void wQKms2CSV(
-        CSVWriter writer,
-        WQKms     wqkms,
-        boolean   atGauge,
-        boolean   isQ
-    ) {
+    protected void wQKms2CSV(final CSVWriter writer, final WQKms wqkms, final boolean atGauge, final boolean isQ) {
         log.debug("WaterlevelExporter.wQKms2CSV");
 
         // Skip constant data.
@@ -698,38 +577,35 @@
             return;
         }
 
-        NumberFormat kmf = getKmFormatter();
-        NumberFormat wf  = getWFormatter();
-        NumberFormat qf  = getQFormatter();
+        final NumberFormat kmf = getKmFormatter();
+        final NumberFormat wf = getWFormatter();
+        final NumberFormat qf = getQFormatter();
 
-        int      size   = wqkms.size();
+        final int size = wqkms.size();
         double[] result = new double[3];
 
-        D4EArtifact flys        = (D4EArtifact) master;
-        RangeAccess rangeAccess = new RangeAccess(flys);
-
-        List<Gauge>  gauges     = RiverUtils.getGauges(flys);
+        final D4EArtifact flys = (D4EArtifact) this.master;
+        final RangeAccess rangeAccess = new RangeAccess(flys);
 
-        Gauge gauge = rangeAccess.getRiver().determineRefGauge(
-            rangeAccess.getKmRange(), rangeAccess.isRange());
+        final List<Gauge> gauges = RiverUtils.getGauges(flys);
 
-        String       gaugeName  = gauge.getName();
-        String       desc       = "";
-        String       notinrange = msg(
-            CSV_NOT_IN_GAUGE_RANGE,
-            DEFAULT_CSV_NOT_IN_GAUGE_RANGE);
+        final Gauge gauge = rangeAccess.getRiver().determineRefGauge(rangeAccess.getKmRange(), rangeAccess.isRange());
+
+        final String gaugeName = gauge.getName();
+        String desc = "";
+        final String notinrange = msg(CSV_NOT_IN_GAUGE_RANGE, DEFAULT_CSV_NOT_IN_GAUGE_RANGE);
         List<Segment> segments = null;
         boolean isFixRealize = false;
 
-        double a = gauge.getRange().getA().doubleValue();
-        double b = gauge.getRange().getB().doubleValue();
-        long startTime = System.currentTimeMillis();
+        final double a = gauge.getRange().getA().doubleValue();
+        final double b = gauge.getRange().getB().doubleValue();
+        final long startTime = System.currentTimeMillis();
 
         desc = getDesc(wqkms, isQ);
 
         if (flys instanceof FixationArtifact) {
             // Get W/Q input per gauge for this case.
-            FixRealizingAccess fixAccess = new FixRealizingAccess(flys);
+            final FixRealizingAccess fixAccess = new FixRealizingAccess(flys);
             segments = fixAccess.getSegments();
             if (segments != null && !segments.isEmpty()) {
                 isFixRealize = true;
@@ -741,20 +617,16 @@
             // Kms tend to be close together so caching the last sector
             // is a good time saving heuristic.
             Segment lastSegment = null;
-            Gauge   lastGauge   = null;
+            Gauge lastGauge = null;
 
-            NumberFormat nf =
-                Formatter.getFormatter(context.getMeta(), 0, 0);
+            final NumberFormat nf = Formatter.getFormatter(this.context.getMeta(), 0, 0);
 
             for (int i = 0; i < size; ++i) {
                 result = wqkms.get(i, result);
-                double km = result[2];
+                final double km = result[2];
 
                 if (segments != null) {
-                    Segment found = lastSegment != null
-                                    && lastSegment.inside(km)
-                        ? lastSegment
-                        : findSegment(km, segments);
+                    final Segment found = lastSegment != null && lastSegment.inside(km) ? lastSegment : findSegment(km, segments);
 
                     if (found != null) {
                         desc = nf.format(found.getValues()[0]);
@@ -764,67 +636,55 @@
 
                 String gaugeN;
                 if (isFixRealize) {
-                    Gauge found = lastGauge != null
-                                  && lastGauge.getRange().contains(km)
-                        ? lastGauge
-                        : findGauge(km, gauges);
+                    final Gauge found = lastGauge != null && lastGauge.getRange().contains(km) ? lastGauge : findGauge(km, gauges);
 
                     gaugeN = found != null ? found.getName() : notinrange;
                     lastGauge = found;
-                }
-                else {
+                } else {
                     // TODO issue1114: Take correct gauge
-                    gaugeN = km >= a && km <= b
-                        ? gaugeName
-                        : notinrange;
+                    gaugeN = km >= a && km <= b ? gaugeName : notinrange;
                 }
                 writeRow6(writer, result, desc, flys, gaugeN);
             }
-        }
-        else { // Not at gauge.
+        } else { // Not at gauge.
             for (int i = 0; i < size; ++i) {
                 result = wqkms.get(i, result);
                 writeRow4(writer, result, flys);
             }
         }
 
-        long stopTime = System.currentTimeMillis();
+        final long stopTime = System.currentTimeMillis();
 
         if (log.isDebugEnabled()) {
-            log.debug("Writing CSV took " +
-                (float)(stopTime-startTime)/1000f + " secs.");
+            log.debug("Writing CSV took " + (stopTime - startTime) / 1000f + " secs.");
         }
     }
 
-
     /**
      * Generates the output in WST format.
      */
-    protected void generateWST()
-    throws    IOException
-    {
+    protected void generateWST() throws IOException {
         log.info("WaterlevelExporter.generateWST");
 
-        int cols = data.get(0).length + officalFixings.size();
-        WstWriter writer = new WstWriter(cols);
+        final int cols = this.data.get(0).length + this.officalFixings.size();
+        final WstWriter writer = new WstWriter(cols);
 
         writeWSTData(writer);
 
-        writer.write(out);
+        writer.write(this.out);
     }
 
-
-    protected void writeWSTData(WstWriter writer) {
+    protected void writeWSTData(final WstWriter writer) {
         log.debug("WaterlevelExporter.writeWSTData");
 
         double[] result = new double[4];
 
-        for (WQKms[] tmp: data) {
-            for (WQKms wqkms: tmp) {
+        for (final WQKms[] tmp : this.data) {
+            for (final WQKms wqkms : tmp) {
                 if (wqkms instanceof ConstantWQKms) {
                     continue;
                 }
-                int size = wqkms != null ? wqkms.size() : 0;
+                final int size = wqkms != null ? wqkms.size() : 0;
 
                 addWSTColumn(writer, wqkms);
 
@@ -850,21 +710,21 @@
         //
         // There was some confusion how to implement this. see flys/issue1620
         // for details.
-        for (WQKms wqkms: officalFixings) {
+        for (final WQKms wqkms : this.officalFixings) {
             // To add some spaces here or to add them in the writer,..
             writer.addColumn(getDesc(wqkms, true));
 
             // Get all lines from the calculation
-            Map <Double, WstLine> calcLines = writer.getLines();
+            final Map<Double, WstLine> calcLines = writer.getLines();
 
             // All KM values where we have a point for
-            TDoubleArrayList officialKms = wqkms.allKms();
+            final TDoubleArrayList officialKms = wqkms.allKms();
 
-            for (Map.Entry<Double, WstLine> entry : calcLines.entrySet()) {
+            for (final Map.Entry<Double, WstLine> entry : calcLines.entrySet()) {
                 // Bad for perfomance but the user can wait a bit for WST
                 // so lets not spend time optimizing too much,.. *hides*
-                double km = entry.getKey().doubleValue();
-                int idx = officialKms.indexOf(km);
+                final double km = entry.getKey().doubleValue();
+                final int idx = officialKms.indexOf(km);
                 if (idx != -1) {
                     entry.getValue().add(wqkms.getW(idx), wqkms.getQ(idx));
                 }
@@ -872,7 +732,6 @@
         }
     }
 
-
     /**
      * Register a new column at <i>writer</i>. The name /
      * title of the column depends on the Q or W value of <i>wqkms</i>. If a Q
@@ -880,72 +739,68 @@
      * the named main value. Otherwise, the name returned by
      * <i>WQKms.getName()</i> is set.
      *
-     * @param writer The WstWriter.
-     * @param wqkms The new WST column.
+     * @param writer
+     *            The WstWriter.
+     * @param wqkms
+     *            The new WST column.
      */
-    protected void addWSTColumn(WstWriter writer, WQKms wqkms) {
+    protected void addWSTColumn(final WstWriter writer, final WQKms wqkms) {
         if (wqkms instanceof ConstantWQKms) {
             return;
         }
-        if (master instanceof WINFOArtifact) {
-            writer.addColumn(getColumnTitle((WINFOArtifact) master, wqkms));
-        }
-        else {
+        if (this.master instanceof WINFOArtifact) {
+            writer.addColumn(getColumnTitle((WINFOArtifact) this.master, wqkms));
+        } else {
             writer.addColumn(wqkms.getName());
         }
     }
 
-
     @Override
-    protected void writePDF(OutputStream out) {
+    protected void writePDF(final OutputStream out) {
         log.debug("write PDF");
-        WKmsJRDataSource source = createJRData();
+        final WKmsJRDataSource source = createJRData();
 
-        String jasperFile = Resources.getMsg(
-                                context.getMeta(),
-                                JASPER_FILE,
-                                "/jasper/waterlevel_en.jasper");
-        String confPath = Config.getConfigDirectory().toString();
+        final String jasperFile = // "/jasper/waterlevel_en.jasper";
+                Resources.getMsg(this.context.getMeta(), JASPER_FILE, "/jasper/waterlevel_en.jasper");
+        final String confPath = Config.getConfigDirectory().toString();
 
-
-        Map parameters = new HashMap();
+        final Map parameters = new HashMap();
         parameters.put("ReportTitle", "Exported Data");
         try {
-            JasperPrint print = JasperFillManager.fillReport(
-                confPath + jasperFile,
-                parameters,
-                source);
+            final JasperPrint print = JasperFillManager.fillReport(confPath + jasperFile, parameters, source);
             JasperExportManager.exportReportToPdfStream(print, out);
         }
-        catch(JRException je) {
+        catch (final JRException je) {
             log.warn("Error generating PDF Report!", je);
         }
     }
 
     protected WKmsJRDataSource createJRData() {
-        WKmsJRDataSource source = new WKmsJRDataSource();
+        final WKmsJRDataSource source = new WKmsJRDataSource();
 
-        WQ_MODE mode    = RiverUtils.getWQMode((D4EArtifact)master);
-        boolean atGauge = mode == WQ_MODE.QGAUGE || mode == WQ_MODE.WGAUGE;
-        boolean isQ     = mode == WQ_MODE.QGAUGE || mode == WQ_MODE.QFREE;
+        final WQ_MODE mode = RiverUtils.getWQMode((D4EArtifact) this.master);
+        final boolean atGauge = mode == WQ_MODE.QGAUGE || mode == WQ_MODE.WGAUGE;
+        final boolean isQ = mode == WQ_MODE.QGAUGE || mode == WQ_MODE.QFREE;
 
         Double first = Double.NaN;
         Double last = Double.NaN;
 
         addMetaData(source);
-        for (WQKms[] tmp: data) {
-            for (WQKms wqkms: tmp) {
+        for (final WQKms[] tmp : this.data) {
+            for (final WQKms wqkms : tmp) {
                 addWKmsData(wqkms, atGauge, isQ, source);
-                double[] firstLast = wqkms.getFirstLastKM();
+                final double[] firstLast = wqkms.getFirstLastKM();
                 if (first.isNaN()) {
                     /* Initialize */
                     first = firstLast[0];
                     last = firstLast[1];
                 }
                 if (firstLast[0] > firstLast[1]) {
-                    /* Calculating upstream we assert that it is
+                    /*
+                     * Calculating upstream we assert that it is
                      * impossible that the direction changes during this
-                     * loop */
+                     * loop
+                     */
                     first = Math.max(first, firstLast[0]);
                     last = Math.min(last, firstLast[1]);
                 } else if (firstLast[0] < firstLast[1]) {
@@ -958,44 +813,35 @@
         }
 
         /* Append the official fixing at the bottom */
-        for (WQKms wqkms: officalFixings) {
+        for (final WQKms wqkms : this.officalFixings) {
             addWKmsData(filterWQKms(wqkms, first, last), atGauge, isQ, source);
         }
         return source;
     }
 
-    protected void addMetaData(WKmsJRDataSource source) {
-        CallMeta meta = context.getMeta();
-
-        D4EArtifact flys = (D4EArtifact) master;
+    protected void addMetaData(final WKmsJRDataSource source) {
+        final CallMeta meta = this.context.getMeta();
 
-        source.addMetaData ("river", RiverUtils.getRivername(flys));
+        final D4EArtifact flys = (D4EArtifact) this.master;
 
-        Locale locale = Resources.getLocale(meta);
-        DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, locale);
-        NumberFormat kmf = getKmFormatter();
+        source.addMetaData("river", RiverUtils.getRivername(flys));
+
+        final Locale locale = Resources.getLocale(meta);
+        final DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, locale);
+        final NumberFormat kmf = getKmFormatter();
 
         source.addMetaData("date", df.format(new Date()));
 
-        RangeAccess rangeAccess = new RangeAccess(flys);
-        double[] kms = rangeAccess.getKmRange();
-        source.addMetaData("range",
-                kmf.format(kms[0]) + " - " + kmf.format(kms[kms.length-1]));
+        final RangeAccess rangeAccess = new RangeAccess(flys);
+        final double[] kms = rangeAccess.getKmRange();
+        source.addMetaData("range", kmf.format(kms[0]) + " - " + kmf.format(kms[kms.length - 1]));
 
         source.addMetaData("gauge", RiverUtils.getGaugename(flys));
 
-        source.addMetaData("calculation", Resources.getMsg(
-                                            locale,
-                                            PDF_HEADER_MODE,
-                                            "Waterlevel"));
+        source.addMetaData("calculation", Resources.getMsg(locale, PDF_HEADER_MODE, "Waterlevel"));
     }
 
-    protected void addWKmsData(
-        WQKms wqkms,
-        boolean atGauge,
-        boolean isQ,
-        WKmsJRDataSource source)
-    {
+    protected void addWKmsData(final WQKms wqkms, final boolean atGauge, final boolean isQ, final WKmsJRDataSource source) {
         log.debug("WaterlevelExporter.addWKmsData");
 
         // Skip constant data.
@@ -1003,65 +849,44 @@
             return;
         }
 
-        NumberFormat kmf = getKmFormatter();
-        NumberFormat wf  = getWFormatter();
-        NumberFormat qf  = getQFormatter();
+        final NumberFormat kmf = getKmFormatter();
+        final NumberFormat wf = getWFormatter();
+        final NumberFormat qf = getQFormatter();
 
-        int      size   = wqkms.size();
+        final int size = wqkms.size();
         double[] result = new double[3];
 
-        D4EArtifact flys        = (D4EArtifact) master;
-        RangeAccess rangeAccess = new RangeAccess(flys);
-
-        Gauge gauge = rangeAccess.getRiver().determineRefGauge(
-            rangeAccess.getKmRange(), rangeAccess.isRange());
+        final D4EArtifact flys = (D4EArtifact) this.master;
+        final RangeAccess rangeAccess = new RangeAccess(flys);
 
-        String       gaugeName  = gauge.getName();
-        String       desc       = "";
-        String       notinrange = msg(
-            CSV_NOT_IN_GAUGE_RANGE,
-            DEFAULT_CSV_NOT_IN_GAUGE_RANGE);
+        final Gauge gauge = rangeAccess.getRiver().determineRefGauge(rangeAccess.getKmRange(), rangeAccess.isRange());
 
-        double a = gauge.getRange().getA().doubleValue();
-        double b = gauge.getRange().getB().doubleValue();
+        final String gaugeName = gauge.getName();
+        String desc = "";
+        final String notinrange = msg(CSV_NOT_IN_GAUGE_RANGE, DEFAULT_CSV_NOT_IN_GAUGE_RANGE);
+
+        final double a = gauge.getRange().getA().doubleValue();
+        final double b = gauge.getRange().getB().doubleValue();
 
         desc = getDesc(wqkms, isQ);
-        long startTime = System.currentTimeMillis();
+        final long startTime = System.currentTimeMillis();
 
-        for (int i = 0; i < size; i ++) {
+        for (int i = 0; i < size; i++) {
             result = wqkms.get(i, result);
 
             if (atGauge) {
-                source.addData(new String[] {
-                    kmf.format(result[2]),
-                    wf.format(result[0]),
-                    qf.format(RiverUtils.roundQ(result[1])),
-                    desc,
-                    RiverUtils.getLocationDescription(flys, result[2]),
-                    result[2] >= a && result[2] <= b
-                        ? gaugeName
-                        : notinrange
-                });
-            }
-            else {
-                source.addData(new String[] {
-                    kmf.format(result[2]),
-                    wf.format(result[0]),
-                    qf.format(RiverUtils.roundQ(result[1])),
-                    desc,
-                    RiverUtils.getLocationDescription(flys, result[2]),
-                    result[2] >= a && result[2] <= b
-                        ? gaugeName
-                        : notinrange
-                });
+                source.addData(new String[] { kmf.format(result[2]), wf.format(result[0]), qf.format(RiverUtils.roundQ(result[1])), desc,
+                        RiverUtils.getLocationDescription(flys, result[2]), result[2] >= a && result[2] <= b ? gaugeName : notinrange });
+            } else {
+                source.addData(new String[] { kmf.format(result[2]), wf.format(result[0]), qf.format(RiverUtils.roundQ(result[1])), desc,
+                        RiverUtils.getLocationDescription(flys, result[2]), result[2] >= a && result[2] <= b ? gaugeName : notinrange });
             }
         }
 
-        long stopTime = System.currentTimeMillis();
+        final long stopTime = System.currentTimeMillis();
 
         if (log.isDebugEnabled()) {
-            log.debug("Writing PDF data took " +
-                (float)(stopTime-startTime)/1000f + " secs.");
+            log.debug("Writing PDF data took " + (stopTime - startTime) / 1000f + " secs.");
         }
     }
 }
--- a/artifacts/src/main/java/org/dive4elements/river/exports/fixings/DeltaWtExporter.java	Fri May 25 09:10:19 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/exports/fixings/DeltaWtExporter.java	Fri May 25 10:44:24 2018 +0200
@@ -8,63 +8,48 @@
 
 package org.dive4elements.river.exports.fixings;
 
-import au.com.bytecode.opencsv.CSVWriter;
-
-import org.dive4elements.artifacts.CallMeta;
-
-import org.dive4elements.river.artifacts.model.CalculationResult;
-
-import org.dive4elements.river.artifacts.model.fixings.AnalysisPeriod;
-import org.dive4elements.river.artifacts.model.fixings.FixAnalysisResult;
-import org.dive4elements.river.artifacts.model.fixings.QWD;
-
-import org.dive4elements.river.artifacts.resources.Resources;
-
-import org.dive4elements.river.exports.AbstractExporter;
-
-import org.dive4elements.river.utils.Formatter;
-import org.dive4elements.river.utils.KMIndex;
-
 import java.io.IOException;
 import java.io.OutputStream;
-
 import java.text.DateFormat;
 import java.text.MessageFormat;
 import java.text.NumberFormat;
-
 import java.util.ArrayList;
 import java.util.List;
 import java.util.TreeMap;
 
 import org.apache.log4j.Logger;
+import org.dive4elements.artifacts.CallMeta;
+import org.dive4elements.river.artifacts.D4EArtifact;
+import org.dive4elements.river.artifacts.access.RiverAccess;
+import org.dive4elements.river.artifacts.model.CalculationResult;
+import org.dive4elements.river.artifacts.model.fixings.AnalysisPeriod;
+import org.dive4elements.river.artifacts.model.fixings.FixAnalysisResult;
+import org.dive4elements.river.artifacts.model.fixings.QWD;
+import org.dive4elements.river.artifacts.resources.Resources;
+import org.dive4elements.river.exports.AbstractExporter;
+import org.dive4elements.river.utils.Formatter;
+import org.dive4elements.river.utils.KMIndex;
+
+import au.com.bytecode.opencsv.CSVWriter;
 
 /** Exports fixation analysis deltaw(t) computation results to csv. */
-public class DeltaWtExporter
-extends      AbstractExporter
-{
+public class DeltaWtExporter extends AbstractExporter {
     /** Private log. */
     private static Logger log = Logger.getLogger(DeltaWtExporter.class);
 
-    public static final String CSV_KM_HEADER =
-        "export.fixings.deltawt.csv.header.km";
-
-    public static final String CSV_DELTA_W_HEADER =
-        "export.fixings.deltawt.csv.header.deltaw";
-
-    public static final String CSV_Q_HEADER =
-        "export.fixings.deltawt.csv.header.q";
+    public static final String CSV_KM_HEADER = "export.fixings.deltawt.csv.header.km";
 
-    public static final String CSV_W_HEADER =
-        "export.fixings.deltawt.csv.header.w";
+    public static final String CSV_DELTA_W_HEADER = "export.fixings.deltawt.csv.header.deltaw";
 
-    public static final String CSV_TRANGE_HEADER =
-        "export.fixings.deltawt.csv.header.time.range";
+    public static final String CSV_Q_HEADER = "export.fixings.deltawt.csv.header.q";
 
-    public static final String CSV_T_HEADER =
-        "export.fixings.deltawt.csv.header.t";
+    public static final String CSV_W_HEADER = "export.fixings.deltawt.csv.header.w";
 
-    public static final String CSV_T_FORMAT =
-        "export.fixings.deltawt.csv.t.format";
+    public static final String CSV_TRANGE_HEADER = "export.fixings.deltawt.csv.header.time.range";
+
+    public static final String CSV_T_HEADER = "export.fixings.deltawt.csv.header.t";
+
+    public static final String CSV_T_FORMAT = "export.fixings.deltawt.csv.t.format";
 
     public static final String DEFAULT_CSV_KM_HEADER = "km";
 
@@ -76,143 +61,122 @@
 
     public static final String DEFAULT_CSV_T_HEADER = "Datum";
 
-    public static final String DEFAULT_CSV_TRANGE_DESC_HEADER =
-        "Status";
-
-    public static final String CSV_REFERENCE =
-        "export.fixings.deltawt.csv.reference";
-
-    public static final String CSV_ANALYSIS =
-        "export.fixings.deltawt.csv.analysis";
+    public static final String DEFAULT_CSV_TRANGE_DESC_HEADER = "Status";
 
-    public static final String DEFAULT_CSV_REFERENCE =
-        "B";
+    public static final String CSV_REFERENCE = "export.fixings.deltawt.csv.reference";
 
-    public static final String DEFAULT_CSV_ANALYSIS =
-        "A{0,number,integer}";
+    public static final String CSV_ANALYSIS = "export.fixings.deltawt.csv.analysis";
 
-    public static final String DEFAULT_CSV_T_FORMAT =
-        "dd.MM.yyyy";
+    public static final String DEFAULT_CSV_REFERENCE = "B";
 
-    protected List<KMIndex<AnalysisPeriod []>> analysisPeriods;
+    public static final String DEFAULT_CSV_ANALYSIS = "A{0,number,integer}";
+
+    public static final String DEFAULT_CSV_T_FORMAT = "dd.MM.yyyy";
+
+    protected List<KMIndex<AnalysisPeriod[]>> analysisPeriods;
 
     protected List<KMIndex<QWD[]>> referenceEvents;
 
     public DeltaWtExporter() {
-        analysisPeriods = new ArrayList<KMIndex<AnalysisPeriod []>>();
-        referenceEvents = new ArrayList<KMIndex<QWD[]>>();
+        this.analysisPeriods = new ArrayList<>();
+        this.referenceEvents = new ArrayList<>();
     }
 
     @Override
-    protected void addData(Object d) {
+    protected void addData(final Object d) {
         log.debug("DeltaWtExporter.addData");
         if (!(d instanceof CalculationResult)) {
             log.warn("Invalid data type");
             return;
         }
 
-        Object data = ((CalculationResult)d).getData();
+        final Object data = ((CalculationResult) d).getData();
         if (!(data instanceof FixAnalysisResult)) {
             log.warn("Invalid data stored in result.");
         }
-        FixAnalysisResult result = (FixAnalysisResult)data;
-        analysisPeriods.add(result.getAnalysisPeriods());
-        referenceEvents.add(result.getReferenced());
+        final FixAnalysisResult result = (FixAnalysisResult) data;
+        this.analysisPeriods.add(result.getAnalysisPeriods());
+        this.referenceEvents.add(result.getReferenced());
     }
 
     @Override
-    protected void writeCSVData(CSVWriter writer) throws IOException {
+    protected void writeCSVData(final CSVWriter writer) throws IOException {
 
-        boolean debug = log.isDebugEnabled();
+        final boolean debug = log.isDebugEnabled();
 
         writeCSVHeader(writer);
 
-        NumberFormat kmF = getKMFormatter();
-        NumberFormat dwF = getDeltaWFormatter();
-        NumberFormat qF  = getQFormatter();
-        NumberFormat wF  = getWFormatter();
-
-        DateFormat dF = getDateFormatter();
+        final NumberFormat kmF = getKMFormatter();
+        final NumberFormat dwF = getDeltaWFormatter();
+        final NumberFormat qF = getQFormatter();
+        final NumberFormat wF = getWFormatter();
 
-        TreeMap<Double, ArrayList<String []>> sorted =
-            new TreeMap<Double, ArrayList<String []>>();
-
-        String referenceS = getReference();
+        final DateFormat dF = getDateFormatter();
 
-        for (KMIndex<QWD[]> reference: referenceEvents) {
+        final TreeMap<Double, ArrayList<String[]>> sorted = new TreeMap<>();
 
-            for (KMIndex.Entry<QWD[]> kmEntry: reference) {
+        final String referenceS = getReference();
 
-                Double km = kmEntry.getKm();
+        for (final KMIndex<QWD[]> reference : this.referenceEvents) {
 
-                ArrayList<String []> list = sorted.get(km);
+            for (final KMIndex.Entry<QWD[]> kmEntry : reference) {
+
+                final Double km = kmEntry.getKm();
+
+                ArrayList<String[]> list = sorted.get(km);
 
                 if (list == null) {
-                    list = new ArrayList<String []>();
+                    list = new ArrayList<>();
                     sorted.put(km, list);
                 }
 
-                String kmS = kmF.format(kmEntry.getKm());
-                for (QWD qwd: kmEntry.getValue()) {
-                    String deltaWS = dwF.format(qwd.getDeltaW());
-                    String qS      = qF.format(qwd.getQ());
-                    String wS      = wF.format(qwd.getW());
-                    String dateS   = dF.format(qwd.getDate());
+                final String kmS = kmF.format(kmEntry.getKm());
+                for (final QWD qwd : kmEntry.getValue()) {
+                    final String deltaWS = dwF.format(qwd.getDeltaW());
+                    final String qS = qF.format(qwd.getQ());
+                    final String wS = wF.format(qwd.getW());
+                    final String dateS = dF.format(qwd.getDate());
 
-                    list.add(new String[] {
-                        kmS,
-                        dateS,
-                        qS,
-                        wS,
-                        referenceS,
-                        deltaWS
-                        });
+                    list.add(new String[] { kmS, dateS, qS, wS, referenceS, deltaWS });
                 }
             }
         }
 
         if (debug) {
-            log.debug("AnalysisPeriods: " + analysisPeriods.size());
+            log.debug("AnalysisPeriods: " + this.analysisPeriods.size());
         }
 
-        String analysisTemplate = getAnalysisTemplate();
-
-        for (KMIndex<AnalysisPeriod []> periods: analysisPeriods) {
+        final String analysisTemplate = getAnalysisTemplate();
 
-            for (KMIndex.Entry<AnalysisPeriod []> kmEntry: periods) {
+        for (final KMIndex<AnalysisPeriod[]> periods : this.analysisPeriods) {
 
-                Double km = kmEntry.getKm();
+            for (final KMIndex.Entry<AnalysisPeriod[]> kmEntry : periods) {
 
-                ArrayList<String []> list = sorted.get(km);
+                final Double km = kmEntry.getKm();
+
+                ArrayList<String[]> list = sorted.get(km);
 
                 if (list == null) {
-                    list = new ArrayList<String []>();
+                    list = new ArrayList<>();
                     sorted.put(km, list);
                 }
 
-                String kmS = kmF.format(kmEntry.getKm());
+                final String kmS = kmF.format(kmEntry.getKm());
                 int analysisCount = 1;
 
-                for (AnalysisPeriod period: kmEntry.getValue()) {
+                for (final AnalysisPeriod period : kmEntry.getValue()) {
                     // Typically resulting in A1,A2...
-                    String analyisS = MessageFormat.format(analysisTemplate,
-                        analysisCount);
-                    QWD [] qwds = period.getQWDs();
+                    final String analyisS = MessageFormat.format(analysisTemplate, analysisCount);
+                    final QWD[] qwds = period.getQWDs();
 
                     if (qwds != null) {
-                        for (QWD qwd: qwds) {
-                            String deltaWS = dwF.format(qwd.getDeltaW());
-                            String qS      = qF.format(qwd.getQ());
-                            String wS      = wF.format(qwd.getW());
-                            String dateS   = dF.format(qwd.getDate());
+                        for (final QWD qwd : qwds) {
+                            final String deltaWS = dwF.format(qwd.getDeltaW());
+                            final String qS = qF.format(qwd.getQ());
+                            final String wS = wF.format(qwd.getW());
+                            final String dateS = dF.format(qwd.getDate());
 
-                            list.add(new String[] {
-                                kmS,
-                                dateS,
-                                qS,
-                                wS,
-                                analyisS,
-                                deltaWS });
+                            list.add(new String[] { kmS, dateS, qS, wS, analyisS, deltaWS });
                         }
                     }
                     ++analysisCount;
@@ -220,8 +184,8 @@
             }
         }
 
-        for (ArrayList<String []> list: sorted.values()) {
-            for (String [] row: list) {
+        for (final ArrayList<String[]> list : sorted.values()) {
+            for (final String[] row : list) {
                 writer.writeNext(row);
             }
         }
@@ -231,64 +195,56 @@
 
     /** Template to create "State" strings like A1,A2... */
     protected String getAnalysisTemplate() {
-        return Resources.getMsg(
-            context.getMeta(),
-            CSV_ANALYSIS, DEFAULT_CSV_ANALYSIS);
+        return Resources.getMsg(this.context.getMeta(), CSV_ANALYSIS, DEFAULT_CSV_ANALYSIS);
     }
 
     protected String getReference() {
-        return Resources.getMsg(
-            context.getMeta(),
-            CSV_REFERENCE, DEFAULT_CSV_REFERENCE);
+        return Resources.getMsg(this.context.getMeta(), CSV_REFERENCE, DEFAULT_CSV_REFERENCE);
     }
 
     protected NumberFormat getKMFormatter() {
-        return Formatter.getFixDeltaWKM(context);
+        return Formatter.getFixDeltaWKM(this.context);
     }
 
     protected NumberFormat getDeltaWFormatter() {
-        return Formatter.getFixDeltaWDeltaW(context);
+        return Formatter.getFixDeltaWDeltaW(this.context);
     }
 
+    @Override
     protected NumberFormat getQFormatter() {
-        return Formatter.getFixDeltaWQ(context);
+        return Formatter.getFixDeltaWQ(this.context);
     }
 
+    @Override
     protected NumberFormat getWFormatter() {
-        return Formatter.getFixDeltaWW(context);
+        return Formatter.getFixDeltaWW(this.context);
     }
 
     protected DateFormat getDateFormatter() {
-        CallMeta meta = context.getMeta();
-        return Formatter.getDateFormatter(
-            meta,
-            Resources.getMsg(
-                meta,
-                CSV_T_FORMAT,
-                DEFAULT_CSV_T_FORMAT));
+        final CallMeta meta = this.context.getMeta();
+        return Formatter.getDateFormatter(meta, Resources.getMsg(meta, CSV_T_FORMAT, DEFAULT_CSV_T_FORMAT));
     }
 
-    protected void writeCSVHeader(CSVWriter writer) {
+    protected void writeCSVHeader(final CSVWriter writer) {
         log.debug("DeltaWtExporter.writeCSVHeader");
 
-        /* issue825
-        km; Ereignis, Abfluss, GEMESSENER Wasserstand;
-        Status (RECHTSBÜNDIG), del W
-        */
+        /*
+         * issue825
+         * km; Ereignis, Abfluss, GEMESSENER Wasserstand;
+         * Status (RECHTSBÜNDIG), del W
+         */
+        final RiverAccess river = new RiverAccess((D4EArtifact) this.master);
+        final String unit = river.getRiver().getWstUnit().getName();
 
-        writer.writeNext(new String[] {
-            msg(CSV_KM_HEADER,      DEFAULT_CSV_KM_HEADER),
-            msg(CSV_T_HEADER,       DEFAULT_CSV_T_HEADER),
-            msg(CSV_Q_HEADER,       DEFAULT_CSV_Q_HEADER),
-            msg(CSV_W_HEADER,       DEFAULT_CSV_W_HEADER),
-            msg(CSV_TRANGE_HEADER,  DEFAULT_CSV_TRANGE_DESC_HEADER),
-            msg(CSV_DELTA_W_HEADER, DEFAULT_CSV_DELTA_W_HEADER)
-        });
+        writer.writeNext(new String[] { msg(CSV_KM_HEADER, DEFAULT_CSV_KM_HEADER), msg(CSV_T_HEADER, DEFAULT_CSV_T_HEADER),
+                msg(CSV_Q_HEADER, DEFAULT_CSV_Q_HEADER), msg(CSV_W_HEADER, DEFAULT_CSV_W_HEADER, new Object[] { unit }),
+                msg(CSV_TRANGE_HEADER, DEFAULT_CSV_TRANGE_DESC_HEADER), msg(CSV_DELTA_W_HEADER, DEFAULT_CSV_DELTA_W_HEADER) });
     }
 
     @Override
-    protected void writePDF(OutputStream out) {
+    protected void writePDF(final OutputStream out) {
         // TODO: Implement me!
+        // wird doch NICHT erledigt vom WaterlevelExporter
     }
 }
 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
--- a/artifacts/src/main/resources/messages.properties	Fri May 25 09:10:19 2018 +0200
+++ b/artifacts/src/main/resources/messages.properties	Fri May 25 10:44:24 2018 +0200
@@ -695,7 +695,7 @@
 export.fixings.deltawt.csv.header.km=km
 export.fixings.deltawt.csv.header.deltaw=\u0394 W [cm]
 export.fixings.deltawt.csv.header.q=Discharge [m\u00b3/s]
-export.fixings.deltawt.csv.header.w=Waterlevel [m]
+export.fixings.deltawt.csv.header.w=Waterlevel [{0}]
 export.fixings.deltawt.csv.header.t=Date
 export.fixings.deltawt.csv.t.format=yyyy/MM/dd
 export.fixings.deltawt.csv.header.time.range=State
--- a/artifacts/src/main/resources/messages_de.properties	Fri May 25 09:10:19 2018 +0200
+++ b/artifacts/src/main/resources/messages_de.properties	Fri May 25 10:44:24 2018 +0200
@@ -695,7 +695,7 @@
 export.fixings.deltawt.csv.header.km=km
 export.fixings.deltawt.csv.header.deltaw=\u0394 W [cm]
 export.fixings.deltawt.csv.header.q=Abfluss [m\u00b3/s]
-export.fixings.deltawt.csv.header.w=Wasserstand [m]
+export.fixings.deltawt.csv.header.w=Wasserstand [{0}]
 export.fixings.deltawt.csv.header.t=Datum
 export.fixings.deltawt.csv.t.format=dd.MM.yyyy
 export.fixings.deltawt.csv.header.time.range=Status

http://dive4elements.wald.intevation.org