use of com.twinsoft.convertigo.beans.core.MySimpleBeanInfo in project convertigo by convertigo.
the class CheckBeans method analyzeJavaClass.
private static void analyzeJavaClass(String javaClassName) {
try {
Class<?> javaClass = Class.forName(javaClassName);
String javaClassSimpleName = javaClass.getSimpleName();
if (!DatabaseObject.class.isAssignableFrom(javaClass)) {
// Error.NON_DATABASE_OBJECT.add(javaClassName);
return;
}
nBeanClass++;
String dboBeanInfoClassName = javaClassName + "BeanInfo";
MySimpleBeanInfo dboBeanInfo = null;
try {
dboBeanInfo = (MySimpleBeanInfo) Class.forName(dboBeanInfoClassName).getConstructor().newInstance();
} catch (ClassNotFoundException e) {
if (!Modifier.isAbstract(javaClass.getModifiers())) {
Error.MISSING_BEAN_INFO.add(javaClassName + " (expected bean info: " + dboBeanInfoClassName + ")");
}
return;
} catch (Exception e) {
e.printStackTrace();
return;
}
BeanDescriptor beanDescriptor = dboBeanInfo.getBeanDescriptor();
// Check abstract class
if (Modifier.isAbstract(javaClass.getModifiers())) {
// Check icon (16x16)
String declaredIconName = MySimpleBeanInfo.getIconName(dboBeanInfo, MySimpleBeanInfo.ICON_COLOR_16x16);
if (declaredIconName != null) {
Error.ABSTRACT_CLASS_WITH_ICON.add(javaClassName);
}
// Check icon (32x32)
declaredIconName = MySimpleBeanInfo.getIconName(dboBeanInfo, MySimpleBeanInfo.ICON_COLOR_32x32);
if (declaredIconName != null) {
Error.ABSTRACT_CLASS_WITH_ICON.add(javaClassName);
}
// Check display name
if (!beanDescriptor.getDisplayName().equals("?")) {
Error.ABSTRACT_CLASS_WITH_DISPLAY_NAME.add(javaClassName);
}
// Check description
if (!beanDescriptor.getShortDescription().equals("?")) {
Error.ABSTRACT_CLASS_WITH_DESCRIPTION.add(javaClassName);
}
} else {
nBeanClassNotAbstract++;
// Check bean declaration in database_objects.xml
if (!dboXmlDeclaredDatabaseObjects.contains(javaClassName)) {
Error.BEAN_DEFINED_BUT_NOT_USED.add(javaClassName);
}
// Check icon name policy (16x16)
String declaredIconName = MySimpleBeanInfo.getIconName(dboBeanInfo, MySimpleBeanInfo.ICON_COLOR_16x16);
String expectedIconName = javaClassName.replace(javaClassSimpleName, "images/" + javaClassSimpleName);
expectedIconName = "/" + expectedIconName.replace('.', '/') + "_color_16x16";
expectedIconName = expectedIconName.toLowerCase() + ".png";
if (declaredIconName != null) {
if (!declaredIconName.equals(expectedIconName)) {
Error.BEAN_ICON_NAMING_POLICY.add(javaClassName + "\n" + " Declared: " + declaredIconName + "\n" + " Expected: " + expectedIconName);
}
}
// Check icon file (16x16)
File iconFile = new File(srcBase + declaredIconName);
if (!iconFile.exists()) {
Error.BEAN_MISSING_ICON.add(javaClassName + " - icon missing: " + declaredIconName);
} else {
icons.remove(declaredIconName);
}
// Check icon name policy (32x32)
declaredIconName = MySimpleBeanInfo.getIconName(dboBeanInfo, MySimpleBeanInfo.ICON_COLOR_32x32);
expectedIconName = javaClassName.replace(javaClassSimpleName, "images/" + javaClassSimpleName);
expectedIconName = "/" + expectedIconName.replace('.', '/') + "_color_32x32";
expectedIconName = expectedIconName.toLowerCase() + ".png";
if (declaredIconName != null) {
if (!declaredIconName.equals(expectedIconName)) {
Error.BEAN_ICON_NAMING_POLICY.add(javaClassName + "\n" + " Declared: " + declaredIconName + "\n" + " Expected: " + expectedIconName);
}
}
// Check icon file (32x32)
iconFile = new File(srcBase + declaredIconName);
if (!iconFile.exists()) {
Error.BEAN_MISSING_ICON.add(javaClassName + " - icon missing: " + declaredIconName);
} else {
icons.remove(declaredIconName);
}
// Check display name
if (beanDescriptor.getDisplayName().equals("?")) {
Error.BEAN_MISSING_DISPLAY_NAME.add(javaClassName);
}
// Check description
if (beanDescriptor.getShortDescription().equals("?")) {
Error.BEAN_MISSING_DESCRIPTION.add(javaClassName);
}
}
// Check declared bean properties
PropertyDescriptor[] propertyDescriptors = dboBeanInfo.getLocalPropertyDescriptors();
for (PropertyDescriptor propertyDescriptor : propertyDescriptors) {
String propertyName = propertyDescriptor.getName();
try {
javaClass.getDeclaredField(propertyName);
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchFieldException e) {
try {
// Try to find it in the upper classes
javaClass.getField(propertyName);
} catch (SecurityException e1) {
// printStackTrace();
} catch (NoSuchFieldException e1) {
Error.PROPERTY_DECLARED_BUT_NOT_FOUND.add(javaClassName + ": " + propertyName);
}
}
}
Method[] methods = javaClass.getDeclaredMethods();
List<Method> listMethods = Arrays.asList(methods);
List<String> listMethodNames = new ArrayList<String>();
for (Method method : listMethods) {
listMethodNames.add(method.getName());
}
Field[] fields = javaClass.getDeclaredFields();
for (Field field : fields) {
int fieldModifiers = field.getModifiers();
// Ignore static fields (constants)
if (Modifier.isStatic(fieldModifiers))
continue;
String fieldName = field.getName();
String errorMessage = javaClassName + ": " + field.getName();
// Check bean info
PropertyDescriptor propertyDescriptor = isBeanProperty(fieldName, dboBeanInfo);
if (propertyDescriptor != null) {
// Check bean property name policy
if (!propertyDescriptor.getName().equals(fieldName)) {
Error.PROPERTY_NAMING_POLICY.add(errorMessage);
}
String declaredGetter = propertyDescriptor.getReadMethod().getName();
String declaredSetter = propertyDescriptor.getWriteMethod().getName();
String formattedFieldName = Character.toUpperCase(fieldName.charAt(0)) + fieldName.substring(1);
String expectedGetter = "get" + formattedFieldName;
String expectedSetter = "set" + formattedFieldName;
// Check getter name policy
if (!declaredGetter.equals(expectedGetter)) {
Error.GETTER_SETTER_DECLARED_EXPECTED_NAMES_MISMATCH.add(errorMessage + "\n" + " Declared getter: " + declaredGetter + "\n" + " Expected getter: " + expectedGetter);
}
// Check setter name policy
if (!declaredSetter.equals(expectedSetter)) {
Error.GETTER_SETTER_DECLARED_EXPECTED_NAMES_MISMATCH.add(errorMessage + "\n" + " Declared setter: " + declaredSetter + "\n" + " Expected setter: " + expectedSetter);
}
// Check required private modifiers for bean property
if (!Modifier.isPrivate(fieldModifiers)) {
Error.PROPERTY_NOT_PRIVATE.add(errorMessage);
}
// Check getter
if (!listMethodNames.contains(declaredGetter)) {
Error.GETTER_SETTER_DECLARED_BUT_NOT_FOUND.add(errorMessage + " - Declared getter not found: " + declaredGetter);
}
// Check setter
if (!listMethodNames.contains(declaredSetter)) {
Error.GETTER_SETTER_DECLARED_BUT_NOT_FOUND.add(errorMessage + " - Declared setter not found: " + declaredGetter);
}
// Check non transient modifier
if (Modifier.isTransient(fieldModifiers)) {
Error.PROPERTY_TRANSIENT.add(errorMessage);
}
} else if (!Modifier.isTransient(fieldModifiers)) {
Error.FIELD_NOT_TRANSIENT.add(errorMessage);
}
}
} catch (ClassNotFoundException e) {
System.out.println("ERROR on " + javaClassName);
e.printStackTrace();
}
}
Aggregations