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

io.virtdata.docsys.metafs.fs.renderfs.api.rendering.RenderingScope Maven / Gradle / Ivy

package io.virtdata.docsys.metafs.fs.renderfs.api.rendering;

import io.virtdata.docsys.metafs.fs.renderfs.api.SourcePathTemplate;
import io.virtdata.docsys.metafs.fs.renderfs.api.rendered.ExceptionContent;
import io.virtdata.docsys.metafs.fs.renderfs.api.rendered.RenderedContent;
import io.virtdata.docsys.metafs.fs.renderfs.api.versioning.VersionData;
import io.virtdata.docsys.metafs.fs.renderfs.api.versioning.Versioned;
import io.virtdata.docsys.metafs.fs.renderfs.model.ViewModel;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.nio.file.Path;

public class RenderingScope implements Versioned {

    private final static Logger logger = LoggerFactory.getLogger(RenderingScope.class);

    private final TemplateView templateView;
    private final ViewModel viewModel;
    private final TemplateCompiler compiler;
    private final VersionData versions;

    private RenderingScope innerScope;


    private Renderer renderer;

    public RenderingScope(TemplateView templateView, ViewModel viewModel, TemplateCompiler compiler) {
        this.templateView = templateView;
        this.viewModel = viewModel;
        this.compiler = compiler;
        this.versions = new VersionData(templateView, viewModel);
    }

    public RenderingScope(Path sourcePath, Path targetPath, TemplateCompiler compiler) {
        this(new SourcePathTemplate(sourcePath), new ViewModel(sourcePath, targetPath), compiler);
    }


    public TemplateView getTemplate() {
        return templateView;
    }


    public ViewModel getViewModel() {
        return viewModel;
    }

    public RenderedContent getRendered() {
        try {
            if (innerScope!=null) {
                logger.info("RENDERING INNER " + innerScope.getTemplate().getTemplatePath() + " -> " + innerScope.getViewModel().getTarget());
                innerScope.getRendered();
                this.getViewModel().setInner(innerScope.getViewModel());
            }
            if (this.getViewModel().getRenderedContent()==null || !this.getViewModel().isValid()) {
                if (this.renderer==null || !this.renderer.isValid()) {
                    logger.info("COMPILING OUTER " + getTemplate().getTemplatePath() + " -> " + getViewModel().getTarget());
                    this.renderer =compiler.apply(templateView);
                }
                logger.info("RENDERING OUTER " + getTemplate().getTemplatePath() + " -> " + getViewModel().getTarget());
                RenderedContent renderedContent = renderer.apply(this);
                this.getViewModel().setRenderedContent(renderedContent);
            }
            return this.viewModel.getRenderedContent();
        } catch (Exception e) {
            String wrappedMessage = renderer.wrapError(e.getMessage());
            return new ExceptionContent(viewModel,templateView,e);
        }
    }

    public RenderingScope wrap(RenderingScope innerScope) {
        this.innerScope=innerScope;
        this.viewModel.setInner(innerScope.getViewModel());
        return this;
//
//        RenderedContent rendered = this.getRendered();
//        this.getViewModel().setRendered(rendered);
//        outerScope.getViewModel().setInner(this.viewModel);
//        outerScope.setInnerScope()
//        return outerScope;
    }

    public String toString() {
        StringBuilder sb = new StringBuilder();
        sb.append("[view:").append(this.getViewModel().toString()).append("]");
        int indent = 0;
        RenderingScope scope = this.innerScope;
        while (scope!=null) {
            sb.append("\n").append(" ".repeat(++indent));
            sb.append(scope.toString());
            scope=scope.innerScope;
        }
        return sb.toString();
    }

    public String getDiagnosticSummary() {
        StringBuilder sb = new StringBuilder();
        RenderingScope sc = this;
        while (sc!=null) {
            sb.append(sc.getTemplate().getTemplatePath());
            sb.append(" ");
            sc = sc.innerScope;
        }
        sb.setLength(sb.length()-1);
        return sb.toString();
    }

    public long getVersion() {
        return versions.getVersion();
    }

    @Override
    public boolean isValid() {
        return versions.isValid();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy