sascha@3216: package de.intevation.flys.exports.fixings; sascha@3216: sascha@3216: import au.com.bytecode.opencsv.CSVWriter; sascha@3216: sascha@3216: import de.intevation.artifacts.CallContext; sascha@3216: import de.intevation.artifacts.CallMeta; sascha@3216: sascha@3216: import de.intevation.flys.artifacts.model.CalculationResult; sascha@3216: sascha@3216: import de.intevation.flys.artifacts.model.fixings.AnalysisPeriod; sascha@3415: import de.intevation.flys.artifacts.model.fixings.FixAnalysisResult; sascha@3216: import de.intevation.flys.artifacts.model.fixings.QWD; sascha@3216: sascha@3216: import de.intevation.flys.artifacts.resources.Resources; sascha@3216: sascha@3216: import de.intevation.flys.exports.AbstractExporter; sascha@3216: sascha@3216: import de.intevation.flys.utils.Formatter; sascha@3216: import de.intevation.flys.utils.KMIndex; sascha@3216: sascha@3216: import java.io.IOException; sascha@3216: import java.io.OutputStream; sascha@3216: sascha@3216: import java.text.DateFormat; sascha@3398: import java.text.MessageFormat; sascha@3216: import java.text.NumberFormat; sascha@3216: sascha@3216: import java.util.ArrayList; sascha@3216: import java.util.List; sascha@3216: sascha@3216: import org.apache.log4j.Logger; sascha@3216: sascha@3216: import org.w3c.dom.Document; sascha@3216: felix@3644: /** Exports fixation analysis deltaw(t) computation results to csv. */ sascha@3216: public class DeltaWtExporter sascha@3216: extends AbstractExporter sascha@3216: { felix@3644: /** Private logger. */ sascha@3216: private static Logger log = Logger.getLogger(DeltaWtExporter.class); sascha@3216: sascha@3216: public static final String CSV_KM_HEADER = sascha@3216: "export.fixings.deltawt.csv.header.km"; sascha@3216: sascha@3216: public static final String CSV_DELTA_W_HEADER = sascha@3216: "export.fixings.deltawt.csv.header.deltaw"; sascha@3216: sascha@3397: public static final String CSV_Q_HEADER = sascha@3397: "export.fixings.deltawt.csv.header.q"; sascha@3397: sascha@3402: public static final String CSV_W_HEADER = sascha@3402: "export.fixings.deltawt.csv.header.w"; sascha@3402: sascha@3398: public static final String CSV_TRANGE_HEADER = sascha@3398: "export.fixings.deltawt.csv.header.time.range"; sascha@3398: sascha@3216: public static final String CSV_T_HEADER = sascha@3216: "export.fixings.deltawt.csv.header.t"; sascha@3216: sascha@3402: public static final String CSV_T_FORMAT = sascha@3402: "export.fixings.deltawt.csv.t.format"; sascha@3216: sascha@3216: public static final String DEFAULT_CSV_KM_HEADER = "km"; sascha@3216: sascha@3216: public static final String DEFAULT_CSV_DELTA_W_HEADER = "\u0394 W [cm]"; sascha@3216: sascha@3402: public static final String DEFAULT_CSV_W_HEADER = "Wasserstand [m]"; sascha@3402: sascha@3397: public static final String DEFAULT_CSV_Q_HEADER = "Abfluss [m\u00b3/s]"; sascha@3397: sascha@3216: public static final String DEFAULT_CSV_T_HEADER = "Datum"; sascha@3216: sascha@3398: public static final String DEFAULT_CSV_TRANGE_DESC_HEADER = sascha@3402: "Status"; sascha@3398: sascha@3398: public static final String CSV_REFERENCE = sascha@3398: "export.fixings.deltawt.csv.reference"; sascha@3398: sascha@3398: public static final String CSV_ANALYSIS = sascha@3398: "export.fixings.deltawt.csv.analysis"; sascha@3398: sascha@3398: public static final String DEFAULT_CSV_REFERENCE = sascha@3402: "B"; sascha@3398: sascha@3398: public static final String DEFAULT_CSV_ANALYSIS = sascha@3402: "A{0,number,integer}"; sascha@3402: sascha@3402: public static final String DEFAULT_CSV_T_FORMAT = sascha@3402: "dd.MM.yyyy"; sascha@3398: sascha@3216: protected List> analysisPeriods; sascha@3216: sascha@3216: protected List> referenceEvents; sascha@3216: sascha@3216: @Override sascha@3216: public void init(Document request, OutputStream out, CallContext context) { sascha@3216: log.debug("DeltaWtExporter.init"); sascha@3216: super.init(request, out, context); sascha@3216: analysisPeriods = new ArrayList>(); sascha@3216: referenceEvents = new ArrayList>(); sascha@3216: } sascha@3216: sascha@3216: @Override sascha@3216: protected void addData(Object d) { sascha@3216: log.debug("DeltaWtExporter.addData"); sascha@3216: if (!(d instanceof CalculationResult)) { sascha@3216: log.warn("Invalid data type"); sascha@3216: return; sascha@3216: } sascha@3216: sascha@3216: Object data = ((CalculationResult)d).getData(); sascha@3415: if (!(data instanceof FixAnalysisResult)) { sascha@3216: log.warn("Invalid data stored in result."); sascha@3216: } sascha@3415: FixAnalysisResult result = (FixAnalysisResult)data; sascha@3216: analysisPeriods.add(result.getAnalysisPeriods()); sascha@3216: referenceEvents.add(result.getReferenced()); sascha@3216: } sascha@3216: sascha@3216: @Override sascha@3216: protected void writeCSVData(CSVWriter writer) throws IOException { sascha@3216: sascha@3216: boolean debug = log.isDebugEnabled(); sascha@3216: sascha@3216: writeCSVHeader(writer); sascha@3216: sascha@3216: NumberFormat kmF = getKMFormatter(); sascha@3216: NumberFormat dwF = getDeltaWFormatter(); sascha@3397: NumberFormat qF = getQFormatter(); sascha@3402: NumberFormat wF = getWFormatter(); sascha@3216: sascha@3402: DateFormat dF = getDateFormatter(); sascha@3216: sascha@3398: String referenceS = getReference(); sascha@3398: sascha@3216: for (KMIndex reference: referenceEvents) { sascha@3216: sascha@3216: for (KMIndex.Entry kmEntry: reference) { sascha@3216: sascha@3216: String kmS = kmF.format(kmEntry.getKm()); sascha@3216: for (QWD qwd: kmEntry.getValue()) { sascha@3397: String deltaWS = dwF.format(qwd.getDeltaW()); sascha@3397: String qS = qF.format(qwd.getQ()); sascha@3402: String wS = wF.format(qwd.getW()); sascha@3397: String dateS = dF.format(qwd.getDate()); sascha@3216: sascha@3216: writer.writeNext(new String[] { sascha@3216: kmS, felix@3644: dateS, sascha@3402: qS, sascha@3402: wS, sascha@3398: referenceS, sascha@3402: deltaWS sascha@3402: }); sascha@3216: } sascha@3216: } sascha@3216: } sascha@3216: sascha@3216: if (debug) { sascha@3216: log.debug("AnalysisPeriods: " + analysisPeriods.size()); sascha@3216: } sascha@3216: sascha@3398: String analysisTemplate = getAnalysisTemplate(); sascha@3398: sascha@3216: for (KMIndex periods: analysisPeriods) { sascha@3216: sascha@3216: for (KMIndex.Entry kmEntry: periods) { felix@4238: sascha@3216: String kmS = kmF.format(kmEntry.getKm()); felix@4238: int analysisCount = 1; sascha@3216: sascha@3216: for (AnalysisPeriod period: kmEntry.getValue()) { felix@4238: // Typically resulting in A1,A2... felix@4238: String analyisS = MessageFormat.format(analysisTemplate, felix@4238: analysisCount); sascha@3216: QWD [] qwds = period.getQWDs(); felix@3644: sascha@3216: if (qwds != null) { sascha@3216: for (QWD qwd: qwds) { sascha@3397: String deltaWS = dwF.format(qwd.getDeltaW()); sascha@3397: String qS = qF.format(qwd.getQ()); sascha@3402: String wS = wF.format(qwd.getW()); sascha@3397: String dateS = dF.format(qwd.getDate()); sascha@3216: sascha@3216: writer.writeNext(new String[] { sascha@3216: kmS, felix@3644: dateS, sascha@3402: qS, sascha@3402: wS, sascha@3398: analyisS, sascha@3402: deltaWS }); sascha@3216: } sascha@3216: } felix@4238: ++analysisCount; sascha@3216: } sascha@3216: } sascha@3216: } sascha@3216: writer.flush(); sascha@3216: } sascha@3216: felix@3644: /** Template to create "State" strings like A1,A2... */ sascha@3398: protected String getAnalysisTemplate() { sascha@3398: return Resources.getMsg( sascha@3398: context.getMeta(), sascha@3398: CSV_ANALYSIS, DEFAULT_CSV_ANALYSIS); sascha@3398: } sascha@3398: sascha@3398: protected String getReference() { sascha@3398: return Resources.getMsg( sascha@3398: context.getMeta(), sascha@3398: CSV_REFERENCE, DEFAULT_CSV_REFERENCE); sascha@3398: } sascha@3216: sascha@3216: protected NumberFormat getKMFormatter() { sascha@3216: return Formatter.getFixDeltaWKM(context); sascha@3216: } sascha@3216: sascha@3216: protected NumberFormat getDeltaWFormatter() { sascha@3216: return Formatter.getFixDeltaWDeltaW(context); sascha@3216: } sascha@3216: sascha@3397: protected NumberFormat getQFormatter() { sascha@3397: return Formatter.getFixDeltaWQ(context); sascha@3397: } sascha@3397: sascha@3402: protected NumberFormat getWFormatter() { sascha@3402: return Formatter.getFixDeltaWW(context); sascha@3402: } sascha@3402: sascha@3402: protected DateFormat getDateFormatter() { sascha@3402: CallMeta meta = context.getMeta(); sascha@3402: return Formatter.getDateFormatter( sascha@3402: meta, sascha@3402: Resources.getMsg( sascha@3402: meta, sascha@3402: CSV_T_FORMAT, sascha@3402: DEFAULT_CSV_T_FORMAT)); sascha@3402: } sascha@3402: sascha@3216: protected void writeCSVHeader(CSVWriter writer) { sascha@3216: log.debug("DeltaWtExporter.writeCSVHeader"); sascha@3216: felix@3644: /* issue825 felix@3644: km; Ereignis, Abfluss, GEMESSENER Wasserstand; Status (RECHTSBÜNDIG), del W felix@3644: */ felix@3644: sascha@3216: writer.writeNext(new String[] { sascha@3216: msg(CSV_KM_HEADER, DEFAULT_CSV_KM_HEADER), felix@3644: msg(CSV_T_HEADER, DEFAULT_CSV_T_HEADER), sascha@3402: msg(CSV_Q_HEADER, DEFAULT_CSV_Q_HEADER), sascha@3402: msg(CSV_W_HEADER, DEFAULT_CSV_W_HEADER), sascha@3398: msg(CSV_TRANGE_HEADER, DEFAULT_CSV_TRANGE_DESC_HEADER), sascha@3402: msg(CSV_DELTA_W_HEADER, DEFAULT_CSV_DELTA_W_HEADER) sascha@3216: }); sascha@3216: } sascha@3216: sascha@3216: @Override sascha@3216: protected void writePDF(OutputStream out) { sascha@3216: // TODO: Implement me! sascha@3216: } sascha@3216: } sascha@3216: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :