felix@1161: package de.intevation.flys.exports; felix@1161: felix@1161: import java.io.IOException; felix@1161: import java.io.OutputStream; felix@1161: import java.text.NumberFormat; felix@1161: import java.util.ArrayList; felix@1161: import java.util.List; felix@1161: felix@1161: import org.w3c.dom.Document; felix@1161: felix@1161: import org.apache.log4j.Logger; felix@1161: felix@1161: import au.com.bytecode.opencsv.CSVWriter; felix@1161: felix@1161: import de.intevation.artifacts.CallContext; felix@1161: felix@1161: import de.intevation.flys.artifacts.model.CalculationResult; felix@1161: import de.intevation.flys.artifacts.model.WKms; felix@1161: felix@1161: import de.intevation.flys.utils.Formatter; felix@1161: felix@1161: /** felix@1161: * (CSV)Exporter for WDifferences. felix@1161: */ felix@1161: public class WDifferencesExporter extends AbstractExporter { felix@1161: felix@1161: /** The logger used in this exporter. */ felix@1161: private static Logger logger = Logger.getLogger(WDifferencesExporter.class); felix@1161: felix@1161: felix@1705: public static final String WDIFF_CSV_KM_HEADER = felix@1161: "export.w_differences.csv.header.km"; felix@1161: felix@1705: public static final String WDIFF_CSV_W_HEADER = felix@1161: "export.w_differences.csv.header.w"; felix@1161: felix@1705: public static final String WDIFF_DEFAULT_CSV_KM_HEADER = "Fluss-Km"; felix@1705: public static final String WDIFF_DEFAULT_CSV_W_HEADER = "m"; felix@1161: felix@1161: felix@1161: /** The storage that contains all WKms objects for the different facets. */ felix@1161: protected List data; felix@1161: felix@1161: felix@1161: public void init(Document request, OutputStream out, CallContext context) { felix@1161: logger.debug("WDifferencesExporter.init"); felix@1161: felix@1161: super.init(request, out, context); felix@1161: felix@1161: this.data = new ArrayList(); felix@1161: } felix@1161: felix@1161: felix@1161: /** felix@1161: * Genereate data in csv format. felix@1161: */ felix@1161: @Override felix@1161: public void generate() felix@1161: throws IOException felix@1161: { felix@1161: logger.debug("WDifferencesExporter.generate"); felix@1161: felix@1161: if (facet == null) { felix@1161: throw new IOException("invalid (null) facet for exporter"); felix@1161: } felix@1161: else if (facet.equals(AbstractExporter.FACET_CSV)) { felix@1161: generateCSV(); felix@1161: } felix@1161: else { felix@1161: throw new IOException("invalid facet (" + facet + ") for exporter"); felix@1161: } felix@1161: } felix@1161: felix@1161: felix@1161: /** felix@1161: * Adds given data. felix@1161: * @param d either a WKms or a CalculationResult to add to data. felix@1161: */ felix@1161: @Override felix@1161: protected void addData(Object d) { felix@1161: if (d instanceof CalculationResult) { felix@1161: d = ((CalculationResult)d).getData(); felix@1161: if (d instanceof WKms []) { felix@1161: data.add((WKms [])d); felix@1161: } felix@1161: } felix@1161: else if (d instanceof WKms) { felix@1161: data.add(new WKms[] { (WKms) d }); felix@1161: } felix@1161: } felix@1161: felix@1161: felix@1161: /** felix@1161: * Lets writer write all data (including header). felix@1161: * @param writer Writer to write data with. felix@1161: */ felix@1161: @Override felix@1161: protected void writeCSVData(CSVWriter writer) { felix@1161: logger.info("WDifferencesExporter.writeData"); felix@1161: felix@1161: writeCSVHeader(writer); felix@1161: felix@1161: for (WKms[] tmp: data) { felix@1161: for (WKms wkms: tmp) { felix@1161: wKms2CSV(writer, wkms); felix@1161: } felix@1161: } felix@1161: } felix@1161: felix@1161: felix@1161: /** felix@1161: * Lets csvwriter write the header (first line in file). felix@1161: * @param write Writer to write header with. felix@1161: */ felix@1161: protected void writeCSVHeader(CSVWriter writer) { felix@1161: logger.info("WDifferencesExporter.writeCSVHeader"); felix@1161: felix@1161: writer.writeNext(new String[] { felix@1705: msg(WDIFF_CSV_KM_HEADER, WDIFF_DEFAULT_CSV_KM_HEADER), felix@1705: msg(WDIFF_CSV_W_HEADER, WDIFF_DEFAULT_CSV_W_HEADER) felix@1161: }); felix@1161: } felix@1161: felix@1161: felix@1161: protected void wKms2CSV(CSVWriter writer, WKms wkms) { felix@1161: logger.debug("WDifferencesExporter.wQKms2CSV"); felix@1161: felix@1161: NumberFormat kmf = getKmFormatter(); felix@1161: NumberFormat wf = getWFormatter(); felix@1161: int size = wkms.size(); felix@1161: felix@1161: for (int i = 0; i < size; i ++) { felix@1161: felix@1161: writer.writeNext(new String[] { felix@1161: kmf.format(wkms.getKm(i)), felix@1161: wf.format(wkms.getW(i)) felix@1161: }); felix@1161: } felix@1161: } felix@1161: felix@1161: felix@1161: /** felix@1161: * Returns the number formatter for kilometer values. felix@1161: * felix@1161: * @return the number formatter for kilometer values. felix@1161: */ felix@1161: protected NumberFormat getKmFormatter() { felix@1161: return Formatter.getWaterlevelKM(context); felix@1161: } felix@1161: felix@1161: felix@1161: /** felix@1161: * Returns the number formatter for W values. felix@1161: * felix@1161: * @return the number formatter for W values. felix@1161: */ felix@1161: protected NumberFormat getWFormatter() { felix@1161: return Formatter.getWaterlevelW(context); felix@1161: } felix@1161: } felix@1161: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :