KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > sun > enterprise > tools > verifier > tests > ejb > entity > cmp2 > DependentValueClassModifiers


1 /*
2  * The contents of this file are subject to the terms
3  * of the Common Development and Distribution License
4  * (the License). You may not use this file except in
5  * compliance with the License.
6  *
7  * You can obtain a copy of the license at
8  * https://glassfish.dev.java.net/public/CDDLv1.0.html or
9  * glassfish/bootstrap/legal/CDDLv1.0.txt.
10  * See the License for the specific language governing
11  * permissions and limitations under the License.
12  *
13  * When distributing Covered Code, include this CDDL
14  * Header Notice in each file and include the License file
15  * at glassfish/bootstrap/legal/CDDLv1.0.txt.
16  * If applicable, add the following below the CDDL Header,
17  * with the fields enclosed by brackets [] replaced by
18  * you own identifying information:
19  * "Portions Copyrighted [year] [name of copyright owner]"
20  *
21  * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
22  */

23 package com.sun.enterprise.tools.verifier.tests.ejb.entity.cmp2;
24
25 import java.util.*;
26 import java.lang.reflect.Method JavaDoc;
27 import java.lang.reflect.Modifier JavaDoc;
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 /**
35  * Dependent value class must be public and not abstract and must be serializable
36  *
37  * @author Jerome Dochez
38  * @version
39  */

40 public class DependentValueClassModifiers extends CmpFieldTest {
41
42     /**
43      * run an individual verifier test of a declated cmp field of the class
44      *
45      * @param entity the descriptor for the entity bean containing the cmp-field
46      * @param f the descriptor for the declared cmp field
47      * @param c the class owning the cmp field
48      * @parma r the result object to use to put the test results in
49      *
50      * @return true if the test passed
51      */

52     protected boolean runIndividualCmpFieldTest(Descriptor entity, Descriptor persistentField, Class JavaDoc c, Result result) {
53     ComponentNameConstructor compName = getVerifierContext().getComponentNameConstructor();
54         String JavaDoc fieldName = persistentField.getName();
55         String JavaDoc getMethodName = "get" + Character.toUpperCase(fieldName.charAt(0)) + fieldName.substring(1);
56         Method JavaDoc getMethod = getMethod(c, getMethodName, null);
57         if (getMethod != null) {
58             Class JavaDoc returnType = getMethod.getReturnType();
59             // check if this is a reference to a primitive or an array of primitive type
60
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 JavaDoc[] {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 JavaDoc[] {fieldName}));
72                 return true;
73             }
74         if (returnType.isInterface()) {
75         result.addGoodDetails(smh.getLocalString
76                       ("tests.componentNameConstructor",
77                        "For [ {0} ]",
78                        new Object JavaDoc[] {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 JavaDoc[] {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 JavaDoc[] {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 JavaDoc[] {fieldName}));
94                 return true;
95             }
96              // it must be a reference to a bean's home or remote interface
97
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 JavaDoc[] {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 JavaDoc[] {fieldName}));
108         return true;
109         }
110       
111             // this is a reference to a dependent value class
112
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 JavaDoc[] {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 JavaDoc[] {returnType.getName(), fieldName}));
124         return true;
125             } else {
126         result.addWarningDetails(smh.getLocalString
127                       ("tests.componentNameConstructor",
128                        "For [ {0} ]",
129                        new Object JavaDoc[] {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 JavaDoc[] {returnType.getName(), fieldName}));
134         return false;
135             }
136         } else {
137         result.addErrorDetails(smh.getLocalString
138                       ("tests.componentNameConstructor",
139                    "For [ {0} ]",
140                    new Object JavaDoc[] {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 JavaDoc[] {getMethodName, fieldName}));
145             return false;
146         }
147     }
148     
149     private boolean isValidInterface(Class JavaDoc fieldType, Set entities, String JavaDoc 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