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.form.field.factory;
35
36 import static info.magnolia.ui.form.field.definition.DateFieldDefinition.NOW;
37
38 import info.magnolia.cms.security.MgnlUserManager;
39 import info.magnolia.context.Context;
40 import info.magnolia.i18nsystem.SimpleTranslator;
41 import info.magnolia.objectfactory.Components;
42 import info.magnolia.ui.api.context.UiContext;
43 import info.magnolia.ui.api.i18n.I18NAuthoringSupport;
44 import info.magnolia.ui.form.field.definition.DateFieldDefinition;
45
46 import java.text.ParseException;
47 import java.text.SimpleDateFormat;
48 import java.util.Date;
49 import java.util.TimeZone;
50
51 import javax.inject.Inject;
52
53 import org.apache.commons.lang3.StringUtils;
54
55 import com.vaadin.v7.data.Item;
56 import com.vaadin.v7.shared.ui.datefield.Resolution;
57 import com.vaadin.v7.ui.Field;
58 import com.vaadin.v7.ui.PopupDateField;
59
60
61
62
63 public class DateFieldFactory extends AbstractFieldFactory<DateFieldDefinition, Date> {
64
65
66
67
68 private static final String BROWSER_TIMEZONE = "browser";
69
70 private final SimpleTranslator i18n;
71 private final Context context;
72
73 @Inject
74 public DateFieldFactory(DateFieldDefinition definition, Item relatedFieldItem, UiContext uiContext, I18NAuthoringSupport i18NAuthoringSupport, SimpleTranslator i18n, Context context) {
75 super(definition, relatedFieldItem, uiContext, i18NAuthoringSupport);
76 this.i18n = i18n;
77 this.context = context;
78 }
79
80
81
82
83 @Deprecated
84 public DateFieldFactory(DateFieldDefinition definition, Item relatedFieldItem) {
85 this(definition, relatedFieldItem, null, Components.getComponent(I18NAuthoringSupport.class), Components.getComponent(SimpleTranslator.class), Components.getComponent(Context.class));
86 }
87
88 @Override
89 public Field<Date> createField() {
90 Field<Date> field = super.createField();
91 field.setWidthUndefined();
92 return field;
93 }
94
95 @Override
96 protected Field<Date> createFieldComponent() {
97 DateFieldDefinition definition = getFieldDefinition();
98 PopupDateField popupDateField = new PopupDateField();
99 setTimeZone(popupDateField);
100 String dateFormat;
101
102
103 if (definition.isTime()) {
104 popupDateField.setResolution(Resolution.MINUTE);
105 dateFormat = definition.getDateFormat() + " " + definition.getTimeFormat();
106 } else {
107 popupDateField.setResolution(Resolution.DAY);
108 dateFormat = definition.getDateFormat();
109 }
110 popupDateField.setDateFormat(dateFormat);
111 return popupDateField;
112 }
113
114 @Override
115 protected Class<?> getDefaultFieldType() {
116 return Date.class;
117 }
118
119
120
121
122
123
124
125
126 protected void setTimeZone(PopupDateField popupDateField) {
127
128 final String timeZoneId = context.getUser().getProperty(MgnlUserManager.PROPERTY_TIMEZONE);
129 final TimeZone timeZone;
130
131 if (timeZoneId == null || timeZoneId.isEmpty() || timeZoneId.equals(BROWSER_TIMEZONE)) {
132 timeZone = TimeZone.getDefault();
133 } else {
134 timeZone = TimeZone.getTimeZone(timeZoneId);
135 }
136 if (timeZone != null) {
137 popupDateField.setTimeZone(timeZone);
138
139
140 popupDateField.setDescription(i18n.translate("ui-admincentral.dateField.timeZone.description", timeZone.getDisplayName(false, TimeZone.LONG, context.getLocale()), timeZone.getRawOffset() / 3600000));
141 popupDateField.setInputPrompt(i18n.translate("ui-admincentral.dateField.timeZone.description", timeZone.getDisplayName(false, TimeZone.SHORT, context.getLocale()), timeZone.getRawOffset() / 3600000));
142 }
143 }
144
145 @Override
146 protected Object getConfiguredDefaultValue() {
147 if (NOW.equalsIgnoreCase(definition.getDefaultValue())) {
148 return new Date();
149 }
150 if (definition.isTime() && StringUtils.isNotEmpty(definition.getDefaultValue())) {
151 SimpleDateFormat dateFormatter = new SimpleDateFormat(definition.getDateFormat() + " " + definition.getTimeFormat());
152 try {
153 return dateFormatter.parse(definition.getDefaultValue());
154 } catch (ParseException e) {
155 }
156 }
157 return super.getConfiguredDefaultValue();
158 }
159 }