1 package info.magnolia.ui.field.factory;
2
3 import info.magnolia.cms.security.MgnlUserManager;
4 import info.magnolia.context.Context;
5 import info.magnolia.objectfactory.ComponentProvider;
6 import info.magnolia.ui.field.DateFieldDefinition;
7
8 import java.time.ZoneId;
9 import java.util.TimeZone;
10
11 import javax.inject.Inject;
12 import javax.inject.Provider;
13
14 import com.vaadin.ui.AbstractDateField;
15 import com.vaadin.ui.Component;
16 import com.vaadin.ui.DateField;
17 import com.vaadin.ui.DateTimeField;
18
19
20
21
22 public class DateFieldFactory extends AbstractFieldFactory<Object, DateFieldDefinition> {
23
24 private final Provider<Context> contextProvider;
25
26 @Inject
27 public DateFieldFactory(DateFieldDefinition definition, Provider<Context> contextProvider, ComponentProvider componentProvider) {
28 super(definition, componentProvider);
29 this.contextProvider = contextProvider;
30 }
31
32 @Override
33 protected Component createFieldComponent() {
34 AbstractDateField field;
35 if (getDefinition().isTime()) {
36 field = new DateTimeField();
37 } else {
38 field = new DateField();
39 }
40
41 if (getDefinition().isTime()) {
42 field.setDateFormat(getDefinition().getDateFormat() + " " + getDefinition().getTimeFormat());
43 } else {
44 field.setDateFormat(getDefinition().getDateFormat());
45 }
46
47 field.setZoneId(zoneId());
48
49 return field;
50 }
51
52 private ZoneId zoneId() {
53 final String timeZoneId = contextProvider.get().getUser().getProperty(MgnlUserManager.PROPERTY_TIMEZONE);
54 final ZoneId zoneId;
55
56 if (timeZoneId == null || timeZoneId.isEmpty()) {
57 zoneId = TimeZone.getDefault().toZoneId();
58 } else {
59 zoneId = TimeZone.getTimeZone(timeZoneId).toZoneId();
60 }
61
62 return zoneId;
63 }
64
65 }