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