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));