package org.jtwig.property.strategy;
import com.google.common.base.Optional;
import org.jtwig.model.expression.VariableExpression;
import org.jtwig.property.resolver.PropertyResolver;
import org.jtwig.property.strategy.method.MethodPropertyResolverFactory;
import org.jtwig.property.strategy.method.finder.PropertyMethodFinder;
import org.jtwig.reflection.model.java.JavaClass;
import org.jtwig.reflection.model.java.JavaClassManager;
import org.jtwig.reflection.model.java.JavaMethod;
import java.util.Collections;
public class VariableMethodPropertyResolverStrategy implements PropertyResolverStrategy {
private final JavaClassManager classManager;
private final PropertyMethodFinder propertyMethodFinder;
private final MethodPropertyResolverFactory methodPropertyResolverFactory;
public VariableMethodPropertyResolverStrategy(JavaClassManager classManager, PropertyMethodFinder propertyMethodFinder, MethodPropertyResolverFactory methodPropertyResolverFactory) {
this.classManager = classManager;
this.propertyMethodFinder = propertyMethodFinder;
this.methodPropertyResolverFactory = methodPropertyResolverFactory;
}
@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());
Optional<JavaMethod> method = propertyMethodFinder.find(javaClass, identifier, Collections.emptyList());
return methodPropertyResolverFactory.create(method);
}
return Optional.absent();
}
}