1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package ch.elca.el4j.util.metadata;
18
19 import java.lang.reflect.Field;
20 import java.lang.reflect.Method;
21 import java.util.ArrayList;
22 import java.util.Collection;
23 import java.util.LinkedHashSet;
24 import java.util.List;
25 import java.util.Set;
26
27 import org.springframework.beans.factory.InitializingBean;
28
29 import ch.elca.el4j.services.monitoring.notification.CoreNotificationHelper;
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88 public class MetaDataCollector implements Attributes, InitializingBean {
89
90
91
92 private Attributes m_metaDataDelegator;
93
94
95
96
97 public Attributes getMetaDataDelegator() {
98 return m_metaDataDelegator;
99 }
100
101
102
103
104 public void setMetaDataDelegator(Attributes metaDataDelegator) {
105 m_metaDataDelegator = metaDataDelegator;
106 }
107
108
109
110
111 @SuppressWarnings("unchecked")
112 public Collection getAttributes(Class targetClass) {
113 Set attributeSet = new LinkedHashSet();
114 List<Class> interfaceList
115 = getAllInterfaces(new ArrayList<Class>(), targetClass);
116 Attributes metaDataDelegator = getMetaDataDelegator();
117
118 attributeSet.addAll(metaDataDelegator.getAttributes(targetClass));
119 for (Class iface : interfaceList) {
120 attributeSet.addAll(metaDataDelegator.getAttributes(iface));
121 }
122
123 return attributeSet;
124 }
125
126
127
128
129 @SuppressWarnings("unchecked")
130 public Collection getAttributes(Class targetClass, Class filter) {
131 Set attributeSet = new LinkedHashSet();
132 List<Class> interfaceList
133 = getAllInterfaces(new ArrayList<Class>(), targetClass);
134 Attributes metaDataDelegator = getMetaDataDelegator();
135
136 attributeSet.addAll(
137 metaDataDelegator.getAttributes(targetClass, filter));
138 for (Class iface : interfaceList) {
139 attributeSet.addAll(
140 metaDataDelegator.getAttributes(iface, filter));
141 }
142
143 return attributeSet;
144 }
145
146
147
148
149 @SuppressWarnings("unchecked")
150 public Collection getAttributes(Method targetMethod) {
151 Set attributeSet = new LinkedHashSet();
152 List<Class> interfaceList = getAllInterfaces(
153 new ArrayList<Class>(), targetMethod.getDeclaringClass());
154 Attributes metaDataDelegator = getMetaDataDelegator();
155
156 attributeSet.addAll(metaDataDelegator.getAttributes(targetMethod));
157 for (Class iface : interfaceList) {
158 try {
159 Method m = iface.getDeclaredMethod(targetMethod.getName(),
160 targetMethod.getParameterTypes());
161 attributeSet.addAll(metaDataDelegator.getAttributes(m));
162
163 } catch (NoSuchMethodException e) {
164
165 }
166
167 }
168
169 return attributeSet;
170 }
171
172
173
174
175 @SuppressWarnings("unchecked")
176 public Collection getAttributes(Method targetMethod, Class filter) {
177 Set attributeSet = new LinkedHashSet();
178 List<Class> interfaceList = getAllInterfaces(
179 new ArrayList<Class>(), targetMethod.getDeclaringClass());
180 Attributes metaDataDelegator = getMetaDataDelegator();
181
182 attributeSet.addAll(
183 metaDataDelegator.getAttributes(targetMethod, filter));
184 for (Class iface : interfaceList) {
185 try {
186 Method m = iface.getDeclaredMethod(targetMethod.getName(),
187 targetMethod.getParameterTypes());
188 attributeSet.addAll(
189 metaDataDelegator.getAttributes(m, filter));
190 } catch (NoSuchMethodException e) {
191
192 }
193 }
194
195 return attributeSet;
196 }
197
198
199
200
201
202
203
204
205
206
207
208 private List<Class> getAllInterfaces(List<Class> list, Class clazz) {
209 if (clazz != null && clazz != Object.class) {
210 Class[] classes = clazz.getInterfaces();
211 for (Class c : classes) {
212 list.add(c);
213 }
214 getAllInterfaces(list, clazz.getSuperclass());
215 }
216 return list;
217 }
218
219
220
221
222
223
224 public Collection getAttributes(Field targetField) {
225 return getMetaDataDelegator().getAttributes(targetField);
226 }
227
228
229
230
231
232
233 public Collection getAttributes(Field targetField, Class filter) {
234 return getMetaDataDelegator().getAttributes(targetField, filter);
235 }
236
237
238
239
240 public void afterPropertiesSet() throws Exception {
241 if (getMetaDataDelegator() == null) {
242 CoreNotificationHelper.notifyLackingEssentialProperty(
243 "metaDataDelegator", this);
244 }
245 }
246 }