1 package org.exolab.castor.mapping.loader;
2
3 import java.util.ArrayList;
4 import java.util.Arrays;
5
6 import org.exolab.castor.mapping.ClassDescriptor;
7 import org.exolab.castor.mapping.FieldDescriptor;
8 import org.exolab.castor.mapping.MappingException;
9
10 public class ClassDescriptorHelper {
11
12
13
14
15
16
17
18
19
20 public static FieldDescriptor[] getFullFields(final ClassDescriptor classDescriptor)
21 throws MappingException {
22 ClassDescriptor baseClassDescriptor = classDescriptor.getExtends();
23 ArrayList<FieldDescriptor> fullFields = new ArrayList<FieldDescriptor>();
24
25 if (baseClassDescriptor != null) {
26 ClassDescriptor origin = baseClassDescriptor;
27
28 while (origin.getExtends() != null) {
29 origin = origin.getExtends();
30 }
31
32
33 FieldDescriptor[] fullBaseFieldDescriptors = getFullFields(baseClassDescriptor);
34 FieldDescriptor[] currentFields = classDescriptor.getFields();
35
36
37 for (FieldDescriptor baseFieldDescriptor : fullBaseFieldDescriptors) {
38 fullFields.add(baseFieldDescriptor);
39 }
40
41 for (FieldDescriptor currentFieldDescriptor : currentFields) {
42 fullFields.add(currentFieldDescriptor);
43 }
44 } else {
45 FieldDescriptor[] fieldDescriptors = ((ClassDescriptorImpl) classDescriptor).getFields();
46 fullFields.addAll(Arrays.asList(fieldDescriptors));
47 }
48
49 return fullFields.toArray(new FieldDescriptor[fullFields.size()]);
50 }
51
52
53
54
55
56
57
58 public static FieldDescriptor[] getIdFields(final ClassDescriptor classDescriptor)
59 throws MappingException {
60
61
62 ClassDescriptor base = classDescriptor;
63 while (base.getExtends() != null) {
64 base = base.getExtends();
65 }
66
67
68
69 FieldDescriptor[] identities = ((ClassDescriptorImpl) base).getIdentities();
70
71 if (identities == null || identities.length == 0) {
72 throw new MappingException("Identity is null!");
73 }
74
75
76
77
78
79
80
81
82
83
84
85
86
87 return identities;
88
89
90
91
92
93
94
95
96
97 }
98
99 }
100
101