package org.jtwig.property.strategy; import com.google.common.base.Optional; import org.jtwig.model.expression.VariableExpression; import org.jtwig.property.resolver.FieldPropertyResolver; import org.jtwig.property.resolver.PropertyResolver; import org.jtwig.reflection.model.java.JavaClassManager; import org.jtwig.reflection.model.java.JavaField; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class FieldPropertyResolverStrategy implements PropertyResolverStrategy { private static final Logger logger = LoggerFactory.getLogger(FieldPropertyResolverStrategy.class); private final JavaClassManager javaClassManager; public FieldPropertyResolverStrategy(JavaClassManager javaClassManager) { this.javaClassManager = javaClassManager; } @Override public Optional<PropertyResolver> select(Request request) { if (request.getRightExpression() instanceof VariableExpression) { String fieldName = ((VariableExpression) request.getRightExpression()).getIdentifier(); Optional<JavaField> field = javaClassManager.metadata(request.getLeftValue().getClass()).field(fieldName); if (field.isPresent()) { PropertyResolver propertyResolver = new FieldPropertyResolver(field.get()); return Optional.of(propertyResolver); } } return Optional.absent(); } }