ingo@230: package de.intevation.gnv.exports; ingo@230: ingo@230: import org.apache.log4j.Logger; ingo@230: ingo@230: import au.com.bytecode.opencsv.CSVWriter; ingo@230: ingo@230: import java.util.Iterator; ingo@230: import java.util.Collection; ingo@230: ingo@230: import java.io.UnsupportedEncodingException; ingo@230: import java.io.IOException; ingo@230: import java.io.OutputStreamWriter; ingo@230: import java.io.OutputStream; ingo@230: ingo@230: import de.intevation.gnv.geobackend.base.Result; ingo@230: tim@335: import de.intevation.gnv.state.exception.StateException; ingo@230: ingo@230: /** ingo@230: * @author Sascha L. Teichmann (sascha.teichmann@intevation.de) ingo@230: * @author Ingo Weinzierl (ingo.weinzierl@intevation.de) ingo@230: */ ingo@230: public class DefaultExport ingo@230: implements Export ingo@230: { ingo@230: private static Logger log = Logger.getLogger(DefaultExport.class); ingo@230: ingo@233: private Export.DataCollector collector; ingo@233: ingo@233: public DefaultExport(Export.DataCollector collector) { ingo@233: this.collector = collector; ingo@233: } ingo@233: ingo@230: protected void writeData( ingo@230: Profile profile, ingo@230: Collection result, ingo@230: CSVWriter writer ingo@233: ) tim@335: throws StateException { ingo@230: log.debug("create content for export."); ingo@230: Iterator it = result.iterator(); ingo@230: ingo@239: String[] header = profile.getHeader(); ingo@239: if (header != null) ingo@239: writer.writeNext(header); ingo@239: ingo@230: while (it.hasNext()) { ingo@230: Result res = it.next(); ingo@230: ingo@233: writer.writeNext(collector.getData(res)); ingo@230: } ingo@230: } ingo@230: ingo@230: public void create( ingo@230: Profile profile, ingo@230: OutputStream outputStream, ingo@230: Collection result ingo@230: ) ingo@230: throws ingo@230: IOException, ingo@230: UnsupportedEncodingException, tim@335: StateException ingo@230: { ingo@230: if (result == null) { ingo@230: String msg = "No data given for generation of " + ingo@230: profile.getType() + " file."; ingo@230: log.error(msg); tim@335: throw new StateException(msg); ingo@230: } ingo@230: ingo@230: CSVWriter writer = new CSVWriter( ingo@230: new OutputStreamWriter( ingo@230: outputStream, ingo@230: profile.getEncoding()), ingo@230: profile.getSeparator(), ingo@230: profile.getQuoteCharacter(), ingo@230: profile.getEscapeCharacter()); ingo@230: ingo@230: writeData(profile, result, writer); ingo@230: ingo@230: writer.close(); ingo@230: } ingo@230: }