Mercurial > dive4elements > river
diff artifacts/src/main/java/org/dive4elements/river/exports/sq/SQRelationExporter.java @ 6172:58a613798386
Implement PDF export for SQ Relation
author | Andre Heinecke <aheinecke@intevation.de> |
---|---|
date | Mon, 03 Jun 2013 17:15:09 +0200 |
parents | af13ceeba52a |
children | 6a04081a2f69 |
line wrap: on
line diff
--- a/artifacts/src/main/java/org/dive4elements/river/exports/sq/SQRelationExporter.java Mon Jun 03 16:26:10 2013 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/exports/sq/SQRelationExporter.java Mon Jun 03 17:15:09 2013 +0200 @@ -11,21 +11,43 @@ 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 org.w3c.dom.Document; +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 au.com.bytecode.opencsv.CSVWriter; import org.dive4elements.artifacts.CallContext; +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.SQRelationJRDataSource; 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; /** @@ -80,6 +102,14 @@ public static final String CSV_VARIANCE = "export.sqrelation.csv.header.variance"; + 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"; protected List<SQResult []> data; @@ -120,16 +150,14 @@ for (SQResult [] results: data) { for (SQResult result: results) { - data2CSV(writer, result); + writer.writeAll(data2StringArrays(result)); } } } - protected void data2CSV(CSVWriter writer, SQResult result) { - logger.debug("data2CSV"); - - // TODO: i18n + protected List<String[]> data2StringArrays(SQResult result) { String km = String.valueOf(result.getKm()); + List<String[]> retval = new ArrayList<String[]>(); for (int i = 0; i < SQResult.NUMBER_FRACTIONS; ++i) { SQFractionResult fraction = result.getFraction(i); @@ -142,29 +170,95 @@ continue; } - double a = parameters.getValue(0, "a"); - double b = parameters.getValue(0, "b"); - double sd = Math.sqrt(parameters.getValue(0, "std_dev")); - int o = fraction.totalNumOutliers(); - int t = fraction.numMeasurements() + o; + String a, b, sd, o, t; + a = Formatter.getSQRelation(context).format(parameters.getValue(0, "a")); + b = Formatter.getSQRelation(context).format(parameters.getValue(0, "b")); + sd = Formatter.getVariance(context).format(Math.sqrt(parameters.getValue(0, "std_dev"))); - writer.writeNext(new String[] { + o = String.valueOf(fraction.totalNumOutliers()); + t = String.valueOf(fraction.numMeasurements() + o); + + retval.add(new String[] { km, name, - String.valueOf(a), - String.valueOf(b), - String.valueOf(t), - String.valueOf(o), - String.valueOf(sd) + a, + b, + t, + o, + sd }); } + return retval; } + protected SQRelationJRDataSource createJRData() { + SQRelationJRDataSource source = new SQRelationJRDataSource(); + + addMetaData(source); + for (SQResult [] results: data) { + for (SQResult result: results) { + for (String[] res: data2StringArrays(result)) { + source.addData(res); + } + } + } + return source; + } + + protected void addMetaData(SQRelationJRDataSource source) { + CallMeta meta = context.getMeta(); + + D4EArtifact arti = (D4EArtifact) master; + + source.addMetaData ("river", RiverUtils.getRivername(arti)); + + Locale locale = Resources.getLocale(meta); + DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, locale); + + source.addMetaData("date", df.format(new Date())); + + SQRelationAccess access = new SQRelationAccess(arti); + source.addMetaData("location", getKmFormatter().format(access.getLocation())); + + DateRange period = access.getPeriod(); + source.addMetaData("periods", df.format(period.getFrom()) + " - " + + df.format(period.getTo())); + + source.addMetaData("outliertest", access.getOutlierMethod()); + source.addMetaData("outliers", access.getOutliers().toString()); + + source.addMetaData("calculation", Resources.getMsg( + locale, + PDF_HEADER_MODE, + "SQRelation")); + } + @Override protected void writePDF(OutputStream out) { - logger.debug("writePDF"); - logger.error("NOT IMPLEMENTED: writePDF"); + logger.debug("write PDF"); + SQRelationJRDataSource source = createJRData(); + + String jasperFile = Resources.getMsg( + context.getMeta(), + JASPER_FILE, + "/jasper/sqrelation_en.jasper"); + String confPath = Config.getConfigDirectory().toString(); + + + Map parameters = new HashMap(); + parameters.put("ReportTitle", Resources.getMsg( + context.getMeta(), PDF_TITLE, "Exported Data")); + try { + JasperPrint print = JasperFillManager.fillReport( + confPath + jasperFile, + parameters, + source); + JasperExportManager.exportReportToPdfStream(print, out); + } + catch(JRException je) { + logger.warn("Error generating PDF Report!", je); + } } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :