Mercurial > dive4elements > river
view flys-artifacts/src/main/java/de/intevation/flys/exports/WaterlevelExporter.java @ 389:69d05357c177
Added an exporter (OutGenerator) for waterlevels which currently supports CSV exports.
flys-artifacts/trunk@1810 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Ingo Weinzierl <ingo.weinzierl@intevation.de> |
---|---|
date | Tue, 03 May 2011 16:36:21 +0000 |
parents | |
children | 5d6988836f01 |
line wrap: on
line source
package de.intevation.flys.exports; import java.io.IOException; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.util.ArrayList; import java.util.List; import org.w3c.dom.Document; import org.apache.log4j.Logger; import au.com.bytecode.opencsv.CSVWriter; import de.intevation.artifacts.Artifact; import de.intevation.artifacts.CallContext; import de.intevation.flys.artifacts.WINFOArtifact; import de.intevation.flys.artifacts.model.WQKms; /** * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a> */ public class WaterlevelExporter implements OutGenerator { /** The logger used in this exporter.*/ private static Logger logger = Logger.getLogger(WaterlevelExporter.class); public static final String WATERLEVEL_FACET_CSV = "waterlevel_export.csv"; public static final String DEFAULT_CSV_CHARSET = "UTF-8"; public static final char DEFAULT_CSV_SEPARATOR = ','; /** The document of the incoming out() request.*/ protected Document request; /** The output stream where the data should be written to.*/ protected OutputStream out; /** The CallContext object.*/ protected CallContext context; /** The selected facet.*/ protected String facet; /** The storage that contains all WQKms objects for the different facets.*/ protected List<WQKms[]> data; public void init(Document request, OutputStream out, CallContext context) { logger.debug("WaterlevelExporter.init"); this.request = request; this.out = out; this.context = context; this.data = new ArrayList<WQKms[]>(); } /** * This doOut() just collects the data of multiple artifacts. The real data * generation takes place in the concrete generate() methods. * * @param artifact The artifact. * @param facet The facet to add - NOTE: the facet needs to fit to the first * facet inserted into this exporter. Otherwise this artifact/facet is * skipped. * @param attr The attr document. */ public void doOut(Artifact artifact, String facet, Document attr) { logger.debug("WaterlevelExporter.doOut: " + facet); if (!isFacetValid(facet)) { logger.warn("Facet '" + facet + "' not valid. No output created!"); return; } data.add(getWaterlevelData(artifact)); } public void generate() throws IOException { if (facet != null && facet.equals(WATERLEVEL_FACET_CSV)) { generateCSV(); } else { throw new IOException("invalid facet for exporter."); } } /** * Determines if the desired facet is valid for this exporter. If no facet * is currently set, <i>facet</i> is set. * * @param facet The desired facet. * * @return true, if <i>facet</i> is valid, otherwise false. */ protected boolean isFacetValid(String facet) { logger.debug("WaterlevelExporter.isFacetValid"); if (facet == null || facet.length() == 0) { return false; } else if (this.facet == null || this.facet.length() == 0) { logger.debug("Set the facet of this export: " + facet); this.facet = facet; return true; } else { return this.facet.equals(facet); } } /** * Returns the waterlevel data computed by the WINFOArtifact. * * @param artifact The WINFOArtifact. * * @return the computed waterlevel data. */ protected WQKms[] getWaterlevelData(Artifact artifact) { WINFOArtifact winfoArtifact = (WINFOArtifact) artifact; WQKms[] wqkms = winfoArtifact.getWaterlevelData(); logger.debug("Got " + wqkms.length + " WQKms objects."); return wqkms; } protected void generateCSV() throws IOException { logger.info("WaterlevelExporter.generateCSV"); CSVWriter writer = new CSVWriter( new OutputStreamWriter( out, DEFAULT_CSV_CHARSET), DEFAULT_CSV_SEPARATOR); for (WQKms[] tmp: data) { for (WQKms wqkms: tmp) { wQKms2CSV(writer, wqkms); } } writer.close(); } protected void wQKms2CSV(CSVWriter writer, WQKms wqkms) { logger.debug("WaterlevelExporter.wQKms2CSV"); int size = wqkms.size(); double[] result = new double[3]; for (int i = 0; i < size; i ++) { result = wqkms.get(i, result); writer.writeNext(new String[] { Double.toString(result[2]), Double.toString(result[0]), Double.toString(result[1]) }); } } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :