1 package org.neo.swarm.core.aop.silc.comp;
2
3 import java.lang.reflect.Method;
4
5 import org.neo.swarm.core.aop.AspectComponent;
6
7
8 /***
9 * @author damiang
10 */
11 public class CompositePointCut implements Pointcut {
12 private Pointcut p1;
13 private Pointcut p2;
14
15
16 public CompositePointCut(Pointcut p1, Pointcut p2) {
17 this.p1 = p1;
18 this.p2 = p2;
19 }
20
21 public void advise(AspectComponent component, MethodInterceptor interceptor) {
22 Method[] methods = component.getInterfaceMethods();
23 for (int i = 0; i < methods.length; i++) {
24 if (shouldAdvise(component, methods[i])) {
25 component.addInterceptor(Perspective.DEFAULT, interceptor);
26 }
27 }
28 }
29
30 public void advise(Perspective perspective, AspectComponent component, MethodInterceptor interceptor) {
31 Method[] methods = component.getInterfaceMethods();
32 for (int i = 0; i < methods.length; i++) {
33 if (shouldAdvise(component, methods[i])) {
34 component.addInterceptor(perspective, interceptor);
35 }
36 }
37 }
38
39 public boolean shouldAdvise(AspectComponent component, Method method) {
40 return p1.shouldAdvise(component, method) && p2.shouldAdvise(component, method);
41 }
42 }