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