package org.skyscreamer.yoga.selector; import java.beans.PropertyDescriptor; import java.lang.reflect.Method; import org.skyscreamer.yoga.exceptions.YogaRuntimeException; import org.skyscreamer.yoga.util.ObjectUtil; public class PojoProperty<T> implements Property<T> { private PropertyDescriptor property; private Method readMethod; private boolean isPrimitive; public PojoProperty( PropertyDescriptor property ) { this.property = property; readMethod = property.getReadMethod(); isPrimitive = ObjectUtil.isPrimitive(readMethod.getReturnType()); } @Override public String name() { return property.getName(); } @Override public Object getValue( T instance ) { try { return readMethod.invoke( instance ); // return PropertyUtils.getProperty( instance, property.getName() ); } catch (Exception e) { throw new YogaRuntimeException("Could not read " + property.getName() + " from " + instance, e); } } @Override public Method getReadMethod() { return readMethod; } @Override public boolean isPrimitive() { return isPrimitive; } }