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.field.FieldDefinition;
38 import info.magnolia.ui.field.FieldFactory;
39
40 import javax.inject.Inject;
41
42 import org.apache.commons.lang3.StringUtils;
43
44 import com.vaadin.data.HasValue;
45 import com.vaadin.server.Sizeable;
46 import com.vaadin.ui.Component;
47
48
49
50
51
52
53
54
55
56
57 public abstract class AbstractFieldFactory<T, D extends FieldDefinition<T>> implements FieldFactory<T> {
58
59 protected final D definition;
60 protected final ComponentProvider componentProvider;
61
62 @Inject
63 public AbstractFieldFactory(D definition, ComponentProvider componentProvider) {
64 this.definition = definition;
65 this.componentProvider = componentProvider;
66 }
67
68 @Override
69 public HasValue<T> createField() {
70
71 Component field = createFieldComponent();
72
73 if (StringUtils.isNotBlank(getDefinition().getStyleName())) {
74 field.addStyleName(getDefinition().getStyleName());
75 }
76
77 field.setWidth(100, Sizeable.Unit.PERCENTAGE);
78 field.setCaption(getDefinition().getLabel());
79
80 if (!(field instanceof HasValue)) {
81 throw new IllegalStateException("[" + getClass().getSimpleName() + "] produced something other than a HasValue instance");
82 }
83
84 HasValue<T> hasValue = (HasValue<T>) field;
85 hasValue.setRequiredIndicatorVisible(getDefinition().isRequired());
86 hasValue.setReadOnly(getDefinition().isReadOnly());
87
88 return hasValue;
89 }
90
91 protected abstract Component createFieldComponent();
92
93 protected D getDefinition() {
94 return definition;
95 }
96 }