run an individual verifier test of a declated cmp field of the class
ComponentNameConstructor compName = getVerifierContext().getComponentNameConstructor();
String fieldName = persistentField.getName();
String getMethodName = "get" + Character.toUpperCase(fieldName.charAt(0)) + fieldName.substring(1);
Method getMethod = getMethod(c, getMethodName, null);
if (getMethod != null) {
Class returnType = getMethod.getReturnType();
// check if this is a reference to a primitive or an array of primitive type
if (returnType.isArray()) {
returnType = returnType.getComponentType();
}
if (returnType.isPrimitive()) {
result.addGoodDetails(smh.getLocalString
("tests.componentNameConstructor",
"For [ {0} ]",
new Object[] {compName.toString()}));
result.addGoodDetails(smh.getLocalString(
"com.sun.enterprise.tools.verifier.tests.ejb.entity.cmp2.CMPTest.DependentValueClassModifiers.notApplicable",
"Field [ {0} ] is not a dependent value class reference",
new Object[] {fieldName}));
return true;
}
if (returnType.isInterface()) {
result.addGoodDetails(smh.getLocalString
("tests.componentNameConstructor",
"For [ {0} ]",
new Object[] {compName.toString()}));
result.addGoodDetails(smh.getLocalString(
"com.sun.enterprise.tools.verifier.tests.ejb.entity.cmp2.CMPTest.DependentValueClassModifiers.notApplicable",
"Field [ {0} ] is not a dependent value class reference",
new Object[] {fieldName}));
return true;
}
if (returnType.toString().startsWith("class java.")) {
result.addGoodDetails(smh.getLocalString
("tests.componentNameConstructor",
"For [ {0} ]",
new Object[] {compName.toString()}));
result.addGoodDetails(smh.getLocalString(
"com.sun.enterprise.tools.verifier.tests.ejb.entity.cmp2.CMPTest.DependentValueClassModifiers.notApplicable",
"Field [ {0} ] is not a dependent value class reference",
new Object[] {fieldName}));
return true;
}
// it must be a reference to a bean's home or remote interface
EjbBundleDescriptor bundle = ((EjbDescriptor) entity).getEjbBundleDescriptor();
if ((isValidInterface(returnType, bundle.getEjbs(),MethodDescriptor.EJB_REMOTE)) ||
(isValidInterface(returnType, bundle.getEjbs(),MethodDescriptor.EJB_LOCAL))) {
result.addGoodDetails(smh.getLocalString
("tests.componentNameConstructor",
"For [ {0} ]",
new Object[] {compName.toString()}));
result.addGoodDetails(smh.getLocalString(
"com.sun.enterprise.tools.verifier.tests.ejb.entity.cmp2.CMPTest.DependentValueClassModifiers.notApplicable",
"Field [ {0} ] is not a dependent value class reference",
new Object[] {fieldName}));
return true;
}
// this is a reference to a dependent value class
int modifiers = returnType.getModifiers();
if (Modifier.isPublic(modifiers) &&
Modifier.isAbstract(modifiers) == false &&
EjbUtils.isValidSerializableType(returnType)) {
result.addGoodDetails(smh.getLocalString
("tests.componentNameConstructor",
"For [ {0} ]",
new Object[] {compName.toString()}));
result.addGoodDetails(smh.getLocalString(
"com.sun.enterprise.tools.verifier.tests.ejb.entity.cmp2.CMPTest.DependentValueClassModifiers.passed",
"Dependent value class [ {0} ] reference by cmp field [ {1} ] is public, not abstract and serializable",
new Object[] {returnType.getName(), fieldName}));
return true;
} else {
result.addWarningDetails(smh.getLocalString
("tests.componentNameConstructor",
"For [ {0} ]",
new Object[] {compName.toString()}));
result.addWarningDetails(smh.getLocalString(
"com.sun.enterprise.tools.verifier.tests.ejb.entity.cmp2.CMPTest.DependentValueClassModifiers.failed",
"Verifier cannot find out if [ {0} ] is a Dependent value class (reference by cmp field [ {1} ]) ",
new Object[] {returnType.getName(), fieldName}));
return false;
}
} else {
result.addErrorDetails(smh.getLocalString
("tests.componentNameConstructor",
"For [ {0} ]",
new Object[] {compName.toString()}));
result.addErrorDetails(smh.getLocalString
("com.sun.enterprise.tools.verifier.tests.ejb.entity.cmp2.CMPTest.isAccessorDeclared.failed2",
"Error : Cannot find accessor [ {0} ] method for [ {1} ] field ",
new Object[] {getMethodName, fieldName}));
return false;
}