package nl.amis.jsf.model;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.sql.Timestamp;
import java.util.Calendar;
import java.util.Date;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicLong;
import javax.el.ELContext;
import javax.el.ExpressionFactory;
import javax.el.ValueExpression;
import javax.faces.application.Application;
import javax.faces.context.FacesContext;
public class EntityLovModelUtil {
public EntityLovModelUtil() {
super();
}
public static boolean isFieldAccessible(Field field, Class entityClass) {
if (Modifier.isPublic(field.getModifiers())) {
return true;
} else if (existsAccessorMethod("get", field.getName(), entityClass)) {
return true;
} else if (existsAccessorMethod("is", field.getName(), entityClass)) {
return true;
} else {
return false;
}
}
public static boolean existsAccessorMethod(String prefix, String fieldName, Class entityClass) {
return null != getAccessorMethod(prefix, fieldName, entityClass);
}
public static Method getAccessorMethod(String prefix, String fieldName, Class entityClass) {
StringBuilder methodName = new StringBuilder();
methodName.append(prefix);
methodName.append(fieldName.substring(0, 1).toUpperCase());
methodName.append(fieldName.substring(1));
try {
return entityClass.getDeclaredMethod(methodName.toString(), new Class[] { });
} catch (NoSuchMethodException e) {
return null;
}
}
public static boolean isDate(Class clazz) {
return Date.class.equals(clazz) || java.sql.Date.class.equals(clazz) || Timestamp.class.equals(clazz) || Calendar.class.equals(clazz);
}
public static boolean isNumber(Class clazz) {
return clazz.isPrimitive() || Number.class.equals(clazz) || Short.class.equals(clazz) || Long.class.equals(clazz) || Integer.class.equals(clazz) ||
Float.class.equals(clazz) || Double.class.equals(clazz) || Byte.class.equals(clazz) || BigInteger.class.equals(clazz) ||
BigDecimal.class.equals(clazz) || AtomicLong.class.equals(clazz) || AtomicInteger.class.equals(clazz);
}
public static String logObject(Object object) {
if (null == object) {
return "null";
}
StringBuilder result = new StringBuilder();
result.append(object.getClass().getName());
result.append(":");
result.append(object);
return result.toString();
}
public static Object getKeyFromEntity(Method keyGetter, Object entity) {
Object key = null;
if (null == keyGetter) {
return null;
}
if (null == entity) {
return null;
}
try {
key = keyGetter.invoke(entity, null);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
return key;
}
}