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:04:00 UTC

[freemarker-generator] 11/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 a5fbf1c0ebb80fbf77823a572bf31c9d144668b3
Author: Siegfried Goeschl <si...@gmail.com>
AuthorDate: Sun Apr 5 23:59:13 2020 +0200

    FREEMARKER-140 freemarker-cli: Expose DataSources directly in the data model
---
 .../generator/base/datasource/DataSource.java      |  4 +--
 .../base/datasource/DataSourceFactory.java         |  5 +--
 .../generator/cli/config/DataModelsSupplier.java   | 38 ++++++++++------------
 .../freemarker/generator/cli/ManualTest.java       |  4 +--
 4 files changed, 24 insertions(+), 27 deletions(-)

diff --git a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/DataSource.java b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/DataSource.java
index d757b5a..d968e54 100644
--- a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/DataSource.java
+++ b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/DataSource.java
@@ -77,7 +77,7 @@ public class DataSource implements Closeable {
         this.group = emptyToNull(group);
         this.uri = requireNonNull(uri);
         this.dataSource = requireNonNull(dataSource);
-        this.contentType = requireNonNull(contentType);
+        this.contentType = contentType;
         this.charset = requireNonNull(charset);
         this.closables = new CloseableReaper();
     }
@@ -103,7 +103,7 @@ public class DataSource implements Closeable {
     }
 
     public String getContentType() {
-        return contentType;
+        return contentType != null ? contentType : dataSource.getContentType();
     }
 
     public URI getUri() {
diff --git a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/DataSourceFactory.java b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/DataSourceFactory.java
index 3f98adc..47bea88 100644
--- a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/DataSourceFactory.java
+++ b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/DataSourceFactory.java
@@ -62,11 +62,12 @@ public class DataSourceFactory {
         final URI uri = namedUri.getUri();
         final String group = namedUri.getGroupOrElse(DEFAULT_GROUP);
         final Charset charset = getCharsetOrElse(namedUri, UTF_8);
+        final String mimeType = getMimeTypeOrElse(namedUri, null);
 
         if (UriUtils.isHttpURI(uri)) {
             final URL url = toURL(uri);
             final String name = namedUri.getNameOrElse(url.getHost());
-            return fromUrl(name, group, url, charset);
+            return fromUrl(name, group, url, mimeType, charset);
         } else if (UriUtils.isFileUri(uri)) {
             final File file = namedUri.getFile();
             final String name = namedUri.getNameOrElse(file.getName());
@@ -91,7 +92,7 @@ public class DataSourceFactory {
     // == URL ===============================================================
 
     public static DataSource fromUrl(String name, String group, URL url, Charset charset) {
-        return fromUrl(name, group, url, "application/octet-stream", charset);
+        return fromUrl(name, group, url, null, charset);
     }
 
     public static DataSource fromUrl(String name, String group, URL url, String contentType, Charset charset) {
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 4303195..22251d0 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
@@ -41,7 +41,7 @@ import static org.apache.freemarker.generator.base.activation.Mimetypes.MIME_TEX
 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
+ * Create a list of <code>DataModel</code> based on a list of sources consisting of
  * URIs, named URIs or files.
  */
 public class DataModelsSupplier implements Supplier<Map<String, Object>> {
@@ -72,10 +72,10 @@ public class DataModelsSupplier implements Supplier<Map<String, Object>> {
         final String contentType = dataSource.getContentType();
 
         switch (contentType) {
-            case MIME_TEXT_PLAIN:
-                return fromProperties(dataSource, isExplodedDataModel);
             case MIME_APPLICATION_JSON:
                 return fromJson(dataSource, isExplodedDataModel);
+            case MIME_TEXT_PLAIN:
+                return fromProperties(dataSource, isExplodedDataModel);
             case MIME_TEXT_YAML:
                 return fromYaml(dataSource, isExplodedDataModel);
             default:
@@ -84,31 +84,15 @@ public class DataModelsSupplier implements Supplier<Map<String, Object>> {
     }
 
     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;
+        return fromMap(dataSource.getName(), map, isExplodedDataModel);
     }
 
     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;
+        return fromMap(dataSource.getName(), map, isExplodedDataModel);
     }
 
     protected Map<String, Object> fromProperties(DataSource dataSource, boolean isExplodedDataModel) {
@@ -128,4 +112,16 @@ public class DataModelsSupplier implements Supplier<Map<String, Object>> {
 
         return result;
     }
+
+    private Map<String, Object> fromMap(String name, Map<String, Object> map, boolean isExplodedDataModel) {
+        final Map<String, Object> result = new HashMap<>();
+
+        if (isExplodedDataModel) {
+            map.forEach(result::put);
+        } else {
+            result.put(name, map);
+        }
+
+        return result;
+    }
 }
diff --git a/freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/ManualTest.java b/freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/ManualTest.java
index 3e44808..16aec0c 100644
--- a/freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/ManualTest.java
+++ b/freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/ManualTest.java
@@ -43,10 +43,10 @@ public class ManualTest {
     // private static final String CMD = "-b ./src/test -t templates/json/yaml/transform.ftl site/sample/json/swagger-spec.json";
     // private static final String CMD = "-b ./src/test -t templates/yaml/json/transform.ftl site/sample/yaml/swagger-spec.yaml";
     // private static final String CMD = "-b ./src/test -t templates/demo.ftl -m env=env:///";
-    private static final String CMD = "-b ./src/test -t templates/demo.ftl -m env:///";
+    // private static final String CMD = "-b ./src/test -t templates/demo.ftl -m api=https://httpbin.org/get";
     // private static final String CMD = "-b ./src/test -t templates/demo.ftl -m env:///HOME";
     // private static final String CMD = "-b ./src/test -t templates/demo.ftl -m env=./site/sample/properties/user_0001/user.properties";
-    // private static final String CMD = "-b ./src/test -t templates/demo.ftl -m ./site/sample/properties/user_0001/user.properties";
+    private static final String CMD = "-b ./src/test -t templates/demo.ftl -m ./site/sample/properties/user_0001/user.properties";
 
     public static void main(String[] args) {
         Main.execute(toArgs(CMD));