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 package info.magnolia.content2bean;
35
36 import info.magnolia.cms.core.ItemType;
37
38 import java.beans.PropertyDescriptor;
39 import java.util.Collections;
40 import java.util.HashMap;
41 import java.util.Map;
42
43 import org.apache.commons.beanutils.PropertyUtils;
44
45
46
47
48
49
50
51 public class TypeDescriptor {
52
53 private Class<?> type;
54
55 private ItemType itemType;
56
57 private Content2BeanTransformer transformer;
58
59 private boolean isMap;
60
61 private boolean isCollection;
62
63 private Map<String, PropertyTypeDescriptor> descriptors;
64
65 public ItemType getItemType() {
66 return this.itemType;
67 }
68
69 public void setItemType(ItemType itemType) {
70 this.itemType = itemType;
71 }
72
73 public Class<?> getType() {
74 return this.type;
75 }
76
77 public void setType(Class<?> type) {
78 this.type = type;
79 }
80
81
82 public boolean isCollection() {
83 return this.isCollection;
84 }
85
86
87 public void setCollection(boolean isCollection) {
88 this.isCollection = isCollection;
89 }
90
91
92 public boolean isMap() {
93 return this.isMap;
94 }
95
96
97 public void setMap(boolean isMap) {
98 this.isMap = isMap;
99 }
100
101 public PropertyTypeDescriptor getPropertyTypeDescriptor(String propertyName, TypeMapping typeMapping) {
102 return getPropertyDescriptors(typeMapping).get(propertyName);
103 }
104
105
106
107
108 public boolean needsDefaultMapping() {
109 return (isMap() || isCollection()) && (getType().isInterface() || getType().isArray());
110 }
111
112
113
114
115 public Map<String, PropertyTypeDescriptor> getPropertyDescriptors(TypeMapping typeMapping) {
116
117 if (this.descriptors == null) {
118
119
120
121 final Map<String, PropertyTypeDescriptor> tmpDescriptors = new HashMap<String, PropertyTypeDescriptor>();
122 PropertyDescriptor[] dscrs = PropertyUtils.getPropertyDescriptors(this.getType());
123 for (int i = 0; i < dscrs.length; i++) {
124 PropertyDescriptor descriptor = dscrs[i];
125 tmpDescriptors.put(descriptor.getName(), typeMapping.getPropertyTypeDescriptor(this.getType(), descriptor.getName()));
126 }
127
128 this.descriptors = Collections.unmodifiableMap(tmpDescriptors);
129 }
130 return this.descriptors;
131 }
132
133
134
135
136 public Content2BeanTransformer getTransformer() {
137 return transformer;
138 }
139
140 public void setTransformer(Content2BeanTransformer transformer) {
141 this.transformer = transformer;
142 }
143
144 }