This is an automated email from the ASF dual-hosted git repository.

sgoeschl pushed a commit to branch FREEMARKER-144
in repository https://gitbox.apache.org/repos/asf/freemarker-generator.git


The following commit(s) were added to refs/heads/FREEMARKER-144 by this push:
     new 2fa0f73  FREEMARKER-144 Proof Of Concept for providing DataFrames
2fa0f73 is described below

commit 2fa0f73b757182c3dbb4126ac50f73206f6f136b
Author: Siegfried Goeschl <[email protected]>
AuthorDate: Mon Jun 1 23:00:49 2020 +0200

    FREEMARKER-144 Proof Of Concept for providing DataFrames
---
 freemarker-generator-cli/README.md                 |  2 +-
 freemarker-generator-cli/run-samples.sh            |  7 +++++++
 .../site/sample/csv/data_join_a.csv                |  5 -----
 .../site/sample/csv/data_join_b.csv                |  5 -----
 .../site/sample/csv/dataframe.csv                  | 10 +++++++++
 .../src/main/scripts/run-samples.sh                |  9 +++++++-
 .../freemarker/generator/cli/ExamplesTest.java     |  5 +++++
 .../freemarker/generator/cli/ManualTest.java       |  3 +--
 .../templates/dataframe/example.ftl                |  3 +--
 .../generator/tools/commonscsv/CommonsCSVTool.java | 24 ++++++++++++++++++++--
 .../tools/dataframe/DataFrameToolTest.java         | 13 +++++++-----
 11 files changed, 63 insertions(+), 23 deletions(-)

diff --git a/freemarker-generator-cli/README.md 
b/freemarker-generator-cli/README.md
index 587dadb..6c6ee23 100644
--- a/freemarker-generator-cli/README.md
+++ b/freemarker-generator-cli/README.md
@@ -1119,7 +1119,7 @@ Sometimes we simply need to transform a JSON into an 
equivalent YAML or the othe
 > ./bin/freemarker-cli -i '${GsonTool.toJson(yaml)}' -m 
 > yaml=site/sample/yaml/swagger-spec.yaml
 
 > ./bin/freemarker-cli -t templates/json/yaml/transform.ftl 
 > site/sample/json/swagger-spec.json
-> ./bin/freemarker-cli -i 
'${YamlTool.toYaml(GsonTool.parse(DataSources.get(0)))}' 
site/sample/json/swagger-spec.json
+> ./bin/freemarker-cli -i 
'${YamlTool.toYaml(GsonTool.toMap(DataSources.get(0)))}' 
site/sample/json/swagger-spec.json
 > ./bin/freemarker-cli -i '${YamlTool.toYaml(json)}' -m 
 > json=site/sample/json/swagger-spec.json
 ```
 
diff --git a/freemarker-generator-cli/run-samples.sh 
b/freemarker-generator-cli/run-samples.sh
index 99a64d4..cdc3d6a 100755
--- a/freemarker-generator-cli/run-samples.sh
+++ b/freemarker-generator-cli/run-samples.sh
@@ -101,6 +101,13 @@ if hash wkhtmltopdf 2>/dev/null; then
 fi
 
 #############################################################################
+# DataFrame
+#############################################################################
+
+echo "templates/dataframe/example.ftl"
+$FREEMARKER_CMD -DCSV_TOOL_DELIMITER=SEMICOLON -DCSV_TOOL_HEADERS=true -t 
templates/dataframe/example.ftl site/sample/csv/dataframe.csv > 
target/out/dataframe.txt || { echo >&2 "Test failed.  Aborting."; exit 1; }
+
+#############################################################################
 # Grok
 #############################################################################
 
diff --git a/freemarker-generator-cli/site/sample/csv/data_join_a.csv 
b/freemarker-generator-cli/site/sample/csv/data_join_a.csv
deleted file mode 100644
index cc05775..0000000
--- a/freemarker-generator-cli/site/sample/csv/data_join_a.csv
+++ /dev/null
@@ -1,5 +0,0 @@
-GENE_ID;FPKM;CHR
-A;5;1
-B;4;2
-C;6;3
-D;6;1
\ No newline at end of file
diff --git a/freemarker-generator-cli/site/sample/csv/data_join_b.csv 
b/freemarker-generator-cli/site/sample/csv/data_join_b.csv
deleted file mode 100644
index c84d1a0..0000000
--- a/freemarker-generator-cli/site/sample/csv/data_join_b.csv
+++ /dev/null
@@ -1,5 +0,0 @@
-TRANSCRIPT_ID;GENE_ID;FPKM;TRANSCRIPT_NUMBER
-TA;A;7;1
-TB;A;3;2
-TC;B;6;1
-TD;E;4;1
\ No newline at end of file
diff --git a/freemarker-generator-cli/site/sample/csv/dataframe.csv 
b/freemarker-generator-cli/site/sample/csv/dataframe.csv
new file mode 100644
index 0000000..b841ef9
--- /dev/null
+++ b/freemarker-generator-cli/site/sample/csv/dataframe.csv
@@ -0,0 +1,10 @@
+name;age;country
+Schmitt;24;Germany
+Parker;45;USA
+Meier;20;Germany
+Schmitt;30;France
+Peter;44;Germany
+Meier;24;Germany
+Green;33;UK
+Schmitt;30;Germany
+Meier;30;Germany
\ No newline at end of file
diff --git a/freemarker-generator-cli/src/main/scripts/run-samples.sh 
b/freemarker-generator-cli/src/main/scripts/run-samples.sh
index c005f09..ee8571e 100755
--- a/freemarker-generator-cli/src/main/scripts/run-samples.sh
+++ b/freemarker-generator-cli/src/main/scripts/run-samples.sh
@@ -50,7 +50,7 @@ $FREEMARKER_CMD -i 
'${JsonPathTool.parse(DataSources.first).read("$.info.title")
 $FREEMARKER_CMD -i 
'${XmlTool.parse(DataSources.first)["recipients/person[1]/name"]}' 
site/sample/xml/recipients.xml > target/out/interactive-xml.txt || { echo >&2 
"Test failed.  Aborting."; exit 1; }
 $FREEMARKER_CMD -i '${JsoupTool.parse(DataSources.first).select("a")[0]}' 
site/sample/html/dependencies.html > target/out/interactive-html.txt || { echo 
>&2 "Test failed.  Aborting."; exit 1; }
 $FREEMARKER_CMD -i '${GsonTool.toJson(YamlTool.parse(DataSources.get(0)))}' 
site/sample/yaml/swagger-spec.yaml > target/out/interactive-swagger.json || { 
echo >&2 "Test failed.  Aborting."; exit 1; }
-$FREEMARKER_CMD -i '${YamlTool.toYaml(GsonTool.parse(DataSources.get(0)))}' 
site/sample/json/swagger-spec.json > target/out/interactive-swagger.yaml || { 
echo >&2 "Test failed.  Aborting."; exit 1; }
+$FREEMARKER_CMD -i '${YamlTool.toYaml(GsonTool.toMap(DataSources.get(0)))}' 
site/sample/json/swagger-spec.json > target/out/interactive-swagger.yaml || { 
echo >&2 "Test failed.  Aborting."; exit 1; }
 
 #############################################################################
 # CSV
@@ -101,6 +101,13 @@ if hash wkhtmltopdf 2>/dev/null; then
 fi
 
 #############################################################################
+# DataFrame
+#############################################################################
+
+echo "templates/dataframe/example.ftl"
+$FREEMARKER_CMD -DCSV_TOOL_DELIMITER=SEMICOLON -DCSV_TOOL_HEADERS=true -t 
templates/dataframe/example.ftl site/sample/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 dc48323..a595aee 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
@@ -103,6 +103,11 @@ public class ExamplesTest extends AbstractMainTest {
     }
 
     @Test
+    public void shouldRunDataFrameExamples() throws IOException {
+        assertValid(execute("-DCSV_TOOL_DELIMITER=SEMICOLON 
-DCSV_TOOL_HEADERS=true -t templates/dataframe/example.ftl 
site/sample/csv/dataframe.csv"));
+    }
+
+    @Test
     public void shouldRunInteractiveTemplateExamples() throws IOException {
         assertValid(execute("-i 
${JsonPathTool.parse(DataSources.first).read(\"$.info.title\")} 
site/sample/json/swagger-spec.json"));
         assertValid(execute("-i 
${XmlTool.parse(DataSources.first)[\"recipients/person[1]/name\"]} 
site/sample/xml/recipients.xml"));
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 acdfd85..fd2c11c 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
@@ -48,8 +48,7 @@ public class ManualTest {
     // private static final String CMD = "-b ./src/test -t templates/demo.ftl 
-m env=./site/sample/properties/user_0001/user.properties";
     // private static final String CMD = "-b ./src/test -t templates/demo.ftl 
-m ./site/sample/properties/user_0001/user.properties";
     // private static final String CMD = "-b ./src/test --data-model 
post=https://jsonplaceholder.typicode.com/posts/2 -t templates/info.ftl";
-    // private static final String CMD = "-b ./src/test -t 
templates/dataframe/html/print.ftl ./site/sample/csv/data_join_a.csv 
./site/sample/csv/data_join_b.csv";
-    private static final String CMD = "-b ./src/test -t 
templates/dataframe/example.ftl 
https://raw.githubusercontent.com/nRo/DataFrame/master/src/test/resources/users.csv";;
+    private static final String CMD = "-DCSV_TOOL_DELIMITER=SEMICOLON 
-DCSV_TOOL_HEADERS=true -b ./src/test -t templates/dataframe/example.ftl 
https://raw.githubusercontent.com/nRo/DataFrame/master/src/test/resources/users.csv";;
 
 
     public static void main(String[] args) {
diff --git a/freemarker-generator-cli/templates/dataframe/example.ftl 
b/freemarker-generator-cli/templates/dataframe/example.ftl
index 7983b53..8acda9c 100644
--- a/freemarker-generator-cli/templates/dataframe/example.ftl
+++ b/freemarker-generator-cli/templates/dataframe/example.ftl
@@ -15,8 +15,7 @@
   specific language governing permissions and limitations
   under the License.
 -->
-<#assign cvsFormat = 
CSVTool.formats["DEFAULT"].withHeader().withDelimiter(';')>
-<#assign csvParser = CSVTool.parse(DataSources.get(0), cvsFormat)>
+<#assign csvParser = CSVTool.parse(DataSources.get(0))>
 <#assign users = DataFrameTool.toDataFrame(csvParser)>
 
 Original Data
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 31c5d7c..296f903 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
@@ -37,6 +37,7 @@ 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;
@@ -44,8 +45,10 @@ import static org.apache.commons.io.IOUtils.toInputStream;
 
 public class CommonsCSVTool {
 
+    private final CSVFormat defaulCSVFormat = csvFormat();
+
     public CSVParser parse(DataSource dataSource) {
-        return parse(dataSource, CSVFormat.DEFAULT);
+        return parse(dataSource, defaulCSVFormat);
     }
 
     public CSVParser parse(DataSource dataSource, CSVFormat format) {
@@ -65,7 +68,7 @@ public class CommonsCSVTool {
     }
 
     public CSVParser parse(String csv) {
-        return parse(csv, CSVFormat.DEFAULT);
+        return parse(csv, defaulCSVFormat);
     }
 
     public CSVParser parse(String csv, CSVFormat format) {
@@ -259,6 +262,23 @@ public class CommonsCSVTool {
         return result;
     }
 
+    private CSVFormat csvFormat() {
+
+        CSVFormat csvFormat = 
CSVFormat.valueOf(System.getProperty("CSV_TOOL_FORMAT", "Default"));
+
+        final String delimiter = System.getProperty("CSV_TOOL_DELIMITER");
+        if (StringUtils.isNotEmpty(delimiter)) {
+            csvFormat = csvFormat.withDelimiter(toDelimiter(delimiter));
+        }
+
+        final boolean withHeader = 
parseBoolean(System.getProperty("CSV_TOOL_HEADERS", 
Boolean.toString(!csvFormat.getSkipHeaderRecord())));
+        if (withHeader) {
+            csvFormat = csvFormat.withHeader();
+        }
+
+        return csvFormat;
+    }
+
     private static final class ValueResolver implements Function<CSVRecord, 
String> {
 
         private final Integer index;
diff --git 
a/freemarker-generator-tools/src/test/java/org/apache/freemarker/generator/tools/dataframe/DataFrameToolTest.java
 
b/freemarker-generator-tools/src/test/java/org/apache/freemarker/generator/tools/dataframe/DataFrameToolTest.java
index 735e927..101a3fd 100644
--- 
a/freemarker-generator-tools/src/test/java/org/apache/freemarker/generator/tools/dataframe/DataFrameToolTest.java
+++ 
b/freemarker-generator-tools/src/test/java/org/apache/freemarker/generator/tools/dataframe/DataFrameToolTest.java
@@ -35,8 +35,11 @@ import static org.apache.commons.csv.CSVFormat.DEFAULT;
 
 public class DataFrameToolTest {
 
-    private static final File DATA_JOIN_A = new 
File("./src/test/data/csv/data_join_a.csv");
-    private static final File DATA_JOIN_B = new 
File("./src/test/data/csv/data_join_b.csv");
+    private static final String CSV_WITH_HEADER = "GENE_ID;FPKM;CHR\n" +
+            "A;5;1\n" +
+            "B;4;2\n" +
+            "C;6;3\n" +
+            "D;6;1";
 
     private static final String JSON_ARRAY = "[\n" +
             "    {\n" +
@@ -63,7 +66,7 @@ public class DataFrameToolTest {
 
     @Test
     public void shouldParseCsvFileWithHeader() {
-        final CSVParser csvParser = csvParser(DATA_JOIN_A, 
DEFAULT.withHeader().withDelimiter(';'));
+        final CSVParser csvParser = csvParser(CSV_WITH_HEADER, 
DEFAULT.withHeader().withDelimiter(';'));
         final DataFrame dataFrame = dataFrameTool().toDataFrame(csvParser);
 
         assertEquals(3, dataFrame.getColumns().size());
@@ -100,7 +103,7 @@ public class DataFrameToolTest {
         return DataSourceFactory.fromFile(file, UTF_8);
     }
 
-    private CSVParser csvParser(File file, CSVFormat csvFormat) {
-        return commonsCSVTool().parse(dataSource(file), csvFormat);
+    private CSVParser csvParser(String csv, CSVFormat csvFormat) {
+        return commonsCSVTool().parse(csv, csvFormat);
     }
 }

Reply via email to