01: /*
02: * All content copyright (c) 2003-2007 Terracotta, Inc., except as may otherwise be noted in a separate copyright
03: * notice. All rights reserved.
04: */
05: package org.terracotta.modules.iBatis_2_2_0.object.config;
06:
07: import com.tc.ibatis.IBatisAccessPlanInstance;
08: import com.tc.object.config.ChangeApplicatorSpec;
09:
10: public class IBatisChangeApplicatorSpec implements ChangeApplicatorSpec {
11: private final static String IBATIS_ACCESS_PLAN_APPLICATOR_CLASS_NAME = "org.terracotta.modules.iBatis_2_2_0.object.applicator.IBatisAccessPlanApplicator";
12:
13: private final ClassLoader classLoader;
14:
15: public IBatisChangeApplicatorSpec(ClassLoader classLoader) {
16: this .classLoader = classLoader;
17: }
18:
19: public Class getChangeApplicator(Class clazz) {
20: String changeApplicatorClassName = null;
21: if (isIBatisAccessPlan(clazz)) {
22: changeApplicatorClassName = IBATIS_ACCESS_PLAN_APPLICATOR_CLASS_NAME;
23: }
24: if (changeApplicatorClassName != null) {
25: try {
26: if (classLoader == null) {
27: return Class.forName(changeApplicatorClassName);
28: } else {
29: return Class.forName(changeApplicatorClassName,
30: false, classLoader);
31: }
32: } catch (Exception e) {
33: throw new AssertionError(e);
34: }
35: }
36: return null;
37: }
38:
39: public static boolean isIBatisAccessPlan(Class clazz) {
40: if (IBatisAccessPlanInstance.class.getName().equals(
41: clazz.getName())) {
42: return true;
43: }
44: Class super class = clazz.getSuperclass();
45: if (super class == null) {
46: return false;
47: }
48: if (super class.getName().equals(
49: "com.ibatis.sqlmap.engine.accessplan.BaseAccessPlan")) {
50: return true;
51: }
52: return false;
53:
54: }
55: }
|