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/05 22:03:59 UTC

[freemarker-generator] 10/11: FREEMARKER-140 freemarker-cli: Expose DataSources directly in the data model

This is an automated email from the ASF dual-hosted git repository.

sgoeschl pushed a commit to branch feature/FREEMARKER-140
in repository https://gitbox.apache.org/repos/asf/freemarker-generator.git

commit f80d16c73d9362a14e67037f678040e89d6b446c
Author: Siegfried Goeschl <si...@gmail.com>
AuthorDate: Sun Apr 5 23:28:22 2020 +0200

    FREEMARKER-140 freemarker-cli: Expose DataSources directly in the data model
---
 .../generator/cli/config/DataModelsSupplier.java       | 18 ++++++++++++++++++
 .../src/test/data/yaml/environments.yaml               |  3 +++
 .../generator/cli/config/DataModelsSupplierTest.java   | 11 +++++++++++
 3 files changed, 32 insertions(+)

diff --git a/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/config/DataModelsSupplier.java b/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/config/DataModelsSupplier.java
index 91187c4..4303195 100644
--- a/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/config/DataModelsSupplier.java
+++ b/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/config/DataModelsSupplier.java
@@ -23,6 +23,7 @@ import org.apache.freemarker.generator.base.uri.NamedUriStringParser;
 import org.apache.freemarker.generator.base.util.PropertiesFactory;
 import org.apache.freemarker.generator.base.util.UriUtils;
 import org.apache.freemarker.generator.tools.gson.GsonTool;
+import org.apache.freemarker.generator.tools.snakeyaml.SnakeYamlTool;
 
 import java.net.URI;
 import java.util.ArrayList;
@@ -37,6 +38,7 @@ import static java.util.Objects.requireNonNull;
 import static java.util.stream.Collectors.toMap;
 import static org.apache.freemarker.generator.base.activation.Mimetypes.MIME_APPLICATION_JSON;
 import static org.apache.freemarker.generator.base.activation.Mimetypes.MIME_TEXT_PLAIN;
+import static org.apache.freemarker.generator.base.activation.Mimetypes.MIME_TEXT_YAML;
 
 /**
  * Create a list of <code>DataSource</code> based on a list of sources consisting of
@@ -74,6 +76,8 @@ public class DataModelsSupplier implements Supplier<Map<String, Object>> {
                 return fromProperties(dataSource, isExplodedDataModel);
             case MIME_APPLICATION_JSON:
                 return fromJson(dataSource, isExplodedDataModel);
+            case MIME_TEXT_YAML:
+                return fromYaml(dataSource, isExplodedDataModel);
             default:
                 throw new IllegalArgumentException("Don't know how to handle :" + contentType);
         }
@@ -93,6 +97,20 @@ public class DataModelsSupplier implements Supplier<Map<String, Object>> {
         return result;
     }
 
+    protected Map<String, Object> fromYaml(DataSource dataSource, boolean isExplodedDataModel) {
+        final Map<String, Object> result = new HashMap<>();
+        final SnakeYamlTool snakeYamlTool = new SnakeYamlTool();
+        final Map<String, Object> map = snakeYamlTool.parse(dataSource);
+
+        if (isExplodedDataModel) {
+            map.forEach((key, value) -> result.put(key.toString(), value));
+        } else {
+            result.put(dataSource.getName(), map);
+        }
+
+        return result;
+    }
+
     protected Map<String, Object> fromProperties(DataSource dataSource, boolean isExplodedDataModel) {
         final Map<String, Object> result = new HashMap<>();
         final URI uri = dataSource.getUri();
diff --git a/freemarker-generator-cli/src/test/data/yaml/environments.yaml b/freemarker-generator-cli/src/test/data/yaml/environments.yaml
new file mode 100644
index 0000000..a9c9d0a
--- /dev/null
+++ b/freemarker-generator-cli/src/test/data/yaml/environments.yaml
@@ -0,0 +1,3 @@
+---
+db_default_user: scott
+db_default_password: tiger
diff --git a/freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/config/DataModelsSupplierTest.java b/freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/config/DataModelsSupplierTest.java
index 0c831c7..bcb5d11 100644
--- a/freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/config/DataModelsSupplierTest.java
+++ b/freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/config/DataModelsSupplierTest.java
@@ -100,6 +100,17 @@ public class DataModelsSupplierTest {
         assertEquals("tiger", model.get("db_default_password"));
     }
 
+    @Test
+    public void shouldResolveYamlFileToTopLevelDataModel() {
+        final DataModelsSupplier supplier = supplier("./src/test/data/yaml/environments.yaml");
+
+        final Map<String, Object> model = supplier.get();
+
+        assertEquals(2, model.size());
+        assertEquals("scott", model.get("db_default_user"));
+        assertEquals("tiger", model.get("db_default_password"));
+    }
+
     private static DataModelsSupplier supplier(String source) {
         return new DataModelsSupplier(singletonList(source));
     }