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/04/15 22:26:23 UTC

[freemarker-generator] 02/08: FREEMARKER-141 freemarker-cli: Expose user-supplied parameters in the data model

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 <si...@gmail.com>
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) {