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

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

commit ec6fefb4b90b0418b5c69456e4c768fb8acc702a
Author: Siegfried Goeschl <[email protected]>
AuthorDate: Sat May 23 15:19:10 2020 +0200

    FREEMARKER-142 First draft of supporting multiple templates on the command 
line
---
 .../generator/base/template/TemplateOutput.java    |  24 +-
 .../template/TemplateProcessingInfoSupplier.java   | 153 -------------
 .../generator/base/template/TemplateSource.java    |   6 +-
 ...essingInfo.java => TemplateTransformation.java} |   7 +-
 .../base/template/TemplateTransformations.java     |  28 +++
 .../template/TemplateTransformationsBuilder.java   | 247 +++++++++++++++++++++
 .../TemplateProcessingInfoSupplierTest.java        |  77 -------
 .../TemplateTransformationsBuilderTest.java        | 141 ++++++++++++
 8 files changed, 434 insertions(+), 249 deletions(-)

diff --git 
a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/template/TemplateOutput.java
 
b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/template/TemplateOutput.java
index 53001f4..e0efc42 100644
--- 
a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/template/TemplateOutput.java
+++ 
b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/template/TemplateOutput.java
@@ -1,37 +1,34 @@
 package org.apache.freemarker.generator.base.template;
 
-import org.apache.freemarker.generator.base.util.CloseableReaper;
 import org.apache.freemarker.generator.base.util.Validate;
 
-import java.io.Closeable;
 import java.io.File;
 import java.io.FileWriter;
 import java.io.IOException;
 import java.io.Writer;
 
+import static java.util.Objects.requireNonNull;
+
 /**
  * Information about where to write the ouput of a template. Initially we
  * wanted to use a <code>FileWriter</code> but it requires actually an
  * existing output file (otherwise a FileNotFound exception is thrown).
+ *
+ * TODO what to do with created FileWriter?
  */
-public class TemplateOutput implements Closeable {
+public class TemplateOutput {
 
     private final Writer writer;
     private final File file;
 
-    /** Collect all closables handed out to the caller to be closed when the 
instance is closed */
-    private final CloseableReaper closables;
-
     private TemplateOutput(File file) {
         this.writer = null;
-        this.file = file;
-        this.closables = new CloseableReaper();
+        this.file = requireNonNull(file);
     }
 
     private TemplateOutput(Writer writer) {
-        this.writer = writer;
+        this.writer = requireNonNull(writer);
         this.file = null;
-        this.closables = new CloseableReaper();
     }
 
     public static TemplateOutput fromWriter(Writer writer) {
@@ -62,16 +59,11 @@ public class TemplateOutput implements Closeable {
         return writer != null ? writer : fileWriter();
     }
 
-    @Override
-    public void close() throws IOException {
-        closables.close();
-    }
-
     private FileWriter fileWriter() {
         Validate.notNull(file, "Output file is null");
 
         try {
-            return closables.add(new FileWriter(file));
+            return new FileWriter(file);
         } catch (IOException e) {
             throw new RuntimeException("Failed to create FileWriter: " + 
file.getAbsolutePath(), e);
         }
diff --git 
a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/template/TemplateProcessingInfoSupplier.java
 
b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/template/TemplateProcessingInfoSupplier.java
deleted file mode 100644
index 4c6a42e..0000000
--- 
a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/template/TemplateProcessingInfoSupplier.java
+++ /dev/null
@@ -1,153 +0,0 @@
-package org.apache.freemarker.generator.base.template;
-
-import org.apache.freemarker.generator.base.file.RecursiveFileSupplier;
-import org.apache.freemarker.generator.base.util.Validate;
-
-import java.io.File;
-import java.io.Writer;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-import java.util.function.Supplier;
-
-import static java.util.Collections.singletonList;
-import static java.util.stream.Collectors.toList;
-
-public class TemplateProcessingInfoSupplier implements 
Supplier<List<TemplateProcessingInfo>> {
-
-    /** List of templates and/or template directories to be rendered */
-    private final Collection<String> sources;
-
-    /** Optional include pattern for resolving source templates or directory */
-    private final String include;
-
-    /** Optional exclude pattern for resolving source templates or directory */
-    private final String exclude;
-
-    /** Optional output file or directory */
-    private final File out;
-
-    /** Optional user-supplied writer */
-    private final Writer writer;
-
-    public TemplateProcessingInfoSupplier(Collection<String> sources, String 
include, String exclude, File out) {
-        this.sources = new ArrayList<>(sources);
-        this.include = include;
-        this.exclude = exclude;
-        this.out = out;
-        this.writer = null;
-    }
-
-    public TemplateProcessingInfoSupplier(Collection<String> sources, String 
include, String exclude, Writer writer) {
-        this.sources = new ArrayList<>(sources);
-        this.include = include;
-        this.exclude = exclude;
-        this.out = null;
-        this.writer = writer;
-    }
-
-    @Override
-    public List<TemplateProcessingInfo> get() {
-        return sources.stream()
-                .map(this::get)
-                .flatMap(Collection::stream)
-                .collect(toList());
-    }
-
-    /**
-     * Resolve a <code>source</code> to a list of 
<code>TemplateProcessingInfo</code>.
-     *
-     * @param source the source being a file name, an URI or 
<code>NamedUri</code>
-     * @return list of <code>TemplateProcessingInfo</code>
-     */
-    private List<TemplateProcessingInfo> get(String source) {
-        if (isTemplateFile(source)) {
-            return resolveTemplateFile(source);
-        } else if (isTemplateDirectory(source)) {
-            return resolveTemplateDirectory(source);
-        } else if (isTemplatePath(source)) {
-            return resolveTemplatePath(source);
-        } else {
-            throw new RuntimeException("Don't know how to resolve: " + source);
-        }
-    }
-
-    private List<TemplateProcessingInfo> resolveTemplateFile(String source) {
-        final TemplateSource templateSource = templateSource(source);
-        final TemplateOutput templateOutput = templateOutput(out);
-        return singletonList(new TemplateProcessingInfo(templateSource, 
templateOutput));
-    }
-
-    private List<TemplateProcessingInfo> resolveTemplateDirectory(String 
source) {
-        Validate.fileExists(new File(source), "Template directory does not 
exist: " + source);
-
-        final File templateDirectory = new File(source);
-        final List<File> templateFiles = templateFilesSupplier(source, 
include, exclude).get();
-        final List<TemplateProcessingInfo> templateProcessingInfos = new 
ArrayList<>();
-
-        for (File templateFile : templateFiles) {
-            final TemplateSource templateSource = 
templateSource(templateFile.getAbsolutePath());
-            final File outputFile = getTemplateOutputFile(templateDirectory, 
templateFile, out);
-            final TemplateOutput templateOutput = templateOutput(outputFile);
-            templateProcessingInfos.add(new 
TemplateProcessingInfo(templateSource, templateOutput));
-        }
-
-        return templateProcessingInfos;
-    }
-
-    private List<TemplateProcessingInfo> resolveTemplatePath(String source) {
-        final TemplateSource templateSource = templateSource(source);
-        final TemplateOutput templateOutput = templateOutput(out);
-        return singletonList(new TemplateProcessingInfo(templateSource, 
templateOutput));
-    }
-
-    private TemplateOutput templateOutput(File templateOutputFile) {
-        if (writer != null) {
-            return TemplateOutput.fromWriter(writer);
-        } else {
-            return TemplateOutput.fromFile(templateOutputFile);
-        }
-    }
-
-    private TemplateSource templateSource(String source) {
-        return TemplateSourceFactory.create(source);
-    }
-
-    private static File getTemplateOutputFile(File templateDirectory, File 
templateFile, File outputDirectory) {
-        final String relativePath = relativePath(templateDirectory, 
templateFile);
-        final String relativeOutputFileName = mapExtension(relativePath);
-        return new File(outputDirectory, relativeOutputFileName);
-    }
-
-    private static boolean isTemplateFile(String source) {
-        final File file = new File(source);
-        return file.exists() && file.isFile();
-    }
-
-    private static boolean isTemplateDirectory(String source) {
-        final File file = new File(source);
-        return file.exists() && file.isDirectory();
-    }
-
-    private static boolean isTemplatePath(String source) {
-        return !isTemplateFile(source) && !isTemplateDirectory(source);
-    }
-
-    private static RecursiveFileSupplier templateFilesSupplier(String source, 
String include, String exclude) {
-        return new RecursiveFileSupplier(singletonList(source), 
singletonList(include), singletonList(exclude));
-    }
-
-    private static String relativePath(File directory, File file) {
-        return file.getAbsolutePath()
-                .substring(directory.getAbsolutePath().length())
-                .substring(1);
-    }
-
-    private static String mapExtension(String fileName) {
-        if (fileName.toLowerCase().endsWith(".ftl")) {
-            return fileName.substring(0, fileName.length() - 4);
-        } else {
-            return fileName;
-        }
-    }
-}
diff --git 
a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/template/TemplateSource.java
 
b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/template/TemplateSource.java
index f9f7f10..0659d22 100644
--- 
a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/template/TemplateSource.java
+++ 
b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/template/TemplateSource.java
@@ -37,7 +37,7 @@ public class TemplateSource {
         this.origin = Origin.CODE;
         this.code = code;
         this.path = null;
-        this.encoding = null;
+        this.encoding = StandardCharsets.UTF_8;
     }
 
     private TemplateSource(String name, String path, Charset encoding) {
@@ -81,6 +81,10 @@ public class TemplateSource {
         return name;
     }
 
+    public Charset getEncoding() {
+        return encoding;
+    }
+
     @Override
     public String toString() {
         return "TemplateSource{" +
diff --git 
a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/template/TemplateProcessingInfo.java
 
b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/template/TemplateTransformation.java
similarity index 77%
rename from 
freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/template/TemplateProcessingInfo.java
rename to 
freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/template/TemplateTransformation.java
index fb94e96..8840e50 100644
--- 
a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/template/TemplateProcessingInfo.java
+++ 
b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/template/TemplateTransformation.java
@@ -2,7 +2,10 @@ package org.apache.freemarker.generator.base.template;
 
 import static java.util.Objects.requireNonNull;
 
-public class TemplateProcessingInfo {
+/**
+ * Information about loading templates and writing their output.
+ */
+public class TemplateTransformation {
 
     /** Source of template */
     private final TemplateSource templateSource;
@@ -10,7 +13,7 @@ public class TemplateProcessingInfo {
     /** Output of template */
     private final TemplateOutput templateOutput;
 
-    public TemplateProcessingInfo(TemplateSource templateSource, 
TemplateOutput templateOutput) {
+    public TemplateTransformation(TemplateSource templateSource, 
TemplateOutput templateOutput) {
         this.templateSource = requireNonNull(templateSource);
         this.templateOutput = requireNonNull(templateOutput);
     }
diff --git 
a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/template/TemplateTransformations.java
 
b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/template/TemplateTransformations.java
new file mode 100644
index 0000000..380e76a
--- /dev/null
+++ 
b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/template/TemplateTransformations.java
@@ -0,0 +1,28 @@
+package org.apache.freemarker.generator.base.template;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import static java.util.Objects.requireNonNull;
+
+public class TemplateTransformations {
+
+    private final List<TemplateTransformation> templateTransformations;
+
+    public TemplateTransformations(Collection<? extends 
TemplateTransformation> templateTransformations) {
+        this.templateTransformations = new 
ArrayList<>(requireNonNull(templateTransformations));
+    }
+
+    public List<? extends TemplateTransformation> getList() {
+        return templateTransformations;
+    }
+
+    public TemplateTransformation get(int index) {
+        return templateTransformations.get(index);
+    }
+
+    public int size() {
+        return templateTransformations.size();
+    }
+}
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
new file mode 100644
index 0000000..834e3aa
--- /dev/null
+++ 
b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/template/TemplateTransformationsBuilder.java
@@ -0,0 +1,247 @@
+package org.apache.freemarker.generator.base.template;
+
+import org.apache.freemarker.generator.base.file.RecursiveFileSupplier;
+import org.apache.freemarker.generator.base.util.NonClosableWriterWrapper;
+import org.apache.freemarker.generator.base.util.StringUtils;
+import org.apache.freemarker.generator.base.util.Validate;
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.OutputStreamWriter;
+import java.io.Writer;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import static java.nio.charset.StandardCharsets.UTF_8;
+import static java.util.Collections.singletonList;
+
+public class TemplateTransformationsBuilder {
+
+    /** List of templates and/or template directories to be rendered */
+    private final List<String> sources;
+
+    /** Optional include patterns for resolving source templates or template 
directories */
+    private final List<String> includes;
+
+    /** Optional exclude patterns for resolving source templates or template 
directories */
+    private final List<String> excludes;
+
+    /** Optional output file or directory */
+    private final List<File> outputs;
+
+    /** Optional user-supplied writer */
+    private Writer writer;
+
+    private TemplateTransformationsBuilder() {
+        this.sources = new ArrayList<>();
+        this.includes = new ArrayList<>();
+        this.excludes = new ArrayList<>();
+        this.outputs = new ArrayList<>();
+        this.writer = null;
+    }
+
+    public static TemplateTransformationsBuilder builder() {
+        return new TemplateTransformationsBuilder();
+    }
+
+    public TemplateTransformations build() {
+        final List<TemplateTransformation> result = new ArrayList<>();
+
+        for (int i = 0; i < sources.size(); i++) {
+            final String source = sources.get(i);
+            final File output = i < outputs.size() ? outputs.get(i) : null;
+            result.addAll(resolve(source, output));
+        }
+
+        return new TemplateTransformations(result);
+    }
+
+    public TemplateTransformationsBuilder addSource(String source) {
+        if (StringUtils.isNotEmpty(source)) {
+            this.sources.add(source);
+        }
+        return this;
+    }
+
+    public TemplateTransformationsBuilder addSources(Collection<String> 
sources) {
+        if (sources != null) {
+            this.sources.addAll(sources);
+        }
+        return this;
+    }
+
+    public TemplateTransformationsBuilder addInclude(String include) {
+        if (StringUtils.isNotEmpty(include)) {
+            this.includes.add(include);
+        }
+        return this;
+    }
+
+    public TemplateTransformationsBuilder addIncludes(Collection<String> 
includes) {
+        if (includes != null) {
+            this.includes.addAll(includes);
+        }
+        return this;
+    }
+
+    public TemplateTransformationsBuilder addExclude(String exclude) {
+        if (StringUtils.isNotEmpty(exclude)) {
+            this.excludes.add(exclude);
+        }
+        return this;
+    }
+
+    public TemplateTransformationsBuilder addExcludes(Collection<String> 
excludes) {
+        if (excludes != null) {
+            this.excludes.addAll(excludes);
+        }
+        return this;
+    }
+
+    public TemplateTransformationsBuilder addOutput(String output) {
+        if (StringUtils.isNotEmpty(output)) {
+            this.outputs.add(new File(output));
+        }
+        return this;
+    }
+
+    public TemplateTransformationsBuilder addOutputs(Collection<String> 
outputs) {
+        if (outputs != null) {
+            outputs.forEach(this::addOutput);
+        }
+        return this;
+    }
+
+    public TemplateTransformationsBuilder setWriter(Writer writer) {
+        this.writer = writer;
+        return this;
+    }
+
+    public TemplateTransformationsBuilder setStdOut() {
+        this.writer = new NonClosableWriterWrapper(new BufferedWriter(new 
OutputStreamWriter(System.out, UTF_8)));
+        return this;
+    }
+
+    /**
+     * Resolve a <code>source</code> to a list of 
<code>TemplateTransformation</code>.
+     *
+     * @param source the source being a file name, an URI or 
<code>NamedUri</code>
+     * @param output Optional output file or directory
+     * @return list of <code>TemplateTransformation</code>
+     */
+    private List<TemplateTransformation> resolve(String source, File output) {
+        if (isTemplateFile(source)) {
+            return resolveTemplateFile(source, output);
+        } else if (isTemplateDirectory(source)) {
+            return resolveTemplateDirectory(source, output);
+        } else if (isTemplatePath(source)) {
+            return resolveTemplatePath(source, output);
+        } else {
+            throw new RuntimeException("Don't know how to resolve: " + source);
+        }
+    }
+
+    private List<TemplateTransformation> resolveTemplateFile(String source, 
File outputFile) {
+        final TemplateSource templateSource = templateSource(source);
+        final TemplateOutput templateOutput = templateOutput(outputFile);
+        return singletonList(new TemplateTransformation(templateSource, 
templateOutput));
+    }
+
+    private List<TemplateTransformation> resolveTemplateDirectory(String 
source, File outputDirectory) {
+        Validate.fileExists(new File(source), "Template directory does not 
exist: " + source);
+
+        final File templateDirectory = new File(source);
+        final List<File> templateFiles = templateFilesSupplier(source, 
getInclude(), getExclude()).get();
+        final List<TemplateTransformation> templateTransformations = new 
ArrayList<>();
+
+        for (File templateFile : templateFiles) {
+            final TemplateSource templateSource = 
templateSource(templateFile.getAbsolutePath());
+            final File outputFile = getTemplateOutputFile(templateDirectory, 
templateFile, outputDirectory);
+            final TemplateOutput templateOutput = templateOutput(outputFile);
+            templateTransformations.add(new 
TemplateTransformation(templateSource, templateOutput));
+        }
+
+        return templateTransformations;
+    }
+
+    private List<TemplateTransformation> resolveTemplatePath(String source, 
File out) {
+        final TemplateSource templateSource = templateSource(source);
+        final TemplateOutput templateOutput = templateOutput(out);
+        return singletonList(new TemplateTransformation(templateSource, 
templateOutput));
+    }
+
+    private TemplateOutput templateOutput(File templateOutputFile) {
+        if (templateOutputFile != null) {
+            return TemplateOutput.fromFile(templateOutputFile);
+        } else {
+            return TemplateOutput.fromWriter(writer);
+        }
+    }
+
+    private TemplateSource templateSource(String source) {
+        return TemplateSourceFactory.create(source);
+    }
+
+    private String getInclude() {
+        return includes.isEmpty() ? null : includes.get(0);
+    }
+
+    private String getExclude() {
+        return excludes.isEmpty() ? null : excludes.get(0);
+    }
+
+    private Writer writer(String outputFile, String outputEncoding) {
+        try {
+            if (writer != null) {
+                return writer;
+            } else if (!StringUtils.isEmpty(outputFile)) {
+                return new BufferedWriter(new FileWriter(outputFile));
+            } else {
+                return new BufferedWriter(new OutputStreamWriter(System.out, 
outputEncoding));
+            }
+        } catch (IOException e) {
+            throw new RuntimeException("Unable to create writer", e);
+        }
+    }
+
+    private static File getTemplateOutputFile(File templateDirectory, File 
templateFile, File outputDirectory) {
+        final String relativePath = relativePath(templateDirectory, 
templateFile);
+        final String relativeOutputFileName = mapExtension(relativePath);
+        return new File(outputDirectory, relativeOutputFileName);
+    }
+
+    private static boolean isTemplateFile(String source) {
+        final File file = new File(source);
+        return file.exists() && file.isFile();
+    }
+
+    private static boolean isTemplateDirectory(String source) {
+        final File file = new File(source);
+        return file.exists() && file.isDirectory();
+    }
+
+    private static boolean isTemplatePath(String source) {
+        return !isTemplateFile(source) && !isTemplateDirectory(source);
+    }
+
+    private static RecursiveFileSupplier templateFilesSupplier(String source, 
String include, String exclude) {
+        return new RecursiveFileSupplier(singletonList(source), 
singletonList(include), singletonList(exclude));
+    }
+
+    private static String relativePath(File directory, File file) {
+        return file.getAbsolutePath()
+                .substring(directory.getAbsolutePath().length())
+                .substring(1);
+    }
+
+    private static String mapExtension(String fileName) {
+        if (fileName.toLowerCase().endsWith(".ftl")) {
+            return fileName.substring(0, fileName.length() - 4);
+        } else {
+            return fileName;
+        }
+    }
+}
diff --git 
a/freemarker-generator-base/src/test/java/org/apache/freemarker/generator/template/TemplateProcessingInfoSupplierTest.java
 
b/freemarker-generator-base/src/test/java/org/apache/freemarker/generator/template/TemplateProcessingInfoSupplierTest.java
deleted file mode 100644
index 129fd71..0000000
--- 
a/freemarker-generator-base/src/test/java/org/apache/freemarker/generator/template/TemplateProcessingInfoSupplierTest.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.freemarker.generator.template;
-
-import org.apache.freemarker.generator.base.template.TemplateProcessingInfo;
-import 
org.apache.freemarker.generator.base.template.TemplateProcessingInfoSupplier;
-import org.junit.Test;
-
-import java.io.File;
-import java.util.Collections;
-import java.util.List;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-
-public class TemplateProcessingInfoSupplierTest {
-
-    private static final File ROOT_DIR = new File("./target/out");
-    private static final String ANY_TEMPLATE_FILE_NAME = 
"src/test/template/application.properties";
-    private static final String ANY_TEMPLATE_PATH = "template/info.ftl";
-    private static final String ANY_TEMPLATE_DIRECTORY_NAME = 
"src/test/template";
-
-    private static final String NO_INCLUDE = null;
-    private static final String NO_EXCLUDE = null;
-
-    @Test
-    public void shouldCreateFromTemplateFile() {
-        final TemplateProcessingInfoSupplier supplier = 
supplier(ANY_TEMPLATE_FILE_NAME);
-
-        final List<TemplateProcessingInfo> templateProcessingInfos = 
supplier.get();
-
-        assertNotNull(templateProcessingInfos);
-        assertEquals(1, templateProcessingInfos.size());
-    }
-
-    @Test
-    public void shouldCreateFromTemplatePath() {
-        final TemplateProcessingInfoSupplier supplier = 
supplier(ANY_TEMPLATE_PATH);
-
-        final List<TemplateProcessingInfo> templateProcessingInfos = 
supplier.get();
-
-        assertNotNull(templateProcessingInfos);
-        assertEquals(1, templateProcessingInfos.size());
-    }
-
-    @Test
-    public void shouldCreateFromTemplateDirectory() {
-        final TemplateProcessingInfoSupplier supplier = 
supplier(ANY_TEMPLATE_DIRECTORY_NAME);
-
-        final List<TemplateProcessingInfo> templateProcessingInfos = 
supplier.get();
-
-        assertNotNull(templateProcessingInfos);
-        assertEquals(2, templateProcessingInfos.size());
-    }
-
-    private TemplateProcessingInfoSupplier supplier(String source) {
-        return new TemplateProcessingInfoSupplier(
-                Collections.singleton(source),
-                NO_INCLUDE,
-                NO_EXCLUDE,
-                ROOT_DIR);
-    }
-}
diff --git 
a/freemarker-generator-base/src/test/java/org/apache/freemarker/generator/template/TemplateTransformationsBuilderTest.java
 
b/freemarker-generator-base/src/test/java/org/apache/freemarker/generator/template/TemplateTransformationsBuilderTest.java
new file mode 100644
index 0000000..f1e4067
--- /dev/null
+++ 
b/freemarker-generator-base/src/test/java/org/apache/freemarker/generator/template/TemplateTransformationsBuilderTest.java
@@ -0,0 +1,141 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.freemarker.generator.template;
+
+import org.apache.freemarker.generator.base.template.TemplateOutput;
+import org.apache.freemarker.generator.base.template.TemplateSource;
+import org.apache.freemarker.generator.base.template.TemplateSource.Origin;
+import org.apache.freemarker.generator.base.template.TemplateTransformations;
+import 
org.apache.freemarker.generator.base.template.TemplateTransformationsBuilder;
+import org.junit.Test;
+
+import java.io.File;
+import java.nio.charset.StandardCharsets;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+
+public class TemplateTransformationsBuilderTest {
+
+    private static final String ANY_TEMPLATE_FILE_NAME = 
"src/test/template/application.properties";
+    private static final String ANY_TEMPLATE_PATH = "template/info.ftl";
+    private static final String ANY_TEMPLATE_DIRECTORY_NAME = 
"src/test/template";
+
+    // === Template File ====================================================
+
+    @Test
+    public void shouldCreateFromTemplateFile() {
+        final TemplateTransformations transformations = builder()
+                .addSource(ANY_TEMPLATE_FILE_NAME)
+                .setStdOut()
+                .build();
+
+        assertEquals(1, transformations.size());
+
+        final TemplateSource templateSource = 
transformations.get(0).getTemplateSource();
+        final TemplateOutput templateOutput = 
transformations.get(0).getTemplateOutput();
+
+        assertNotNull(templateSource.getName());
+        assertEquals(Origin.CODE, templateSource.getOrigin());
+        assertNotNull(templateSource.getCode());
+        assertNull(templateSource.getPath());
+        assertEquals(StandardCharsets.UTF_8, templateSource.getEncoding());
+
+        assertNotNull(templateOutput.getWriter());
+        assertNull(templateOutput.getFile());
+    }
+
+    // === Template Path ====================================================
+
+    @Test
+    public void shouldCreateFromTemplatePath() {
+        final TemplateTransformations transformations = builder()
+                .addSource(ANY_TEMPLATE_PATH)
+                .setStdOut()
+                .build();
+
+        assertEquals(1, transformations.size());
+
+        final TemplateSource templateSource = 
transformations.get(0).getTemplateSource();
+        final TemplateOutput templateOutput = 
transformations.get(0).getTemplateOutput();
+
+        assertNotNull(templateSource.getName());
+        assertEquals(Origin.PATH, templateSource.getOrigin());
+        assertNull(templateSource.getCode());
+        assertNotNull(templateSource.getPath());
+        assertEquals(StandardCharsets.UTF_8, templateSource.getEncoding());
+
+        assertNotNull(templateOutput.getWriter());
+        assertNull(templateOutput.getFile());
+    }
+
+    // === Template Directory ===============================================
+
+    @Test
+    public void shouldCreateFromTemplateDirectory() {
+        final TemplateTransformations transformations = builder()
+                .addSource(ANY_TEMPLATE_DIRECTORY_NAME)
+                .setStdOut()
+                .build();
+
+        assertEquals(2, transformations.size());
+        assertEquals(new File("nginx/nginx.conf"), 
transformations.get(0).getTemplateOutput().getFile());
+        assertEquals(new File("application.properties"), 
transformations.get(1).getTemplateOutput().getFile());
+    }
+
+    @Test
+    public void shouldCreateFromTemplateDirectoryWithOutputDirectory() {
+        final TemplateTransformations transformations = builder()
+                .addSource(ANY_TEMPLATE_DIRECTORY_NAME)
+                .addOutput("/tmp")
+                .build();
+
+        assertEquals(2, transformations.size());
+        assertEquals(new File("/tmp/nginx/nginx.conf"), 
transformations.get(0).getTemplateOutput().getFile());
+        assertEquals(new File("/tmp/application.properties"), 
transformations.get(1).getTemplateOutput().getFile());
+    }
+
+    @Test
+    public void shouldCreateFromTemplateDirectoryWithInclude() {
+        final TemplateTransformations transformations = builder()
+                .addSource(ANY_TEMPLATE_DIRECTORY_NAME)
+                .addInclude("*.properties")
+                .setStdOut()
+                .build();
+
+        assertEquals(1, transformations.size());
+        assertEquals(new File("application.properties"), 
transformations.get(0).getTemplateOutput().getFile());
+    }
+
+    @Test
+    public void shouldCreateFromTemplateDirectoryWithExclude() {
+        final TemplateTransformations transformations = builder()
+                .addSource(ANY_TEMPLATE_DIRECTORY_NAME)
+                .addExclude("*.ftl")
+                .setStdOut()
+                .build();
+
+        assertEquals(1, transformations.size());
+        assertEquals(new File("application.properties"), 
transformations.get(0).getTemplateOutput().getFile());
+    }
+
+    private TemplateTransformationsBuilder builder() {
+        return TemplateTransformationsBuilder
+                .builder();
+    }
+}

Reply via email to