use of org.dbflute.helper.beans.exception.DfBeanMethodNotFoundException in project dbflute-core by dbflute.
the class IfCommentEvaluator method processOneProperty.
protected Object processOneProperty(Object baseObject, String firstProperty, String property) {
if (baseObject == null) {
throwIfCommentNullPointerException(firstProperty);
}
final DfBeanDesc beanDesc = DfBeanDescFactory.getBeanDesc(baseObject.getClass());
if (beanDesc.hasPropertyDesc(property)) {
// main case
final DfPropertyDesc propertyDesc = beanDesc.getPropertyDesc(property);
try {
return propertyDesc.getValue(baseObject);
} catch (DfBeanIllegalPropertyException e) {
throwIfCommentPropertyReadFailureException(baseObject, propertyDesc.getPropertyName(), e);
// unreachable
return null;
}
}
if (property.endsWith(METHOD_SUFFIX)) {
// sub-main case
final String methodName = property.substring(0, property.length() - METHOD_SUFFIX.length());
try {
final Method method = beanDesc.getMethod(methodName);
return DfReflectionUtil.invoke(method, baseObject, (Object[]) null);
} catch (DfBeanMethodNotFoundException e) {
throwIfCommentNotFoundMethodException(baseObject, methodName);
// unreachable
return null;
} catch (ReflectionFailureException e) {
throwIfCommentMethodInvocationFailureException(baseObject, methodName, e);
// unreachable
return null;
}
}
if (MapParameterBean.class.isInstance(baseObject)) {
// used by union-query internally
// if the key does not exist, it does not process
// (different specification with Map)
final Map<?, ?> map = ((MapParameterBean<?>) baseObject).getParameterMap();
if (map.containsKey(property)) {
return map.get(property);
}
}
if (Map.class.isInstance(baseObject)) {
// if the key does not exist, treated same as a null value
final Map<?, ?> map = (Map<?, ?>) baseObject;
return map.get(property);
}
if (List.class.isInstance(baseObject)) {
if (property.startsWith("get(") && property.endsWith(")")) {
final List<?> list = (List<?>) baseObject;
final String exp = Srl.extractScopeFirst(property, "get(", ")").getContent();
try {
final Integer index = DfTypeUtil.toInteger(exp);
return list.get(index);
} catch (NumberFormatException e) {
throwIfCommentListIndexNotNumberException(list, exp, e);
// unreachable
return null;
} catch (IndexOutOfBoundsException e) {
throwIfCommentListIndexOutOfBoundsException(list, exp, e);
// unreachable
return null;
}
}
}
throwIfCommentNotFoundPropertyException(baseObject, property);
// unreachable
return null;
}
Aggregations