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 1f3dbeae714eda4bc1ba4587d6a64270517e29e3
Author: Siegfried Goeschl <[email protected]>
AuthorDate: Fri Jan 8 22:21:14 2021 +0100

    FREEMARKER-161 [freemarker-generator] Improve command line error handling
---
 .../template/TemplateTransformationsBuilder.java   |  3 ++-
 .../cli/config/OutputGeneratorsSupplier.java       |  3 ++-
 .../cli/picocli/OutputGeneratorDefinition.java     |  5 +++-
 .../freemarker/generator/cli/ExamplesTest.java     | 16 ------------
 .../freemarker/generator/cli/PicocliTest.java      | 30 ++++++++++------------
 5 files changed, 22 insertions(+), 35 deletions(-)

diff --git 
a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/template/TemplateTransformationsBuilder.java
 
b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/template/TemplateTransformationsBuilder.java
index 4945d52..44e9676 100644
--- 
a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/template/TemplateTransformationsBuilder.java
+++ 
b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/template/TemplateTransformationsBuilder.java
@@ -55,7 +55,7 @@ public class TemplateTransformationsBuilder {
     /** Optional exclude patterns for resolving source templates or template 
directories */
     private final List<String> excludes;
 
-    /** Optional output file(s) or directory - if none is defined everything 
is written to a user-supplied writer */
+    /** Optional output file(s) or directory - if none is defined everything 
is written to STDOUT */
     private final List<String> outputs;
 
     /** Optional output encoding */
@@ -157,6 +157,7 @@ public class TemplateTransformationsBuilder {
     }
 
     private void validate() {
+        // TODO FREEMARKER-161 08.01.2021 sgoeschl refactor code
         // Validate.isTrue(interactiveTemplate != null || 
!templateSources.isEmpty(), "Interactive template does not support multiple 
sources");
         Validate.isTrue(interactiveTemplate == null || 
templateSources.isEmpty(), "No template was provided");
     }
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 acbe370..f41c7ab 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
@@ -21,6 +21,7 @@ import java.util.function.Supplier;
 import java.util.stream.Collectors;
 
 import static java.nio.charset.StandardCharsets.UTF_8;
+import static java.util.Objects.requireNonNull;
 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;
@@ -43,7 +44,7 @@ public class OutputGeneratorsSupplier implements 
Supplier<List<OutputGenerator>>
 
     private List<OutputGenerator> outputGenerator(OutputGeneratorDefinition 
definition) {
         final List<OutputGenerator> result = new ArrayList<>();
-        final TemplateSourceDefinition templateSourceDefinition = 
definition.getTemplateSourceDefinition();
+        final TemplateSourceDefinition templateSourceDefinition = 
requireNonNull(definition.getTemplateSourceDefinition());
         final TemplateOutputDefinition templateOutputDefinition = 
definition.getTemplateOutputDefinition();
         final TemplateTransformationsBuilder builder = 
TemplateTransformationsBuilder.builder();
 
diff --git 
a/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/picocli/OutputGeneratorDefinition.java
 
b/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/picocli/OutputGeneratorDefinition.java
index d35c277..f99df35 100644
--- 
a/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/picocli/OutputGeneratorDefinition.java
+++ 
b/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/picocli/OutputGeneratorDefinition.java
@@ -42,6 +42,10 @@ public class OutputGeneratorDefinition {
     public DataModelDefinition dataModelDefinition;
 
     public void validate(CommandLine commandLine) {
+        if (templateSourceDefinition == null) {
+            throw new ParameterException(commandLine, "No template defined to 
be rendered");
+        }
+
         if (templateOutputDefinition != null && 
templateOutputDefinition.outputs.size() > 1) {
             throw new ParameterException(commandLine, "More than one output 
defined for a template");
         }
@@ -52,7 +56,6 @@ public class OutputGeneratorDefinition {
                     throw new ParameterException(commandLine, "No wildcards 
supported for data source: " + source);
                 }
             }
-
         }
     }
 
diff --git 
a/freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/ExamplesTest.java
 
b/freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/ExamplesTest.java
index 736be95..fce124b 100644
--- 
a/freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/ExamplesTest.java
+++ 
b/freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/ExamplesTest.java
@@ -172,22 +172,6 @@ public class ExamplesTest extends AbstractMainTest {
         assertEquals("application/json", execute(args + " -i 
${dataSources[\"users\"].mimeType}"));
     }
 
-    /**
-     * @Test public void shouldNotShadowDataSourcesInFTL() throws IOException {
-     * final String args = "empty=examples/data/json/github-users.json";
-     * <p>
-     * // check shadowing of "isEmpty"
-     * assertEquals("false", 
execute("empty=examples/data/json/github-users.json -i 
${dataSources.empty?c}"));
-     * // DataSources#isEmpty shadows the data source "empty"
-     * // assertEquals("false", 
execute("empty=examples/data/json/github-users.json -i 
${DataSources[\"empty\"]}"));
-     * assertEquals("empty", 
execute("empty=examples/data/json/github-users.json -i 
${dataSources.get(\"empty\").name}"));
-     * <p>
-     * // check shadowing of "find"
-     * // assertEquals("find", 
execute("find=examples/data/json/github-users.json -i 
${dataSources.find.name}"));
-     * // assertEquals("find", 
execute("find=examples/data/json/github-users.json -i 
${DataSources[\"find\"].name}"));
-     * }
-     */
-
     @Test
     @Ignore("Manual test to check memory consumption and resource handling")
     public void shouldCloseAllResources() throws IOException {
diff --git 
a/freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/PicocliTest.java
 
b/freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/PicocliTest.java
index 4cf5be3..4276592 100644
--- 
a/freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/PicocliTest.java
+++ 
b/freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/PicocliTest.java
@@ -29,7 +29,6 @@ import static org.junit.Assert.assertTrue;
 public class PicocliTest {
 
     private static final String ANY_TEMPLATE = "any.ftl";
-    private static final String OTHER_TEMPLATE = "other.ftl";
     private static final String INTERACTIVE_TEMPLATE = "interactive-template";
     private static final String ANY_FILE = "users.csv";
     private static final String OTHER_FILE = "transctions.csv";
@@ -154,24 +153,23 @@ public class PicocliTest {
         final List<OutputGeneratorDefinition> defs = 
main.outputGeneratorDefinitions;
         assertEquals(4, defs.size());
 
-        
assertTrue(defs.get(0).templateSourceDefinition.template.equals("template01.ftl"));
-        assertTrue(defs.get(0).dataSourceDefinition.dataSources.size() == 1);
-        
assertTrue(defs.get(0).dataSourceDefinition.dataSources.get(0).equals("datasource10.csv"));
-        assertTrue(defs.get(0).templateOutputDefinition == null);
+        assertEquals("template01.ftl", 
defs.get(0).templateSourceDefinition.template);
+        assertEquals(1, defs.get(0).dataSourceDefinition.dataSources.size());
+        assertEquals("datasource10.csv", 
defs.get(0).dataSourceDefinition.dataSources.get(0));
+        assertNull(defs.get(0).templateOutputDefinition);
 
-        
assertTrue(defs.get(1).templateSourceDefinition.template.equals("template02.ftl"));
-        assertTrue(defs.get(1).dataSourceDefinition.dataSources.size() == 2);
-        
assertTrue(defs.get(1).dataSourceDefinition.dataSources.get(0).equals("datasource20.csv"));
-        
assertTrue(defs.get(1).dataSourceDefinition.dataSources.get(1).equals("datasource21.csv"));
-        assertTrue(defs.get(0).templateOutputDefinition == null);
+        assertEquals("template02.ftl", 
defs.get(1).templateSourceDefinition.template);
+        assertEquals(2, defs.get(1).dataSourceDefinition.dataSources.size());
+        assertEquals("datasource20.csv", 
defs.get(1).dataSourceDefinition.dataSources.get(0));
+        assertEquals("datasource21.csv", 
defs.get(1).dataSourceDefinition.dataSources.get(1));
+        assertNull(defs.get(0).templateOutputDefinition);
 
-        
assertTrue(defs.get(2).templateSourceDefinition.interactiveTemplate.equals("some-interactive-template01"));
-        assertTrue(defs.get(2).dataSourceDefinition.dataSources.size() == 1);
-        
assertTrue(defs.get(2).dataSourceDefinition.dataSources.get(0).equals("datasource30.csv"));
-        
assertTrue(defs.get(2).templateOutputDefinition.outputs.get(0).equals("out.txt"));
-
-        
assertTrue(defs.get(3).templateSourceDefinition.interactiveTemplate.equals("some-interactive-template02"));
+        assertEquals("some-interactive-template01", 
defs.get(2).templateSourceDefinition.interactiveTemplate);
+        assertEquals(1, defs.get(2).dataSourceDefinition.dataSources.size());
+        assertEquals("datasource30.csv", 
defs.get(2).dataSourceDefinition.dataSources.get(0));
+        assertEquals("out.txt", 
defs.get(2).templateOutputDefinition.outputs.get(0));
 
+        assertEquals("some-interactive-template02", 
defs.get(3).templateSourceDefinition.interactiveTemplate);
     }
 
     private static Main parse(String... args) {

Reply via email to