package org.jtwig.render.node;
import com.google.common.base.Optional;
import org.jtwig.escape.EscapeEngine;
import org.jtwig.model.tree.Node;
import org.jtwig.render.RenderRequest;
import org.jtwig.render.node.renderer.NodeRender;
import org.jtwig.renderable.Renderable;
import org.jtwig.util.ErrorMessageFormatter;
public class RenderNodeService {
private final NodeRenderSelector nodeRenderSelector;
public RenderNodeService(NodeRenderSelector nodeRenderSelector) {
this.nodeRenderSelector = nodeRenderSelector;
}
public Renderable render(RenderRequest request, Node node) {
Optional<NodeRender> nodeRenderOptional = nodeRenderSelector.renderFor(node);
if (nodeRenderOptional.isPresent()) {
request.getRenderContext().start(EscapeEngine.class, request.getRenderContext().getCurrent(EscapeEngine.class));
Renderable renderable = nodeRenderOptional.get().render(request, node);
request.getRenderContext().end(EscapeEngine.class);
return renderable;
} else {
throw new IllegalArgumentException(ErrorMessageFormatter.errorMessage(node.getPosition(), String.format("No render found for %s", node.getClass())));
}
}
}