public static Object getNestableProperty(Object bean,String property){ if(bean instanceof Map){ return getNestableProperty((Map)bean, property); }else if(bean instanceof DynaBean){ return getNestableProperty(((DynaBean) bean).getProperties(), property); }else{ return getNestableProperty(BeanType.of(bean.getClass()), bean, property); } }
protected static Object getNestedMapProperty(BeanType beanType,Object bean,BeanProperty bp,String nestedProperty) { Map map = (Map)bp.getValue(bean); if(null == map){ return null; } if(map.containsKey(nestedProperty)){ return map.get(nestedProperty); } return getNestableProperty(map,nestedProperty); }
protected Object resolveVariableProperty(String key,String variable){ int dotIndex = key.indexOf('.'); if(dotIndex == Arrays2.INDEX_NOT_FOUND){ return null; } String prefix = key.substring(0,dotIndex); VariableDefinition vd = variables.get(prefix); if(null == vd){ return null; }else{ Object value = resolveVariable(vd, null); if(null == value){ return null; }else if(value instanceof PropertyGetter){ return ((PropertyGetter) value).getProperty(variable.substring(dotIndex + 1)); }else{ return Beans.getNestableProperty(value,variable.substring(dotIndex + 1)); } } }
return null; }else{ return getNestableProperty(nestedBean, property.substring(dotIndex+1));
protected static Object getNestedProperty(BeanType beanType,Object bean,BeanProperty bp,String nestedProperty){ Class<?> nestedBeanClass = bp.getType(); if(Map.class.isAssignableFrom(nestedBeanClass)){ return getNestedMapProperty(beanType, nestedBeanClass, bp, nestedProperty); } Object nestedBean = bp.getValue(bean); if(null == nestedBean){ return null; } return getNestableProperty(BeanType.of(nestedBeanClass), nestedBean, nestedProperty); }