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:55 UTC

[freemarker-generator] 06/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 6c12e9ab3dae68f9f2d5764b4b39d2e851cce242
Author: Siegfried Goeschl <si...@gmail.com>
AuthorDate: Sun Apr 5 21:03:25 2020 +0200

    FREEMARKER-140 freemarker-cli: Expose DataSources directly in the data model
---
 .../base/datasource/DataSourceFactory.java         | 29 +++++++++++++++++++---
 1 file changed, 26 insertions(+), 3 deletions(-)

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 95e7e68..a2ee5e3 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
@@ -23,20 +23,26 @@ import org.apache.freemarker.generator.base.activation.MimetypesFileTypeMapFacto
 import org.apache.freemarker.generator.base.activation.StringDataSource;
 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.StringUtils;
 import org.apache.freemarker.generator.base.util.UriUtils;
 
 import javax.activation.FileDataSource;
 import javax.activation.URLDataSource;
 import java.io.File;
+import java.io.IOException;
 import java.io.InputStream;
+import java.io.StringWriter;
 import java.net.MalformedURLException;
 import java.net.URI;
 import java.net.URL;
 import java.nio.charset.Charset;
+import java.util.Properties;
 
 import static java.nio.charset.StandardCharsets.UTF_8;
 import static org.apache.freemarker.generator.base.FreeMarkerConstants.DEFAULT_GROUP;
+import static org.apache.freemarker.generator.base.activation.Mimetypes.MIME_TEXT_PLAIN;
+import static org.apache.freemarker.generator.base.util.StringUtils.firstNonEmpty;
 
 /**
  * Creates a FreeMarker data source from various sources.
@@ -67,9 +73,13 @@ public class DataSourceFactory {
             return fromFile(name, group, file, charset);
         } else if (UriUtils.isEnvUri(uri)) {
             final String key = uri.getPath().substring(1);
-            final String name = StringUtils.firstNonEmpty(namedUri.getName(), key, "env");
-            final String contentType = getMimeTypeOrElse(namedUri, "text/plain");
-            return fromEnvironment(name, group, key, contentType);
+            final String contentType = getMimeTypeOrElse(namedUri, MIME_TEXT_PLAIN);
+            final String name = firstNonEmpty(namedUri.getName(), key, Location.ENVIRONMENT);
+            if (StringUtils.isEmpty(key)) {
+                return fromEnvironment(name, group, contentType);
+            } else {
+                return fromEnvironment(name, group, key, contentType);
+            }
         } else {
             throw new IllegalArgumentException("Don't knowm how to handle: " + namedUri);
         }
@@ -135,6 +145,19 @@ public class DataSourceFactory {
 
     // == Environment =======================================================
 
+    public static DataSource fromEnvironment(String name, String group, String contentType) {
+        try {
+            final Properties properties = PropertiesFactory.create(System.getenv());
+            final StringWriter writer = new StringWriter();
+            properties.store(writer, null);
+            final StringDataSource dataSource = new StringDataSource(name, writer.toString(), contentType, UTF_8);
+            final URI uri = UriUtils.toURI(Location.ENVIRONMENT);
+            return create(name, group, uri, dataSource, contentType, UTF_8);
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
     public static DataSource fromEnvironment(String name, String group, String key, String contentType) {
         final String value = System.getenv(key);
         final StringDataSource dataSource = new StringDataSource(name, value, contentType, UTF_8);