All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.zenwave360.generator.writers.TemplateFileWriter Maven / Gradle / Ivy

package io.zenwave360.generator.writers;

import java.io.File;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import io.zenwave360.generator.doc.DocumentedOption;
import io.zenwave360.generator.templating.TemplateOutput;

public class TemplateFileWriter implements TemplateWriter {

    private Logger log = LoggerFactory.getLogger(getClass());

    @DocumentedOption(description = "Target folder to generate code to. If left empty, it will print to stdout.")
    private File targetFolder;

    public TemplateFileWriter withTargetFolder(File targetFolder) {
        this.targetFolder = targetFolder;
        return this;
    }

    public void setTargetFolder(File targetFolder) {
        this.targetFolder = targetFolder;
    }

    @Override
    public void write(List templateOutputList) {
        templateOutputList.stream()
                .peek(t -> log.debug("Writing template with targetFile: {}", t.getTargetFile()))
                .forEach(t -> writeToFile(getFile(t.getTargetFile()), t.getContent()));
    }

    protected File getFile(String fileName) {
        return targetFolder != null ? new File(targetFolder, fileName) : new File(fileName);
    }

    protected void writeToFile(File file, String contents) {
        log.trace("Writing template output to file: {}", file);
        try {
            file.getParentFile().mkdirs();
            Files.writeString(Paths.get(file.toURI()),
                    contents,
                    StandardCharsets.UTF_8,
                    StandardOpenOption.CREATE,
                    StandardOpenOption.TRUNCATE_EXISTING);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy