This is an automated email from the ASF dual-hosted git repository.
sgoeschl pushed a commit to branch FREEMARKER-188
in repository https://gitbox.apache.org/repos/asf/freemarker-generator.git
The following commit(s) were added to refs/heads/FREEMARKER-188 by this push:
new 7e178a7 FREEMARKER-188 Add "relativeFilePath" to DataSource
7e178a7 is described below
commit 7e178a72c6cb104385364196038dd6d0ce17a5c0
Author: Siegfried Goeschl <[email protected]>
AuthorDate: Tue Sep 7 00:07:38 2021 +0200
FREEMARKER-188 Add "relativeFilePath" to DataSource
---
.../generator/base/datasource/DataSource.java | 109 ++++++++++++++++++---
.../base/datasource/DataSourceFactory.java | 18 +++-
.../base/datasource/DataSourcesSupplier.java | 34 ++++++-
.../freemarker/generator/base/util/FileUtils.java | 31 ++++++
.../generator/datasource/DataSourceTest.java | 18 ++--
.../generator/datasource/DataSourcesTest.java | 2 +-
.../freemarker/generator/util/FileUtilsTest.java | 46 +++++++++
.../src/app/examples/templates/datasources.ftl | 23 ++---
.../src/app/examples/templates/demo.ftl | 2 +-
.../templates/freemarker-generator/datasources.ftl | 40 ++++++++
.../app/templates/freemarker-generator/info.ftl | 1 -
.../src/site/markdown/cli/concepts/data-sources.md | 30 +++---
.../src/site/markdown/cli/concepts/named-uris.md | 8 +-
.../freemarker/generator/cli/ExamplesTest.java | 1 +
14 files changed, 309 insertions(+), 54 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 66557d1..6383258 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
@@ -59,20 +59,22 @@ import static
org.apache.freemarker.generator.base.mime.Mimetypes.MIME_APPLICATI
*/
public class DataSource implements Closeable, javax.activation.DataSource {
- public static final String METADATA_BASE_NAME = "basename";
+ public static final String METADATA_BASE_NAME = "baseName";
public static final String METADATA_EXTENSION = "extension";
- public static final String METADATA_FILE_NAME = "filename";
- public static final String METADATA_FILE_PATH = "filepath";
+ public static final String METADATA_FILE_NAME = "fileName";
+ public static final String METADATA_FILE_PATH = "filePath";
+ public static final String METADATA_RELATIVE_FILE_PATH =
"relativeFilePath";
public static final String METADATA_GROUP = "group";
public static final String METADATA_NAME = "name";
public static final String METADATA_URI = "uri";
- public static final String METADATA_MIME_TYPE = "mimetype";
+ public static final String METADATA_MIME_TYPE = "mimeType";
public static final List<String> METADATA_KEYS = Arrays.asList(
METADATA_BASE_NAME,
METADATA_EXTENSION,
METADATA_FILE_NAME,
METADATA_FILE_PATH,
+ METADATA_RELATIVE_FILE_PATH,
METADATA_GROUP,
METADATA_NAME,
METADATA_URI,
@@ -91,6 +93,9 @@ public class DataSource implements Closeable,
javax.activation.DataSource {
/** The underlying "javax.activation.DataSource" */
private final javax.activation.DataSource dataSource;
+ /** The relative path for a file-based data source */
+ private final String relativeFilePath;
+
/** Content type of data source either provided by the caller or fetched
directly from the data source */
private final String contentType;
@@ -106,19 +111,21 @@ public class DataSource implements Closeable,
javax.activation.DataSource {
/**
* 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
+ * @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 relativeFilePath relative path regarding a source directory
+ * @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 relativeFilePath,
String contentType,
Charset charset,
Map<String, String> properties) {
@@ -126,12 +133,17 @@ public class DataSource implements Closeable,
javax.activation.DataSource {
this.group = StringUtils.emptyToNull(group);
this.uri = requireNonNull(uri);
this.dataSource = requireNonNull(dataSource);
+ this.relativeFilePath = relativeFilePath != null ? relativeFilePath :
".";
this.contentType = contentType;
this.charset = charset;
this.properties = properties != null ? new HashMap<>(properties) : new
HashMap<>();
this.closeables = new CloseableReaper();
}
+ public static DataSourceBuilder builder() {
+ return DataSourceBuilder.builder();
+ }
+
@Override
public String getName() {
return name;
@@ -202,6 +214,16 @@ public class DataSource implements Closeable,
javax.activation.DataSource {
}
/**
+ * Get the relative path for a file-based data source starting from
+ * the data source directory.
+ *
+ * @return relative path
+ */
+ public String getRelativeFilePath() {
+ return relativeFilePath;
+ }
+
+ /**
* Get the charset. If no charset can be detected UTF-8 is assumed.
*
* @return charset
@@ -347,6 +369,8 @@ public class DataSource implements Closeable,
javax.activation.DataSource {
return getFileName();
case METADATA_FILE_PATH:
return FilenameUtils.getFullPathNoEndSeparator(uri.getPath());
+ case METADATA_RELATIVE_FILE_PATH:
+ return getRelativeFilePath();
case METADATA_GROUP:
return getGroup();
case METADATA_NAME:
@@ -432,4 +456,67 @@ public class DataSource implements Closeable,
javax.activation.DataSource {
private boolean isByteArrayDataSource() {
return dataSource instanceof ByteArrayDataSource;
}
+
+
+ public static final class DataSourceBuilder {
+ private String name;
+ private String group;
+ private URI uri;
+ private javax.activation.DataSource dataSource;
+ private String relativeFilePath;
+ private String contentType;
+ private Charset charset;
+ private Map<String, String> properties;
+
+ private DataSourceBuilder() {
+ }
+
+ static DataSourceBuilder builder() {
+ return new DataSourceBuilder();
+ }
+
+ public DataSourceBuilder name(String name) {
+ this.name = name;
+ return this;
+ }
+
+ public DataSourceBuilder group(String group) {
+ this.group = group;
+ return this;
+ }
+
+ public DataSourceBuilder uri(URI uri) {
+ this.uri = uri;
+ return this;
+ }
+
+ public DataSourceBuilder dataSource(javax.activation.DataSource
dataSource) {
+ this.dataSource = dataSource;
+ return this;
+ }
+
+ public DataSourceBuilder relativeFilePath(String relativeFilePath) {
+ this.relativeFilePath = relativeFilePath;
+ return this;
+ }
+
+ public DataSourceBuilder contentType(String contentType) {
+ this.contentType = contentType;
+ return this;
+ }
+
+ public DataSourceBuilder charset(Charset charset) {
+ this.charset = charset;
+ return this;
+ }
+
+ public DataSourceBuilder properties(Map<String, String> properties) {
+ this.properties = properties;
+ return this;
+ }
+
+ public DataSource build() {
+ return new DataSource(name, group, uri, dataSource,
relativeFilePath, contentType, charset, properties);
+ }
+ }
}
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 6930e91..ad9439c 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
@@ -60,7 +60,13 @@ public abstract class DataSourceFactory {
URI uri,
javax.activation.DataSource dataSource,
Map<String, String> properties) {
- return new DataSource(name, group, uri, dataSource, null, null,
properties);
+ return DataSource.builder()
+ .name(name)
+ .group(group)
+ .uri(uri)
+ .dataSource(dataSource)
+ .properties(properties)
+ .build();
}
public static DataSource create(
@@ -71,7 +77,15 @@ public abstract class DataSourceFactory {
String contentType,
Charset charset,
Map<String, String> properties) {
- return new DataSource(name, group, uri, dataSource, contentType,
charset, properties);
+ return DataSource.builder()
+ .name(name)
+ .group(group)
+ .uri(uri)
+ .dataSource(dataSource)
+ .contentType(contentType)
+ .charset(charset)
+ .properties(properties)
+ .build();
}
// == URL ===============================================================
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 cc919fc..809d861 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
@@ -17,11 +17,14 @@
package org.apache.freemarker.generator.base.datasource;
import org.apache.freemarker.generator.base.file.RecursiveFileSupplier;
+import org.apache.freemarker.generator.base.mime.MimetypesFileTypeMapFactory;
import org.apache.freemarker.generator.base.uri.NamedUri;
import org.apache.freemarker.generator.base.uri.NamedUriStringParser;
+import org.apache.freemarker.generator.base.util.FileUtils;
import org.apache.freemarker.generator.base.util.UriUtils;
import org.apache.freemarker.generator.base.util.Validate;
+import javax.activation.FileDataSource;
import java.io.File;
import java.nio.charset.Charset;
import java.util.ArrayList;
@@ -34,7 +37,6 @@ import static java.util.Collections.singletonList;
import static java.util.Objects.requireNonNull;
import static java.util.stream.Collectors.toList;
import static
org.apache.freemarker.generator.base.FreeMarkerConstants.DEFAULT_GROUP;
-import static
org.apache.freemarker.generator.base.datasource.DataSourceFactory.fromFile;
/**
* Create a list of <code>DataSource</code> based on a list URIs, directories
and files.
@@ -116,10 +118,38 @@ public class DataSourcesSupplier implements
Supplier<List<DataSource>> {
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))
+ .map(file -> fromFile(namedUri, getDataSourceName(namedUri,
file), group, file, currCharset, parameters))
.collect(toList());
}
+ private static DataSource fromFile(
+ NamedUri sourceUri,
+ String name,
+ String group,
+ File file,
+ Charset charset,
+ Map<String, String> properties) {
+ Validate.isTrue(file.exists(), "File not found: " + file);
+
+ final FileDataSource dataSource = new FileDataSource(file);
+ // content type is determined from file extension
+ dataSource.setFileTypeMap(MimetypesFileTypeMapFactory.create());
+ final String relativePath =
FileUtils.getRelativePath(sourceUri.getFile(), file);
+ final String contentType = dataSource.getContentType();
+
+ return DataSource.builder()
+ .name(name)
+ .group(group)
+ .uri(file.toURI())
+ .dataSource(dataSource)
+ .relativeFilePath(relativePath)
+ .contentType(contentType)
+ .charset(charset)
+ .properties(properties)
+ .build();
+ }
+
+
private static RecursiveFileSupplier fileSupplier(String source, String
include, String exclude) {
return new RecursiveFileSupplier(singletonList(source),
singletonList(include), singletonList(exclude));
}
diff --git
a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/util/FileUtils.java
b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/util/FileUtils.java
new file mode 100644
index 0000000..e83ee02
--- /dev/null
+++
b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/util/FileUtils.java
@@ -0,0 +1,31 @@
+package org.apache.freemarker.generator.base.util;
+
+import java.io.File;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+
+public class FileUtils {
+
+ /**
+ * Determines the relative path between a directory and a file within the
directory (excluding the file name)
+ *
+ * @param directory the directory
+ * @param file the file
+ * @return relative path
+ */
+ public static String getRelativePath(File directory, File file) {
+ Validate.notNull(directory, "directory is null");
+ Validate.notNull(file, "file is null");
+ Validate.isTrue(directory.exists(), "directory does not exist");
+
+ final Path filePath = Paths.get(file.toURI()).normalize();
+ final Path directoryPath = Paths.get(directory.toURI()).normalize();
+ final String relativePath =
directoryPath.relativize(filePath).normalize().toString();
+
+ if (relativePath.lastIndexOf('/') > 0) {
+ return relativePath.substring(0, relativePath.lastIndexOf("/"));
+ } else {
+ return ".";
+ }
+ }
+}
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 e1a8f80..38617ba 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
@@ -36,6 +36,7 @@ import static
org.apache.freemarker.generator.base.datasource.DataSourceFactory.
import static
org.apache.freemarker.generator.base.mime.Mimetypes.MIME_TEXT_HTML;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
public class DataSourceTest {
@@ -54,6 +55,7 @@ public class DataSourceTest {
assertEquals("", dataSource.getBaseName());
assertEquals("", dataSource.getExtension());
assertTrue(dataSource.getUri().toString().startsWith("string:///"));
+ assertEquals(".", dataSource.getRelativeFilePath());
assertEquals(UTF_8, dataSource.getCharset());
assertEquals("text/plain", dataSource.getContentType());
assertTrue(dataSource.getLength() > 0);
@@ -72,13 +74,14 @@ public class DataSourceTest {
assertEquals("xml", dataSource.getExtension());
assertEquals(ANY_FILE.toURI().toString(),
dataSource.getUri().toString());
assertEquals(ANY_CHAR_SET.name(), dataSource.getCharset().name());
+ assertEquals(".", dataSource.getRelativeFilePath());
assertEquals("application/xml", dataSource.getContentType());
assertTrue(dataSource.getLength() > 0);
assertFalse(dataSource.getText().isEmpty());
assertTrue(dataSource.match("name", "*" + ANY_FILE_NAME));
assertTrue(dataSource.match("uri", "file:/*/pom.xml"));
assertTrue(dataSource.match("extension", "xml"));
- assertTrue(dataSource.match("basename", "pom"));
+ assertTrue(dataSource.match("baseName", "pom"));
}
}
@@ -91,6 +94,7 @@ public class DataSourceTest {
assertEquals("", dataSource.getBaseName());
assertEquals("", dataSource.getExtension());
assertEquals("https://www.google.com/?foo=bar",
dataSource.getUri().toString());
+ assertNull(dataSource.getRelativeFilePath());
assertEquals("text/html; charset=ISO-8859-1",
dataSource.getContentType());
assertEquals(MIME_TEXT_HTML, dataSource.getMimeType());
assertEquals("ISO-8859-1", dataSource.getCharset().name());
@@ -128,15 +132,17 @@ public class DataSourceTest {
try (DataSource dataSource = stringDataSource()) {
final Map<String, String> metadata = dataSource.getMetadata();
- assertEquals(8, metadata.size());
- assertEquals("", metadata.get("basename"));
+ assertEquals(9, metadata.size());
+ assertEquals("", metadata.get("baseName"));
assertEquals("", metadata.get("extension"));
- assertEquals("", metadata.get("filename"));
- assertEquals("/", metadata.get("filepath"));
+ assertEquals("", metadata.get("fileName"));
+ assertEquals("/", metadata.get("filePath"));
+ assertEquals(".", metadata.get("relativeFilePath"));
+
assertEquals("default", metadata.get("group"));
assertEquals("stdin", metadata.get("name"));
assertTrue(metadata.get("uri").startsWith("string://"));
- assertEquals("text/plain", metadata.get("mimetype"));
+ assertEquals("text/plain", metadata.get("mimeType"));
}
}
diff --git
a/freemarker-generator-base/src/test/java/org/apache/freemarker/generator/datasource/DataSourcesTest.java
b/freemarker-generator-base/src/test/java/org/apache/freemarker/generator/datasource/DataSourcesTest.java
index 85bdedc..5dd4360 100644
---
a/freemarker-generator-base/src/test/java/org/apache/freemarker/generator/datasource/DataSourcesTest.java
+++
b/freemarker-generator-base/src/test/java/org/apache/freemarker/generator/datasource/DataSourcesTest.java
@@ -100,7 +100,7 @@ public class DataSourcesTest {
@Test
public void shouldGetMetadataParts() {
- assertEquals(asList("", "pom.xml", ""),
dataSources().getMetadata("filename"));
+ assertEquals(asList("", "pom.xml", ""),
dataSources().getMetadata("fileName"));
assertEquals(asList("default", "default", "default"),
dataSources().getMetadata("group"));
assertEquals(asList("", "xml", ""),
dataSources().getMetadata("extension"));
assertEquals(asList("unknown", "pom.xml", "server.invalid?foo=bar"),
dataSources().getMetadata("name"));
diff --git
a/freemarker-generator-base/src/test/java/org/apache/freemarker/generator/util/FileUtilsTest.java
b/freemarker-generator-base/src/test/java/org/apache/freemarker/generator/util/FileUtilsTest.java
new file mode 100644
index 0000000..584db0b
--- /dev/null
+++
b/freemarker-generator-base/src/test/java/org/apache/freemarker/generator/util/FileUtilsTest.java
@@ -0,0 +1,46 @@
+package org.apache.freemarker.generator.util;
+
+import org.apache.freemarker.generator.base.util.FileUtils;
+import org.junit.Test;
+
+import java.io.File;
+
+import static org.junit.Assert.assertEquals;
+
+public class FileUtilsTest {
+
+ @Test
+ public void shouldGetRelativePathForSameDirectory() {
+ assertEquals(".", FileUtils.getRelativePath(new File("."), new
File("pom.xml")));
+ assertEquals(".", FileUtils.getRelativePath(new File("."), new
File("./pom.xml")));
+ assertEquals(".", FileUtils.getRelativePath(new File("."), new
File("./pom.xml")));
+ assertEquals(".", FileUtils.getRelativePath(new
File("../freemarker-generator-base"), new File("pom.xml")));
+ assertEquals(".", FileUtils.getRelativePath(new
File("../freemarker-generator-base"), new File("./pom.xml")));
+ assertEquals(".", FileUtils.getRelativePath(new
File("../freemarker-generator-base"), new
File("../freemarker-generator-base/pom.xml")));
+ }
+
+ @Test
+ public void shouldGetRelativePathForNestedDirectory() {
+ assertEquals("src/test/data/env", FileUtils.getRelativePath(new
File("."), new File("src/test/data/env/nginx.env")));
+ assertEquals("src/test/data/env", FileUtils.getRelativePath(new
File("."), new File("./src/test/data/env/nginx.env")));
+ }
+
+ @Test
+ public void shouldGetRelativePathForDisjunctDirectories() {
+ assertEquals("../test/data/env", FileUtils.getRelativePath(new
File("./src/site"), new File("src/test/data/env/nginx.env")));
+ }
+
+ @Test
+ public void shouldHandleInvalidArgumentsGracefully() {
+ assertEquals(".", FileUtils.getRelativePath(new File("."), new
File(".")));
+ assertEquals(".", FileUtils.getRelativePath(new File("pom.xml"), new
File("pom.xml")));
+ assertEquals(".", FileUtils.getRelativePath(new File("."), new
File("does-not-exist.xml")));
+ assertEquals("foo", FileUtils.getRelativePath(new File("."), new
File("foo/does-not-exist.xml")));
+ assertEquals("foo", FileUtils.getRelativePath(new File("."), new
File("foo/./does-not-exist.xml")));
+ }
+
+ @Test(expected = IllegalArgumentException.class)
+ public void shouldThrowIllegalArgumentExceptionForNonExistingDirectoy() {
+ FileUtils.getRelativePath(new File("does-not-exit"), new
File("pom.xml"));
+ }
+}
diff --git
a/freemarker-generator-cli/src/app/examples/templates/datasources.ftl
b/freemarker-generator-cli/src/app/examples/templates/datasources.ftl
index bfb7675..4c7d11f 100644
--- a/freemarker-generator-cli/src/app/examples/templates/datasources.ftl
+++ b/freemarker-generator-cli/src/app/examples/templates/datasources.ftl
@@ -53,17 +53,18 @@ ${dataSource.name}
Invoke Arbitrary Methods On DataSource
---------------------------------------------------------------------------
<#assign dataSource=dataSources?values?first>
-Name : ${dataSource.name}
-Group : ${dataSource.group}
-Nr of lines : ${dataSource.lines?size}
-ContentType : ${dataSource.contentType}
-MimeType : ${dataSource.mimeType}
-Charset : ${dataSource.charset}
-Extension : ${dataSource.extension}
-Nr of chars : ${dataSource.text?length}
-Nr of bytes : ${dataSource.bytes?size}
-File name : ${dataSource.fileName}
-URI schema : ${dataSource.uri.scheme}
+Name : ${dataSource.name}
+Group : ${dataSource.group}
+Nr of lines : ${dataSource.lines?size}
+ContentType : ${dataSource.contentType}
+MimeType : ${dataSource.mimeType}
+Charset : ${dataSource.charset}
+Extension : ${dataSource.extension}
+Nr of chars : ${dataSource.text?length}
+Nr of bytes : ${dataSource.bytes?size}
+File name : ${dataSource.fileName}
+URI schema : ${dataSource.uri.scheme}
+Relative File Path : ${dataSource.relativeFilePath}
Iterating Over Metadata Of A Datasource
---------------------------------------------------------------------------
diff --git a/freemarker-generator-cli/src/app/examples/templates/demo.ftl
b/freemarker-generator-cli/src/app/examples/templates/demo.ftl
index 1154838..879fb3f 100644
--- a/freemarker-generator-cli/src/app/examples/templates/demo.ftl
+++ b/freemarker-generator-cli/src/app/examples/templates/demo.ftl
@@ -104,7 +104,7 @@ List all data sources having "json" extension
- ${ds.name}
</#list>
List all data sources having "src/test/data/properties" in their file path
-<#list dataSources?values?filter(ds -> ds.match("filepath",
"*/src/test/data/properties")) as ds>
+<#list dataSources?values?filter(ds -> ds.match("filePath",
"*/src/test/data/properties")) as ds>
- ${ds.name}
</#list>
diff --git
a/freemarker-generator-cli/src/app/templates/freemarker-generator/datasources.ftl
b/freemarker-generator-cli/src/app/templates/freemarker-generator/datasources.ftl
new file mode 100644
index 0000000..17dc43c
--- /dev/null
+++
b/freemarker-generator-cli/src/app/templates/freemarker-generator/datasources.ftl
@@ -0,0 +1,40 @@
+<#ftl output_format="plainText" strip_whitespace=true>
+<#--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+ http://www.apache.org/licenses/LICENSE-2.0
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+FreeMarker Generator DataSources
+==============================================================================
+
+<#if dataSources?has_content>
+<#list dataSources?values as ds>
+DataSource #${ds?counter}
+------------------------------------------------------------------------------
+name=${ds.name}
+group=${ds.group}
+contentType=${ds.contentType}
+fileName=${ds.fileName}
+baseName=${ds.baseName}
+extension=${ds.extension}
+relativeFilePath=${ds.relativeFilePath}
+charset=${ds.charset}
+mimeType=${ds.mimeType}
+uri=charset=${ds.uri}
+length=${ds.length} Bytes
+
+</#list>
+<#else>
+No data sources found ...
+</#if>
diff --git
a/freemarker-generator-cli/src/app/templates/freemarker-generator/info.ftl
b/freemarker-generator-cli/src/app/templates/freemarker-generator/info.ftl
index 6e60ae2..04121ec 100644
--- a/freemarker-generator-cli/src/app/templates/freemarker-generator/info.ftl
+++ b/freemarker-generator-cli/src/app/templates/freemarker-generator/info.ftl
@@ -48,7 +48,6 @@ FreeMarker Generator DataSources
<#if dataSources?has_content>
<#list dataSources?values as ds>
[#${ds?counter}]: name=${ds.name}, group=${ds.group}, fileName=${ds.fileName},
mimeType=${ds.mimeType}, charset=${ds.charset}, length=${ds.length} Bytes
-URI : ${ds.uri}
</#list>
<#else>
No data sources found ...
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 f46f71d..9527180 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
@@ -199,10 +199,10 @@ Iterating Over Metadata Of A Datasource
---------------------------------------------------------------------------
extension : csv
filename : contract.csv
-basename : contract
-filepath :
/Users/sgoeschl/work/github/apache/freemarker-generator/freemarker-generator-cli/src/app/examples/data/csv
+baseName : contract
+filePath :
/Users/sgoeschl/work/github/apache/freemarker-generator/freemarker-generator-cli/src/app/examples/data/csv
name :
file:/Users/sgoeschl/work/github/apache/freemarker-generator/freemarker-generator-cli/src/app/examples/data/csv/contract.csv
-mimetype : text/csv
+mimeType : text/csv
uri :
file:/Users/sgoeschl/work/github/apache/freemarker-generator/freemarker-generator-cli/src/app/examples/data/csv/contract.csv
group : default
```
@@ -235,11 +235,11 @@ 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
+baseName : transactions
+fileName : transactions.csv
+filePath :
/Users/sgoeschl/work/github/apache/freemarker-generator/freemarker-generator-cli/target/appassembler/examples/data/csv
name : transactions
-mimetype : text/csv
+mimeType : text/csv
uri :
file:/Users/sgoeschl/work/github/apache/freemarker-generator/freemarker-generator-cli/target/appassembler/examples/data/csv/transactions.csv
group : csv
@@ -266,11 +266,11 @@ URI schema : https
Iterating Over Metadata Of A Datasource
---------------------------------------------------------------------------
extension :
-basename :
-filename :
-filepath : /
+baseName :
+fileName :
+filePath : /
name : https://xkcd.com/info.0.json
-mimetype : application/json
+mimeType : application/json
uri : https://xkcd.com/info.0.json
group : default
@@ -296,11 +296,11 @@ URI schema : env
Iterating Over Metadata Of A Datasource
---------------------------------------------------------------------------
extension :
-basename :
-filename :
-filepath : /
+baseName :
+fileName :
+filePath : /
name : envvars
-mimetype : text/plain
+mimeType : text/plain
uri : env:///
group : default
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 5fecc46..d34b32e 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
@@ -128,11 +128,11 @@ 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
+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
+mimeType : text/csv
uri :
file:/Users/sgoeschl/work/github/apache/freemarker-generator/freemarker-generator-cli/target/appassembler/examples/data/csv/user.csv
group : 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 49e536f..d14b57a 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
@@ -49,6 +49,7 @@ public class ExamplesTest extends AbstractMainTest {
@Test
public void shouldRunDataSourceExamples() throws IOException {
+ assertValid(execute("-t freemarker-generator/datasources.ftl ."));
assertValid(execute("-t src/app/examples/templates/datasources.ftl -s
:csv=src/app/examples/data/csv"));
}