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.factory;
35
36 import info.magnolia.cms.i18n.I18nContentSupport;
37 import info.magnolia.objectfactory.ComponentProvider;
38 import info.magnolia.ui.api.context.UiContext;
39 import info.magnolia.ui.api.i18n.I18NAuthoringSupport;
40 import info.magnolia.ui.form.field.CompositeField;
41 import info.magnolia.ui.form.field.definition.CompositeFieldDefinition;
42 import info.magnolia.ui.form.field.transformer.Transformer;
43
44 import java.util.List;
45
46 import javax.inject.Inject;
47
48 import org.slf4j.Logger;
49 import org.slf4j.LoggerFactory;
50
51 import com.vaadin.v7.data.Item;
52 import com.vaadin.v7.data.util.PropertysetItem;
53 import com.vaadin.v7.ui.Field;
54
55
56
57
58
59
60 public class CompositeFieldFactory<D extends CompositeFieldDefinition> extends AbstractFieldFactory<D, PropertysetItem> {
61
62 private static final Logger log = LoggerFactory.getLogger(CompositeFieldFactory.class);
63 private FieldFactoryFactory fieldFactoryFactory;
64 private ComponentProvider componentProvider;
65 private final I18NAuthoringSupport i18nAuthoringSupport;
66
67 @Inject
68 public CompositeFieldFactory(D definition, Item relatedFieldItem, UiContext uiContext, I18NAuthoringSupport i18nAuthoringSupport, FieldFactoryFactory fieldFactoryFactory, ComponentProvider componentProvider) {
69 super(definition, relatedFieldItem, uiContext, i18nAuthoringSupport);
70 this.fieldFactoryFactory = fieldFactoryFactory;
71 this.componentProvider = componentProvider;
72 this.i18nAuthoringSupport = i18nAuthoringSupport;
73 }
74
75
76
77
78 @Deprecated
79 public CompositeFieldFactory(D definition, Item relatedFieldItem, FieldFactoryFactory fieldFactoryFactory, ComponentProvider componentProvider, I18NAuthoringSupport i18nAuthoringSupport) {
80 this(definition, relatedFieldItem, null, i18nAuthoringSupport, fieldFactoryFactory, componentProvider);
81 }
82
83
84
85
86 @Deprecated
87 public CompositeFieldFactory(D definition, Item relatedFieldItem, FieldFactoryFactory fieldFactoryFactory, I18nContentSupport i18nContentSupport, ComponentProvider componentProvider) {
88 this(definition, relatedFieldItem, null, componentProvider.getComponent(I18NAuthoringSupport.class), fieldFactoryFactory, componentProvider);
89 }
90
91 @Override
92 protected Field<PropertysetItem> createFieldComponent() {
93
94 definition.setI18nBasename(getMessages().getBasename());
95
96
97 if (definition.isRequired()) {
98 log.warn("Definition of the composite field named [{}] is configured as required which is not supported (it is possible to configure the sub-fields as required though).", definition.getName());
99 definition.setRequired(false);
100 }
101 CompositeFieldompositeField.html#CompositeField">CompositeField field = new CompositeField(definition, fieldFactoryFactory, componentProvider, item, i18nAuthoringSupport);
102 return field;
103 }
104
105
106
107
108 @Override
109 protected Transformer<?> initializeTransformer(Class<? extends Transformer<?>> transformerClass) {
110 List<String> propertyNames = definition.getFieldNames();
111 Transformer<?> transformer = this.componentProvider.newInstance(transformerClass, item, definition, PropertysetItem.class, propertyNames);
112 transformer.setLocale(getLocale());
113 return transformer;
114 }
115 }