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 <[email protected]>
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());

Reply via email to