This is an automated email from the ASF dual-hosted git repository. sgoeschl pushed a commit to branch FREEMARKER-174 in repository https://gitbox.apache.org/repos/asf/freemarker-generator.git
commit 9dbf836f629f891ad9e82c1293bbef74c36e97a5 Author: Siegfried Goeschl <[email protected]> AuthorDate: Tue Feb 9 00:58:22 2021 +0100 FREEMARKER-174 [freemarker-generator] Don't expose "DataSources" in the FreeMarker context --- .../generator/base/datasource/DataSources.java | 6 +- .../datasource/loader/HttpDataSourceLoader.java | 3 +- .../generator/datasource/DataSourcesTest.java | 1 + freemarker-generator-cli/CHANGELOG.md | 4 +- .../src/app/examples/templates/datasources.ftl | 3 +- .../src/app/scripts/run-examples.bat | 3 + .../src/app/scripts/run-examples.sh | 5 +- .../cli/config/ConfigurationSupplier.java | 4 -- .../cli/model/GeneratorObjectWrapper.java | 46 ------------- .../generator/cli/task/FreeMarkerTask.java | 3 +- .../src/site/markdown/cli/concepts/data-sources.md | 75 +++++++++++++++++++++- .../freemarker/generator/cli/ManualTest.java | 2 +- .../cli/config/ConfigurationSupplierTest.java | 2 +- .../generator/cli/config/SuppliersTest.java | 3 +- 14 files changed, 96 insertions(+), 64 deletions(-) diff --git a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/DataSources.java b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/DataSources.java index 4df5c0c..fcb3432 100644 --- a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/DataSources.java +++ b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/DataSources.java @@ -56,7 +56,7 @@ public class DataSources implements Closeable { } /** - * Get the given metadata value for all data sources. + * Get the requested metadata value for all data sources. * * @param key key of the metadata part * @return list of metadata values @@ -68,9 +68,9 @@ public class DataSources implements Closeable { } /** - * Get the unique groups of all data sources. + * Get a list of unique groups of all data sources. * - * @return data source names + * @return list of groups */ public List<String> getGroups() { return dataSources.stream() 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 aa3d8ad..95a5700 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 @@ -44,7 +44,8 @@ public class HttpDataSourceLoader implements DataSourceLoader { final NamedUri namedUri = NamedUriStringParser.parse(source); final URI uri = namedUri.getUri(); final String group = namedUri.getGroupOrDefault(DEFAULT_GROUP); - final Charset charset = namedUri.getCharset(); + // if no charset is defined here we delegate that to the underlying data source + final Charset charset = namedUri.getCharsetOrDefault(null); final String mimeType = namedUri.getMimeType(); final URL url = toUrl(uri); final String name = namedUri.getNameOrDefault(UriUtils.toStringWithoutFragment(uri)); 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 030ea62..85bdedc 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 @@ -101,6 +101,7 @@ public class DataSourcesTest { @Test public void shouldGetMetadataParts() { assertEquals(asList("", "pom.xml", ""), dataSources().getMetadata("filename")); + assertEquals(asList("default", "default", "default"), dataSources().getMetadata("group")); assertEquals(asList("", "xml", ""), dataSources().getMetadata("extension")); assertEquals(asList("unknown", "pom.xml", "server.invalid?foo=bar"), dataSources().getMetadata("name")); } diff --git a/freemarker-generator-cli/CHANGELOG.md b/freemarker-generator-cli/CHANGELOG.md index 7dbdd16..9fa802d 100644 --- a/freemarker-generator-cli/CHANGELOG.md +++ b/freemarker-generator-cli/CHANGELOG.md @@ -43,6 +43,7 @@ All notable changes to this project will be documented in this file. We try to a * [FREEMARKER-127] Site build fails with missing "org/apache/maven/doxia/siterenderer/DocumentContent" ### Internal +* [FREEMARKER-174] Don't expose "DataSources" in the FreeMarker context * [FREEMARKER-172] Refactor DataSourceFactory * [FREEMARKER-164] Use default unsafe FreeMarker configuration * [FREEMARKER-153] FreeMarker Generator release preparations @@ -71,4 +72,5 @@ All notable changes to this project will be documented in this file. We try to a [FREEMARKER-164]: https://issues.apache.org/jira/browse/FREEMARKER-164 [FREEMARKER-168]: https://issues.apache.org/jira/browse/FREEMARKER-168 [FREEMARKER-172]: https://issues.apache.org/jira/browse/FREEMARKER-172 -[FREEMARKER-173]: https://issues.apache.org/jira/browse/FREEMARKER-175 +[FREEMARKER-173]: https://issues.apache.org/jira/browse/FREEMARKER-173 +[FREEMARKER-174]: https://issues.apache.org/jira/browse/FREEMARKER-174 diff --git a/freemarker-generator-cli/src/app/examples/templates/datasources.ftl b/freemarker-generator-cli/src/app/examples/templates/datasources.ftl index 364a7ba..bfb7675 100644 --- a/freemarker-generator-cli/src/app/examples/templates/datasources.ftl +++ b/freemarker-generator-cli/src/app/examples/templates/datasources.ftl @@ -56,7 +56,8 @@ Invoke Arbitrary Methods On DataSource Name : ${dataSource.name} Group : ${dataSource.group} Nr of lines : ${dataSource.lines?size} -Content Type : ${dataSource.contentType} +ContentType : ${dataSource.contentType} +MimeType : ${dataSource.mimeType} Charset : ${dataSource.charset} Extension : ${dataSource.extension} Nr of chars : ${dataSource.text?length} diff --git a/freemarker-generator-cli/src/app/scripts/run-examples.bat b/freemarker-generator-cli/src/app/scripts/run-examples.bat index 5fc0e1c..a957502 100644 --- a/freemarker-generator-cli/src/app/scripts/run-examples.bat +++ b/freemarker-generator-cli/src/app/scripts/run-examples.bat @@ -44,6 +44,9 @@ echo "examples\templates\demo.ftl" echo "examples\templates\datasources.ftl" $FREEMARKER_CMD -t examples\templates\datasources.ftl -s :data=examples/data > target\out\datasources.txt +echo "examples\templates\datasources.ftl" +$FREEMARKER_CMD -t examples\templates\datasources.ftl -s https://xkcd.com/info.0.json https://www.google.com > target\out\datasources.txt + REM ========================================================================= REM Interactive Mode REM ========================================================================= diff --git a/freemarker-generator-cli/src/app/scripts/run-examples.sh b/freemarker-generator-cli/src/app/scripts/run-examples.sh index d0f42b7..a8c64f6 100755 --- a/freemarker-generator-cli/src/app/scripts/run-examples.sh +++ b/freemarker-generator-cli/src/app/scripts/run-examples.sh @@ -47,7 +47,10 @@ $FREEMARKER_CMD -t examples/templates/demo.ftl README.md > target/out/demo.txt | ############################################################################# echo "examples/templates/datasources.ftl" -$FREEMARKER_CMD -t examples/templates/datasources.ftl -s :data=examples/data > target/out/datasources.txt || { echo >&2 "Test failed. Aborting."; exit 1; } +$FREEMARKER_CMD -t examples/templates/datasources.ftl -s :data=examples/data > target/out/file-datasources.txt || { echo >&2 "Test failed. Aborting."; exit 1; } + +echo "examples/templates/datasources.ftl" +$FREEMARKER_CMD -t examples/templates/datasources.ftl -s https://xkcd.com/info.0.json https://www.google.com > target/out/url-datasources.txt || { echo >&2 "Test failed. Aborting."; exit 1; } ############################################################################# # Interactive Mode diff --git a/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/config/ConfigurationSupplier.java b/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/config/ConfigurationSupplier.java index d936970..820f50d 100644 --- a/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/config/ConfigurationSupplier.java +++ b/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/config/ConfigurationSupplier.java @@ -20,7 +20,6 @@ import freemarker.cache.TemplateLoader; import freemarker.template.Configuration; import freemarker.template.Version; import org.apache.freemarker.generator.base.util.PropertiesTransformer; -import org.apache.freemarker.generator.cli.model.GeneratorObjectWrapper; import java.util.Properties; import java.util.function.Supplier; @@ -55,9 +54,6 @@ public class ConfigurationSupplier implements Supplier<Configuration> { // apply all "freemarker.configuration.setting" values configuration.setSettings(freeMarkerConfigurationSettings()); - // TODO sgoeschl 2021-02-05 Probably not needed at all since we use the map of data source - configuration.setObjectWrapper(new GeneratorObjectWrapper(FREEMARKER_VERSION)); - // override current configuration with caller-provided settings configuration.setDefaultEncoding(settings.getTemplateEncoding().name()); configuration.setLocale(settings.getLocale()); diff --git a/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/model/GeneratorObjectWrapper.java b/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/model/GeneratorObjectWrapper.java deleted file mode 100644 index 6ed0d39..0000000 --- a/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/model/GeneratorObjectWrapper.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * 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.cli.model; - -import freemarker.template.DefaultMapAdapter; -import freemarker.template.DefaultObjectWrapper; -import freemarker.template.TemplateModel; -import freemarker.template.TemplateModelException; -import freemarker.template.Version; -import org.apache.freemarker.generator.base.datasource.DataSources; - -/** - * Custom FreeMarker object wrapper to expose <code>DataSources</code> - * as <code>Map</code> in the FreeMarker data model. Please note that - * this hides ALL operation exposed by "DataSources". - */ -public class GeneratorObjectWrapper extends DefaultObjectWrapper { - - public GeneratorObjectWrapper(Version incompatibleImprovements) { - super(incompatibleImprovements); - } - - @Override - protected TemplateModel handleUnknownType(Object obj) throws TemplateModelException { - if (obj instanceof DataSources) { - final DataSources dataSources = (DataSources) obj; - return DefaultMapAdapter.adapt((dataSources).toMap(), this); - } - - return super.handleUnknownType(obj); - } -} diff --git a/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/task/FreeMarkerTask.java b/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/task/FreeMarkerTask.java index 1fe6f57..4ae0377 100644 --- a/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/task/FreeMarkerTask.java +++ b/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/task/FreeMarkerTask.java @@ -116,7 +116,8 @@ public class FreeMarkerTask implements Callable<Integer> { private static Map<String, Object> toTemplateDataModel(DataSources dataSources, Map<String, Object>... maps) { final Map<String, Object> result = new HashMap<>(); Arrays.stream(maps).forEach(result::putAll); - result.put(Model.DATASOURCES, dataSources); + // expose only the map and not the "DataSources" instance (see FREEMARKER-174) + result.put(Model.DATASOURCES, dataSources.toMap()); return result; } diff --git a/freemarker-generator-cli/src/site/markdown/cli/concepts/data-sources.md b/freemarker-generator-cli/src/site/markdown/cli/concepts/data-sources.md index 7ad0daf..e92df60 100644 --- a/freemarker-generator-cli/src/site/markdown/cli/concepts/data-sources.md +++ b/freemarker-generator-cli/src/site/markdown/cli/concepts/data-sources.md @@ -210,11 +210,18 @@ group : default ### Inspecting A DataSource ``` -> freemarker-generator -t examples/templates/datasources.ftl user:csv=examples/data/csv/transactions.csv#delimiter=TAB +> freemarker-generator \ + -t examples/templates/datasources.ftl \ + transactions:csv=examples/data/csv/transactions.csv#delimiter=TAB \ + https://xkcd.com/info.0.json \ + envvars=env:/// + +transactions +============================================================================== Invoke Arbitrary Methods On DataSource --------------------------------------------------------------------------- -Name : user +Name : transactions Group : csv Nr of lines : 101 Content Type : text/csv @@ -231,7 +238,7 @@ extension : csv basename : transactions filename : transactions.csv filepath : /Users/sgoeschl/work/github/apache/freemarker-generator/freemarker-generator-cli/target/appassembler/examples/data/csv -name : user +name : transactions mimetype : text/csv uri : file:/Users/sgoeschl/work/github/apache/freemarker-generator/freemarker-generator-cli/target/appassembler/examples/data/csv/transactions.csv group : csv @@ -239,6 +246,68 @@ group : csv Iterating Over Properties Of A Datasource --------------------------------------------------------------------------- delimiter : TAB + +https://xkcd.com/info.0.json +============================================================================== + +Invoke Arbitrary Methods On DataSource +--------------------------------------------------------------------------- +Name : https://xkcd.com/info.0.json +Group : default +Nr of lines : 1 +Content Type : application/json +Charset : UTF-8 +Extension : +Nr of chars : 330 +Nr of bytes : 330 +File name : +URI schema : https + +Iterating Over Metadata Of A Datasource +--------------------------------------------------------------------------- +extension : +basename : +filename : +filepath : / +name : https://xkcd.com/info.0.json +mimetype : application/json +uri : https://xkcd.com/info.0.json +group : default + +Iterating Over Properties Of A Datasource +--------------------------------------------------------------------------- + +envvars +============================================================================== + +Invoke Arbitrary Methods On DataSource +--------------------------------------------------------------------------- +Name : envvars +Group : default +Nr of lines : 36 +Content Type : text/plain +Charset : UTF-8 +Extension : +Nr of chars : 1,476 +Nr of bytes : 1,478 +File name : +URI schema : env + +Iterating Over Metadata Of A Datasource +--------------------------------------------------------------------------- +extension : +basename : +filename : +filepath : / +name : envvars +mimetype : text/plain +uri : env:/// +group : default + +Iterating Over Properties Of A Datasource +--------------------------------------------------------------------------- + + ``` diff --git a/freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/ManualTest.java b/freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/ManualTest.java index 1e6600a..b9cce26 100644 --- a/freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/ManualTest.java +++ b/freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/ManualTest.java @@ -24,7 +24,7 @@ import java.io.IOException; public class ManualTest extends AbstractMainTest { // private static final String CMD = "-V"; - private static final String CMD = "-t src/app/examples/templates/datasources.ftl -s :csv-data=src/app/examples/data/csv#separator=COLON https://xkcd.com/info.0.json envvars=env:///"; + private static final String CMD = "-t src/app/examples/templates/datasources.ftl transactions:csv=src/app/examples/data/csv/transactions.csv#delimiter=TAB https://xkcd.com/info.0.json envvars=env:///"; @Override public String execute(String commandLine) throws IOException { diff --git a/freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/config/ConfigurationSupplierTest.java b/freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/config/ConfigurationSupplierTest.java index 67721b9..3c8f6ef 100644 --- a/freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/config/ConfigurationSupplierTest.java +++ b/freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/config/ConfigurationSupplierTest.java @@ -43,7 +43,7 @@ public class ConfigurationSupplierTest { assertTrue(configuration.isOutputEncodingSet()); assertFalse(configuration.isCacheStorageExplicitlySet()); - assertTrue(configuration.isObjectWrapperExplicitlySet()); + assertFalse(configuration.isObjectWrapperExplicitlySet()); assertFalse(configuration.isOutputFormatExplicitlySet()); assertFalse(configuration.isTemplateExceptionHandlerExplicitlySet()); assertFalse(configuration.isTimeZoneExplicitlySet()); diff --git a/freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/config/SuppliersTest.java b/freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/config/SuppliersTest.java index 78b6d68..a12cb1d 100644 --- a/freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/config/SuppliersTest.java +++ b/freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/config/SuppliersTest.java @@ -39,6 +39,7 @@ import java.util.Properties; import static java.util.Collections.singletonList; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; @@ -94,7 +95,7 @@ public class SuppliersTest { assertNotNull(configuration.getSharedVariable(Model.TOOLS)); assertTrue(configuration.isTemplateLoaderExplicitlySet()); - assertTrue(configuration.isObjectWrapperExplicitlySet()); + assertFalse(configuration.isObjectWrapperExplicitlySet()); } @Test
