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);