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