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 e73f23d97c913f42c1783d762dea885cd395808b Author: Siegfried Goeschl <[email protected]> AuthorDate: Mon Nov 9 09:33:08 2020 +0100 FREEMARKER-161 [freemarker-generator] Allow multiple transformations on the CLI --- .../base/template/TemplateTransformation.java | 17 +++++ .../generator/cli/config/CompositeGroupDemo.java | 77 ++++++++++++++++++++++ 2 files changed, 94 insertions(+) diff --git a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/template/TemplateTransformation.java b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/template/TemplateTransformation.java index 8c19478..1d0ce7d 100644 --- a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/template/TemplateTransformation.java +++ b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/template/TemplateTransformation.java @@ -16,6 +16,8 @@ */ package org.apache.freemarker.generator.base.template; +import org.apache.freemarker.generator.base.datasource.DataSources; + import static java.util.Objects.requireNonNull; /** @@ -26,11 +28,21 @@ public class TemplateTransformation { /** Source of template */ private final TemplateSource templateSource; + /** Data sources being transformed */ + private final DataSources dataSources; + /** Output of template */ private final TemplateOutput templateOutput; public TemplateTransformation(TemplateSource templateSource, TemplateOutput templateOutput) { this.templateSource = requireNonNull(templateSource); + this.dataSources = null; + this.templateOutput = requireNonNull(templateOutput); + } + + public TemplateTransformation(TemplateSource templateSource, DataSources dataSources, TemplateOutput templateOutput) { + this.templateSource = requireNonNull(templateSource); + this.dataSources = requireNonNull(dataSources); this.templateOutput = requireNonNull(templateOutput); } @@ -42,10 +54,15 @@ public class TemplateTransformation { return templateOutput; } + public DataSources getDataSources() { + return dataSources; + } + @Override public String toString() { return "TemplateTransformation{" + "templateSource=" + templateSource + + "dataSources=" + dataSources + ", templateOutput=" + templateOutput + '}'; } diff --git a/freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/config/CompositeGroupDemo.java b/freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/config/CompositeGroupDemo.java new file mode 100644 index 0000000..45bad76 --- /dev/null +++ b/freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/config/CompositeGroupDemo.java @@ -0,0 +1,77 @@ +package org.apache.freemarker.generator.cli.config; + +import org.apache.commons.lang3.Validate; +import picocli.CommandLine; +import picocli.CommandLine.ArgGroup; +import picocli.CommandLine.Command; +import picocli.CommandLine.Option; + +import java.util.List; + +@Command(name = "repeating-composite-demo") +public class CompositeGroupDemo { + + @ArgGroup(exclusive = false, multiplicity = "1..*") + List<OutputGenerator> outputGenerators; + + static class OutputDefinition { + @Option(names = { "-o", "--output" }, description = "output files or directories") List<String> outputs; + } + + static class DataSourceDefinition { + @Option(names = { "-s", "--data-source" }, description = "data source used for rendering") List<String> dataSources; + } + + static class TemplateDefinition { + @Option(names = { "-t", "--template" }, description = "templates to process") String template; + @Option(names = { "-i", "--interactive" }, description = "interactive template to process") public String interactiveTemplate; + } + + static class OutputGenerator { + @ArgGroup(multiplicity = "1") + TemplateDefinition templateDefinition; + + @ArgGroup(exclusive = false) + DataSourceDefinition dataSourceDefinition; + + @ArgGroup(exclusive = false) + OutputDefinition outputDefinition; + } + + public static void main(String[] args) { + final CompositeGroupDemo compositeGroupDemo = new CompositeGroupDemo(); + final CommandLine cmd = new CommandLine(compositeGroupDemo); + + cmd.parseArgs( + "-t", "template01.ftl", "-s", "datasource10.csv", + "-t", "template02.ftl", "-s", "datasource20.csv", "-s", "datasource21.csv", + "-i", "some-interactive-template01", "-s", "datasource30.csv", "-o", "out.txt", + "-i", "some-interactive-template02" + ); + + final List<OutputGenerator> outputGenerators = compositeGroupDemo.outputGenerators; + + Validate.notNull(outputGenerators); + Validate.isTrue(outputGenerators.size() == 4); + + Validate.isTrue(outputGenerators.get(0).templateDefinition.template.equals("template01.ftl")); + Validate.isTrue(outputGenerators.get(0).dataSourceDefinition.dataSources.size() == 1); + Validate.isTrue(outputGenerators.get(0).dataSourceDefinition.dataSources.get(0).equals("datasource10.csv")); + Validate.isTrue(outputGenerators.get(0).outputDefinition == null); + + Validate.isTrue(outputGenerators.get(1).templateDefinition.template.equals("template02.ftl")); + Validate.isTrue(outputGenerators.get(1).dataSourceDefinition.dataSources.size() == 2); + Validate.isTrue(outputGenerators.get(1).dataSourceDefinition.dataSources.get(0).equals("datasource20.csv")); + Validate.isTrue(outputGenerators.get(1).dataSourceDefinition.dataSources.get(1).equals("datasource21.csv")); + Validate.isTrue(outputGenerators.get(0).outputDefinition == null); + + Validate.isTrue(outputGenerators.get(2).templateDefinition.interactiveTemplate.equals("some-interactive-template01")); + Validate.isTrue(outputGenerators.get(2).dataSourceDefinition.dataSources.size() == 1); + Validate.isTrue(outputGenerators.get(2).dataSourceDefinition.dataSources.get(0).equals("datasource30.csv")); + Validate.isTrue(outputGenerators.get(2).outputDefinition.outputs.get(0).equals("out.txt")); + + Validate.isTrue(outputGenerators.get(3).templateDefinition.interactiveTemplate.equals("some-interactive-template02")); + + return; + } +} \ No newline at end of file
