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:58 UTC
[freemarker-generator] 09/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 c8af6edc68ade0ba6418d0825204dc503259a296
Author: Siegfried Goeschl <si...@gmail.com>
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);
}
}