1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 package org.openrdf.elmo.impl;
30
31 import java.lang.reflect.InvocationTargetException;
32 import java.lang.reflect.Method;
33 import java.util.ArrayList;
34 import java.util.Collections;
35 import java.util.List;
36 import java.util.Map;
37
38 import javax.interceptor.InvocationContext;
39
40
41
42
43
44
45
46
47 public class InvocationContextImpl implements InvocationContext {
48
49 private Object target;
50
51 private Method method;
52
53 private Object[] parameters;
54
55 private Method proceed;
56
57 private List<Object> invokeTarget = new ArrayList<Object>();
58
59 private List<Method> invokeMethod = new ArrayList<Method>();
60
61 private int count;
62
63 public InvocationContextImpl(Object target, Method method,
64 Object[] parameters, Method proceed) {
65 this.target = target;
66 this.method = method;
67 this.parameters = parameters;
68 this.proceed = proceed;
69 }
70
71 public InvocationContextImpl appendInvocation(Object target, Method method) {
72 invokeTarget.add(target);
73 invokeMethod.add(method);
74 return this;
75 }
76
77 public Object getTarget() {
78 return target;
79 }
80
81 public Method getMethod() {
82 return method;
83 }
84
85 public Object[] getParameters() {
86 return parameters;
87 }
88
89 public void setParameters(Object[] parameters) {
90 this.parameters = parameters;
91 }
92
93 @SuppressWarnings("unchecked")
94 public Map<String, Object> getContextData() {
95 return Collections.EMPTY_MAP;
96 }
97
98 public Object proceed() throws Exception {
99 try {
100 if (count < invokeTarget.size()) {
101 Method im = invokeMethod.get(count);
102 Object it = invokeTarget.get(count);
103 count++;
104 Class<?>[] param = im.getParameterTypes();
105 if (param.length == 1
106 && param[0].equals(InvocationContext.class))
107 return im.invoke(it, this);
108 return im.invoke(it, getParameters());
109 }
110 return proceed.invoke(target, parameters);
111 } catch (InvocationTargetException e) {
112 Throwable cause = e.getCause();
113 if (cause instanceof Exception)
114 throw (Exception) cause;
115 throw e;
116 }
117 }
118
119 }