blob: d0e6b123f897211f26cbed8f144b5284dac29e60 [file] [log] [blame]
Stuart McCulloch26e7a5a2011-10-17 10:31:43 +00001package aQute.lib.osgi;
2
3import java.lang.annotation.*;
4import java.util.*;
5
6import aQute.bnd.annotation.metatype.*;
7
8public class Annotation {
9 String name;
10 Map<String, Object> elements;
11 ElementType member;
12 RetentionPolicy policy;
13
14 public Annotation(String name, Map<String, Object> elements, ElementType member,
15 RetentionPolicy policy) {
16 this.name = name;
17 if ( elements == null)
18 this.elements = Collections.emptyMap();
19 else
20 this.elements = elements;
21 this.member = member;
22 this.policy = policy;
23 }
24
25 public String getName() {
26 return name;
27 }
28
29 public String toString() {
30 return name + ":" + member + ":" + policy + ":" + elements;
31 }
32
33 @SuppressWarnings("unchecked") public <T> T get(String string) {
34 if (elements == null)
35 return null;
36
37 return (T) elements.get(string);
38 }
39
40 public <T> void put(String string, Object v) {
41 if (elements == null)
42 return;
43
44 elements.put(string, v);
45 }
46
47 @SuppressWarnings("unchecked") public <T extends java.lang.annotation.Annotation> T getAnnotation() throws Exception {
48 String cname = Clazz.objectDescriptorToFQN(name);
49 Class<T> c = (Class<T>) getClass().getClassLoader().loadClass(cname);
50 return getAnnotation(c);
51 }
52 public <T extends java.lang.annotation.Annotation> T getAnnotation(Class<T> c)
53 throws Exception {
54 String cname = Clazz.objectDescriptorToFQN(name);
55 if ( ! c.getName().equals(cname))
56 return null;
57 return Configurable.createConfigurable(c, elements );
58 }
59}