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