You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@freemarker.apache.org by sg...@apache.org on 2020/06/17 18:06:39 UTC

[freemarker-generator] branch FREEMARKER-144 updated (88ecad6 -> 4595535)

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

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


    from 88ecad6  FREEMARKER-144 Proof Of Concept for providing DataFrames
     new 1de1635  FREEMARKER-144 Proof Of Concept for providing DataFrames
     new 629673e  FREEMARKER-144 Proof Of Concept for providing DataFrames
     new 4595535  FREEMARKER-144 Proof Of Concept for providing DataFrames

The 3 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../freemarker/generator/base/table/Table.java     | 63 +++++++++++-----------
 .../template/TemplateTransformationsBuilder.java   | 21 ++------
 .../freemarker/generator/table/TableTest.java      |  6 +--
 freemarker-generator-cli/nginx.yaml                |  2 -
 freemarker-generator-cli/pom.xml                   |  2 +-
 freemarker-generator-cli/run-samples.sh            |  4 ++
 .../freemarker/generator/cli/config/Suppliers.java |  4 +-
 .../src/main/scripts/run-samples.sh                |  4 ++
 .../src/site/markdown/cli/tools/dataframe.md       | 18 +++++--
 .../freemarker/generator/cli/ManualTest.java       |  1 -
 .../templates/excel/dataframe/transform.ftl        | 22 ++------
 .../generator/tools/dataframe/DataFrameTool.java   |  7 +--
 .../tools/dataframe/converter/CSVConverter.java    | 16 ++++++
 .../tools/dataframe/converter/ListConverter.java   | 18 ++++++-
 .../tools/dataframe/DataFrameToolTest.java         |  2 +-
 travis.sh                                          |  1 +
 16 files changed, 111 insertions(+), 80 deletions(-)
 delete mode 100644 freemarker-generator-cli/nginx.yaml


[freemarker-generator] 01/03: FREEMARKER-144 Proof Of Concept for providing DataFrames

Posted by sg...@apache.org.
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

commit 1de16359559c2b35b252541236f2e7667ba2e3e5
Author: Siegfried Goeschl <si...@gmail.com>
AuthorDate: Wed Jun 17 18:47:06 2020 +0200

    FREEMARKER-144 Proof Of Concept for providing DataFrames
---
 .../freemarker/generator/base/table/Table.java     | 59 ++++++++++++----------
 .../freemarker/generator/table/TableTest.java      |  6 +--
 .../templates/excel/dataframe/transform.ftl        |  2 +-
 .../generator/tools/dataframe/DataFrameTool.java   |  7 +--
 .../tools/dataframe/converter/ListConverter.java   |  2 +-
 .../tools/dataframe/DataFrameToolTest.java         |  2 +-
 6 files changed, 42 insertions(+), 36 deletions(-)

diff --git a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/table/Table.java b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/table/Table.java
index 7cf7a3e..966f395 100644
--- a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/table/Table.java
+++ b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/table/Table.java
@@ -25,10 +25,11 @@ import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
 
+import static java.util.Collections.emptyList;
 import static java.util.Objects.requireNonNull;
 
 /**
- * Simple table model filled from maps or lists representing tabular data.
+ * Simple table model filled from maps or rows representing tabular data.
  */
 public class Table {
 
@@ -41,13 +42,13 @@ public class Table {
     /** Table data as rows */
     private final List<List<Object>> values;
 
-    /** Map column names to numeric column values */
+    /** Map column names to column index */
     private final Map<String, Integer> columnMap;
 
     private Table() {
-        this.columnNames = new ArrayList<>();
-        this.columnTypes = new ArrayList<>();
-        this.values = new ArrayList<>();
+        this.columnNames = emptyList();
+        this.columnTypes = emptyList();
+        this.values = emptyList();
         this.columnMap = new HashMap<>();
     }
 
@@ -55,11 +56,7 @@ public class Table {
         this.columnNames = new ArrayList<>(requireNonNull(columnNames));
         this.columnTypes = new ArrayList<>(requireNonNull(columnTypes));
         this.values = ListUtils.transpose(requireNonNull(columnValuesList));
-
-        this.columnMap = new HashMap<>();
-        for (int i = 0; i < this.columnNames.size(); i++) {
-            this.columnMap.put(this.columnNames.get(i), i);
-        }
+        this.columnMap = columnMap(this.columnNames);
     }
 
     public List<String> getColumnNames() {
@@ -127,15 +124,15 @@ public class Table {
     }
 
     /**
-     * Create a table from a list of lists representing tabular data.
+     * Create a table from a list of rows representing tabular data.
      *
-     * @param lists row values as lists
+     * @param rows row values
      * @return table
      */
-    public static Table fromLists(List<List<Object>> lists) {
-        requireNonNull(lists, "lists is null");
+    public static Table fromRows(List<List<Object>> rows) {
+        requireNonNull(rows, "rows is null");
 
-        final List<List<Object>> columnValuesList = ListUtils.transpose(lists);
+        final List<List<Object>> columnValuesList = ListUtils.transpose(rows);
         final List<Class<?>> columnTypes = columnTypes(columnValuesList);
 
         return new Table(
@@ -145,24 +142,24 @@ public class Table {
     }
 
     /**
-     * Create a table from a list of lists representing tabular data
+     * Create a table from a list of rows representing tabular data
      * where the first row may consists of column headers.
      *
-     * @param lists                     row values as lists
+     * @param rows                      row values
      * @param withFirstRowAsColumnNames column names as first row?
      * @return table
      */
-    public static Table fromLists(List<List<Object>> lists, boolean withFirstRowAsColumnNames) {
-        if (ListUtils.isNullOrEmpty(lists) && withFirstRowAsColumnNames) {
+    public static Table fromRows(List<List<Object>> rows, boolean withFirstRowAsColumnNames) {
+        if (ListUtils.isNullOrEmpty(rows) && withFirstRowAsColumnNames) {
             throw new IllegalArgumentException("Header columns expected but list is empty");
         }
 
         if (withFirstRowAsColumnNames) {
-            final List<String> columnNames = columnNames(lists.get(0));
-            final List<List<Object>> table = lists.subList(1, lists.size());
-            return fromLists(columnNames, table);
+            final List<String> columnNames = columnNames(rows.get(0));
+            final List<List<Object>> table = rows.subList(1, rows.size());
+            return fromRows(columnNames, table);
         } else {
-            return fromLists(lists);
+            return fromRows(rows);
         }
     }
 
@@ -170,14 +167,14 @@ public class Table {
      * Create a table from column names and row values.
      *
      * @param columnNames list of column names
-     * @param lists       row values as lists
+     * @param rows        row values as rows
      * @return table
      */
-    public static Table fromLists(Collection<String> columnNames, List<List<Object>> lists) {
+    public static Table fromRows(Collection<String> columnNames, List<List<Object>> rows) {
         requireNonNull(columnNames, "columnNames is null");
-        requireNonNull(lists, "lists is null");
+        requireNonNull(rows, "rows is null");
 
-        final List<List<Object>> columnValuesList = ListUtils.transpose(lists);
+        final List<List<Object>> columnValuesList = ListUtils.transpose(rows);
         final List<Class<?>> columnTypes = columnTypes(columnValuesList);
 
         return new Table(
@@ -259,4 +256,12 @@ public class Table {
     private static Class<?> columnType(List<Object> columnValues) {
         return ListUtils.coalesce(columnValues).getClass();
     }
+
+    private static Map<String, Integer> columnMap(List<String> columnNames) {
+        final Map<String, Integer> result = new HashMap<>();
+        for (int i = 0; i < columnNames.size(); i++) {
+            result.put(columnNames.get(i), i);
+        }
+        return result;
+    }
 }
diff --git a/freemarker-generator-base/src/test/java/org/apache/freemarker/generator/table/TableTest.java b/freemarker-generator-base/src/test/java/org/apache/freemarker/generator/table/TableTest.java
index 695e140..bd44efc 100644
--- a/freemarker-generator-base/src/test/java/org/apache/freemarker/generator/table/TableTest.java
+++ b/freemarker-generator-base/src/test/java/org/apache/freemarker/generator/table/TableTest.java
@@ -97,7 +97,7 @@ public class TableTest {
 
     @Test
     public void shouldConvertFromListsWithExplicitHeaders() {
-        final Table table = Table.fromLists(booksHeader, booksList);
+        final Table table = Table.fromRows(booksHeader, booksList);
 
         validateBooks(table);
         assertEquals(booksHeader, table.getColumnNames());
@@ -105,7 +105,7 @@ public class TableTest {
 
     @Test
     public void shouldConvertFromListsWithImplicitHeaders() {
-        final Table table = Table.fromLists(booksListWithHeaders, true);
+        final Table table = Table.fromRows(booksListWithHeaders, true);
 
         validateBooks(table);
         assertEquals(booksHeader, table.getColumnNames());
@@ -113,7 +113,7 @@ public class TableTest {
 
     @Test
     public void shouldConvertFromListsWithEmptyHeaders() {
-        final Table table = Table.fromLists(booksList);
+        final Table table = Table.fromRows(booksList);
 
         validateBooks(table);
     }
diff --git a/freemarker-generator-cli/templates/excel/dataframe/transform.ftl b/freemarker-generator-cli/templates/excel/dataframe/transform.ftl
index 46eb8d5..78540ef 100644
--- a/freemarker-generator-cli/templates/excel/dataframe/transform.ftl
+++ b/freemarker-generator-cli/templates/excel/dataframe/transform.ftl
@@ -29,7 +29,7 @@
     <#assign sheets = ExcelTool.getSheets(workbook)>
     <#list sheets as sheet>
         <#assign table = ExcelTool.toTable(sheet)>
-        <#assign df = DataFrameTool.fromLists(table, true)>
+        <#assign df = DataFrameTool.fromRows(table, true)>
         ${DataFrameTool.print(df)}<#t>
     </#list>
 </#macro>
diff --git a/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/dataframe/DataFrameTool.java b/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/dataframe/DataFrameTool.java
index 49a7cba..5441861 100644
--- a/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/dataframe/DataFrameTool.java
+++ b/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/dataframe/DataFrameTool.java
@@ -27,6 +27,7 @@ import org.apache.freemarker.generator.tools.dataframe.converter.ListConverter;
 import org.apache.freemarker.generator.tools.dataframe.converter.MapConverter;
 
 import java.io.StringWriter;
+import java.util.Collection;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -34,7 +35,7 @@ import java.util.Map;
 import static de.unknownreality.dataframe.DataFrameWriter.DEFAULT_PRINT_FORMAT;
 
 /**
- * Create and manipulate data frame (tabular data structure). Data frames allow
+ * Create and manipulate data frames (tabular data structure). Data frames allow
  * easy manipulation and transformation of data, e.g. joining two data frames.
  * For more information see <a href="https://github.com/nRo/DataFrame">nRo/DataFrame</a>.
  */
@@ -56,7 +57,7 @@ public class DataFrameTool {
      * @param maps maps to build the data frame
      * @return data frame
      */
-    public DataFrame fromMaps(List<Map<String, Object>> maps) {
+    public DataFrame fromMaps(Collection<Map<String, Object>> maps) {
         return MapConverter.toDataFrame(maps);
     }
 
@@ -67,7 +68,7 @@ public class DataFrameTool {
      * @param withFirstRowAsColumnNames column names as first row?
      * @return data frame
      */
-    public DataFrame fromLists(List<List<Object>> rows, boolean withFirstRowAsColumnNames) {
+    public DataFrame fromRows(List<List<Object>> rows, boolean withFirstRowAsColumnNames) {
         return ListConverter.toDataFrame(rows, withFirstRowAsColumnNames);
     }
 
diff --git a/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/dataframe/converter/ListConverter.java b/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/dataframe/converter/ListConverter.java
index c3e0dff..af96cf1 100644
--- a/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/dataframe/converter/ListConverter.java
+++ b/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/dataframe/converter/ListConverter.java
@@ -15,7 +15,7 @@ public class ListConverter {
      * @return <code>DataFrame</code>
      */
     public static DataFrame toDataFrame(List<List<Object>> rows, boolean withFirstRowAsColumnNames) {
-        final Table table = Table.fromLists(rows, withFirstRowAsColumnNames);
+        final Table table = Table.fromRows(rows, withFirstRowAsColumnNames);
         return ConverterUtils.toDataFrame(table);
     }
 }
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 8076cbb..6965064 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
@@ -116,7 +116,7 @@ public class DataFrameToolTest {
         final Workbook workbook = excelTool.parse(DataSourceFactory.create("./src/test/data/excel/test.xls"));
         final List<List<Object>> sheet = excelTool.toTable(workbook.getSheetAt(0));
 
-        final DataFrame dataFrame = dataFrameTool().fromLists(sheet, true);
+        final DataFrame dataFrame = dataFrameTool().fromRows(sheet, true);
 
         assertEquals(7, dataFrame.getColumns().size());
         assertEquals(2, dataFrame.getRows().size());


[freemarker-generator] 03/03: FREEMARKER-144 Proof Of Concept for providing DataFrames

Posted by sg...@apache.org.
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

commit 4595535d552dcb619bc8345f57c4c768e98d1351
Author: Siegfried Goeschl <si...@gmail.com>
AuthorDate: Wed Jun 17 20:06:20 2020 +0200

    FREEMARKER-144 Proof Of Concept for providing DataFrames
---
 .../freemarker/generator/base/table/Table.java      |  4 +---
 .../template/TemplateTransformationsBuilder.java    | 21 +++++----------------
 freemarker-generator-cli/nginx.yaml                 |  2 --
 freemarker-generator-cli/pom.xml                    |  2 +-
 freemarker-generator-cli/run-samples.sh             |  4 ++++
 .../freemarker/generator/cli/config/Suppliers.java  |  4 ++--
 .../src/main/scripts/run-samples.sh                 |  4 ++++
 .../apache/freemarker/generator/cli/ManualTest.java |  1 -
 .../tools/dataframe/converter/CSVConverter.java     | 16 ++++++++++++++++
 .../tools/dataframe/converter/ListConverter.java    | 16 ++++++++++++++++
 travis.sh                                           |  1 +
 11 files changed, 50 insertions(+), 25 deletions(-)

diff --git a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/table/Table.java b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/table/Table.java
index 966f395..1abf21b 100644
--- a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/table/Table.java
+++ b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/table/Table.java
@@ -72,9 +72,7 @@ public class Table {
     }
 
     public int getNrOfColumns() {
-        return columnNames.isEmpty() ?
-                (values.isEmpty() ? 0 : values.get(0).size()) :
-                columnNames.size();
+        return columnNames.isEmpty() ? values.isEmpty() ? 0 : values.get(0).size() : columnNames.size();
     }
 
     public int size() {
diff --git a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/template/TemplateTransformationsBuilder.java b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/template/TemplateTransformationsBuilder.java
index 37100aa..fe62017 100644
--- a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/template/TemplateTransformationsBuilder.java
+++ b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/template/TemplateTransformationsBuilder.java
@@ -13,7 +13,8 @@
  * 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.
- */package org.apache.freemarker.generator.base.template;
+ */
+package org.apache.freemarker.generator.base.template;
 
 import org.apache.freemarker.generator.base.file.RecursiveFileSupplier;
 import org.apache.freemarker.generator.base.util.NonClosableWriterWrapper;
@@ -22,8 +23,6 @@ import org.apache.freemarker.generator.base.util.Validate;
 
 import java.io.BufferedWriter;
 import java.io.File;
-import java.io.FileWriter;
-import java.io.IOException;
 import java.io.OutputStreamWriter;
 import java.io.Writer;
 import java.util.ArrayList;
@@ -73,7 +72,7 @@ public class TemplateTransformationsBuilder {
 
         final List<TemplateTransformation> result = new ArrayList<>();
 
-        if (template != null) {
+        if (hasInteractiveTemplate()) {
             final File outputFile = outputs.isEmpty() ? null : outputs.get(0);
             result.add(resolveInteractiveTemplate(outputFile));
         } else {
@@ -249,18 +248,8 @@ public class TemplateTransformationsBuilder {
         return excludes.isEmpty() ? null : excludes.get(0);
     }
 
-    private Writer writer(String outputFile, String outputEncoding) {
-        try {
-            if (writer != null) {
-                return writer;
-            } else if (!StringUtils.isEmpty(outputFile)) {
-                return new BufferedWriter(new FileWriter(outputFile));
-            } else {
-                return new BufferedWriter(new OutputStreamWriter(System.out, outputEncoding));
-            }
-        } catch (IOException e) {
-            throw new RuntimeException("Unable to create writer", e);
-        }
+    private boolean hasInteractiveTemplate() {
+        return template != null;
     }
 
     private static File getTemplateOutputFile(File templateDirectory, File templateFile, File outputDirectory) {
diff --git a/freemarker-generator-cli/nginx.yaml b/freemarker-generator-cli/nginx.yaml
deleted file mode 100644
index 5c005c4..0000000
--- a/freemarker-generator-cli/nginx.yaml
+++ /dev/null
@@ -1,2 +0,0 @@
-- NGINX_PORT: 8443
-- NGINX_HOSTNAME: localhost
diff --git a/freemarker-generator-cli/pom.xml b/freemarker-generator-cli/pom.xml
index 8b74a0d..892473d 100644
--- a/freemarker-generator-cli/pom.xml
+++ b/freemarker-generator-cli/pom.xml
@@ -146,7 +146,7 @@
                         <exclude>src/main/resources/patterns/*</exclude>
                         <exclude>site/sample/*/**</exclude>
                         <exclude>src/test/data/encoding/utf8.txt</exclude>
-                        <exclude>src/test/data/json/environments.json</exclude>
+                        <exclude>src/test/data/json/*/**</exclude>
                         <exclude>src/test/data/yaml/environments.yaml</exclude>
                     </excludes>
                 </configuration>
diff --git a/freemarker-generator-cli/run-samples.sh b/freemarker-generator-cli/run-samples.sh
index c6600cb..ec2733a 100755
--- a/freemarker-generator-cli/run-samples.sh
+++ b/freemarker-generator-cli/run-samples.sh
@@ -51,6 +51,7 @@ $FREEMARKER_CMD -i '${XmlTool.parse(DataSources.first)["recipients/person[1]/nam
 $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 '${DataFrameTool.print(DataFrameTool.fromMaps(GsonTool.parse(DataSources.get(0))))}' site/sample/json/github-users.json > target/out/interactive-dataframe.txt || { echo >&2 "Test failed.  Aborting."; exit 1; }
 
 #############################################################################
 # CSV
@@ -118,6 +119,9 @@ $FREEMARKER_CMD -t templates/accesslog/combined-access.ftl site/sample/accesslog
 # Excel
 #############################################################################
 
+echo "templates/excel/dataframe/transform.ftl"
+$FREEMARKER_CMD -t templates/excel/dataframe/transform.ftl site/sample/excel/test.xls > target/out/test.xls.dataframe.txt || { echo >&2 "Test failed.  Aborting."; exit 1; }
+
 echo "templates/excel/html/transform.ftl"
 $FREEMARKER_CMD -t templates/excel/html/transform.ftl site/sample/excel/test.xls > target/out/test.xls.html || { echo >&2 "Test failed.  Aborting."; exit 1; }
 $FREEMARKER_CMD -t templates/excel/html/transform.ftl site/sample/excel/test.xlsx > target/out/test.xslx.html || { echo >&2 "Test failed.  Aborting."; exit 1; }
diff --git a/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/config/Suppliers.java b/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/config/Suppliers.java
index 2c220b2..7151600 100644
--- a/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/config/Suppliers.java
+++ b/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/config/Suppliers.java
@@ -68,14 +68,14 @@ public class Suppliers {
     }
 
     public static TemplateTransformationsSupplier templateTransformationsSupplier(Settings settings) {
-        return (() -> TemplateTransformationsBuilder.builder()
+        return () -> TemplateTransformationsBuilder.builder()
                 .setTemplate("interactive", settings.getInteractiveTemplate())
                 .addSources(settings.getTemplates())
                 .addInclude(settings.getTemplateFileIncludePattern())
                 .addExclude(settings.getTemplateFileExcludePattern())
                 .addOutput(settings.getOutput())
                 .setWriter(settings.getWriter())
-                .build());
+                .build();
     }
 
     public static PropertiesSupplier propertiesSupplier(String fileName) {
diff --git a/freemarker-generator-cli/src/main/scripts/run-samples.sh b/freemarker-generator-cli/src/main/scripts/run-samples.sh
index 98c6391..780a702 100755
--- a/freemarker-generator-cli/src/main/scripts/run-samples.sh
+++ b/freemarker-generator-cli/src/main/scripts/run-samples.sh
@@ -51,6 +51,7 @@ $FREEMARKER_CMD -i '${XmlTool.parse(DataSources.first)["recipients/person[1]/nam
 $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 '${DataFrameTool.print(DataFrameTool.fromMaps(GsonTool.parse(DataSources.get(0))))}' site/sample/json/github-users.json > target/out/interactive-dataframe.txt || { echo >&2 "Test failed.  Aborting."; exit 1; }
 
 #############################################################################
 # CSV
@@ -118,6 +119,9 @@ $FREEMARKER_CMD -t templates/accesslog/combined-access.ftl site/sample/accesslog
 # Excel
 #############################################################################
 
+echo "templates/excel/dataframe/transform.ftl"
+$FREEMARKER_CMD -t templates/excel/dataframe/transform.ftl site/sample/excel/test.xls > target/out/test.xls.dataframe.txt || { echo >&2 "Test failed.  Aborting."; exit 1; }
+
 echo "templates/excel/html/transform.ftl"
 $FREEMARKER_CMD -t templates/excel/html/transform.ftl site/sample/excel/test.xls > target/out/test.xls.html || { echo >&2 "Test failed.  Aborting."; exit 1; }
 $FREEMARKER_CMD -t templates/excel/html/transform.ftl site/sample/excel/test.xlsx > target/out/test.xslx.html || { echo >&2 "Test failed.  Aborting."; exit 1; }
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 5fed83b..884a9e6 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
@@ -49,7 +49,6 @@ public class ManualTest {
     // 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 = "-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";
-    // private static final String CMD = "-b ./src/test -t site/template/ -m nginx.yaml";
     private static final String CMD = "-b ./src/test -t templates/excel/dataframe/transform.ftl site/sample/excel/test.xls";
 
 
diff --git a/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/dataframe/converter/CSVConverter.java b/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/dataframe/converter/CSVConverter.java
index 7b5a3d1..055b508 100644
--- a/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/dataframe/converter/CSVConverter.java
+++ b/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/dataframe/converter/CSVConverter.java
@@ -1,3 +1,19 @@
+/*
+ * 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.
+ */
 package org.apache.freemarker.generator.tools.dataframe.converter;
 
 import de.unknownreality.dataframe.DataFrame;
diff --git a/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/dataframe/converter/ListConverter.java b/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/dataframe/converter/ListConverter.java
index af96cf1..ecf891a 100644
--- a/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/dataframe/converter/ListConverter.java
+++ b/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/dataframe/converter/ListConverter.java
@@ -1,3 +1,19 @@
+/*
+ * 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.
+ */
 package org.apache.freemarker.generator.tools.dataframe.converter;
 
 import de.unknownreality.dataframe.DataFrame;
diff --git a/travis.sh b/travis.sh
index e9c3f62..912d3d7 100755
--- a/travis.sh
+++ b/travis.sh
@@ -1,3 +1,4 @@
+#!/bin/sh
 mvn clean install
 cd ./freemarker-generator-cli
 sh ./run-samples.sh


[freemarker-generator] 02/03: FREEMARKER-144 Proof Of Concept for providing DataFrames

Posted by sg...@apache.org.
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

commit 629673ebc6c40930a9501acf6e8fa924612db9fb
Author: Siegfried Goeschl <si...@gmail.com>
AuthorDate: Wed Jun 17 19:48:02 2020 +0200

    FREEMARKER-144 Proof Of Concept for providing DataFrames
---
 .../src/site/markdown/cli/tools/dataframe.md       | 18 +++++++++++++++---
 .../templates/excel/dataframe/transform.ftl        | 22 +++++-----------------
 2 files changed, 20 insertions(+), 20 deletions(-)

diff --git a/freemarker-generator-cli/src/site/markdown/cli/tools/dataframe.md b/freemarker-generator-cli/src/site/markdown/cli/tools/dataframe.md
index c3bd6f9..00b5a29 100644
--- a/freemarker-generator-cli/src/site/markdown/cli/tools/dataframe.md
+++ b/freemarker-generator-cli/src/site/markdown/cli/tools/dataframe.md
@@ -7,8 +7,8 @@ A `DataFrame` allows declartive filtering and transformation of tabular data, i.
 Currently the following sources are supported
 
 * Apache Commons CSV Parser
-* JSON arrays
-* Excel sheets (to be done)
+* JSON arrays represented as collection of maps
+* Excel sheets represented as rows
 
 ## CSV Examples
 
@@ -160,7 +160,19 @@ being parsed as a list of maps and print the JSOB as dataframe
 
 ## Excel Examples
 
-Let's transform an Excel Sheet to a dataframe being printed
+Let's transform an Excel Sheet to a `DataFrame` being printed using the following template
+
+```
+<#assign dataSource = DataSources.get(0)>
+<#assign workbook = ExcelTool.parse(dataSource)>
+<#list ExcelTool.getSheets(workbook) as sheet>
+    <#assign table = ExcelTool.toTable(sheet)>
+    <#assign df = DataFrameTool.fromRows(table, true)>
+    ${DataFrameTool.print(df)}<#t>
+</#list>
+```
+
+which is rendered by the following command line invocation
 
 ```
 ./bin/freemarker-cli -t templates/excel/dataframe/transform.ftl site/sample/excel/test.xls
diff --git a/freemarker-generator-cli/templates/excel/dataframe/transform.ftl b/freemarker-generator-cli/templates/excel/dataframe/transform.ftl
index 78540ef..d172bec 100644
--- a/freemarker-generator-cli/templates/excel/dataframe/transform.ftl
+++ b/freemarker-generator-cli/templates/excel/dataframe/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
@@ -16,20 +15,9 @@
   under the License.
 -->
 <#assign dataSource = DataSources.get(0)>
-<#assign name = dataSource.name>
 <#assign workbook = ExcelTool.parse(dataSource)>
-<#assign date = .now?iso_utc>
-<#--------------------------------------------------------------------------->
-<@writeSheets workbook/>
-
-<#--------------------------------------------------------------------------->
-<#-- writeSheets                                                           -->
-<#--------------------------------------------------------------------------->
-<#macro writeSheets workbook>
-    <#assign sheets = ExcelTool.getSheets(workbook)>
-    <#list sheets as sheet>
-        <#assign table = ExcelTool.toTable(sheet)>
-        <#assign df = DataFrameTool.fromRows(table, true)>
-        ${DataFrameTool.print(df)}<#t>
-    </#list>
-</#macro>
+<#list ExcelTool.getSheets(workbook) as sheet>
+    <#assign table = ExcelTool.toTable(sheet)>
+    <#assign df = DataFrameTool.fromRows(table, true)>
+    ${DataFrameTool.print(df)}<#t>
+</#list>