This is an automated email from the ASF dual-hosted git repository.

sgoeschl pushed a commit to branch FREEMARKER-188
in repository https://gitbox.apache.org/repos/asf/freemarker-generator.git


The following commit(s) were added to refs/heads/FREEMARKER-188 by this push:
     new 7d753fc  FREEMARKER-188 Cleanup code
7d753fc is described below

commit 7d753fc8d34446fe088e9123a94b985fc6afdd6f
Author: Siegfried Goeschl <[email protected]>
AuthorDate: Fri Sep 10 18:35:41 2021 +0200

    FREEMARKER-188 Cleanup code
---
 .../base/activation/CachingUrlDataSource.java      |  1 +
 .../freemarker/generator/base/mime/Mimetypes.java  |  3 +++
 .../base/mime/MimetypesFileTypeMapFactory.java     |  6 ++++-
 .../generator/base/output/OutputGenerator.java     |  1 +
 .../generator/base/util/OperatingSystem.java       |  2 +-
 .../generator/base/util/PropertiesTransformer.java |  3 ++-
 .../org/apache/freemarker/generator/cli/Main.java  | 13 ++++++----
 .../generator/cli/task/FreeMarkerTask.java         | 28 +++++++++++++++++-----
 .../freemarker/generator/cli/PicocliTest.java      |  2 +-
 9 files changed, 44 insertions(+), 15 deletions(-)

diff --git 
a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/activation/CachingUrlDataSource.java
 
b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/activation/CachingUrlDataSource.java
index 6616598..81b41c4 100644
--- 
a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/activation/CachingUrlDataSource.java
+++ 
b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/activation/CachingUrlDataSource.java
@@ -26,6 +26,7 @@ import java.net.URL;
  */
 public class CachingUrlDataSource extends URLDataSource {
 
+    /** Cached content type. */
     private String contentType;
 
     public CachingUrlDataSource(URL url) {
diff --git 
a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/mime/Mimetypes.java
 
b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/mime/Mimetypes.java
index c8bb76c..6f70b69 100644
--- 
a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/mime/Mimetypes.java
+++ 
b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/mime/Mimetypes.java
@@ -31,6 +31,9 @@ public class Mimetypes {
     public static final String MIME_TEXT_TSV = "text/tab-separated-values";
     public static final String MIME_TEXT_YAML = "text/yaml";
 
+    public static final String MIME_TYPE_ZIP = "application/zip";
+    public static final String MIME_TYPE_GZIP = "application/gzip";
+
     public static final String MIME_VENDOR_MS_EXCEL = 
"application/vnd.ms-excel xls XLS";
     public static final String MIME_VENDOR_OPEN_XML_SPREADSHEET = 
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet xlsx XLSX\"";
 }
diff --git 
a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/mime/MimetypesFileTypeMapFactory.java
 
b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/mime/MimetypesFileTypeMapFactory.java
index f8bbf2a..9445fe9 100644
--- 
a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/mime/MimetypesFileTypeMapFactory.java
+++ 
b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/mime/MimetypesFileTypeMapFactory.java
@@ -29,10 +29,12 @@ import static 
org.apache.freemarker.generator.base.mime.Mimetypes.MIME_TEXT_PLAI
 import static 
org.apache.freemarker.generator.base.mime.Mimetypes.MIME_TEXT_RTF;
 import static 
org.apache.freemarker.generator.base.mime.Mimetypes.MIME_TEXT_TSV;
 import static 
org.apache.freemarker.generator.base.mime.Mimetypes.MIME_TEXT_YAML;
+import static 
org.apache.freemarker.generator.base.mime.Mimetypes.MIME_TYPE_GZIP;
+import static 
org.apache.freemarker.generator.base.mime.Mimetypes.MIME_TYPE_ZIP;
 import static 
org.apache.freemarker.generator.base.mime.Mimetypes.MIME_VENDOR_MS_EXCEL;
 import static 
org.apache.freemarker.generator.base.mime.Mimetypes.MIME_VENDOR_OPEN_XML_SPREADSHEET;
 
-public class MimetypesFileTypeMapFactory {
+public abstract class MimetypesFileTypeMapFactory {
 
     private static MimetypesFileTypeMap mimeTypes;
 
@@ -52,6 +54,8 @@ public class MimetypesFileTypeMapFactory {
             mimeTypes.addMimeTypes(MIME_TEXT_RTF + " rtf RTF");
             mimeTypes.addMimeTypes(MIME_TEXT_TSV + " tsv TSV");
             mimeTypes.addMimeTypes(MIME_TEXT_YAML + " yml YML yaml YAML");
+            mimeTypes.addMimeTypes(MIME_TYPE_GZIP + " gzip GZIP");
+            mimeTypes.addMimeTypes(MIME_TYPE_ZIP + " zip ZIP");
         }
 
         return mimeTypes;
diff --git 
a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/output/OutputGenerator.java
 
b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/output/OutputGenerator.java
index f2c4e6f..ebdd409 100644
--- 
a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/output/OutputGenerator.java
+++ 
b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/output/OutputGenerator.java
@@ -48,6 +48,7 @@ public class OutputGenerator {
     /** Variables (as a map) used for the transformation */
     private final Map<String, Object> variables;
 
+    /** Seed type of "DATASOURCE* only takes a single data soure */
     private final SeedType seedType;
 
     public OutputGenerator(
diff --git 
a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/util/OperatingSystem.java
 
b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/util/OperatingSystem.java
index 180b7ac..02158cb 100644
--- 
a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/util/OperatingSystem.java
+++ 
b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/util/OperatingSystem.java
@@ -19,7 +19,7 @@ package org.apache.freemarker.generator.base.util;
 import java.util.Locale;
 
 /**
- * Helper class to detect the operting system (mostly Windows).
+ * Helper class to detect the operating system.
  */
 public class OperatingSystem {
     private static final String OS = System.getProperty("os.name", 
"unknown").toLowerCase(Locale.ROOT);
diff --git 
a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/util/PropertiesTransformer.java
 
b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/util/PropertiesTransformer.java
index 90b2f6a..97ed173 100644
--- 
a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/util/PropertiesTransformer.java
+++ 
b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/util/PropertiesTransformer.java
@@ -24,7 +24,8 @@ import java.util.Properties;
 public class PropertiesTransformer {
 
     /**
-     * Create a new <code>java.util.Properties</code> instance having only key 
with the prefix.
+     * Create a new <code>java.util.Properties</code> instance having only key 
with the
+     * given prefix.
      *
      * @param properties the properties
      * @param prefix     prefix
diff --git 
a/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/Main.java
 
b/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/Main.java
index 5158668..c275406 100644
--- 
a/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/Main.java
+++ 
b/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/Main.java
@@ -140,13 +140,12 @@ public class Main implements Callable<Integer> {
 
     @Override
     public Integer call() {
-        validate();
+        validateCommandLineParameters();
+        updateGlobalSystemProperties();
         return IntStream.range(0, times).map(i -> onCall()).max().orElse(0);
     }
 
     private Integer onCall() {
-        updateSystemProperties();
-
         final String currentConfigFile = isNotEmpty(configFile) ? configFile : 
getDefaultConfigFileName();
         final Properties configuration = 
loadFreeMarkerCliConfiguration(currentConfigFile);
         final List<File> templateDirectories = 
getTemplateDirectories(templateDir);
@@ -166,7 +165,11 @@ public class Main implements Callable<Integer> {
         }
     }
 
-    void validate() {
+    /**
+     * Invoke a custom validation of the command line parameters supplementing
+     * the checks already done by Picocli.
+     */
+    void validateCommandLineParameters() {
         outputGeneratorDefinitions.forEach(t -> 
t.validate(spec.commandLine()));
     }
 
@@ -195,7 +198,7 @@ public class Main implements Callable<Integer> {
                 .build();
     }
 
-    private void updateSystemProperties() {
+    private void updateGlobalSystemProperties() {
         if (systemProperties != null && !systemProperties.isEmpty()) {
             System.getProperties().putAll(systemProperties);
         }
diff --git 
a/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/task/FreeMarkerTask.java
 
b/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/task/FreeMarkerTask.java
index 3e178bc..543f8fa 100644
--- 
a/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/task/FreeMarkerTask.java
+++ 
b/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/task/FreeMarkerTask.java
@@ -50,7 +50,7 @@ import static 
org.apache.freemarker.generator.base.FreeMarkerConstants.Model;
  */
 public class FreeMarkerTask implements Callable<Integer> {
 
-    private static final int SUCCESS = 0;
+        private static final int SUCCESS_CODE = 0;
 
     private final Supplier<Configuration> configurationSupplier;
     private final Supplier<List<OutputGenerator>> outputGeneratorsSupplier;
@@ -85,7 +85,7 @@ public class FreeMarkerTask implements Callable<Integer> {
                 sharedDataSources,
                 sharedParameters));
 
-        return SUCCESS;
+        return SUCCESS_CODE;
     }
 
     private void process(Configuration configuration,
@@ -102,19 +102,35 @@ public class FreeMarkerTask implements Callable<Integer> {
         try (Writer writer = writer(templateOutput)) {
             final Template template = template(configuration, templateSource);
             template.process(templateDataModel, writer);
-        } catch (TemplateException | IOException e) {
+        } catch (TemplateException | IOException | RuntimeException e) {
             throw new RuntimeException("Failed to process template: " + 
templateSource.getName(), e);
         }
     }
 
+    /**
+     * Merge the <code>DataSourced</code>.
+     * The data sources to be used are determined by the seed type
+     * <ul>
+     *     <li>TEMPLATE: aggregates a list of data source</li>
+     *     <li>DATASOURCE: only takes a single data source</li>
+     * </ul>
+     *
+     * @param outputGenerator   current output generator
+     * @param sharedDataSources shared data sources
+     * @return <code>DataSources</code> to be passed to FreeMarker
+     */
     private static DataSources toDataSources(OutputGenerator outputGenerator, 
List<DataSource> sharedDataSources) {
         final List<DataSource> dataSources = outputGenerator.getDataSources();
-        if (outputGenerator.getSeedType() == SeedType.TEMPLATE) {
+        final SeedType seedType = outputGenerator.getSeedType();
+
+        if (seedType == SeedType.TEMPLATE) {
             return new DataSources(ListUtils.concatenate(dataSources, 
sharedDataSources));
-        } else {
-            // Since every data source shall generate an output there can be 
only 1 datasource supplied
+        } else if (seedType == SeedType.DATASOURCE) {
+            // Since every data source shall generate an output there can be 
only 1 datasource supplied.
             Validate.isTrue(dataSources.size() == 1, "One data source expected 
for generation driven by data sources");
             return new DataSources(dataSources);
+        } else {
+            throw new IllegalArgumentException("Don't know how to handle the 
seed type: " + seedType);
         }
     }
 
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 4a3a5b8..4531b4f 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
@@ -148,7 +148,7 @@ public class PicocliTest {
                 "-i", "some-interactive-template01", "-s", "datasource30.csv", 
"-o", "out.txt",
                 "-i", "some-interactive-template02");
 
-        main.validate();
+        main.validateCommandLineParameters();
 
         final List<OutputGeneratorDefinition> defs = 
main.outputGeneratorDefinitions;
         assertEquals(4, defs.size());

Reply via email to