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.module.mail.app.field.transformer;
35
36 import info.magnolia.ui.form.field.definition.CompositeFieldDefinition;
37 import info.magnolia.ui.form.field.definition.ConfiguredFieldDefinition;
38 import info.magnolia.ui.form.field.definition.SwitchableFieldDefinition;
39 import info.magnolia.ui.form.field.transformer.basic.BasicTransformer;
40 import info.magnolia.ui.vaadin.integration.jcr.DefaultProperty;
41
42 import java.util.Iterator;
43 import java.util.List;
44
45 import com.vaadin.data.Item;
46 import com.vaadin.data.Property;
47 import com.vaadin.data.util.PropertysetItem;
48
49
50
51
52 public class MailSecurityTransformer extends BasicTransformer<PropertysetItem> {
53
54 protected List<String> fieldsName;
55 protected String compositeFieldName = "composite";
56
57 public MailSecurityTransformer(Item relatedFormItem, ConfiguredFieldDefinition definition, Class<PropertysetItem> type, List<String> fieldsName) {
58 super(relatedFormItem, definition, type);
59 fieldsName.clear();
60 List<ConfiguredFieldDefinition> fields = ((SwitchableFieldDefinition) definition).getFields();
61 for (ConfiguredFieldDefinition field : fields) {
62 if (field instanceof CompositeFieldDefinition) {
63 fieldsName.addAll(((CompositeFieldDefinition) field).getFieldsName());
64 }
65 }
66 this.fieldsName = fieldsName;
67 }
68
69 @Override
70 public void writeToItem(PropertysetItem newValues) {
71
72 Iterator<?> propertyNames = newValues.getItemPropertyIds().iterator();
73
74 while (propertyNames.hasNext()) {
75 String propertyName = (String) propertyNames.next();
76 if (propertyName.equals(compositeFieldName)) {
77 PropertysetItem values = (PropertysetItem) newValues.getItemProperty(propertyName).getValue();
78 Iterator<?> names = values.getItemPropertyIds().iterator();
79
80 while (names.hasNext()) {
81 String name = (String) names.next();
82 Property<?> property = relatedFormItem.getItemProperty(name);
83 if (property == null) {
84 relatedFormItem.addItemProperty(name, values.getItemProperty(name));
85 }
86 }
87 }
88 }
89
90
91 String propertyName = definePropertyName();
92
93 if (newValues.getItemProperty(propertyName) != null) {
94 relatedFormItem.addItemProperty(propertyName, newValues.getItemProperty(propertyName));
95 }
96 }
97
98 @Override
99 public PropertysetItem readFromItem() {
100 PropertysetItem compositeFielNewValues = new PropertysetItem();
101 for (String propertyName : fieldsName) {
102 if (relatedFormItem.getItemProperty(propertyName) != null) {
103 compositeFielNewValues.addItemProperty(propertyName, relatedFormItem.getItemProperty(propertyName));
104 }
105 }
106
107
108 PropertysetItem newValue = new PropertysetItem();
109 newValue.addItemProperty(compositeFieldName, new DefaultProperty<PropertysetItem>(PropertysetItem.class, compositeFielNewValues));
110
111
112 String propertyName = definePropertyName();
113 if (relatedFormItem.getItemProperty(propertyName) != null) {
114 newValue.addItemProperty(propertyName, relatedFormItem.getItemProperty(propertyName));
115 }
116
117 return newValue;
118 }
119 }