1 10 package org.nanocontainer.aop.dynaop; 11 12 import dynaop.Pointcuts; 13 import org.apache.oro.text.regex.MalformedPatternException; 14 import org.nanocontainer.aop.ClassPointcut; 15 import org.nanocontainer.aop.MalformedRegularExpressionException; 16 import org.nanocontainer.aop.MethodPointcut; 17 import org.nanocontainer.aop.defaults.AbstractPointcutsFactory; 18 19 import java.lang.reflect.Method ; 20 21 28 public class DynaopPointcutsFactory extends AbstractPointcutsFactory { 29 30 public ClassPointcut allClasses() { 31 return new DynaopClassPointcut(Pointcuts.ALL_CLASSES); 32 } 33 34 public ClassPointcut instancesOf(Class type) { 35 return new DynaopClassPointcut(Pointcuts.instancesOf(type)); 36 } 37 38 public ClassPointcut className(String regex) { 39 try { 40 return new DynaopClassPointcut(Pointcuts.className(regex)); 41 } catch (MalformedPatternException e) { 42 throw new MalformedRegularExpressionException("malformed class name regular expression", e); 43 } 44 } 45 46 public ClassPointcut oneClass(Class clazz) { 47 return new DynaopClassPointcut(Pointcuts.singleton(clazz)); 48 } 49 50 public ClassPointcut packageName(String packageName) { 51 return new DynaopClassPointcut(Pointcuts.packageName(packageName)); 52 } 53 54 public ClassPointcut intersection(ClassPointcut a, ClassPointcut b) { 55 return new DynaopClassPointcut(Pointcuts.intersection(toDynaopClassCut(a), toDynaopClassCut(b))); 56 } 57 58 public ClassPointcut union(ClassPointcut a, ClassPointcut b) { 59 return new DynaopClassPointcut(Pointcuts.union(toDynaopClassCut(a), toDynaopClassCut(b))); 60 } 61 62 public ClassPointcut not(ClassPointcut classPointcut) { 63 return new DynaopClassPointcut(Pointcuts.not(toDynaopClassCut(classPointcut))); 64 } 65 66 public MethodPointcut allMethods() { 67 return new DynaopMethodPointcut(Pointcuts.ALL_METHODS); 68 } 69 70 public MethodPointcut getMethods() { 71 return new DynaopMethodPointcut(Pointcuts.GET_METHODS); 72 } 73 74 public MethodPointcut isMethods() { 75 return new DynaopMethodPointcut(Pointcuts.IS_METHODS); 76 } 77 78 public MethodPointcut setMethods() { 79 return new DynaopMethodPointcut(Pointcuts.SET_METHODS); 80 } 81 82 public MethodPointcut objectMethods() { 83 return new DynaopMethodPointcut(Pointcuts.OBJECT_METHODS); 84 } 85 86 public MethodPointcut returnType(ClassPointcut classPointcut) { 87 return new DynaopMethodPointcut(Pointcuts.returnType(toDynaopClassCut(classPointcut))); 88 } 89 90 public MethodPointcut signature(String regexp) { 91 try { 92 return new DynaopMethodPointcut(Pointcuts.signature(regexp)); 93 } catch (MalformedPatternException e) { 94 throw new MalformedRegularExpressionException("malformed method signature regular expression", e); 95 } 96 } 97 98 public MethodPointcut oneMethod(Method method) { 99 return new DynaopMethodPointcut(Pointcuts.singleton(method)); 100 } 101 102 public MethodPointcut declaringClass(ClassPointcut classPointcut) { 103 return new DynaopMethodPointcut(Pointcuts.declaringClass(toDynaopClassCut(classPointcut))); 104 } 105 106 public MethodPointcut membersOf(Class clazz) { 107 return new DynaopMethodPointcut(Pointcuts.membersOf(clazz)); 108 } 109 110 public MethodPointcut intersection(MethodPointcut a, MethodPointcut b) { 111 return new DynaopMethodPointcut(Pointcuts.intersection(toDynaopMethodCut(a), toDynaopMethodCut(b))); 112 } 113 114 public MethodPointcut union(MethodPointcut a, MethodPointcut b) { 115 return new DynaopMethodPointcut(Pointcuts.union(toDynaopMethodCut(a), toDynaopMethodCut(b))); 116 } 117 118 public MethodPointcut not(MethodPointcut methodPointcut) { 119 return new DynaopMethodPointcut(Pointcuts.not(toDynaopMethodCut(methodPointcut))); 120 } 121 122 private static dynaop.ClassPointcut toDynaopClassCut(final ClassPointcut nanoCut) { 123 if (nanoCut instanceof dynaop.ClassPointcut) { 131 return (dynaop.ClassPointcut) nanoCut; 132 } else { 133 return new dynaop.ClassPointcut() { 134 public boolean picks(Class clazz) { 135 return nanoCut.picks(clazz); 136 } 137 }; 138 } 139 } 140 141 private static dynaop.MethodPointcut toDynaopMethodCut(final MethodPointcut nanoCut) { 142 if (nanoCut instanceof dynaop.MethodPointcut) { 144 return (dynaop.MethodPointcut) nanoCut; 145 } else { 146 return new dynaop.MethodPointcut() { 147 public boolean picks(Method method) { 148 return nanoCut.picks(method); 149 } 150 }; 151 } 152 } 153 154 }
| Popular Tags
|