Mercurial > dive4elements > gnv-client
diff gnv-artifacts/src/main/java/de/intevation/gnv/exports/DefaultExport.java @ 230:f68ffbe974a0
Implemented an exporter for odv and csv exports.
gnv-artifacts/trunk@298 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Ingo Weinzierl <ingo.weinzierl@intevation.de> |
---|---|
date | Fri, 06 Nov 2009 10:56:18 +0000 |
parents | |
children | 2ceb4bf51cba |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/exports/DefaultExport.java Fri Nov 06 10:56:18 2009 +0000 @@ -0,0 +1,93 @@ +package de.intevation.gnv.exports; + +import org.apache.log4j.Logger; + +import au.com.bytecode.opencsv.CSVWriter; + +import java.util.List; +import java.util.Iterator; +import java.util.Collection; + +import java.io.UnsupportedEncodingException; +import java.io.IOException; +import java.io.OutputStreamWriter; +import java.io.OutputStream; + +import de.intevation.gnv.exports.Export.Profile; + +import de.intevation.gnv.geobackend.base.Result; +import de.intevation.gnv.geobackend.base.ResultDescriptor; + +import de.intevation.gnv.transition.exception.TransitionException; + +/** + * @author Sascha L. Teichmann (sascha.teichmann@intevation.de) + * @author Ingo Weinzierl (ingo.weinzierl@intevation.de) + */ +public class DefaultExport +implements Export +{ + private static Logger log = Logger.getLogger(DefaultExport.class); + + protected void writeData( + Profile profile, + Collection result, + CSVWriter writer + ) { + log.debug("create content for export."); + Iterator<Result> it = result.iterator(); + + ResultDescriptor rd = null; + int [] indices = null; + + String[] entries = new String[profile.numberColumns()]; + + while (it.hasNext()) { + Result res = it.next(); + + if (rd == null) { + rd = res.getResultDescriptor(); + String [] names = new String[entries.length]; + for (int i = 0; i < names.length; ++i) { + names[i] = profile.getHeader(i); + } + indices = rd.getColumnIndices(names); + } + for (int i = 0; i < entries.length; ++i) { + entries[i] = profile.toString( + i, res.getString(indices[i])); + } + writer.writeNext(entries); + } + } + + public void create( + Profile profile, + OutputStream outputStream, + Collection result + ) + throws + IOException, + UnsupportedEncodingException, + TransitionException + { + if (result == null) { + String msg = "No data given for generation of " + + profile.getType() + " file."; + log.error(msg); + throw new TransitionException(msg); + } + + CSVWriter writer = new CSVWriter( + new OutputStreamWriter( + outputStream, + profile.getEncoding()), + profile.getSeparator(), + profile.getQuoteCharacter(), + profile.getEscapeCharacter()); + + writeData(profile, result, writer); + + writer.close(); + } +}