package org.jtwig.macro.render; import org.jtwig.macro.Macro; import org.jtwig.property.resolver.request.PropertyResolveRequest; import org.jtwig.renderable.RenderResult; import org.jtwig.renderable.StringBuilderRenderResult; import org.jtwig.resource.reference.ResourceReference; import org.jtwig.value.context.MapValueContext; import org.jtwig.value.context.ValueContext; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; public class MacroRender { public Object render(PropertyResolveRequest request, List<Object> arguments, Macro macro) { Map<String, Object> valueMap = new HashMap<>(); Iterator<Object> valueIterator = arguments.iterator(); for (String variableName : macro.getArgumentNames()) { if (valueIterator.hasNext()) { valueMap.put(variableName, valueIterator.next()); } } ValueContext valueContext = MapValueContext.newContext(valueMap); request.getRenderContext().start(ValueContext.class, valueContext); request.getRenderContext().start(ResourceReference.class, macro.getResourceReference()); RenderResult renderResult = new StringBuilderRenderResult(); request.getEnvironment().getRenderEnvironment().getRenderNodeService() .render(request, macro.getContent()) .appendTo(renderResult); request.getRenderContext().end(ValueContext.class); request.getRenderContext().end(ResourceReference.class); return renderResult.content(); } }