package org.jtwig.property.resolver;
import com.google.common.base.Optional;
import org.jtwig.property.resolver.request.PropertyResolveRequest;
import org.jtwig.reflection.model.Value;
import org.jtwig.reflection.model.java.JavaMethod;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.lang.reflect.InvocationTargetException;
public class CallMethodPropertyResolver implements PropertyResolver {
private static final Logger logger = LoggerFactory.getLogger(CallMethodPropertyResolver.class);
private final JavaMethod method;
private final String argument;
public CallMethodPropertyResolver(JavaMethod method, String argument) {
this.method = method;
this.argument = argument;
}
@Override
public Optional<Value> resolve(PropertyResolveRequest request) {
if (request.getContext() == null) return Optional.absent();
try {
return Optional.of(new Value(method.invoke(request.getContext(), new Object[]{argument})));
} catch (InvocationTargetException | IllegalAccessException | IllegalArgumentException e) {
logger.debug("Unable to retrieve value from method {} with argument {}", method, argument, e);
return Optional.absent();
}
}
}