You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@freemarker.apache.org by sg...@apache.org on 2021/02/03 22:14:20 UTC

[freemarker-generator] branch FREEMARKER-172 updated (32b6b26 -> 2608564)

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

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


    from 32b6b26  FREEMARKER-172 [freemarker-generator] Start with refactoring
     new 941b8d7  FREEMARKER-172 [freemarker-generator] Start with refactoring
     new 8776951  FREEMARKER-172 [freemarker-generator] Start with refactoring
     new 36b876d  FREEMARKER-172 [freemarker-generator] Start with refactoring
     new f664244  FREEMARKER-172 [freemarker-generator] Start with refactoring
     new c6cae49  FREEMARKER-172 [freemarker-generator] Start with refactoring
     new 2608564  FREEMARKER-172 [freemarker-generator] Start with refactoring

The 6 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../generator/base/FreeMarkerConstants.java        |   6 +-
 .../generator/base/datasource/DataSource.java      |   9 +-
 .../base/datasource/DataSourceFactory.java         | 142 ++++-----------------
 .../base/datasource/DataSourceLoader.java          |  11 ++
 .../base/datasource/DataSourceLoaderFactory.java   |  45 +++++++
 .../base/datasource/DataSourcesSupplier.java       |  17 ++-
 .../datasource/loader/DefaultDataSourceLoader.java |   8 +-
 .../loader/EnvironmentDataSourceLoader.java        |  37 ++----
 .../datasource/loader/FileDataSourceLoader.java    |  29 ++---
 .../datasource/loader/HttpDataSourceLoader.java    |  17 ++-
 .../template/TemplateTransformationsBuilder.java   |   9 +-
 .../generator/base/tools/ToolsFactory.java         |   4 +-
 .../freemarker/generator/base/util/ListUtils.java  |  20 ---
 .../freemarker/generator/base/util/MapBuilder.java |   3 +
 .../generator/base/util/PropertiesTransformer.java |  11 --
 .../freemarker/generator/base/util/UriUtils.java   |  19 ---
 .../src/test/data/txt}/utf16.txt                   | Bin
 .../src/test/data/txt}/utf8.txt                    |   0
 .../datasource/DataSourceFactoryTest.java          |  78 +----------
 .../generator/datasource/DataSourceLoaderTest.java |  82 +++++++++---
 .../generator/datasource/DataSourceTest.java       |  14 +-
 .../datasource/DataSourcesSupplierTest.java        |  25 ++--
 .../generator/datasource/DataSourcesTest.java      |  94 +++++++-------
 .../generator/file/RecursiveFileSupplierTest.java  |   7 +-
 .../generator/uri/NamedUriStringParserTest.java    |   3 +
 .../generator/cli/config/DataModelSupplier.java    |  12 +-
 .../tools/dataframe/DataFrameToolTest.java         |  10 +-
 27 files changed, 318 insertions(+), 394 deletions(-)
 create mode 100644 freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/DataSourceLoaderFactory.java
 copy {freemarker-generator-cli/src/test/data/encoding => freemarker-generator-base/src/test/data/txt}/utf16.txt (100%)
 copy {freemarker-generator-cli/src/test/data/encoding => freemarker-generator-base/src/test/data/txt}/utf8.txt (100%)


[freemarker-generator] 06/06: FREEMARKER-172 [freemarker-generator] Start with refactoring

Posted by sg...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 2608564e2319f3c85a62db4dffa1d079844bf094
Author: Siegfried Goeschl <si...@gmail.com>
AuthorDate: Wed Feb 3 23:10:01 2021 +0100

    FREEMARKER-172 [freemarker-generator] Start with refactoring
---
 .../datasource/loader/FileDataSourceLoader.java    |   2 --
 .../src/test/data/txt/utf16.txt                    | Bin 0 -> 362 bytes
 .../src/test/data/txt/utf8.txt                     |   6 +++++
 .../generator/datasource/DataSourceLoaderTest.java |  27 +++++++++++++++++++--
 .../datasource/DataSourcesSupplierTest.java        |  25 ++++++++++---------
 .../generator/datasource/DataSourcesTest.java      |   1 -
 .../generator/file/RecursiveFileSupplierTest.java  |   7 ++++--
 .../generator/uri/NamedUriStringParserTest.java    |   3 +++
 8 files changed, 52 insertions(+), 19 deletions(-)

diff --git a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/loader/FileDataSourceLoader.java b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/loader/FileDataSourceLoader.java
index f76cb88..1ee8b66 100644
--- a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/loader/FileDataSourceLoader.java
+++ b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/loader/FileDataSourceLoader.java
@@ -43,8 +43,6 @@ public class FileDataSourceLoader implements DataSourceLoader {
         final String group = namedUri.getGroupOrElse(FreeMarkerConstants.DEFAULT_GROUP);
         final Charset charset = namedUri.getCharsetOrElse(UTF_8);
         final File file = namedUri.getFile();
-        // TODO
-        // final String name = namedUri.getNameOrElse(UriUtils.toStringWithoutFragment(file.toURI()));
         final String name = namedUri.getNameOrElse(file.getName());
         return DataSourceFactory.fromFile(name, group, file, charset);
     }
diff --git a/freemarker-generator-base/src/test/data/txt/utf16.txt b/freemarker-generator-base/src/test/data/txt/utf16.txt
new file mode 100755
index 0000000..6dfd2e5
Binary files /dev/null and b/freemarker-generator-base/src/test/data/txt/utf16.txt differ
diff --git a/freemarker-generator-base/src/test/data/txt/utf8.txt b/freemarker-generator-base/src/test/data/txt/utf8.txt
new file mode 100755
index 0000000..25f1e5c
--- /dev/null
+++ b/freemarker-generator-base/src/test/data/txt/utf8.txt
@@ -0,0 +1,6 @@
+UTF-8 encoding
+=============================================================================
+première is first
+première is slightly different
+Кириллица is Cyrillic
+𐐀 am Deseret
diff --git a/freemarker-generator-base/src/test/java/org/apache/freemarker/generator/datasource/DataSourceLoaderTest.java b/freemarker-generator-base/src/test/java/org/apache/freemarker/generator/datasource/DataSourceLoaderTest.java
index 14a1ed9..cbe9aa1 100644
--- a/freemarker-generator-base/src/test/java/org/apache/freemarker/generator/datasource/DataSourceLoaderTest.java
+++ b/freemarker-generator-base/src/test/java/org/apache/freemarker/generator/datasource/DataSourceLoaderTest.java
@@ -20,11 +20,13 @@ import org.apache.commons.io.FilenameUtils;
 import org.apache.freemarker.generator.base.datasource.DataSource;
 import org.apache.freemarker.generator.base.datasource.DataSourceLoader;
 import org.apache.freemarker.generator.base.datasource.DataSourceLoaderFactory;
+import org.junit.Ignore;
 import org.junit.Test;
 
 import java.io.File;
 
 import static java.lang.String.format;
+import static java.nio.charset.StandardCharsets.UTF_16;
 import static java.nio.charset.StandardCharsets.UTF_8;
 import static junit.framework.TestCase.assertFalse;
 import static org.apache.freemarker.generator.base.FreeMarkerConstants.DEFAULT_GROUP;
@@ -91,7 +93,19 @@ public class DataSourceLoaderTest {
     }
 
     @Test
-    // @Ignore
+    public void shouldLoadDataSourceFromComplexNameFileUri() {
+        try (DataSource dataSource = dataSourceLoader().load("source=pom.xml#charset=UTF-8&foo=bar")) {
+            assertEquals("pom.xml", dataSource.getFileName());
+            assertEquals("source", dataSource.getName());
+            assertEquals(UTF_8, dataSource.getCharset());
+            assertEquals(MIME_APPLICATION_XML, dataSource.getContentType());
+            assertEquals(ANY_FILE.toURI(), dataSource.getUri());
+            assertFalse(dataSource.getLines().isEmpty());
+        }
+    }
+
+    @Test
+    @Ignore
     public void shouldCreateDataSourceFromUrl() {
         try (DataSource dataSource = dataSourceLoader().load("https://jsonplaceholder.typicode.com/posts/2")) {
             assertEquals("https://jsonplaceholder.typicode.com/posts/2", dataSource.getName());
@@ -105,7 +119,7 @@ public class DataSourceLoaderTest {
     }
 
     @Test
-    // @Ignore
+    @Ignore
     public void shouldCreateDataSourceFromNamedURL() {
         try (DataSource dataSource = dataSourceLoader().load("content:www=https://www.google.com?foo=bar#contenttype=application/json")) {
             assertEquals("content", dataSource.getName());
@@ -152,6 +166,15 @@ public class DataSourceLoaderTest {
         }
     }
 
+    @Test
+    public void shouldLoadDataSourceWithCharset() {
+        final DataSource utf8DataSource = dataSourceLoader().load("./src/test/data/txt/utf8.txt", UTF_8);
+        final DataSource utf16DataSource = dataSourceLoader().load("./src/test/data/txt/utf16.txt", UTF_16);
+
+        // skip the first line before comparing
+        assertEquals(utf8DataSource.getLines().subList(1, 5), utf16DataSource.getLines().subList(1, 5));
+    }
+
     private DataSourceLoader dataSourceLoader() {
         return DataSourceLoaderFactory.create();
     }
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 fddc597..70279fc 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
@@ -64,12 +64,12 @@ public class DataSourcesSupplierTest {
 
     @Test
     public void shouldResolveDirectory() {
-        assertEquals(5, supplier(DATA_DIRECTORY, null, null).get().size());
-        assertEquals(5, supplier(DATA_DIRECTORY, "", null).get().size());
-        assertEquals(5, supplier(DATA_DIRECTORY, "*", null).get().size());
-        assertEquals(5, supplier(DATA_DIRECTORY, "*.*", null).get().size());
+        assertEquals(7, supplier(DATA_DIRECTORY, null, null).get().size());
+        assertEquals(7, supplier(DATA_DIRECTORY, "", null).get().size());
+        assertEquals(7, supplier(DATA_DIRECTORY, "*", null).get().size());
+        assertEquals(7, supplier(DATA_DIRECTORY, "*.*", null).get().size());
         assertEquals(2, supplier(DATA_DIRECTORY, "*.csv", null).get().size());
-        assertEquals(1, supplier(DATA_DIRECTORY, "*.t*", null).get().size());
+        assertEquals(3, supplier(DATA_DIRECTORY, "*.t*", null).get().size());
         assertEquals(0, supplier(DATA_DIRECTORY, "*.bin", null).get().size());
     }
 
@@ -77,12 +77,12 @@ public class DataSourcesSupplierTest {
     public void shouldResolveFilesAndDirectory() {
         final List<String> sources = Arrays.asList("pom.xml", "README.md", DATA_DIRECTORY);
 
-        assertEquals(7, supplier(sources, null, null).get().size());
-        assertEquals(7, supplier(sources, "", null).get().size());
-        assertEquals(7, supplier(sources, "*", null).get().size());
-        assertEquals(7, supplier(sources, "*.*", null).get().size());
+        assertEquals(9, supplier(sources, null, null).get().size());
+        assertEquals(9, supplier(sources, "", null).get().size());
+        assertEquals(9, supplier(sources, "*", null).get().size());
+        assertEquals(9, supplier(sources, "*.*", null).get().size());
         assertEquals(2, supplier(sources, "*.csv", null).get().size());
-        assertEquals(1, supplier(sources, "*.t*", null).get().size());
+        assertEquals(3, supplier(sources, "*.t*", null).get().size());
         assertEquals(1, supplier(sources, "*.xml", null).get().size());
         assertEquals(0, supplier(sources, "*.bin", null).get().size());
 
@@ -90,8 +90,8 @@ public class DataSourcesSupplierTest {
         assertEquals(0, supplier(sources, null, "*.*").get().size());
         assertEquals(0, supplier(sources, "*", "*").get().size());
 
-        assertEquals(6, supplier(sources, "*", "*.md").get().size());
-        assertEquals(4, supplier(sources, "*", "file*.*").get().size());
+        assertEquals(8, supplier(sources, "*", "*.md").get().size());
+        assertEquals(6, supplier(sources, "*", "file*.*").get().size());
     }
 
     @Test
@@ -142,4 +142,5 @@ public class DataSourcesSupplierTest {
     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 1a9fc6a..2d6154e 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
@@ -76,7 +76,6 @@ public class DataSourcesTest {
             assertEquals(3, dataSources.find(GROUP_PART, "d*").size());
             assertEquals(3, dataSources.find(GROUP_PART, "d??????").size());
         }
-
     }
 
     @Test
diff --git a/freemarker-generator-base/src/test/java/org/apache/freemarker/generator/file/RecursiveFileSupplierTest.java b/freemarker-generator-base/src/test/java/org/apache/freemarker/generator/file/RecursiveFileSupplierTest.java
index 06d5d17..5cc871b 100644
--- a/freemarker-generator-base/src/test/java/org/apache/freemarker/generator/file/RecursiveFileSupplierTest.java
+++ b/freemarker-generator-base/src/test/java/org/apache/freemarker/generator/file/RecursiveFileSupplierTest.java
@@ -35,7 +35,7 @@ public class RecursiveFileSupplierTest {
 
     @Test
     public void shouldResolveAllFilesOfDirectory() {
-        assertEquals(5, fileSupplier(ANY_DIRECTORY, null, null).get().size());
+        assertEquals(7, fileSupplier(ANY_DIRECTORY, null, null).get().size());
         assertTrue(fileSupplier(ANY_DIRECTORY, UNKNOWN_FILE_NAME, null).get().isEmpty());
     }
 
@@ -77,10 +77,12 @@ public class RecursiveFileSupplierTest {
     public void shouldExcludeFiles() {
         final List<File> files = fileSupplier(ANY_DIRECTORY, null, "*.csv").get();
 
-        assertEquals(3, files.size());
+        assertEquals(5, files.size());
         assertEquals("nginx.env", files.get(0).getName());
         assertEquals("test.properties", files.get(1).getName());
         assertEquals("file_01.txt", files.get(2).getName());
+        assertEquals("utf16.txt", files.get(3).getName());
+        assertEquals("utf8.txt", files.get(4).getName());
     }
 
     @Test
@@ -105,4 +107,5 @@ public class RecursiveFileSupplierTest {
     private static RecursiveFileSupplier fileSupplier(List<String> sources, String include, String exclude) {
         return new RecursiveFileSupplier(sources, singletonList(include), singletonList(exclude));
     }
+
 }
diff --git a/freemarker-generator-base/src/test/java/org/apache/freemarker/generator/uri/NamedUriStringParserTest.java b/freemarker-generator-base/src/test/java/org/apache/freemarker/generator/uri/NamedUriStringParserTest.java
index 7954f50..c114525 100644
--- a/freemarker-generator-base/src/test/java/org/apache/freemarker/generator/uri/NamedUriStringParserTest.java
+++ b/freemarker-generator-base/src/test/java/org/apache/freemarker/generator/uri/NamedUriStringParserTest.java
@@ -20,6 +20,7 @@ import org.apache.freemarker.generator.base.uri.NamedUri;
 import org.apache.freemarker.generator.base.uri.NamedUriStringParser;
 import org.junit.Test;
 
+import static java.nio.charset.StandardCharsets.UTF_16;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNull;
@@ -184,6 +185,7 @@ public class NamedUriStringParserTest {
         assertNull(namedURI.getGroup());
         assertEquals("file:///users.csv#charset=UTF-16&mimeType=text/csv", namedURI.getUri().toString());
         assertEquals(2, namedURI.getParameters().size());
+        assertEquals(UTF_16, namedURI.getCharset());
         assertEquals("UTF-16", namedURI.getParameters().get("charset"));
         assertEquals("text/csv", namedURI.getParameters().get("mimeType"));
     }
@@ -260,4 +262,5 @@ public class NamedUriStringParserTest {
     private static NamedUri parse(String value) {
         return NamedUriStringParser.parse(value);
     }
+
 }


[freemarker-generator] 05/06: FREEMARKER-172 [freemarker-generator] Start with refactoring

Posted by sg...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit c6cae49a929a632ff6045c517683b4fbd3646903
Author: Siegfried Goeschl <si...@gmail.com>
AuthorDate: Wed Feb 3 22:41:42 2021 +0100

    FREEMARKER-172 [freemarker-generator] Start with refactoring
---
 .../generator/base/FreeMarkerConstants.java        |  6 ++-
 .../generator/base/datasource/DataSource.java      |  7 +++-
 .../base/datasource/DataSourceFactory.java         |  2 +-
 .../generator/base/tools/ToolsFactory.java         |  4 +-
 .../freemarker/generator/base/util/ListUtils.java  | 20 ----------
 .../freemarker/generator/base/util/MapBuilder.java |  3 ++
 .../generator/base/util/PropertiesTransformer.java | 11 ------
 .../freemarker/generator/base/util/UriUtils.java   | 19 ----------
 .../datasource/DataSourceFactoryTest.java          |  6 ---
 .../generator/datasource/DataSourceLoaderTest.java | 43 ++++++++++++++++------
 .../generator/datasource/DataSourceTest.java       |  6 +--
 .../generator/datasource/DataSourcesTest.java      | 20 ++++------
 12 files changed, 61 insertions(+), 86 deletions(-)

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 86a69ab..c5e5dff 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
@@ -61,6 +61,7 @@ public class FreeMarkerConstants {
 
         /** Prefix to extract FreeMarker configuration settings from 'freemarker-generator.properties' */
         public static final String SETTING_PREFIX = "freemarker.configuration.setting.";
+
     }
 
     public static class Location {
@@ -68,13 +69,13 @@ public class FreeMarkerConstants {
         private Location() {
         }
 
-        public static final String BYTES = "bytes";
         public static final String ENVIRONMENT = "env";
         public static final String INTERACTIVE = "interactive";
         public static final String INPUTSTREAM = "inputstream";
         public static final String STDIN = "stdin";
         public static final String SYSTEM = "system";
         public static final String STRING = "string";
+
     }
 
     public static class Model {
@@ -91,6 +92,7 @@ public class FreeMarkerConstants {
         public static final String FREEMARKER_TEMPLATE_DIRECTORIES = "freemarker.template.directories";
         public static final String FREEMARKER_USER_SYSTEM_PROPERTIES = "freemarker.user.system.properties";
         public static final String FREEMARKER_USER_PARAMETERS = "freemarker.user.parameters";
+
     }
 
     public static class SystemProperties {
@@ -103,5 +105,7 @@ public class FreeMarkerConstants {
 
         /** Home directory of the user */
         public static final String USER_HOME = "user.home";
+
     }
+
 }
diff --git a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/DataSource.java b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/DataSource.java
index e9c735d..9634ecb 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
@@ -141,7 +141,7 @@ public class DataSource implements Closeable, javax.activation.DataSource {
     }
 
     public String getFileName() {
-        return FilenameUtils.getName(name);
+        return isFileDataSource() ? FilenameUtils.getName(dataSource.getName()) : "";
     }
 
     public String getBaseName() {
@@ -359,4 +359,9 @@ public class DataSource implements Closeable, javax.activation.DataSource {
             return StringUtils.firstNonEmpty(dataSource.getContentType(), MIME_APPLICATION_OCTET_STREAM);
         }
     }
+
+    private boolean isFileDataSource() {
+        return dataSource instanceof FileDataSource;
+    }
+
 }
diff --git a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/DataSourceFactory.java b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/DataSourceFactory.java
index 47e5d46..8a888d9 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
@@ -81,7 +81,7 @@ public abstract class DataSourceFactory {
     // == File ==============================================================
 
     public static DataSource fromFile(File file, Charset charset) {
-        return fromFile(UriUtils.toStringWithoutFragment(file.toURI()), DEFAULT_GROUP, file, charset);
+        return fromFile(file.getName(), DEFAULT_GROUP, file, charset);
     }
 
     public static DataSource fromFile(String name, String group, File file, Charset charset) {
diff --git a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/tools/ToolsFactory.java b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/tools/ToolsFactory.java
index 00a202b..ca65533 100644
--- a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/tools/ToolsFactory.java
+++ b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/tools/ToolsFactory.java
@@ -36,7 +36,8 @@ public class ToolsFactory {
         }
 
         try {
-            return forName(clazzName) != null;
+            forName(clazzName);
+            return true;
         } catch (NoClassDefFoundError | ClassNotFoundException e) {
             return false;
         }
@@ -95,4 +96,5 @@ public class ToolsFactory {
         // Fall back to the defining class loader of the FreeMarker classes
         return Class.forName(className);
     }
+
 }
diff --git a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/util/ListUtils.java b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/util/ListUtils.java
index 613b3e1..5ea20b4 100644
--- a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/util/ListUtils.java
+++ b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/util/ListUtils.java
@@ -26,10 +26,6 @@ public class ListUtils {
         return list == null || list.isEmpty();
     }
 
-    public static <T> boolean isNotEmpty(final List<T> list) {
-        return !isNullOrEmpty(list);
-    }
-
     /**
      * Transposes the given tabular data, swapping rows with columns.
      *
@@ -68,20 +64,4 @@ public class ListUtils {
                 .orElse(null);
     }
 
-    /**
-     * Copy an array to another array while casting to <code>R</code>.
-     *
-     * @param array array to copy
-     * @param <T>   the source type of the array
-     * @param <R>   the target type of the array
-     * @return copied array
-     */
-    @SuppressWarnings("unchecked")
-    public static <T, R> List<R> copy(final List<T> array) {
-        final List<R> result = new ArrayList<>();
-        for (int i = 0; i < array.size(); i++) {
-            result.set(i, (R) array.get(i));
-        }
-        return result;
-    }
 }
diff --git a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/util/MapBuilder.java b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/util/MapBuilder.java
index 561c13b..67bcef3 100644
--- a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/util/MapBuilder.java
+++ b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/util/MapBuilder.java
@@ -45,9 +45,12 @@ public class MapBuilder {
                 case 1:
                     map.put(currKey, value);
                     break;
+                default:
+                    throw new RuntimeException("That should never happen");
             }
         }
 
         return map;
     }
+
 }
diff --git a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/util/PropertiesTransformer.java b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/util/PropertiesTransformer.java
index a863b8d..aa5210e 100644
--- a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/util/PropertiesTransformer.java
+++ b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/util/PropertiesTransformer.java
@@ -52,15 +52,4 @@ public class PropertiesTransformer {
         return result;
     }
 
-    /**
-     * Copy a entries in a new <code>java.util.Properties</code> instance.
-     *
-     * @param properties the properties
-     * @return properties
-     */
-    public static Properties copy(Properties properties) {
-        final Properties result = new Properties();
-        properties.forEach((key, value) -> result.setProperty((String) key, (String) value));
-        return result;
-    }
 }
diff --git a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/util/UriUtils.java b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/util/UriUtils.java
index 8a6d7b9..c80e36f 100644
--- a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/util/UriUtils.java
+++ b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/util/UriUtils.java
@@ -21,7 +21,6 @@ import java.net.URISyntaxException;
 import java.net.URL;
 
 import static org.apache.commons.io.FilenameUtils.separatorsToUnix;
-import static org.apache.freemarker.generator.base.util.StringUtils.isNotEmpty;
 
 public class UriUtils {
 
@@ -53,24 +52,6 @@ public class UriUtils {
         return index > 0 ? str.substring(0, index) : str;
     }
 
-    public static boolean isUri(String str) {
-        return isNotEmpty(str) && str.contains("://");
-    }
-
-    public static boolean isHttpUri(URI uri) {
-        if (uri == null) {
-            return false;
-        }
-        return "http".equalsIgnoreCase(uri.getScheme()) || "https".equalsIgnoreCase(uri.getScheme());
-    }
-
-    public static boolean isFileUri(URI uri) {
-        if (uri == null) {
-            return false;
-        }
-        return "file".equalsIgnoreCase(uri.getScheme());
-    }
-
     public static boolean isEnvUri(URI uri) {
         if (uri == null) {
             return false;
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 85dc86c..24714ef 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,7 +16,6 @@
  */
 package org.apache.freemarker.generator.datasource;
 
-import org.apache.commons.io.FilenameUtils;
 import org.apache.freemarker.generator.base.FreeMarkerConstants.Location;
 import org.apache.freemarker.generator.base.datasource.DataSource;
 import org.apache.freemarker.generator.base.datasource.DataSourceFactory;
@@ -32,7 +31,6 @@ import java.net.URI;
 import java.net.URL;
 import java.nio.charset.Charset;
 
-import static java.lang.String.format;
 import static java.nio.charset.StandardCharsets.UTF_8;
 import static junit.framework.TestCase.assertFalse;
 import static junit.framework.TestCase.assertTrue;
@@ -41,14 +39,10 @@ import static org.junit.Assert.assertEquals;
 
 public class DataSourceFactoryTest {
 
-    private static final String PWD = FilenameUtils.separatorsToUnix(new File("").getAbsolutePath());
     private static final String ANY_TEXT = "Hello World";
     private static final String ANY_FILE_NAME = "pom.xml";
-    private static final String ANY_FILE_URI = format("file:///%s/pom.xml", PWD);
     private static final Charset ANY_CHAR_SET = UTF_8;
     private static final File ANY_FILE = new File(ANY_FILE_NAME);
-    private static final String ANY_ENV_VARIABLE = "HOME";
-    private static final String ANY_NAMED_URL_STRING = "content:www=https://www.google.com?foo=bar#contenttype=application/json";
 
     @Test
     public void shouldCreateDataSourceFromFile() {
diff --git a/freemarker-generator-base/src/test/java/org/apache/freemarker/generator/datasource/DataSourceLoaderTest.java b/freemarker-generator-base/src/test/java/org/apache/freemarker/generator/datasource/DataSourceLoaderTest.java
index d8ed10f..14a1ed9 100644
--- a/freemarker-generator-base/src/test/java/org/apache/freemarker/generator/datasource/DataSourceLoaderTest.java
+++ b/freemarker-generator-base/src/test/java/org/apache/freemarker/generator/datasource/DataSourceLoaderTest.java
@@ -20,7 +20,6 @@ import org.apache.commons.io.FilenameUtils;
 import org.apache.freemarker.generator.base.datasource.DataSource;
 import org.apache.freemarker.generator.base.datasource.DataSourceLoader;
 import org.apache.freemarker.generator.base.datasource.DataSourceLoaderFactory;
-import org.junit.Ignore;
 import org.junit.Test;
 
 import java.io.File;
@@ -28,6 +27,7 @@ import java.io.File;
 import static java.lang.String.format;
 import static java.nio.charset.StandardCharsets.UTF_8;
 import static junit.framework.TestCase.assertFalse;
+import static org.apache.freemarker.generator.base.FreeMarkerConstants.DEFAULT_GROUP;
 import static org.apache.freemarker.generator.base.mime.Mimetypes.MIME_APPLICATION_XML;
 import static org.junit.Assert.assertEquals;
 
@@ -35,16 +35,28 @@ public class DataSourceLoaderTest {
 
     private static final String PWD = FilenameUtils.separatorsToUnix(new File("").getAbsolutePath());
     private static final String ANY_FILE_NAME = "pom.xml";
+    private static final String ANY_ABSOLUTE_FILE_NAME = format("%s/pom.xml", PWD);
     private static final String ANY_FILE_URI = format("file:///%s/pom.xml", PWD);
-    private static final String ANY_HTTP_URL = "https://jsonplaceholder.typicode.com/posts/2";
     private static final File ANY_FILE = new File(ANY_FILE_NAME);
-    private static final String ANY_NAMED_URL_STRING = "content:www=https://www.google.com?foo=bar#contenttype=application/json";
 
     @Test
-    public void shouldLoadDataSourceFromFile() {
+    public void shouldLoadDataSourceFromFileName() {
         try (DataSource dataSource = dataSourceLoader().load(ANY_FILE_NAME)) {
-            // @TODO Clearly define behaviour
-            // assertEquals(ANY_FILE_NAME, dataSource.getName());
+            assertEquals(ANY_FILE_NAME, dataSource.getName());
+            assertEquals(DEFAULT_GROUP, dataSource.getGroup());
+            assertEquals(ANY_FILE_NAME, dataSource.getFileName());
+            assertEquals(UTF_8, dataSource.getCharset());
+            assertEquals(MIME_APPLICATION_XML, dataSource.getContentType());
+            assertEquals(ANY_FILE.toURI(), dataSource.getUri());
+            assertFalse(dataSource.getLines().isEmpty());
+        }
+    }
+
+    @Test
+    public void shouldLoadDataSourceFromAbsoluteFileName() {
+        try (DataSource dataSource = dataSourceLoader().load(ANY_ABSOLUTE_FILE_NAME)) {
+            assertEquals(ANY_FILE_NAME, dataSource.getName());
+            assertEquals(DEFAULT_GROUP, dataSource.getGroup());
             assertEquals(ANY_FILE_NAME, dataSource.getFileName());
             assertEquals(UTF_8, dataSource.getCharset());
             assertEquals(MIME_APPLICATION_XML, dataSource.getContentType());
@@ -56,6 +68,8 @@ public class DataSourceLoaderTest {
     @Test
     public void shouldLoadDataSourceFromFileUri() {
         try (DataSource dataSource = dataSourceLoader().load(ANY_FILE_URI)) {
+            assertEquals(ANY_FILE_NAME, dataSource.getName());
+            assertEquals(DEFAULT_GROUP, dataSource.getGroup());
             assertEquals(ANY_FILE_NAME, dataSource.getFileName());
             assertEquals(UTF_8, dataSource.getCharset());
             assertEquals(MIME_APPLICATION_XML, dataSource.getContentType());
@@ -67,7 +81,7 @@ public class DataSourceLoaderTest {
     @Test
     public void shouldLoadDataSourceFromSimpleNameFileUri() {
         try (DataSource dataSource = dataSourceLoader().load("source=pom.xml")) {
-            // assertEquals("pom.xml", dataSource.getFileName());
+            assertEquals("pom.xml", dataSource.getFileName());
             assertEquals("source", dataSource.getName());
             assertEquals(UTF_8, dataSource.getCharset());
             assertEquals(MIME_APPLICATION_XML, dataSource.getContentType());
@@ -77,20 +91,27 @@ public class DataSourceLoaderTest {
     }
 
     @Test
-    @Ignore
+    // @Ignore
     public void shouldCreateDataSourceFromUrl() {
-        try (DataSource dataSource = dataSourceLoader().load(ANY_HTTP_URL)) {
+        try (DataSource dataSource = dataSourceLoader().load("https://jsonplaceholder.typicode.com/posts/2")) {
             assertEquals("https://jsonplaceholder.typicode.com/posts/2", dataSource.getName());
+            assertEquals("", dataSource.getFileName());
+            assertEquals("", dataSource.getBaseName());
+            assertEquals("", dataSource.getExtension());
             assertEquals("application/json; charset=utf-8", dataSource.getContentType());
             assertEquals(UTF_8, dataSource.getCharset());
+            assertEquals("https://jsonplaceholder.typicode.com/posts/2", dataSource.getUri().toString());
         }
     }
 
     @Test
-    @Ignore
+    // @Ignore
     public void shouldCreateDataSourceFromNamedURL() {
-        try (DataSource dataSource = dataSourceLoader().load(ANY_NAMED_URL_STRING)) {
+        try (DataSource dataSource = dataSourceLoader().load("content:www=https://www.google.com?foo=bar#contenttype=application/json")) {
             assertEquals("content", dataSource.getName());
+            assertEquals("", dataSource.getFileName());
+            assertEquals("", dataSource.getBaseName());
+            assertEquals("", dataSource.getExtension());
             assertEquals("www", dataSource.getGroup());
             assertEquals("text/html; charset=ISO-8859-1", dataSource.getContentType());
             assertEquals("ISO-8859-1", dataSource.getCharset().toString());
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 3f26014..05c2382 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
@@ -49,7 +49,7 @@ public class DataSourceTest {
         try (DataSource dataSource = DataSourceFactory.fromString("stdin", ANY_GROUP, ANY_TEXT, Mimetypes.MIME_TEXT_PLAIN)) {
             assertEquals("stdin", dataSource.getName());
             assertEquals(ANY_GROUP, dataSource.getGroup());
-            assertEquals("stdin", dataSource.getBaseName());
+            assertEquals("", dataSource.getBaseName());
             assertEquals("", dataSource.getExtension());
             assertTrue(dataSource.getUri().toString().startsWith("string:///"));
             assertEquals(UTF_8, dataSource.getCharset());
@@ -86,8 +86,8 @@ public class DataSourceTest {
         try (DataSource dataSource = DataSourceFactory.fromUrl("www.google.com", DEFAULT_GROUP, toUrl("https://www.google.com/?foo=bar"), null, null)) {
             assertEquals("www.google.com", dataSource.getName());
             assertEquals(DEFAULT_GROUP, dataSource.getGroup());
-            assertEquals("www.google", dataSource.getBaseName());
-            assertEquals("com", dataSource.getExtension());
+            assertEquals("", dataSource.getBaseName());
+            assertEquals("", dataSource.getExtension());
             assertEquals("https://www.google.com/?foo=bar", dataSource.getUri().toString());
             assertEquals(MIME_TEXT_HTML, dataSource.getMimeType());
             assertEquals("ISO-8859-1", dataSource.getCharset().name());
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 a8659dc..1a9fc6a 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
@@ -54,7 +54,6 @@ public class DataSourcesTest {
 
             assertEquals(2, dataSources.find("*.*").size());
             assertEquals(1, dataSources.find("*." + ANY_FILE_EXTENSION).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());
@@ -82,16 +81,16 @@ public class DataSourcesTest {
 
     @Test
     public void shouldGetDataSource() {
-        assertNotNull(dataSources().get("*/" + ANY_FILE_NAME));
+        assertNotNull(dataSources().get(ANY_FILE_NAME));
     }
 
     @Test
     public void shouldGetAllDataSource() {
         try (DataSources dataSources = dataSources()) {
 
-            assertEquals("unknown", dataSources.get(0).getFileName());
-            assertEquals("pom.xml", dataSources.get(1).getFileName());
-            assertEquals("server.invalid?foo=bar", dataSources.get(2).getFileName());
+            assertEquals("unknown", dataSources.get(0).getName());
+            assertEquals("pom.xml", dataSources.get(1).getName());
+            assertEquals("server.invalid?foo=bar", dataSources.get(2).getName());
             assertEquals(3, dataSources.toList().size());
             assertEquals(3, dataSources.toMap().size());
             assertEquals(3, dataSources.size());
@@ -100,13 +99,10 @@ public class DataSourcesTest {
     }
 
     @Test
-    public void shouldGetParts() {
-        assertEquals(3, dataSources().getMetadata("name").size());
-    }
-
-    @Test
-    public void shouldGetFileNamePart() {
-        assertEquals(asList("unknown", "pom.xml", "server.invalid?foo=bar"), dataSources().getMetadata("fileName"));
+    public void shouldGetMetadataParts() {
+        assertEquals(asList("", "pom.xml", ""), dataSources().getMetadata("fileName"));
+        assertEquals(asList("", "xml", ""), dataSources().getMetadata("extension"));
+        assertEquals(asList("unknown", "pom.xml", "server.invalid?foo=bar"), dataSources().getMetadata("name"));
     }
 
     @Test


[freemarker-generator] 03/06: FREEMARKER-172 [freemarker-generator] Start with refactoring

Posted by sg...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 36b876d27ecbd4c0f7291d9044e64f61a9dd2be5
Author: Siegfried Goeschl <si...@gmail.com>
AuthorDate: Wed Feb 3 20:09:03 2021 +0100

    FREEMARKER-172 [freemarker-generator] Start with refactoring
---
 .../generator/tools/dataframe/DataFrameToolTest.java           | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/freemarker-generator-tools/src/test/java/org/apache/freemarker/generator/tools/dataframe/DataFrameToolTest.java b/freemarker-generator-tools/src/test/java/org/apache/freemarker/generator/tools/dataframe/DataFrameToolTest.java
index 0e1d395..0623efc 100644
--- a/freemarker-generator-tools/src/test/java/org/apache/freemarker/generator/tools/dataframe/DataFrameToolTest.java
+++ b/freemarker-generator-tools/src/test/java/org/apache/freemarker/generator/tools/dataframe/DataFrameToolTest.java
@@ -19,7 +19,8 @@ package org.apache.freemarker.generator.tools.dataframe;
 import de.unknownreality.dataframe.DataFrame;
 import org.apache.commons.csv.CSVFormat;
 import org.apache.commons.csv.CSVParser;
-import org.apache.freemarker.generator.base.datasource.DataSourceFactory;
+import org.apache.freemarker.generator.base.datasource.DataSourceLoader;
+import org.apache.freemarker.generator.base.datasource.DataSourceLoaderFactory;
 import org.apache.freemarker.generator.tools.commonscsv.CommonsCSVTool;
 import org.apache.freemarker.generator.tools.excel.ExcelTool;
 import org.apache.freemarker.generator.tools.gson.GsonTool;
@@ -113,7 +114,7 @@ public class DataFrameToolTest {
     @Test
     public void shouldParseExcelSheet() {
         final ExcelTool excelTool = excelTool();
-        final Workbook workbook = excelTool.parse(DataSourceFactory.create("./src/test/data/excel/test.xls"));
+        final Workbook workbook = excelTool.parse(dataSourceLoader().load("./src/test/data/excel/test.xls"));
         final List<List<Object>> sheet = excelTool.toTable(workbook.getSheetAt(0));
 
         final DataFrame dataFrame = dataFrameTool().fromRows(sheet, true);
@@ -150,4 +151,9 @@ public class DataFrameToolTest {
     private CSVParser csvParser(String csv, CSVFormat csvFormat) {
         return commonsCSVTool().parse(csv, csvFormat);
     }
+
+    private static DataSourceLoader dataSourceLoader() {
+        return DataSourceLoaderFactory.create();
+    }
+
 }


[freemarker-generator] 02/06: FREEMARKER-172 [freemarker-generator] Start with refactoring

Posted by sg...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 8776951e1b8227cf3e81e574063bc3d97db611d8
Author: Siegfried Goeschl <si...@gmail.com>
AuthorDate: Wed Feb 3 19:49:12 2021 +0100

    FREEMARKER-172 [freemarker-generator] Start with refactoring
---
 .../generator/base/datasource/DataSourceLoader.java       | 11 +++++++++++
 .../base/datasource/loader/DefaultDataSourceLoader.java   |  6 ++++++
 .../datasource/loader/EnvironmentDataSourceLoader.java    |  8 ++++++++
 .../base/datasource/loader/FileDataSourceLoader.java      | 15 +++++++++++----
 .../base/datasource/loader/HttpDataSourceLoader.java      |  8 ++++++--
 .../generator/cli/config/DataModelSupplier.java           | 12 ++++++++----
 6 files changed, 50 insertions(+), 10 deletions(-)

diff --git a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/DataSourceLoader.java b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/DataSourceLoader.java
index e23354b..ec7e70a 100644
--- a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/DataSourceLoader.java
+++ b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/DataSourceLoader.java
@@ -16,6 +16,8 @@
  */
 package org.apache.freemarker.generator.base.datasource;
 
+import java.nio.charset.Charset;
+
 public interface DataSourceLoader {
 
     /**
@@ -34,4 +36,13 @@ public interface DataSourceLoader {
      */
     DataSource load(String source);
 
+    /**
+     * Load a DataSource using the given charset.
+     *
+     * @param source source of the data source
+     * @param charset charset to use
+     * @return DataSource
+     */
+    DataSource load(String source, Charset charset);
+
 }
diff --git a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/loader/DefaultDataSourceLoader.java b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/loader/DefaultDataSourceLoader.java
index 62bf9db..467531c 100644
--- a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/loader/DefaultDataSourceLoader.java
+++ b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/loader/DefaultDataSourceLoader.java
@@ -19,6 +19,7 @@ package org.apache.freemarker.generator.base.datasource.loader;
 import org.apache.freemarker.generator.base.datasource.DataSource;
 import org.apache.freemarker.generator.base.datasource.DataSourceLoader;
 
+import java.nio.charset.Charset;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -46,6 +47,11 @@ public class DefaultDataSourceLoader implements DataSourceLoader {
         return get(source).load(source);
     }
 
+    @Override
+    public DataSource load(String source, Charset charset) {
+        return get(source).load(source, charset);
+    }
+
     private DataSourceLoader get(String source) {
         return dataSourceLoaders.stream()
                 .filter(loader -> loader.accept(source))
diff --git a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/loader/EnvironmentDataSourceLoader.java b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/loader/EnvironmentDataSourceLoader.java
index 775b7cc..41eeeef 100644
--- a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/loader/EnvironmentDataSourceLoader.java
+++ b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/loader/EnvironmentDataSourceLoader.java
@@ -25,6 +25,8 @@ import org.apache.freemarker.generator.base.uri.NamedUri;
 import org.apache.freemarker.generator.base.uri.NamedUriStringParser;
 import org.apache.freemarker.generator.base.util.StringUtils;
 
+import java.nio.charset.Charset;
+
 import static org.apache.freemarker.generator.base.FreeMarkerConstants.DEFAULT_GROUP;
 import static org.apache.freemarker.generator.base.util.StringUtils.firstNonEmpty;
 import static org.apache.freemarker.generator.base.util.StringUtils.isNotEmpty;
@@ -55,6 +57,12 @@ public class EnvironmentDataSourceLoader implements DataSourceLoader {
         }
     }
 
+    @Override
+    public DataSource load(String source, Charset charset) {
+        // We already habe internal strings so we can ignore the charset
+        return load(source);
+    }
+
     /**
      * Environment variables come with a leading "/" to be removed.
      */
diff --git a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/loader/FileDataSourceLoader.java b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/loader/FileDataSourceLoader.java
index 5531c93..fd2f576 100644
--- a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/loader/FileDataSourceLoader.java
+++ b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/loader/FileDataSourceLoader.java
@@ -16,6 +16,7 @@
  */
 package org.apache.freemarker.generator.base.datasource.loader;
 
+import org.apache.freemarker.generator.base.FreeMarkerConstants;
 import org.apache.freemarker.generator.base.datasource.DataSource;
 import org.apache.freemarker.generator.base.datasource.DataSourceFactory;
 import org.apache.freemarker.generator.base.datasource.DataSourceLoader;
@@ -27,13 +28,10 @@ import java.io.File;
 import java.nio.charset.Charset;
 
 import static java.nio.charset.StandardCharsets.UTF_8;
-import static org.apache.freemarker.generator.base.FreeMarkerConstants.DEFAULT_GROUP;
 import static org.apache.freemarker.generator.base.util.StringUtils.isNotEmpty;
 
 public class FileDataSourceLoader implements DataSourceLoader {
 
-    private static final Charset NO_CHARSET = null;
-
     @Override
     public boolean accept(String source) {
         return isNotEmpty(source) && (!source.contains("://") || source.contains("file://"));
@@ -42,11 +40,20 @@ public class FileDataSourceLoader implements DataSourceLoader {
     @Override
     public DataSource load(String source) {
         final NamedUri namedUri = NamedUriStringParser.parse(source);
-        final String group = namedUri.getGroupOrElse(DEFAULT_GROUP);
+        final String group = namedUri.getGroupOrElse(FreeMarkerConstants.DEFAULT_GROUP);
         final Charset charset = namedUri.getCharsetOrElse(UTF_8);
         final File file = namedUri.getFile();
         final String name = namedUri.getNameOrElse(UriUtils.toStringWithoutFragment(file.toURI()));
         return DataSourceFactory.fromFile(name, group, file, charset);
     }
 
+    @Override
+    public DataSource load(String source, Charset charset) {
+        final NamedUri namedUri = NamedUriStringParser.parse(source);
+        final String group = namedUri.getGroupOrElse(FreeMarkerConstants.DEFAULT_GROUP);
+        final File file = namedUri.getFile();
+        final String name = namedUri.getNameOrElse(UriUtils.toStringWithoutFragment(file.toURI()));
+        return DataSourceFactory.fromFile(name, group, file, charset);
+    }
+
 }
diff --git a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/loader/HttpDataSourceLoader.java b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/loader/HttpDataSourceLoader.java
index a481819..10755f9 100644
--- a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/loader/HttpDataSourceLoader.java
+++ b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/loader/HttpDataSourceLoader.java
@@ -16,7 +16,6 @@
  */
 package org.apache.freemarker.generator.base.datasource.loader;
 
-import org.apache.freemarker.generator.base.activation.CachingUrlDataSource;
 import org.apache.freemarker.generator.base.datasource.DataSource;
 import org.apache.freemarker.generator.base.datasource.DataSourceFactory;
 import org.apache.freemarker.generator.base.datasource.DataSourceLoader;
@@ -24,7 +23,6 @@ import org.apache.freemarker.generator.base.uri.NamedUri;
 import org.apache.freemarker.generator.base.uri.NamedUriStringParser;
 import org.apache.freemarker.generator.base.util.UriUtils;
 
-import javax.activation.URLDataSource;
 import java.net.MalformedURLException;
 import java.net.URI;
 import java.net.URL;
@@ -52,6 +50,12 @@ public class HttpDataSourceLoader implements DataSourceLoader {
         return DataSourceFactory.fromUrl(name, group, url, mimeType, charset);
     }
 
+    @Override
+    public DataSource load(String source, Charset charset) {
+        // We should pick up the charset from the HTTP server
+        return load(source);
+    }
+
     private static URL toUrl(URI uri) {
         try {
             return uri.toURL();
diff --git a/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/config/DataModelSupplier.java b/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/config/DataModelSupplier.java
index 79d94b0..8b134b7 100644
--- a/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/config/DataModelSupplier.java
+++ b/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/config/DataModelSupplier.java
@@ -17,7 +17,8 @@
 package org.apache.freemarker.generator.cli.config;
 
 import org.apache.freemarker.generator.base.datasource.DataSource;
-import org.apache.freemarker.generator.base.datasource.DataSourceFactory;
+import org.apache.freemarker.generator.base.datasource.DataSourceLoader;
+import org.apache.freemarker.generator.base.datasource.DataSourceLoaderFactory;
 import org.apache.freemarker.generator.base.uri.NamedUri;
 import org.apache.freemarker.generator.base.uri.NamedUriStringParser;
 import org.apache.freemarker.generator.base.util.PropertiesFactory;
@@ -48,6 +49,7 @@ import static org.apache.freemarker.generator.base.mime.Mimetypes.MIME_TEXT_YAML
  */
 public class DataModelSupplier implements Supplier<Map<String, Object>> {
 
+    private final DataSourceLoader dataSourceLoader;
     private final Collection<String> sources;
 
     /**
@@ -56,6 +58,7 @@ public class DataModelSupplier implements Supplier<Map<String, Object>> {
      * @param sources List of sources
      */
     public DataModelSupplier(Collection<String> sources) {
+        this.dataSourceLoader = DataSourceLoaderFactory.create();
         this.sources = new ArrayList<>(requireNonNull(sources));
     }
 
@@ -63,14 +66,14 @@ public class DataModelSupplier implements Supplier<Map<String, Object>> {
     public Map<String, Object> get() {
         return sources.stream()
                 .filter(StringUtils::isNotEmpty)
-                .map(DataModelSupplier::toDataModel)
+                .map(source -> toDataModel(source))
                 .flatMap(map -> map.entrySet().stream())
                 .collect(Collectors.toMap(Entry::getKey, Entry::getValue));
     }
 
-    private static Map<String, Object> toDataModel(String source) {
+    private Map<String, Object> toDataModel(String source) {
+        final DataSource dataSource = dataSourceLoader.load(source);
         final NamedUri namedUri = NamedUriStringParser.parse(source);
-        final DataSource dataSource = DataSourceFactory.fromNamedUri(namedUri);
         final boolean isExplodedDataModel = !namedUri.hasName();
         final String contentType = dataSource.getContentType();
 
@@ -140,4 +143,5 @@ public class DataModelSupplier implements Supplier<Map<String, Object>> {
 
         return result;
     }
+
 }


[freemarker-generator] 01/06: FREEMARKER-172 [freemarker-generator] Start with refactoring

Posted by sg...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 941b8d7e659039f97f67e0174f82e858fc8d9030
Author: Siegfried Goeschl <si...@gmail.com>
AuthorDate: Wed Feb 3 19:33:48 2021 +0100

    FREEMARKER-172 [freemarker-generator] Start with refactoring
---
 .../generator/base/datasource/DataSource.java      |  2 +-
 .../base/datasource/DataSourceFactory.java         |  2 +-
 .../base/datasource/DataSourceLoaderFactory.java   | 45 ++++++++++++++++++++++
 .../base/datasource/DataSourcesSupplier.java       | 17 ++++----
 .../datasource/loader/DefaultDataSourceLoader.java |  2 +-
 .../loader/EnvironmentDataSourceLoader.java        | 35 ++---------------
 .../datasource/loader/FileDataSourceLoader.java    | 16 +-------
 .../datasource/loader/HttpDataSourceLoader.java    |  9 +----
 .../generator/datasource/DataSourceLoaderTest.java | 28 ++++++++------
 9 files changed, 81 insertions(+), 75 deletions(-)

diff --git a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/DataSource.java b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/DataSource.java
index be9934c..e9c735d 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
@@ -359,4 +359,4 @@ public class DataSource implements Closeable, javax.activation.DataSource {
             return StringUtils.firstNonEmpty(dataSource.getContentType(), MIME_APPLICATION_OCTET_STREAM);
         }
     }
-}
\ No newline at end of file
+}
diff --git a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/DataSourceFactory.java b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/DataSourceFactory.java
index 0c9055c..30e3c7a 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
@@ -164,7 +164,7 @@ public abstract class DataSourceFactory {
             final URI uri = UriUtils.toUri(Location.ENVIRONMENT, "");
             return create(name, group, uri, dataSource, contentType, UTF_8);
         } catch (IOException e) {
-            throw new RuntimeException(e);
+            throw new RuntimeException("Unable to load environment variables", e);
         }
     }
 
diff --git a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/DataSourceLoaderFactory.java b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/DataSourceLoaderFactory.java
new file mode 100644
index 0000000..8b18c84
--- /dev/null
+++ b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/DataSourceLoaderFactory.java
@@ -0,0 +1,45 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.freemarker.generator.base.datasource;
+
+import org.apache.freemarker.generator.base.datasource.loader.DefaultDataSourceLoader;
+import org.apache.freemarker.generator.base.datasource.loader.EnvironmentDataSourceLoader;
+import org.apache.freemarker.generator.base.datasource.loader.FileDataSourceLoader;
+import org.apache.freemarker.generator.base.datasource.loader.HttpDataSourceLoader;
+
+import java.util.Arrays;
+
+/**
+ * Creates a FreeMarker data source from various sources.
+ */
+public abstract class DataSourceLoaderFactory {
+
+    private static DataSourceLoader dataSourceLoader;
+
+    public static synchronized DataSourceLoader create() {
+        if (dataSourceLoader == null) {
+            dataSourceLoader = new DefaultDataSourceLoader(
+                    Arrays.asList(
+                            new FileDataSourceLoader(),
+                            new HttpDataSourceLoader(),
+                            new EnvironmentDataSourceLoader()
+                    ));
+        }
+        return dataSourceLoader;
+    }
+
+}
diff --git a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/DataSourcesSupplier.java b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/DataSourcesSupplier.java
index cbf651b..91ed110 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
@@ -40,6 +40,8 @@ import static org.apache.freemarker.generator.base.FreeMarkerConstants.DEFAULT_G
  */
 public class DataSourcesSupplier implements Supplier<List<DataSource>> {
 
+    private final DataSourceLoader dataSourceLoader;
+
     /** List of source files and/or directories */
     private final Collection<String> sources;
 
@@ -52,6 +54,7 @@ public class DataSourcesSupplier implements Supplier<List<DataSource>> {
     /** The charset for loading text files */
     private final Charset charset;
 
+
     /**
      * Constructor.
      *
@@ -61,6 +64,7 @@ public class DataSourcesSupplier implements Supplier<List<DataSource>> {
      * @param charset The charset for loading text files
      */
     public DataSourcesSupplier(Collection<String> sources, String include, String exclude, Charset charset) {
+        this.dataSourceLoader = DataSourceLoaderFactory.create();
         this.sources = new ArrayList<>(sources);
         this.include = include;
         this.exclude = exclude;
@@ -97,8 +101,12 @@ public class DataSourcesSupplier implements Supplier<List<DataSource>> {
         }
     }
 
-    private static DataSource resolveHttpUrl(String source) {
-        return DataSourceFactory.create(source);
+    private DataSource resolveHttpUrl(String source) {
+        return dataSourceLoader.load(source);
+    }
+
+    private DataSource resolveEnvironment(String source) {
+        return dataSourceLoader.load(source);
     }
 
     private static List<DataSource> resolveFileOrDirectory(String source, String include, String exclude, Charset charset) {
@@ -111,11 +119,6 @@ public class DataSourcesSupplier implements Supplier<List<DataSource>> {
                 .collect(toList());
     }
 
-    private static DataSource resolveEnvironment(String source) {
-        final NamedUri namedUri = NamedUriStringParser.parse(source);
-        return DataSourceFactory.fromNamedUri(namedUri);
-    }
-
     private static RecursiveFileSupplier fileSupplier(String source, String include, String exclude) {
         return new RecursiveFileSupplier(singletonList(source), singletonList(include), singletonList(exclude));
     }
diff --git a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/loader/DefaultDataSourceLoader.java b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/loader/DefaultDataSourceLoader.java
index 91df861..62bf9db 100644
--- a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/loader/DefaultDataSourceLoader.java
+++ b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/loader/DefaultDataSourceLoader.java
@@ -25,7 +25,7 @@ import java.util.List;
 import static java.util.Objects.requireNonNull;
 
 /**
- * Loads DataSource by delegating the loading to a list of "DataSourceLoader".
+ * Loads data source by delegating the loading to a list of "DataSourceLoader".
  */
 public class DefaultDataSourceLoader implements DataSourceLoader {
 
diff --git a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/loader/EnvironmentDataSourceLoader.java b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/loader/EnvironmentDataSourceLoader.java
index fece4a6..775b7cc 100644
--- a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/loader/EnvironmentDataSourceLoader.java
+++ b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/loader/EnvironmentDataSourceLoader.java
@@ -17,23 +17,14 @@
 package org.apache.freemarker.generator.base.datasource.loader;
 
 import org.apache.freemarker.generator.base.FreeMarkerConstants.Location;
-import org.apache.freemarker.generator.base.activation.StringDataSource;
 import org.apache.freemarker.generator.base.datasource.DataSource;
+import org.apache.freemarker.generator.base.datasource.DataSourceFactory;
 import org.apache.freemarker.generator.base.datasource.DataSourceLoader;
 import org.apache.freemarker.generator.base.mime.Mimetypes;
 import org.apache.freemarker.generator.base.uri.NamedUri;
 import org.apache.freemarker.generator.base.uri.NamedUriStringParser;
-import org.apache.freemarker.generator.base.util.PropertiesFactory;
 import org.apache.freemarker.generator.base.util.StringUtils;
-import org.apache.freemarker.generator.base.util.UriUtils;
-import org.apache.freemarker.generator.base.util.Validate;
 
-import java.io.IOException;
-import java.io.StringWriter;
-import java.net.URI;
-import java.util.Properties;
-
-import static java.nio.charset.StandardCharsets.UTF_8;
 import static org.apache.freemarker.generator.base.FreeMarkerConstants.DEFAULT_GROUP;
 import static org.apache.freemarker.generator.base.util.StringUtils.firstNonEmpty;
 import static org.apache.freemarker.generator.base.util.StringUtils.isNotEmpty;
@@ -58,32 +49,12 @@ public class EnvironmentDataSourceLoader implements DataSourceLoader {
         final String name = firstNonEmpty(namedUri.getName(), key, Location.ENVIRONMENT);
         final String group = namedUri.getGroupOrElse(DEFAULT_GROUP);
         if (StringUtils.isEmpty(key)) {
-            return fromEnvironment(name, group, contentType);
+            return DataSourceFactory.fromEnvironment(name, group, contentType);
         } else {
-            return fromEnvironment(name, group, key, contentType);
-        }
-    }
-
-    private static DataSource fromEnvironment(String name, String group, String contentType) {
-        try {
-            final Properties properties = PropertiesFactory.create(System.getenv());
-            final StringWriter writer = new StringWriter();
-            properties.store(writer, null);
-            final StringDataSource dataSource = new StringDataSource(name, writer.toString(), contentType, UTF_8);
-            final URI uri = UriUtils.toUri(Location.ENVIRONMENT, "");
-            return new DataSource(name, group, uri, dataSource, Mimetypes.MIME_TEXT_PLAIN, UTF_8);
-        } catch (IOException e) {
-            throw new RuntimeException("Failed to load environment variables", e);
+            return DataSourceFactory.fromEnvironment(name, group, key, contentType);
         }
     }
 
-    private static DataSource fromEnvironment(String name, String group, String key, String contentType) {
-        Validate.notEmpty(System.getenv(key), "Environment variable not found: " + key);
-        final StringDataSource dataSource = new StringDataSource(name, System.getenv(key), contentType, UTF_8);
-        final URI uri = UriUtils.toUri(Location.ENVIRONMENT, key);
-        return new DataSource(name, group, uri, dataSource, contentType, UTF_8);
-    }
-
     /**
      * Environment variables come with a leading "/" to be removed.
      */
diff --git a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/loader/FileDataSourceLoader.java b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/loader/FileDataSourceLoader.java
index 55676a9..5531c93 100644
--- a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/loader/FileDataSourceLoader.java
+++ b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/loader/FileDataSourceLoader.java
@@ -17,14 +17,12 @@
 package org.apache.freemarker.generator.base.datasource.loader;
 
 import org.apache.freemarker.generator.base.datasource.DataSource;
+import org.apache.freemarker.generator.base.datasource.DataSourceFactory;
 import org.apache.freemarker.generator.base.datasource.DataSourceLoader;
-import org.apache.freemarker.generator.base.mime.MimetypesFileTypeMapFactory;
 import org.apache.freemarker.generator.base.uri.NamedUri;
 import org.apache.freemarker.generator.base.uri.NamedUriStringParser;
 import org.apache.freemarker.generator.base.util.UriUtils;
-import org.apache.freemarker.generator.base.util.Validate;
 
-import javax.activation.FileDataSource;
 import java.io.File;
 import java.nio.charset.Charset;
 
@@ -48,17 +46,7 @@ public class FileDataSourceLoader implements DataSourceLoader {
         final Charset charset = namedUri.getCharsetOrElse(UTF_8);
         final File file = namedUri.getFile();
         final String name = namedUri.getNameOrElse(UriUtils.toStringWithoutFragment(file.toURI()));
-        return fromFile(name, group, file, charset);
-    }
-
-    private static DataSource fromFile(String name, String group, File file, Charset charset) {
-        Validate.isTrue(file.isFile(), "File not found: " + file);
-
-        final FileDataSource dataSource = new FileDataSource(file);
-        dataSource.setFileTypeMap(MimetypesFileTypeMapFactory.create());
-        final String contentType = dataSource.getContentType();
-
-        return new DataSource(name, group, file.toURI(), dataSource, contentType, charset);
+        return DataSourceFactory.fromFile(name, group, file, charset);
     }
 
 }
diff --git a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/loader/HttpDataSourceLoader.java b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/loader/HttpDataSourceLoader.java
index 687b6ff..a481819 100644
--- a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/loader/HttpDataSourceLoader.java
+++ b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/loader/HttpDataSourceLoader.java
@@ -18,6 +18,7 @@ package org.apache.freemarker.generator.base.datasource.loader;
 
 import org.apache.freemarker.generator.base.activation.CachingUrlDataSource;
 import org.apache.freemarker.generator.base.datasource.DataSource;
+import org.apache.freemarker.generator.base.datasource.DataSourceFactory;
 import org.apache.freemarker.generator.base.datasource.DataSourceLoader;
 import org.apache.freemarker.generator.base.uri.NamedUri;
 import org.apache.freemarker.generator.base.uri.NamedUriStringParser;
@@ -48,7 +49,7 @@ public class HttpDataSourceLoader implements DataSourceLoader {
         final String mimeType = namedUri.getMimeType();
         final URL url = toUrl(uri);
         final String name = namedUri.getNameOrElse(UriUtils.toStringWithoutFragment(uri));
-        return fromUrl(name, group, url, mimeType, charset);
+        return DataSourceFactory.fromUrl(name, group, url, mimeType, charset);
     }
 
     private static URL toUrl(URI uri) {
@@ -59,10 +60,4 @@ public class HttpDataSourceLoader implements DataSourceLoader {
         }
     }
 
-    private static DataSource fromUrl(String name, String group, URL url, String contentType, Charset charset) {
-        final URLDataSource dataSource = new CachingUrlDataSource(url);
-        final URI uri = UriUtils.toUri(url);
-        return new DataSource(name, group, uri, dataSource, contentType, charset);
-    }
-
 }
diff --git a/freemarker-generator-base/src/test/java/org/apache/freemarker/generator/datasource/DataSourceLoaderTest.java b/freemarker-generator-base/src/test/java/org/apache/freemarker/generator/datasource/DataSourceLoaderTest.java
index 0659965..d8ed10f 100644
--- a/freemarker-generator-base/src/test/java/org/apache/freemarker/generator/datasource/DataSourceLoaderTest.java
+++ b/freemarker-generator-base/src/test/java/org/apache/freemarker/generator/datasource/DataSourceLoaderTest.java
@@ -19,15 +19,11 @@ package org.apache.freemarker.generator.datasource;
 import org.apache.commons.io.FilenameUtils;
 import org.apache.freemarker.generator.base.datasource.DataSource;
 import org.apache.freemarker.generator.base.datasource.DataSourceLoader;
-import org.apache.freemarker.generator.base.datasource.loader.DefaultDataSourceLoader;
-import org.apache.freemarker.generator.base.datasource.loader.EnvironmentDataSourceLoader;
-import org.apache.freemarker.generator.base.datasource.loader.FileDataSourceLoader;
-import org.apache.freemarker.generator.base.datasource.loader.HttpDataSourceLoader;
+import org.apache.freemarker.generator.base.datasource.DataSourceLoaderFactory;
 import org.junit.Ignore;
 import org.junit.Test;
 
 import java.io.File;
-import java.util.Arrays;
 
 import static java.lang.String.format;
 import static java.nio.charset.StandardCharsets.UTF_8;
@@ -47,6 +43,8 @@ public class DataSourceLoaderTest {
     @Test
     public void shouldLoadDataSourceFromFile() {
         try (DataSource dataSource = dataSourceLoader().load(ANY_FILE_NAME)) {
+            // @TODO Clearly define behaviour
+            // assertEquals(ANY_FILE_NAME, dataSource.getName());
             assertEquals(ANY_FILE_NAME, dataSource.getFileName());
             assertEquals(UTF_8, dataSource.getCharset());
             assertEquals(MIME_APPLICATION_XML, dataSource.getContentType());
@@ -67,6 +65,18 @@ public class DataSourceLoaderTest {
     }
 
     @Test
+    public void shouldLoadDataSourceFromSimpleNameFileUri() {
+        try (DataSource dataSource = dataSourceLoader().load("source=pom.xml")) {
+            // assertEquals("pom.xml", dataSource.getFileName());
+            assertEquals("source", dataSource.getName());
+            assertEquals(UTF_8, dataSource.getCharset());
+            assertEquals(MIME_APPLICATION_XML, dataSource.getContentType());
+            assertEquals(ANY_FILE.toURI(), dataSource.getUri());
+            assertFalse(dataSource.getLines().isEmpty());
+        }
+    }
+
+    @Test
     @Ignore
     public void shouldCreateDataSourceFromUrl() {
         try (DataSource dataSource = dataSourceLoader().load(ANY_HTTP_URL)) {
@@ -122,13 +132,7 @@ public class DataSourceLoaderTest {
     }
 
     private DataSourceLoader dataSourceLoader() {
-        return new DefaultDataSourceLoader(
-                Arrays.asList(
-                        new FileDataSourceLoader(),
-                        new HttpDataSourceLoader(),
-                        new EnvironmentDataSourceLoader()
-                )
-        );
+        return DataSourceLoaderFactory.create();
     }
 
 }


[freemarker-generator] 04/06: FREEMARKER-172 [freemarker-generator] Start with refactoring

Posted by sg...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit f66424443b62d9784491111db94b12fe0789c481
Author: Siegfried Goeschl <si...@gmail.com>
AuthorDate: Wed Feb 3 20:39:03 2021 +0100

    FREEMARKER-172 [freemarker-generator] Start with refactoring
---
 .../base/datasource/DataSourceFactory.java         | 138 ++++-----------------
 .../datasource/loader/FileDataSourceLoader.java    |   4 +-
 .../template/TemplateTransformationsBuilder.java   |   9 +-
 .../datasource/DataSourceFactoryTest.java          |  74 ++---------
 .../generator/datasource/DataSourceTest.java       |   8 +-
 .../generator/datasource/DataSourcesTest.java      |  81 +++++++-----
 6 files changed, 92 insertions(+), 222 deletions(-)

diff --git a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/DataSourceFactory.java b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/DataSourceFactory.java
index 30e3c7a..47e5d46 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
@@ -17,15 +17,11 @@
 package org.apache.freemarker.generator.base.datasource;
 
 import org.apache.freemarker.generator.base.FreeMarkerConstants.Location;
-import org.apache.freemarker.generator.base.activation.ByteArrayDataSource;
 import org.apache.freemarker.generator.base.activation.CachingUrlDataSource;
 import org.apache.freemarker.generator.base.activation.InputStreamDataSource;
 import org.apache.freemarker.generator.base.activation.StringDataSource;
 import org.apache.freemarker.generator.base.mime.MimetypesFileTypeMapFactory;
-import org.apache.freemarker.generator.base.uri.NamedUri;
-import org.apache.freemarker.generator.base.uri.NamedUriStringParser;
 import org.apache.freemarker.generator.base.util.PropertiesFactory;
-import org.apache.freemarker.generator.base.util.StringUtils;
 import org.apache.freemarker.generator.base.util.UriUtils;
 import org.apache.freemarker.generator.base.util.Validate;
 
@@ -44,61 +40,26 @@ import java.util.UUID;
 
 import static java.nio.charset.StandardCharsets.UTF_8;
 import static org.apache.freemarker.generator.base.FreeMarkerConstants.DEFAULT_GROUP;
-import static org.apache.freemarker.generator.base.mime.Mimetypes.MIME_TEXT_PLAIN;
-import static org.apache.freemarker.generator.base.util.StringUtils.firstNonEmpty;
 
 /**
- * Creates a FreeMarker data source from various sources.
+ * Low-level factory to create FreeMarker data sources.
  */
 public abstract class DataSourceFactory {
 
-    private static final String NO_MIME_TYPE = null;
-    private static final Charset NO_CHARSET = null;
-    private static final String ROOT_DIR = "/";
-
     private DataSourceFactory() {
     }
 
-    // == NamedUri ==========================================================
-
-    public static DataSource fromNamedUri(String str) {
-        Validate.notNull(str, "namedUri is null");
-
-        return fromNamedUri(NamedUriStringParser.parse(str));
-    }
+    // == General ===========================================================
 
-    public static DataSource fromNamedUri(NamedUri namedUri) {
-        Validate.notNull(namedUri, "namedUri is null");
-
-        final URI uri = namedUri.getUri();
-        final String group = namedUri.getGroupOrElse(DEFAULT_GROUP);
-        final Charset charset = getCharsetOrElse(namedUri, NO_CHARSET);
-        final String mimeType = getMimeTypeOrElse(namedUri, NO_MIME_TYPE);
-
-        if (UriUtils.isHttpUri(uri)) {
-            final URL url = toUrl(uri);
-            final String name = namedUri.getNameOrElse(UriUtils.toStringWithoutFragment(uri));
-            return fromUrl(name, group, url, mimeType, charset);
-        } else if (UriUtils.isFileUri(uri)) {
-            final File file = namedUri.getFile();
-            final String name = namedUri.getNameOrElse(UriUtils.toStringWithoutFragment(file.toURI()));
-            return fromFile(name, group, file, charset);
-        } else if (UriUtils.isEnvUri(uri)) {
-            // environment variables come with a leading "/" to be removed
-            final String key = stripRootDir(uri.getPath());
-            final String contentType = getMimeTypeOrElse(namedUri, MIME_TEXT_PLAIN);
-            final String name = firstNonEmpty(namedUri.getName(), key, Location.ENVIRONMENT);
-            if (StringUtils.isEmpty(key)) {
-                return fromEnvironment(name, group, contentType);
-            } else {
-                return fromEnvironment(name, group, key, contentType);
-            }
-        } else {
-            // handle things such as "foo=some.file"
-            final File file = namedUri.getFile();
-            final String name = namedUri.getNameOrElse(UriUtils.toStringWithoutFragment(file.toURI()));
-            return fromFile(name, group, file, charset);
-        }
+    public static DataSource create(
+            String name,
+            String group,
+            URI uri,
+            javax.activation.DataSource dataSource,
+            String contentType,
+            Charset charset
+    ) {
+        return new DataSource(name, group, uri, dataSource, contentType, charset);
     }
 
     // == URL ===============================================================
@@ -132,23 +93,16 @@ public abstract class DataSourceFactory {
         return create(name, group, file.toURI(), dataSource, contentType, charset);
     }
 
-    // == Bytes ============================================================
-
-    public static DataSource fromBytes(String name, String group, byte[] content, String contentType) {
-        final ByteArrayDataSource dataSource = new ByteArrayDataSource(name, content);
-        final URI uri = UriUtils.toUri(Location.BYTES + ":///");
-        return create(name, group, uri, dataSource, contentType, UTF_8);
-    }
-
     // == InputStream =======================================================
 
-    public static DataSource fromInputStream(String name, String group, InputStream is, String contentType, Charset charset) {
-        final InputStreamDataSource dataSource = new InputStreamDataSource(name, is);
-        final URI uri = UriUtils.toUri(Location.INPUTSTREAM + ":///");
-        return create(name, group, uri, dataSource, contentType, charset);
-    }
-
-    public static DataSource fromInputStream(String name, String group, URI uri, InputStream is, String contentType, Charset charset) {
+    public static DataSource fromInputStream(
+            String name,
+            String group,
+            URI uri,
+            InputStream is,
+            String contentType,
+            Charset charset
+    ) {
         final InputStreamDataSource dataSource = new InputStreamDataSource(name, is);
         return create(name, group, uri, dataSource, contentType, charset);
     }
@@ -176,60 +130,12 @@ public abstract class DataSourceFactory {
         return create(name, group, uri, dataSource, contentType, UTF_8);
     }
 
-    // == General ===========================================================
-
-    /**
-     * Create a data source based on a
-     * <ul>
-     *  <li>URI</li>
-     *  <li>Named URI</li>
-     *  <li>file name</li>
-     * </ul>
-     *
-     * @param source source of the data source
-     * @return DataSource
-     */
-    public static DataSource create(String source) {
-        if (UriUtils.isUri(source)) {
-            return fromNamedUri(source);
-        } else {
-            final File file = new File(source);
-            return fromFile(file.getName(), DEFAULT_GROUP, file, UTF_8);
-        }
-    }
-
-    public static DataSource create(
-            String name,
-            String group,
-            URI uri,
-            javax.activation.DataSource dataSource,
-            String contentType,
-            Charset charset) {
-        return new DataSource(name, group, uri, dataSource, contentType, charset);
-    }
-
-    private static String getMimeTypeOrElse(NamedUri namedUri, String def) {
-        return namedUri.getParameter(NamedUri.MIMETYPE, def);
-    }
-
-    private static Charset getCharsetOrElse(NamedUri namedUri, Charset def) {
-        final String charsetName = namedUri.getParameter(NamedUri.CHARSET);
-        return StringUtils.isEmpty(charsetName) ? def : Charset.forName(charsetName);
-    }
-
-    private static URL toUrl(URI uri) {
+    public static URL toUrl(String url) {
         try {
-            return uri.toURL();
+            return new URL(url);
         } catch (MalformedURLException e) {
-            throw new IllegalArgumentException(uri.toString(), e);
+            throw new IllegalArgumentException(url, e);
         }
     }
 
-    private static String stripRootDir(String str) {
-        if (str.startsWith(ROOT_DIR)) {
-            return str.substring(ROOT_DIR.length());
-        } else {
-            return str;
-        }
-    }
 }
diff --git a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/loader/FileDataSourceLoader.java b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/loader/FileDataSourceLoader.java
index fd2f576..f76cb88 100644
--- a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/loader/FileDataSourceLoader.java
+++ b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/loader/FileDataSourceLoader.java
@@ -43,7 +43,9 @@ public class FileDataSourceLoader implements DataSourceLoader {
         final String group = namedUri.getGroupOrElse(FreeMarkerConstants.DEFAULT_GROUP);
         final Charset charset = namedUri.getCharsetOrElse(UTF_8);
         final File file = namedUri.getFile();
-        final String name = namedUri.getNameOrElse(UriUtils.toStringWithoutFragment(file.toURI()));
+        // TODO
+        // final String name = namedUri.getNameOrElse(UriUtils.toStringWithoutFragment(file.toURI()));
+        final String name = namedUri.getNameOrElse(file.getName());
         return DataSourceFactory.fromFile(name, group, file, charset);
     }
 
diff --git a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/template/TemplateTransformationsBuilder.java b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/template/TemplateTransformationsBuilder.java
index 6aaf494..c8541d8 100644
--- a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/template/TemplateTransformationsBuilder.java
+++ b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/template/TemplateTransformationsBuilder.java
@@ -18,7 +18,8 @@ package org.apache.freemarker.generator.base.template;
 
 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.DataSourceLoader;
+import org.apache.freemarker.generator.base.datasource.DataSourceLoaderFactory;
 import org.apache.freemarker.generator.base.file.RecursiveFileSupplier;
 import org.apache.freemarker.generator.base.util.NonClosableWriterWrapper;
 import org.apache.freemarker.generator.base.util.StringUtils;
@@ -41,6 +42,8 @@ import static java.util.Collections.singletonList;
  */
 public class TemplateTransformationsBuilder {
 
+    private final DataSourceLoader dataSourceLoader;
+
     /** Interactive template */
     private TemplateSource interactiveTemplate;
 
@@ -66,6 +69,7 @@ public class TemplateTransformationsBuilder {
     private Writer callerSuppliedWriter;
 
     private TemplateTransformationsBuilder() {
+        this.dataSourceLoader = DataSourceLoaderFactory.create();
         this.templateSource = null;
         this.includes = new ArrayList<>();
         this.excludes = new ArrayList<>();
@@ -228,7 +232,7 @@ public class TemplateTransformationsBuilder {
     }
 
     private TemplateSource templateSource(String source) {
-        try (DataSource dataSource = DataSourceFactory.create(source)) {
+        try (DataSource dataSource = dataSourceLoader.load(source)) {
             return TemplateSource.fromCode(dataSource.getName(), dataSource.getText(templateEncoding.name()));
         }
     }
@@ -300,4 +304,5 @@ public class TemplateTransformationsBuilder {
         // avoid closing System.out after rendering the template
         return new BufferedWriter(new NonClosableWriterWrapper(new OutputStreamWriter(System.out, outputEncoding)));
     }
+
 }
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 0610e2d..85dc86c 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
@@ -17,10 +17,10 @@
 package org.apache.freemarker.generator.datasource;
 
 import org.apache.commons.io.FilenameUtils;
+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.uri.NamedUri;
-import org.apache.freemarker.generator.base.uri.NamedUriStringParser;
+import org.apache.freemarker.generator.base.util.UriUtils;
 import org.junit.Ignore;
 import org.junit.Test;
 
@@ -28,6 +28,7 @@ import java.io.ByteArrayInputStream;
 import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
+import java.net.URI;
 import java.net.URL;
 import java.nio.charset.Charset;
 
@@ -46,7 +47,7 @@ public class DataSourceFactoryTest {
     private static final String ANY_FILE_URI = format("file:///%s/pom.xml", PWD);
     private static final Charset ANY_CHAR_SET = UTF_8;
     private static final File ANY_FILE = new File(ANY_FILE_NAME);
-    private static final String ANY_ENV_VARIABLE = "JAVA_HOME";
+    private static final String ANY_ENV_VARIABLE = "HOME";
     private static final String ANY_NAMED_URL_STRING = "content:www=https://www.google.com?foo=bar#contenttype=application/json";
 
     @Test
@@ -61,17 +62,6 @@ public class DataSourceFactoryTest {
     }
 
     @Test
-    public void shouldCreateDataSourceFromFileUri() {
-        final DataSource dataSource = DataSourceFactory.create(ANY_FILE_URI);
-
-        assertEquals(ANY_FILE_NAME, dataSource.getFileName());
-        assertEquals(UTF_8, dataSource.getCharset());
-        assertEquals(MIME_APPLICATION_XML, dataSource.getContentType());
-        assertEquals(ANY_FILE.toURI(), dataSource.getUri());
-        assertTrue(!dataSource.getLines().isEmpty());
-    }
-
-    @Test
     public void shouldCreateDataSourceFromString() {
         final DataSource dataSource = DataSourceFactory.fromString("test.txt", "default", ANY_TEXT, "text/plain");
 
@@ -85,22 +75,10 @@ public class DataSourceFactoryTest {
     }
 
     @Test
-    public void shouldCreateDataSourceFromBytes() {
-        final DataSource dataSource = DataSourceFactory.fromBytes("test.txt", "default", ANY_TEXT.getBytes(UTF_8), "text/plain");
-
-        assertEquals("test.txt", dataSource.getName());
-        assertEquals("default", dataSource.getGroup());
-        assertEquals(UTF_8, dataSource.getCharset());
-        assertEquals("text/plain", dataSource.getContentType());
-        assertTrue(dataSource.getUri().toString().startsWith("bytes:///"));
-        assertEquals(ANY_TEXT, dataSource.getText());
-        assertEquals(1, dataSource.getLines().size());
-    }
-
-    @Test
     public void shouldCreateDataSourceFromInputStream() {
+        final URI uri = UriUtils.toUri(Location.INPUTSTREAM + ":///");
         final InputStream is = new ByteArrayInputStream(ANY_TEXT.getBytes(UTF_8));
-        final DataSource dataSource = DataSourceFactory.fromInputStream("test.txt", "default", is, "text/plain", UTF_8);
+        final DataSource dataSource = DataSourceFactory.fromInputStream("test.txt", "default", uri, is, "text/plain", UTF_8);
 
         assertEquals("test.txt", dataSource.getName());
         assertEquals(UTF_8, dataSource.getCharset());
@@ -116,26 +94,14 @@ public class DataSourceFactoryTest {
         final DataSource dataSource = DataSourceFactory.fromUrl("jsonplaceholder.typicode.com", "default", url, null, null);
 
         assertEquals("jsonplaceholder.typicode.com", dataSource.getName());
+        assertEquals("jsonplaceholder.typicode.com", dataSource.getFileName());
         assertEquals("application/json", dataSource.getContentType());
         assertEquals(UTF_8, dataSource.getCharset());
     }
 
     @Test
-    @Ignore
-    public void shouldCreateDataSourceFromNamedURL() {
-        final NamedUri namedUri = NamedUriStringParser.parse(ANY_NAMED_URL_STRING);
-        final DataSource dataSource = DataSourceFactory.fromNamedUri(namedUri);
-
-        assertEquals(namedUri.getName(), dataSource.getName());
-        assertEquals(namedUri.getGroup(), dataSource.getGroup());
-        assertEquals("ISO-8859-1", dataSource.getCharset().toString());
-        assertEquals(namedUri.getUri().toString(), dataSource.getUri().toString());
-    }
-
-    @Test
     public void shouldCreateDataSourceFromEnvironment() {
-        final NamedUri namedUri = NamedUriStringParser.parse("env:///");
-        final DataSource dataSource = DataSourceFactory.fromNamedUri(namedUri);
+        final DataSource dataSource = DataSourceFactory.fromEnvironment("env", "default", "text/plain");
 
         assertEquals("env", dataSource.getName());
         assertEquals("default", dataSource.getGroup());
@@ -144,28 +110,4 @@ public class DataSourceFactoryTest {
         assertEquals("text/plain", dataSource.getContentType());
     }
 
-    @Test
-    public void shouldCreateDataSourceFromNamedEnvironment() {
-        final NamedUri namedUri = NamedUriStringParser.parse("config=env:///");
-        final DataSource dataSource = DataSourceFactory.fromNamedUri(namedUri);
-
-        assertEquals("config", dataSource.getName());
-        assertEquals("default", dataSource.getGroup());
-        assertEquals(UTF_8, dataSource.getCharset());
-        assertEquals("env:///", dataSource.getUri().toString());
-        assertEquals("text/plain", dataSource.getContentType());
-    }
-
-    @Test
-    public void shouldCreateDataSourceFromEnvironmentVariable() {
-        final String uri = "env:///" + ANY_ENV_VARIABLE;
-        final NamedUri namedUri = NamedUriStringParser.parse("myenv=" + uri);
-        final DataSource dataSource = DataSourceFactory.fromNamedUri(namedUri);
-
-        assertEquals("myenv", dataSource.getName());
-        assertEquals("default", dataSource.getGroup());
-        assertEquals(UTF_8, dataSource.getCharset());
-        assertEquals(uri, dataSource.getUri().toString());
-        assertEquals("text/plain", dataSource.getContentType());
-    }
 }
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 155b778..3f26014 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
@@ -20,7 +20,6 @@ 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.mime.Mimetypes;
-import org.junit.Ignore;
 import org.junit.Test;
 
 import java.io.Closeable;
@@ -31,6 +30,7 @@ import java.util.Iterator;
 
 import static java.nio.charset.StandardCharsets.UTF_8;
 import static org.apache.freemarker.generator.base.FreeMarkerConstants.DEFAULT_GROUP;
+import static org.apache.freemarker.generator.base.datasource.DataSourceFactory.toUrl;
 import static org.apache.freemarker.generator.base.mime.Mimetypes.MIME_TEXT_HTML;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
@@ -80,10 +80,10 @@ public class DataSourceTest {
         }
     }
 
-    @Ignore("Requires internet connection")
+    // @Ignore("Requires internet connection")
     @Test
     public void shouldSupportUrlDataSource() {
-        try (DataSource dataSource = DataSourceFactory.create("https://www.google.com/?foo=bar")) {
+        try (DataSource dataSource = DataSourceFactory.fromUrl("www.google.com", DEFAULT_GROUP, toUrl("https://www.google.com/?foo=bar"), null, null)) {
             assertEquals("www.google.com", dataSource.getName());
             assertEquals(DEFAULT_GROUP, dataSource.getGroup());
             assertEquals("www.google", dataSource.getBaseName());
@@ -157,5 +157,7 @@ public class DataSourceTest {
         public boolean isClosed() {
             return closed;
         }
+
     }
+
 }
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 d3cdf45..a8659dc 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
@@ -22,6 +22,8 @@ import org.apache.freemarker.generator.base.datasource.DataSources;
 import org.junit.Test;
 
 import java.io.File;
+import java.net.MalformedURLException;
+import java.net.URL;
 
 import static java.nio.charset.StandardCharsets.UTF_8;
 import static java.util.Arrays.asList;
@@ -43,37 +45,38 @@ public class DataSourcesTest {
 
     @Test
     public void shouldFindByName() {
-        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(2, dataSources.find("*.*").size());
-        assertEquals(1, dataSources.find("*." + ANY_FILE_EXTENSION).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(3, dataSources.find("*").size());
+        try (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(2, dataSources.find("*.*").size());
+            assertEquals(1, dataSources.find("*." + ANY_FILE_EXTENSION).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(3, dataSources.find("*").size());
+        }
     }
 
     @Test
     public void shouldFindByGroupPart() {
-        final DataSources dataSources = dataSources();
+        try (DataSources dataSources = dataSources()) {
 
-        assertEquals(0, dataSources.find(GROUP_PART, null).size());
-        assertEquals(0, dataSources.find(GROUP_PART, "").size());
+            assertEquals(0, dataSources.find(GROUP_PART, null).size());
+            assertEquals(0, dataSources.find(GROUP_PART, "").size());
 
-        assertEquals(0, dataSources.find(GROUP_PART, "unknown").size());
+            assertEquals(0, dataSources.find(GROUP_PART, "unknown").size());
 
-        assertEquals(3, dataSources.find(GROUP_PART, "*").size());
-        assertEquals(3, dataSources.find(GROUP_PART, "default").size());
-        assertEquals(3, dataSources.find(GROUP_PART, "d*").size());
-        assertEquals(3, dataSources.find(GROUP_PART, "d??????").size());
+            assertEquals(3, dataSources.find(GROUP_PART, "*").size());
+            assertEquals(3, dataSources.find(GROUP_PART, "default").size());
+            assertEquals(3, dataSources.find(GROUP_PART, "d*").size());
+            assertEquals(3, dataSources.find(GROUP_PART, "d??????").size());
+        }
 
     }
 
@@ -84,15 +87,16 @@ public class DataSourcesTest {
 
     @Test
     public void shouldGetAllDataSource() {
-        final DataSources dataSources = dataSources();
-
-        assertEquals("unknown", dataSources.get(0).getFileName());
-        assertEquals("pom.xml", dataSources.get(1).getFileName());
-        assertEquals("server.invalid?foo=bar", dataSources.get(2).getFileName());
-        assertEquals(3, dataSources.toList().size());
-        assertEquals(3, dataSources.toMap().size());
-        assertEquals(3, dataSources.size());
-        assertFalse(dataSources.isEmpty());
+        try (DataSources dataSources = dataSources()) {
+
+            assertEquals("unknown", dataSources.get(0).getFileName());
+            assertEquals("pom.xml", dataSources.get(1).getFileName());
+            assertEquals("server.invalid?foo=bar", dataSources.get(2).getFileName());
+            assertEquals(3, dataSources.toList().size());
+            assertEquals(3, dataSources.toMap().size());
+            assertEquals(3, dataSources.size());
+            assertFalse(dataSources.isEmpty());
+        }
     }
 
     @Test
@@ -133,6 +137,15 @@ public class DataSourcesTest {
     }
 
     private static DataSource urlDataSource() {
-        return DataSourceFactory.create(ANY_URL);
+        return DataSourceFactory.fromUrl("server.invalid?foo=bar", "default", toUrl(ANY_URL), "plain/text", UTF_8);
     }
+
+    private static URL toUrl(String value) {
+        try {
+            return new URL(value);
+        } catch (MalformedURLException e) {
+            throw new RuntimeException("Failed to create URL:" + value, e);
+        }
+    }
+
 }