1
2
3
4
5
6
7
8
9
10
11
12
13
14 package org.castor.core.annotationprocessing;
15
16 import java.lang.annotation.Annotation;
17 import java.util.ArrayList;
18 import java.util.HashMap;
19 import java.util.HashSet;
20 import java.util.Map;
21 import java.util.Set;
22
23 import org.castor.core.nature.BaseNature;
24
25
26
27
28
29
30
31
32
33
34
35 public class BaseAnnotationProcessingService implements AnnotationProcessingService {
36
37
38
39
40 private Map<Class<? extends Annotation>, AnnotationProcessor> _annotationProcessorMap =
41 new HashMap<Class<? extends Annotation>, AnnotationProcessor>();
42
43
44
45
46
47
48
49 public void addAnnotationProcessor(final AnnotationProcessor annotationProcessor) {
50 if (annotationProcessor != null) {
51 _annotationProcessorMap.put(annotationProcessor.forAnnotationClass(), annotationProcessor);
52 }
53 }
54
55
56
57
58
59
60 public Set<AnnotationProcessor> getAnnotationProcessors() {
61 return new HashSet<AnnotationProcessor>(_annotationProcessorMap.values());
62 }
63
64
65
66
67
68
69
70 public <I extends BaseNature> Annotation[] processAnnotations(I info,
71 final Annotation[] annotations) {
72 ArrayList<Annotation> unprocessed = new ArrayList<Annotation>();
73
74 for (int i = 0; i < annotations.length; i++) {
75 if (processAnnotation(info, annotations[i]) == false) {
76 unprocessed.add(annotations[i]);
77 }
78 }
79
80 Annotation[] arrReturn = new Annotation[unprocessed.size()];
81
82 return unprocessed.toArray(arrReturn);
83 }
84
85
86
87
88
89
90
91 public <I extends BaseNature, A extends Annotation> boolean processAnnotation(I info,
92 final A annotation) {
93 boolean processed = false;
94 AnnotationProcessor annotationProcessor =
95 _annotationProcessorMap.get(annotation.annotationType());
96 if (annotationProcessor != null) {
97 processed = annotationProcessor.processAnnotation(info, annotation);
98 }
99 return processed;
100 }
101 }