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));
}