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 0e092125ac7f60f18c8de9396dea5f46490d25d1
Author: Siegfried Goeschl <[email protected]>
AuthorDate: Sun Jun 14 22:50:27 2020 +0200

    FREEMARKER-144 Proof Of Concept for providing DataFrames
---
 .../freemarker/generator/cli/ManualTest.java       |  4 +--
 .../templates/dataframe/example.ftl                |  6 +++-
 .../generator/tools/dataframe/DataFrameTool.java   | 34 +++++++---------------
 .../tools/dataframe/converter/CSVConverter.java    | 13 +--------
 .../tools/dataframe/converter/ConverterUtils.java  | 32 ++++++++------------
 .../tools/dataframe/converter/ListConverter.java   | 10 +++----
 .../tools/dataframe/converter/MapConverter.java    |  4 ---
 .../tools/dataframe/DataFrameToolTest.java         | 12 +++++++-
 8 files changed, 47 insertions(+), 68 deletions(-)

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 9fc8d49..ab9ceb9 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,8 @@ 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 = "-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 = "-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";
 
 
     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 0ac3193..54d0ac2 100644
--- a/freemarker-generator-cli/templates/dataframe/example.ftl
+++ b/freemarker-generator-cli/templates/dataframe/example.ftl
@@ -22,6 +22,10 @@ Original Data
 =============================================================================
 ${DataFrameTool.print(users)}
 
+Select By Age
+=============================================================================
+${DataFrameTool.print(users.select("(age > 40)"))}
+
 Select By Name & Country
 =============================================================================
 <#assign country = "Germany">
@@ -39,6 +43,6 @@ 
${DataFrameTool.print(users.getColumn("country").transform(DataFrameTool.transfo
 
 Group By Age & Country
 =============================================================================
-${DataFrameTool.print(users.groupBy("age", "country").sort("age"))}
+${DataFrameTool.print(users.groupBy("country", "age").sort("country"))}
 
 
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 695cd04..0b75936 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
@@ -18,23 +18,21 @@ package org.apache.freemarker.generator.tools.dataframe;
 
 import de.unknownreality.dataframe.DataFrame;
 import de.unknownreality.dataframe.DataFrameWriter;
+import de.unknownreality.dataframe.print.Printer;
+import de.unknownreality.dataframe.print.PrinterBuilder;
 import de.unknownreality.dataframe.sort.SortColumn.Direction;
 import de.unknownreality.dataframe.transform.ColumnDataFrameTransform;
 import de.unknownreality.dataframe.transform.CountTransformer;
 import org.apache.commons.csv.CSVParser;
-import org.apache.freemarker.generator.base.util.Validate;
 import org.apache.freemarker.generator.tools.dataframe.converter.CSVConverter;
 import org.apache.freemarker.generator.tools.dataframe.converter.ListConverter;
 import org.apache.freemarker.generator.tools.dataframe.converter.MapConverter;
 
-import java.io.Writer;
+import java.io.StringWriter;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
-import static java.util.Objects.requireNonNull;
-import static 
org.apache.freemarker.generator.base.FreeMarkerConstants.Model.FREEMARKER_WRITER;
-
 /**
  * Create and manipulate data frame (tabular data structure). Data frames allow
  * easy manipulation and transformation of data, e.g. joining two data frames.
@@ -42,18 +40,6 @@ import static 
org.apache.freemarker.generator.base.FreeMarkerConstants.Model.FRE
  */
 public class DataFrameTool {
 
-    /** Underlying FreeMarker writer for rendering templates */
-    private final Writer writer;
-
-    public DataFrameTool() {
-        this.writer = null;
-    }
-
-    public DataFrameTool(Map<String, Object> settings) {
-        requireNonNull(settings);
-        this.writer = (Writer) settings.getOrDefault(FREEMARKER_WRITER, null);
-    }
-
     /**
      * Create a data frame from  Apache Commons CSVParser.
      *
@@ -77,12 +63,12 @@ public class DataFrameTool {
     /**
      * Create a data frame from a list of rows.
      *
-     * @param lists                     lists to build the data frame from
+     * @param rows                      rows to build the data frame from
      * @param withFirstRowAsColumnNames column names as first row?
      * @return data frame
      */
-    public DataFrame fromLists(List<List<Object>> lists, boolean 
withFirstRowAsColumnNames) {
-        return ListConverter.toDataFrame(lists, withFirstRowAsColumnNames);
+    public DataFrame fromLists(List<List<Object>> rows, boolean 
withFirstRowAsColumnNames) {
+        return ListConverter.toDataFrame(rows, withFirstRowAsColumnNames);
     }
 
     /**
@@ -113,9 +99,11 @@ public class DataFrameTool {
      *
      * @param dataFrame data frame
      */
-    public void print(DataFrame dataFrame) {
-        Validate.notNull(writer, "No writer available");
-        DataFrameWriter.write(writer, dataFrame, 
DataFrameWriter.DEFAULT_PRINT_FORMAT);
+    public String print(DataFrame dataFrame) {
+        final StringWriter writer = new StringWriter();
+        final Printer printer = 
PrinterBuilder.create().withAutoWidth(dataFrame.getHeader()).build();
+        DataFrameWriter.write(writer, dataFrame, printer);
+        return writer.toString();
     }
 
     @Override
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 06863fb..7b5a3d1 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
@@ -28,7 +28,7 @@ public class CSVConverter {
                 headerNames.forEach(builder::addStringColumn);
             } else {
                 for (int i = 0; i < firstRecord.size(); i++) {
-                    builder.addStringColumn(getAlphaColumnName(i + 1));
+                    
builder.addStringColumn(ConverterUtils.getAlphaColumnName(i + 1));
                 }
             }
 
@@ -49,15 +49,4 @@ public class CSVConverter {
         }
     }
 
-    private static String getAlphaColumnName(int num) {
-        String result = "";
-        while (num > 0) {
-            num--; // 1 => a, not 0 => a
-            final int remainder = num % 26;
-            final char digit = (char) (remainder + 65);
-            result = digit + result;
-            num = (num - remainder) / 26;
-        }
-        return result;
-    }
 }
diff --git 
a/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/dataframe/converter/ConverterUtils.java
 
b/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/dataframe/converter/ConverterUtils.java
index 9a1e4fb..c6d05af 100644
--- 
a/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/dataframe/converter/ConverterUtils.java
+++ 
b/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/dataframe/converter/ConverterUtils.java
@@ -13,6 +13,18 @@ public class ConverterUtils {
         return appendValues(dataFrame, table);
     }
 
+    static String getAlphaColumnName(int num) {
+        String result = "";
+        while (num > 0) {
+            num--; // 1 => a, not 0 => a
+            final int remainder = num % 26;
+            final char digit = (char) (remainder + 65);
+            result = digit + result;
+            num = (num - remainder) / 26;
+        }
+        return result;
+    }
+
     private static DataFrameBuilder addColumn(DataFrameBuilder builder, String 
name, Class<?> clazz) {
         switch (clazz.getName()) {
             case "java.lang.Boolean":
@@ -51,14 +63,6 @@ public class ConverterUtils {
         return comparables;
     }
 
-    private static Comparable<?>[] toComparables(Object[] values) {
-        final Comparable<?>[] comparables = new Comparable<?>[values.length];
-        for (int i = 0; i < values.length; i++) {
-            comparables[i] = (Comparable<?>) values[i];
-        }
-        return comparables;
-    }
-
     /**
      * Create a <code>DataFrame</code> from a table.
      *
@@ -91,16 +95,4 @@ public class ConverterUtils {
         }
         return dataFrame;
     }
-
-    private static String getAlphaColumnName(int num) {
-        String result = "";
-        while (num > 0) {
-            num--; // 1 => a, not 0 => a
-            final int remainder = num % 26;
-            final char digit = (char) (remainder + 65);
-            result = digit + result;
-            num = (num - remainder) / 26;
-        }
-        return result;
-    }
 }
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 95bc6bf..c3e0dff 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
@@ -8,14 +8,14 @@ import java.util.List;
 public class ListConverter {
 
     /**
-     * Create a data frame from a list of lists. It is assumed
-     * that the lists represent tabular data.
+     * Create a data frame from a list of rows. It is assumed
+     * that the rows represent tabular data.
      *
-     * @param lists lists to build the data frame
+     * @param rows rows to build the data frame
      * @return <code>DataFrame</code>
      */
-    public static DataFrame toDataFrame(List<List<Object>> lists, boolean 
withFirstRowAsColumnNames) {
-        final Table table = Table.fromLists(lists, withFirstRowAsColumnNames);
+    public static DataFrame toDataFrame(List<List<Object>> rows, boolean 
withFirstRowAsColumnNames) {
+        final Table table = Table.fromLists(rows, withFirstRowAsColumnNames);
         return ConverterUtils.toDataFrame(table);
     }
 }
diff --git 
a/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/dataframe/converter/MapConverter.java
 
b/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/dataframe/converter/MapConverter.java
index e96d938..5970920 100644
--- 
a/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/dataframe/converter/MapConverter.java
+++ 
b/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/dataframe/converter/MapConverter.java
@@ -29,10 +29,6 @@ public class MapConverter {
      * @return <code>DataFrame</code>
      */
     public static DataFrame toDataFrame(List<Map<String, Object>> maps) {
-        if (maps == null || maps.isEmpty()) {
-            return DataFrameBuilder.createDefault();
-        }
-
         final Table table = Table.fromMaps(maps);
         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 8c93dd3..8076cbb 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
@@ -30,6 +30,7 @@ import java.util.List;
 import java.util.Map;
 
 import static junit.framework.TestCase.assertEquals;
+import static junit.framework.TestCase.assertNotNull;
 import static org.apache.commons.csv.CSVFormat.DEFAULT;
 
 public class DataFrameToolTest {
@@ -117,7 +118,16 @@ public class DataFrameToolTest {
 
         final DataFrame dataFrame = dataFrameTool().fromLists(sheet, true);
 
-        return;
+        assertEquals(7, dataFrame.getColumns().size());
+        assertEquals(2, dataFrame.getRows().size());
+        assertNotNull(dataFrame.getColumn("Text"));
+        assertNotNull(dataFrame.getColumn("Date"));
+        assertNotNull(dataFrame.getColumn("Number"));
+        assertNotNull(dataFrame.getColumn("Time"));
+        assertNotNull(dataFrame.getColumn("Percentage"));
+        assertNotNull(dataFrame.getColumn("Forumula"));
+        assertEquals("Row 1", dataFrame.getValue(0,0));
+        assertEquals("C3*F3", dataFrame.getColumn("Forumula").get(1));
 
     }
 

Reply via email to