package org.jtwig.functions.resolver;
import com.google.common.base.Optional;
import com.google.common.base.Supplier;
import org.jtwig.functions.FunctionArguments;
import org.jtwig.functions.FunctionRequest;
import org.jtwig.functions.FunctionRequestFactory;
import org.jtwig.functions.JtwigFunction;
import org.jtwig.model.position.Position;
import org.jtwig.render.RenderRequest;
import java.util.Map;
public class CoreFunctionResolver implements FunctionResolver {
private final Map<String, JtwigFunction> functions;
private final FunctionRequestFactory functionRequestFactory;
private final FunctionValueSupplierFactory functionValueSupplierFactory;
public CoreFunctionResolver(Map<String, JtwigFunction> functions, FunctionRequestFactory functionRequestFactory, FunctionValueSupplierFactory functionValueSupplierFactory) {
this.functions = functions;
this.functionRequestFactory = functionRequestFactory;
this.functionValueSupplierFactory = functionValueSupplierFactory;
}
@Override
public Optional<Supplier<Object>> resolve(RenderRequest request, Position position, String functionName, FunctionArguments arguments) {
Optional<JtwigFunction> functionOptional = Optional.fromNullable(functions.get(functionName));
if (functionOptional.isPresent()) {
FunctionRequest functionRequest = functionRequestFactory.create(request, position, functionName, arguments);
return Optional.of(functionValueSupplierFactory.create(functionOptional.get(), functionRequest));
} else {
return Optional.absent();
}
}
}