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 c8af6edc68ade0ba6418d0825204dc503259a296 Author: Siegfried Goeschl <[email protected]> AuthorDate: Sun Apr 5 23:25:01 2020 +0200 FREEMARKER-140 freemarker-cli: Expose DataSources directly in the data model --- .../generator/cli/config}/DataModelsSupplier.java | 20 +++++++++++++++++++- .../freemarker/generator/cli/config/Suppliers.java | 1 - .../src/test/data/json/environments.json | 4 ++++ .../src/test/data/properties/test.properties | 17 +++++++++++++++++ .../cli/config}/DataModelsSupplierTest.java | 14 ++++++++++++-- .../freemarker/generator/tools/gson/GsonTool.java | 4 +++- 6 files changed, 55 insertions(+), 5 deletions(-) diff --git a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datamodel/DataModelsSupplier.java b/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/config/DataModelsSupplier.java similarity index 81% rename from freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datamodel/DataModelsSupplier.java rename to freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/config/DataModelsSupplier.java index f9da638..91187c4 100644 --- a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datamodel/DataModelsSupplier.java +++ b/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/config/DataModelsSupplier.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.freemarker.generator.base.datamodel; +package org.apache.freemarker.generator.cli.config; import org.apache.freemarker.generator.base.datasource.DataSource; import org.apache.freemarker.generator.base.datasource.DataSourceFactory; @@ -22,6 +22,7 @@ import org.apache.freemarker.generator.base.uri.NamedUri; 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 java.net.URI; import java.util.ArrayList; @@ -34,6 +35,7 @@ import java.util.function.Supplier; 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; /** @@ -70,11 +72,27 @@ public class DataModelsSupplier implements Supplier<Map<String, Object>> { switch (contentType) { case MIME_TEXT_PLAIN: return fromProperties(dataSource, isExplodedDataModel); + case MIME_APPLICATION_JSON: + return fromJson(dataSource, isExplodedDataModel); default: throw new IllegalArgumentException("Don't know how to handle :" + contentType); } } + protected Map<String, Object> fromJson(DataSource dataSource, boolean isExplodedDataModel) { + final Map<String, Object> result = new HashMap<>(); + final GsonTool gsonTool = new GsonTool(); + final Map<String, Object> map = gsonTool.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/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 41cd94a..1692443 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 @@ -17,7 +17,6 @@ package org.apache.freemarker.generator.cli.config; import freemarker.cache.TemplateLoader; -import org.apache.freemarker.generator.base.datamodel.DataModelsSupplier; import org.apache.freemarker.generator.base.datasource.DataSourcesSupplier; import org.apache.freemarker.generator.base.file.PropertiesClassPathSupplier; import org.apache.freemarker.generator.base.file.PropertiesFileSystemSupplier; diff --git a/freemarker-generator-cli/src/test/data/json/environments.json b/freemarker-generator-cli/src/test/data/json/environments.json new file mode 100644 index 0000000..eb11bc4 --- /dev/null +++ b/freemarker-generator-cli/src/test/data/json/environments.json @@ -0,0 +1,4 @@ +{ + "db_default_user": "scott", + "db_default_password": "tiger" +} \ No newline at end of file diff --git a/freemarker-generator-cli/src/test/data/properties/test.properties b/freemarker-generator-cli/src/test/data/properties/test.properties new file mode 100644 index 0000000..6431653 --- /dev/null +++ b/freemarker-generator-cli/src/test/data/properties/test.properties @@ -0,0 +1,17 @@ +## --------------------------------------------------------------------------- +## Licensed to the Apache Software Foundation (ASF) under one or more +## contributor license agreements. See the NOTICE file distributed with +## this work for additional information regarding copyright ownership. +## The ASF licenses this file to You under the Apache License, Version 2.0 +## (the "License"); you may not use this file except in compliance with +## the License. You may obtain a copy of the License at +## +## http://www.apache.org/licenses/LICENSE-2.0 +## +## Unless required by applicable law or agreed to in writing, software +## distributed under the License is distributed on an "AS IS" BASIS, +## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +## See the License for the specific language governing permissions and +## limitations under the License. +## --------------------------------------------------------------------------- +foo=bar \ No newline at end of file diff --git a/freemarker-generator-base/src/test/java/org/apache/freemarker/generator/datamodel/DataModelsSupplierTest.java b/freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/config/DataModelsSupplierTest.java similarity index 88% rename from freemarker-generator-base/src/test/java/org/apache/freemarker/generator/datamodel/DataModelsSupplierTest.java rename to freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/config/DataModelsSupplierTest.java index e3ebb6e..0c831c7 100644 --- a/freemarker-generator-base/src/test/java/org/apache/freemarker/generator/datamodel/DataModelsSupplierTest.java +++ b/freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/config/DataModelsSupplierTest.java @@ -14,9 +14,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.freemarker.generator.datamodel; +package org.apache.freemarker.generator.cli.config; -import org.apache.freemarker.generator.base.datamodel.DataModelsSupplier; import org.junit.Test; import java.util.Map; @@ -90,6 +89,17 @@ public class DataModelsSupplierTest { assertEquals("bar", toMap(model, "props").get("foo")); } + @Test + public void shouldResolveJsonFileToTopLevelDataModel() { + final DataModelsSupplier supplier = supplier("./src/test/data/json/environments.json"); + + 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)); } diff --git a/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/gson/GsonTool.java b/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/gson/GsonTool.java index 9805afd..6a864eb 100644 --- a/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/gson/GsonTool.java +++ b/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/gson/GsonTool.java @@ -32,9 +32,11 @@ public class GsonTool { private Gson gson; private Type type; - public Map<String, Object> parse(DataSource dataSource) throws IOException { + public Map<String, Object> parse(DataSource dataSource) { try (JsonReader reader = new JsonReader(new InputStreamReader(dataSource.getUnsafeInputStream()))) { return gson().fromJson(reader, type()); + } catch (IOException e) { + throw new RuntimeException("Failed to parse data source:" + dataSource, e); } }
