This is an automated email from the ASF dual-hosted git repository.
sgoeschl pushed a commit to branch FREEMARKER-146
in repository https://gitbox.apache.org/repos/asf/freemarker-generator.git
The following commit(s) were added to refs/heads/FREEMARKER-146 by this push:
new 3903694 FREEMARKER-146 Cleanly separate example templates and data
from user-supplied content
3903694 is described below
commit 39036942982696dc518053ed40053074e3df5ce4
Author: Siegfried Goeschl <[email protected]>
AuthorDate: Tue Jun 23 19:48:05 2020 +0200
FREEMARKER-146 Cleanly separate example templates and data from
user-supplied content
---
CHANGELOG.md | 4 +-
freemarker-generator-cli/README.md | 2 +-
.../examples/templates/dataframe/example.ftl | 16 ++++-
.../examples/templates/excel/csv/custom.ftl | 4 +-
freemarker-generator-cli/run-examples.sh | 2 +-
.../src/main/scripts/run-examples.sh | 2 +-
.../freemarker/generator/cli/ExamplesTest.java | 2 +-
.../freemarker/generator/cli/ManualTest.java | 4 +-
.../templates/csv/csv/transform.ftl | 41 +++++++----
.../templates/csv/html/transform.ftl | 17 +++--
.../templates/csv/md/transform.ftl | 31 +++++---
.../templates/excel/csv/transform.ftl | 17 +++--
.../tools/commonscsv/CommonsCSVPrinterFacade.java | 84 ++++++++++++++++++++++
.../generator/tools/commonscsv/CommonsCSVTool.java | 77 +++-----------------
.../tools/commonscsv/CommonsCSVToolTest.java | 10 +--
15 files changed, 195 insertions(+), 118 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 045191a..2d33b61 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -16,6 +16,7 @@ All notable changes to this project will be documented in
this file. We try to a
* [FREEMARKER-129] Migrate `freemarker-cli` into `freemarker-generator`
project (see
[https://github.com/sgoeschl/freemarker-cli](https://github.com/sgoeschl/freemarker-cli))
### Changed
+* [FREEMARKER-146] Cleanly separate example templates and data from
user-supplied content
* `DataSource` use `uri` instead of `location`
* [FREEMARKER-138] freemarker-generator: Rename `Datasource` to `DataSource`
* [FREEMARKER-136] Fix broken `site:stage` build
@@ -40,4 +41,5 @@ All notable changes to this project will be documented in
this file. We try to a
[FREEMARKER-138]: https://issues.apache.org/jira/browse/FREEMARKER-138
[FREEMARKER-139]: https://issues.apache.org/jira/browse/FREEMARKER-139
[FREEMARKER-142]: https://issues.apache.org/jira/browse/FREEMARKER-142
-[FREEMARKER-144]: https://issues.apache.org/jira/browse/FREEMARKER-144
\ No newline at end of file
+[FREEMARKER-144]: https://issues.apache.org/jira/browse/FREEMARKER-144
+[FREEMARKER-146]: https://issues.apache.org/jira/browse/FREEMARKER-146
\ No newline at end of file
diff --git a/freemarker-generator-cli/README.md
b/freemarker-generator-cli/README.md
index b8b7d2a..168b8fc 100644
--- a/freemarker-generator-cli/README.md
+++ b/freemarker-generator-cli/README.md
@@ -894,7 +894,7 @@ While this looks small and tidy there are some nifty
features
Sometimes you have a CSV file which is not quite right - you need to change
the format. Lets have a look how `freemarker-cli` can help
-> bin/freemarker-cli -DCVS_IN_DELIMITER=COMMA -DCSV_OUT_DELIMITER=PIPE -t
templates/csv/csv/transform.ftl ./examples/data/csv/contract.csv
+> bin/freemarker-cli -PCVS_IN_DELIMITER=COMMA -PCSV_OUT_DELIMITER=PIPE -t
templates/csv/csv/transform.ftl ./examples/data/csv/contract.csv
renders the following template
diff --git a/freemarker-generator-cli/examples/templates/dataframe/example.ftl
b/freemarker-generator-cli/examples/templates/dataframe/example.ftl
index 54d0ac2..16c6a51 100644
--- a/freemarker-generator-cli/examples/templates/dataframe/example.ftl
+++ b/freemarker-generator-cli/examples/templates/dataframe/example.ftl
@@ -15,7 +15,8 @@
specific language governing permissions and limitations
under the License.
-->
-<#assign csvParser = CSVTool.parse(DataSources.get(0))>
+<#assign dataSource = DataSources.get(0)>
+<#assign csvParser = CSVTool.parse(dataSource, csvInFormat())>
<#assign users = DataFrameTool.fromCSVParser(csvParser)>
Original Data
@@ -44,5 +45,14 @@
${DataFrameTool.print(users.getColumn("country").transform(DataFrameTool.transfo
Group By Age & Country
=============================================================================
${DataFrameTool.print(users.groupBy("country", "age").sort("country"))}
-
-
+<#--------------------------------------------------------------------------->
+<#function csvInFormat>
+ <#assign format = CSVTool.formats[CSV_IN_FORMAT!"DEFAULT"]>
+ <#assign delimiter =
CSVTool.toDelimiter(CSV_IN_DELIMITER!format.getDelimiter())>
+ <#assign withHeader = CSV_IN_WITH_HEADER!"false">
+ <#assign format = format.withDelimiter(delimiter)>
+ <#if withHeader?boolean>
+ <#assign format = format.withHeader()>
+ </#if>
+ <#return format>
+</#function>
diff --git a/freemarker-generator-cli/examples/templates/excel/csv/custom.ftl
b/freemarker-generator-cli/examples/templates/excel/csv/custom.ftl
index a045bd3..d73623b 100644
--- a/freemarker-generator-cli/examples/templates/excel/csv/custom.ftl
+++ b/freemarker-generator-cli/examples/templates/excel/csv/custom.ftl
@@ -15,7 +15,7 @@
specific language governing permissions and limitations
under the License.
-->
-<#assign format = CVS_FORMAT!"DEFAULT">
+<#assign format = CSV_OUT_FORMAT!"DEFAULT">
<#assign salt = SystemTool.parameters["salt"]!"salt">
<#-- Parse the first data source & sheet of the Excel document -->
<#assign workbook = ExcelTool.parse(DataSources.get(0))>
@@ -23,7 +23,7 @@
<#assign records = ExcelTool.toTable(sheet)>
<#-- Setup CSVPrinter -->
<#assign cvsFormat = CSVTool.formats[format]>
-<#assign csvPrinter = CSVTool.printer(cvsFormat, SystemTool.writer)>
+<#assign csvPrinter = CSVTool.printer(cvsFormat)>
<#--
Transform an arbitrary Excel file and add addition columns using Commons
CSV
We are using an instance of CSVPrinter directly have proper quoting of the
output
diff --git a/freemarker-generator-cli/run-examples.sh
b/freemarker-generator-cli/run-examples.sh
index a8993da..d8d7925 100755
--- a/freemarker-generator-cli/run-examples.sh
+++ b/freemarker-generator-cli/run-examples.sh
@@ -106,7 +106,7 @@ fi
#############################################################################
echo "examples/templates/dataframe/example.ftl"
-$FREEMARKER_CMD -DCSV_IN_DELIMITER=SEMICOLON -DCSV_IN_WITH_HEADER=true -t
examples/templates/dataframe/example.ftl examples/data/csv/dataframe.csv >
target/out/dataframe.txt || { echo >&2 "Test failed. Aborting."; exit 1; }
+$FREEMARKER_CMD -PCSV_IN_DELIMITER=SEMICOLON -PCSV_IN_WITH_HEADER=true -t
examples/templates/dataframe/example.ftl examples/data/csv/dataframe.csv >
target/out/dataframe.txt || { echo >&2 "Test failed. Aborting."; exit 1; }
#############################################################################
# Grok
diff --git a/freemarker-generator-cli/src/main/scripts/run-examples.sh
b/freemarker-generator-cli/src/main/scripts/run-examples.sh
index f467c9d..b95e700 100755
--- a/freemarker-generator-cli/src/main/scripts/run-examples.sh
+++ b/freemarker-generator-cli/src/main/scripts/run-examples.sh
@@ -106,7 +106,7 @@ fi
#############################################################################
echo "examples/templates/dataframe/example.ftl"
-$FREEMARKER_CMD -DCSV_IN_DELIMITER=SEMICOLON -DCSV_IN_WITH_HEADER=true -t
examples/templates/dataframe/example.ftl examples/data/csv/dataframe.csv >
target/out/dataframe.txt || { echo >&2 "Test failed. Aborting."; exit 1; }
+$FREEMARKER_CMD -PCSV_IN_DELIMITER=SEMICOLON -PCSV_IN_WITH_HEADER=true -t
examples/templates/dataframe/example.ftl examples/data/csv/dataframe.csv >
target/out/dataframe.txt || { echo >&2 "Test failed. Aborting."; exit 1; }
#############################################################################
# Grok
diff --git
a/freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/ExamplesTest.java
b/freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/ExamplesTest.java
index 1d72527..63c792f 100644
---
a/freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/ExamplesTest.java
+++
b/freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/ExamplesTest.java
@@ -105,7 +105,7 @@ public class ExamplesTest extends AbstractMainTest {
@Test
public void shouldRunDataFrameExamples() throws IOException {
- assertValid(execute("-DCSV_IN_DELIMITER=SEMICOLON
-DCSV_IN_WITH_HEADER=true -t examples/templates/dataframe/example.ftl
examples/data/csv/dataframe.csv"));
+ assertValid(execute("-PCSV_IN_DELIMITER=SEMICOLON
-PCSV_IN_WITH_HEADER=true -t examples/templates/dataframe/example.ftl
examples/data/csv/dataframe.csv"));
}
@Test
diff --git
a/freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/ManualTest.java
b/freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/ManualTest.java
index 09c1f79..b12488a 100644
---
a/freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/ManualTest.java
+++
b/freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/ManualTest.java
@@ -24,8 +24,8 @@ import java.util.Arrays;
public class ManualTest {
private static final String SPACE = " ";
- // private static final String CMD = "-DCSV_IN_DELIMITER=SEMICOLON
-DCSV_IN_WITH_HEADER=true -t examples/templates/dataframe/example.ftl
https://raw.githubusercontent.com/nRo/DataFrame/master/src/test/resources/users.csv";
- private static final String CMD = "-DCSV_IN_FORMAT=DEFAULT
-DCSV_OUT_FORMAT=INFORMIX_UNLOAD -t templates/csv/csv/transform.ftl
examples/data/csv/contract.csv";
+ private static final String CMD = "-PCSV_IN_FORMAT=DATAFRAME -t
examples/templates/dataframe/example.ftl
https://raw.githubusercontent.com/nRo/DataFrame/master/src/test/resources/users.csv";
+ // private static final String CMD = "-PCSV_IN_WITH_HEADER=true
-PCSV_IN_FORMAT=DEFAULT -PCSV_OUT_FORMAT=EXCEL -t
templates/csv/csv/transform.ftl examples/data/csv/contract.csv";
public static void main(String[] args) {
Main.execute(toArgs(CMD));
diff --git a/freemarker-generator-cli/templates/csv/csv/transform.ftl
b/freemarker-generator-cli/templates/csv/csv/transform.ftl
index 587ebfe..0976ef0 100644
--- a/freemarker-generator-cli/templates/csv/csv/transform.ftl
+++ b/freemarker-generator-cli/templates/csv/csv/transform.ftl
@@ -1,4 +1,3 @@
-<#ftl output_format="plainText" strip_text="true">
<#--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
@@ -15,15 +14,31 @@
specific language governing permissions and limitations
under the License.
-->
-<#assign csvParser = CSVTool.parse(DataSources.get(0))>
-<#assign csvPrinter = CSVTool.printer(SystemTool.writer)>
-<#--
- Print each record directly to the underyling writer without materializing
the CSV in memory.
- FreeMarker and CSV output are out of sync but millions of records can
processed without
- running out of memory.
--->
-<#compress>
- <#list csvParser.iterator() as record>
- ${csvPrinter.printRecord(record)}
- </#list>
-</#compress>
\ No newline at end of file
+<#assign dataSource = DataSources.get(0)>
+<#assign csvParser = CSVTool.parse(dataSource, csvInFormat())>
+<#assign csvPrinter = CSVTool.printer(csvOutFormat())>
+<#list csvParser.iterator() as record>
+ ${csvPrinter.printRecord(record)}<#t>
+</#list>
+
+<#function csvInFormat>
+ <#assign format = CSVTool.formats[CSV_IN_FORMAT!"DEFAULT"]>
+ <#assign delimiter =
CSVTool.toDelimiter(CSV_IN_DELIMITER!format.getDelimiter())>
+ <#assign withHeader = CSV_IN_WITH_HEADER!"false">
+ <#assign format = format.withDelimiter(delimiter)>
+ <#if withHeader?boolean>
+ <#assign format = format.withHeader()>
+ </#if>
+ <#return format>
+</#function>
+
+<#function csvOutFormat>
+ <#assign format = CSVTool.formats[CSV_OUT_FORMAT!"DEFAULT"]>
+ <#assign delimiter =
CSVTool.toDelimiter(CSV_OUT_DELIMITER!format.getDelimiter())>
+ <#assign withHeader = CSV_OUT_WITH_HEADER!"false">
+ <#assign format = format.withDelimiter(delimiter)>
+ <#if withHeader?boolean>
+ <#assign format = format.withHeader>
+ </#if>
+ <#return format>
+</#function>
diff --git a/freemarker-generator-cli/templates/csv/html/transform.ftl
b/freemarker-generator-cli/templates/csv/html/transform.ftl
index 3e3c2b8..af62744 100644
--- a/freemarker-generator-cli/templates/csv/html/transform.ftl
+++ b/freemarker-generator-cli/templates/csv/html/transform.ftl
@@ -16,15 +16,13 @@
under the License.
-->
<#assign dataSource = DataSources.get(0)>
-<#assign name = dataSource.name>
-<#assign csvParser = CSVTool.parse(dataSource)>
-<#assign csvPrinter = CSVTool.printer(SystemTool.writer)>
+<#assign csvParser = CSVTool.parse(dataSource, csvInFormat())>
<#assign csvHeaders = csvParser.getHeaderNames()>
<#--------------------------------------------------------------------------->
<!DOCTYPE html>
<html>
<head>
- <title>${name}</title>
+ <title>${dataSource.name}</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet"
href="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css">
@@ -54,3 +52,14 @@
</#list>
</tr>
</#macro>
+<#--------------------------------------------------------------------------->
+<#function csvInFormat>
+ <#assign format = CSVTool.formats[CSV_IN_FORMAT!"DEFAULT"]>
+ <#assign delimiter =
CSVTool.toDelimiter(CSV_IN_DELIMITER!format.getDelimiter())>
+ <#assign withHeader = CSV_IN_WITH_HEADER!"false">
+ <#assign format = format.withDelimiter(delimiter)>
+ <#if withHeader?boolean>
+ <#assign format = format.withHeader()>
+ </#if>
+ <#return format>
+</#function>
diff --git a/freemarker-generator-cli/templates/csv/md/transform.ftl
b/freemarker-generator-cli/templates/csv/md/transform.ftl
index ff2e09a..fbd2c9f 100644
--- a/freemarker-generator-cli/templates/csv/md/transform.ftl
+++ b/freemarker-generator-cli/templates/csv/md/transform.ftl
@@ -1,4 +1,3 @@
-<#ftl output_format="plainText">
<#--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
@@ -15,22 +14,36 @@
specific language governing permissions and limitations
under the License.
-->
-<#assign csvParser = CSVTool.parse(DataSources.get(0))>
-<#assign csvHeaders = csvParser.getHeaderMap()?keys>
-<#assign csvRecords = csvParser.records>
+<#assign dataSource = DataSources.get(0)>
+<#assign csvParser = CSVTool.parse(dataSource, csvInFormat())>
+<#assign headers = (csvParser.getHeaderMap()!{})?keys>
+<#assign records = csvParser.records>
<#--------------------------------------------------------------------------->
<#compress>
-<@writeHeaders headers=csvHeaders/>
-<@writeColums columns=csvRecords/>
+ <@writeHeaders headers/>
+ <@writeColums records/>
</#compress>
<#--------------------------------------------------------------------------->
<#macro writeHeaders headers>
-| ${csvHeaders?join(" | ", "")} |
- <#list csvHeaders as csvHeader>| --------</#list>|
+ <#if headers?has_content>
+ | ${headers?join(" | ", "")} |
+ <#list headers as header>| --------</#list>|
+ </#if>
</#macro>
<#--------------------------------------------------------------------------->
<#macro writeColums columns>
<#list columns as column>
- | ${column.iterator()?join(" | ", "")} |
+ | ${column.iterator()?join(" | ", "")} |
</#list>
</#macro>
+<#--------------------------------------------------------------------------->
+<#function csvInFormat>
+ <#assign format = CSVTool.formats[CSV_IN_FORMAT!"DEFAULT"]>
+ <#assign delimiter =
CSVTool.toDelimiter(CSV_IN_DELIMITER!format.getDelimiter())>
+ <#assign withHeader = CSV_IN_WITH_HEADER!"false">
+ <#assign format = format.withDelimiter(delimiter)>
+ <#if withHeader?boolean>
+ <#assign format = format.withHeader()>
+ </#if>
+ <#return format>
+</#function>
diff --git a/freemarker-generator-cli/templates/excel/csv/transform.ftl
b/freemarker-generator-cli/templates/excel/csv/transform.ftl
index babec81..ec4f35c 100644
--- a/freemarker-generator-cli/templates/excel/csv/transform.ftl
+++ b/freemarker-generator-cli/templates/excel/csv/transform.ftl
@@ -20,7 +20,7 @@
<#assign sheet = ExcelTool.getSheets(workbook)[0]>
<#assign records = ExcelTool.toTable(sheet)>
<#-- Setup CSVPrinter -->
-<#assign csvPrinter = createCsvPrinter()>
+<#assign csvPrinter = CSVTool.printer(csvOutFormat())>
<#-- Print each line of the Excel as CSV record -->
<#compress>
<#list records as record>
@@ -28,9 +28,14 @@
</#list>
</#compress>
<#--------------------------------------------------------------------------->
-<#function createCsvPrinter>
- <#assign initialCvsOutFormat = CSVTool.formats[CSV_OUT_FORMAT!"DEFAULT"]>
- <#assign csvOutDelimiter =
CSVTool.toDelimiter(CSV_OUT_DELIMITER!initialCvsOutFormat.getDelimiter())>
- <#assign cvsOutFormat = initialCvsOutFormat.withDelimiter(csvOutDelimiter)>
- <#return CSVTool.printer(cvsOutFormat, SystemTool.writer)>
+<#function csvOutFormat>
+ <#assign format = CSVTool.formats[CSV_OUT_FORMAT!"DEFAULT"]>
+ <#assign delimiter =
CSVTool.toDelimiter(CSV_OUT_DELIMITER!format.getDelimiter())>
+ <#assign withHeader = CSV_OUT_WITH_HEADER!"false">
+ <#assign format = format.withDelimiter(delimiter)>
+ <#if withHeader?boolean>
+ <#assign format = format.withHeader>
+ </#if>
+ <#return format>
</#function>
+
diff --git
a/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/commonscsv/CommonsCSVPrinterFacade.java
b/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/commonscsv/CommonsCSVPrinterFacade.java
new file mode 100644
index 0000000..b8c0574
--- /dev/null
+++
b/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/commonscsv/CommonsCSVPrinterFacade.java
@@ -0,0 +1,84 @@
+package org.apache.freemarker.generator.tools.commonscsv;
+
+import org.apache.commons.csv.CSVFormat;
+import org.apache.commons.csv.CSVPrinter;
+
+import java.io.Closeable;
+import java.io.Flushable;
+import java.io.IOException;
+import java.io.StringWriter;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+
+/**
+ * Wrap <code>CSVPrinter</code> so each print method returns
+ * a string to be rendered by FreeMarker instead of writing to an
+ * internal writer.
+ */
+public class CommonsCSVPrinterFacade implements Flushable, Closeable {
+
+ private final StringWriter writer;
+ private final CSVPrinter csvPrinter;
+
+ public CommonsCSVPrinterFacade(CSVFormat format) throws IOException {
+ this.writer = new StringWriter();
+ this.csvPrinter = new CSVPrinter(writer, format);
+ }
+
+ @Override
+ public void close() throws IOException {
+ csvPrinter.close();
+ }
+
+ @Override
+ public void flush() throws IOException {
+ csvPrinter.flush();
+ }
+
+ public String print(Object value) throws IOException {
+ csvPrinter.print(value);
+ return getOutput();
+ }
+
+ public String printComment(String comment) throws IOException {
+ csvPrinter.printComment(comment);
+ return getOutput();
+ }
+
+ public String println() throws IOException {
+ csvPrinter.println();
+ return getOutput();
+ }
+
+ public String printRecord(Iterable<?> values) throws IOException {
+ csvPrinter.printRecord(values);
+ return getOutput();
+ }
+
+ public String printRecord(Object... values) throws IOException {
+ csvPrinter.printRecord(values);
+ return getOutput();
+ }
+
+ public String printRecords(Iterable<?> values) throws IOException {
+ csvPrinter.printRecords(values);
+ return getOutput();
+ }
+
+ public String printRecords(Object... values) throws IOException {
+ csvPrinter.printRecords(values);
+ return getOutput();
+ }
+
+ public String printRecords(ResultSet resultSet) throws SQLException,
IOException {
+ csvPrinter.printRecords(resultSet);
+ return getOutput();
+ }
+
+ private String getOutput() {
+ writer.flush();
+ final String output = writer.getBuffer().toString();
+ writer.getBuffer().setLength(0);
+ return output;
+ }
+}
diff --git
a/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/commonscsv/CommonsCSVTool.java
b/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/commonscsv/CommonsCSVTool.java
index f315669..7d2eab6 100644
---
a/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/commonscsv/CommonsCSVTool.java
+++
b/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/commonscsv/CommonsCSVTool.java
@@ -18,7 +18,6 @@ package org.apache.freemarker.generator.tools.commonscsv;
import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVParser;
-import org.apache.commons.csv.CSVPrinter;
import org.apache.commons.csv.CSVRecord;
import org.apache.commons.io.input.BOMInputStream;
import org.apache.freemarker.generator.base.datasource.DataSource;
@@ -26,7 +25,6 @@ import org.apache.freemarker.generator.base.util.StringUtils;
import java.io.IOException;
import java.io.InputStream;
-import java.io.Writer;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.Collection;
@@ -37,7 +35,6 @@ import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
-import static java.lang.Boolean.parseBoolean;
import static java.nio.charset.StandardCharsets.UTF_8;
import static java.util.Objects.requireNonNull;
import static java.util.stream.Collectors.toList;
@@ -86,29 +83,12 @@ public class CommonsCSVTool {
return createCSVFormats();
}
- /**
- * Get a CSVPrinter using the FreeMarker's writer instance.
- *
- * @param writer Writer to receive the CSV output
- * @return CSVPrinter instance
- * @throws IOException thrown if the parameters of the format are
inconsistent or if either out or format are null.
- */
- public CSVPrinter printer(Writer writer) throws IOException {
- // We do not close the CSVPrinter but the underlying writer at the of
processing
- return new CSVPrinter(writer, defaultCSVOutputFormat());
+ public CommonsCSVPrinterFacade printer() throws IOException {
+ return printer(defaultCSVOutputFormat());
}
- /**
- * Get a CSVPrinter using the FreeMarker's writer instance.
- *
- * @param csvFormat CSV format to use for writing records
- * @param writer Writer to receive the CSV output
- * @return CSVPrinter instance
- * @throws IOException thrown if the parameters of the format are
inconsistent or if either out or format are null.
- */
- public CSVPrinter printer(CSVFormat csvFormat, Writer writer) throws
IOException {
- // We do not close the CSVPrinter but the underlying writer at the of
processing
- return new CSVPrinter(writer, csvFormat);
+ public CommonsCSVPrinterFacade printer(CSVFormat csvFormat) throws
IOException {
+ return new CommonsCSVPrinterFacade(csvFormat);
}
/**
@@ -258,6 +238,7 @@ public class CommonsCSVTool {
private static Map<String, CSVFormat> createCSVFormats() {
final Map<String, CSVFormat> result = new HashMap<>();
result.put("DEFAULT", CSVFormat.DEFAULT);
+ result.put("DATAFRAME",
CSVFormat.DEFAULT.withDelimiter(';').withFirstRecordAsHeader());
result.put("EXCEL", CSVFormat.EXCEL);
result.put("INFORMIX_UNLOAD", CSVFormat.INFORMIX_UNLOAD);
result.put("INFORMIX_UNLOAD_CSV", CSVFormat.INFORMIX_UNLOAD_CSV);
@@ -273,57 +254,21 @@ public class CommonsCSVTool {
}
/**
- * Provides a CSV default input format controlled by the following system
properties:
- * <ul>
- * <li>CSV_IN_FORMAT</li>
- * <li>CSV_IN_DELIMITER</li>
- * <li>CSV_IN_WITH_HEADER</li>
- * </ul>
+ * Provides a CSV default input format.
*
* @return CSV format
*/
- private CSVFormat defaultCSVInputFormat() {
-
- CSVFormat csvFormat =
getFormats().getOrDefault(System.getProperty("CSV_IN_FORMAT"),
CSVFormat.DEFAULT);
-
- final String delimiter = System.getProperty("CSV_IN_DELIMITER");
- if (StringUtils.isNotEmpty(delimiter)) {
- csvFormat = csvFormat.withDelimiter(toDelimiter(delimiter));
- }
-
- final boolean withHeader =
parseBoolean(System.getProperty("CSV_IN_WITH_HEADER",
Boolean.toString(!csvFormat.getSkipHeaderRecord())));
- if (withHeader) {
- csvFormat = csvFormat.withHeader();
- }
-
- return csvFormat;
+ private static CSVFormat defaultCSVInputFormat() {
+ return CSVFormat.DEFAULT;
}
/**
- * Provides a CSV default output format controlled by the following system
properties:
- * <ul>
- * <li>CSV_OUT_FORMAT</li>
- * <li>CSV_OUT_DELIMITER</li>
- * <li>CSV_OUT_WITH_HEADER</li>
- * </ul>
+ * Provides a CSV default output format.
*
* @return CSV format
*/
- private CSVFormat defaultCSVOutputFormat() {
-
- CSVFormat csvFormat =
getFormats().getOrDefault(System.getProperty("CSV_OUT_FORMAT"),
CSVFormat.DEFAULT);
-
- final String delimiter = System.getProperty("CSV_OUT_DELIMITER");
- if (StringUtils.isNotEmpty(delimiter)) {
- csvFormat = csvFormat.withDelimiter(toDelimiter(delimiter));
- }
-
- final boolean withHeader =
parseBoolean(System.getProperty("CSV_OUT_WITH_HEADER",
Boolean.toString(!csvFormat.getSkipHeaderRecord())));
- if (withHeader) {
- csvFormat = csvFormat.withHeader();
- }
-
- return csvFormat;
+ private static CSVFormat defaultCSVOutputFormat() {
+ return CSVFormat.DEFAULT;
}
private static final class ValueResolver implements Function<CSVRecord,
String> {
diff --git
a/freemarker-generator-tools/src/test/java/org/apache/freemarker/generator/tools/commonscsv/CommonsCSVToolTest.java
b/freemarker-generator-tools/src/test/java/org/apache/freemarker/generator/tools/commonscsv/CommonsCSVToolTest.java
index d8e4b6a..29f8e0e 100644
---
a/freemarker-generator-tools/src/test/java/org/apache/freemarker/generator/tools/commonscsv/CommonsCSVToolTest.java
+++
b/freemarker-generator-tools/src/test/java/org/apache/freemarker/generator/tools/commonscsv/CommonsCSVToolTest.java
@@ -18,7 +18,6 @@ package org.apache.freemarker.generator.tools.commonscsv;
import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVParser;
-import org.apache.commons.csv.CSVPrinter;
import org.apache.commons.csv.CSVRecord;
import org.apache.freemarker.generator.base.datasource.DataSource;
import org.apache.freemarker.generator.base.datasource.DataSourceFactory;
@@ -26,8 +25,6 @@ import org.junit.Test;
import java.io.File;
import java.io.IOException;
-import java.io.StringWriter;
-import java.io.Writer;
import java.util.List;
import java.util.Map;
@@ -113,15 +110,12 @@ public class CommonsCSVToolTest {
public void shallPrintCsvRecords() throws IOException {
final CommonsCSVTool commonsCsvTool = commonsCsvTool();
final CSVFormat cvsFormat = DEFAULT.withHeader();
- final Writer writer = new StringWriter();
try (CSVParser parser = commonsCsvTool.parse(dataSource(), cvsFormat))
{
- try (CSVPrinter printer = commonsCsvTool.printer(cvsFormat,
writer)) {
- printer.printRecord(parser.getHeaderMap());
+ try (final CommonsCSVPrinterFacade printer =
commonsCsvTool.printer(cvsFormat)) {
+
assertTrue(printer.printRecord(parser.getHeaderMap()).contains(CONTRACT_ID));
}
}
-
- assertTrue(writer.toString().contains(CONTRACT_ID));
}
@Test