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/03/13 19:50:18 UTC

[freemarker-generator] 01/01: FREEMARKER-138 freemarker-generator: Rename Datasource to DataSource

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

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

commit c6c6339524eade9f1bbcbfd18c69f88e1f228dbe
Author: Siegfried Goeschl <si...@gmail.com>
AuthorDate: Fri Mar 13 20:49:59 2020 +0100

    FREEMARKER-138 freemarker-generator: Rename Datasource to DataSource
---
 CHANGELOG.md                                       | 12 ++-
 freemarker-generator-base/README.md                |  4 +-
 .../generator/base/FreeMarkerConstants.java        |  4 +-
 .../{Datasource.java => DataSource.java}           | 19 +++--
 ...tasourceFactory.java => DataSourceFactory.java} | 25 +++---
 .../{Datasources.java => DataSources.java}         | 81 ++++++++++---------
 ...urcesSupplier.java => DataSourcesSupplier.java} | 20 ++---
 .../datasource/DatasourceFactoryTest.java          | 52 ++++++------
 .../generator/datasource/DatasourceTest.java       | 90 ++++++++++-----------
 .../datasource/DatasourcesSupplierTest.java        | 16 ++--
 .../generator/datasource/DatasourcesTest.java      | 94 +++++++++++-----------
 .../freemarker/generator/datasource/UriTest.java   |  1 -
 freemarker-generator-cli/README.md                 | 90 ++++++++++-----------
 .../org/apache/freemarker/generator/cli/Main.java  | 18 ++---
 .../freemarker/generator/cli/config/Settings.java  | 22 ++---
 .../freemarker/generator/cli/config/Suppliers.java |  6 +-
 .../generator/cli/task/FreeMarkerTask.java         | 34 ++++----
 .../freemarker/generator/cli/PicocliTest.java      | 14 ++--
 .../generator/cli/config/SettingsTest.java         |  4 +-
 .../src/test/templates/echo.ftl                    |  6 +-
 .../src/test/templates/tools/csv.ftl               |  2 +-
 .../templates/accesslog/combined-access.ftl        |  4 +-
 freemarker-generator-cli/templates/cat.ftl         |  4 +-
 .../templates/csv/csv/gatling-user-credentials.ftl |  4 +-
 .../templates/csv/fo/transactions.ftl              |  6 +-
 .../templates/csv/fo/transform.ftl                 |  2 +-
 .../templates/csv/html/transactions.ftl            |  6 +-
 .../templates/csv/html/transform.ftl               |  6 +-
 .../templates/csv/md/filter.ftl                    | 14 ++--
 .../templates/csv/md/transform.ftl                 |  2 +-
 .../templates/csv/shell/curl.ftl                   |  2 +-
 .../templates/csv/transform.ftl                    |  6 +-
 freemarker-generator-cli/templates/demo.ftl        | 28 +++----
 .../templates/excel/csv/custom.ftl                 |  4 +-
 .../templates/excel/csv/transform.ftl              |  4 +-
 .../templates/excel/html/transform.ftl             |  6 +-
 .../templates/excel/md/transform.ftl               |  6 +-
 .../templates/html/csv/dependencies.ftl            |  6 +-
 freemarker-generator-cli/templates/info.ftl        |  8 +-
 .../templates/json/csv/swagger-endpoints.ftl       |  2 +-
 .../templates/json/md/github-users.ftl             |  2 +-
 .../templates/properties/csv/locker-test-users.ftl |  4 +-
 .../templates/tsv/fo/transactions.ftl              |  2 +-
 .../templates/xml/txt/recipients.ftl               |  2 +-
 .../templates/yaml/txt/transform.ftl               |  2 +-
 freemarker-generator-tools/README.md               |  4 +-
 .../generator/tools/commonscsv/CommonsCSVTool.java | 20 ++---
 .../generator/tools/excel/ExcelTool.java           | 12 +--
 .../generator/tools/jsonpath/JsonPathTool.java     |  6 +-
 .../generator/tools/jsoup/JsoupTool.java           | 10 +--
 .../generator/tools/properties/PropertiesTool.java |  8 +-
 .../generator/tools/snakeyaml/SnakeYamlTool.java   |  8 +-
 .../freemarker/generator/tools/xml/XmlTool.java    |  8 +-
 .../tools/commonscsv/CommonsCSVToolTest.java       | 26 +++---
 .../generator/tools/excel/ExcelToolTest.java       | 10 +--
 .../tools/properties/PropertiesToolTest.java       | 12 +--
 .../tools/snakeyaml/SnakeYamlToolTest.java         | 12 +--
 .../generator/tools/xml/XmlToolTest.java           | 12 +--
 58 files changed, 449 insertions(+), 445 deletions(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index c76d3ff..aad20cc 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,13 +5,15 @@ All notable changes to this project will be documented in this file. We try to a
 ## 0.1.0-SNAPSHOT
 
 ### Added
-* [FREEMARKER-135] Support user-supplied names for `Datasource` on the command line
-* [FREEMARKER-129] Support `Datasource` exclude pattern in addition to include pattern
+* [FREEMARKER-135] Support user-supplied names for `DataSource` on the command line
+* [FREEMARKER-129] Support `DataSource` exclude pattern in addition to include pattern
 * [FREEMARKER-129] User-defined parameters are passed as `-Pkey=value` instead of using system properties
-* [FREEMARKER-129] Add `freemarker-generator-maven-plugin-sample` for better testing
+* [FREEMARKER-129] Add `freemarker-generator-maven-plugin-sample` for better testing of the Maven plugin
 * [FREEMARKER-129] Migrate `freemarker-cli` into `freemarker-generator` project (see [https://github.com/sgoeschl/freemarker-cli](https://github.com/sgoeschl/freemarker-cli))
 
 ### Changed
+* [FREEMARKER-138] freemarker-generator: Rename `Datasource` to `DataSource`
+* [FREEMARKER-136] Fix broken `site:stage` build
 * [FREEMARKER-134] Rename `Document` to `Datasource` which also changes `--document` to `--datasource`
 * [FREEMARKER-129] Use `freemarker.configuration.setting` in `freemarker-cli.properties` to configure FreeMarker
 * [FREEMARKER-129] Provide a `toString()` metheod for all tools
@@ -28,4 +30,6 @@ All notable changes to this project will be documented in this file. We try to a
 [FREEMARKER-128]: https://issues.apache.org/jira/browse/FREEMARKER-128
 [FREEMARKER-129]: https://issues.apache.org/jira/browse/FREEMARKER-129
 [FREEMARKER-134]: https://issues.apache.org/jira/browse/FREEMARKER-134
-[FREEMARKER-135]: https://issues.apache.org/jira/browse/FREEMARKER-135
\ No newline at end of file
+[FREEMARKER-135]: https://issues.apache.org/jira/browse/FREEMARKER-135
+[FREEMARKER-136]: https://issues.apache.org/jira/browse/FREEMARKER-136
+[FREEMARKER-138]: https://issues.apache.org/jira/browse/FREEMARKER-1386
\ No newline at end of file
diff --git a/freemarker-generator-base/README.md b/freemarker-generator-base/README.md
index 3a17212..0a420f6 100644
--- a/freemarker-generator-base/README.md
+++ b/freemarker-generator-base/README.md
@@ -3,7 +3,7 @@
 This module provides common functionality for `freemarker-generator-cli` and `freemarker-generator-maven-plugin` such as
 
 * Various implementation of `javax.activation.DataSources`
-* Implementation of `Datasource` and utitity methods
-* Creating `Datasources` 
+* Implementation of `DataSource` and utitity methods
+* Creating `DataSources` 
 
 The code actually does not depend on Apache FreeMarker since it useful for other command line tools as well.
\ No newline at end of file
diff --git a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/FreeMarkerConstants.java b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/FreeMarkerConstants.java
index 42fa045..f11b636 100644
--- a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/FreeMarkerConstants.java
+++ b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/FreeMarkerConstants.java
@@ -42,7 +42,7 @@ public class FreeMarkerConstants {
     /* Default encoding for textual content */
     public static final Charset DEFAULT_CHARSET = UTF_8;
 
-    /* Default group name for datasources */
+    /* Default group name for data sources */
     public static final String DEFAULT_GROUP = "default";
 
     public enum GeneratorMode {
@@ -83,7 +83,7 @@ public class FreeMarkerConstants {
         private Model() {
         }
 
-        public static final String DATASOURCES = "Datasources";
+        public static final String DATASOURCES = "DataSources";
 
         public static final String FREEMARKER_CLI_ARGS = "freemarker.cli.args";
         public static final String FREEMARKER_LOCALE = "freemarker.locale";
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
similarity index 93%
rename from freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/Datasource.java
rename to freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/DataSource.java
index ed038b0..9b9354f 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
@@ -23,7 +23,6 @@ import org.apache.freemarker.generator.base.activation.ByteArrayDataSource;
 import org.apache.freemarker.generator.base.activation.StringDataSource;
 import org.apache.freemarker.generator.base.util.CloseableReaper;
 
-import javax.activation.DataSource;
 import javax.activation.FileDataSource;
 import java.io.Closeable;
 import java.io.IOException;
@@ -43,27 +42,27 @@ import static org.apache.freemarker.generator.base.util.StringUtils.emptyToNull;
  * a template. When accessing content it is loaded on demand on not
  * kept in memory to allow processing of large volumes of data.
  */
-public class Datasource implements Closeable {
+public class DataSource implements Closeable {
 
-    /** Human-readable name of the datasource */
+    /** Human-readable name of the data source */
     private final String name;
 
-    /** Optional group of datasource */
+    /** Optional group of data source */
     private final String group;
 
     /** Charset for directly accessing text-based content */
     private final Charset charset;
 
     /** The underlying "javax.activation.DataSource" */
-    private final DataSource dataSource;
+    private final javax.activation.DataSource dataSource;
 
     /** The location of the content, e.g. file name */
     private final String location;
 
-    /** Collect all closables handed out to the caller to be closed when the datasource is closed itself */
+    /** Collect all closables handed out to the caller to be closed when the data source is closed itself */
     private final CloseableReaper closables;
 
-    public Datasource(String name, String group, DataSource dataSource, String location, Charset charset) {
+    public DataSource(String name, String group, javax.activation.DataSource dataSource, String location, Charset charset) {
         this.name = requireNonNull(name);
         this.group = emptyToNull(group);
         this.dataSource = requireNonNull(dataSource);
@@ -103,7 +102,7 @@ public class Datasource implements Closeable {
     /**
      * Try to get the length lazily, efficient and without consuming the input stream.
      *
-     * @return Length of datasource or UNKNOWN_LENGTH
+     * @return Length of data source or UNKNOWN_LENGTH
      */
     public long getLength() {
         if (dataSource instanceof FileDataSource) {
@@ -118,7 +117,7 @@ public class Datasource implements Closeable {
     }
 
     /**
-     * Get an input stream which is closed together with this datasource.
+     * Get an input stream which is closed together with this data source.
      *
      * @return InputStream
      * @throws IOException Operation failed
@@ -206,7 +205,7 @@ public class Datasource implements Closeable {
 
     /**
      * Some tools create a {@link java.io.Closeable} which can bound to the
-     * lifecycle of the datasource. When the datasource is closed all the
+     * lifecycle of the data source. When the data source is closed all the
      * associated {@link java.io.Closeable} are closed as well.
      *
      * @param closeable Closable
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
similarity index 80%
rename from freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/DatasourceFactory.java
rename to freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/DataSourceFactory.java
index 8cf721e..78a5556 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
@@ -22,7 +22,6 @@ import org.apache.freemarker.generator.base.activation.InputStreamDataSource;
 import org.apache.freemarker.generator.base.activation.MimetypesFileTypeMapFactory;
 import org.apache.freemarker.generator.base.activation.StringDataSource;
 
-import javax.activation.DataSource;
 import javax.activation.FileDataSource;
 import javax.activation.URLDataSource;
 import java.io.File;
@@ -36,54 +35,54 @@ import static org.apache.freemarker.generator.base.FreeMarkerConstants.DEFAULT_G
 /**
  * Creates a Datasource from various sources.
  */
-public class DatasourceFactory {
+public class DataSourceFactory {
 
-    private DatasourceFactory() {
+    private DataSourceFactory() {
     }
 
-    public static Datasource create(URL url) {
+    public static DataSource create(URL url) {
         final String location = url.toString();
         final URLDataSource dataSource = new URLDataSource(url);
         return create(url.getHost(), DEFAULT_GROUP, dataSource, location, UTF_8);
     }
 
-    public static Datasource create(String name, String group, URL url, Charset charset) {
+    public static DataSource create(String name, String group, URL url, Charset charset) {
         final String location = url.toString();
         final URLDataSource dataSource = new URLDataSource(url);
         return create(name, group, dataSource, location, charset);
     }
 
-    public static Datasource create(String name, String group, String content) {
+    public static DataSource create(String name, String group, String content) {
         final StringDataSource dataSource = new StringDataSource(name, content, UTF_8);
         return create(name, group, dataSource, Location.STRING, UTF_8);
     }
 
-    public static Datasource create(File file, Charset charset) {
+    public static DataSource create(File file, Charset charset) {
         return create(file.getName(), DEFAULT_GROUP, file, charset);
     }
 
-    public static Datasource create(String name, String group, File file, Charset charset) {
+    public static DataSource create(String name, String group, File file, Charset charset) {
         final FileDataSource dataSource = new FileDataSource(file);
         dataSource.setFileTypeMap(MimetypesFileTypeMapFactory.create());
         return create(name, group, dataSource, file.getAbsolutePath(), charset);
     }
 
-    public static Datasource create(String name, String group, byte[] content) {
+    public static DataSource create(String name, String group, byte[] content) {
         final ByteArrayDataSource dataSource = new ByteArrayDataSource(name, content);
         return create(name, group, dataSource, Location.BYTES, UTF_8);
     }
 
-    public static Datasource create(String name, String group, InputStream is, Charset charset) {
+    public static DataSource create(String name, String group, InputStream is, Charset charset) {
         final InputStreamDataSource dataSource = new InputStreamDataSource(name, is);
         return create(name, group, dataSource, Location.INPUTSTREAM, charset);
     }
 
-    public static Datasource create(String name, String group, InputStream is, String location, Charset charset) {
+    public static DataSource create(String name, String group, InputStream is, String location, Charset charset) {
         final InputStreamDataSource dataSource = new InputStreamDataSource(name, is);
         return create(name, group, dataSource, location, charset);
     }
 
-    public static Datasource create(String name, String group, DataSource dataSource, String location, Charset charset) {
-        return new Datasource(name, group, dataSource, location, charset);
+    public static DataSource create(String name, String group, javax.activation.DataSource dataSource, String location, Charset charset) {
+        return new DataSource(name, group, dataSource, location, charset);
     }
 }
diff --git a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/Datasources.java b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/DataSources.java
similarity index 55%
rename from freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/Datasources.java
rename to freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/DataSources.java
index 5c55c6b..cda71cb 100644
--- a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/Datasources.java
+++ b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/DataSources.java
@@ -28,37 +28,37 @@ import static java.util.stream.Collectors.toList;
 import static org.apache.commons.io.FilenameUtils.wildcardMatch;
 
 /**
- * Container for datasources with a couple of convenience functions to select
- * a subset of datasources.
+ * Container for data sources with a couple of convenience functions to select
+ * a subset of data sources.
  */
-public class Datasources implements Closeable {
+public class DataSources implements Closeable {
 
-    private final List<Datasource> datasources;
+    private final List<DataSource> dataSources;
 
-    public Datasources(Collection<Datasource> datasources) {
-        this.datasources = new ArrayList<>(datasources);
+    public DataSources(Collection<DataSource> dataSources) {
+        this.dataSources = new ArrayList<>(dataSources);
     }
 
     /**
-     * Get the names of all datasources.
+     * Get the names of all data sources.
      *
-     * @return datasource names
+     * @return datas ource names
      */
     public List<String> getNames() {
-        return datasources.stream()
-                .map(Datasource::getName)
+        return dataSources.stream()
+                .map(DataSource::getName)
                 .filter(StringUtils::isNotEmpty)
                 .collect(toList());
     }
 
     /**
-     * Get the groups of all datasources.
+     * Get the groups of all data sources.
      *
-     * @return datasource names
+     * @return data source names
      */
     public List<String> getGroups() {
-        return datasources.stream()
-                .map(Datasource::getGroup)
+        return dataSources.stream()
+                .map(DataSource::getGroup)
                 .filter(StringUtils::isNotEmpty)
                 .sorted()
                 .distinct()
@@ -66,79 +66,82 @@ public class Datasources implements Closeable {
     }
 
     public int size() {
-        return datasources.size();
+        return dataSources.size();
     }
 
     public boolean isEmpty() {
-        return datasources.isEmpty();
+        return dataSources.isEmpty();
     }
 
-    public Datasource getFirst() {
-        return datasources.get(0);
+    public DataSource getFirst() {
+        return dataSources.get(0);
     }
 
-    public List<Datasource> getList() {
-        return new ArrayList<>(datasources);
+    public List<DataSource> getList() {
+        return new ArrayList<>(dataSources);
     }
 
-    public Datasource get(int index) {
-        return datasources.get(index);
+    public DataSource get(int index) {
+        return dataSources.get(index);
     }
 
     /**
-     * Get exactly one datasource. If not exactly one datasource
+     * Get exactly one data source. If not exactly one data source
      * is found an exception is thrown.
      *
-     * @param name name of the datasource
-     * @return datasource
+     * @param name name of the data source
+     * @return data source
      */
-    public Datasource get(String name) {
-        final List<Datasource> list = find(name);
+    public DataSource get(String name) {
+        final List<DataSource> list = find(name);
 
         if (list.isEmpty()) {
-            throw new IllegalArgumentException("Datasource not found : " + name);
+            throw new IllegalArgumentException("Data source not found : " + name);
         }
 
         if (list.size() > 1) {
-            throw new IllegalArgumentException("More than one datasource found : " + name);
+            throw new IllegalArgumentException("More than one data source found : " + name);
         }
 
         return list.get(0);
     }
 
     /**
-     * Find datasources based on their name and globbing pattern.
+     * Find data sources based on their name and globbing pattern.
      *
      * @param wildcard globbing pattern
-     * @return list of mathching datasources
+     * @return list of matching data sources
      */
-    public List<Datasource> find(String wildcard) {
-        return datasources.stream()
+    public List<DataSource> find(String wildcard) {
+        return dataSources.stream()
                 .filter(d -> wildcardMatch(d.getName(), wildcard))
                 .collect(toList());
     }
 
     /**
-     * Find datasources based on their group and and globbing pattern.
+     * Find data sources based on their group and and globbing pattern.
      *
      * @param wildcard globbing pattern
-     * @return list of mathching datasources
+     * @return list of mathching data sources
      */
-    public List<Datasource> findByGroup(String wildcard) {
-        return datasources.stream()
+    public List<DataSource> findByGroup(String wildcard) {
+        return dataSources.stream()
                 .filter(d -> wildcardMatch(d.getGroup(), wildcard))
                 .collect(toList());
     }
 
     @Override
     public void close() {
-        datasources.forEach(ClosableUtils::closeQuietly);
+        dataSources.forEach(ClosableUtils::closeQuietly);
     }
 
     @Override
     public String toString() {
         return "Datasources{" +
-                "datasources=" + datasources +
+                "dataSources=" + dataSources +
+                ", names=" + getNames() +
+                ", groups=" + getGroups() +
+                ", size=" + size() +
                 '}';
     }
 }
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
similarity index 89%
rename from freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/DatasourcesSupplier.java
rename to freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/DataSourcesSupplier.java
index 0f0f740..d137d1b 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
@@ -36,10 +36,10 @@ import static java.util.stream.Collectors.toList;
 import static org.apache.freemarker.generator.base.FreeMarkerConstants.DEFAULT_GROUP;
 
 /**
- * Create a list of <code>Datasource</code> based on a list of sources consisting of
+ * Create a list of <code>DataSource</code> based on a list of sources consisting of
  * URLs, directories and files.
  */
-public class DatasourcesSupplier implements Supplier<List<Datasource>> {
+public class DataSourcesSupplier implements Supplier<List<DataSource>> {
 
     /** List of source files and/or directories */
     private final Collection<String> sources;
@@ -61,7 +61,7 @@ public class DatasourcesSupplier implements Supplier<List<Datasource>> {
      * @param exclude Optional exclude pattern for resolving source files or directory
      * @param charset The charset for loading text files
      */
-    public DatasourcesSupplier(Collection<String> sources, String include, String exclude, Charset charset) {
+    public DataSourcesSupplier(Collection<String> sources, String include, String exclude, Charset charset) {
         this.sources = new ArrayList<>(sources);
         this.include = include;
         this.exclude = exclude;
@@ -69,14 +69,14 @@ public class DatasourcesSupplier implements Supplier<List<Datasource>> {
     }
 
     @Override
-    public List<Datasource> get() {
+    public List<DataSource> get() {
         return sources.stream()
                 .map(this::get)
                 .flatMap(Collection::stream)
                 .collect(toList());
     }
 
-    private List<Datasource> get(String source) {
+    private List<DataSource> get(String source) {
         try {
             if (isHttpUrl(source)) {
                 return singletonList(resolveHttpUrl(source));
@@ -84,27 +84,27 @@ public class DatasourcesSupplier implements Supplier<List<Datasource>> {
                 return resolveFile(source, include, exclude, charset);
             }
         } catch (RuntimeException e) {
-            throw new RuntimeException("Unable to create the datasource: " + source, e);
+            throw new RuntimeException("Unable to create the data source: " + source, e);
         }
     }
 
-    private static Datasource resolveHttpUrl(String source) {
+    private static DataSource resolveHttpUrl(String source) {
         final NamedUri namedUri = NamedUriParser.parse(source);
         final URI uri = namedUri.getUri();
         final String name = getNameOrElse(namedUri, uri.toString());
         final String group = getGroupOrElse(namedUri, DEFAULT_GROUP);
         final Charset currCharset = getCharsetOrElse(namedUri, UTF_8);
-        return DatasourceFactory.create(name, group, toUrl(uri), currCharset);
+        return DataSourceFactory.create(name, group, toUrl(uri), currCharset);
     }
 
-    private static List<Datasource> resolveFile(String source, String include, String exclude, Charset charset) {
+    private static List<DataSource> resolveFile(String source, String include, String exclude, Charset charset) {
         final NamedUri namedUri = NamedUriParser.parse(source);
         final String path = namedUri.getUri().getPath();
         final String name = getNameOrElse(namedUri, path);
         final String group = getGroupOrElse(namedUri, DEFAULT_GROUP);
         final Charset currCharset = getCharsetOrElse(namedUri, charset);
         return fileResolver(path, include, exclude).get().stream()
-                .map(file -> DatasourceFactory.create(name, group, file, currCharset))
+                .map(file -> DataSourceFactory.create(name, group, file, currCharset))
                 .collect(toList());
     }
 
diff --git a/freemarker-generator-base/src/test/java/org/apache/freemarker/generator/datasource/DatasourceFactoryTest.java b/freemarker-generator-base/src/test/java/org/apache/freemarker/generator/datasource/DatasourceFactoryTest.java
index c3bb493..cdebe2a 100644
--- a/freemarker-generator-base/src/test/java/org/apache/freemarker/generator/datasource/DatasourceFactoryTest.java
+++ b/freemarker-generator-base/src/test/java/org/apache/freemarker/generator/datasource/DatasourceFactoryTest.java
@@ -16,8 +16,8 @@
  */
 package org.apache.freemarker.generator.datasource;
 
-import org.apache.freemarker.generator.base.datasource.Datasource;
-import org.apache.freemarker.generator.base.datasource.DatasourceFactory;
+import org.apache.freemarker.generator.base.datasource.DataSource;
+import org.apache.freemarker.generator.base.datasource.DataSourceFactory;
 import org.junit.Test;
 
 import java.io.ByteArrayInputStream;
@@ -39,47 +39,47 @@ public class DatasourceFactoryTest {
 
     @Test
     public void shouldCreateFileBasedDatasource() throws IOException {
-        final Datasource datasource = DatasourceFactory.create(ANY_FILE, ANY_CHAR_SET);
+        final DataSource dataSource = DataSourceFactory.create(ANY_FILE, ANY_CHAR_SET);
 
-        assertEquals(ANY_FILE_NAME, datasource.getName());
-        assertEquals(UTF_8, datasource.getCharset());
-        assertEquals(ANY_FILE.getAbsolutePath(), datasource.getLocation());
-        assertTrue(!datasource.getLines().isEmpty());
+        assertEquals(ANY_FILE_NAME, dataSource.getName());
+        assertEquals(UTF_8, dataSource.getCharset());
+        assertEquals(ANY_FILE.getAbsolutePath(), dataSource.getLocation());
+        assertTrue(!dataSource.getLines().isEmpty());
     }
 
     @Test
     public void shouldCreateStringBasedDatasource() throws IOException {
-        final Datasource datasource = DatasourceFactory.create("test.txt", "default", ANY_TEXT);
+        final DataSource dataSource = DataSourceFactory.create("test.txt", "default", ANY_TEXT);
 
-        assertEquals("test.txt", datasource.getName());
-        assertEquals("default", datasource.getGroup());
-        assertEquals(UTF_8, datasource.getCharset());
-        assertEquals("string", datasource.getLocation());
-        assertEquals(ANY_TEXT, datasource.getText());
-        assertEquals(1, datasource.getLines().size());
+        assertEquals("test.txt", dataSource.getName());
+        assertEquals("default", dataSource.getGroup());
+        assertEquals(UTF_8, dataSource.getCharset());
+        assertEquals("string", dataSource.getLocation());
+        assertEquals(ANY_TEXT, dataSource.getText());
+        assertEquals(1, dataSource.getLines().size());
     }
 
     @Test
     public void shouldCreateByteArrayBasedDatasource() throws IOException {
-        final Datasource datasource = DatasourceFactory.create("test.txt", "default", ANY_TEXT.getBytes(UTF_8));
+        final DataSource dataSource = DataSourceFactory.create("test.txt", "default", ANY_TEXT.getBytes(UTF_8));
 
-        assertEquals("test.txt", datasource.getName());
-        assertEquals("default", datasource.getGroup());
-        assertEquals(UTF_8, datasource.getCharset());
-        assertEquals("bytes", datasource.getLocation());
-        assertEquals(ANY_TEXT, datasource.getText());
-        assertEquals(1, datasource.getLines().size());
+        assertEquals("test.txt", dataSource.getName());
+        assertEquals("default", dataSource.getGroup());
+        assertEquals(UTF_8, dataSource.getCharset());
+        assertEquals("bytes", dataSource.getLocation());
+        assertEquals(ANY_TEXT, dataSource.getText());
+        assertEquals(1, dataSource.getLines().size());
     }
 
     @Test
     public void shouldCreateInputStreamBasedDatasource() throws IOException {
         final InputStream is = new ByteArrayInputStream(ANY_TEXT.getBytes(UTF_8));
-        final Datasource datasource = DatasourceFactory.create("test.txt", "default", is, UTF_8);
+        final DataSource dataSource = DataSourceFactory.create("test.txt", "default", is, UTF_8);
 
-        assertEquals("test.txt", datasource.getName());
-        assertEquals(UTF_8, datasource.getCharset());
-        assertEquals("inputstream", datasource.getLocation());
-        assertEquals(ANY_TEXT, datasource.getText());
+        assertEquals("test.txt", dataSource.getName());
+        assertEquals(UTF_8, dataSource.getCharset());
+        assertEquals("inputstream", dataSource.getLocation());
+        assertEquals(ANY_TEXT, dataSource.getText());
     }
 
 }
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 a1b73cd..5fe5f72 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
@@ -17,8 +17,8 @@
 package org.apache.freemarker.generator.datasource;
 
 import org.apache.commons.io.LineIterator;
-import org.apache.freemarker.generator.base.datasource.Datasource;
-import org.apache.freemarker.generator.base.datasource.DatasourceFactory;
+import org.apache.freemarker.generator.base.datasource.DataSource;
+import org.apache.freemarker.generator.base.datasource.DataSourceFactory;
 import org.junit.Ignore;
 import org.junit.Test;
 
@@ -45,54 +45,54 @@ public class DatasourceTest {
 
     @Test
     public void shouldSupportTextDatasource() throws IOException {
-        try (Datasource datasource = DatasourceFactory.create("stdin", ANY_GROUP, ANY_TEXT)) {
-            assertEquals("stdin", datasource.getName());
-            assertEquals(ANY_GROUP, datasource.getGroup());
-            assertEquals("stdin", datasource.getBaseName());
-            assertEquals("", datasource.getExtension());
-            assertEquals("string", datasource.getLocation());
-            assertEquals(UTF_8, datasource.getCharset());
-            assertEquals("plain/text", datasource.getContentType());
-            assertTrue(datasource.getLength() > 0);
-            assertEquals(ANY_TEXT, datasource.getText());
+        try (DataSource dataSource = DataSourceFactory.create("stdin", ANY_GROUP, ANY_TEXT)) {
+            assertEquals("stdin", dataSource.getName());
+            assertEquals(ANY_GROUP, dataSource.getGroup());
+            assertEquals("stdin", dataSource.getBaseName());
+            assertEquals("", dataSource.getExtension());
+            assertEquals("string", dataSource.getLocation());
+            assertEquals(UTF_8, dataSource.getCharset());
+            assertEquals("plain/text", dataSource.getContentType());
+            assertTrue(dataSource.getLength() > 0);
+            assertEquals(ANY_TEXT, dataSource.getText());
         }
     }
 
     @Test
     public void shouldSupportFileDatasource() throws IOException {
-        try (Datasource datasource = DatasourceFactory.create(ANY_FILE, ANY_CHAR_SET)) {
-            assertEquals(ANY_FILE_NAME, datasource.getName());
-            assertEquals(DEFAULT_GROUP, datasource.getGroup());
-            assertEquals("pom", datasource.getBaseName());
-            assertEquals("xml", datasource.getExtension());
-            assertEquals(ANY_FILE.getAbsolutePath(), datasource.getLocation());
-            assertEquals(Charset.defaultCharset(), datasource.getCharset());
-            assertEquals("application/xml", datasource.getContentType());
-            assertTrue(datasource.getLength() > 0);
-            assertFalse(datasource.getText().isEmpty());
+        try (DataSource dataSource = DataSourceFactory.create(ANY_FILE, ANY_CHAR_SET)) {
+            assertEquals(ANY_FILE_NAME, dataSource.getName());
+            assertEquals(DEFAULT_GROUP, dataSource.getGroup());
+            assertEquals("pom", dataSource.getBaseName());
+            assertEquals("xml", dataSource.getExtension());
+            assertEquals(ANY_FILE.getAbsolutePath(), dataSource.getLocation());
+            assertEquals(Charset.defaultCharset(), dataSource.getCharset());
+            assertEquals("application/xml", dataSource.getContentType());
+            assertTrue(dataSource.getLength() > 0);
+            assertFalse(dataSource.getText().isEmpty());
         }
     }
 
     @Ignore("Requires internet conenection")
     @Test
     public void shouldSupportUrlDatasource() throws IOException {
-        try (Datasource datasource = DatasourceFactory.create(new URL("https://google.com?foo=bar"))) {
-            assertEquals("google.com", datasource.getName());
-            assertEquals(DEFAULT_GROUP, datasource.getGroup());
-            assertEquals("google", datasource.getBaseName());
-            assertEquals("com", datasource.getExtension());
-            assertEquals("https://google.com", datasource.getLocation());
-            assertEquals("text/html; charset=ISO-8859-1", datasource.getContentType());
-            assertEquals(UTF_8, datasource.getCharset());
-            assertEquals(-1, datasource.getLength());
-            assertFalse(datasource.getText().isEmpty());
+        try (DataSource dataSource = DataSourceFactory.create(new URL("https://google.com?foo=bar"))) {
+            assertEquals("google.com", dataSource.getName());
+            assertEquals(DEFAULT_GROUP, dataSource.getGroup());
+            assertEquals("google", dataSource.getBaseName());
+            assertEquals("com", dataSource.getExtension());
+            assertEquals("https://google.com", dataSource.getLocation());
+            assertEquals("text/html; charset=ISO-8859-1", dataSource.getContentType());
+            assertEquals(UTF_8, dataSource.getCharset());
+            assertEquals(-1, dataSource.getLength());
+            assertFalse(dataSource.getText().isEmpty());
         }
     }
 
     @Test
     public void shouldSupportLineIterator() throws IOException {
-        try (Datasource datasource = textDatasource()) {
-            try (LineIterator iterator = datasource.getLineIterator(ANY_CHAR_SET.name())) {
+        try (DataSource dataSource = textDataSource()) {
+            try (LineIterator iterator = dataSource.getLineIterator(ANY_CHAR_SET.name())) {
                 assertEquals(1, count(iterator));
             }
         }
@@ -100,26 +100,26 @@ public class DatasourceTest {
 
     @Test
     public void shouldReadLines() throws IOException {
-        try (Datasource datasource = textDatasource()) {
-            assertEquals(1, datasource.getLines().size());
-            assertEquals(ANY_TEXT, datasource.getLines().get(0));
+        try (DataSource dataSource = textDataSource()) {
+            assertEquals(1, dataSource.getLines().size());
+            assertEquals(ANY_TEXT, dataSource.getLines().get(0));
         }
     }
 
     @Test
     public void shouldGetBytes() throws IOException {
-        try (Datasource datasource = textDatasource()) {
-            assertEquals(11, datasource.getBytes().length);
+        try (DataSource dataSource = textDataSource()) {
+            assertEquals(11, dataSource.getBytes().length);
         }
     }
 
     @Test
     public void shouldCloseDatasource() {
-        final Datasource datasource = textDatasource();
-        final TestClosable closable1 = datasource.addClosable(new TestClosable());
-        final TestClosable closable2 = datasource.addClosable(new TestClosable());
+        final DataSource dataSource = textDataSource();
+        final TestClosable closable1 = dataSource.addClosable(new TestClosable());
+        final TestClosable closable2 = dataSource.addClosable(new TestClosable());
 
-        datasource.close();
+        dataSource.close();
 
         assertTrue(closable1.isClosed());
         assertTrue(closable2.isClosed());
@@ -134,8 +134,8 @@ public class DatasourceTest {
         return count;
     }
 
-    private static Datasource textDatasource() {
-        return DatasourceFactory.create("stdin", "default", ANY_TEXT);
+    private static DataSource textDataSource() {
+        return DataSourceFactory.create("stdin", "default", ANY_TEXT);
     }
 
     private static final class TestClosable implements Closeable {
diff --git a/freemarker-generator-base/src/test/java/org/apache/freemarker/generator/datasource/DatasourcesSupplierTest.java b/freemarker-generator-base/src/test/java/org/apache/freemarker/generator/datasource/DatasourcesSupplierTest.java
index d06f16f..5f985c3 100644
--- a/freemarker-generator-base/src/test/java/org/apache/freemarker/generator/datasource/DatasourcesSupplierTest.java
+++ b/freemarker-generator-base/src/test/java/org/apache/freemarker/generator/datasource/DatasourcesSupplierTest.java
@@ -16,8 +16,8 @@
  */
 package org.apache.freemarker.generator.datasource;
 
-import org.apache.freemarker.generator.base.datasource.Datasource;
-import org.apache.freemarker.generator.base.datasource.DatasourcesSupplier;
+import org.apache.freemarker.generator.base.datasource.DataSource;
+import org.apache.freemarker.generator.base.datasource.DataSourcesSupplier;
 import org.junit.Test;
 
 import java.nio.charset.Charset;
@@ -85,8 +85,8 @@ public class DatasourcesSupplierTest {
 
     @Test
     public void shouldResolveLargeDirectory() {
-        final List<Datasource> datasources = supplier(".", null, null).get();
-        assertFalse(datasources.isEmpty());
+        final List<DataSource> dataSources = supplier(".", null, null).get();
+        assertFalse(dataSources.isEmpty());
     }
 
     @Test(expected = RuntimeException.class)
@@ -100,11 +100,11 @@ public class DatasourcesSupplierTest {
         assertEquals(2, supplier(sources, "*.xml", null).get().size());
     }
 
-    private static DatasourcesSupplier supplier(String directory, String include, String exclude) {
-        return new DatasourcesSupplier(singletonList(directory), include, exclude, Charset.defaultCharset());
+    private static DataSourcesSupplier supplier(String directory, String include, String exclude) {
+        return new DataSourcesSupplier(singletonList(directory), include, exclude, Charset.defaultCharset());
     }
 
-    private static DatasourcesSupplier supplier(List<String> files, String include, String exclude) {
-        return new DatasourcesSupplier(files, include, exclude, Charset.defaultCharset());
+    private static DataSourcesSupplier supplier(List<String> files, String include, String exclude) {
+        return new DataSourcesSupplier(files, include, exclude, Charset.defaultCharset());
     }
 }
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 de78af5..1b64b56 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
@@ -16,9 +16,9 @@
  */
 package org.apache.freemarker.generator.datasource;
 
-import org.apache.freemarker.generator.base.datasource.Datasource;
-import org.apache.freemarker.generator.base.datasource.DatasourceFactory;
-import org.apache.freemarker.generator.base.datasource.Datasources;
+import org.apache.freemarker.generator.base.datasource.DataSource;
+import org.apache.freemarker.generator.base.datasource.DataSourceFactory;
+import org.apache.freemarker.generator.base.datasource.DataSources;
 import org.junit.Test;
 
 import java.io.File;
@@ -44,95 +44,95 @@ public class DatasourcesTest {
 
     @Test
     public void shouldFindByName() {
-        final Datasources datasources = datasources();
+        final DataSources dataSources = dataSources();
 
-        assertEquals(0, datasources.find(null).size());
-        assertEquals(0, datasources.find("").size());
-        assertEquals(0, datasources.find("*.bar").size());
-        assertEquals(0, datasources.find("foo.*").size());
-        assertEquals(0, datasources.find("foo.bar").size());
+        assertEquals(0, dataSources.find(null).size());
+        assertEquals(0, dataSources.find("").size());
+        assertEquals(0, dataSources.find("*.bar").size());
+        assertEquals(0, dataSources.find("foo.*").size());
+        assertEquals(0, dataSources.find("foo.bar").size());
 
-        assertEquals(2, datasources.find("*.*").size());
-        assertEquals(1, datasources.find("*." + ANY_FILE_EXTENSION).size());
-        assertEquals(1, datasources.find("*.???").size());
-        assertEquals(1, datasources.find("*om*").size());
-        assertEquals(1, datasources.find("*o*.xml").size());
+        assertEquals(2, dataSources.find("*.*").size());
+        assertEquals(1, dataSources.find("*." + ANY_FILE_EXTENSION).size());
+        assertEquals(1, dataSources.find("*.???").size());
+        assertEquals(1, dataSources.find("*om*").size());
+        assertEquals(1, dataSources.find("*o*.xml").size());
 
-        assertEquals(1, datasources.find(ANY_FILE_NAME).size());
-        assertEquals(1, datasources.find(ANY_FILE_NAME.charAt(0) + "*").size());
+        assertEquals(1, dataSources.find(ANY_FILE_NAME).size());
+        assertEquals(1, dataSources.find(ANY_FILE_NAME.charAt(0) + "*").size());
 
-        assertEquals(3, datasources.find("*").size());
+        assertEquals(3, dataSources.find("*").size());
     }
 
     @Test
     public void shouldFindByGroup() {
-        final Datasources datasources = datasources();
+        final DataSources dataSources = dataSources();
 
-        assertEquals(0, datasources.findByGroup(null).size());
-        assertEquals(0, datasources.findByGroup("").size());
+        assertEquals(0, dataSources.findByGroup(null).size());
+        assertEquals(0, dataSources.findByGroup("").size());
 
-        assertEquals(0, datasources.findByGroup("unknown").size());
+        assertEquals(0, dataSources.findByGroup("unknown").size());
 
-        assertEquals(3, datasources.findByGroup("*").size());
-        assertEquals(3, datasources.findByGroup("default").size());
-        assertEquals(3, datasources.findByGroup("d*").size());
-        assertEquals(3, datasources.findByGroup("d??????").size());
+        assertEquals(3, dataSources.findByGroup("*").size());
+        assertEquals(3, dataSources.findByGroup("default").size());
+        assertEquals(3, dataSources.findByGroup("d*").size());
+        assertEquals(3, dataSources.findByGroup("d??????").size());
 
     }
 
     @Test
     public void shouldGetDatasource() {
-        assertNotNull(datasources().get(ANY_FILE_NAME));
+        assertNotNull(dataSources().get(ANY_FILE_NAME));
     }
 
     @Test
     public void shouldGetAllDatasources() {
-        final Datasources datasources = datasources();
-
-        assertEquals("unknown", datasources().get(0).getName());
-        assertEquals("pom.xml", datasources().get(1).getName());
-        assertEquals("server.invalid", datasources().get(2).getName());
-        assertEquals("unknown", datasources().getFirst().getName());
-        assertEquals(3, datasources.getList().size());
-        assertEquals(3, datasources.size());
-        assertFalse(datasources.isEmpty());
+        final DataSources dataSources = dataSources();
+
+        assertEquals("unknown", dataSources().get(0).getName());
+        assertEquals("pom.xml", dataSources().get(1).getName());
+        assertEquals("server.invalid", dataSources().get(2).getName());
+        assertEquals("unknown", dataSources().getFirst().getName());
+        assertEquals(3, dataSources.getList().size());
+        assertEquals(3, dataSources.size());
+        assertFalse(dataSources.isEmpty());
     }
 
     @Test
     public void shouldGetNames() {
-        assertEquals(asList("unknown", "pom.xml", "server.invalid"), datasources().getNames());
+        assertEquals(asList("unknown", "pom.xml", "server.invalid"), dataSources().getNames());
     }
 
     @Test
     public void shouldGetGroups() {
-        assertEquals(singletonList(DEFAULT_GROUP), datasources().getGroups());
+        assertEquals(singletonList(DEFAULT_GROUP), dataSources().getGroups());
     }
 
     @Test(expected = IllegalArgumentException.class)
     public void shouldThrowExceptionWhenGetDoesNotFindDatasource() {
-        datasources().get("file-does-not-exist");
+        dataSources().get("file-does-not-exist");
     }
 
     @Test(expected = IllegalArgumentException.class)
     public void shouldThrowExceptionWhenGetFindsMultipleDatasources() {
-        datasources().get("*");
+        dataSources().get("*");
     }
 
-    private static Datasources datasources() {
-        return new Datasources(asList(textDatasource(), fileDatasource(), urlDatasource()));
+    private static DataSources dataSources() {
+        return new DataSources(asList(textDatasource(), fileDatasource(), urlDatasource()));
     }
 
-    private static Datasource textDatasource() {
-        return DatasourceFactory.create(UNKNOWN, DEFAULT_GROUP, ANY_TEXT);
+    private static DataSource textDatasource() {
+        return DataSourceFactory.create(UNKNOWN, DEFAULT_GROUP, ANY_TEXT);
     }
 
-    private static Datasource fileDatasource() {
-        return DatasourceFactory.create(ANY_FILE, UTF_8);
+    private static DataSource fileDatasource() {
+        return DataSourceFactory.create(ANY_FILE, UTF_8);
     }
 
-    private static Datasource urlDatasource() {
+    private static DataSource urlDatasource() {
         try {
-            return DatasourceFactory.create(new URL(ANY_URL));
+            return DataSourceFactory.create(new URL(ANY_URL));
         } catch (MalformedURLException e) {
             throw new RuntimeException(e);
         }
diff --git a/freemarker-generator-base/src/test/java/org/apache/freemarker/generator/datasource/UriTest.java b/freemarker-generator-base/src/test/java/org/apache/freemarker/generator/datasource/UriTest.java
index bf5f865..cce6273 100644
--- a/freemarker-generator-base/src/test/java/org/apache/freemarker/generator/datasource/UriTest.java
+++ b/freemarker-generator-base/src/test/java/org/apache/freemarker/generator/datasource/UriTest.java
@@ -20,7 +20,6 @@ import org.junit.Test;
 
 import java.net.URI;
 
-import static junit.framework.TestCase.assertNull;
 import static org.junit.Assert.assertEquals;
 
 public class UriTest {
diff --git a/freemarker-generator-cli/README.md b/freemarker-generator-cli/README.md
index 524f7b3..0bd0a95 100644
--- a/freemarker-generator-cli/README.md
+++ b/freemarker-generator-cli/README.md
@@ -58,7 +58,7 @@ Some years later the not-so-small-any-longer-and-not-having-tests Groovy script
 * Support transformation of HTML using [JSoup](https://jsoup.org)
 * Support transformation of structured logfiles using [Grok](https://github.com/thekrakken/java-grok)
 * XML & XPath is supported by FreeMarker [out-of-the-box](http://freemarker.org/docs/xgui.html)
-* Support for reading a datasource content from STDIN to integrate with command line tools
+* Support for reading a data source content from STDIN to integrate with command line tools
 * Support execution of arbitrary commands using [Apache Commons Exec](https://commons.apache.org/proper/commons-exec/)
 * Add some commonly useful information such as `System Properties`, `Enviroment Variables`
 * Support embedding the code in existing applications
@@ -106,7 +106,7 @@ FreeMarker CLI Tools
 - XmlTool              : Process XML files using Apache FreeMarker (see https://freemarker.apache.org/docs/xgui.html)
 - YamlTool             : Process YAML files using SnakeYAML(see https://bitbucket.org/asomov/snakeyaml/wiki/Home)
 
-FreeMarker CLI Datasources
+FreeMarker CLI DataSources
 ---------------------------------------------------------------------------
 
 User Supplied Parameters
@@ -204,21 +204,21 @@ Apache FreeMarker CLI
   -D, --system-property=<String=String>
                             Set system property
   -e, --input-encoding=<inputEncoding>
-                            Encoding of datasource
+                            Encoding of data source
   -E, --expose-env          Expose environment variables and user-supplied
                               properties globally
-      --exclude=<exclude>   File pattern for datasource input directory
+      --exclude=<exclude>   File pattern for data source input directory
   -h, --help                Show this help message and exit.
   -i, --interactive=<interactiveTemplate>
                             Interactive FreeMarker template
-      --include=<include>   File pattern for datasource input directory
+      --include=<include>   File pattern for data source input directory
   -l, --locale=<locale>     Locale being used for the output, e.g. 'en_US'
   -o, --output=<outputFile> Output file
       --output-encoding=<outputEncoding>
                             Encoding of output, e.g. UTF-8
   -P, --param=<String=String>
                             Set parameter
-      --stdin               Read datasource from stdin
+      --stdin               Read data source from stdin
   -t, --template=<template> FreeMarker template to render
       --times=<times>       Re-run X times for profiling
   -V, --version             Print version information and exit.
@@ -255,7 +255,7 @@ or pipe a cURL response
 
 ```text
 <#ftl output_format="plainText" >
-<#assign json = JsonPathTool.parse(Datasources.get(0))>
+<#assign json = JsonPathTool.parse(DataSources.get(0))>
 <#assign users = json.read("$[*]")>
 <#--------------------------------------------------------------------------->
 # GitHub Users
@@ -293,7 +293,7 @@ The FreeMarker template is shown below
 ```text
 <#ftl output_format="plainText">
 <#assign cvsFormat = CSVTool.formats["DEFAULT"].withHeader()>
-<#assign csvParser = CSVTool.parse(Datasources.get(0), cvsFormat)>
+<#assign csvParser = CSVTool.parse(DataSources.get(0), cvsFormat)>
 <#assign csvHeaders = csvParser.getHeaderMap()?keys>
 <#assign csvRecords = csvParser.records>
 <#--------------------------------------------------------------------------->
@@ -330,7 +330,7 @@ using the following template
 
 ```text
 <#ftl output_format="plainText" >
-<#assign xml = XmlTool.parse(Datasources.get(0))>
+<#assign xml = XmlTool.parse(DataSources.get(0))>
 <#list xml.recipients.person as recipient>
 To: ${recipient.name}
 ${recipient.address}
@@ -377,7 +377,7 @@ One day I was asked a to prepare a CSV files containing REST endpoints described
 
 ```text
 <#ftl output_format="plainText" strip_text="true">
-<#assign json = JsonPathTool.parse(Datasources.get(0))>
+<#assign json = JsonPathTool.parse(DataSources.get(0))>
 <#assign basePath = json.read("$.basePath")>
 <#assign paths = json.read("$.paths")>
 
@@ -439,9 +439,9 @@ The provided FTL transforms an Excel into a HTML document supporting multiple Ex
 
 ```text
 <#ftl output_format="HTML" >
-<#assign datasource = Datasources.get(0)>
-<#assign name = datasource.name>
-<#assign workbook = ExcelTool.parse(datasource)>
+<#assign dataSource = DataSources.get(0)>
+<#assign name = dataSource.name>
+<#assign workbook = ExcelTool.parse(dataSource)>
 <#assign date = .now?iso_utc>
 <#--------------------------------------------------------------------------->
 <!DOCTYPE html>
@@ -535,8 +535,8 @@ The FTL uses a couple of interesting features
 <#ftl output_format="plainText" strip_text="true">
 <#compress>
     TENANT,SITE,USER_ID,DISPOSER_ID,PASSWORD,SMS_OTP,NAME,DESCRIPTION
-    <#list Datasources.list as datasource>
-        <#assign properties = PropertiesTool.parse(datasource)>
+    <#list DataSources.list as dataSource>
+        <#assign properties = PropertiesTool.parse(dataSource)>
         <#assign environments = properties["ENVIRONMENTS"]!"">
         <#assign tenant = extractTenant(environments)>
         <#assign site = extractSite(environments)>
@@ -565,10 +565,10 @@ For a POC (proof of concept) I created a sample transformation from CSV to XML-F
 
 ```text
 <#ftl output_format="XML" >
-<#assign datasource = Datasources.get(0)>
-<#assign name = datasource.name>
+<#assign dataSource = DataSources.get(0)>
+<#assign name = dataSource.name>
 <#assign cvsFormat = CSVTool.formats.DEFAULT.withDelimiter('\t').withHeader()>
-<#assign csvParser = CSVTool.parse(datasource, cvsFormat)>
+<#assign csvParser = CSVTool.parse(dataSource, cvsFormat)>
 <#assign csvHeaders = csvParser.getHeaderMap()?keys>
 <#assign csvRecords = csvParser.records>
 <#--------------------------------------------------------------------------->
@@ -686,8 +686,8 @@ Recently I got the rather unusual question how to determine the list of dependen
 
 ```text
 <#ftl output_format="plainText" strip_text="true">
-<#assign datasource = Datasources.get(0)>
-<#assign html = JsoupTool.parse(datasource)>
+<#assign dataSource = DataSources.get(0)>
+<#assign html = JsoupTool.parse(dataSource)>
 
 <#compress>
     <@writeHeader/>
@@ -761,7 +761,7 @@ and the final FTL is found below
 ```text
 <#ftl output_format="plainText">
 <#assign cvsFormat = CSVTool.formats["DEFAULT"].withHeader()>
-<#assign csvParser = CSVTool.parse(Datasources.get(0), cvsFormat)>
+<#assign csvParser = CSVTool.parse(DataSources.get(0), cvsFormat)>
 <#assign records = csvParser.records>
 <#assign csvMap = CSVTool.toMap(records, "disposer")>
 <#--------------------------------------------------------------------------->
@@ -845,8 +845,8 @@ using the following FreeMarker template
 ```text
 <#ftl output_format="plainText" strip_whitespace=true>
 <#assign grok = GrokTool.compile("%{COMBINEDAPACHELOG}")>
-<#assign datasource = Datasources.get(0)>
-<#assign lines = datasource.getLineIterator()>
+<#assign dataSource = DataSources.get(0)>
+<#assign lines = dataSource.getLineIterator()>
 
 <#compress>
     TIMESTAMP;VERB;REQUEST;HTTPVERSION
@@ -864,7 +864,7 @@ using the following FreeMarker template
 While this looks small and tidy there are some nifty features
 
 * `GrokTool.compile("%{COMBINEDAPACHELOG}")` builds the `Grok` instance to parse access logs in `Combined Format`
-* The datasource is streamed line by line and not loaded into memory in one piece
+* The data source is streamed line by line and not loaded into memory in one piece
 * This also works for using `stdin` so are able to parse GB of access log or other files
 
 ## 6.11 CSV Transformation
@@ -877,7 +877,7 @@ renders the following template
 
 ```text
 <#ftl output_format="plainText" strip_text="true">
-<#assign csvParser = createCsvParser(Datasources.get(0))>
+<#assign csvParser = createCsvParser(DataSources.get(0))>
 <#assign csvPrinter = createCsvPrinter()>
 <#-- Print each line without materializing the CSV in memory -->
 <#compress>
@@ -886,11 +886,11 @@ renders the following template
     </#list>
 </#compress>
 
-<#function createCsvParser datasource>
+<#function createCsvParser dataSource>
     <#assign initialCvsInFormat = CSVTool.formats[SystemTool.getParameter("csv.in.format", "DEFAULT")]>
     <#assign csvInDelimiter = CSVTool.toDelimiter(SystemTool.getParameter("csv.in.delimiter", initialCvsInFormat.getDelimiter()))>
     <#assign cvsInFormat = initialCvsInFormat.withDelimiter(csvInDelimiter)>
-    <#return CSVTool.parse(datasource, cvsInFormat)>
+    <#return CSVTool.parse(dataSource, cvsInFormat)>
 </#function>
 
 <#function createCsvPrinter>
@@ -980,16 +980,16 @@ Sometime you need to apply a CSS, JSON or XPath query in ad ad-hoc way without i
 > bin/freemarker-cli -i 'Hello ${SystemTool.envs["USER"]}'; echo
 Hello sgoeschl
 
-> bin/freemarker-cli -i '${JsonPathTool.parse(Datasources.first).read("$.info.title")}' site/sample/json/swagger-spec.json; echo
+> bin/freemarker-cli -i '${JsonPathTool.parse(DataSources.first).read("$.info.title")}' site/sample/json/swagger-spec.json; echo
 Swagger Petstore
 
-> bin/freemarker-cli -i 'Post Title : ${JsonPathTool.parse(Datasources.first).read("$.title")}' https://jsonplaceholder.typicode.com/posts/2
+> bin/freemarker-cli -i 'Post Title : ${JsonPathTool.parse(DataSources.first).read("$.title")}' https://jsonplaceholder.typicode.com/posts/2
 Post Title : qui est esse
 
-> bin/freemarker-cli -i '${XmlTool.parse(Datasources.first)["recipients/person[1]/name"]}' site/sample/xml/recipients.xml; echo
+> bin/freemarker-cli -i '${XmlTool.parse(DataSources.first)["recipients/person[1]/name"]}' site/sample/xml/recipients.xml; echo
 John Smith
 
-> bin/freemarker-cli -i '${JsoupTool.parse(Datasources.first).select("a")[0]}' site/sample/html/dependencies.html; echo
+> bin/freemarker-cli -i '${JsoupTool.parse(DataSources.first).select("a")[0]}' site/sample/html/dependencies.html; echo
 <a href="${project.url}" title="FreeMarker CLI">FreeMarker CLI</a>
 
 > ./bin/freemarker-cli -i '<#list SystemTool.envs as name,value>${name} ==> ${value}${"\n"}</#list>'
@@ -1018,8 +1018,8 @@ and Apache FreeMarker template
 
 ```text
 <#ftl output_format="plainText" strip_text="true">
-<#assign datasource = Datasources.get(0)>
-<#assign parser = parser(datasource)>
+<#assign dataSource = DataSources.get(0)>
+<#assign parser = parser(dataSource)>
 <#assign headers = parser.getHeaderNames()>
 <#assign column = SystemTool.getProperty("column")>
 <#assign values = SystemTool.getProperty("values")?split(",")>
@@ -1027,7 +1027,7 @@ and Apache FreeMarker template
 <#-- Process each line without materializing the whole file in memory -->
 
 <#compress>
-    <@writePageHeader datasource/>
+    <@writePageHeader dataSource/>
     <#list parser.iterator() as record>
         <#if filter(record)>
             <@writeCsvRecord headers record/>
@@ -1035,18 +1035,18 @@ and Apache FreeMarker template
     </#list>
 </#compress>
 
-<#function parser datasource>
+<#function parser dataSource>
     <#assign format = CSVTool.formats[SystemTool.getProperty("format", "DEFAULT")]>
     <#assign delimiter = CSVTool.toDelimiter(SystemTool.getProperty("delimiter", format.getDelimiter()))>
-    <#return CSVTool.parse(datasource, format.withFirstRecordAsHeader().withDelimiter(delimiter))>
+    <#return CSVTool.parse(dataSource, format.withFirstRecordAsHeader().withDelimiter(delimiter))>
 </#function>
 
 <#function filter record>
     <#return values?seq_contains(record.get(column))>
 </#function>
 
-<#macro writePageHeader datasource>
-    # ${datasource.name}
+<#macro writePageHeader dataSource>
+    # ${dataSource.name}
 </#macro>
 
 <#macro writeCsvRecord headers record>
@@ -1191,13 +1191,13 @@ user.home    : /Users/sgoeschl
 - java.vendor.url ==> http://java.oracle.com/
 - java.vm.name ==> Java HotSpot(TM) 64-Bit Server VM
 
-11) Access Datasources
+11) Access DataSources
 ---------------------------------------------------------------------------
-Get the number of datasources:
+Get the number of data sources:
 - 0
 List all files containing "README" in the name
 List all files having "md" extension
-Get all datasources
+Get all data sources
 
 12) FreeMarker CLI Tools
 ---------------------------------------------------------------------------
@@ -1217,7 +1217,7 @@ Get all datasources
 13) Document Data Model
 ---------------------------------------------------------------------------
 - CSVTool
-- Datasources
+- DataSources
 - ExcelTool
 - ExecTool
 - FreeMarkerTool
@@ -1257,19 +1257,19 @@ Sat Feb 22 16:54:20 CET 2020
 ## 7.1 How It Works
 
 * The user-supplied files are loaded or input is read from `stdin`
-* The FreeMarker data model containing the datasources and tools is created and passed to the template
+* The FreeMarker data model containing the data sources and tools is created and passed to the template
 * The generated output is written to the user-supplied file or to `stdout`
 
 ## 7.2 FreeMarker Data Model
 
-Within the script a FreeMarker data model is set up and passed to the template - it contains the datasources to be processed and the following tools
+Within the script a FreeMarker data model is set up and passed to the template - it contains the data sources to be processed and the following tools
 
 | Entry                 | Description                                                                                               |
 |-----------------------|-----------------------------------------------------------------------------------------------------------|
 | CSVTool               | Process CSV files using [Apache Commons CSV](https://commons.apache.org/proper/commons-csv/)              |
 | ExecTool              | Execute command line tools using [Apache Commons Exec](https://commons.apache.org/proper/commons-exec/)   |
 | ExcelTool             | Process Excels files (XLS, XLSX) using [Apache POI](https://poi.apache.org)                               |
-| Datasources           | Helper class to find datasources, e.g. by name, extension or index                                          |
+| DataSources           | Helper class to find data sources, e.g. by name, extension or index                                          |
 | FreeMarkerTool        | Expose useful FreeMarker classes                                                                          |
 | GrokTool              | Process text files using [Grok](https://github.com/thekrakken/java-grok) instead of regular expressions   |
 | JsonPathTool          | Process JSON file using [Java JSON Path](https://github.com/json-path/JsonPath)                           |
diff --git a/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/Main.java b/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/Main.java
index 406c70e..798c803 100644
--- a/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/Main.java
+++ b/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/Main.java
@@ -68,13 +68,13 @@ public class Main implements Callable<Integer> {
     @Option(names = { "-b", "--basedir" }, description = "Optional template base directory")
     String baseDir;
 
-    @Option(names = { "-d", "--datasource" }, description = "Datasource used for rendering")
-    List<String> datasources;
+    @Option(names = { "-d", "--data-source" }, description = "Datasource used for rendering")
+    List<String> dataSources;
 
     @Option(names = { "-D", "--system-property" }, description = "Set system property")
     Properties systemProperties;
 
-    @Option(names = { "-e", "--input-encoding" }, description = "Encoding of datasource", defaultValue = "UTF-8")
+    @Option(names = { "-e", "--input-encoding" }, description = "Encoding of data source", defaultValue = "UTF-8")
     String inputEncoding;
 
     @Option(names = { "-E", "--expose-env" }, description = "Expose environment variables and user-supplied properties globally")
@@ -95,16 +95,16 @@ public class Main implements Callable<Integer> {
     @Option(names = { "--config" }, defaultValue = FREEMARKER_CLI_PROPERTY_FILE, description = "FreeMarker CLI configuration file")
     String configFile;
 
-    @Option(names = { "--include" }, description = "File pattern for datasource input directory")
+    @Option(names = { "--include" }, description = "File pattern for data source input directory")
     String include;
 
-    @Option(names = { "--exclude" }, description = "File pattern for datasource input directory")
+    @Option(names = { "--exclude" }, description = "File pattern for data source input directory")
     String exclude;
 
     @Option(names = { "--output-encoding" }, description = "Encoding of output, e.g. UTF-8", defaultValue = "UTF-8")
     String outputEncoding;
 
-    @Option(names = { "--stdin" }, description = "Read datasource from stdin")
+    @Option(names = { "--stdin" }, description = "Read data  source from stdin")
     boolean readFromStdin;
 
     @Option(names = { "--times" }, defaultValue = "1", description = "Re-run X times for profiling")
@@ -192,7 +192,7 @@ public class Main implements Callable<Integer> {
                 .setOutputEncoding(outputEncoding)
                 .setOutputFile(outputFile)
                 .setParameters(parameters != null ? parameters : new HashMap<>())
-                .setDatasources(getCombindedDatasources())
+                .setDataSources(getCombindedDatasources())
                 .setSystemProperties(systemProperties != null ? systemProperties : new Properties())
                 .setTemplateDirectories(templateDirectories)
                 .setTemplateName(templateSourceOptions.template)
@@ -224,11 +224,11 @@ public class Main implements Callable<Integer> {
      * Datasources can be passed via command line option and/or
      * positional parameter so we need to merge them.
      *
-     * @return List of datasources
+     * @return List of data sources
      */
     private List<String> getCombindedDatasources() {
         if (isTemplateDrivenGeneration()) {
-            return Stream.of(datasources, sources)
+            return Stream.of(dataSources, sources)
                     .filter(Objects::nonNull)
                     .flatMap(Collection::stream)
                     .collect(Collectors.toList());
diff --git a/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/config/Settings.java b/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/config/Settings.java
index 5facf82..30f6d9c 100644
--- a/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/config/Settings.java
+++ b/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/config/Settings.java
@@ -86,7 +86,7 @@ public class Settings {
     private final boolean isEnvironmentExposed;
 
     /** User-supplied list of source files or directories */
-    private final List<String> datasources;
+    private final List<String> dataSources;
 
     /** User-supplied parameters */
     private final Map<String, String> parameters;
@@ -112,7 +112,7 @@ public class Settings {
             Locale locale,
             boolean isReadFromStdin,
             boolean isEnvironmentExposed,
-            List<String> datasources,
+            List<String> dataSources,
             Map<String, String> parameters,
             Properties sytemProperties,
             Writer writer) {
@@ -133,7 +133,7 @@ public class Settings {
         this.locale = requireNonNull(locale);
         this.isReadFromStdin = isReadFromStdin;
         this.isEnvironmentExposed = isEnvironmentExposed;
-        this.datasources = requireNonNull(datasources);
+        this.dataSources = requireNonNull(dataSources);
         this.parameters = requireNonNull(parameters);
         this.sytemProperties = requireNonNull(sytemProperties);
         this.configuration = requireNonNull(configuration);
@@ -204,8 +204,8 @@ public class Settings {
         return isEnvironmentExposed;
     }
 
-    public List<String> getDatasources() {
-        return datasources;
+    public List<String> getDataSources() {
+        return dataSources;
     }
 
     public Map<String, String> getParameters() {
@@ -262,7 +262,7 @@ public class Settings {
                 ", locale=" + locale +
                 ", isReadFromStdin=" + isReadFromStdin +
                 ", isEnvironmentExposed=" + isEnvironmentExposed +
-                ", datasources=" + datasources +
+                ", dataSources=" + dataSources +
                 ", properties=" + parameters +
                 ", sytemProperties=" + sytemProperties +
                 ", writer=" + writer +
@@ -288,7 +288,7 @@ public class Settings {
         private String locale;
         private boolean isReadFromStdin;
         private boolean isEnvironmentExposed;
-        private List<String> datasources;
+        private List<String> dataSources;
         private Map<String, String> parameters;
         private Properties systemProperties;
         private Properties configuration;
@@ -302,7 +302,7 @@ public class Settings {
             this.systemProperties = new Properties();
             this.setInputEncoding(DEFAULT_CHARSET.name());
             this.setOutputEncoding(DEFAULT_CHARSET.name());
-            this.datasources = emptyList();
+            this.dataSources = emptyList();
             this.templateDirectories = emptyList();
         }
 
@@ -380,8 +380,8 @@ public class Settings {
             return this;
         }
 
-        public SettingsBuilder setDatasources(List<String> datasources) {
-            this.datasources = datasources;
+        public SettingsBuilder setDataSources(List<String> dataSources) {
+            this.dataSources = dataSources;
             return this;
         }
 
@@ -432,7 +432,7 @@ public class Settings {
                     LocaleUtils.parseLocale(currLocale),
                     isReadFromStdin,
                     isEnvironmentExposed,
-                    datasources,
+                    dataSources,
                     parameters,
                     systemProperties,
                     writer
diff --git a/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/config/Suppliers.java b/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/config/Suppliers.java
index 06dede4..0766ad3 100644
--- a/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/config/Suppliers.java
+++ b/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/config/Suppliers.java
@@ -17,7 +17,7 @@
 package org.apache.freemarker.generator.cli.config;
 
 import freemarker.cache.TemplateLoader;
-import org.apache.freemarker.generator.base.datasource.DatasourcesSupplier;
+import org.apache.freemarker.generator.base.datasource.DataSourcesSupplier;
 import org.apache.freemarker.generator.base.file.PropertiesClassPathSupplier;
 import org.apache.freemarker.generator.base.file.PropertiesFileSystemSupplier;
 import org.apache.freemarker.generator.base.file.PropertiesSupplier;
@@ -49,8 +49,8 @@ public class Suppliers {
         return new ToolsSupplier(settings.getConfiguration(), settings.toMap());
     }
 
-    public static DatasourcesSupplier datasourcesSupplier(Settings settings) {
-        return new DatasourcesSupplier(settings.getDatasources(),
+    public static DataSourcesSupplier dataSourcesSupplier(Settings settings) {
+        return new DataSourcesSupplier(settings.getDataSources(),
                 settings.getInclude(),
                 settings.getExclude(),
                 settings.getInputEncoding());
diff --git a/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/task/FreeMarkerTask.java b/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/task/FreeMarkerTask.java
index b59bb62..7271644 100644
--- a/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/task/FreeMarkerTask.java
+++ b/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/task/FreeMarkerTask.java
@@ -20,9 +20,9 @@ import freemarker.template.Configuration;
 import freemarker.template.Template;
 import org.apache.commons.io.FileUtils;
 import org.apache.freemarker.generator.base.FreeMarkerConstants.Location;
-import org.apache.freemarker.generator.base.datasource.Datasource;
-import org.apache.freemarker.generator.base.datasource.DatasourceFactory;
-import org.apache.freemarker.generator.base.datasource.Datasources;
+import org.apache.freemarker.generator.base.datasource.DataSource;
+import org.apache.freemarker.generator.base.datasource.DataSourceFactory;
+import org.apache.freemarker.generator.base.datasource.DataSources;
 import org.apache.freemarker.generator.cli.config.Settings;
 
 import java.io.File;
@@ -41,7 +41,7 @@ import static org.apache.freemarker.generator.base.FreeMarkerConstants.DEFAULT_G
 import static org.apache.freemarker.generator.base.FreeMarkerConstants.Location.STDIN;
 import static org.apache.freemarker.generator.base.FreeMarkerConstants.Model.DATASOURCES;
 import static org.apache.freemarker.generator.cli.config.Suppliers.configurationSupplier;
-import static org.apache.freemarker.generator.cli.config.Suppliers.datasourcesSupplier;
+import static org.apache.freemarker.generator.cli.config.Suppliers.dataSourcesSupplier;
 import static org.apache.freemarker.generator.cli.config.Suppliers.toolsSupplier;
 
 /**
@@ -53,28 +53,28 @@ public class FreeMarkerTask implements Callable<Integer> {
 
     private final Settings settings;
     private final Supplier<Map<String, Object>> toolsSupplier;
-    private final Supplier<List<Datasource>> datasourcesSupplier;
+    private final Supplier<List<DataSource>> dataSourcesSupplier;
     private final Supplier<Configuration> configurationSupplier;
 
     public FreeMarkerTask(Settings settings) {
-        this(settings, toolsSupplier(settings), datasourcesSupplier(settings), configurationSupplier(settings));
+        this(settings, toolsSupplier(settings), dataSourcesSupplier(settings), configurationSupplier(settings));
     }
 
     public FreeMarkerTask(Settings settings,
                           Supplier<Map<String, Object>> toolsSupplier,
-                          Supplier<List<Datasource>> datasourcesSupplier,
+                          Supplier<List<DataSource>> dataSourcesSupplier,
                           Supplier<Configuration> configurationSupplier) {
         this.settings = requireNonNull(settings);
         this.toolsSupplier = requireNonNull(toolsSupplier);
-        this.datasourcesSupplier = requireNonNull(datasourcesSupplier);
+        this.dataSourcesSupplier = requireNonNull(dataSourcesSupplier);
         this.configurationSupplier = requireNonNull(configurationSupplier);
     }
 
     @Override
     public Integer call() {
         final Template template = template(settings, configurationSupplier);
-        try (Writer writer = settings.getWriter(); Datasources datasources = datasources(settings, datasourcesSupplier)) {
-            final Map<String, Object> dataModel = dataModel(settings, datasources, toolsSupplier);
+        try (Writer writer = settings.getWriter(); DataSources dataSources = dataSources(settings, dataSourcesSupplier)) {
+            final Map<String, Object> dataModel = dataModel(settings, dataSources, toolsSupplier);
             template.process(dataModel, writer);
             return SUCCESS;
         } catch (RuntimeException e) {
@@ -84,16 +84,16 @@ public class FreeMarkerTask implements Callable<Integer> {
         }
     }
 
-    private static Datasources datasources(Settings settings, Supplier<List<Datasource>> datasourcesSupplier) {
-        final List<Datasource> datasources = new ArrayList<>(datasourcesSupplier.get());
+    private static DataSources dataSources(Settings settings, Supplier<List<DataSource>> dataSourcesSupplier) {
+        final List<DataSource> dataSources = new ArrayList<>(dataSourcesSupplier.get());
 
-        // Add optional datasource from STDIN at the start of the list since
+        // Add optional data source from STDIN at the start of the list since
         // this allows easy sequence slicing in FreeMarker.
         if (settings.isReadFromStdin()) {
-            datasources.add(0, DatasourceFactory.create(STDIN, DEFAULT_GROUP, System.in, STDIN, UTF_8));
+            dataSources.add(0, DataSourceFactory.create(STDIN, DEFAULT_GROUP, System.in, STDIN, UTF_8));
         }
 
-        return new Datasources(datasources);
+        return new DataSources(dataSources);
     }
 
     /**
@@ -123,10 +123,10 @@ public class FreeMarkerTask implements Callable<Integer> {
         }
     }
 
-    private static Map<String, Object> dataModel(Settings settings, Datasources datasources, Supplier<Map<String, Object>> tools) {
+    private static Map<String, Object> dataModel(Settings settings, DataSources dataSources, Supplier<Map<String, Object>> tools) {
         final Map<String, Object> dataModel = new HashMap<>();
 
-        dataModel.put(DATASOURCES, datasources);
+        dataModel.put(DATASOURCES, dataSources);
 
         if (settings.isEnvironmentExposed()) {
             // add all system & user-supplied properties as top-level entries
diff --git a/freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/PicocliTest.java b/freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/PicocliTest.java
index 95662f0..2c54c44 100644
--- a/freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/PicocliTest.java
+++ b/freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/PicocliTest.java
@@ -34,7 +34,7 @@ public class PicocliTest {
     @Test
     public void testSinglePositionalParameter() {
         assertEquals(ANY_FILE_URI, parse("-t", TEMPLATE, ANY_FILE_URI).sources.get(0));
-        assertNull(ANY_FILE, parse("-t", TEMPLATE, ANY_FILE_URI).datasources);
+        assertNull(ANY_FILE, parse("-t", TEMPLATE, ANY_FILE_URI).dataSources);
     }
 
     @Test
@@ -52,17 +52,17 @@ public class PicocliTest {
     @Test
     public void testSingleNamedDatasource() {
         assertEquals(ANY_FILE, parse("-t", TEMPLATE, ANY_FILE).sources.get(0));
-        assertEquals(ANY_FILE, parse("-t", TEMPLATE, "-d", ANY_FILE).datasources.get(0));
-        assertEquals(ANY_FILE, parse("-t", TEMPLATE, "--datasource", ANY_FILE).datasources.get(0));
-        assertEquals(ANY_FILE_URI, parse("-t", TEMPLATE, "--datasource", ANY_FILE_URI).datasources.get(0));
+        assertEquals(ANY_FILE, parse("-t", TEMPLATE, "-d", ANY_FILE).dataSources.get(0));
+        assertEquals(ANY_FILE, parse("-t", TEMPLATE, "--data-source", ANY_FILE).dataSources.get(0));
+        assertEquals(ANY_FILE_URI, parse("-t", TEMPLATE, "--data-source", ANY_FILE_URI).dataSources.get(0));
     }
 
     @Test
     public void testMultipleNamedDatasource() {
-        final Main main = parse("-t", TEMPLATE, "-d", ANY_FILE, "--datasource", OTHER_FILE_URI);
+        final Main main = parse("-t", TEMPLATE, "-d", ANY_FILE, "--data-source", OTHER_FILE_URI);
 
-        assertEquals(ANY_FILE, main.datasources.get(0));
-        assertEquals(OTHER_FILE_URI, main.datasources.get(1));
+        assertEquals(ANY_FILE, main.dataSources.get(0));
+        assertEquals(OTHER_FILE_URI, main.dataSources.get(1));
         assertNull(main.sources);
     }
 
diff --git a/freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/config/SettingsTest.java b/freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/config/SettingsTest.java
index 655fdf6..3c71276 100644
--- a/freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/config/SettingsTest.java
+++ b/freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/config/SettingsTest.java
@@ -56,7 +56,7 @@ public class SettingsTest {
         assertEquals(ANY_OUTPUT_ENCODING, settings.getOutputEncoding().name());
         assertEquals(ANY_OUTPUT_FILE, settings.getOutputFile().getName());
         assertEquals(ANY_TEMPLATE_NAME, settings.getTemplateName());
-        assertNotNull(settings.getDatasources());
+        assertNotNull(settings.getDataSources());
         assertNotNull(settings.getParameters());
         assertNotNull(settings.getSytemProperties());
         assertTrue(settings.isReadFromStdin());
@@ -78,7 +78,7 @@ public class SettingsTest {
                 .setOutputEncoding(ANY_OUTPUT_ENCODING)
                 .setOutputFile(ANY_OUTPUT_FILE)
                 .setParameters(ANY_USER_PARAMETERS)
-                .setDatasources(ANY_SOURCES)
+                .setDataSources(ANY_SOURCES)
                 .setSystemProperties(ANY_SYSTEM_PROPERTIES)
                 .setTemplateName(ANY_TEMPLATE_NAME)
                 .setWriter(new StringWriter())
diff --git a/freemarker-generator-cli/src/test/templates/echo.ftl b/freemarker-generator-cli/src/test/templates/echo.ftl
index bbd148f..b7c7b88 100644
--- a/freemarker-generator-cli/src/test/templates/echo.ftl
+++ b/freemarker-generator-cli/src/test/templates/echo.ftl
@@ -15,8 +15,8 @@
   specific language governing permissions and limitations
   under the License.
 -->
-<#list Datasources.list as datasource>
-${datasource.name}, ${datasource.location}
+<#list DataSources.list as dataSource>
+${dataSource.name}, ${dataSource.location}
 =============================================================================
-${datasource.text}
+${dataSource.text}
 </#list>
\ No newline at end of file
diff --git a/freemarker-generator-cli/src/test/templates/tools/csv.ftl b/freemarker-generator-cli/src/test/templates/tools/csv.ftl
index d069b57..f34cb6a 100644
--- a/freemarker-generator-cli/src/test/templates/tools/csv.ftl
+++ b/freemarker-generator-cli/src/test/templates/tools/csv.ftl
@@ -15,7 +15,7 @@
   specific language governing permissions and limitations
   under the License.
 -->
-<#assign records = CSVTool.parse(Datasources.get(0), CSVFormat.DEFAULT.withHeader()).records>
+<#assign records = CSVTool.parse(DataSources.get(0), CSVFormat.DEFAULT.withHeader()).records>
 
 CSVTool.toMap(name)
 =============================================================================
diff --git a/freemarker-generator-cli/templates/accesslog/combined-access.ftl b/freemarker-generator-cli/templates/accesslog/combined-access.ftl
index 817ec59..ea92b68 100644
--- a/freemarker-generator-cli/templates/accesslog/combined-access.ftl
+++ b/freemarker-generator-cli/templates/accesslog/combined-access.ftl
@@ -16,8 +16,8 @@
   under the License.
 -->
 <#assign grok = GrokTool.compile("%{COMBINEDAPACHELOG}")>
-<#assign datasource = Datasources.get(0)>
-<#assign lines = datasource.getLineIterator()>
+<#assign dataSource = DataSources.get(0)>
+<#assign lines = dataSource.getLineIterator()>
 
 <#compress>
     TIMESTAMP;VERB;REQUEST;HTTPVERSION
diff --git a/freemarker-generator-cli/templates/cat.ftl b/freemarker-generator-cli/templates/cat.ftl
index a42b02b..a878261 100644
--- a/freemarker-generator-cli/templates/cat.ftl
+++ b/freemarker-generator-cli/templates/cat.ftl
@@ -15,8 +15,8 @@
   specific language governing permissions and limitations
   under the License.
 -->
-<#list Datasources.list as datasource>
-<#list datasource.lineIterator as line>
+<#list DataSources.list as dataSource>
+<#list dataSource.lineIterator as line>
 ${line}
 </#list>
 </#list>
diff --git a/freemarker-generator-cli/templates/csv/csv/gatling-user-credentials.ftl b/freemarker-generator-cli/templates/csv/csv/gatling-user-credentials.ftl
index 19bb9b9..6186b62 100644
--- a/freemarker-generator-cli/templates/csv/csv/gatling-user-credentials.ftl
+++ b/freemarker-generator-cli/templates/csv/csv/gatling-user-credentials.ftl
@@ -15,9 +15,9 @@
   specific language governing permissions and limitations
   under the License.
 -->
-<#assign datasource = Datasources.get(0)>
+<#assign dataSource = DataSources.get(0)>
 <#assign cvsFormat = CSVTool.formats["DEFAULT"].withDelimiter(';')>
-<#assign csvParser = CSVTool.parse(datasource, cvsFormat)>
+<#assign csvParser = CSVTool.parse(dataSource, cvsFormat)>
 <#assign csvRecords = csvParser.records>
 
 <#compress>
diff --git a/freemarker-generator-cli/templates/csv/fo/transactions.ftl b/freemarker-generator-cli/templates/csv/fo/transactions.ftl
index ff9c009..48a6416 100644
--- a/freemarker-generator-cli/templates/csv/fo/transactions.ftl
+++ b/freemarker-generator-cli/templates/csv/fo/transactions.ftl
@@ -15,10 +15,10 @@
   specific language governing permissions and limitations
   under the License.
 -->
-<#assign datasource = Datasources.get(0)>
-<#assign name = datasource.name>
+<#assign dataSource = DataSources.get(0)>
+<#assign name = dataSource.name>
 <#assign cvsFormat = CSVTool.formats.DEFAULT.withDelimiter('\t').withHeader()>
-<#assign csvParser = CSVTool.parse(datasource, cvsFormat)>
+<#assign csvParser = CSVTool.parse(dataSource, cvsFormat)>
 <#assign csvHeaders = csvParser.getHeaderMap()?keys>
 <#assign csvRecords = csvParser.records>
 <#--------------------------------------------------------------------------->
diff --git a/freemarker-generator-cli/templates/csv/fo/transform.ftl b/freemarker-generator-cli/templates/csv/fo/transform.ftl
index d20f625..7ce74c8 100644
--- a/freemarker-generator-cli/templates/csv/fo/transform.ftl
+++ b/freemarker-generator-cli/templates/csv/fo/transform.ftl
@@ -17,7 +17,7 @@
 -->
 <#assign csvFormatName = SystemTool.parameters["csv.format"]!"DEFAULT">
 <#assign cvsFormat = CSVTool.formats[csvFormatName].withHeader()>
-<#assign csvParser = CSVTool.parse(Datasources.get(0), cvsFormat)>
+<#assign csvParser = CSVTool.parse(DataSources.get(0), cvsFormat)>
 <#assign csvHeaders = csvParser.getHeaderMap()?keys>
 <#assign csvRecords = csvParser.records>
 <#--------------------------------------------------------------------------->
diff --git a/freemarker-generator-cli/templates/csv/html/transactions.ftl b/freemarker-generator-cli/templates/csv/html/transactions.ftl
index 9fae075..d9b32ca 100644
--- a/freemarker-generator-cli/templates/csv/html/transactions.ftl
+++ b/freemarker-generator-cli/templates/csv/html/transactions.ftl
@@ -15,10 +15,10 @@
   specific language governing permissions and limitations
   under the License.
 -->
-<#assign datasource = Datasources.get(0)>
-<#assign name = datasource.name>
+<#assign dataSource = DataSources.get(0)>
+<#assign name = dataSource.name>
 <#assign cvsFormat = CSVTool.formats["DEFAULT"].withDelimiter('\t').withHeader()>
-<#assign csvParser = CSVTool.parse(datasource, cvsFormat)>
+<#assign csvParser = CSVTool.parse(dataSource, cvsFormat)>
 <#assign csvHeaders = csvParser.getHeaderMap()?keys>
 <#assign csvRecords = csvParser.records>
 <#--------------------------------------------------------------------------->
diff --git a/freemarker-generator-cli/templates/csv/html/transform.ftl b/freemarker-generator-cli/templates/csv/html/transform.ftl
index 5985857..65eb4f1 100644
--- a/freemarker-generator-cli/templates/csv/html/transform.ftl
+++ b/freemarker-generator-cli/templates/csv/html/transform.ftl
@@ -15,10 +15,10 @@
   specific language governing permissions and limitations
   under the License.
 -->
-<#assign datasource = Datasources.get(0)>
-<#assign name = datasource.name>
+<#assign dataSource = DataSources.get(0)>
+<#assign name = dataSource.name>
 <#assign cvsFormat = CSVTool.formats["DEFAULT"].withHeader()>
-<#assign csvParser = CSVTool.parse(datasource, cvsFormat)>
+<#assign csvParser = CSVTool.parse(dataSource, cvsFormat)>
 <#assign csvHeaders = csvParser.getHeaderNames()>
 <#--------------------------------------------------------------------------->
 <!DOCTYPE html>
diff --git a/freemarker-generator-cli/templates/csv/md/filter.ftl b/freemarker-generator-cli/templates/csv/md/filter.ftl
index 92a0304..57f990d 100644
--- a/freemarker-generator-cli/templates/csv/md/filter.ftl
+++ b/freemarker-generator-cli/templates/csv/md/filter.ftl
@@ -15,14 +15,14 @@
   specific language governing permissions and limitations
   under the License.
 -->
-<#assign datasource = Datasources.get(0)>
-<#assign parser = parser(datasource)>
+<#assign dataSource = DataSources.get(0)>
+<#assign parser = parser(dataSource)>
 <#assign headers = parser.getHeaderNames()>
 <#assign column = SystemTool.getParameter("column")>
 <#assign values = SystemTool.getParameter("values")?split(",")>
 
 <#compress>
-    <@writePageHeader datasource/>
+    <@writePageHeader dataSource/>
     <#-- Process each line without materializing the whole file in memory -->
     <#list parser.iterator() as record>
         <#if filter(record)>
@@ -31,18 +31,18 @@
     </#list>
 </#compress>
 
-<#function parser datasource>
+<#function parser dataSource>
     <#assign format = CSVTool.formats[SystemTool.getParameter("format", "DEFAULT")]>
     <#assign delimiter = CSVTool.toDelimiter(SystemTool.getParameter("delimiter", format.getDelimiter()))>
-    <#return CSVTool.parse(datasource, format.withFirstRecordAsHeader().withDelimiter(delimiter))>
+    <#return CSVTool.parse(dataSource, format.withFirstRecordAsHeader().withDelimiter(delimiter))>
 </#function>
 
 <#function filter record>
     <#return values?seq_contains(record.get(column))>
 </#function>
 
-<#macro writePageHeader datasource>
-    # ${datasource.name}
+<#macro writePageHeader dataSource>
+    # ${dataSource.name}
 </#macro>
 
 <#macro writeCsvRecord headers record>
diff --git a/freemarker-generator-cli/templates/csv/md/transform.ftl b/freemarker-generator-cli/templates/csv/md/transform.ftl
index 994e3f3..fca0bc5 100644
--- a/freemarker-generator-cli/templates/csv/md/transform.ftl
+++ b/freemarker-generator-cli/templates/csv/md/transform.ftl
@@ -16,7 +16,7 @@
   under the License.
 -->
 <#assign cvsFormat = CSVTool.formats["DEFAULT"].withHeader()>
-<#assign csvParser = CSVTool.parse(Datasources.get(0), cvsFormat)>
+<#assign csvParser = CSVTool.parse(DataSources.get(0), cvsFormat)>
 <#assign csvHeaders = csvParser.getHeaderMap()?keys>
 <#assign csvRecords = csvParser.records>
 <#--------------------------------------------------------------------------->
diff --git a/freemarker-generator-cli/templates/csv/shell/curl.ftl b/freemarker-generator-cli/templates/csv/shell/curl.ftl
index d7c75c9..b8fa109 100644
--- a/freemarker-generator-cli/templates/csv/shell/curl.ftl
+++ b/freemarker-generator-cli/templates/csv/shell/curl.ftl
@@ -16,7 +16,7 @@
   under the License.
 -->
 <#assign cvsFormat = CSVTool.formats["DEFAULT"].withHeader()>
-<#assign csvParser = CSVTool.parse(Datasources.get(0), cvsFormat)>
+<#assign csvParser = CSVTool.parse(DataSources.get(0), cvsFormat)>
 <#assign records = csvParser.records>
 <#assign csvMap = CSVTool.toMap(records, "disposer")>
 <#--------------------------------------------------------------------------->
diff --git a/freemarker-generator-cli/templates/csv/transform.ftl b/freemarker-generator-cli/templates/csv/transform.ftl
index e13c9b5..b4e21ef 100644
--- a/freemarker-generator-cli/templates/csv/transform.ftl
+++ b/freemarker-generator-cli/templates/csv/transform.ftl
@@ -15,7 +15,7 @@
   specific language governing permissions and limitations
   under the License.
 -->
-<#assign csvParser = createCsvParser(Datasources.get(0))>
+<#assign csvParser = createCsvParser(DataSources.get(0))>
 <#assign csvPrinter = createCsvPrinter()>
 <#-- Print each line without materializing the CSV in memory -->
 <#compress>
@@ -24,11 +24,11 @@
     </#list>
 </#compress>
 
-<#function createCsvParser datasource>
+<#function createCsvParser dataSource>
     <#assign initialCvsInFormat = CSVTool.formats[SystemTool.getParameter("csv.in.format", "DEFAULT")]>
     <#assign csvInDelimiter = CSVTool.toDelimiter(SystemTool.getParameter("csv.in.delimiter", initialCvsInFormat.getDelimiter()))>
     <#assign cvsInFormat = initialCvsInFormat.withDelimiter(csvInDelimiter)>
-    <#return CSVTool.parse(datasource, cvsInFormat)>
+    <#return CSVTool.parse(dataSource, cvsInFormat)>
 </#function>
 
 <#function createCsvPrinter>
diff --git a/freemarker-generator-cli/templates/demo.ftl b/freemarker-generator-cli/templates/demo.ftl
index f981a9e..06359f4 100644
--- a/freemarker-generator-cli/templates/demo.ftl
+++ b/freemarker-generator-cli/templates/demo.ftl
@@ -45,11 +45,11 @@ java.math.RoundingMode#UP: ${FreeMarkerTool.enums["java.math.RoundingMode"].UP}
 - java.math.RoundingMode.${roundingMode}<#lt>
 </#list>
 
-6) Display list of datasources
+6) Display list of data sources
 ---------------------------------------------------------------------------
-List all datasources:
-<#list Datasources.list as datasource>
-- Document: name=${datasource.name} location=${datasource.location} length=${datasource.length} encoding=${datasource.encoding!""}
+List all data sources:
+<#list DataSources.list as dataSource>
+- Document: name=${dataSource.name} location=${dataSource.location} length=${dataSource.length} encoding=${dataSource.encoding!""}
 </#list>
 
 7) SystemTool
@@ -83,25 +83,25 @@ user.home    : ${SystemTool.systemProperties["user.home"]!""}
 - ${name} ==> ${value}<#lt>
 </#list>
 
-11) Access Datasources
+11) Access DataSources
 ---------------------------------------------------------------------------
 Get the number of documents:
-- ${Datasources.size()}
-<#if !Datasources.isEmpty()>
+- ${DataSources.size()}
+<#if !DataSources.isEmpty()>
 Get the first document
-- ${Datasources.get(0)!"NA"}
+- ${DataSources.get(0)!"NA"}
 </#if>
 List all files containing "README" in the name
-<#list Datasources.find("*README*") as datasource>
-- ${datasource.name}
+<#list DataSources.find("*README*") as dataSource>
+- ${dataSource.name}
 </#list>
 List all files having "md" extension
-<#list Datasources.find("*.md") as datasource>
-- ${datasource.name}
+<#list DataSources.find("*.md") as dataSource>
+- ${dataSource.name}
 </#list>
 Get all documents
-<#list Datasources.list as datasource>
-- ${datasource.name} => ${datasource.location}
+<#list DataSources.list as dataSource>
+- ${dataSource.name} => ${dataSource.location}
 </#list>
 
 12) FreeMarker CLI Tools
diff --git a/freemarker-generator-cli/templates/excel/csv/custom.ftl b/freemarker-generator-cli/templates/excel/csv/custom.ftl
index 6d6f90a..542d92b 100644
--- a/freemarker-generator-cli/templates/excel/csv/custom.ftl
+++ b/freemarker-generator-cli/templates/excel/csv/custom.ftl
@@ -17,8 +17,8 @@
 -->
 <#assign format = SystemTool.parameters["csv.format"]!"DEFAULT">
 <#assign salt = SystemTool.parameters["salt"]!"salt">
-<#-- Parse the first datasource & sheet of the Excel document -->
-<#assign workbook = ExcelTool.parse(Datasources.get(0))>
+<#-- Parse the first data source & sheet of the Excel document -->
+<#assign workbook = ExcelTool.parse(DataSources.get(0))>
 <#assign sheet = ExcelTool.getSheets(workbook)[0]>
 <#assign records = ExcelTool.toTable(sheet)>
 <#-- Setup CSVPrinter  -->
diff --git a/freemarker-generator-cli/templates/excel/csv/transform.ftl b/freemarker-generator-cli/templates/excel/csv/transform.ftl
index 4ddc529..d60421c 100644
--- a/freemarker-generator-cli/templates/excel/csv/transform.ftl
+++ b/freemarker-generator-cli/templates/excel/csv/transform.ftl
@@ -16,8 +16,8 @@
   under the License.
 -->
 <#assign format = SystemTool.parameters["csv.format"]!"DEFAULT">
-<#-- Parse the first datasource & sheet of the Excel document -->
-<#assign workbook = ExcelTool.parse(Datasources.get(0))>
+<#-- Parse the first data source & sheet of the Excel document -->
+<#assign workbook = ExcelTool.parse(DataSources.get(0))>
 <#assign sheet = ExcelTool.getSheets(workbook)[0]>
 <#assign records = ExcelTool.toTable(sheet)>
 <#-- Setup CSVPrinter  -->
diff --git a/freemarker-generator-cli/templates/excel/html/transform.ftl b/freemarker-generator-cli/templates/excel/html/transform.ftl
index a261410..68ccc42 100644
--- a/freemarker-generator-cli/templates/excel/html/transform.ftl
+++ b/freemarker-generator-cli/templates/excel/html/transform.ftl
@@ -15,9 +15,9 @@
   specific language governing permissions and limitations
   under the License.
 -->
-<#assign datasource = Datasources.get(0)>
-<#assign name = datasource.name>
-<#assign workbook = ExcelTool.parse(datasource)>
+<#assign dataSource = DataSources.get(0)>
+<#assign name = dataSource.name>
+<#assign workbook = ExcelTool.parse(dataSource)>
 <#assign date = .now?iso_utc>
 <#--------------------------------------------------------------------------->
 <!DOCTYPE html>
diff --git a/freemarker-generator-cli/templates/excel/md/transform.ftl b/freemarker-generator-cli/templates/excel/md/transform.ftl
index 9b3a068..8f84165 100644
--- a/freemarker-generator-cli/templates/excel/md/transform.ftl
+++ b/freemarker-generator-cli/templates/excel/md/transform.ftl
@@ -15,9 +15,9 @@
   specific language governing permissions and limitations
   under the License.
 -->
-<#assign datasource = Datasources.get(0)>
-<#assign name = datasource.name>
-<#assign workbook = ExcelTool.parse(datasource)>
+<#assign dataSource = DataSources.get(0)>
+<#assign name = dataSource.name>
+<#assign workbook = ExcelTool.parse(dataSource)>
 <#assign date = .now?iso_utc>
 
 <#compress>
diff --git a/freemarker-generator-cli/templates/html/csv/dependencies.ftl b/freemarker-generator-cli/templates/html/csv/dependencies.ftl
index b0df23e..8664eae 100644
--- a/freemarker-generator-cli/templates/html/csv/dependencies.ftl
+++ b/freemarker-generator-cli/templates/html/csv/dependencies.ftl
@@ -15,9 +15,9 @@
   specific language governing permissions and limitations
   under the License.
 -->
-<#assign datasource = Datasources.get(0)>
-<#assign name = datasource.name>
-<#assign html = JsoupTool.parse(datasource)>
+<#assign dataSource = DataSources.get(0)>
+<#assign name = dataSource.name>
+<#assign html = JsoupTool.parse(dataSource)>
 
 <#compress>
     <@writeHeader/>
diff --git a/freemarker-generator-cli/templates/info.ftl b/freemarker-generator-cli/templates/info.ftl
index 6b9380b..e25f960 100644
--- a/freemarker-generator-cli/templates/info.ftl
+++ b/freemarker-generator-cli/templates/info.ftl
@@ -39,11 +39,11 @@ FreeMarker CLI Tools
 </#if>
 </#list>
 
-FreeMarker CLI Datasources
+FreeMarker CLI DataSources
 ------------------------------------------------------------------------------
-<#list Datasources.list as datasource>
-[#${datasource?counter}], name=${datasource.name}, group=${datasource.group}, charset=${datasource.charset}, length= ${datasource.length} Bytes
-Location : ${datasource.location}
+<#list DataSources.list as dataSource>
+[#${dataSource?counter}], name=${dataSource.name}, group=${dataSource.group}, charset=${dataSource.charset}, length= ${dataSource.length} Bytes
+Location : ${dataSource.location}
 </#list>
 
 User Supplied Parameters
diff --git a/freemarker-generator-cli/templates/json/csv/swagger-endpoints.ftl b/freemarker-generator-cli/templates/json/csv/swagger-endpoints.ftl
index 61b9f78..7fab37f 100644
--- a/freemarker-generator-cli/templates/json/csv/swagger-endpoints.ftl
+++ b/freemarker-generator-cli/templates/json/csv/swagger-endpoints.ftl
@@ -15,7 +15,7 @@
   specific language governing permissions and limitations
   under the License.
 -->
-<#assign json = JsonPathTool.parse(Datasources.get(0))>
+<#assign json = JsonPathTool.parse(DataSources.get(0))>
 <#assign basePath = json.read("$.basePath")>
 <#assign paths = json.read("$.paths")>
 
diff --git a/freemarker-generator-cli/templates/json/md/github-users.ftl b/freemarker-generator-cli/templates/json/md/github-users.ftl
index 5aecf18..29efbc3 100644
--- a/freemarker-generator-cli/templates/json/md/github-users.ftl
+++ b/freemarker-generator-cli/templates/json/md/github-users.ftl
@@ -15,7 +15,7 @@ KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License.
 -->
-<#assign json = JsonPathTool.parse(Datasources.get(0))>
+<#assign json = JsonPathTool.parse(DataSources.get(0))>
 <#assign users = json.read("$[*]")>
 <#--------------------------------------------------------------------------->
 # GitHub Users
diff --git a/freemarker-generator-cli/templates/properties/csv/locker-test-users.ftl b/freemarker-generator-cli/templates/properties/csv/locker-test-users.ftl
index 237b71f..52ac65f 100644
--- a/freemarker-generator-cli/templates/properties/csv/locker-test-users.ftl
+++ b/freemarker-generator-cli/templates/properties/csv/locker-test-users.ftl
@@ -17,8 +17,8 @@
 -->
 <#compress>
     TENANT,SITE,USER_ID,DISPOSER_ID,PASSWORD,SMS_OTP,NAME,DESCRIPTION
-    <#list Datasources.list as datasource>
-        <#assign properties = PropertiesTool.parse(datasource)>
+    <#list DataSources.list as dataSource>
+        <#assign properties = PropertiesTool.parse(dataSource)>
         <#assign environments = properties["ENVIRONMENTS"]!"">
         <#assign tenant = extractTenant(environments)>
         <#assign site = extractSite(environments)>
diff --git a/freemarker-generator-cli/templates/tsv/fo/transactions.ftl b/freemarker-generator-cli/templates/tsv/fo/transactions.ftl
index 99b7a1c..e1840d1 100644
--- a/freemarker-generator-cli/templates/tsv/fo/transactions.ftl
+++ b/freemarker-generator-cli/templates/tsv/fo/transactions.ftl
@@ -16,7 +16,7 @@
   under the License.
 -->
 <#assign cvsFormat = CSVTool.formats["TDF"].withHeader()>
-<#assign csvParser = CSVTool.parse(Datasources.get(0), cvsFormat)>
+<#assign csvParser = CSVTool.parse(DataSources.get(0), cvsFormat)>
 <#assign csvHeaders = csvParser.getHeaderMap()?keys>
 <#assign csvRecords = csvParser.records>
 <#--------------------------------------------------------------------------->
diff --git a/freemarker-generator-cli/templates/xml/txt/recipients.ftl b/freemarker-generator-cli/templates/xml/txt/recipients.ftl
index 87a9f57..43b51b4 100644
--- a/freemarker-generator-cli/templates/xml/txt/recipients.ftl
+++ b/freemarker-generator-cli/templates/xml/txt/recipients.ftl
@@ -15,7 +15,7 @@
   specific language governing permissions and limitations
   under the License.
 -->
-<#assign xml = XmlTool.parse(Datasources.get(0))>
+<#assign xml = XmlTool.parse(DataSources.get(0))>
 <#list xml.recipients.person as recipient>
 To: ${recipient.name}
 ${recipient.address}
diff --git a/freemarker-generator-cli/templates/yaml/txt/transform.ftl b/freemarker-generator-cli/templates/yaml/txt/transform.ftl
index 07160cf..fdba743 100644
--- a/freemarker-generator-cli/templates/yaml/txt/transform.ftl
+++ b/freemarker-generator-cli/templates/yaml/txt/transform.ftl
@@ -15,7 +15,7 @@
   specific language governing permissions and limitations
   under the License.
 -->
-<#assign map = YamlTool.parse(Datasources.get(0))>
+<#assign map = YamlTool.parse(DataSources.get(0))>
 <#--------------------------------------------------------------------------->
 <#compress>
 <@print map 1/>
diff --git a/freemarker-generator-tools/README.md b/freemarker-generator-tools/README.md
index 6a1e74e..e624eb2 100644
--- a/freemarker-generator-tools/README.md
+++ b/freemarker-generator-tools/README.md
@@ -7,9 +7,9 @@ Design Considerations
 ------------------------------------------------------------------------------
 
 * A tool shall expose a default constructor and/or a constructor taking a `Map<String, Object> settings`
-* A tool processing datasources shall provide a `parse(Datasource)` method
+* A tool processing data sources shall provide a `parse(Datasource)` method
 * A tool shall be stateless, multi-thread safe and potentially long-lived to enable usage in a different context
-* A tool shall support arbitrary large source datasources and process them efficiently
+* A tool shall support arbitrary large source data sources and process them efficiently
 * A tool shall expose a `toString()` method for documentation purposes
 
 Available Tools
diff --git a/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/commonscsv/CommonsCSVTool.java b/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/commonscsv/CommonsCSVTool.java
index 56e4bb9..31c5d7c 100644
--- a/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/commonscsv/CommonsCSVTool.java
+++ b/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/commonscsv/CommonsCSVTool.java
@@ -21,7 +21,7 @@ import org.apache.commons.csv.CSVParser;
 import org.apache.commons.csv.CSVPrinter;
 import org.apache.commons.csv.CSVRecord;
 import org.apache.commons.io.input.BOMInputStream;
-import org.apache.freemarker.generator.base.datasource.Datasource;
+import org.apache.freemarker.generator.base.datasource.DataSource;
 import org.apache.freemarker.generator.base.util.StringUtils;
 
 import java.io.IOException;
@@ -44,23 +44,23 @@ import static org.apache.commons.io.IOUtils.toInputStream;
 
 public class CommonsCSVTool {
 
-    public CSVParser parse(Datasource datasource) {
-        return parse(datasource, CSVFormat.DEFAULT);
+    public CSVParser parse(DataSource dataSource) {
+        return parse(dataSource, CSVFormat.DEFAULT);
     }
 
-    public CSVParser parse(Datasource datasource, CSVFormat format) {
-        if (datasource == null) {
-            throw new IllegalArgumentException("No datasource was provided");
+    public CSVParser parse(DataSource dataSource, CSVFormat format) {
+        if (dataSource == null) {
+            throw new IllegalArgumentException("No data source was provided");
         }
 
         try {
             // As stated in the documentation : "If you do not read all records from the given {@code reader},
             // you should call {@link #close()} on the parser, unless you close the {@code reader}."
-            // The underlying input stream is closed by the datasource by its "CloseableReaper".
-            final InputStream is = new BOMInputStream(datasource.getInputStream(), false);
-            return parse(is, datasource.getCharset(), format);
+            // The underlying input stream is closed by the data source by its "CloseableReaper".
+            final InputStream is = new BOMInputStream(dataSource.getInputStream(), false);
+            return parse(is, dataSource.getCharset(), format);
         } catch (IOException e) {
-            throw new RuntimeException("Failed to parse CSV: " + datasource, e);
+            throw new RuntimeException("Failed to parse CSV: " + dataSource, e);
         }
     }
 
diff --git a/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/excel/ExcelTool.java b/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/excel/ExcelTool.java
index 8f2d635..f03df80 100644
--- a/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/excel/ExcelTool.java
+++ b/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/excel/ExcelTool.java
@@ -16,7 +16,7 @@
  */
 package org.apache.freemarker.generator.tools.excel;
 
-import org.apache.freemarker.generator.base.datasource.Datasource;
+import org.apache.freemarker.generator.base.datasource.DataSource;
 import org.apache.poi.ss.usermodel.Cell;
 import org.apache.poi.ss.usermodel.CellType;
 import org.apache.poi.ss.usermodel.DataFormatter;
@@ -47,13 +47,13 @@ public class ExcelTool {
     private static final SimpleDateFormat TIME_DATE_FORMAT = new SimpleDateFormat("HH:mm:ss");
     private static final SimpleDateFormat YEAR_TIME_FORMAT = new SimpleDateFormat("yyyy");
 
-    public Workbook parse(Datasource datasource) {
-        try (InputStream is = datasource.getUnsafeInputStream()) {
+    public Workbook parse(DataSource dataSource) {
+        try (InputStream is = dataSource.getUnsafeInputStream()) {
             final Workbook workbook = WorkbookFactory.create(is);
-            // make sure that the workbook is closed together with the datasource
-            return datasource.addClosable(workbook);
+            // make sure that the workbook is closed together with the data source
+            return dataSource.addClosable(workbook);
         } catch (IOException e) {
-            throw new RuntimeException("Failed to parse Ecxel datasource: " + datasource, e);
+            throw new RuntimeException("Failed to parse Ecxel data source: " + dataSource, e);
         }
     }
 
diff --git a/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/jsonpath/JsonPathTool.java b/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/jsonpath/JsonPathTool.java
index 1859428..8bd38e7 100644
--- a/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/jsonpath/JsonPathTool.java
+++ b/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/jsonpath/JsonPathTool.java
@@ -20,15 +20,15 @@ import com.jayway.jsonpath.Configuration;
 import com.jayway.jsonpath.DocumentContext;
 import com.jayway.jsonpath.JsonPath;
 import com.jayway.jsonpath.Option;
-import org.apache.freemarker.generator.base.datasource.Datasource;
+import org.apache.freemarker.generator.base.datasource.DataSource;
 
 import java.io.IOException;
 import java.io.InputStream;
 
 public class JsonPathTool {
 
-    public DocumentContext parse(Datasource datasource) throws IOException {
-        try (InputStream is = datasource.getUnsafeInputStream()) {
+    public DocumentContext parse(DataSource dataSource) throws IOException {
+        try (InputStream is = dataSource.getUnsafeInputStream()) {
             return JsonPath.using(configuration()).parse(is);
         }
     }
diff --git a/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/jsoup/JsoupTool.java b/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/jsoup/JsoupTool.java
index 0e18ad8..6a9d23e 100644
--- a/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/jsoup/JsoupTool.java
+++ b/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/jsoup/JsoupTool.java
@@ -16,7 +16,7 @@
  */
 package org.apache.freemarker.generator.tools.jsoup;
 
-import org.apache.freemarker.generator.base.datasource.Datasource;
+import org.apache.freemarker.generator.base.datasource.DataSource;
 import org.jsoup.Jsoup;
 
 import java.io.IOException;
@@ -24,11 +24,11 @@ import java.io.InputStream;
 
 public class JsoupTool {
 
-    public org.jsoup.nodes.Document parse(Datasource datasource) {
-        try (InputStream is = datasource.getUnsafeInputStream()) {
-            return Jsoup.parse(is, datasource.getCharset().name(), "");
+    public org.jsoup.nodes.Document parse(DataSource dataSource) {
+        try (InputStream is = dataSource.getUnsafeInputStream()) {
+            return Jsoup.parse(is, dataSource.getCharset().name(), "");
         } catch (IOException e) {
-            throw new RuntimeException("Failed to parse HTML datasource: " + datasource, e);
+            throw new RuntimeException("Failed to parse HTML data source: " + dataSource, e);
         }
     }
 
diff --git a/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/properties/PropertiesTool.java b/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/properties/PropertiesTool.java
index 09d2549..6656e2d 100644
--- a/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/properties/PropertiesTool.java
+++ b/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/properties/PropertiesTool.java
@@ -16,7 +16,7 @@
  */
 package org.apache.freemarker.generator.tools.properties;
 
-import org.apache.freemarker.generator.base.datasource.Datasource;
+import org.apache.freemarker.generator.base.datasource.DataSource;
 import org.apache.freemarker.generator.base.util.PropertiesFactory;
 
 import java.io.IOException;
@@ -25,11 +25,11 @@ import java.util.Properties;
 
 public class PropertiesTool {
 
-    public Properties parse(Datasource datasource) {
-        try (InputStream is = datasource.getUnsafeInputStream()) {
+    public Properties parse(DataSource dataSource) {
+        try (InputStream is = dataSource.getUnsafeInputStream()) {
             return PropertiesFactory.create(is);
         } catch (IOException e) {
-            throw new RuntimeException("Failed to parse properties: " + datasource, e);
+            throw new RuntimeException("Failed to parse properties: " + dataSource, e);
         }
     }
 
diff --git a/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/snakeyaml/SnakeYamlTool.java b/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/snakeyaml/SnakeYamlTool.java
index 1ee005d..6d1b56a 100644
--- a/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/snakeyaml/SnakeYamlTool.java
+++ b/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/snakeyaml/SnakeYamlTool.java
@@ -16,7 +16,7 @@
  */
 package org.apache.freemarker.generator.tools.snakeyaml;
 
-import org.apache.freemarker.generator.base.datasource.Datasource;
+import org.apache.freemarker.generator.base.datasource.DataSource;
 import org.yaml.snakeyaml.Yaml;
 
 import java.io.IOException;
@@ -25,11 +25,11 @@ import java.util.Map;
 
 public class SnakeYamlTool {
 
-    public Map<String, Object> parse(Datasource datasource) {
-        try (InputStream is = datasource.getUnsafeInputStream()) {
+    public Map<String, Object> parse(DataSource dataSource) {
+        try (InputStream is = dataSource.getUnsafeInputStream()) {
             return new Yaml().load(is);
         } catch (IOException e) {
-            throw new RuntimeException("Failed to load YAML datasource: " + datasource, e);
+            throw new RuntimeException("Failed to load YAML data source: " + dataSource, e);
         }
     }
 
diff --git a/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/xml/XmlTool.java b/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/xml/XmlTool.java
index a80b579..ddacf1c 100644
--- a/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/xml/XmlTool.java
+++ b/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/xml/XmlTool.java
@@ -17,7 +17,7 @@
 package org.apache.freemarker.generator.tools.xml;
 
 import freemarker.ext.dom.NodeModel;
-import org.apache.freemarker.generator.base.datasource.Datasource;
+import org.apache.freemarker.generator.base.datasource.DataSource;
 import org.xml.sax.InputSource;
 
 import java.io.InputStream;
@@ -25,11 +25,11 @@ import java.io.StringReader;
 
 public class XmlTool {
 
-    public NodeModel parse(Datasource datasource) {
-        try (InputStream is = datasource.getUnsafeInputStream()) {
+    public NodeModel parse(DataSource dataSource) {
+        try (InputStream is = dataSource.getUnsafeInputStream()) {
             return NodeModel.parse(new InputSource(is));
         } catch (Exception e) {
-            throw new RuntimeException("Failed to parse XML datasource: " + datasource, e);
+            throw new RuntimeException("Failed to parse XML data source: " + dataSource, e);
         }
     }
 
diff --git a/freemarker-generator-tools/src/test/java/org/apache/freemarker/generator/tools/commonscsv/CommonsCSVToolTest.java b/freemarker-generator-tools/src/test/java/org/apache/freemarker/generator/tools/commonscsv/CommonsCSVToolTest.java
index d60a070..368f54c 100644
--- a/freemarker-generator-tools/src/test/java/org/apache/freemarker/generator/tools/commonscsv/CommonsCSVToolTest.java
+++ b/freemarker-generator-tools/src/test/java/org/apache/freemarker/generator/tools/commonscsv/CommonsCSVToolTest.java
@@ -20,8 +20,8 @@ import org.apache.commons.csv.CSVFormat;
 import org.apache.commons.csv.CSVParser;
 import org.apache.commons.csv.CSVPrinter;
 import org.apache.commons.csv.CSVRecord;
-import org.apache.freemarker.generator.base.datasource.Datasource;
-import org.apache.freemarker.generator.base.datasource.DatasourceFactory;
+import org.apache.freemarker.generator.base.datasource.DataSource;
+import org.apache.freemarker.generator.base.datasource.DataSourceFactory;
 import org.junit.Test;
 
 import java.io.File;
@@ -48,7 +48,7 @@ public class CommonsCSVToolTest {
 
     @Test
     public void shallParseCvsFile() throws IOException {
-        try (CSVParser parser = commonsCsvTool().parse(datasource(), DEFAULT.withHeader())) {
+        try (CSVParser parser = commonsCsvTool().parse(dataSource(), DEFAULT.withHeader())) {
             assertNotNull(parser);
             assertEquals(32, parser.getHeaderMap().size());
             assertEquals(22, parser.getRecords().size());
@@ -57,7 +57,7 @@ public class CommonsCSVToolTest {
 
     @Test
     public void shallParseCvsString() throws IOException {
-        try (CSVParser parser = commonsCsvTool().parse(datasource().getText(), DEFAULT.withHeader())) {
+        try (CSVParser parser = commonsCsvTool().parse(dataSource().getText(), DEFAULT.withHeader())) {
             assertNotNull(parser);
             assertEquals(32, parser.getHeaderMap().size());
             assertEquals(22, parser.getRecords().size());
@@ -69,7 +69,7 @@ public class CommonsCSVToolTest {
         final CommonsCSVTool commonsCsvTool = commonsCsvTool();
         final List<String> keys;
 
-        try (CSVParser parser = commonsCsvTool.parse(datasource(), DEFAULT.withHeader())) {
+        try (CSVParser parser = commonsCsvTool.parse(dataSource(), DEFAULT.withHeader())) {
             keys = commonsCsvTool.toKeys(parser.getRecords(), CONTRACT_ID);
         }
 
@@ -89,7 +89,7 @@ public class CommonsCSVToolTest {
         final CommonsCSVTool commonsCsvTool = commonsCsvTool();
         final Map<String, CSVRecord> map;
 
-        try (CSVParser parser = commonsCsvTool.parse(datasource(), DEFAULT.withHeader())) {
+        try (CSVParser parser = commonsCsvTool.parse(dataSource(), DEFAULT.withHeader())) {
             map = commonsCsvTool.toMap(parser.getRecords(), CONTRACT_ID);
         }
 
@@ -102,7 +102,7 @@ public class CommonsCSVToolTest {
         final CommonsCSVTool commonsCsvTool = commonsCsvTool();
         final Map<String, List<CSVRecord>> map;
 
-        try (CSVParser parser = commonsCsvTool.parse(datasource(), DEFAULT.withHeader())) {
+        try (CSVParser parser = commonsCsvTool.parse(dataSource(), DEFAULT.withHeader())) {
             map = commonsCsvTool.toMultiMap(parser.getRecords(), CONTRACT_ID);
         }
 
@@ -116,7 +116,7 @@ public class CommonsCSVToolTest {
         final CSVFormat cvsFormat = DEFAULT.withHeader();
         final Writer writer = new StringWriter();
 
-        try (CSVParser parser = commonsCsvTool.parse(datasource(), cvsFormat)) {
+        try (CSVParser parser = commonsCsvTool.parse(dataSource(), cvsFormat)) {
             try (CSVPrinter printer = commonsCsvTool.printer(cvsFormat, writer)) {
                 printer.printRecord(parser.getHeaderMap());
             }
@@ -127,7 +127,7 @@ public class CommonsCSVToolTest {
 
     @Test
     public void shallStripBomFromCsvFile() throws IOException {
-        try (CSVParser parser = commonsCsvTool().parse(datasource(BOM_CSV), EXCEL.withHeader().withDelimiter(';'))) {
+        try (CSVParser parser = commonsCsvTool().parse(dataSource(BOM_CSV), EXCEL.withHeader().withDelimiter(';'))) {
             assertEquals("Text", parser.getHeaderNames().get(0));
         }
     }
@@ -139,12 +139,12 @@ public class CommonsCSVToolTest {
         assertEquals('^', commonsCsvTool().toDelimiter("^"));
     }
 
-    private Datasource datasource() {
-        return datasource(TEST_CSV);
+    private DataSource dataSource() {
+        return dataSource(TEST_CSV);
     }
 
-    private Datasource datasource(File file) {
-        return DatasourceFactory.create(file, UTF_8);
+    private DataSource dataSource(File file) {
+        return DataSourceFactory.create(file, UTF_8);
     }
 
     private CommonsCSVTool commonsCsvTool() {
diff --git a/freemarker-generator-tools/src/test/java/org/apache/freemarker/generator/tools/excel/ExcelToolTest.java b/freemarker-generator-tools/src/test/java/org/apache/freemarker/generator/tools/excel/ExcelToolTest.java
index 1583001..7694a95 100644
--- a/freemarker-generator-tools/src/test/java/org/apache/freemarker/generator/tools/excel/ExcelToolTest.java
+++ b/freemarker-generator-tools/src/test/java/org/apache/freemarker/generator/tools/excel/ExcelToolTest.java
@@ -16,8 +16,8 @@
  */
 package org.apache.freemarker.generator.tools.excel;
 
-import org.apache.freemarker.generator.base.datasource.Datasource;
-import org.apache.freemarker.generator.base.datasource.DatasourceFactory;
+import org.apache.freemarker.generator.base.datasource.DataSource;
+import org.apache.freemarker.generator.base.datasource.DataSourceFactory;
 import org.apache.poi.ss.usermodel.Sheet;
 import org.apache.poi.ss.usermodel.Workbook;
 import org.junit.Test;
@@ -102,14 +102,14 @@ public class ExcelToolTest {
     }
 
     private Workbook workbook(File file) {
-        return excelTool().parse(datasource(file));
+        return excelTool().parse(dataSource(file));
     }
 
     private ExcelTool excelTool() {
         return new ExcelTool();
     }
 
-    private Datasource datasource(File file) {
-        return DatasourceFactory.create(file, UTF_8);
+    private DataSource dataSource(File file) {
+        return DataSourceFactory.create(file, UTF_8);
     }
 }
diff --git a/freemarker-generator-tools/src/test/java/org/apache/freemarker/generator/tools/properties/PropertiesToolTest.java b/freemarker-generator-tools/src/test/java/org/apache/freemarker/generator/tools/properties/PropertiesToolTest.java
index 5a9fc79..388c1a5 100644
--- a/freemarker-generator-tools/src/test/java/org/apache/freemarker/generator/tools/properties/PropertiesToolTest.java
+++ b/freemarker-generator-tools/src/test/java/org/apache/freemarker/generator/tools/properties/PropertiesToolTest.java
@@ -16,8 +16,8 @@
  */
 package org.apache.freemarker.generator.tools.properties;
 
-import org.apache.freemarker.generator.base.datasource.Datasource;
-import org.apache.freemarker.generator.base.datasource.DatasourceFactory;
+import org.apache.freemarker.generator.base.datasource.DataSource;
+import org.apache.freemarker.generator.base.datasource.DataSourceFactory;
 import org.junit.Test;
 
 import static junit.framework.TestCase.assertEquals;
@@ -29,8 +29,8 @@ public class PropertiesToolTest {
 
     @Test
     public void shallParsePropertiesDatasource() {
-        try (Datasource datasource = datasource(ANY_PROPERTIES_STRING)) {
-            assertEquals("bar", propertiesTool().parse(datasource).getProperty("foo"));
+        try (DataSource dataSource = dataSource(ANY_PROPERTIES_STRING)) {
+            assertEquals("bar", propertiesTool().parse(dataSource).getProperty("foo"));
         }
     }
 
@@ -43,7 +43,7 @@ public class PropertiesToolTest {
         return new PropertiesTool();
     }
 
-    private Datasource datasource(String value) {
-        return DatasourceFactory.create("test.properties", ANY_GROUP, value);
+    private DataSource dataSource(String value) {
+        return DataSourceFactory.create("test.properties", ANY_GROUP, value);
     }
 }
diff --git a/freemarker-generator-tools/src/test/java/org/apache/freemarker/generator/tools/snakeyaml/SnakeYamlToolTest.java b/freemarker-generator-tools/src/test/java/org/apache/freemarker/generator/tools/snakeyaml/SnakeYamlToolTest.java
index 90be879..0f3375c 100644
--- a/freemarker-generator-tools/src/test/java/org/apache/freemarker/generator/tools/snakeyaml/SnakeYamlToolTest.java
+++ b/freemarker-generator-tools/src/test/java/org/apache/freemarker/generator/tools/snakeyaml/SnakeYamlToolTest.java
@@ -16,8 +16,8 @@
  */
 package org.apache.freemarker.generator.tools.snakeyaml;
 
-import org.apache.freemarker.generator.base.datasource.Datasource;
-import org.apache.freemarker.generator.base.datasource.DatasourceFactory;
+import org.apache.freemarker.generator.base.datasource.DataSource;
+import org.apache.freemarker.generator.base.datasource.DataSourceFactory;
 import org.junit.Test;
 
 import java.util.List;
@@ -37,8 +37,8 @@ public class SnakeYamlToolTest {
 
     @Test
     public void shallParseYamlDatasource() {
-        try (Datasource datasource = datasource(ANY_YAML_STRING)) {
-            final Map<String, Object> map = snakeYamlTool().parse(datasource);
+        try (DataSource dataSource = dataSource(ANY_YAML_STRING)) {
+            final Map<String, Object> map = snakeYamlTool().parse(dataSource);
 
             assertEquals(1, map.size());
             assertEquals(3, ((List<?>) map.get("docker")).size());
@@ -57,7 +57,7 @@ public class SnakeYamlToolTest {
         return new SnakeYamlTool();
     }
 
-    private Datasource datasource(String value) {
-        return DatasourceFactory.create("test.yml", ANY_GROUP, value);
+    private DataSource dataSource(String value) {
+        return DataSourceFactory.create("test.yml", ANY_GROUP, value);
     }
 }
diff --git a/freemarker-generator-tools/src/test/java/org/apache/freemarker/generator/tools/xml/XmlToolTest.java b/freemarker-generator-tools/src/test/java/org/apache/freemarker/generator/tools/xml/XmlToolTest.java
index c2b16fa..42f9dfd 100644
--- a/freemarker-generator-tools/src/test/java/org/apache/freemarker/generator/tools/xml/XmlToolTest.java
+++ b/freemarker-generator-tools/src/test/java/org/apache/freemarker/generator/tools/xml/XmlToolTest.java
@@ -17,8 +17,8 @@
 package org.apache.freemarker.generator.tools.xml;
 
 import freemarker.ext.dom.NodeModel;
-import org.apache.freemarker.generator.base.datasource.Datasource;
-import org.apache.freemarker.generator.base.datasource.DatasourceFactory;
+import org.apache.freemarker.generator.base.datasource.DataSource;
+import org.apache.freemarker.generator.base.datasource.DataSourceFactory;
 import org.junit.Test;
 
 import static junit.framework.TestCase.assertEquals;
@@ -38,8 +38,8 @@ public class XmlToolTest {
 
     @Test
     public void shallParseXmlDatasource() throws Exception {
-        try (Datasource datasource = datasource(ANY_XML_STRING)) {
-            final NodeModel model = xmlTool().parse(datasource);
+        try (DataSource dataSource = dataSource(ANY_XML_STRING)) {
+            final NodeModel model = xmlTool().parse(dataSource);
 
             assertNotNull(model);
             assertEquals(1, model.getChildNodes().size());
@@ -58,7 +58,7 @@ public class XmlToolTest {
         return new XmlTool();
     }
 
-    private Datasource datasource(String value) {
-        return DatasourceFactory.create("test.xml", ANY_GROUP, value);
+    private DataSource dataSource(String value) {
+        return DataSourceFactory.create("test.xml", ANY_GROUP, value);
     }
 }