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

commit 57b1474ad2f57461cdd6d41c3b648e943e2e8515
Author: Siegfried Goeschl <[email protected]>
AuthorDate: Wed Jun 24 14:34:32 2020 +0200

    FREEMARKER-146 Cleanly separate example templates and data from 
user-supplied content
---
 freemarker-generator-cli/README.md                 |  2 +-
 .../examples/templates/dataframe/example.ftl       |  6 +--
 .../examples/templates/excel/csv/custom.ftl        |  2 +-
 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                | 30 ++----------
 .../templates/csv/html/transform.ftl               | 40 +++++++---------
 .../templates/csv/md/transform.ftl                 | 22 +++------
 .../templates/excel/csv/transform.ftl              |  9 ++--
 .../templates/lib/commons-csv.ftl                  | 55 ++++++++++++++++++++++
 12 files changed, 99 insertions(+), 77 deletions(-)

diff --git a/freemarker-generator-cli/README.md 
b/freemarker-generator-cli/README.md
index 168b8fc..70179f2 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 -PCVS_IN_DELIMITER=COMMA -PCSV_OUT_DELIMITER=PIPE -t 
templates/csv/csv/transform.ftl ./examples/data/csv/contract.csv 
+> bin/freemarker-cli -PCVS_IN_DELIMITER=COMMA -PCSV_TARGET_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 16c6a51..d1eef7b 100644
--- a/freemarker-generator-cli/examples/templates/dataframe/example.ftl
+++ b/freemarker-generator-cli/examples/templates/dataframe/example.ftl
@@ -47,9 +47,9 @@ 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 = CSVTool.formats[CSV_SOURCE_FORMAT!"DEFAULT"]>
+    <#assign delimiter = 
CSVTool.toDelimiter(CSV_SOURCE_DELIMITER!format.getDelimiter())>
+    <#assign withHeader = CSV_SOURCE_WITH_HEADER!"false">
     <#assign format = format.withDelimiter(delimiter)>
     <#if withHeader?boolean>
         <#assign format = format.withHeader()>
diff --git a/freemarker-generator-cli/examples/templates/excel/csv/custom.ftl 
b/freemarker-generator-cli/examples/templates/excel/csv/custom.ftl
index d73623b..ac4b4be 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 = CSV_OUT_FORMAT!"DEFAULT">
+<#assign format = CSV_TARGET_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))>
diff --git a/freemarker-generator-cli/run-examples.sh 
b/freemarker-generator-cli/run-examples.sh
index d8d7925..f1ad546 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 -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; }
+$FREEMARKER_CMD -PCSV_SOURCE_DELIMITER=SEMICOLON -PCSV_SOURCE_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 b95e700..53f4dcd 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 -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; }
+$FREEMARKER_CMD -PCSV_SOURCE_DELIMITER=SEMICOLON -PCSV_SOURCE_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 63c792f..0c3820c 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("-PCSV_IN_DELIMITER=SEMICOLON 
-PCSV_IN_WITH_HEADER=true -t examples/templates/dataframe/example.ftl 
examples/data/csv/dataframe.csv"));
+        assertValid(execute("-PCSV_SOURCE_DELIMITER=SEMICOLON 
-PCSV_SOURCE_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 b12488a..faa6080 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 = "-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";
+    // private static final String CMD = "-PCSV_SOURCE_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_SOURCE_WITH_HEADER=true 
-PCSV_SOURCE_FORMAT=DEFAULT -PCSV_TARGET_FORMAT=EXCEL -t 
templates/csv/md/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 0976ef0..656131d 100644
--- a/freemarker-generator-cli/templates/csv/csv/transform.ftl
+++ b/freemarker-generator-cli/templates/csv/csv/transform.ftl
@@ -1,3 +1,4 @@
+<#ftl output_format="plainText" strip_whitespace=true>
 <#--
   Licensed to the Apache Software Foundation (ASF) under one
   or more contributor license agreements.  See the NOTICE file
@@ -14,31 +15,10 @@
   specific language governing permissions and limitations
   under the License.
 -->
+<#import "/templates/lib/commons-csv.ftl" as csv />
 <#assign dataSource = DataSources.get(0)>
-<#assign csvParser = CSVTool.parse(dataSource, csvInFormat())>
-<#assign csvPrinter = CSVTool.printer(csvOutFormat())>
+<#assign csvParser = CSVTool.parse(dataSource, csv.sourceFormat())>
+<#assign csvPrinter = CSVTool.printer(csv.targetFormat())>
 <#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>
+</#list>
\ No newline at end of file
diff --git a/freemarker-generator-cli/templates/csv/html/transform.ftl 
b/freemarker-generator-cli/templates/csv/html/transform.ftl
index af62744..cda4cd6 100644
--- a/freemarker-generator-cli/templates/csv/html/transform.ftl
+++ b/freemarker-generator-cli/templates/csv/html/transform.ftl
@@ -1,4 +1,4 @@
-<#ftl output_format="HTML" >
+<#ftl output_format="HTML" strip_whitespace=true>
 <#--
   Licensed to the Apache Software Foundation (ASF) under one
   or more contributor license agreements.  See the NOTICE file
@@ -15,8 +15,9 @@
   specific language governing permissions and limitations
   under the License.
 -->
+<#import "/templates/lib/commons-csv.ftl" as csv />
 <#assign dataSource = DataSources.get(0)>
-<#assign csvParser = CSVTool.parse(dataSource, csvInFormat())>
+<#assign csvParser = CSVTool.parse(dataSource, csv.sourceFormat())>
 <#assign csvHeaders = csvParser.getHeaderNames()>
 <#--------------------------------------------------------------------------->
 <!DOCTYPE html>
@@ -38,28 +39,21 @@
 </html>
 <#--------------------------------------------------------------------------->
 <#macro writeHeaders headers>
-    <tr>
-        <#list headers as header>
-            <th>${header}</th>
-        </#list>
-    </tr>
+    <#if headers?has_content>
+        <tr>
+            <#list headers as header>
+                <th>${header}</th>
+            </#list>
+        </tr>
+    </#if>
 </#macro>
 <#--------------------------------------------------------------------------->
 <#macro writeColumns record>
-    <tr>
-        <#list record.iterator() as field>
-            <th>${field}</th>
-        </#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 record?has_content>
+        <tr>
+            <#list record.iterator() as field>
+                <td>${field}</td>
+            </#list>
+        </tr>
     </#if>
-    <#return format>
-</#function>
+</#macro>
\ No newline at end of file
diff --git a/freemarker-generator-cli/templates/csv/md/transform.ftl 
b/freemarker-generator-cli/templates/csv/md/transform.ftl
index fbd2c9f..2766125 100644
--- a/freemarker-generator-cli/templates/csv/md/transform.ftl
+++ b/freemarker-generator-cli/templates/csv/md/transform.ftl
@@ -14,8 +14,9 @@
   specific language governing permissions and limitations
   under the License.
 -->
+<#import "/templates/lib/commons-csv.ftl" as csv />
 <#assign dataSource = DataSources.get(0)>
-<#assign csvParser = CSVTool.parse(dataSource, csvInFormat())>
+<#assign csvParser = CSVTool.parse(dataSource, csv.sourceFormat())>
 <#assign headers = (csvParser.getHeaderMap()!{})?keys>
 <#assign records = csvParser.records>
 <#--------------------------------------------------------------------------->
@@ -32,18 +33,9 @@
 </#macro>
 <#--------------------------------------------------------------------------->
 <#macro writeColums columns>
-    <#list columns as column>
-        | ${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 columns?has_content>
+        <#list columns as column>
+            | ${column.iterator()?join(" | ", "")} |
+        </#list>
     </#if>
-    <#return format>
-</#function>
+</#macro>
diff --git a/freemarker-generator-cli/templates/excel/csv/transform.ftl 
b/freemarker-generator-cli/templates/excel/csv/transform.ftl
index ec4f35c..794e942 100644
--- a/freemarker-generator-cli/templates/excel/csv/transform.ftl
+++ b/freemarker-generator-cli/templates/excel/csv/transform.ftl
@@ -16,11 +16,12 @@
   under the License.
 -->
 <#-- Parse the first data source & sheet of the Excel document -->
+<#import "/templates/lib/commons-csv.ftl" as csv />
 <#assign workbook = ExcelTool.parse(DataSources.get(0))>
 <#assign sheet = ExcelTool.getSheets(workbook)[0]>
 <#assign records = ExcelTool.toTable(sheet)>
 <#-- Setup CSVPrinter  -->
-<#assign csvPrinter = CSVTool.printer(csvOutFormat())>
+<#assign csvPrinter = CSVTool.printer(csv.targetFormat())>
 <#-- Print each line of the Excel as CSV record -->
 <#compress>
     <#list records as record>
@@ -29,9 +30,9 @@
 </#compress>
 <#--------------------------------------------------------------------------->
 <#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 = CSVTool.formats[CSV_TARGET_FORMAT!"DEFAULT"]>
+    <#assign delimiter = 
CSVTool.toDelimiter(CSV_TARGET_DELIMITER!format.getDelimiter())>
+    <#assign withHeader = CSV_TARGET_WITH_HEADER!"false">
     <#assign format = format.withDelimiter(delimiter)>
     <#if withHeader?boolean>
         <#assign format = format.withHeader>
diff --git a/freemarker-generator-cli/templates/lib/commons-csv.ftl 
b/freemarker-generator-cli/templates/lib/commons-csv.ftl
new file mode 100644
index 0000000..4082fa8
--- /dev/null
+++ b/freemarker-generator-cli/templates/lib/commons-csv.ftl
@@ -0,0 +1,55 @@
+<#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
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+    http://www.apache.org/licenses/LICENSE-2.0
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+
+<#---
+    Detemine the CSV format for reading a CSV files using user-supplied
+    parameters from the data model.
+
+    * CSV_SOURCE_FORMAT - see 
https://commons.apache.org/proper/commons-csv/apidocs/org/apache/commons/csv/CSVFormat.html
+    * CSV_SOURCE_DELIMITER - symbolic name of delimiter, e.g. "COLON" or 
"SEMICOLON"
+    * CSV_SOURCE_WITH_HEADER - whether the first rows are headers
+-->
+<#function sourceFormat>
+    <#assign format = CSVTool.formats[CSV_SOURCE_FORMAT!"DEFAULT"]>
+    <#assign delimiter = 
CSVTool.toDelimiter(CSV_SOURCE_DELIMITER!format.getDelimiter())>
+    <#assign withHeader = CSV_SOURCE_WITH_HEADER!"false">
+    <#assign format = format.withDelimiter(delimiter)>
+    <#if withHeader?boolean>
+        <#assign format = format.withHeader()>
+    </#if>
+    <#return format>
+</#function>
+
+<#---
+    Detemine the CSV format for printing a CSV files using user-supplied
+    parameters from the data model.
+
+    * CSV_TARGET_FORMAT - see 
https://commons.apache.org/proper/commons-csv/apidocs/org/apache/commons/csv/CSVFormat.html
+    * CSV_TARGET_DELIMITER - symbolic name of delimiter, e.g. "COLON" or 
"SEMICOLON"
+    * CSV_TARGET_WITH_HEADER - whether the first rows are headers
+-->
+<#function targetFormat>
+    <#assign format = CSVTool.formats[CSV_TARGET_FORMAT!"DEFAULT"]>
+    <#assign delimiter = 
CSVTool.toDelimiter(CSV_TARGET_DELIMITER!format.getDelimiter())>
+    <#assign withHeader = CSV_TARGET_WITH_HEADER!"false">
+    <#assign format = format.withDelimiter(delimiter)>
+    <#if withHeader?boolean>
+        <#assign format = format.withHeader>
+    </#if>
+    <#return format>
+</#function>

Reply via email to