package org.jtwig.render.node.renderer; import com.google.common.base.Optional; import org.jtwig.escape.EscapeEngine; import org.jtwig.model.tree.AutoEscapeNode; import org.jtwig.render.RenderRequest; import org.jtwig.renderable.RenderException; import org.jtwig.renderable.Renderable; import org.jtwig.util.ErrorMessageFormatter; public class AutoEscapeNodeRender implements NodeRender<AutoEscapeNode> { @Override public Renderable render(RenderRequest request, AutoEscapeNode node) { String escapeModeName = node.getEscapeEngineName().or(request.getEnvironment().getEscapeEnvironment().getDefaultEscapeEngine()); Optional<EscapeEngine> escapeEngineOptional = request.getEnvironment().getEscapeEnvironment().getEscapeEngineSelector().escapeEngineFor(escapeModeName); if (escapeEngineOptional.isPresent()) { request.getRenderContext().set(EscapeEngine.class, escapeEngineOptional.get()); return request.getEnvironment().getRenderEnvironment().getRenderNodeService() .render(request, node.getContent()); } else { throw new RenderException(ErrorMessageFormatter.errorMessage(node.getPosition(), String.format("Invalid escape engine requested '%s'. Only supporting [%s]", escapeModeName, request.getEnvironment().getEscapeEnvironment().getEscapeEngineSelector().availableEscapeEngines()))); } } }