KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > tirsen > nanning > config > FindTargetMixinAspect


1 package com.tirsen.nanning.config;
2
3 import com.tirsen.nanning.AspectException;
4 import com.tirsen.nanning.AspectInstance;
5 import com.tirsen.nanning.MixinInstance;
6
7 public class FindTargetMixinAspect implements Aspect {
8     private static final String JavaDoc DEFAULT_IMPLEMENTATION_SUFFIX = "Impl";
9     private String JavaDoc implementationSuffix = DEFAULT_IMPLEMENTATION_SUFFIX;
10
11     public FindTargetMixinAspect() {
12         this(DEFAULT_IMPLEMENTATION_SUFFIX);
13     }
14
15     public FindTargetMixinAspect(String JavaDoc implementationSuffix) {
16         this.implementationSuffix = implementationSuffix;
17     }
18
19     public void introduce(AspectInstance aspectInstance) {
20         if (aspectInstance.getClassIdentifier() == null) {
21             return;
22         }
23         
24         if (aspectInstance.hasMixinForInterface(aspectInstance.getClassIdentifier())) {
25             return;
26         }
27
28         MixinInstance mixin = new MixinInstance();
29
30         Class JavaDoc interfaceClass = aspectInstance.getClassIdentifier();
31         Class JavaDoc targetClass = findImpl(interfaceClass);
32         Object JavaDoc target;
33         try {
34             target = targetClass.newInstance();
35         } catch (Exception JavaDoc e) {
36             throw new AspectException("Could not instantiate target " + targetClass, e);
37         }
38
39         mixin.setInterfaceClass(interfaceClass);
40         mixin.setTarget(target);
41         aspectInstance.addMixin(mixin);
42     }
43
44     public void advise(AspectInstance aspectInstance) {
45     }
46
47     private Class JavaDoc findImpl(Class JavaDoc interfaceClass) {
48         Class JavaDoc impl = findImpl(interfaceClass, implementationSuffix);
49         assert impl != null : "could not find target for " + interfaceClass;
50         return impl;
51     }
52     
53     public static Class JavaDoc findImpl(Class JavaDoc interfaceClass, String JavaDoc implementationSuffix) {
54         String JavaDoc name = interfaceClass.getName();
55         int packageEnd = name.lastIndexOf('.');
56         String JavaDoc className = name.substring(0, packageEnd) + name.substring(packageEnd) + implementationSuffix;
57         try {
58             return Class.forName(className);
59         } catch (ClassNotFoundException JavaDoc e) {
60             return null;
61         }
62     }
63 }
64
Popular Tags