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.rssaggregator.field;
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 RSSScheduleTabTransformer extends BasicTransformer<PropertysetItem> {
53
54 protected List<String> fieldsName;
55 protected String compositeFieldName = "true";
56
57 public RSSScheduleTabTransformer(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 Iterator<?> propertyNames = newValues.getItemPropertyIds().iterator();
72
73 while (propertyNames.hasNext()) {
74 String propertyName = (String) propertyNames.next();
75 if (propertyName.equals(compositeFieldName)) {
76 PropertysetItem values = (PropertysetItem) newValues.getItemProperty(propertyName).getValue();
77 Iterator<?> names = values.getItemPropertyIds().iterator();
78
79 while (names.hasNext()) {
80 String name = (String) names.next();
81 Property<?> property = relatedFormItem.getItemProperty(name);
82 if (property == null) {
83 relatedFormItem.addItemProperty(name, values.getItemProperty(name));
84 }
85 }
86 }
87 }
88 String propertyName = definePropertyName();
89 if (newValues.getItemProperty(propertyName) != null) {
90 relatedFormItem.addItemProperty(propertyName, newValues.getItemProperty(propertyName));
91 }
92 }
93
94 @Override
95 public PropertysetItem readFromItem() {
96 PropertysetItem compositeFielNewValues = new PropertysetItem();
97 for (String propertyName : fieldsName) {
98 if (relatedFormItem.getItemProperty(propertyName) != null) {
99 compositeFielNewValues.addItemProperty(propertyName, relatedFormItem.getItemProperty(propertyName));
100 }
101 }
102 PropertysetItem newValue = new PropertysetItem();
103 newValue.addItemProperty(compositeFieldName, new DefaultProperty<PropertysetItem>(PropertysetItem.class, compositeFielNewValues));
104
105 String propertyName = definePropertyName();
106 if (relatedFormItem.getItemProperty(propertyName) != null) {
107 newValue.addItemProperty(propertyName, relatedFormItem.getItemProperty(propertyName));
108 }
109
110 return newValue;
111 }
112 }