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@3216: import de.intevation.flys.artifacts.model.fixings.FixResult; 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@3216: import java.text.NumberFormat; sascha@3216: sascha@3216: import java.util.ArrayList; sascha@3216: import java.util.Date; sascha@3216: import java.util.List; sascha@3216: import java.util.Locale; sascha@3216: sascha@3216: import org.apache.log4j.Logger; sascha@3216: sascha@3216: import org.w3c.dom.Document; sascha@3216: sascha@3216: public class DeltaWtExporter sascha@3216: extends AbstractExporter sascha@3216: { 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@3216: public static final String CSV_T_HEADER = sascha@3216: "export.fixings.deltawt.csv.header.t"; sascha@3216: sascha@3216: public static final String CSV_T_DESC_HEADER = sascha@3216: "export.fixings.deltawt.csv.header.description"; 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@3216: public static final String DEFAULT_CSV_T_HEADER = "Datum"; sascha@3216: sascha@3216: public static final String DEFAULT_CSV_T_DESC_HEADER = "Beschreibung"; sascha@3216: 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@3216: if (!(data instanceof FixResult)) { sascha@3216: log.warn("Invalid data stored in result."); sascha@3216: } sascha@3216: FixResult result = (FixResult)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@3216: sascha@3216: CallMeta meta = context.getMeta(); sascha@3216: Locale locale = Resources.getLocale(meta); sascha@3216: DateFormat dF = DateFormat.getDateInstance(DateFormat.SHORT, locale); sascha@3216: 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@3216: double deltaW = qwd.getDeltaW(); sascha@3216: Date date = qwd.getDate(); sascha@3216: String desc = qwd.getDescription(); sascha@3216: sascha@3216: String deltaWS = dwF.format(deltaW); sascha@3216: String dateS = dF.format(date); sascha@3216: sascha@3216: writer.writeNext(new String[] { sascha@3216: kmS, sascha@3216: deltaWS, sascha@3216: dateS, sascha@3216: desc != null ? desc : "" }); sascha@3216: } sascha@3216: } sascha@3216: } sascha@3216: sascha@3216: if (debug) { sascha@3216: log.debug("AnalysisPeriods: " + analysisPeriods.size()); sascha@3216: } sascha@3216: sascha@3216: for (KMIndex periods: analysisPeriods) { sascha@3216: sascha@3216: for (KMIndex.Entry kmEntry: periods) { sascha@3216: sascha@3216: String kmS = kmF.format(kmEntry.getKm()); sascha@3216: sascha@3216: for (AnalysisPeriod period: kmEntry.getValue()) { sascha@3216: QWD [] qwds = period.getQWDs(); sascha@3216: if (qwds != null) { sascha@3216: for (QWD qwd: qwds) { sascha@3216: double deltaW = qwd.getDeltaW(); sascha@3216: Date date = qwd.getDate(); sascha@3216: String desc = qwd.getDescription(); sascha@3216: sascha@3216: String deltaWS = dwF.format(deltaW); sascha@3216: String dateS = dF.format(date); sascha@3216: sascha@3216: writer.writeNext(new String[] { sascha@3216: kmS, sascha@3216: deltaWS, sascha@3216: dateS, sascha@3216: desc != null ? desc : "" }); sascha@3216: } sascha@3216: } sascha@3216: } sascha@3216: } sascha@3216: } sascha@3216: writer.flush(); sascha@3216: } sascha@3216: 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@3216: protected void writeCSVHeader(CSVWriter writer) { sascha@3216: log.debug("DeltaWtExporter.writeCSVHeader"); sascha@3216: sascha@3216: writer.writeNext(new String[] { sascha@3216: msg(CSV_KM_HEADER, DEFAULT_CSV_KM_HEADER), sascha@3216: msg(CSV_DELTA_W_HEADER, DEFAULT_CSV_DELTA_W_HEADER), sascha@3216: msg(CSV_T_HEADER, DEFAULT_CSV_T_HEADER), sascha@3216: msg(CSV_T_DESC_HEADER, DEFAULT_CSV_T_DESC_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 :