1 23 package com.sun.enterprise.tools.verifier.tests.ejb.entity.cmp2; 24 25 import java.util.*; 26 import java.lang.reflect.Method ; 27 import java.lang.reflect.Modifier ; 28 import com.sun.enterprise.deployment.*; 29 import com.sun.enterprise.tools.verifier.Result; 30 import com.sun.enterprise.tools.verifier.tests.ejb.EjbUtils; 31 import com.sun.enterprise.tools.verifier.tests.*; 32 33 34 40 public class DependentValueClassModifiers extends CmpFieldTest { 41 42 52 protected boolean runIndividualCmpFieldTest(Descriptor entity, Descriptor persistentField, Class c, Result result) { 53 ComponentNameConstructor compName = getVerifierContext().getComponentNameConstructor(); 54 String fieldName = persistentField.getName(); 55 String getMethodName = "get" + Character.toUpperCase(fieldName.charAt(0)) + fieldName.substring(1); 56 Method getMethod = getMethod(c, getMethodName, null); 57 if (getMethod != null) { 58 Class returnType = getMethod.getReturnType(); 59 if (returnType.isArray()) { 61 returnType = returnType.getComponentType(); 62 } 63 if (returnType.isPrimitive()) { 64 result.addGoodDetails(smh.getLocalString 65 ("tests.componentNameConstructor", 66 "For [ {0} ]", 67 new Object [] {compName.toString()})); 68 result.addGoodDetails(smh.getLocalString( 69 "com.sun.enterprise.tools.verifier.tests.ejb.entity.cmp2.CMPTest.DependentValueClassModifiers.notApplicable", 70 "Field [ {0} ] is not a dependent value class reference", 71 new Object [] {fieldName})); 72 return true; 73 } 74 if (returnType.isInterface()) { 75 result.addGoodDetails(smh.getLocalString 76 ("tests.componentNameConstructor", 77 "For [ {0} ]", 78 new Object [] {compName.toString()})); 79 result.addGoodDetails(smh.getLocalString( 80 "com.sun.enterprise.tools.verifier.tests.ejb.entity.cmp2.CMPTest.DependentValueClassModifiers.notApplicable", 81 "Field [ {0} ] is not a dependent value class reference", 82 new Object [] {fieldName})); 83 return true; 84 } 85 if (returnType.toString().startsWith("class java.")) { 86 result.addGoodDetails(smh.getLocalString 87 ("tests.componentNameConstructor", 88 "For [ {0} ]", 89 new Object [] {compName.toString()})); 90 result.addGoodDetails(smh.getLocalString( 91 "com.sun.enterprise.tools.verifier.tests.ejb.entity.cmp2.CMPTest.DependentValueClassModifiers.notApplicable", 92 "Field [ {0} ] is not a dependent value class reference", 93 new Object [] {fieldName})); 94 return true; 95 } 96 EjbBundleDescriptor bundle = ((EjbDescriptor) entity).getEjbBundleDescriptor(); 98 if ((isValidInterface(returnType, bundle.getEjbs(),MethodDescriptor.EJB_REMOTE)) || 99 (isValidInterface(returnType, bundle.getEjbs(),MethodDescriptor.EJB_LOCAL))) { 100 result.addGoodDetails(smh.getLocalString 101 ("tests.componentNameConstructor", 102 "For [ {0} ]", 103 new Object [] {compName.toString()})); 104 result.addGoodDetails(smh.getLocalString( 105 "com.sun.enterprise.tools.verifier.tests.ejb.entity.cmp2.CMPTest.DependentValueClassModifiers.notApplicable", 106 "Field [ {0} ] is not a dependent value class reference", 107 new Object [] {fieldName})); 108 return true; 109 } 110 111 int modifiers = returnType.getModifiers(); 113 if (Modifier.isPublic(modifiers) && 114 Modifier.isAbstract(modifiers) == false && 115 EjbUtils.isValidSerializableType(returnType)) { 116 result.addGoodDetails(smh.getLocalString 117 ("tests.componentNameConstructor", 118 "For [ {0} ]", 119 new Object [] {compName.toString()})); 120 result.addGoodDetails(smh.getLocalString( 121 "com.sun.enterprise.tools.verifier.tests.ejb.entity.cmp2.CMPTest.DependentValueClassModifiers.passed", 122 "Dependent value class [ {0} ] reference by cmp field [ {1} ] is public, not abstract and serializable", 123 new Object [] {returnType.getName(), fieldName})); 124 return true; 125 } else { 126 result.addWarningDetails(smh.getLocalString 127 ("tests.componentNameConstructor", 128 "For [ {0} ]", 129 new Object [] {compName.toString()})); 130 result.addWarningDetails(smh.getLocalString( 131 "com.sun.enterprise.tools.verifier.tests.ejb.entity.cmp2.CMPTest.DependentValueClassModifiers.failed", 132 "Verifier cannot find out if [ {0} ] is a Dependent value class (reference by cmp field [ {1} ]) ", 133 new Object [] {returnType.getName(), fieldName})); 134 return false; 135 } 136 } else { 137 result.addErrorDetails(smh.getLocalString 138 ("tests.componentNameConstructor", 139 "For [ {0} ]", 140 new Object [] {compName.toString()})); 141 result.addErrorDetails(smh.getLocalString 142 ("com.sun.enterprise.tools.verifier.tests.ejb.entity.cmp2.CMPTest.isAccessorDeclared.failed2", 143 "Error : Cannot find accessor [ {0} ] method for [ {1} ] field ", 144 new Object [] {getMethodName, fieldName})); 145 return false; 146 } 147 } 148 149 private boolean isValidInterface(Class fieldType, Set entities, String interfaceType) { 150 151 if (entities==null) 152 return false; 153 154 Iterator iterator = entities.iterator(); 155 if (interfaceType.equals(MethodDescriptor.EJB_REMOTE)) { 156 while (iterator.hasNext()) { 157 EjbAbstractDescriptor entity = (EjbAbstractDescriptor) iterator.next(); 158 if (fieldType.getName().equals(entity.getHomeClassName()) || 159 fieldType.getName().equals(entity.getRemoteClassName())) 160 return true; 161 } 162 } 163 if (interfaceType.equals(MethodDescriptor.EJB_LOCAL)) { 164 while (iterator.hasNext()) { 165 EjbAbstractDescriptor entity = (EjbAbstractDescriptor) iterator.next(); 166 if (fieldType.getName().equals(entity.getLocalHomeClassName()) || 167 fieldType.getName().equals(entity.getLocalClassName())) 168 return true; 169 } 170 } 171 return false; 172 } 173 } 174 | Popular Tags |