View Javadoc
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   * Creates and initializes a date field based on a field definition.
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  }