1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.jadira.bindings.core.cdi;
17
18 import java.lang.annotation.Annotation;
19 import java.net.URL;
20
21 import javax.enterprise.event.Observes;
22 import javax.enterprise.inject.spi.Extension;
23 import javax.enterprise.inject.spi.ProcessAnnotatedType;
24
25 import org.jadira.bindings.core.api.Binding;
26 import org.jadira.bindings.core.api.Converter;
27 import org.jadira.bindings.core.api.FromUnmarshaller;
28 import org.jadira.bindings.core.api.ToMarshaller;
29 import org.jadira.bindings.core.binder.BasicBinder;
30 import org.jadira.bindings.core.binder.Binder;
31 import org.jadira.bindings.core.binder.ConverterKey;
32 import org.jadira.bindings.core.binder.RegisterableBinder;
33
34
35
36
37 public class BinderExtension implements Extension, Binder, RegisterableBinder {
38
39
40
41
42 private static final BasicBinder BINDING = new BasicBinder();
43
44
45
46
47 public BinderExtension() {}
48
49
50
51
52
53 public <T, E> void processAnnotatedType(@Observes ProcessAnnotatedType<T> pat) {
54
55 Class<?> candidateClass = pat.getAnnotatedType().getJavaClass();
56
57 if (!candidateClass.isInterface()) {
58
59 try {
60 if (Binding.class.isAssignableFrom(candidateClass)) {
61
62 @SuppressWarnings("unchecked")
63 Class<? extends Binding<T, E>> bindingClass = (Class<? extends Binding<T, E>>) candidateClass;
64 Binding<T, E> myBinding = bindingClass.newInstance();
65 BINDING.registerBinding(myBinding.getBoundClass(), myBinding.getTargetClass(), myBinding);
66 } else if (ToMarshaller.class.isAssignableFrom(candidateClass)
67 || FromUnmarshaller.class.isAssignableFrom(candidateClass)) {
68 if (ToMarshaller.class.isAssignableFrom(candidateClass)) {
69
70 @SuppressWarnings("unchecked")
71 Class<? extends ToMarshaller<T,E>> bindingClass = (Class<? extends ToMarshaller<T,E>>) candidateClass;
72 ToMarshaller<T,E> myBinding = bindingClass.newInstance();
73 BINDING.registerMarshaller(myBinding.getBoundClass(), myBinding.getTargetClass(), myBinding);
74 }
75 if (FromUnmarshaller.class.isAssignableFrom(candidateClass)) {
76
77 @SuppressWarnings("unchecked")
78 Class<? extends FromUnmarshaller<T,E>> bindingClass = (Class<? extends FromUnmarshaller<T,E>>) candidateClass;
79 FromUnmarshaller<T,E> myBinding = bindingClass.newInstance();
80 BINDING.registerUnmarshaller(myBinding.getBoundClass(), myBinding.getTargetClass(), myBinding);
81 }
82 } else if (Converter.class.isAssignableFrom(candidateClass)) {
83
84 @SuppressWarnings("unchecked")
85 Class<? extends Converter<T, E>> bindingClass = (Class<? extends Converter<T, E>>) candidateClass;
86 Converter<T,E> myConverter = bindingClass.newInstance();
87 BINDING.registerConverter(myConverter.getInputClass(), myConverter.getOutputClass(), myConverter);
88 } else {
89 BINDING.registerAnnotatedClasses(candidateClass);
90 }
91 } catch (InstantiationException e) {
92 throw new IllegalStateException("Cannot instantiate binding class: " + candidateClass);
93 } catch (IllegalAccessException e) {
94 throw new IllegalStateException("Cannot instantiate binding class: " + candidateClass);
95 }
96 }
97 }
98
99
100
101
102
103 public <S, T> T convertTo(Class<T> output, Object object) {
104 return BINDING.convertTo(output, object);
105 }
106
107
108
109
110
111 public <S, T> T convertTo(Class<T> output, Object object,
112 Class<? extends Annotation> qualifier) {
113 return BINDING.convertTo(output, object, qualifier);
114 }
115
116
117
118
119
120 public <S, T> T convertTo(Class<S> sourceClass, Class<T> target, Object object) {
121 return BINDING.convertTo(sourceClass, target, object);
122 }
123
124
125
126
127
128 public <S, T> T convertTo(Class<S> sourceClass, Class<T> target, Object object, Class<? extends Annotation> qualifier) {
129 return BINDING.convertTo(sourceClass, target, object, qualifier);
130 }
131
132
133
134
135
136 public <S, T> T convertTo(ConverterKey<S,T> key, Object object) {
137 return BINDING.convertTo(key, object);
138 }
139
140
141
142
143
144 public <S, T> Binding<S, T> findBinding(Class<S> source, Class<T> target) {
145 return BINDING.findBinding(source, target);
146 }
147
148
149
150
151
152 public <S, T> ToMarshaller<S, T> findMarshaller(Class<S> source, Class<T> target) {
153 return BINDING.findMarshaller(source, target);
154 }
155
156
157
158
159
160 public <S, T> Converter<S, T> findConverter(Class<S> source, Class<T> target) {
161 return BINDING.findConverter(source, target);
162 }
163
164
165
166
167
168 public <S, T> FromUnmarshaller<S, T> findUnmarshaller(Class<S> source, Class<T> target) {
169 return BINDING.findUnmarshaller(source, target);
170 }
171
172
173
174
175
176 public <S, T> Binding<S, T> findBinding(Class<S> source, Class<T> target, Class<? extends Annotation> qualifier) {
177 return BINDING.findBinding(source, target, qualifier);
178 }
179
180
181
182
183
184 public <S, T> Binding<S,T> findBinding(ConverterKey<S,T> key) {
185 return BINDING.findBinding(key);
186 }
187
188
189
190
191
192 public <S, T> ToMarshaller<S, T> findMarshaller(Class<S> source, Class<T> target, Class<? extends Annotation> qualifier) {
193 return BINDING.findMarshaller(source, target, qualifier);
194 }
195
196
197
198
199
200 public <S, T> ToMarshaller<S,T> findMarshaller(ConverterKey<S,T> key) {
201 return BINDING.findMarshaller(key);
202 }
203
204
205
206
207
208 public <S, T> Converter<S, T> findConverter(Class<S> source, Class<T> target, Class<? extends Annotation> qualifier) {
209 return BINDING.findConverter(source, target, qualifier);
210 }
211
212
213
214
215
216 public <S, T> Converter<S,T> findConverter(ConverterKey<S,T> key) {
217 return BINDING.findConverter(key);
218 }
219
220
221
222
223
224 public <S, T> FromUnmarshaller<S, T> findUnmarshaller(Class<S> source, Class<T> target, Class<? extends Annotation> qualifier) {
225 return BINDING.findUnmarshaller(source, target, qualifier);
226 }
227
228
229
230
231
232 public <S, T> FromUnmarshaller<S,T> findUnmarshaller(ConverterKey<S,T> key) {
233 return BINDING.findUnmarshaller(key);
234 }
235
236
237
238
239
240 public void registerConfiguration(URL nextLocation) {
241 BINDING.registerConfiguration(nextLocation);
242 }
243
244
245
246
247
248 public <S, T> void registerBinding(Class<S> sourceClass, Class<T> targetClass, Binding<S, T> converter) {
249 BINDING.registerBinding(sourceClass, targetClass, converter);
250 }
251
252
253
254
255
256 public <S, T> void registerUnmarshaller(Class<S> sourceClass, Class<T> targetClass, FromUnmarshaller<S, T> converter) {
257 BINDING.registerUnmarshaller(sourceClass, targetClass, converter);
258 }
259
260
261
262
263
264 public <S, T> void registerMarshaller(Class<S> sourceClass, Class<T> targetClass, ToMarshaller<S, T> converter) {
265 BINDING.registerMarshaller(sourceClass, targetClass, converter);
266 }
267
268
269
270
271
272 public <S, T> void registerConverter(Class<S> sourceClass, Class<T> targetClass, Converter<S, T> converter) {
273 BINDING.registerConverter(sourceClass, targetClass, converter);
274 }
275
276
277
278
279
280 public <S, T> void registerBinding(Class<S> sourceClass, Class<T> targetClass, Binding<S, T> converter, Class<? extends Annotation> qualifier) {
281 BINDING.registerBinding(sourceClass, targetClass, converter, qualifier);
282 }
283
284
285
286
287
288 public <S, T> void registerBinding(ConverterKey<S,T> key, Binding<S, T> converter) {
289 BINDING.registerBinding(key, converter);
290 }
291
292
293
294
295
296 public <S, T> void registerUnmarshaller(Class<S> sourceClass, Class<T> targetClass, FromUnmarshaller<S, T> converter, Class<? extends Annotation> qualifier) {
297 BINDING.registerUnmarshaller(sourceClass, targetClass, converter, qualifier);
298 }
299
300
301
302
303
304 public <S, T> void registerUnmarshaller(ConverterKey<S,T> key, FromUnmarshaller<S, T> converter) {
305 BINDING.registerUnmarshaller(key, converter);
306 }
307
308
309
310
311
312 public <S, T> void registerMarshaller(Class<S> sourceClass, Class<T> targetClass, ToMarshaller<S, T> converter, Class<? extends Annotation> qualifier) {
313 BINDING.registerMarshaller(sourceClass, targetClass, converter, qualifier);
314 }
315
316
317
318
319
320 public <S, T> void registerMarshaller(ConverterKey<S,T> key, ToMarshaller<S, T> converter) {
321 BINDING.registerMarshaller(key, converter);
322 }
323
324
325
326
327
328 public <S, T> void registerConverter(Class<S> sourceClass, Class<T> targetClass, Converter<S, T> converter, Class<? extends Annotation> qualifier) {
329 BINDING.registerConverter(sourceClass, targetClass, converter, qualifier);
330 }
331
332
333
334
335
336 public <S, T> void registerConverter(ConverterKey<S,T> key, Converter<S, T> converter) {
337 BINDING.registerConverter(key, converter);
338 }
339
340
341
342
343
344 public void registerAnnotatedClasses(Class<?>... classesToInspect) {
345 BINDING.registerAnnotatedClasses(classesToInspect);
346 }
347
348
349
350
351
352 public Iterable<ConverterKey<?,?>> getConverterEntries() {
353 return BINDING.getConverterEntries();
354 }
355
356
357
358
359
360 public <T> T convertFromString(Class<T> output, String object) {
361 return BINDING.convertFromString(output, object);
362 }
363
364
365
366
367
368 public <T> T convertFromString(Class<T> output, String object,
369 Class<? extends Annotation> qualifier) {
370 return BINDING.convertFromString(output, object, qualifier);
371 }
372
373
374
375
376
377 public String convertToString(Object object) {
378 return BINDING.convertToString(object);
379 }
380
381
382
383
384
385 public String convertToString(Object object,
386 Class<? extends Annotation> qualifier) {
387 return BINDING.convertToString(object, qualifier);
388 }
389
390
391
392
393
394 public <S> String convertToString(Class<S> input, Object object) {
395 return BINDING.convertToString(input, object);
396 }
397
398
399
400
401
402 public <S> String convertToString(Class<S> input, Object object,
403 Class<? extends Annotation> qualifier) {
404 return BINDING.convertToString(input, object, qualifier);
405 }
406 }