This is an automated email from the ASF dual-hosted git repository. sgoeschl pushed a commit to branch FREEMARKER-141 in repository https://gitbox.apache.org/repos/asf/freemarker-generator.git
commit fcb37175675edb28bd8bffefe74ff691db33b351 Author: Siegfried Goeschl <[email protected]> AuthorDate: Sun Apr 12 13:17:37 2020 +0200 FREEMARKER-141 freemarker-cli: Expose user-supplied parameters in the data model --- ...ataModelSupplier.java => ParameterModelSupplier.java} | 4 ++-- ...SupplierTest.java => ParameterModelSupplierTest.java} | 8 ++++---- .../java/org/apache/freemarker/generator/cli/Main.java | 1 + .../freemarker/generator/cli/config/Suppliers.java | 11 +++++++++++ .../freemarker/generator/cli/task/FreeMarkerTask.java | 16 +++++++++++++--- .../org/apache/freemarker/generator/cli/ManualTest.java | 4 ++-- 6 files changed, 33 insertions(+), 11 deletions(-) diff --git a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/parameter/ParameterDataModelSupplier.java b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/parameter/ParameterModelSupplier.java similarity index 95% rename from freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/parameter/ParameterDataModelSupplier.java rename to freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/parameter/ParameterModelSupplier.java index 78da855..7dc0d86 100644 --- a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/parameter/ParameterDataModelSupplier.java +++ b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/parameter/ParameterModelSupplier.java @@ -34,11 +34,11 @@ import static java.util.stream.Collectors.toList; * to a map. The map contains either (key->String) or * (key->Map<String, Object>). */ -public class ParameterDataModelSupplier implements Supplier<Map<String, Object>> { +public class ParameterModelSupplier implements Supplier<Map<String, Object>> { private final Collection<String> parameters; - public ParameterDataModelSupplier(Collection<String> parameters) { + public ParameterModelSupplier(Collection<String> parameters) { this.parameters = requireNonNull(parameters); } diff --git a/freemarker-generator-base/src/test/java/org/apache/freemarker/generator/parameter/ParameterDataModelSupplierTest.java b/freemarker-generator-base/src/test/java/org/apache/freemarker/generator/parameter/ParameterModelSupplierTest.java similarity index 91% rename from freemarker-generator-base/src/test/java/org/apache/freemarker/generator/parameter/ParameterDataModelSupplierTest.java rename to freemarker-generator-base/src/test/java/org/apache/freemarker/generator/parameter/ParameterModelSupplierTest.java index 8eeedf8..73ce918 100644 --- a/freemarker-generator-base/src/test/java/org/apache/freemarker/generator/parameter/ParameterDataModelSupplierTest.java +++ b/freemarker-generator-base/src/test/java/org/apache/freemarker/generator/parameter/ParameterModelSupplierTest.java @@ -16,7 +16,7 @@ */ package org.apache.freemarker.generator.parameter; -import org.apache.freemarker.generator.base.parameter.ParameterDataModelSupplier; +import org.apache.freemarker.generator.base.parameter.ParameterModelSupplier; import org.junit.Test; import java.util.ArrayList; @@ -25,7 +25,7 @@ import java.util.Map; import static org.junit.Assert.assertEquals; -public class ParameterDataModelSupplierTest { +public class ParameterModelSupplierTest { @Test public void shouldConvertMissingParametersToMap() { @@ -68,9 +68,9 @@ public class ParameterDataModelSupplierTest { assertEquals("value2", toMap(map, "group2").get("name2")); } - private static ParameterDataModelSupplier supplier(String... values) { + private static ParameterModelSupplier supplier(String... values) { final ArrayList<String> parameters = new ArrayList<>(Arrays.asList(values)); - return new ParameterDataModelSupplier(parameters); + return new ParameterModelSupplier(parameters); } @SuppressWarnings("unchecked") diff --git a/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/Main.java b/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/Main.java index e3b17b4..51928a0 100644 --- a/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/Main.java +++ b/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/Main.java @@ -38,6 +38,7 @@ import java.io.IOException; import java.io.OutputStreamWriter; import java.io.Writer; import java.util.Collection; +import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; 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 79f6e0a..93dff34 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 @@ -21,8 +21,11 @@ import org.apache.freemarker.generator.base.datasource.DataSourcesSupplier; import org.apache.freemarker.generator.base.file.PropertiesClassPathSupplier; import org.apache.freemarker.generator.base.file.PropertiesFileSystemSupplier; import org.apache.freemarker.generator.base.file.PropertiesSupplier; +import org.apache.freemarker.generator.base.parameter.ParameterModelSupplier; +import java.util.List; import java.util.function.Supplier; +import java.util.stream.Collectors; /** * Convenience methods to create suppliers. @@ -60,6 +63,14 @@ public class Suppliers { return new DataModelSupplier(settings.getDataModels()); } + public static ParameterModelSupplier parameterSupplier(Settings settings) { + final List<String> parameters = settings.getParameters().entrySet().stream() + .map(e -> e.getKey() + "=" + e.getValue()) + .collect(Collectors.toList()); + + return new ParameterModelSupplier(parameters); + } + public static PropertiesSupplier propertiesSupplier(String fileName) { return new PropertiesSupplier( new PropertiesFileSystemSupplier(fileName), diff --git a/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/task/FreeMarkerTask.java b/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/task/FreeMarkerTask.java index a89bc33..da83bb9 100644 --- a/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/task/FreeMarkerTask.java +++ b/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/task/FreeMarkerTask.java @@ -45,6 +45,7 @@ import static org.apache.freemarker.generator.base.FreeMarkerConstants.Model.DAT import static org.apache.freemarker.generator.cli.config.Suppliers.configurationSupplier; import static org.apache.freemarker.generator.cli.config.Suppliers.dataModelSupplier; import static org.apache.freemarker.generator.cli.config.Suppliers.dataSourcesSupplier; +import static org.apache.freemarker.generator.cli.config.Suppliers.parameterSupplier; import static org.apache.freemarker.generator.cli.config.Suppliers.toolsSupplier; /** @@ -58,21 +59,29 @@ public class FreeMarkerTask implements Callable<Integer> { private final Supplier<Map<String, Object>> toolsSupplier; private final Supplier<List<DataSource>> dataSourcesSupplier; private final Supplier<Map<String, Object>> dataModelsSupplier; + private final Supplier<Map<String, Object>> parameterModelSupplier; private final Supplier<Configuration> configurationSupplier; public FreeMarkerTask(Settings settings) { - this(settings, toolsSupplier(settings), dataSourcesSupplier(settings), dataModelSupplier(settings), configurationSupplier(settings)); + this(settings, + toolsSupplier(settings), + dataSourcesSupplier(settings), + dataModelSupplier(settings), + parameterSupplier(settings), + configurationSupplier(settings)); } public FreeMarkerTask(Settings settings, Supplier<Map<String, Object>> toolsSupplier, Supplier<List<DataSource>> dataSourcesSupplier, Supplier<Map<String, Object>> dataModelsSupplier, + Supplier<Map<String, Object>> parameterModelSupplier, Supplier<Configuration> configurationSupplier) { this.settings = requireNonNull(settings); this.toolsSupplier = requireNonNull(toolsSupplier); this.dataSourcesSupplier = requireNonNull(dataSourcesSupplier); this.dataModelsSupplier = requireNonNull(dataModelsSupplier); + this.parameterModelSupplier = requireNonNull(parameterModelSupplier); this.configurationSupplier = requireNonNull(configurationSupplier); } @@ -80,7 +89,7 @@ public class FreeMarkerTask implements Callable<Integer> { public Integer call() { final Template template = template(settings, configurationSupplier); try (Writer writer = settings.getWriter(); DataSources dataSources = dataSources(settings, dataSourcesSupplier)) { - final Map<String, Object> dataModel = dataModel(settings, dataSources, dataModelsSupplier, toolsSupplier); + final Map<String, Object> dataModel = dataModel(settings, dataSources, parameterModelSupplier, dataModelsSupplier, toolsSupplier); template.process(dataModel, writer); return SUCCESS; } catch (RuntimeException e) { @@ -133,6 +142,7 @@ public class FreeMarkerTask implements Callable<Integer> { private static Map<String, Object> dataModel( Settings settings, DataSources dataSources, + Supplier<Map<String, Object>> parameterModelSupplier, Supplier<Map<String, Object>> dataModelsSupplier, Supplier<Map<String, Object>> tools) { final Map<String, Object> result = new HashMap<>(); @@ -144,9 +154,9 @@ public class FreeMarkerTask implements Callable<Integer> { if (settings.isEnvironmentExposed()) { // add all system & user-supplied properties as top-level entries result.putAll(System.getenv()); - result.putAll(settings.getParameters()); } + result.putAll(parameterModelSupplier.get()); result.putAll(tools.get()); return result; 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 0dac268..46dc60b 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 @@ -28,7 +28,7 @@ public class ManualTest { // private static final String CMD = "-b ./src/test -l de_AT -DFOO=foo -DBAR=bar -t templates/info.ftl site/sample/csv/transactions.csv"; // private static final String CMD = "-b ./src/test -DFOO=foo -PBAR=bar -l de -t templates/demo.ftl site/sample/csv/transactions.csv"; // private static final String CMD = "-b ./src/test -DFOO=foo -PBAR=bar -t templates/demo.ftl site/sample/csv/transactions.csv"; - // private static final String CMD = "-b ./src/test -Dcsv.out.format=TDF -t templates/csv/transform.ftl site/sample/csv/contract.csv"; + private static final String CMD = "-b ./src/test -P csv.out.format=TDF -t templates/csv/transform.ftl site/sample/csv/contract.csv"; // private static final String CMD = "-t templates/excel/csv/transform.ftl -l de_AT site/sample/excel/test.xlsx"; // private static final String CMD = "-i ${JsonPathTool.parse(DataSources.first).read('$.info.title')} site/sample/json/swagger-spec.json"; // private static final String CMD = "-i ${XmlTool.parse(DataSources.first)['recipients/person[1]/name']} site/sample/xml/recipients.xml"; @@ -48,7 +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/info.ftl google=https://www.google.com"; + // private static final String CMD = "-b ./src/test -t templates/info.ftl -P key:group=value"; public static void main(String[] args) {
