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 <[email protected]> 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)); }
