1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 package org.exolab.castor.xml.descriptors;
36
37 import java.util.Enumeration;
38 import java.util.Locale;
39 import java.util.Vector;
40
41 import org.exolab.castor.xml.XMLClassDescriptor;
42
43
44
45
46
47
48
49 public final class CoreDescriptors {
50
51
52 private static final String LIST_CLASS_NAME = "java.util.List";
53
54 private static final String LIST_DESCRIPTOR_NAME =
55 "org.exolab.castor.xml.descriptors.ListClassDescriptor";
56
57 private static final Class LIST_CLASS = getListClass();
58
59
60 private static final XMLClassDescriptor DATE_DESCRIPTOR = new DateClassDescriptor();
61
62
63
64
65 private static final XMLClassDescriptor ENUMERATION_DESCRIPTOR = new EnumerationDescriptor();
66
67 private static final XMLClassDescriptor LIST_DESCRIPTOR = getListClassDescriptor();
68
69 private static final XMLClassDescriptor LOCALE_DESCRIPTOR = new LocaleDescriptor();
70
71 private static final XMLClassDescriptor SQL_DATE_DESCRIPTOR = new SQLDateClassDescriptor();
72
73 private static final XMLClassDescriptor SQL_TIME_DESCRIPTOR = new SQLTimeClassDescriptor();
74
75 private static final XMLClassDescriptor SQL_TIMESTAMP_DESCRIPTOR =
76 new SQLTimestampClassDescriptor();
77
78 private static final XMLClassDescriptor STRING_DESCRIPTOR = new StringClassDescriptor();
79
80 private static final XMLClassDescriptor VECTOR_DESCRIPTOR = new VectorClassDescriptor();
81
82
83
84
85 private CoreDescriptors() {
86 super();
87 }
88
89
90
91
92
93
94
95
96 public static XMLClassDescriptor getDescriptor(final Class clazz) {
97 if (clazz == null) {
98 return null;
99 }
100
101 if (clazz == String.class) {
102 return STRING_DESCRIPTOR;
103 }
104
105 if (clazz == java.util.Date.class) {
106 return DATE_DESCRIPTOR;
107 }
108
109 if (Enumeration.class.isAssignableFrom(clazz)) {
110 return ENUMERATION_DESCRIPTOR;
111 }
112
113 if (clazz == Vector.class || Vector.class.isAssignableFrom(clazz)) {
114 return VECTOR_DESCRIPTOR;
115 }
116
117
118 if (LIST_DESCRIPTOR != null && (LIST_CLASS == clazz || LIST_CLASS.isAssignableFrom(clazz))) {
119 return LIST_DESCRIPTOR;
120 }
121
122 if (clazz == Locale.class) {
123 return LOCALE_DESCRIPTOR;
124 }
125
126
127 if (clazz == java.sql.Date.class) {
128 return SQL_DATE_DESCRIPTOR;
129 }
130
131 if (clazz == java.sql.Time.class) {
132 return SQL_TIME_DESCRIPTOR;
133 }
134
135 if (clazz == java.sql.Timestamp.class) {
136 return SQL_TIMESTAMP_DESCRIPTOR;
137 }
138
139 return null;
140 }
141
142
143
144
145
146
147 private static XMLClassDescriptor getListClassDescriptor() {
148
149 if (LIST_CLASS == null) {
150 return null;
151 }
152
153 ClassLoader loader = CoreDescriptors.class.getClassLoader();
154 Class descriptorClass = null;
155 try {
156 if (loader == null) {
157 descriptorClass = Class.forName(LIST_DESCRIPTOR_NAME);
158 } else {
159 descriptorClass = loader.loadClass(LIST_DESCRIPTOR_NAME);
160 }
161 } catch (ClassNotFoundException cnfe) {
162
163 }
164
165 XMLClassDescriptor listDescriptor = null;
166 if (descriptorClass != null) {
167 try {
168 listDescriptor = (XMLClassDescriptor) descriptorClass.newInstance();
169 } catch (InstantiationException ie) {
170
171 } catch (IllegalAccessException iae) {
172
173 }
174 } else {
175 listDescriptor = null;
176 }
177 return listDescriptor;
178 }
179
180
181
182
183
184
185 private static Class getListClass() {
186 Class listClass = null;
187
188
189 ClassLoader loader = null;
190 try {
191 loader = java.util.Vector.class.getClassLoader();
192 if (loader == null) {
193
194 listClass = Class.forName(LIST_CLASS_NAME);
195 } else {
196 listClass = loader.loadClass(LIST_CLASS_NAME);
197 }
198 } catch (ClassNotFoundException cnfe) {
199
200 }
201
202 return listClass;
203 }
204
205 }