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