1 package org.codehaus.nanning.config;
2
3 import org.codehaus.nanning.AspectException;
4 import org.codehaus.nanning.AspectInstance;
5 import org.codehaus.nanning.Mixin;
6
7 public class FindTargetMixinAspect implements Aspect {
8 private static final String DEFAULT_IMPLEMENTATION_SUFFIX = "Impl";
9 private String implementationSuffix = DEFAULT_IMPLEMENTATION_SUFFIX;
10
11 public FindTargetMixinAspect() {
12 this(DEFAULT_IMPLEMENTATION_SUFFIX);
13 }
14
15 public FindTargetMixinAspect(String 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 Mixin mixin = new Mixin();
29
30 Class interfaceClass = aspectInstance.getClassIdentifier();
31 Class targetClass = findImpl(interfaceClass);
32 Object target;
33 try {
34 target = targetClass.newInstance();
35 } catch (Exception 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 findImpl(Class interfaceClass) {
48 Class impl = findImpl(interfaceClass, implementationSuffix);
49 assert impl != null : "could not find target for " + interfaceClass;
50 return impl;
51 }
52
53 public static Class findImpl(Class interfaceClass, String implementationSuffix) {
54 String name = interfaceClass.getName();
55 >int packageEnd = name.lastIndexOf('.');
56 String className = name.substring(0, packageEnd) + name.substring(packageEnd) + implementationSuffix;
57 try {
58 return Class.forName(className);
59 } catch (ClassNotFoundException e) {
60 return null;
61 }
62 }
63 }
This page was automatically generated by Maven