KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > netbeans > modules > j2ee > refactoring > EjbInterfaceType


1 /*
2  * The contents of this file are subject to the terms of the Common Development
3  * and Distribution License (the License). You may not use this file except in
4  * compliance with the License.
5  *
6  * You can obtain a copy of the License at http://www.netbeans.org/cddl.html
7  * or http://www.netbeans.org/cddl.txt.
8  *
9  * When distributing Covered Code, include this CDDL Header Notice in each file
10  * and include the License file at http://www.netbeans.org/cddl.txt.
11  * If applicable, add the following below the CDDL Header, with the fields
12  * enclosed by brackets [] replaced by your own identifying information:
13  * "Portions Copyrighted [year] [name of copyright owner]"
14  *
15  * The Original Software is NetBeans. The Initial Developer of the Original
16  * Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun
17  * Microsystems, Inc. All Rights Reserved.
18  */

19
20 package org.netbeans.modules.j2ee.refactoring;
21
22 import org.netbeans.modules.j2ee.dd.api.ejb.Ejb;
23 import org.netbeans.modules.j2ee.dd.api.ejb.EntityAndSession;
24 import org.netbeans.modules.j2ee.dd.api.ejb.MessageDriven;
25 import org.netbeans.modules.j2ee.dd.api.ejb.Entity;
26 import org.netbeans.modules.j2ee.dd.api.ejb.Session;
27 import org.netbeans.modules.j2ee.dd.api.ejb.EnterpriseBeans;
28 import org.netbeans.modules.j2ee.dd.api.common.CommonDDBean;
29 import org.netbeans.modules.j2ee.dd.api.common.EjbLocalRef;
30 import org.netbeans.modules.j2ee.dd.api.common.EjbRef;
31 import org.netbeans.jmi.javamodel.JavaClass;
32 import org.netbeans.jmi.javamodel.ClassDefinition;
33
34 import java.util.Iterator JavaDoc;
35
36 /**
37  * @author pfiala
38  */

39 public abstract class EjbInterfaceType {
40
41     public static final EjbInterfaceType BEAN_IMPL = new EjbInterfaceType() {
42         public String JavaDoc getClassName(Ejb bean) {
43             return bean == null ? null : bean.getEjbClass();
44         }
45
46         public void setNewClassName(Ejb bean, String JavaDoc newName) {
47             if (bean != null) {
48                 bean.setEjbClass(newName);
49             }
50         }
51
52         protected String JavaDoc getSuperClassName(Class JavaDoc beanType) {
53             if (MessageDriven.class.isAssignableFrom(beanType)) {
54                 return Utility.MESSAGE_DRIVEN_BEAN;
55             } else if (Entity.class.isAssignableFrom(beanType)) {
56                 return Utility.ENTITY_BEAN;
57             } else if (Session.class.isAssignableFrom(beanType)) {
58                 return Utility.SESSION_BEAN;
59             } else {
60                 return null;
61             }
62         }
63
64         public String JavaDoc getSuffix() {
65             return "Bean"; //NOI18N
66
}
67
68         public String JavaDoc toString() {
69             return "implementation class"; //NOI18N
70
}
71     };
72
73     public static final EjbInterfaceType LOCAL_HOME = new EjbInterfaceType() {
74         public String JavaDoc getClassName(Ejb bean) {
75             if (bean instanceof EntityAndSession) {
76                 return ((EntityAndSession) bean).getLocalHome();
77             } else {
78                 return null;
79             }
80         }
81
82         public void setNewClassName(Ejb bean, String JavaDoc newName) {
83             if (bean instanceof EntityAndSession) {
84                 ((EntityAndSession) bean).setLocalHome(newName);
85             }
86         }
87
88         protected String JavaDoc getSuperClassName(Class JavaDoc beanType) {
89             return Utility.EJB_LOCAL_HOME;
90         }
91
92         public String JavaDoc getSuffix() {
93             return "LocalHome"; //NOI18N
94
}
95
96         public String JavaDoc toString() {
97             return "local home interface"; //NOI18N
98
}
99
100         public CommonDDBean[] getReferences(Ejb bean) {
101             return bean.getEjbLocalRef();
102         }
103
104         public String JavaDoc getReferenceValue(CommonDDBean ref) {
105             return ((EjbLocalRef)ref).getLocalHome();
106         }
107
108         public void setRefValue(CommonDDBean ref, String JavaDoc value) {
109             ((EjbLocalRef) ref).setLocalHome(value);
110         }
111     };
112
113     public static final EjbInterfaceType LOCAL = new EjbInterfaceType() {
114         public String JavaDoc getClassName(Ejb bean) {
115             if (bean instanceof EntityAndSession) {
116                 return ((EntityAndSession) bean).getLocal();
117             } else {
118                 return null;
119             }
120         }
121
122         public void setNewClassName(Ejb bean, String JavaDoc newName) {
123             if (bean instanceof EntityAndSession) {
124                 ((EntityAndSession) bean).setLocal(newName);
125             }
126         }
127
128         protected String JavaDoc getSuperClassName(Class JavaDoc beanType) {
129             return Utility.EJB_LOCAL_OBJECT;
130         }
131
132         public String JavaDoc getSuffix() {
133             return "Local"; //NOI18N
134
}
135
136         public String JavaDoc toString() {
137             return "local interface"; //NOI18N
138
}
139
140         public CommonDDBean[] getReferences(Ejb bean) {
141             return bean.getEjbLocalRef();
142         }
143
144         public String JavaDoc getReferenceValue(CommonDDBean ref) {
145             return ((EjbLocalRef)ref).getLocal();
146         }
147
148         public void setRefValue(CommonDDBean ref, String JavaDoc value) {
149             ((EjbLocalRef) ref).setLocal(value);
150         }
151     };
152
153     public static final EjbInterfaceType REMOTE = new EjbInterfaceType() {
154         public String JavaDoc getClassName(Ejb bean) {
155             if (bean instanceof EntityAndSession) {
156                 return ((EntityAndSession) bean).getRemote();
157             } else {
158                 return null;
159             }
160         }
161
162         public void setNewClassName(Ejb bean, String JavaDoc newName) {
163             if (bean instanceof EntityAndSession) {
164                 ((EntityAndSession) bean).setRemote(newName);
165             }
166         }
167
168         protected String JavaDoc getSuperClassName(Class JavaDoc beanType) {
169             return Utility.EJB_OBJECT;
170         }
171
172         public String JavaDoc getSuffix() {
173             return "Remote"; //NOI18N
174
}
175
176         public String JavaDoc toString() {
177             return "remote interface"; //NOI18N
178
}
179
180         public CommonDDBean[] getReferences(Ejb bean) {
181             return bean.getEjbRef();
182         }
183
184         public String JavaDoc getReferenceValue(CommonDDBean ref) {
185             return ((EjbRef)ref).getRemote();
186         }
187
188         public void setRefValue(CommonDDBean ref, String JavaDoc value) {
189             ((EjbRef) ref).setRemote(value);
190         }
191     };
192
193     public static final EjbInterfaceType HOME = new EjbInterfaceType() {
194         public String JavaDoc getClassName(Ejb bean) {
195             if (bean instanceof EntityAndSession) {
196                 return ((EntityAndSession) bean).getHome();
197             } else {
198                 return null;
199             }
200         }
201
202         public void setNewClassName(Ejb bean, String JavaDoc newName) {
203             if (bean instanceof EntityAndSession) {
204                 ((EntityAndSession) bean).setHome(newName);
205             }
206         }
207
208         protected String JavaDoc getSuperClassName(Class JavaDoc beanType) {
209             return Utility.EJB_HOME;
210         }
211
212         public String JavaDoc getSuffix() {
213             return "RemoteHome"; //NOI18N
214
}
215
216         public String JavaDoc toString() {
217             return "home interface"; //NOI18N
218
}
219
220         public CommonDDBean[] getReferences(Ejb bean) {
221             return bean.getEjbRef();
222         }
223
224         public String JavaDoc getReferenceValue(CommonDDBean ref) {
225             return ((EjbRef)ref).getHome();
226         }
227
228         public void setRefValue(CommonDDBean ref, String JavaDoc value) {
229             ((EjbRef) ref).setHome(value);
230         }
231     };
232
233     public static final EjbInterfaceType LOCAL_BUSINESS = new EjbInterfaceType() {
234         public String JavaDoc getClassName(Ejb bean) {
235             return getClassNameForBeanBaseName(LOCAL.getBeanBaseName(LOCAL.getClassName(bean)));
236         }
237
238         public void setNewClassName(Ejb bean, String JavaDoc newName) {
239
240         }
241
242         protected String JavaDoc getSuperClassName(Class JavaDoc beanType) {
243             return null;
244         }
245
246         public String JavaDoc getSuffix() {
247             return "LocalBusiness"; //NOI18N
248
}
249
250         public String JavaDoc toString() {
251             return "local business interface"; //NOI18N
252
}
253     };
254
255     public static final EjbInterfaceType REMOTE_BUSINESS = new EjbInterfaceType() {
256         public String JavaDoc getClassName(Ejb bean) {
257             return getClassNameForBeanBaseName(REMOTE.getBeanBaseName(REMOTE.getClassName(bean)));
258         }
259
260         public void setNewClassName(Ejb bean, String JavaDoc newName) {
261
262         }
263
264         protected String JavaDoc getSuperClassName(Class JavaDoc beanType) {
265             return null;
266         }
267
268         public String JavaDoc getSuffix() {
269             return "RemoteBusiness"; //NOI18N
270
}
271
272         public String JavaDoc toString() {
273             return "remote business interface"; //NOI18N
274
}
275     };
276
277     public abstract String JavaDoc getClassName(Ejb bean);
278
279     public abstract void setNewClassName(Ejb bean, String JavaDoc newName);
280     protected abstract String JavaDoc getSuperClassName(Class JavaDoc beanType);
281     public abstract String JavaDoc getSuffix();
282
283     public JavaClass resolveClass(Ejb bean) {
284         JavaClass javaClass = Utility.resolveRealClass(getClassName(bean));
285         if (javaClass != null) {
286             String JavaDoc superClassName = getSuperClassName(bean.getClass());
287             if (superClassName == null || Utility.isSubTypeOf(javaClass, superClassName)) {
288                 return javaClass;
289             }
290         }
291         return null;
292     }
293
294     public String JavaDoc getClassNameForBeanBaseName(String JavaDoc beanBaseName) {
295         return beanBaseName + getSuffix();
296     }
297
298     public String JavaDoc getBeanBaseName(String JavaDoc className) {
299         return stripSuffix(className, getSuffix());
300     }
301
302     private static String JavaDoc stripSuffix(String JavaDoc s, String JavaDoc suffix) {
303         return s != null && s.endsWith(suffix) ? s.substring(0, s.length() - suffix.length()) : s;
304     }
305
306     public Ejb getBean(EnterpriseBeans eBeans, Class JavaDoc beanType, String JavaDoc className) {
307         if (eBeans != null) {
308             Ejb[] ejbs = eBeans.getEjbs();
309             if (ejbs != null) {
310                 for (int i = 0; i < ejbs.length; i++) {
311                     Ejb ejb = ejbs[i];
312                     if (ejb != null && beanType.isAssignableFrom(ejb.getClass())) {
313                         Ejb bean = ejbs[i];
314                         if (className.equals(getClassName(bean))) {
315                             return bean;
316                         }
317                     }
318                 }
319             }
320         }
321         return null;
322     }
323
324     public Ejb getBean(EnterpriseBeans eBeans, Class JavaDoc beanType, ClassDefinition jc) {
325         if (eBeans != null) {
326             Ejb[] ejbs = eBeans.getEjbs();
327             if (ejbs != null) {
328                 for (int i = 0; i < ejbs.length; i++) {
329                     Ejb ejb = ejbs[i];
330                     if (ejb != null && beanType.isAssignableFrom(ejb.getClass())) {
331                         Ejb bean = ejbs[i];
332                         JavaClass javaClass = resolveClass(bean);
333                         if (javaClass != null && (javaClass.isSubTypeOf(jc) ||jc.isSubTypeOf(javaClass))) {
334                             return bean;
335                         }
336                     }
337                 }
338             }
339         }
340         return null;
341     }
342
343     public CommonDDBean[] getReferences(Ejb bean) {
344         return null;
345     }
346
347     public String JavaDoc getReferenceValue(CommonDDBean ref) {
348         return null;
349     }
350
351     public void setRefValue(CommonDDBean ref, String JavaDoc value) {
352     }
353
354
355
356     public static EjbInterfaceType getEjbInterfaceType(ClassDefinition javaClass, boolean resolveBusiness) {
357         if (Utility.isSubTypeOf(javaClass, Utility.EJB_LOCAL_OBJECT)) {
358             return LOCAL;
359         } else if (Utility.isSubTypeOf(javaClass, Utility.EJB_OBJECT)) {
360             return REMOTE;
361         } else if (Utility.isSubTypeOf(javaClass, Utility.EJB_HOME)) {
362             return HOME;
363         } else if (Utility.isSubTypeOf(javaClass, Utility.EJB_LOCAL_HOME)) {
364             return LOCAL_HOME;
365         } else if (Utility.isSubTypeOf(javaClass, Utility.SESSION_BEAN) ||
366                 Utility.isSubTypeOf(javaClass, Utility.ENTITY_BEAN) ||
367                 Utility.isSubTypeOf(javaClass, Utility.MESSAGE_DRIVEN_BEAN)) {
368             return BEAN_IMPL;
369         } else {
370             for (Iterator JavaDoc it = ((JavaClass) javaClass).getImplementors().iterator(); it.hasNext();) {
371                 ClassDefinition implementor = (ClassDefinition) it.next();
372                 EjbInterfaceType ejbInterfaceType = getEjbInterfaceType(implementor, false);
373                 if (ejbInterfaceType != null) {
374                     if (resolveBusiness) {
375                         String JavaDoc beanBaseName = ejbInterfaceType.getBeanBaseName(implementor.getName());
376                         if (ejbInterfaceType == LOCAL) {
377                             if (beanBaseName.equals(LOCAL_BUSINESS.getBeanBaseName(javaClass.getName()))) {
378                                 return LOCAL_BUSINESS;
379                             }
380                         } else if (ejbInterfaceType == REMOTE) {
381                             if (beanBaseName.equals(REMOTE_BUSINESS.getBeanBaseName(javaClass.getName()))) {
382                                 return REMOTE_BUSINESS;
383                             }
384                         }
385                     } else {
386                         return ejbInterfaceType;
387                     }
388                 }
389             }
390             return null;
391         }
392     }
393 }
394
Popular Tags