package org.jtwig.render.node.renderer;
import org.jtwig.model.expression.ConstantExpression;
import org.jtwig.model.expression.Expression;
import org.jtwig.model.expression.InjectableExpression;
import org.jtwig.model.tree.FilterNode;
import org.jtwig.render.RenderRequest;
import org.jtwig.render.expression.CalculateExpressionService;
import org.jtwig.render.node.RenderNodeService;
import org.jtwig.renderable.Renderable;
import org.jtwig.renderable.StringBuilderRenderResult;
import org.jtwig.renderable.impl.StringRenderable;
public class FilterNodeRender implements NodeRender<FilterNode> {
@Override
public Renderable render(RenderRequest renderRequest, FilterNode node) {
RenderNodeService renderNodeService = renderRequest.getEnvironment().getRenderEnvironment().getRenderNodeService();
CalculateExpressionService calculateExpressionService = renderRequest.getEnvironment().getRenderEnvironment().getCalculateExpressionService();
InjectableExpression filterExpression = node.getFilterExpression();
Renderable renderable = renderNodeService.render(renderRequest, node.getContent());
String content = renderable.appendTo(new StringBuilderRenderResult()).content();
ConstantExpression expression = new ConstantExpression(filterExpression.getPosition(), content);
Expression injectedExpression = filterExpression.inject(expression);
Object calculate = calculateExpressionService.calculate(renderRequest, injectedExpression);
return new StringRenderable(getString(renderRequest, calculate));
}
private String getString(RenderRequest request, Object input) {
return request.getEnvironment().getValueEnvironment().getStringConverter().convert(input);
}
}