package cn.org.rapid_framework.generator.provider.java.model;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Method;
import cn.org.rapid_framework.generator.util.typemapping.ActionScriptDataTypesUtils;
import cn.org.rapid_framework.generator.util.typemapping.JavaPrimitiveTypeMapping;
public class JavaProperty {
PropertyDescriptor propertyDescriptor;
JavaClass clazz; //与property相关联的class
public JavaProperty(PropertyDescriptor pd, JavaClass javaClass) {
this.propertyDescriptor = pd;
this.clazz = javaClass;
}
public String getName() {
return propertyDescriptor.getName();
}
public String getJavaType() {
return propertyDescriptor.getPropertyType().getName();
}
public String getPrimitiveJavaType() {
return JavaPrimitiveTypeMapping.getPrimitiveType(getJavaType());
}
public JavaClass getPropertyType() {
return new JavaClass(propertyDescriptor.getPropertyType());
}
public String getDisplayName() {
return propertyDescriptor.getDisplayName();
}
public JavaMethod getReadMethod() {
return new JavaMethod(propertyDescriptor.getReadMethod(),clazz);
}
public JavaMethod getWriteMethod() {
return new JavaMethod(propertyDescriptor.getWriteMethod(),clazz);
}
public String getAsType() {
return ActionScriptDataTypesUtils.getPreferredAsType(propertyDescriptor.getPropertyType().getName());
}
public boolean isPk() {
return JPAUtils.isPk(propertyDescriptor.getReadMethod());
}
public JavaClass getClazz() {
return clazz;
}
public String toString() {
return "JavaClass:"+clazz+" JavaProperty:"+getName();
}
public static class JPAUtils {
private static boolean isJPAClassAvaiable = false;
static {
try {
Class.forName("javax.persistence.Table");
isJPAClassAvaiable = true;
} catch (ClassNotFoundException e) {
}
}
public static boolean isPk(Method readMethod) {
if (isJPAClassAvaiable) {
if (readMethod != null && readMethod.isAnnotationPresent(classForName("javax.persistence.Id"))) {
return true;
}
}
return false;
}
private static Class classForName(String clazz) {
try {
return Class.forName(clazz);
} catch (ClassNotFoundException e) {
return null;
}
}
}
}