This is an automated email from the ASF dual-hosted git repository. sgoeschl pushed a commit to branch FREEMARKER-161 in repository https://gitbox.apache.org/repos/asf/freemarker-generator.git
commit b8d991f0082f9102ced7bba37c43ad3e088be75a Author: Siegfried Goeschl <[email protected]> AuthorDate: Thu Jan 7 23:31:06 2021 +0100 FREEMARKER-161 [freemarker-generator] Fix broken usage of STDIN --- freemarker-generator-cli/LICENSE | 6 ++++++ .../app/templates/freemarker-generator/info.ftl | 2 +- .../cli/config/OutputGeneratorsSupplier.java | 24 ++++++++++++++++++++-- .../src/site/markdown/cli/concepts/data-sources.md | 11 ++++++++++ .../src/site/markdown/cli/concepts/design-goals.md | 1 + .../src/site/markdown/cli/concepts/passing-data.md | 2 +- .../site/markdown/cli/concepts/template-loading.md | 2 +- licences/LICENCE_javafaker.txt | 13 ++++++++++++ 8 files changed, 56 insertions(+), 5 deletions(-) diff --git a/freemarker-generator-cli/LICENSE b/freemarker-generator-cli/LICENSE index caca01c..f6a36bd 100644 --- a/freemarker-generator-cli/LICENSE +++ b/freemarker-generator-cli/LICENSE @@ -335,6 +335,12 @@ See licencens/LICENSE_ASL-2.0.txt for more information ... ============================================================================== +Binary distributions of this product bundles java-faker which +is available under Apache License Version 2.0. +See licencens/LICENSE_ASL-2.0.txt for more information ... + +============================================================================== + Binary distributions of this product bundles poi which is available under Apache License Version 2.0. See licencens/LICENSE_ASL-2.0.txt for more information ... diff --git a/freemarker-generator-cli/src/app/templates/freemarker-generator/info.ftl b/freemarker-generator-cli/src/app/templates/freemarker-generator/info.ftl index 1a34880..ac927ab 100644 --- a/freemarker-generator-cli/src/app/templates/freemarker-generator/info.ftl +++ b/freemarker-generator-cli/src/app/templates/freemarker-generator/info.ftl @@ -47,7 +47,7 @@ FreeMarker Generator Tools FreeMarker Generator DataSources ------------------------------------------------------------------------------ <#list dataSources?values as ds> -[#${ds?counter}]: name=${ds.name}, group=${ds.group}, fileName=${ds.fileName} mimeType=${ds.mimeType}, charset=${ds.charset}, length=${ds.length} Bytes +[#${ds?counter}]: name=${ds.name}, group=${ds.group}, fileName=${ds.fileName}, mimeType=${ds.mimeType}, charset=${ds.charset}, length=${ds.length} Bytes URI : ${ds.uri} </#list> </#if> diff --git a/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/config/OutputGeneratorsSupplier.java b/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/config/OutputGeneratorsSupplier.java index e7fad76..b0a6dbb 100644 --- a/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/config/OutputGeneratorsSupplier.java +++ b/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/config/OutputGeneratorsSupplier.java @@ -1,14 +1,18 @@ package org.apache.freemarker.generator.cli.config; +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.DataSourcesSupplier; import org.apache.freemarker.generator.base.output.OutputGenerator; import org.apache.freemarker.generator.base.template.TemplateTransformation; import org.apache.freemarker.generator.base.template.TemplateTransformationsBuilder; +import org.apache.freemarker.generator.base.util.UriUtils; import org.apache.freemarker.generator.cli.picocli.OutputGeneratorDefinition; import org.apache.freemarker.generator.cli.picocli.TemplateOutputDefinition; import org.apache.freemarker.generator.cli.picocli.TemplateSourceDefinition; +import java.net.URI; import java.util.ArrayList; import java.util.Collection; import java.util.List; @@ -16,6 +20,11 @@ import java.util.Map; import java.util.function.Supplier; import java.util.stream.Collectors; +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.FreeMarkerConstants.Location.STDIN; +import static org.apache.freemarker.generator.base.mime.Mimetypes.MIME_TEXT_PLAIN; + public class OutputGeneratorsSupplier implements Supplier<List<OutputGenerator>> { private final Settings settings; @@ -71,7 +80,7 @@ public class OutputGeneratorsSupplier implements Supplier<List<OutputGenerator>> final OutputGenerator outputGenerator = new OutputGenerator( templateTransformation.getTemplateSource(), templateTransformation.getTemplateOutput(), - dataSources(definition), + dataSources(settings, definition), dataModels(definition) ); result.add(outputGenerator); @@ -80,9 +89,15 @@ public class OutputGeneratorsSupplier implements Supplier<List<OutputGenerator>> return result; } - private List<DataSource> dataSources(OutputGeneratorDefinition outputGeneratorDefinition) { + private List<DataSource> dataSources(Settings settings, OutputGeneratorDefinition outputGeneratorDefinition) { final ArrayList<DataSource> result = new ArrayList<>(); + // Add optional data source from STDIN at the start of the list since + // this allows easy sequence slicing in FreeMarker. + if (settings.isReadFromStdin()) { + result.add(0, stdinDataSource()); + } + final DataSourcesSupplier sharedDataSourcesSupplier = new DataSourcesSupplier( settings.getSources(), settings.getSourceIncludePattern(), @@ -107,4 +122,9 @@ public class OutputGeneratorsSupplier implements Supplier<List<OutputGenerator>> private Map<String, Object> dataModels(OutputGeneratorDefinition outputGeneratorDefinition) { return new DataModelSupplier(outputGeneratorDefinition.getDataModels()).get(); } + + private static DataSource stdinDataSource() { + final URI uri = UriUtils.toUri(Location.SYSTEM, STDIN); + return DataSourceFactory.fromInputStream(STDIN, DEFAULT_GROUP, uri, System.in, MIME_TEXT_PLAIN, UTF_8); + } } 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 53dd6bf..e6e4b3e 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 @@ -83,6 +83,17 @@ URI : file:/Users/sgoeschl/work/github/apache/freemarker-generator/freemarker-ge URI : file:/Users/sgoeschl/work/github/apache/freemarker-generator/freemarker-generator-cli/target/appassembler/examples/data/json/swagger-spec.json``` ``` +Access to `stdin` is implemented as `DataSource` - please not that `stdin` is read lazy to cater for arbitrary large input data + +``` +cat examples/data/csv/contract.csv | bin/freemarker-generator -t freemarker-generator/info.ftl --stdin + +FreeMarker Generator DataSources +------------------------------------------------------------------------------ +[#1]: name=stdin, group=default, fileName=stdin mimeType=text/plain, charset=UTF-8, length=-1 Bytes +URI : system:///stdin +``` + ### Selecting A DataSource After loading one or more `DataSource` they are accessible as `dataSource` map in the FreeMarker model diff --git a/freemarker-generator-cli/src/site/markdown/cli/concepts/design-goals.md b/freemarker-generator-cli/src/site/markdown/cli/concepts/design-goals.md index 0d2e07c..1cf4634 100644 --- a/freemarker-generator-cli/src/site/markdown/cli/concepts/design-goals.md +++ b/freemarker-generator-cli/src/site/markdown/cli/concepts/design-goals.md @@ -13,5 +13,6 @@ * XML & XPath is supported by FreeMarker [out-of-the-box](http://freemarker.org/docs/xgui.html) * Support for reading a data source content from STDIN to integrate with command line tools * Support execution of arbitrary commands using [Apache Commons Exec](https://commons.apache.org/proper/commons-exec/) +* Support creation of test data using [JavaFaker](https://github.com/DiUS/java-faker/) * Add some commonly useful information such as `System Properties`, `Enviroment Variables` * Support embedding the code in existing applications \ No newline at end of file diff --git a/freemarker-generator-cli/src/site/markdown/cli/concepts/passing-data.md b/freemarker-generator-cli/src/site/markdown/cli/concepts/passing-data.md index d181c01..3ff42cc 100644 --- a/freemarker-generator-cli/src/site/markdown/cli/concepts/passing-data.md +++ b/freemarker-generator-cli/src/site/markdown/cli/concepts/passing-data.md @@ -5,7 +5,7 @@ * System properties * Parameters -### User-Supplied System Poperties +### User-Supplied System Properties User-supplied system properties are added to the JVM's system properties diff --git a/freemarker-generator-cli/src/site/markdown/cli/concepts/template-loading.md b/freemarker-generator-cli/src/site/markdown/cli/concepts/template-loading.md index 9de70b6..14f945a 100644 --- a/freemarker-generator-cli/src/site/markdown/cli/concepts/template-loading.md +++ b/freemarker-generator-cli/src/site/markdown/cli/concepts/template-loading.md @@ -47,7 +47,7 @@ irrelevant therefore any template file outside of the template loader directorie This example loads the `info.ftl` directly from a GitHub URL ``` -freemarker-generator -t https://raw.githubusercontent.com/apache/freemarker-generator/master/freemarker-generator-cli/templates/info.ftl +freemarker-generator -t https://raw.githubusercontent.com/apache/freemarker-generator/master/freemarker-generator-cli/src/app/templates/freemarker-generator/info.ftl ``` ### Interactive Template Loading diff --git a/licences/LICENCE_javafaker.txt b/licences/LICENCE_javafaker.txt new file mode 100644 index 0000000..896c78c --- /dev/null +++ b/licences/LICENCE_javafaker.txt @@ -0,0 +1,13 @@ +Copyright 2014 DiUS Computing + +Licensed 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. \ No newline at end of file
