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.datasource.enumeration;
35
36 import info.magnolia.i18nsystem.SimpleTranslator;
37 import info.magnolia.ui.field.SelectFieldSupport;
38
39 import javax.inject.Inject;
40
41 import com.vaadin.data.Converter;
42 import com.vaadin.data.provider.DataProvider;
43 import com.vaadin.ui.IconGenerator;
44 import com.vaadin.ui.ItemCaptionGenerator;
45
46
47
48
49
50
51
52 public class EnumSelectFieldSupport<T extends Enum<T>> implements SelectFieldSupport<T> {
53
54 private final EnumDatasourceDefinition datasourceDefinition;
55 private final SimpleTranslator i18n;
56
57 @Inject
58 protected EnumSelectFieldSupport(EnumDatasourceDefinition datasourceDefinition, SimpleTranslator i18n) {
59 this.datasourceDefinition = datasourceDefinition;
60 this.i18n = i18n;
61 }
62
63 @Override
64 public DataProvider<T, ?> getDataProvider() {
65 return new EnumDataProvider(datasourceDefinition);
66 }
67
68 @Override
69 public ItemCaptionGenerator<T> getItemCaptionGenerator() {
70 return this::translateFromFQN;
71 }
72
73 private String translateFromFQN(T t) {
74 final String i18nKey = String.format("%s.%s", t.getClass().getName(), t.name())
75 .replace("$", ".")
76 .toLowerCase();
77 final String translatedText = i18n.translate(i18nKey);
78 return i18nKey.equals(translatedText) ? t.name() : translatedText;
79 }
80
81 @Override
82 public IconGenerator<T> getIconGenerator() {
83 return enumEntry -> null;
84 }
85
86 @Override
87 public Converter<T, String> defaultConverter() {
88 throw new UnsupportedOperationException("Linking to enums is not supported");
89 }
90 }