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/01/08 21:27:01 UTC
[freemarker-generator] 01/03: FREEMARKER-161 [freemarker-generator]
Fix broken usage of STDIN
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 <si...@gmail.com>
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