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;
35
36 import info.magnolia.cms.i18n.I18nContentSupport;
37 import info.magnolia.objectfactory.ComponentProvider;
38 import info.magnolia.ui.api.i18n.I18NAuthoringSupport;
39 import info.magnolia.ui.form.field.definition.CompositeFieldDefinition;
40 import info.magnolia.ui.form.field.definition.ConfiguredFieldDefinition;
41 import info.magnolia.ui.form.field.definition.Layout;
42 import info.magnolia.ui.form.field.factory.FieldFactoryFactory;
43
44 import com.vaadin.ui.Component;
45 import com.vaadin.v7.data.Item;
46 import com.vaadin.v7.data.util.PropertysetItem;
47 import com.vaadin.v7.ui.Field;
48 import com.vaadin.v7.ui.HorizontalLayout;
49 import com.vaadin.v7.ui.VerticalLayout;
50
51
52
53
54
55
56
57 public class CompositeField extends AbstractCustomMultiField<CompositeFieldDefinition, PropertysetItem> {
58
59 public CompositeField(CompositeFieldDefinition definition, FieldFactoryFactory fieldFactoryFactory, ComponentProvider componentProvider, Item relatedFieldItem, I18NAuthoringSupport i18nAuthoringSupport) {
60 super(definition, fieldFactoryFactory, componentProvider, relatedFieldItem, i18nAuthoringSupport);
61 }
62
63
64
65
66 @Deprecated
67 public CompositeField(CompositeFieldDefinition definition, FieldFactoryFactory fieldFactoryFactory, I18nContentSupport i18nContentSupport, ComponentProvider componentProvider, Item relatedFieldItem) {
68 this(definition, fieldFactoryFactory, componentProvider, relatedFieldItem, componentProvider.getComponent(I18NAuthoringSupport.class));
69 }
70
71 @Override
72 protected Component initContent() {
73
74 addStyleName("linkfield");
75 addStyleName("force-show-field-captions");
76 if (definition.getLayout() == Layout.horizontal) {
77 root = new HorizontalLayout();
78 } else {
79 root = new VerticalLayout();
80 }
81 root.setWidth(100, Unit.PERCENTAGE);
82
83
84 initFields();
85 return root;
86 }
87
88 @Override
89 protected void initFields(PropertysetItem fieldValues) {
90 root.removeAllComponents();
91
92 for (ConfiguredFieldDefinition fieldDefinition : definition.getFields()) {
93
94 if (definition.isReadOnly()) {
95 fieldDefinition.setReadOnly(true);
96 }
97 Field<?> compositeField = createLocalField(fieldDefinition, fieldValues.getItemProperty(fieldDefinition.getName()), false);
98 if (fieldValues.getItemProperty(fieldDefinition.getName()) == null) {
99 fieldValues.addItemProperty(fieldDefinition.getName(), compositeField.getPropertyDataSource());
100 }
101 compositeField.setWidth(100, Unit.PERCENTAGE);
102
103 root.addComponent(compositeField);
104 }
105 }
106
107 @Override
108 public Class<? extends PropertysetItem> getType() {
109 return PropertysetItem.class;
110 }
111 }