KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > terracotta > modules > cglib_2_1_3 > object > config > CGLibChangeApplicatorSpec


1 /*
2  * All content copyright (c) 2003-2007 Terracotta, Inc., except as may otherwise be noted in a separate copyright
3  * notice. All rights reserved.
4  */

5 package org.terracotta.modules.cglib_2_1_3.object.config;
6
7 import org.terracotta.modules.cglib_2_1_3.object.dna.impl.CGLibBulkBeanInstance;
8 import org.terracotta.modules.cglib_2_1_3.object.dna.impl.CGLibFactoryInstance;
9
10 import com.tc.object.config.ChangeApplicatorSpec;
11
12
13 public class CGLibChangeApplicatorSpec implements ChangeApplicatorSpec {
14   private final static String JavaDoc CGLIB_FACTORY_APPLICATOR_CLASS_NAME = "org.terracotta.modules.cglib_2_1_3.object.applicator.CglibProxyApplicator";
15   private final static String JavaDoc CGLIB_BULK_BEAN_APPLICATOR_CLASS_NAME = "org.terracotta.modules.cglib_2_1_3.object.applicator.CglibBulkBeanApplicator";
16
17   private final ClassLoader JavaDoc classLoader;
18
19   public CGLibChangeApplicatorSpec(ClassLoader JavaDoc classLoader) {
20     this.classLoader = classLoader;
21   }
22
23   public Class JavaDoc getChangeApplicator(Class JavaDoc clazz) {
24     String JavaDoc changeApplicatorClassName = null;
25     if (isImplementCglibFactory(clazz)) {
26       changeApplicatorClassName = CGLIB_FACTORY_APPLICATOR_CLASS_NAME;
27     } else if (isCglibBulkBean(clazz)) {
28       changeApplicatorClassName = CGLIB_BULK_BEAN_APPLICATOR_CLASS_NAME;
29     }
30     if (changeApplicatorClassName != null) {
31       try {
32         if (classLoader == null) {
33           return Class.forName(changeApplicatorClassName);
34         } else {
35           return Class.forName(changeApplicatorClassName, false, classLoader);
36         }
37       } catch (Exception JavaDoc e) {
38         throw new AssertionError JavaDoc(e);
39       }
40     }
41     return null;
42   }
43
44   private static boolean isImplementCglibFactory(Class JavaDoc clazz) {
45     if (CGLibFactoryInstance.class.getName().equals(clazz.getName())) { return true; }
46     
47     Class JavaDoc[] interfaces = clazz.getInterfaces();
48     for (int i = 0; i < interfaces.length; i++) {
49       if (interfaces[i].getName().equals("net.sf.cglib.proxy.Factory")) { return true; }
50     }
51     return false;
52   }
53
54   private static boolean isCglibBulkBean(Class JavaDoc clazz) {
55     if (CGLibBulkBeanInstance.class.getName().equals(clazz.getName())) { return true; }
56     
57     Class JavaDoc superClass = clazz.getSuperclass();
58     if (superClass == null) { return false; }
59     return "net.sf.cglib.beans.BulkBean".equals(superClass.getName());
60   }
61
62 }
63
Popular Tags