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.ui.form.field.transformer.composite;
35
36 import info.magnolia.ui.form.field.definition.ConfiguredFieldDefinition;
37 import info.magnolia.ui.form.field.transformer.basic.BasicTransformer;
38
39 import java.util.Iterator;
40 import java.util.List;
41
42 import org.apache.commons.lang3.StringUtils;
43
44 import com.vaadin.data.Item;
45 import com.vaadin.data.Property;
46 import com.vaadin.data.util.PropertysetItem;
47
48
49
50
51
52
53
54
55
56
57
58 public class CompositeTransformer extends BasicTransformer<PropertysetItem> {
59
60 protected List<String> fieldsName;
61 protected String propertyPrefix;
62
63 public CompositeTransformer(Item relatedFormItem, ConfiguredFieldDefinition definition, Class<PropertysetItem> type, List<String> fieldsName) {
64 super(relatedFormItem, definition, type);
65 this.fieldsName = fieldsName;
66 this.propertyPrefix = createPropertyPrefix(definition);
67 }
68
69
70
71
72 protected String createPropertyPrefix(ConfiguredFieldDefinition definition) {
73 return definition.getName();
74 }
75
76 @Override
77 public void writeToItem(PropertysetItem newValues) {
78
79 Iterator<?> propertyNames = newValues.getItemPropertyIds().iterator();
80
81 while (propertyNames.hasNext()) {
82 String propertyName = (String) propertyNames.next();
83 String compositePropertyName = getCompositePropertyName(propertyName);
84 Property<?> property = relatedFormItem.getItemProperty(compositePropertyName);
85 if (property == null && newValues.getItemProperty(propertyName) != null) {
86 relatedFormItem.addItemProperty(compositePropertyName, newValues.getItemProperty(propertyName));
87 }
88 }
89 }
90
91 @Override
92 public PropertysetItem readFromItem() {
93 PropertysetItem newValues = new PropertysetItem();
94 for (String propertyName : fieldsName) {
95 String compositePropertyName = getCompositePropertyName(propertyName);
96 if (relatedFormItem.getItemProperty(compositePropertyName) != null) {
97 newValues.addItemProperty(propertyName, relatedFormItem.getItemProperty(compositePropertyName));
98 }
99 }
100 return newValues;
101 }
102
103 protected String getCompositePropertyName(String propertyName) {
104 propertyName = propertyPrefix + propertyName;
105 if (hasI18NSupport()) {
106 propertyName = propertyName + StringUtils.difference(basePropertyName, i18NPropertyName);
107 }
108 return propertyName;
109 }
110 }