You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@batchee.apache.org by rm...@apache.org on 2015/11/24 12:29:03 UTC

incubator-batchee git commit: better header handling for CSVFormatFactory

Repository: incubator-batchee
Updated Branches:
  refs/heads/master ef9bfa9ba -> e915a6c8c


better header handling for CSVFormatFactory


Project: http://git-wip-us.apache.org/repos/asf/incubator-batchee/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-batchee/commit/e915a6c8
Tree: http://git-wip-us.apache.org/repos/asf/incubator-batchee/tree/e915a6c8
Diff: http://git-wip-us.apache.org/repos/asf/incubator-batchee/diff/e915a6c8

Branch: refs/heads/master
Commit: e915a6c8cd00c2253b8338f9aebd2cb41a765be0
Parents: ef9bfa9
Author: Romain Manni-Bucau <rm...@gmail.com>
Authored: Tue Nov 24 12:29:04 2015 +0100
Committer: Romain Manni-Bucau <rm...@gmail.com>
Committed: Tue Nov 24 12:29:04 2015 +0100

----------------------------------------------------------------------
 .../org/apache/batchee/csv/CSVFormatFactory.java | 19 ++++++++++++++++++-
 .../org/apache/batchee/csv/CommonsCsvWriter.java | 12 ++++++++++--
 2 files changed, 28 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-batchee/blob/e915a6c8/extensions/commons-csv/src/main/java/org/apache/batchee/csv/CSVFormatFactory.java
----------------------------------------------------------------------
diff --git a/extensions/commons-csv/src/main/java/org/apache/batchee/csv/CSVFormatFactory.java b/extensions/commons-csv/src/main/java/org/apache/batchee/csv/CSVFormatFactory.java
index 6be30a7..d14be4a 100644
--- a/extensions/commons-csv/src/main/java/org/apache/batchee/csv/CSVFormatFactory.java
+++ b/extensions/commons-csv/src/main/java/org/apache/batchee/csv/CSVFormatFactory.java
@@ -17,8 +17,15 @@
 package org.apache.batchee.csv;
 
 import org.apache.commons.csv.CSVFormat;
+import org.apache.commons.csv.CSVRecord;
 import org.apache.commons.csv.QuoteMode;
 
+import java.io.IOException;
+import java.io.StringReader;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
 class CSVFormatFactory {
     private CSVFormatFactory() {
         // no-op
@@ -75,7 +82,17 @@ class CSVFormatFactory {
             out = out.withHeader();
         }
         if (header != null && !header.trim().isEmpty()) {
-            out = out.withHeader(header.split(" *, *"));
+            try { // headers can have CSV header names so parse it there
+                final Iterator<CSVRecord> iterator = out.withHeader(new String[0]).parse(new StringReader(header + '\n' + header)).iterator();
+                final CSVRecord record = iterator.next();
+                final List<String> list = new ArrayList<String>(record.size());
+                for (final String h : record) {
+                    list.add(h);
+                }
+                out = out.withHeader(list.toArray(new String[record.size()]));
+            } catch (final IOException e) { // can't occur actually
+                out = out.withHeader(header.split(" *, *"));
+            }
         }
         if (skipHeaderRecord != null) {
             out = out.withSkipHeaderRecord(Boolean.parseBoolean(skipHeaderRecord));

http://git-wip-us.apache.org/repos/asf/incubator-batchee/blob/e915a6c8/extensions/commons-csv/src/main/java/org/apache/batchee/csv/CommonsCsvWriter.java
----------------------------------------------------------------------
diff --git a/extensions/commons-csv/src/main/java/org/apache/batchee/csv/CommonsCsvWriter.java b/extensions/commons-csv/src/main/java/org/apache/batchee/csv/CommonsCsvWriter.java
index 471a8f6..20d6d35 100644
--- a/extensions/commons-csv/src/main/java/org/apache/batchee/csv/CommonsCsvWriter.java
+++ b/extensions/commons-csv/src/main/java/org/apache/batchee/csv/CommonsCsvWriter.java
@@ -122,7 +122,7 @@ public class CommonsCsvWriter implements ItemWriter {
             (defaultMapper != null ? new BeanLocator.LocatorInstance<CsvWriterMapper>(defaultMapper, null) : null) :
             BeanLocator.Finder.get(locator).newInstance(CsvWriterMapper.class, mapper);
 
-        if ((header == null || header.isEmpty()) && Boolean.parseBoolean(writeHeaders) && DefaultMapper.class.isInstance(mapperInstance.getValue())) {
+        if ((header == null || header.isEmpty()) && Boolean.parseBoolean(writeHeaders) && DefaultMapper.class.isInstance(mapperInstance.getValue()) && checkpoint == null) {
             header = toListString(DefaultMapper.class.cast(mapperInstance.getValue()).getHeaders());
         }
         final CSVFormat format = newFormat();
@@ -138,7 +138,15 @@ public class CommonsCsvWriter implements ItemWriter {
     private String toListString(final Iterable<String> headers) {
         final StringBuilder b = new StringBuilder();
         for (final String s : headers) {
-            b.append(s).append(",");
+            final boolean quote = s.contains(",");
+            if (quote) {
+                b.append('"');
+            }
+            b.append(s);
+            if (quote) {
+                b.append('"');
+            }
+            b.append(",");
         }
         if (b.length() > 0) {
             b.setLength(b.length() - 1);