diff artifacts/src/main/java/org/dive4elements/river/exports/sq/SQRelationExporter.java @ 9312:740d65e4aa14

Q [m³/s] one message
author gernotbelger
date Thu, 26 Jul 2018 15:54:20 +0200
parents 5e38e2924c07
children
line wrap: on
line diff
--- a/artifacts/src/main/java/org/dive4elements/river/exports/sq/SQRelationExporter.java	Thu Jul 26 11:16:06 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/exports/sq/SQRelationExporter.java	Thu Jul 26 15:54:20 2018 +0200
@@ -9,47 +9,39 @@
 package org.dive4elements.river.exports.sq;
 
 import java.io.OutputStream;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.HashMap;
-import java.util.Date;
-import java.util.Locale;
 import java.text.DateFormat;
 import java.text.NumberFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
 
+import org.apache.log4j.Logger;
+import org.dive4elements.artifacts.CallMeta;
+import org.dive4elements.artifacts.common.utils.Config;
+import org.dive4elements.river.artifacts.D4EArtifact;
+import org.dive4elements.river.artifacts.access.SQRelationAccess;
+import org.dive4elements.river.artifacts.model.CalculationResult;
+import org.dive4elements.river.artifacts.model.DateRange;
+import org.dive4elements.river.artifacts.model.Parameters;
+import org.dive4elements.river.artifacts.model.sq.SQ;
+import org.dive4elements.river.artifacts.model.sq.SQFractionResult;
+import org.dive4elements.river.artifacts.model.sq.SQMeasurementsJRDataSource;
+import org.dive4elements.river.artifacts.model.sq.SQRelationJRDataSource;
+import org.dive4elements.river.artifacts.model.sq.SQResult;
+import org.dive4elements.river.artifacts.resources.Resources;
+import org.dive4elements.river.exports.AbstractExporter;
+import org.dive4elements.river.utils.Formatter;
+import org.dive4elements.river.utils.RiverUtils;
+
+import au.com.bytecode.opencsv.CSVWriter;
+import net.sf.jasperreports.engine.JRException;
+import net.sf.jasperreports.engine.JRPrintPage;
 import net.sf.jasperreports.engine.JasperExportManager;
 import net.sf.jasperreports.engine.JasperFillManager;
 import net.sf.jasperreports.engine.JasperPrint;
-import net.sf.jasperreports.engine.JRPrintPage;
-import net.sf.jasperreports.engine.JRException;
-
-import au.com.bytecode.opencsv.CSVWriter;
-
-import org.dive4elements.artifacts.CallMeta;
-
-import org.dive4elements.river.artifacts.model.CalculationResult;
-import org.dive4elements.river.artifacts.model.sq.SQFractionResult;
-import org.dive4elements.river.artifacts.model.sq.SQResult;
-import org.dive4elements.river.artifacts.model.sq.SQ;
-import org.dive4elements.river.artifacts.model.sq.SQRelationJRDataSource;
-import org.dive4elements.river.artifacts.model.sq.SQMeasurementsJRDataSource;
-import org.dive4elements.river.artifacts.model.Parameters;
-import org.dive4elements.river.artifacts.model.DateRange;
-import org.dive4elements.river.artifacts.access.SQRelationAccess;
-
-import org.dive4elements.river.artifacts.resources.Resources;
-
-import org.dive4elements.river.artifacts.D4EArtifact;
-
-import org.dive4elements.river.exports.AbstractExporter;
-
-import org.dive4elements.river.utils.RiverUtils;
-import org.dive4elements.river.utils.Formatter;
-
-import org.dive4elements.artifacts.common.utils.Config;
-
-import org.apache.log4j.Logger;
 
 /**
  * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a>
@@ -57,273 +49,182 @@
 public class SQRelationExporter extends AbstractExporter {
 
     /** Private log. */
-    private static final Logger log =
-        Logger.getLogger(SQRelationExporter.class);
-
-    public static final String INFO_COEFF_A =
-        "export.sqrelation.csv.info.coeff.a";
-
-    public static final String INFO_COEFF_B =
-        "export.sqrelation.csv.info.coeff.b";
-
-    public static final String INFO_QMAX =
-        "export.sqrelation.csv.info.qmax";
-
-    public static final String INFO_STDERR =
-        "export.sqrelation.csv.info.stderr";
-
-    public static final String INFO_R2 =
-        "export.sqrelation.csv.info.r2";
-
-    public static final String INFO_NTOT =
-        "export.sqrelation.csv.info.ntot";
-
-    public static final String INFO_NOUTL =
-        "export.sqrelation.csv.info.noutl";
-
-    public static final String INFO_CFERGUSON =
-        "export.sqrelation.csv.info.cferguson";
-
-    public static final String INFO_CDUAN =
-        "export.sqrelation.csv.info.cduan";
-
-    public static final String INFO_PARAM_A =
-        "export.sqrelation.csv.info.param.a";
-
-    public static final String INFO_PARAM_B =
-        "export.sqrelation.csv.info.param.b";
-
-    public static final String INFO_PARAM_C =
-        "export.sqrelation.csv.info.param.c";
-
-    public static final String INFO_PARAM_D =
-        "export.sqrelation.csv.info.param.d";
-
-    public static final String INFO_PARAM_E =
-        "export.sqrelation.csv.info.param.e";
-
-    public static final String INFO_PARAM_F =
-        "export.sqrelation.csv.info.param.f";
-
-    public static final String INFO_Q =
-        "export.sqrelation.csv.info.q";
-
-    public static final String INFO_S_KG =
-        "export.sqrelation.csv.info.s_kg";
-
-    public static final String INFO_DATE =
-        "export.sqrelation.csv.info.date";
-
-    public static final String CSV_PARAMETER =
-        "export.sqrelation.csv.header.parameter";
+    private static final Logger log = Logger.getLogger(SQRelationExporter.class);
 
-    public static final String CSV_STATION =
-        "export.sqrelation.csv.header.station";
-
-    public static final String CSV_KM =
-        "export.sqrelation.csv.header.km";
-
-    public static final String CSV_FUNCTION =
-        "export.sqrelation.csv.header.function";
-
-    public static final String CSV_GAUGE =
-        "export.sqrelation.csv.header.gauge";
-
-    public static final String CSV_COEFF_A =
-        "export.sqrelation.csv.header.coeff.a";
-
-    public static final String CSV_COEFF_B =
-        "export.sqrelation.csv.header.coeff.b";
-
-    public static final String CSV_COEFF_Q =
-        "export.sqrelation.csv.header.coeff.q";
-
-    public static final String CSV_COEFF_R =
-        "export.sqrelation.csv.header.coeff.r";
-
-    public static final String CSV_N_TOTAL =
-        "export.sqrelation.csv.header.n.total";
-
-    public static final String CSV_N_OUTLIERS =
-        "export.sqrelation.csv.header.n.outliers";
+    public static final String INFO_COEFF_A = "export.sqrelation.csv.info.coeff.a";
 
-    public static final String CSV_C_DUAN =
-        "export.sqrelation.csv.header.c.duan";
-
-    public static final String CSV_C_FERGUSON =
-        "export.sqrelation.csv.header.c.ferguson";
-
-    public static final String CSV_QMAX =
-        "export.sqrelation.csv.header.qmax";
-
-    public static final String CSV_SD =
-        "export.sqrelation.csv.header.sd";
-
-    public static final String CSV_S_KG =
-        "export.sqrelation.csv.header.s_kg";
+    public static final String INFO_COEFF_B = "export.sqrelation.csv.info.coeff.b";
 
-    public static final String CSV_Q =
-        "export.sqrelation.csv.header.q";
-
-    public static final String CSV_DATE =
-        "export.sqrelation.csv.header.date";
-
-    public static final String PDF_TITLE=
-        "export.sqrelation.pdf.title";
+    public static final String INFO_QMAX = "export.sqrelation.csv.info.qmax";
 
-    public static final String PDF_HEADER_MODE =
-        "export.sqrelation.pdf.mode";
+    public static final String INFO_STDERR = "export.sqrelation.csv.info.stderr";
 
-    public static final String JASPER_FILE =
-        "export.sqrelation.pdf.file";
+    public static final String INFO_R2 = "export.sqrelation.csv.info.r2";
 
-    public static final String JASPER_MEASUREMENTS_FILE =
-        "export.sqrelation.measurements.pdf.file";
+    public static final String INFO_NTOT = "export.sqrelation.csv.info.ntot";
 
-    protected List<SQResult []> data;
+    public static final String INFO_NOUTL = "export.sqrelation.csv.info.noutl";
+
+    public static final String INFO_CFERGUSON = "export.sqrelation.csv.info.cferguson";
+
+    public static final String INFO_CDUAN = "export.sqrelation.csv.info.cduan";
+
+    public static final String INFO_PARAM_A = "export.sqrelation.csv.info.param.a";
+
+    public static final String INFO_PARAM_B = "export.sqrelation.csv.info.param.b";
+
+    public static final String INFO_PARAM_C = "export.sqrelation.csv.info.param.c";
+
+    public static final String INFO_PARAM_D = "export.sqrelation.csv.info.param.d";
+
+    public static final String INFO_PARAM_E = "export.sqrelation.csv.info.param.e";
+
+    public static final String INFO_PARAM_F = "export.sqrelation.csv.info.param.f";
+
+    public static final String INFO_Q = "export.sqrelation.csv.info.q";
+
+    public static final String INFO_S_KG = "export.sqrelation.csv.info.s_kg";
+
+    public static final String INFO_DATE = "export.sqrelation.csv.info.date";
+
+    public static final String CSV_PARAMETER = "export.sqrelation.csv.header.parameter";
+
+    public static final String CSV_STATION = "export.sqrelation.csv.header.station";
+
+    public static final String CSV_KM = "export.sqrelation.csv.header.km";
+
+    public static final String CSV_FUNCTION = "export.sqrelation.csv.header.function";
+
+    public static final String CSV_GAUGE = "export.sqrelation.csv.header.gauge";
+
+    public static final String CSV_COEFF_A = "export.sqrelation.csv.header.coeff.a";
+
+    public static final String CSV_COEFF_B = "export.sqrelation.csv.header.coeff.b";
+
+    public static final String CSV_COEFF_Q = "export.sqrelation.csv.header.coeff.q";
+
+    public static final String CSV_COEFF_R = "export.sqrelation.csv.header.coeff.r";
+
+    public static final String CSV_N_TOTAL = "export.sqrelation.csv.header.n.total";
+
+    public static final String CSV_N_OUTLIERS = "export.sqrelation.csv.header.n.outliers";
+
+    public static final String CSV_C_DUAN = "export.sqrelation.csv.header.c.duan";
+
+    public static final String CSV_C_FERGUSON = "export.sqrelation.csv.header.c.ferguson";
+
+    public static final String CSV_QMAX = "export.sqrelation.csv.header.qmax";
+
+    public static final String CSV_SD = "export.sqrelation.csv.header.sd";
+
+    public static final String CSV_S_KG = "export.sqrelation.csv.header.s_kg";
+
+    public static final String CSV_Q = "common.export.csv.header.q";
+
+    public static final String CSV_DATE = "export.sqrelation.csv.header.date";
+
+    public static final String PDF_TITLE = "export.sqrelation.pdf.title";
+
+    public static final String PDF_HEADER_MODE = "export.sqrelation.pdf.mode";
+
+    public static final String JASPER_FILE = "export.sqrelation.pdf.file";
+
+    public static final String JASPER_MEASUREMENTS_FILE = "export.sqrelation.measurements.pdf.file";
+
+    protected List<SQResult[]> data;
 
     public SQRelationExporter() {
-        data = new ArrayList<SQResult []>();
+        this.data = new ArrayList<>();
     }
 
     @Override
     protected void addData(Object d) {
         if (d instanceof CalculationResult) {
-            d = ((CalculationResult)d).getData();
-            if (d instanceof SQResult []) {
-                data.add((SQResult [])d);
+            d = ((CalculationResult) d).getData();
+            if (d instanceof SQResult[]) {
+                this.data.add((SQResult[]) d);
             }
         }
     }
 
-    protected void writeCSVHeader(CSVWriter writer) {
-        writer.writeNext(new String[] {
-            msg(CSV_KM),
-            msg(CSV_PARAMETER),
-            msg(CSV_COEFF_A),
-            msg(CSV_COEFF_B),
-            msg(CSV_SD),
-            msg(CSV_QMAX),
-            msg(CSV_COEFF_R),
-            msg(CSV_N_TOTAL),
-            msg(CSV_N_OUTLIERS),
-            msg(CSV_C_DUAN),
-            msg(CSV_C_FERGUSON),
-            msg(CSV_S_KG),
-            msg(CSV_Q),
-            msg(CSV_DATE)
-        });
+    protected void writeCSVHeader(final CSVWriter writer) {
+        writer.writeNext(new String[] { msg(CSV_KM), msg(CSV_PARAMETER), msg(CSV_COEFF_A), msg(CSV_COEFF_B), msg(CSV_SD), msg(CSV_QMAX), msg(CSV_COEFF_R),
+                msg(CSV_N_TOTAL), msg(CSV_N_OUTLIERS), msg(CSV_C_DUAN), msg(CSV_C_FERGUSON), msg(CSV_S_KG), msg(CSV_Q), msg(CSV_DATE) });
     }
 
     @Override
-    protected void writeCSVData(CSVWriter writer) {
+    protected void writeCSVData(final CSVWriter writer) {
         log.debug("writeCSVData");
 
-        writeCSVInfo(writer, new String[] {
-                msg(INFO_PARAM_A),
-                msg(INFO_PARAM_B),
-                msg(INFO_PARAM_C),
-                msg(INFO_PARAM_D),
-                msg(INFO_PARAM_E),
-                msg(INFO_PARAM_F),
-                msg(INFO_COEFF_A),
-                msg(INFO_COEFF_B),
-                msg(INFO_QMAX),
-                msg(INFO_STDERR),
-                msg(INFO_R2),
-                msg(INFO_NTOT),
-                msg(INFO_NOUTL),
-                msg(INFO_CFERGUSON),
-                msg(INFO_CDUAN),
-                msg(INFO_S_KG),
-                msg(INFO_Q),
-                msg(INFO_DATE)
-            });
+        writeCSVInfo(writer,
+                new String[] { msg(INFO_PARAM_A), msg(INFO_PARAM_B), msg(INFO_PARAM_C), msg(INFO_PARAM_D), msg(INFO_PARAM_E), msg(INFO_PARAM_F),
+                        msg(INFO_COEFF_A), msg(INFO_COEFF_B), msg(INFO_QMAX), msg(INFO_STDERR), msg(INFO_R2), msg(INFO_NTOT), msg(INFO_NOUTL),
+                        msg(INFO_CFERGUSON), msg(INFO_CDUAN), msg(INFO_S_KG), msg(INFO_Q), msg(INFO_DATE) });
 
         writeCSVHeader(writer);
 
-        for (SQResult [] results: data) {
-            for (SQResult result: results) {
+        for (final SQResult[] results : this.data) {
+            for (final SQResult result : results) {
                 writer.writeAll(data2StringArrays(result, true));
             }
         }
     }
 
-    protected List<String[]> data2StringArrays(
-        SQResult result,
-        boolean includeMeasurements
-    ) {
-        String km = Formatter.getSQRelationKM(context
-                    ).format(result.getKm());
-        List<String[]> retval = new ArrayList<String[]>();
+    protected List<String[]> data2StringArrays(final SQResult result, final boolean includeMeasurements) {
+        final String km = Formatter.getSQRelationKM(this.context).format(result.getKm());
+        final List<String[]> retval = new ArrayList<>();
 
-        NumberFormat sqAFormatter = Formatter.getSQRelationA(context);
-        NumberFormat sqBFormatter = Formatter.getSQRelationB(context);
-        NumberFormat fThreeFormatter = Formatter.getFormatter(context, 3, 3);
-        NumberFormat fTwoFormatter = Formatter.getFormatter(context, 2, 2);
-        NumberFormat fZeroFormatter = Formatter.getFormatter(context, 0, 0);
-        DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT,
-                Resources.getLocale(context.getMeta()));
+        final NumberFormat sqAFormatter = Formatter.getSQRelationA(this.context);
+        final NumberFormat sqBFormatter = Formatter.getSQRelationB(this.context);
+        final NumberFormat fThreeFormatter = Formatter.getFormatter(this.context, 3, 3);
+        final NumberFormat fTwoFormatter = Formatter.getFormatter(this.context, 2, 2);
+        final NumberFormat fZeroFormatter = Formatter.getFormatter(this.context, 0, 0);
+        final DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, Resources.getLocale(this.context.getMeta()));
 
         for (int i = 0; i < SQResult.NUMBER_FRACTIONS; ++i) {
-            SQFractionResult fraction = result.getFraction(i);
+            final SQFractionResult fraction = result.getFraction(i);
 
-            String name = result.getFractionName(i);
+            final String name = result.getFractionName(i);
 
-            Parameters parameters = fraction.getParameters();
+            final Parameters parameters = fraction.getParameters();
 
             if (parameters == null) {
                 continue;
             }
 
             String a, b, sd, o, t, max_q, c_ferguson, c_duan, r2;
-            a  = sqAFormatter.format(parameters.getValue(0, "a"));
-            b  = sqBFormatter.format(parameters.getValue(0, "b"));
+            a = sqAFormatter.format(parameters.getValue(0, "a"));
+            b = sqBFormatter.format(parameters.getValue(0, "b"));
 
             /* The std_dev parameter contains the standard error actually */
             sd = fThreeFormatter.format(parameters.getValue(0, "std_dev"));
             max_q = fZeroFormatter.format(parameters.getValue(0, "max_q"));
-            c_ferguson = fTwoFormatter.format(
-                parameters.getValue(0, "c_ferguson"));
+            c_ferguson = fTwoFormatter.format(parameters.getValue(0, "c_ferguson"));
             c_duan = fTwoFormatter.format(parameters.getValue(0, "c_duan"));
             r2 = fTwoFormatter.format(parameters.getValue(0, "r2"));
 
-
-            o  = String.valueOf(fraction.totalNumOutliers());
-            t  = String.valueOf(fraction.numMeasurements());
+            o = String.valueOf(fraction.totalNumOutliers());
+            t = String.valueOf(fraction.numMeasurements());
 
             if (includeMeasurements) {
-                for (SQ sq: fraction.getMeasurements()) {
-                    retval.add(new String[] {
-                        km,
-                        name,
-                        a,
-                        b,
-                        sd, // 4
+                for (final SQ sq : fraction.getMeasurements()) {
+                    retval.add(new String[] { km, name, a, b, sd, // 4
+                            max_q, // 5
+                            r2, // 6
+                            t, // 7
+                            o, // 8
+                            c_duan, // 9
+                            c_ferguson, // 10
+                            fThreeFormatter.format(sq.getS()), fZeroFormatter.format(sq.getQ()), df.format(sq.getDate()) });
+                }
+            } else {
+                retval.add(new String[] { km, name, a, b, sd, // 4
                         max_q, // 5
                         r2, // 6
                         t, // 7
                         o, // 8
                         c_duan, // 9
-                        c_ferguson, // 10
-                        fThreeFormatter.format(sq.getS()),
-                        fZeroFormatter.format(sq.getQ()),
-                        df.format(sq.getDate())
-                    });
-                }
-            } else {
-                retval.add(new String[] {
-                    km,
-                    name,
-                    a,
-                    b,
-                    sd, // 4
-                    max_q, // 5
-                    r2, // 6
-                    t, // 7
-                    o, // 8
-                    c_duan, // 9
-                    c_ferguson // 10
+                        c_ferguson // 10
                 });
             }
 
@@ -331,14 +232,13 @@
         return retval;
     }
 
-
     protected SQRelationJRDataSource createJRData() {
-        SQRelationJRDataSource source = new SQRelationJRDataSource();
+        final SQRelationJRDataSource source = new SQRelationJRDataSource();
 
         addMetaData(source);
-        for (SQResult [] results: data) {
-            for (SQResult result: results) {
-                for (String[] res: data2StringArrays(result, false)) {
+        for (final SQResult[] results : this.data) {
+            for (final SQResult result : results) {
+                for (final String[] res : data2StringArrays(result, false)) {
                     source.addData(res);
                 }
             }
@@ -347,35 +247,24 @@
     }
 
     protected SQMeasurementsJRDataSource createMeasurementJRData() {
-        SQMeasurementsJRDataSource source = new SQMeasurementsJRDataSource();
-        NumberFormat fZeroFormatter = Formatter.getFormatter(context, 0, 0);
-        NumberFormat fThreeFormatter = Formatter.getFormatter(context, 3, 3);
-        DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT,
-                Resources.getLocale(context.getMeta()));
+        final SQMeasurementsJRDataSource source = new SQMeasurementsJRDataSource();
+        final NumberFormat fZeroFormatter = Formatter.getFormatter(this.context, 0, 0);
+        final NumberFormat fThreeFormatter = Formatter.getFormatter(this.context, 3, 3);
+        final DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, Resources.getLocale(this.context.getMeta()));
 
-        for (SQResult [] results: data) {
-            for (SQResult result: results) {
+        for (final SQResult[] results : this.data) {
+            for (final SQResult result : results) {
                 for (int i = 0; i < SQResult.NUMBER_FRACTIONS; ++i) {
-                    String name = result.getFractionName(i);
-                    SQFractionResult fraction = result.getFraction(i);
-                    for (SQ sq: fraction.getMeasurements()) {
-                        source.addData(new String[] {
-                            name,
-                            fThreeFormatter.format(sq.getS()),
-                            fZeroFormatter.format(sq.getQ()),
-                            df.format(sq.getDate()),
-                            null
-                        });
+                    final String name = result.getFractionName(i);
+                    final SQFractionResult fraction = result.getFraction(i);
+                    for (final SQ sq : fraction.getMeasurements()) {
+                        source.addData(
+                                new String[] { name, fThreeFormatter.format(sq.getS()), fZeroFormatter.format(sq.getQ()), df.format(sq.getDate()), null });
                     }
                     for (int j = 0; j < fraction.numIterations(); j++) {
-                        for (SQ sq: fraction.getOutliers(j)) {
-                            source.addData(new String[] {
-                                name,
-                                fThreeFormatter.format(sq.getS()),
-                                fZeroFormatter.format(sq.getQ()),
-                                df.format(sq.getDate()),
-                                Integer.toString(j + 1)
-                            });
+                        for (final SQ sq : fraction.getOutliers(j)) {
+                            source.addData(new String[] { name, fThreeFormatter.format(sq.getS()), fZeroFormatter.format(sq.getQ()), df.format(sq.getDate()),
+                                    Integer.toString(j + 1) });
                         }
                     }
                 }
@@ -384,39 +273,30 @@
         return source;
     }
 
-    protected void addMetaData(SQRelationJRDataSource source) {
-        CallMeta meta = context.getMeta();
+    protected void addMetaData(final SQRelationJRDataSource source) {
+        final CallMeta meta = this.context.getMeta();
 
-        D4EArtifact arti = (D4EArtifact) master;
+        final D4EArtifact arti = (D4EArtifact) this.master;
 
-        source.addMetaData ("river", RiverUtils.getRivername(arti));
+        source.addMetaData("river", RiverUtils.getRivername(arti));
 
-        Locale locale = Resources.getLocale(meta);
-        DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, locale);
+        final Locale locale = Resources.getLocale(meta);
+        final DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, locale);
 
         source.addMetaData("date", df.format(new Date()));
 
-        SQRelationAccess access = new SQRelationAccess(arti);
-        source.addMetaData(
-            "location", "KM " + getKmFormatter().format(access.getLocation()));
-
-        DateRange period = access.getPeriod();
-        source.addMetaData("periods", df.format(period.getFrom()) + " - " +
-            df.format(period.getTo()));
+        final SQRelationAccess access = new SQRelationAccess(arti);
+        source.addMetaData("location", "KM " + getKmFormatter().format(access.getLocation()));
 
-        source.addMetaData("outliertest", Resources.getMsg(meta,
-                    access.getOutlierMethod(),
-                    access.getOutlierMethod()));
-        source.addMetaData(
-            "outliers", Formatter.getRawFormatter(context).format(
-                    access.getOutliers()));
+        final DateRange period = access.getPeriod();
+        source.addMetaData("periods", df.format(period.getFrom()) + " - " + df.format(period.getTo()));
 
-        source.addMetaData("calculation", Resources.getMsg(
-                                            locale,
-                                            PDF_HEADER_MODE,
-                                            "SQRelation"));
+        source.addMetaData("outliertest", Resources.getMsg(meta, access.getOutlierMethod(), access.getOutlierMethod()));
+        source.addMetaData("outliers", Formatter.getRawFormatter(this.context).format(access.getOutliers()));
 
-        String measurementStationName = access.getMeasurementStationName();
+        source.addMetaData("calculation", Resources.getMsg(locale, PDF_HEADER_MODE, "SQRelation"));
+
+        final String measurementStationName = access.getMeasurementStationName();
 
         if (measurementStationName != null) {
             source.addMetaData("msName", measurementStationName);
@@ -424,8 +304,7 @@
             source.addMetaData("msName", "");
         }
 
-        String measurementStationGaugeName = access
-            .getMeasurementStationGaugeName();
+        final String measurementStationGaugeName = access.getMeasurementStationGaugeName();
 
         if (measurementStationGaugeName != null) {
             source.addMetaData("msGauge", measurementStationGaugeName);
@@ -436,44 +315,32 @@
     }
 
     @Override
-    protected void writePDF(OutputStream out) {
+    protected void writePDF(final OutputStream out) {
         log.debug("write PDF");
-        SQRelationJRDataSource source = createJRData();
-        SQMeasurementsJRDataSource measureSource = createMeasurementJRData();
-
-        String jasperFile = Resources.getMsg(
-                context.getMeta(),
-                JASPER_FILE,
-                "/jasper/sqrelation_en.jasper");
-        String jasperMeasurementsFile = Resources.getMsg(
-                context.getMeta(),
-                JASPER_MEASUREMENTS_FILE,
-                "/jasper/sqmeasurements_en.jasper");
-        String confPath = Config.getConfigDirectory().toString();
-
+        final SQRelationJRDataSource source = createJRData();
+        final SQMeasurementsJRDataSource measureSource = createMeasurementJRData();
 
-        Map parameters = new HashMap();
-        parameters.put("ReportTitle", Resources.getMsg(
-                    context.getMeta(), PDF_TITLE, "Exported Data"));
+        final String jasperFile = Resources.getMsg(this.context.getMeta(), JASPER_FILE, "/jasper/sqrelation_en.jasper");
+        final String jasperMeasurementsFile = Resources.getMsg(this.context.getMeta(), JASPER_MEASUREMENTS_FILE, "/jasper/sqmeasurements_en.jasper");
+        final String confPath = Config.getConfigDirectory().toString();
+
+        final Map parameters = new HashMap();
+        parameters.put("ReportTitle", Resources.getMsg(this.context.getMeta(), PDF_TITLE, "Exported Data"));
         try {
-            /* Page numbers start have a built in offset of 1 so this
-             * is fine. */
-            JasperPrint p2 = JasperFillManager.fillReport(
-                confPath + jasperMeasurementsFile,
-                parameters,
-                measureSource);
+            /*
+             * Page numbers start have a built in offset of 1 so this
+             * is fine.
+             */
+            final JasperPrint p2 = JasperFillManager.fillReport(confPath + jasperMeasurementsFile, parameters, measureSource);
             parameters.put("MEASUREMENT_PAGE_NUM", p2.getPages().size());
-            JasperPrint p1 = JasperFillManager.fillReport(
-                confPath + jasperFile,
-                parameters,
-                source);
-            for (Object page: p2.getPages()) {
-                JRPrintPage object = (JRPrintPage)page;
+            final JasperPrint p1 = JasperFillManager.fillReport(confPath + jasperFile, parameters, source);
+            for (final Object page : p2.getPages()) {
+                final JRPrintPage object = (JRPrintPage) page;
                 p1.addPage(object);
             }
             JasperExportManager.exportReportToPdfStream(p1, out);
         }
-        catch(JRException je) {
+        catch (final JRException je) {
             log.warn("Error generating PDF Report!", je);
         }
     }

http://dive4elements.wald.intevation.org