FileDocCategorySizeDatePackage
DependentValueClassModifiers.javaAPI DocGlassfish v2 API8815Fri May 04 22:33:40 BST 2007com.sun.enterprise.tools.verifier.tests.ejb.entity.cmp2

DependentValueClassModifiers

public class DependentValueClassModifiers extends CmpFieldTest
Dependent value class must be public and not abstract and must be serializable
author
Jerome Dochez
version

Fields Summary
Constructors Summary
Methods Summary
private booleanisValidInterface(java.lang.Class fieldType, java.util.Set entities, java.lang.String interfaceType)

        
        if (entities==null)
            return false;
        
        Iterator iterator = entities.iterator();
	if (interfaceType.equals(MethodDescriptor.EJB_REMOTE)) {
	    while (iterator.hasNext()) {
		EjbAbstractDescriptor entity = (EjbAbstractDescriptor) iterator.next();
		if (fieldType.getName().equals(entity.getHomeClassName()) ||
		    fieldType.getName().equals(entity.getRemoteClassName()))
		    return true;
	    }
	}
 	if (interfaceType.equals(MethodDescriptor.EJB_LOCAL)) {
	    while (iterator.hasNext()) {
		EjbAbstractDescriptor entity = (EjbAbstractDescriptor) iterator.next();
		if (fieldType.getName().equals(entity.getLocalHomeClassName()) ||
		    fieldType.getName().equals(entity.getLocalClassName()))
		    return true;
	    } 
	}
	return false;
    
protected booleanrunIndividualCmpFieldTest(Descriptor entity, Descriptor persistentField, java.lang.Class c, com.sun.enterprise.tools.verifier.Result result)
run an individual verifier test of a declated cmp field of the class

param
entity the descriptor for the entity bean containing the cmp-field
param
f the descriptor for the declared cmp field
param
c the class owning the cmp field
parma
r the result object to use to put the test results in
return
true if the test passed

	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;
        }