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; } + }
