ingo@389: package de.intevation.flys.exports; ingo@389: ingo@389: import java.io.OutputStream; ingo@418: import java.text.NumberFormat; ingo@389: import java.util.ArrayList; ingo@389: import java.util.List; ingo@389: ingo@389: import org.w3c.dom.Document; ingo@389: ingo@389: import org.apache.log4j.Logger; ingo@389: ingo@389: import au.com.bytecode.opencsv.CSVWriter; ingo@389: ingo@389: import de.intevation.artifacts.Artifact; ingo@389: import de.intevation.artifacts.CallContext; ingo@389: ingo@389: import de.intevation.flys.artifacts.WINFOArtifact; ingo@389: import de.intevation.flys.artifacts.model.WQKms; ingo@445: import de.intevation.flys.utils.Formatter; ingo@389: ingo@389: ingo@389: /** ingo@389: * @author Ingo Weinzierl ingo@389: */ ingo@391: public class WaterlevelExporter extends AbstractExporter { ingo@389: ingo@389: /** The logger used in this exporter.*/ ingo@389: private static Logger logger = Logger.getLogger(WaterlevelExporter.class); ingo@389: ingo@389: ingo@416: public static final String CSV_KM_HEADER = ingo@416: "export.waterlevel.csv.header.km"; ingo@416: ingo@416: public static final String CSV_W_HEADER = ingo@416: "export.waterlevel.csv.header.w"; ingo@416: ingo@416: public static final String CSV_Q_HEADER = ingo@416: "export.waterlevel.csv.header.q"; ingo@416: ingo@416: public static final String DEFAULT_CSV_KM_HEADER = "Fluss-Km"; ingo@416: public static final String DEFAULT_CSV_W_HEADER = "W [NN + m]"; ingo@416: public static final String DEFAULT_CSV_Q_HEADER = "Q [m³/s]"; ingo@416: ingo@416: ingo@389: /** The storage that contains all WQKms objects for the different facets.*/ ingo@389: protected List data; ingo@389: ingo@389: ingo@389: public void init(Document request, OutputStream out, CallContext context) { ingo@389: logger.debug("WaterlevelExporter.init"); ingo@389: ingo@391: super.init(request, out, context); ingo@389: ingo@391: this.data = new ArrayList(); ingo@389: } ingo@389: ingo@389: ingo@391: protected void addData(Artifact artifact) { ingo@391: data.add(getWaterlevelData(artifact)); ingo@389: } ingo@389: ingo@389: ingo@389: /** ingo@389: * Returns the waterlevel data computed by the WINFOArtifact. ingo@389: * ingo@389: * @param artifact The WINFOArtifact. ingo@389: * ingo@389: * @return the computed waterlevel data. ingo@389: */ ingo@389: protected WQKms[] getWaterlevelData(Artifact artifact) { ingo@389: WINFOArtifact winfoArtifact = (WINFOArtifact) artifact; ingo@389: WQKms[] wqkms = winfoArtifact.getWaterlevelData(); ingo@389: ingo@389: logger.debug("Got " + wqkms.length + " WQKms objects."); ingo@389: ingo@389: return wqkms; ingo@389: } ingo@389: ingo@389: ingo@391: protected void writeCSVData(CSVWriter writer) { ingo@391: logger.info("WaterlevelExporter.writeData"); ingo@389: ingo@416: writeCSVHeader(writer); ingo@416: ingo@389: for (WQKms[] tmp: data) { ingo@389: for (WQKms wqkms: tmp) { ingo@389: wQKms2CSV(writer, wqkms); ingo@389: } ingo@389: } ingo@389: } ingo@389: ingo@389: ingo@416: protected void writeCSVHeader(CSVWriter writer) { ingo@416: logger.info("WaterlevelExporter.writeCSVHeader"); ingo@416: ingo@416: writer.writeNext(new String[] { ingo@416: msg(CSV_KM_HEADER, DEFAULT_CSV_KM_HEADER), ingo@416: msg(CSV_W_HEADER, DEFAULT_CSV_W_HEADER), ingo@416: msg(CSV_Q_HEADER, DEFAULT_CSV_Q_HEADER) ingo@416: }); ingo@416: } ingo@416: ingo@416: ingo@389: protected void wQKms2CSV(CSVWriter writer, WQKms wqkms) { ingo@389: logger.debug("WaterlevelExporter.wQKms2CSV"); ingo@389: ingo@418: NumberFormat kmf = getKmFormatter(); ingo@418: NumberFormat wf = getWFormatter(); ingo@418: NumberFormat qf = getQFormatter(); ingo@418: ingo@389: int size = wqkms.size(); ingo@389: double[] result = new double[3]; ingo@389: ingo@389: for (int i = 0; i < size; i ++) { ingo@389: result = wqkms.get(i, result); ingo@389: ingo@389: writer.writeNext(new String[] { ingo@418: kmf.format(result[2]), ingo@418: wf.format(result[0]), ingo@418: qf.format(result[1]) ingo@389: }); ingo@389: } ingo@389: } ingo@418: ingo@418: ingo@418: /** ingo@418: * Returns the number formatter for kilometer values. ingo@418: * ingo@418: * @return the number formatter for kilometer values. ingo@418: */ ingo@418: protected NumberFormat getKmFormatter() { ingo@445: return Formatter.getWaterlevelKM(context); ingo@418: } ingo@418: ingo@418: ingo@418: /** ingo@418: * Returns the number formatter for W values. ingo@418: * ingo@418: * @return the number formatter for W values. ingo@418: */ ingo@418: protected NumberFormat getWFormatter() { ingo@445: return Formatter.getWaterlevelW(context); ingo@418: } ingo@418: ingo@418: ingo@418: /** ingo@418: * Returns the number formatter for Q values. ingo@418: * ingo@418: * @return the number formatter for Q values. ingo@418: */ ingo@418: protected NumberFormat getQFormatter() { ingo@445: return Formatter.getWaterlevelQ(context); ingo@418: } ingo@389: } ingo@389: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :