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) {
