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.field.factory;
35
36 import info.magnolia.objectfactory.ComponentProvider;
37 import info.magnolia.ui.api.i18n.I18NAuthoringSupport;
38 import info.magnolia.ui.field.FieldDefinition;
39
40 import java.util.Locale;
41
42 import javax.inject.Inject;
43
44 import org.apache.commons.lang3.StringUtils;
45 import org.slf4j.Logger;
46 import org.slf4j.LoggerFactory;
47
48 import com.vaadin.data.HasValue;
49 import com.vaadin.server.Sizeable;
50 import com.vaadin.ui.AbstractComponent;
51 import com.vaadin.ui.Component;
52
53 import lombok.AccessLevel;
54 import lombok.Getter;
55
56
57
58
59
60
61
62
63
64 @Getter(AccessLevel.PROTECTED)
65 public abstract class AbstractFieldFactory<D extends FieldDefinition<T>, T, F extends Component & HasValue<T>> implements FieldFactory<T> {
66
67 private static final Logger log = LoggerFactory.getLogger(AbstractFieldFactory.class);
68
69 private ComponentProvider componentProvider;
70 private final D definition;
71 private final Locale locale;
72 private final I18NAuthoringSupport i18NAuthoringSupport;
73
74 @Inject
75 public AbstractFieldFactory(D definition, ComponentProvider componentProvider, Locale locale, I18NAuthoringSupport i18NAuthoringSupport) {
76 this.componentProvider = componentProvider;
77 this.definition = definition;
78 this.locale = locale;
79 this.i18NAuthoringSupport = i18NAuthoringSupport;
80 }
81
82 protected abstract F createFieldComponent();
83
84 @Override
85 public F createField() {
86
87 F field = createFieldComponent();
88 if (AbstractComponent.class.isAssignableFrom(field.getClass())) {
89 AbstractComponent abstractComponent = (AbstractComponent) field;
90 abstractComponent.setLocale(locale);
91
92 if (StringUtils.isNotBlank(getDefinition().getStyleName())) {
93 field.addStyleName(getDefinition().getStyleName());
94 }
95 field.setWidth(100, Sizeable.Unit.PERCENTAGE);
96 setFieldCaption(field);
97 }
98 field.setRequiredIndicatorVisible(getDefinition().isRequired());
99 field.setReadOnly(getDefinition().isReadOnly());
100
101 return field;
102 }
103
104 private void setFieldCaption(Component field) {
105
106 if (StringUtils.isNotBlank(getDefinition().getLabel())) {
107 String caption = getDefinition().getLabel();
108 if (locale != null && getDefinition().isI18n() && !i18NAuthoringSupport.isDefaultLocale(locale)) {
109 caption = String.format("%s (%s)", caption, locale.toString());
110 }
111 field.setCaption(caption);
112 }
113 }
114
115
116
117
118
119
120
121 protected boolean isMessageKey(String key) {
122 return !StringUtils.endsWith(key, ".") && StringUtils.contains(key, ".") && !StringUtils.contains(key, " ");
123 }
124 }