package org.jtwig.property.strategy;
import com.google.common.base.Optional;
import org.jtwig.model.expression.VariableExpression;
import org.jtwig.property.resolver.CallMethodPropertyResolver;
import org.jtwig.property.resolver.PropertyResolver;
import org.jtwig.reflection.model.java.JavaClass;
import org.jtwig.reflection.model.java.JavaClassManager;
import org.jtwig.reflection.model.java.JavaMethod;
import org.jtwig.reflection.model.java.JavaMethods;
public class GetMethodPropertyResolverStrategy implements PropertyResolverStrategy {
private final JavaClassManager classManager;
public GetMethodPropertyResolverStrategy(JavaClassManager classManager) {
this.classManager = classManager;
}
@Override
public Optional<PropertyResolver> select(Request request) {
if (request.getRightExpression() instanceof VariableExpression) {
String identifier = ((VariableExpression) request.getRightExpression()).getIdentifier();
JavaClass javaClass = classManager.metadata(request.getLeftValue().getClass());
JavaMethods method = javaClass.method("get");
Optional<JavaMethod> methodMethod = method.getMethod(String.class);
if (methodMethod.isPresent()) {
PropertyResolver callMethodPropertyResolver = new CallMethodPropertyResolver(methodMethod.get(), identifier);
return Optional.of(callMethodPropertyResolver);
}
}
return Optional.absent();
}
}