This is an automated email from the ASF dual-hosted git repository.

sgoeschl pushed a commit to branch FREEMARKER-172
in repository https://gitbox.apache.org/repos/asf/freemarker-generator.git

commit 302ee6b857db3a6d4575761c31c8ab52a928d73d
Author: Siegfried Goeschl <[email protected]>
AuthorDate: Mon Feb 8 22:53:09 2021 +0100

    FREEMARKER-172 [freemarker-generator] Propagate properties to data sources
---
 .../generator/base/datasource/DataSource.java      | 15 ++--
 .../base/datasource/DataSourcesSupplier.java       |  8 +-
 .../loader/EnvironmentDataSourceLoader.java        |  4 +-
 .../datasource/loader/FileDataSourceLoader.java    | 10 +--
 .../datasource/loader/HttpDataSourceLoader.java    |  6 +-
 .../freemarker/generator/base/uri/NamedUri.java    | 14 ++--
 .../src/app/scripts/run-examples.bat               |  9 +-
 .../src/app/scripts/run-examples.sh                |  9 +-
 .../freemarker-generator/lib/commons-csv.ftl       | 18 ++++
 .../src/site/markdown/cli/concepts/data-sources.md | 36 +++++++-
 .../src/site/markdown/cli/concepts/named-uris.md   | 96 ++++++++++++++++++++--
 .../freemarker/generator/cli/ExamplesTest.java     |  5 ++
 .../freemarker/generator/cli/ManualTest.java       |  2 +-
 13 files changed, 193 insertions(+), 39 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 5d5d42d..6a9ac96 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
@@ -137,6 +137,10 @@ public class DataSource implements Closeable, 
javax.activation.DataSource {
         return name;
     }
 
+    public String getGroup() {
+        return group;
+    }
+
     /**
      * Get the content type.
      *
@@ -167,10 +171,6 @@ public class DataSource implements Closeable, 
javax.activation.DataSource {
         closeables.close();
     }
 
-    public String getGroup() {
-        return group;
-    }
-
     /**
      * Get the file name from the underlying "FileDataSource". All
      * other data sources will return an empty string.
@@ -227,6 +227,10 @@ public class DataSource implements Closeable, 
javax.activation.DataSource {
         return properties;
     }
 
+    public String getProperty(String key) {
+        return getProperties().get(key);
+    }
+
     /**
      * Try to get the length lazily, efficient and without consuming the input 
stream.
      *
@@ -365,7 +369,8 @@ public class DataSource implements Closeable, 
javax.activation.DataSource {
     }
 
     /**
-     * Get all metadata parts as map.
+     * Get all metadata parts as map. Please note that a 
<code>UrlDataSource</code>
+     * triggers multiple network calls to determine the content type and 
encoding.
      *
      * @return Map of metadata parts
      */
diff --git 
a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/DataSourcesSupplier.java
 
b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/DataSourcesSupplier.java
index 7f7906e..9c4afdd 100644
--- 
a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/DataSourcesSupplier.java
+++ 
b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/DataSourcesSupplier.java
@@ -112,8 +112,8 @@ public class DataSourcesSupplier implements 
Supplier<List<DataSource>> {
     private static List<DataSource> resolveFileOrDirectory(String source, 
String include, String exclude, Charset charset) {
         final NamedUri namedUri = NamedUriStringParser.parse(source);
         final String path = namedUri.getFile().getPath();
-        final String group = namedUri.getGroupOrElse(DEFAULT_GROUP);
-        final Charset currCharset = getCharsetOrElse(namedUri, charset);
+        final String group = namedUri.getGroupOrDefault(DEFAULT_GROUP);
+        final Charset currCharset = getCharsetOrDefault(namedUri, charset);
         final Map<String, String> parameters = namedUri.getParameters();
         return fileSupplier(path, include, exclude).get().stream()
                 .map(file -> fromFile(getDataSourceName(namedUri, file), 
group, file, currCharset, parameters))
@@ -124,8 +124,8 @@ public class DataSourcesSupplier implements 
Supplier<List<DataSource>> {
         return new RecursiveFileSupplier(singletonList(source), 
singletonList(include), singletonList(exclude));
     }
 
-    private static Charset getCharsetOrElse(NamedUri namedUri, Charset def) {
-        return Charset.forName(namedUri.getParameter(NamedUri.CHARSET, 
def.name()));
+    private static Charset getCharsetOrDefault(NamedUri namedUri, Charset def) 
{
+        return 
Charset.forName(namedUri.getParameterOrDefault(NamedUri.CHARSET, def.name()));
     }
 
     private static boolean isHttpUri(String value) {
diff --git 
a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/loader/EnvironmentDataSourceLoader.java
 
b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/loader/EnvironmentDataSourceLoader.java
index 41eeeef..fdad400 100644
--- 
a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/loader/EnvironmentDataSourceLoader.java
+++ 
b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/loader/EnvironmentDataSourceLoader.java
@@ -47,9 +47,9 @@ public class EnvironmentDataSourceLoader implements 
DataSourceLoader {
     public DataSource load(String source) {
         final NamedUri namedUri = NamedUriStringParser.parse(source);
         final String key = stripRootDir(namedUri.getUri().getPath());
-        final String contentType = 
namedUri.getMimeTypeOrElse(Mimetypes.MIME_TEXT_PLAIN);
+        final String contentType = 
namedUri.getMimeTypeOrDefault(Mimetypes.MIME_TEXT_PLAIN);
         final String name = firstNonEmpty(namedUri.getName(), key, 
Location.ENVIRONMENT);
-        final String group = namedUri.getGroupOrElse(DEFAULT_GROUP);
+        final String group = namedUri.getGroupOrDefault(DEFAULT_GROUP);
         if (StringUtils.isEmpty(key)) {
             return DataSourceFactory.fromEnvironment(name, group, contentType);
         } else {
diff --git 
a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/loader/FileDataSourceLoader.java
 
b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/loader/FileDataSourceLoader.java
index 1a0aec5..97b837c 100644
--- 
a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/loader/FileDataSourceLoader.java
+++ 
b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/loader/FileDataSourceLoader.java
@@ -41,10 +41,10 @@ public class FileDataSourceLoader implements 
DataSourceLoader {
     @Override
     public DataSource load(String source) {
         final NamedUri namedUri = NamedUriStringParser.parse(source);
-        final String group = 
namedUri.getGroupOrElse(FreeMarkerConstants.DEFAULT_GROUP);
-        final Charset charset = namedUri.getCharsetOrElse(UTF_8);
+        final String group = 
namedUri.getGroupOrDefault(FreeMarkerConstants.DEFAULT_GROUP);
+        final Charset charset = namedUri.getCharsetOrDefault(UTF_8);
         final File file = namedUri.getFile();
-        final String name = namedUri.getNameOrElse(file.getName());
+        final String name = namedUri.getNameOrDefault(file.getName());
         final Map<String, String> parameters = namedUri.getParameters();
         return DataSourceFactory.fromFile(name, group, file, charset, 
parameters);
     }
@@ -52,9 +52,9 @@ public class FileDataSourceLoader implements DataSourceLoader 
{
     @Override
     public DataSource load(String source, Charset charset) {
         final NamedUri namedUri = NamedUriStringParser.parse(source);
-        final String group = 
namedUri.getGroupOrElse(FreeMarkerConstants.DEFAULT_GROUP);
+        final String group = 
namedUri.getGroupOrDefault(FreeMarkerConstants.DEFAULT_GROUP);
         final File file = namedUri.getFile();
-        final String name = 
namedUri.getNameOrElse(UriUtils.toStringWithoutFragment(file.toURI()));
+        final String name = 
namedUri.getNameOrDefault(UriUtils.toStringWithoutFragment(file.toURI()));
         final Map<String, String> parameters = namedUri.getParameters();
         return DataSourceFactory.fromFile(name, group, file, charset, 
parameters);
     }
diff --git 
a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/loader/HttpDataSourceLoader.java
 
b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/loader/HttpDataSourceLoader.java
index aac4bc0..8aebcb0 100644
--- 
a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/loader/HttpDataSourceLoader.java
+++ 
b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/loader/HttpDataSourceLoader.java
@@ -43,11 +43,11 @@ public class HttpDataSourceLoader implements 
DataSourceLoader {
     public DataSource load(String source) {
         final NamedUri namedUri = NamedUriStringParser.parse(source);
         final URI uri = namedUri.getUri();
-        final String group = namedUri.getGroupOrElse(DEFAULT_GROUP);
-        final Charset charset = namedUri.getCharsetOrElse(null);
+        final String group = namedUri.getGroupOrDefault(DEFAULT_GROUP);
+        final Charset charset = namedUri.getCharsetOrDefault(null);
         final String mimeType = namedUri.getMimeType();
         final URL url = toUrl(uri);
-        final String name = 
namedUri.getNameOrElse(UriUtils.toStringWithoutFragment(uri));
+        final String name = 
namedUri.getNameOrDefault(UriUtils.toStringWithoutFragment(uri));
         final Map<String, String> parameters = namedUri.getParameters();
         return DataSourceFactory.fromUrl(name, group, url, mimeType, charset, 
parameters);
     }
diff --git 
a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/uri/NamedUri.java
 
b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/uri/NamedUri.java
index 6003d3c..bd84549 100644
--- 
a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/uri/NamedUri.java
+++ 
b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/uri/NamedUri.java
@@ -65,7 +65,7 @@ public class NamedUri {
         return name;
     }
 
-    public String getNameOrElse(String def) {
+    public String getNameOrDefault(String def) {
         return isEmpty(name) ? def : name;
     }
 
@@ -73,7 +73,7 @@ public class NamedUri {
         return group;
     }
 
-    public String getGroupOrElse(String def) {
+    public String getGroupOrDefault(String def) {
         return isEmpty(group) ? def : group;
     }
 
@@ -89,8 +89,8 @@ public class NamedUri {
         return parameters.get(key);
     }
 
-    public String getParameter(String key, String defaultValue) {
-        return parameters.getOrDefault(key, defaultValue);
+    public String getParameterOrDefault(String key, String def) {
+        return parameters.getOrDefault(key, def);
     }
 
     public boolean hasName() {
@@ -109,8 +109,8 @@ public class NamedUri {
         return getParameter(NamedUri.MIMETYPE);
     }
 
-    public String getMimeTypeOrElse(String def) {
-        return getParameter(NamedUri.MIMETYPE, def);
+    public String getMimeTypeOrDefault(String def) {
+        return getParameterOrDefault(NamedUri.MIMETYPE, def);
     }
 
     public Charset getCharset() {
@@ -118,7 +118,7 @@ public class NamedUri {
         return Charset.forName(charsetName);
     }
 
-    public Charset getCharsetOrElse(Charset def) {
+    public Charset getCharsetOrDefault(Charset def) {
         final String charsetName = getParameter(NamedUri.CHARSET);
         return StringUtils.isEmpty(charsetName) ? def : 
Charset.forName(charsetName);
     }
diff --git a/freemarker-generator-cli/src/app/scripts/run-examples.bat 
b/freemarker-generator-cli/src/app/scripts/run-examples.bat
index 6ef6f9a..5fc0e1c 100644
--- a/freemarker-generator-cli/src/app/scripts/run-examples.bat
+++ b/freemarker-generator-cli/src/app/scripts/run-examples.bat
@@ -37,6 +37,13 @@ REM 
=========================================================================
 echo "examples\templates\demo.ftl"
 %FREEMARKER_CMD% -t examples\templates\demo.ftl README.md --output-encoding 
CP1252 > target\out\demo.txt
 
+#############################################################################
+# DataSources
+#############################################################################
+
+echo "examples\templates\datasources.ftl"
+$FREEMARKER_CMD -t examples\templates\datasources.ftl -s :data=examples/data > 
target\out\datasources.txt
+
 REM =========================================================================
 REM Interactive Mode
 REM =========================================================================
@@ -177,4 +184,4 @@ echo 
"templates\freemarker-generator\yaml\json\transform.ftl"
 %FREEMARKER_CMD% -t freemarker-generator\yaml\json\transform.ftl 
examples\data\yaml\swagger-spec.yaml > target\out\swagger-spec.json
 
 echo "Created the following sample files in .\target\out"
-dir .\target\out
\ No newline at end of file
+dir .\target\out
diff --git a/freemarker-generator-cli/src/app/scripts/run-examples.sh 
b/freemarker-generator-cli/src/app/scripts/run-examples.sh
index 034774f..d0f42b7 100755
--- a/freemarker-generator-cli/src/app/scripts/run-examples.sh
+++ b/freemarker-generator-cli/src/app/scripts/run-examples.sh
@@ -43,6 +43,13 @@ echo "examples/templates/demo.ftl"
 $FREEMARKER_CMD -t examples/templates/demo.ftl README.md > target/out/demo.txt 
|| { echo >&2 "Test failed.  Aborting."; exit 1; }
 
 #############################################################################
+# DataSources
+#############################################################################
+
+echo "examples/templates/datasources.ftl"
+$FREEMARKER_CMD -t examples/templates/datasources.ftl -s :data=examples/data > 
target/out/datasources.txt || { echo >&2 "Test failed.  Aborting."; exit 1; }
+
+#############################################################################
 # Interactive Mode
 #############################################################################
 
@@ -198,4 +205,4 @@ echo 
"templates/freemarker-generator/yaml/json/transform.ftl"
 $FREEMARKER_CMD -t freemarker-generator/yaml/json/transform.ftl 
examples/data/yaml/swagger-spec.yaml > target/out/swagger-spec.json || { echo 
>&2 "Test failed.  Aborting."; exit 1; }
 
 echo "Created the following sample files in ./target/out"
-ls -l ./target/out
\ No newline at end of file
+ls -l ./target/out
diff --git 
a/freemarker-generator-cli/src/app/templates/freemarker-generator/lib/commons-csv.ftl
 
b/freemarker-generator-cli/src/app/templates/freemarker-generator/lib/commons-csv.ftl
index e8b0538..881a2f2 100644
--- 
a/freemarker-generator-cli/src/app/templates/freemarker-generator/lib/commons-csv.ftl
+++ 
b/freemarker-generator-cli/src/app/templates/freemarker-generator/lib/commons-csv.ftl
@@ -17,6 +17,24 @@
 -->
 
 <#---
+    Detemine the CSV format for reading a CSV files from properties of the 
data source.
+
+    * format - see 
https://commons.apache.org/proper/commons-csv/apidocs/org/apache/commons/csv/CSVFormat.html
+    * delimiter - symbolic name of delimiter, e.g. "COLON" or "SEMICOLON"
+    * header - whether the first rows are headers
+-->
+<#function dataSourceFormat dataSource>
+    <#assign format = 
tools.csv.formats[dataSource.properties.format!"DEFAULT"]>
+    <#assign delimiter = 
tools.csv.toDelimiter(dataSource.properties.delimiter!format.getDelimiter())>
+    <#assign withHeader = dataSource.properties.header!"true">
+    <#assign format = format.withDelimiter(delimiter)>
+    <#if withHeader?boolean>
+        <#assign format = format.withFirstRecordAsHeader()>
+    </#if>
+    <#return format>
+</#function>
+
+<#---
     Detemine the CSV format for reading a CSV files using user-supplied
     parameters from the data model.
 
diff --git 
a/freemarker-generator-cli/src/site/markdown/cli/concepts/data-sources.md 
b/freemarker-generator-cli/src/site/markdown/cli/concepts/data-sources.md
index b4205e3..7ad0daf 100644
--- a/freemarker-generator-cli/src/site/markdown/cli/concepts/data-sources.md
+++ b/freemarker-generator-cli/src/site/markdown/cli/concepts/data-sources.md
@@ -171,7 +171,7 @@ Charset         : ${dataSource.charset}
 Extension       : ${dataSource.extension}
 Nr of chars     : ${dataSource.text?length}
 Nr of bytes     : ${dataSource.bytes?size}
-File name       : ${dataSource.metadata["filename"]}
+File name       : ${dataSource.fileName}
 
 Iterating Over Metadata Of A Datasource
 ---------------------------------------------------------------------------
@@ -207,4 +207,38 @@ uri             : 
file:/Users/sgoeschl/work/github/apache/freemarker-generator/f
 group           : default
 ```
 
+### Inspecting A DataSource
+
+```
+> freemarker-generator -t examples/templates/datasources.ftl 
user:csv=examples/data/csv/transactions.csv#delimiter=TAB
+
+Invoke Arbitrary Methods On DataSource
+---------------------------------------------------------------------------
+Name            : user
+Group           : csv
+Nr of lines     : 101
+Content Type    : text/csv
+Charset         : UTF-8
+Extension       : csv
+Nr of chars     : 12,643
+Nr of bytes     : 12,643
+File name       : transactions.csv
+URI schema      : file
+
+Iterating Over Metadata Of A Datasource
+---------------------------------------------------------------------------
+extension       : csv
+basename        : transactions
+filename        : transactions.csv
+filepath        : 
/Users/sgoeschl/work/github/apache/freemarker-generator/freemarker-generator-cli/target/appassembler/examples/data/csv
+name            : user
+mimetype        : text/csv
+uri             : 
file:/Users/sgoeschl/work/github/apache/freemarker-generator/freemarker-generator-cli/target/appassembler/examples/data/csv/transactions.csv
+group           : csv
+
+Iterating Over Properties Of A Datasource
+---------------------------------------------------------------------------
+delimiter       : TAB
+```
+
 
diff --git 
a/freemarker-generator-cli/src/site/markdown/cli/concepts/named-uris.md 
b/freemarker-generator-cli/src/site/markdown/cli/concepts/named-uris.md
index 55bf420..164a07a 100644
--- a/freemarker-generator-cli/src/site/markdown/cli/concepts/named-uris.md
+++ b/freemarker-generator-cli/src/site/markdown/cli/concepts/named-uris.md
@@ -9,7 +9,7 @@ A Named URI consists of
 
 As a refresher, a URI is made up of the following components (inspired by 
https://docs.gomplate.ca/datasources/)
 
-```
+```text
   foo://[email protected]:8042/over/there?name=ferret#nose
   \_/   \_______________________/\_________/ \_________/ \__/
    |           |                    |            |        |
@@ -20,15 +20,17 @@ For our purposes, the scheme and the path components are 
especially important, t
 
 | Component | Purpose                                                          
                                         |
 
|-----------|-----------------------------------------------------------------------------------------------------------|
-| scheme       | All data sources require a scheme (except for file when using 
relative paths)                              |
-| authority    | Used only by remote data sources, and can be omitted in some 
of those cases.                               |
+| scheme       | All data sources require a scheme (except for file when using 
relative paths)                             |
+| authority    | Used only by remote data sources, and can be omitted in some 
of those cases.                              |
 | path     | Can be omitted, but usually used as the basis of the locator for 
the datasource.                          |
 | query            | Used mainly for HTTP and HTTPS URLs                       
                                                |
 | fragment     | Used rarely for providing additional attributes, e.g. 
`mimeType` of `charset`                             |
 
+### Using Named URIs For A File
+
 The following Named URI loads a "user.csv" and the data source is available as 
`my_users` 
 
-```
+```text
 freemarker-generator -t freemarker-generator/info.ftl 
my_users=examples/data/csv/user.csv
 
 FreeMarker Generator DataSources
@@ -39,7 +41,7 @@ URI : 
file:/Users/sgoeschl/work/github/apache/freemarker-generator/freemarker-ge
 
 A Named URI allows to pass additional information as part of the fragment, 
e.g. the charset of the text file 
 
-```
+```text
 freemarker-generator -t freemarker-generator/info.ftl 
my_users=examples/data/csv/user.csv#charset=UTF-16
 
 FreeMarker Generator DataSources
@@ -50,8 +52,8 @@ URI : 
file:/Users/sgoeschl/work/github/apache/freemarker-generator/freemarker-ge
 
 In addition to the simplified file syntax full URIs can be used
 
-```
-freemarker-generator -t freemarker-generator/info.ftl http://google.com?foo=bar
+```text
+freemarker-generator -t freemarker-generator/info.ftl 
'http://google.com?foo=bar'
 
 FreeMarker Generator DataSources
 ------------------------------------------------------------------------------
@@ -61,11 +63,87 @@ URI : http://google.com?foo=bar
 
 and also combined with a name
 
-```
-freemarker-generator -t freemarker-generator/info.ftl 
page=http://google.com\?foo\=bar
+```text
+freemarker-generator -t freemarker-generator/info.ftl 
'page=http://google.com?foo=bar'
 
 FreeMarker Generator DataSources
 ------------------------------------------------------------------------------
 [#1]: name=page, group=default, fileName=page mimeType=text/html, 
charset=ISO-8859-1, length=-1 Bytes
 URI : http://google.com?foo=bar
 ```
+
+### Using Named URIs For Directories
+
+A Name URI can be also combined with file directories.
+
+Load all CVS files of a directory using the group "csv"
+
+```text
+freemarker-generator -t freemarker-generator/info.ftl :csv=examples/data/csv
+
+FreeMarker Generator DataSources
+------------------------------------------------------------------------------
+[#1]: 
name=file:/Users/sgoeschl/work/github/apache/freemarker-generator/freemarker-generator-cli/target/appassembler/examples/data/csv/contract.csv,
 group=csv, fileName=contract.csv, mimeType=text/csv, charset=UTF-8, 
length=6,328 Bytes
+URI : 
file:/Users/sgoeschl/work/github/apache/freemarker-generator/freemarker-generator-cli/target/appassembler/examples/data/csv/contract.csv
+...
+[#7]: 
name=file:/Users/sgoeschl/work/github/apache/freemarker-generator/freemarker-generator-cli/target/appassembler/examples/data/csv/user.csv,
 group=csv, fileName=user.csv, mimeType=text/csv, charset=UTF-8, length=376 
Bytes
+URI : 
file:/Users/sgoeschl/work/github/apache/freemarker-generator/freemarker-generator-cli/target/appassembler/examples/data/csv/user.csv
+```
+
+or use a charset for all files of a directory
+
+```text
+freemarker-generator -t freemarker-generator/info.ftl 
'examples/data/csv#charset=UTF-16&mimetype=text/plain'
+
+FreeMarker Generator DataSources
+------------------------------------------------------------------------------
+[#1]: 
name=file:/Users/sgoeschl/work/github/apache/freemarker-generator/freemarker-generator-cli/target/appassembler/examples/data/csv/contract.csv,
 group=default, fileName=contract.csv, mimeType=text/csv, charset=UTF-16, 
length=6,328 Bytes
+URI : 
file:/Users/sgoeschl/work/github/apache/freemarker-generator/freemarker-generator-cli/target/appassembler/examples/data/csv/contract.csv
+...
+[#7]: 
name=file:/Users/sgoeschl/work/github/apache/freemarker-generator/freemarker-generator-cli/target/appassembler/examples/data/csv/user.csv,
 group=default, fileName=user.csv, mimeType=text/csv, charset=UTF-16, 
length=376 Bytes
+URI : 
file:/Users/sgoeschl/work/github/apache/freemarker-generator/freemarker-generator-cli/target/appassembler/examples/data/csv/user.csv
+```
+
+It is also possible to provide data source properties to all files being loaded
+
+```text
+freemarker-generator -t examples/templates/datasources.ftl 
'examples/data/csv#format=DEFAULT'
+
+file:/Users/sgoeschl/work/github/apache/freemarker-generator/freemarker-generator-cli/target/appassembler/examples/data/csv/user.csv
+==============================================================================
+
+Invoke Arbitrary Methods On DataSource
+---------------------------------------------------------------------------
+Name            : 
file:/Users/sgoeschl/work/github/apache/freemarker-generator/freemarker-generator-cli/target/appassembler/examples/data/csv/user.csv
+Group           : default
+Nr of lines     : 5
+Content Type    : text/csv
+Charset         : UTF-8
+Extension       : csv
+Nr of chars     : 376
+Nr of bytes     : 376
+File name       : user.csv
+URI schema      : file
+
+Iterating Over Metadata Of A Datasource
+---------------------------------------------------------------------------
+extension       : csv
+basename        : user
+filename        : user.csv
+filepath        : 
/Users/sgoeschl/work/github/apache/freemarker-generator/freemarker-generator-cli/target/appassembler/examples/data/csv
+name            : 
file:/Users/sgoeschl/work/github/apache/freemarker-generator/freemarker-generator-cli/target/appassembler/examples/data/csv/user.csv
+mimetype        : text/csv
+uri             : 
file:/Users/sgoeschl/work/github/apache/freemarker-generator/freemarker-generator-cli/target/appassembler/examples/data/csv/user.csv
+group           : default
+
+Iterating Over Properties Of A Datasource
+---------------------------------------------------------------------------
+format          : DEFAULT
+
+```
+
+
+
+
+
+
diff --git 
a/freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/ExamplesTest.java
 
b/freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/ExamplesTest.java
index 5c5ebd5..88067b2 100644
--- 
a/freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/ExamplesTest.java
+++ 
b/freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/ExamplesTest.java
@@ -48,6 +48,11 @@ public class ExamplesTest extends AbstractMainTest {
     }
 
     @Test
+    public void shouldRunDataSourceExamples() throws IOException {
+        assertValid(execute("-t src/app/examples/templates/datasources.ftl -s 
:csv=src/app/examples/data/csv"));
+    }
+
+    @Test
     public void shouldRunCsvExamples() throws IOException {
         assertValid(execute("-t freemarker-generator/csv/html/transform.ftl 
src/app/examples/data/csv/contract.csv"));
         assertValid(execute("-t freemarker-generator/csv/md/transform.ftl 
src/app/examples/data/csv/contract.csv"));
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 f08e38b..1e6600a 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
@@ -24,7 +24,7 @@ import java.io.IOException;
 public class ManualTest extends AbstractMainTest {
 
     // private static final String CMD = "-V";
-    private static final String CMD = "-t 
src/app/examples/templates/datasources.ftl -s 
:csv-data=src/app/examples/data/csv#separator=COLON 
https://xkcd.com/info.0.json";;
+    private static final String CMD = "-t 
src/app/examples/templates/datasources.ftl -s 
:csv-data=src/app/examples/data/csv#separator=COLON 
https://xkcd.com/info.0.json envvars=env:///";
 
     @Override
     public String execute(String commandLine) throws IOException {

Reply via email to