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

Reply via email to