1 package org.sourceforge.jemm.client;
2
3 import java.lang.reflect.Field;
4 import java.util.ArrayList;
5 import java.util.Arrays;
6 import java.util.HashSet;
7 import java.util.List;
8 import java.util.Set;
9
10 import org.sourceforge.jemm.database.ClassInfo;
11 import org.sourceforge.jemm.database.FieldInfo;
12 import org.sourceforge.jemm.database.FieldType;
13 import org.sourceforge.jemm.util.JEMMObject;
14
15
16
17
18
19
20
21 public class ClassMetadata {
22 Class<?> clazz;
23
24 public ClassMetadata(JEMMObject obj) {
25 this.clazz = obj.getClass();
26 }
27
28 public ClassMetadata(Class<?> clazz) {
29 this.clazz = clazz;
30 }
31
32
33
34
35
36
37
38
39
40 public FieldInfo getFieldInfo(String name) {
41 return getFieldInfo(getObjectClass(), name);
42 }
43
44
45
46
47
48
49 public Class<?> getObjectClass() {
50 return clazz;
51 }
52
53
54
55
56
57
58
59 FieldInfo getFieldInfo(Class<?> c, String name) {
60 try {
61 Field f = c.getDeclaredField(name);
62 f.setAccessible(true);
63
64 return new FieldInfo(name, c.getName(), FieldType.convert(f
65 .getType()));
66 } catch (Exception e) {
67 throw new RuntimeException(e);
68 }
69 }
70
71
72
73
74
75
76
77 public FieldInfo[] getStoredFields() {
78 return getStoredFields(getObjectClass());
79 }
80
81 FieldInfo[] getStoredFields(Class<?> c) {
82 FieldIterator fi = new FieldIterator(c,new AllStoredFieldsFilter());
83 List<FieldInfo> fieldInfos = new ArrayList<FieldInfo>();
84 for(Field f : fi) {
85 fieldInfos.add(convertField(f));
86 }
87
88 return fieldInfos.toArray(new FieldInfo[fieldInfos.size()]);
89 }
90
91 private FieldInfo convertField(Field field) {
92 Class<?> fieldClass = field.getType();
93 Class<?> declaringClass = field.getDeclaringClass();
94 return new FieldInfo(field.getName(), declaringClass.getName(),
95 FieldType.convert(fieldClass));
96 }
97
98
99
100
101
102
103
104 public ClassInfo getClassInfo() {
105 FieldInfo[] fields = getStoredFields();
106 Set<FieldInfo> fieldsSet = new HashSet<FieldInfo>(Arrays.asList(fields));
107 ClassInfo ci = new ClassInfo(getObjectClass().getName(), fieldsSet);
108 return ci;
109 }
110 }