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 e8730783c6bdf824b9b1e6c04957331ff139dc8e Author: Siegfried Goeschl <[email protected]> AuthorDate: Thu Jun 18 16:01:26 2020 +0200 FREEMARKER-146 Cleanly separate example templates and data from user-supplied content --- freemarker-generator-cli/README.md | 8 +++-- .../examples/templates/csv/{ => csv}/transform.ftl | 6 +++- .../freemarker/generator/cli/ExamplesTest.java | 2 +- .../freemarker/generator/cli/ManualTest.java | 3 +- freemarker-generator-cli/templates/info.ftl | 4 +-- .../generator/tools/system/SystemTool.java | 37 ++++++++++++++++++++++ .../generator/tools/system/SystemToolTest.java | 19 +++++++++-- 7 files changed, 69 insertions(+), 10 deletions(-) diff --git a/freemarker-generator-cli/README.md b/freemarker-generator-cli/README.md index 7f8ad48..2f42273 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 examples/templates/csv/transform.ftl ./examples/data/csv/contract.csv +> bin/freemarker-cli -PCVS_IN_DELIMITER=COMMA -PCSV_OUT_DELIMITER=PIPE -t examples/templates/csv/csv/transform.ftl ./examples/data/csv/contract.csv renders the following template @@ -902,7 +902,11 @@ renders the following template <#ftl output_format="plainText" strip_text="true"> <#assign csvParser = createCsvParser(DataSources.get(0))> <#assign csvPrinter = createCsvPrinter()> -<#-- Print each line without materializing the CSV in memory --> +<#-- + Print each record directly to the underyling writer without materializing the CSV in memory. + FreeMarker and CSV output are out of sync but millions of records can processed without + running out of memory. +--> <#compress> <#list csvParser.iterator() as record> ${csvPrinter.printRecord(record)} diff --git a/freemarker-generator-cli/examples/templates/csv/transform.ftl b/freemarker-generator-cli/examples/templates/csv/csv/transform.ftl similarity index 88% rename from freemarker-generator-cli/examples/templates/csv/transform.ftl rename to freemarker-generator-cli/examples/templates/csv/csv/transform.ftl index af091ec..05d60af 100644 --- a/freemarker-generator-cli/examples/templates/csv/transform.ftl +++ b/freemarker-generator-cli/examples/templates/csv/csv/transform.ftl @@ -17,7 +17,11 @@ --> <#assign csvParser = createCsvParser(DataSources.get(0))> <#assign csvPrinter = createCsvPrinter()> -<#-- Print each line without materializing the CSV in memory --> +<#-- + Print each record directly to the underyling writer without materializing the CSV in memory. + FreeMarker and CSV output are out of sync but millions of records can processed without + running out of memory. +--> <#compress> <#list csvParser.iterator() as record> ${csvPrinter.printRecord(record)} 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 ecf1573..b651a8f 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 @@ -51,7 +51,7 @@ public class ExamplesTest extends AbstractMainTest { assertValid(execute("-t examples/templates/csv/fo/transform.ftl examples/data/csv/locker-test-users.csv")); assertValid(execute("-t examples/templates/csv/fo/transactions.ftl examples/data/csv/transactions.csv")); assertValid(execute("-t examples/templates/csv/html/transactions.ftl examples/data/csv/transactions.csv")); - assertValid(execute("-t examples/templates/csv/transform.ftl examples/data/csv/contract.csv")); + assertValid(execute("-t examples/templates/csv/csv/transform.ftl examples/data/csv/contract.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 0699a44..91be862 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,7 +24,8 @@ import java.util.Arrays; public class ManualTest { private static final String SPACE = " "; - private static final String CMD = "-DCSV_TOOL_DELIMITER=SEMICOLON -DCSV_TOOL_HEADERS=true -t examples/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 -t examples/templates/dataframe/example.ftl https://raw.githubusercontent.com/nRo/DataFrame/master/src/test/resources/users.csv"; + private static final String CMD = "-PCSV_OUT_FORMAT=EXCEL -t examples/templates/csv/csv/transform.ftl examples/data/csv/contract.csv"; public static void main(String[] args) { diff --git a/freemarker-generator-cli/templates/info.ftl b/freemarker-generator-cli/templates/info.ftl index 565e2ec..838ac29 100644 --- a/freemarker-generator-cli/templates/info.ftl +++ b/freemarker-generator-cli/templates/info.ftl @@ -49,8 +49,8 @@ FreeMarker CLI Data Model FreeMarker CLI DataSources ------------------------------------------------------------------------------ <#list DataSources.list as dataSource> - [#${dataSource?counter}], name=${dataSource.name}, group=${dataSource.group}, contentType=${dataSource.contentType}, charset=${dataSource.charset}, length=${dataSource.length} Bytes - URI : ${dataSource.uri} +[#${dataSource?counter}], name=${dataSource.name}, group=${dataSource.group}, contentType=${dataSource.contentType}, charset=${dataSource.charset}, length=${dataSource.length} Bytes +URI : ${dataSource.uri} </#list> </#if> diff --git a/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/system/SystemTool.java b/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/system/SystemTool.java index 7f2cc16..dfade40 100644 --- a/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/system/SystemTool.java +++ b/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/system/SystemTool.java @@ -17,6 +17,8 @@ */ package org.apache.freemarker.generator.tools.system; +import org.apache.freemarker.generator.base.util.StringUtils; + import java.io.File; import java.io.Writer; import java.net.InetAddress; @@ -122,6 +124,34 @@ public class SystemTool { return env != null ? env : def; } + /** + * Convinience lookup of a configuration value based on + * user-supplied parameters, system properties and + * environment variables. + * + * @param name name of the configuration parameter + * @return value of null + */ + public String getString(String name) { + return StringUtils.firstNonEmpty( + getParameter(name), + System.getProperty(name), + getEnv(name)); + } + + /** + * Convinience lookup of a configuration value based on + * user-supplied parameters, system properties and + * environment variables. + * + * @param name name of the configuration parameter + * @param def default value + * @return value of null + */ + public String getString(String name, String def) { + return StringUtils.firstNonEmpty(getString(name), def); + } + public String getHostName() { try { return InetAddress.getLocalHost().getHostName(); @@ -130,6 +160,13 @@ public class SystemTool { } } + /** + * The <code>Writer</code> passed to FreeMarker for rendering the output. Please + * note that FreeMarker does some magic on top of the writer so output generated + * by using the writer and FreeMarker templates are scrambled. + * + * @return writer + */ public Writer getWriter() { return writer; } diff --git a/freemarker-generator-tools/src/test/java/org/apache/freemarker/generator/tools/system/SystemToolTest.java b/freemarker-generator-tools/src/test/java/org/apache/freemarker/generator/tools/system/SystemToolTest.java index 46323be..23d90ee 100644 --- a/freemarker-generator-tools/src/test/java/org/apache/freemarker/generator/tools/system/SystemToolTest.java +++ b/freemarker-generator-tools/src/test/java/org/apache/freemarker/generator/tools/system/SystemToolTest.java @@ -18,22 +18,35 @@ package org.apache.freemarker.generator.tools.system; import org.junit.Test; +import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; public class SystemToolTest { + private static final String USER = System.getenv("USER"); + @Test - public void shallGetProperties() { + public void shouldGetProperties() { assertFalse(systemTool().getSystemProperties().isEmpty()); } @Test - public void shallGetEnvs() { + public void shouldGetEnvs() { assertFalse(systemTool().getEnvs().isEmpty()); } @Test - public void shallGetHostName() { + public void shouldGetString() { + assertEquals(USER, systemTool().getString("USER")); + } + + @Test + public void shouldGetStringWithDefault() { + assertEquals("foo", systemTool().getString("_DOES_NOT_EXIST_", "foo")); + } + + @Test + public void shouldGetHostName() { assertFalse(systemTool().getHostName().isEmpty()); }
