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();
+    }
+}

http://dive4elements.wald.intevation.org