1 package fr.ifremer.tutti.service.csv;
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 import org.apache.commons.beanutils.NestedNullException;
28 import org.apache.commons.beanutils.PropertyUtils;
29 import org.nuiton.csv.ValueGetter;
30
31 import java.lang.reflect.InvocationTargetException;
32 import java.util.Collection;
33
34
35
36
37
38
39
40 public class BeanIndexNullableGetter<E, T> implements ValueGetter<E, T> {
41
42 protected String collectionName;
43
44 protected int order;
45
46 protected String propertyName;
47
48 BeanIndexNullableGetter(String collectionName, int order, String suffix) {
49 this.collectionName = collectionName;
50 this.order = order;
51 this.propertyName = collectionName + "[" + order + "]." + suffix;
52
53 }
54
55 @Override
56 public T get(E object) throws Exception {
57 T value = null;
58 try {
59 Collection c = (Collection) PropertyUtils.getProperty(object, collectionName);
60 if (c != null && order < c.size()) {
61 value = (T) PropertyUtils.getProperty(object, propertyName);
62 }
63 } catch (NestedNullException e) {
64 value = null;
65 } catch (InvocationTargetException e) {
66 if (e.getCause() instanceof NullPointerException) {
67 value = null;
68 } else {
69 throw e;
70 }
71 }
72 return value;
73 }
74 }