Mercurial > dive4elements > river
view flys-artifacts/src/main/java/de/intevation/flys/exports/fixings/DeltaWtExporter.java @ 5111:4898376c680b
AbstractExporter: keep km-, w- and q-formatter instances.
author | Felix Wolfsteller <felix.wolfsteller@intevation.de> |
---|---|
date | Wed, 27 Feb 2013 11:50:32 +0100 |
parents | b195fede1c3b |
children | 47e5bc64d3de |
line wrap: on
line source
package de.intevation.flys.exports.fixings; import au.com.bytecode.opencsv.CSVWriter; import de.intevation.artifacts.CallContext; import de.intevation.artifacts.CallMeta; import de.intevation.flys.artifacts.model.CalculationResult; import de.intevation.flys.artifacts.model.fixings.AnalysisPeriod; import de.intevation.flys.artifacts.model.fixings.FixAnalysisResult; import de.intevation.flys.artifacts.model.fixings.QWD; import de.intevation.flys.artifacts.resources.Resources; import de.intevation.flys.exports.AbstractExporter; import de.intevation.flys.utils.Formatter; import de.intevation.flys.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 org.apache.log4j.Logger; import org.w3c.dom.Document; /** Exports fixation analysis deltaw(t) computation results to csv. */ public class DeltaWtExporter extends AbstractExporter { /** Private logger. */ 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_W_HEADER = "export.fixings.deltawt.csv.header.w"; 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"; public static final String DEFAULT_CSV_DELTA_W_HEADER = "\u0394 W [cm]"; public static final String DEFAULT_CSV_W_HEADER = "Wasserstand [m]"; public static final String DEFAULT_CSV_Q_HEADER = "Abfluss [m\u00b3/s]"; 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_REFERENCE = "B"; 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; @Override public void init(Document request, OutputStream out, CallContext context) { log.debug("DeltaWtExporter.init"); super.init(request, out, context); analysisPeriods = new ArrayList<KMIndex<AnalysisPeriod []>>(); referenceEvents = new ArrayList<KMIndex<QWD[]>>(); } @Override protected void addData(Object d) { log.debug("DeltaWtExporter.addData"); if (!(d instanceof CalculationResult)) { log.warn("Invalid data type"); return; } 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()); } @Override protected void writeCSVData(CSVWriter writer) throws IOException { boolean debug = log.isDebugEnabled(); writeCSVHeader(writer); NumberFormat kmF = getKMFormatter(); NumberFormat dwF = getDeltaWFormatter(); NumberFormat qF = getQFormatter(); NumberFormat wF = getWFormatter(); DateFormat dF = getDateFormatter(); String referenceS = getReference(); for (KMIndex<QWD[]> reference: referenceEvents) { for (KMIndex.Entry<QWD[]> kmEntry: reference) { 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()); writer.writeNext(new String[] { kmS, dateS, qS, wS, referenceS, deltaWS }); } } } if (debug) { log.debug("AnalysisPeriods: " + analysisPeriods.size()); } String analysisTemplate = getAnalysisTemplate(); for (KMIndex<AnalysisPeriod []> periods: analysisPeriods) { for (KMIndex.Entry<AnalysisPeriod []> kmEntry: periods) { String kmS = kmF.format(kmEntry.getKm()); int analysisCount = 1; for (AnalysisPeriod period: kmEntry.getValue()) { // Typically resulting in A1,A2... String analyisS = MessageFormat.format(analysisTemplate, analysisCount); 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()); writer.writeNext(new String[] { kmS, dateS, qS, wS, analyisS, deltaWS }); } } ++analysisCount; } } } writer.flush(); } /** Template to create "State" strings like A1,A2... */ protected String getAnalysisTemplate() { return Resources.getMsg( context.getMeta(), CSV_ANALYSIS, DEFAULT_CSV_ANALYSIS); } protected String getReference() { return Resources.getMsg( context.getMeta(), CSV_REFERENCE, DEFAULT_CSV_REFERENCE); } protected NumberFormat getKMFormatter() { return Formatter.getFixDeltaWKM(context); } protected NumberFormat getDeltaWFormatter() { return Formatter.getFixDeltaWDeltaW(context); } protected NumberFormat getQFormatter() { return Formatter.getFixDeltaWQ(context); } protected NumberFormat getWFormatter() { return Formatter.getFixDeltaWW(context); } protected DateFormat getDateFormatter() { CallMeta meta = context.getMeta(); return Formatter.getDateFormatter( meta, Resources.getMsg( meta, CSV_T_FORMAT, DEFAULT_CSV_T_FORMAT)); } protected void writeCSVHeader(CSVWriter writer) { log.debug("DeltaWtExporter.writeCSVHeader"); /* issue825 km; Ereignis, Abfluss, GEMESSENER Wasserstand; Status (RECHTSBÜNDIG), del W */ 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) }); } @Override protected void writePDF(OutputStream out) { // TODO: Implement me! } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :