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 <[email protected]>
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;
     }
+
 }

Reply via email to