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 2021/02/08 22:32:32 UTC
[freemarker-generator] 02/03: FREEMARKER-173 [freemarker-generator]
Allow to pass arbitrary key/value pairs to DataSource when using NamedURIs
This is an automated email from the ASF dual-hosted git repository.
sgoeschl pushed a commit to branch FREEMARKER-173
in repository https://gitbox.apache.org/repos/asf/freemarker-generator.git
commit aef2993055c8c15c441dae2920a11c758bc3bbb0
Author: Siegfried Goeschl <si...@gmail.com>
AuthorDate: Mon Feb 8 23:13:12 2021 +0100
FREEMARKER-173 [freemarker-generator] Allow to pass arbitrary key/value pairs to DataSource when using NamedURIs
---
.../generator/base/datasource/DataSource.java | 29 +++++++++++++++++++---
.../generator/datasource/DataSourceTest.java | 23 +++++++++--------
2 files changed, 38 insertions(+), 14 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 0bb4b57..5d5d42d 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
@@ -35,6 +35,7 @@ import java.io.StringWriter;
import java.net.URI;
import java.nio.charset.Charset;
import java.util.Arrays;
+import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@@ -90,28 +91,44 @@ public class DataSource implements Closeable, javax.activation.DataSource {
/** The underlying "javax.activation.DataSource" */
private final javax.activation.DataSource dataSource;
- /** Content type of data source either provided by the user or fetched directly from the data source */
+ /** Content type of data source either provided by the caller or fetched directly from the data source */
private final String contentType;
/** Charset for directly accessing text-based content */
private final Charset charset;
+ /** Additional properties as name/value pairs */
+ private final Map<String, String> properties;
+
/** Collect all closeables handed out to the caller to be closed when the data source is closed itself */
private final CloseableReaper closeables;
+ /**
+ * Constructor.
+ *
+ * @param name Human-readable name of the data source
+ * @param group Optional group of data source
+ * @param uri source URI of the data source
+ * @param dataSource JAF data source being wrapped
+ * @param contentType content type of data source either provided by the caller or fetched directly from the data source
+ * @param charset option charset for directly accessing text-based content
+ * @param properties optional name/value pairs
+ */
public DataSource(
String name,
String group,
URI uri,
javax.activation.DataSource dataSource,
String contentType,
- Charset charset) {
- this.name = requireNonNull(name);
+ Charset charset,
+ Map<String, String> properties) {
+ this.name = requireNonNull(name).trim();
this.group = StringUtils.emptyToNull(group);
this.uri = requireNonNull(uri);
this.dataSource = requireNonNull(dataSource);
this.contentType = contentType;
this.charset = charset;
+ this.properties = properties != null ? new HashMap<>(properties) : new HashMap<>();
this.closeables = new CloseableReaper();
}
@@ -206,6 +223,10 @@ public class DataSource implements Closeable, javax.activation.DataSource {
return uri;
}
+ public Map<String, String> getProperties() {
+ return properties;
+ }
+
/**
* Try to get the length lazily, efficient and without consuming the input stream.
*
@@ -339,7 +360,7 @@ public class DataSource implements Closeable, javax.activation.DataSource {
case METADATA_MIME_TYPE:
return getMimeType();
default:
- throw new IllegalArgumentException("Unknown key: " + key);
+ throw new IllegalArgumentException("Unknown metatdata key: " + key);
}
}
diff --git a/freemarker-generator-base/src/test/java/org/apache/freemarker/generator/datasource/DataSourceTest.java b/freemarker-generator-base/src/test/java/org/apache/freemarker/generator/datasource/DataSourceTest.java
index 8961359..e1a8f80 100644
--- a/freemarker-generator-base/src/test/java/org/apache/freemarker/generator/datasource/DataSourceTest.java
+++ b/freemarker-generator-base/src/test/java/org/apache/freemarker/generator/datasource/DataSourceTest.java
@@ -28,6 +28,7 @@ import java.io.File;
import java.io.IOException;
import java.nio.charset.Charset;
import java.util.Iterator;
+import java.util.Map;
import static java.nio.charset.StandardCharsets.UTF_8;
import static org.apache.freemarker.generator.base.FreeMarkerConstants.DEFAULT_GROUP;
@@ -84,7 +85,7 @@ public class DataSourceTest {
@Test
@Ignore("Requires internet access")
public void shouldSupportUrlDataSource() {
- try (DataSource dataSource = DataSourceFactory.fromUrl("www.google.com", DEFAULT_GROUP, toUrl("https://www.google.com/?foo=bar"), null, null)) {
+ try (DataSource dataSource = DataSourceFactory.fromUrl("www.google.com", DEFAULT_GROUP, toUrl("https://www.google.com/?foo=bar"), null, null, null)) {
assertEquals("www.google.com", dataSource.getName());
assertEquals(DEFAULT_GROUP, dataSource.getGroup());
assertEquals("", dataSource.getBaseName());
@@ -125,15 +126,17 @@ public class DataSourceTest {
@Test
public void shouldGetMetadata() {
try (DataSource dataSource = stringDataSource()) {
- assertEquals(8, dataSource.getMetadata().size());
- assertEquals("", dataSource.getMetadata().get("basename"));
- assertEquals("", dataSource.getMetadata().get("extension"));
- assertEquals("", dataSource.getMetadata().get("filename"));
- assertEquals("/", dataSource.getMetadata().get("filepath"));
- assertEquals("default", dataSource.getMetadata().get("group"));
- assertEquals("stdin", dataSource.getMetadata().get("name"));
- assertTrue(dataSource.getMetadata().get("uri").startsWith("string://"));
- assertEquals("text/plain", dataSource.getMetadata().get("mimetype"));
+ final Map<String, String> metadata = dataSource.getMetadata();
+
+ assertEquals(8, metadata.size());
+ assertEquals("", metadata.get("basename"));
+ assertEquals("", metadata.get("extension"));
+ assertEquals("", metadata.get("filename"));
+ assertEquals("/", metadata.get("filepath"));
+ assertEquals("default", metadata.get("group"));
+ assertEquals("stdin", metadata.get("name"));
+ assertTrue(metadata.get("uri").startsWith("string://"));
+ assertEquals("text/plain", metadata.get("mimetype"));
}
}