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