package org.jtwig.functions.impl.structural; import com.google.common.base.Optional; import org.jtwig.functions.FunctionRequest; import org.jtwig.functions.SimpleJtwigFunction; import org.jtwig.render.context.model.BlockContext; import org.jtwig.render.context.model.BlockDefinition; import org.jtwig.render.node.RenderNodeService; import org.jtwig.renderable.RenderResult; import org.jtwig.renderable.StringBuilderRenderResult; import org.jtwig.resource.reference.ResourceReference; public class BlockFunction extends SimpleJtwigFunction { @Override public String name() { return "block"; } @Override public Object execute(FunctionRequest request) { request.minimumNumberOfArguments(1); request.maximumNumberOfArguments(1); String name = request.getEnvironment().getValueEnvironment().getStringConverter().convert(request.get(0)); Optional<BlockDefinition> nodeOptional = request.getRenderContext().getCurrent(BlockContext.class).get(name); if (nodeOptional.isPresent()) { RenderNodeService renderNodeService = request.getEnvironment().getRenderEnvironment().getRenderNodeService(); BlockDefinition definition = nodeOptional.get(); request.getRenderContext().start(ResourceReference.class, definition.getSource()); RenderResult result = renderNodeService.render(request, definition.getNode()) .appendTo(new StringBuilderRenderResult()); request.getRenderContext().end(ResourceReference.class); return result.content(); } else { return ""; } } }