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.objectfactory.ComponentProvider;
37 import info.magnolia.objectfactory.Components;
38 import info.magnolia.ui.api.context.UiContext;
39 import info.magnolia.ui.api.i18n.I18NAuthoringSupport;
40 import info.magnolia.ui.form.field.definition.Layout;
41 import info.magnolia.ui.form.field.definition.OptionGroupFieldDefinition;
42 import info.magnolia.ui.form.field.transformer.Transformer;
43
44 import java.util.Set;
45
46 import javax.inject.Inject;
47
48 import com.vaadin.v7.data.Item;
49 import com.vaadin.v7.ui.AbstractSelect;
50 import com.vaadin.v7.ui.OptionGroup;
51
52
53
54
55
56
57 public class OptionGroupFieldFactory<D extends OptionGroupFieldDefinition> extends SelectFieldFactory<D> {
58
59 private ComponentProvider componentProvider;
60
61 @Inject
62 public OptionGroupFieldFactory(D definition, Item relatedFieldItem, UiContext uiContext, I18NAuthoringSupport i18nAuthoringSupport, ComponentProvider componentProvider) {
63 super(definition, relatedFieldItem, uiContext, i18nAuthoringSupport);
64 this.componentProvider = componentProvider;
65 }
66
67
68
69
70 @Deprecated
71 public OptionGroupFieldFactory(D definition, Item relatedFieldItem, ComponentProvider componentProvider) {
72 this(definition, relatedFieldItem, null, componentProvider.getComponent(I18NAuthoringSupport.class), componentProvider);
73 }
74
75 @Override
76 protected AbstractSelect createFieldComponent() {
77 super.createFieldComponent();
78 select.setMultiSelect(getFieldDefinition().isMultiselect());
79 select.setNullSelectionAllowed(true);
80 if (definition.getLayout() == Layout.horizontal) {
81 select.addStyleName("horizontal");
82 }
83 return select;
84 }
85
86 @Override
87 protected AbstractSelect createSelectionField() {
88 return new OptionGroup();
89 }
90
91
92
93
94
95
96 @Override
97 protected Transformer<?> initializeTransformer(Class<? extends Transformer<?>> transformerClass) {
98 final Transformer<?> transformer = componentProvider.newInstance(transformerClass, item, definition, defineType(), Components.getComponent(I18NAuthoringSupport.class));
99 transformer.setLocale(getLocale());
100 return transformer;
101 }
102
103 protected Class<?> defineType() {
104 if (!select.isMultiSelect()) {
105 return getFieldType();
106 } else {
107 return Set.class;
108 }
109 }
110 }