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.ui.api.context.UiContext;
38 import info.magnolia.ui.api.i18n.I18NAuthoringSupport;
39 import info.magnolia.ui.form.field.definition.TwinColSelectFieldDefinition;
40 import info.magnolia.ui.form.field.transformer.Transformer;
41
42 import java.util.HashSet;
43
44 import javax.inject.Inject;
45
46 import com.vaadin.v7.data.Item;
47 import com.vaadin.v7.ui.AbstractSelect;
48 import com.vaadin.v7.ui.TwinColSelect;
49
50
51
52
53
54
55 public class TwinColSelectFieldFactory<D extends TwinColSelectFieldDefinition> extends SelectFieldFactory<D> {
56
57 private ComponentProvider componentProvider;
58
59 @Inject
60 public TwinColSelectFieldFactory(D definition, Item relatedFieldItem, UiContext uiContext, I18NAuthoringSupport i18nAuthoringSupport, ComponentProvider componentProvider) {
61 super(definition, relatedFieldItem, uiContext, i18nAuthoringSupport);
62 this.componentProvider = componentProvider;
63 }
64
65 @Override
66 protected AbstractSelect createFieldComponent() {
67 super.createFieldComponent();
68 int rows = select.getContainerDataSource().size();
69 ((TwinColSelect) select).setRows(rows < 20 ? rows : 20);
70 select.setMultiSelect(definition.isMultiselect());
71 select.setNullSelectionAllowed(true);
72
73 String leftColumnCaption = getMessage(definition.getLeftColumnCaption());
74 ((TwinColSelect) select).setLeftColumnCaption(isMessageKey(leftColumnCaption) ? "From" : leftColumnCaption);
75 String rightColumnCaption = getMessage(definition.getRightColumnCaption());
76 ((TwinColSelect) select).setRightColumnCaption(isMessageKey(rightColumnCaption) ? "To" : rightColumnCaption);
77 return select;
78 }
79
80 @Override
81 protected AbstractSelect createSelectionField() {
82 return new TwinColSelect();
83 }
84
85
86
87
88
89 @Override
90 protected Transformer<?> initializeTransformer(Class<? extends Transformer<?>> transformerClass) {
91 return this.componentProvider.newInstance(transformerClass, item, definition, HashSet.class);
92 }
93 }