package com.flextrade.jfixture.utility;
import java.lang.reflect.Method;
public final class PropertyUtil {
public static Boolean isMethodASetterProperty(Method method, Class clazz) {
String name = method.getName();
if (!name.startsWith("set")) return false;
Class[] parameterTypes = method.getParameterTypes();
if (parameterTypes.length != 1) return false;
String propertyName = method.getName().substring(3, method.getName().length());
Method[] methodsInType = clazz.getMethods();
for (Method m : methodsInType) {
if (methodIsStandardSetter(propertyName, m) ||
methodIsBooleanSetter(propertyName, m)) {
return true;
}
}
return false;
}
public static String getMemberNameFromMethod(Method method) {
String name = method.getName();
if(name.startsWith("get") || name.startsWith("set")) {
return name.substring(3, name.length());
}
if(name.startsWith("is") && Character.isUpperCase(name.charAt(2))) {
return name.substring(2, name.length());
}
return name;
}
private static boolean methodIsStandardSetter(String propertyName, Method m) {
return m.getName().equals("get" + propertyName);
}
private static boolean methodIsBooleanSetter(String propertyName, Method m) {
return m.getName().equals("is" + propertyName) &&
(m.getGenericReturnType().equals(Boolean.class) ||
m.getGenericReturnType().equals(boolean.class));
}
}