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.admincentral.usermenu.field.factory;
35
36 import info.magnolia.context.Context;
37 import info.magnolia.i18nsystem.SimpleTranslator;
38 import info.magnolia.ui.form.field.definition.SelectFieldDefinition;
39 import info.magnolia.ui.form.field.definition.SelectFieldOptionDefinition;
40 import info.magnolia.ui.form.field.factory.SelectFieldFactory;
41
42 import java.util.ArrayList;
43 import java.util.List;
44 import java.util.SimpleTimeZone;
45 import java.util.TimeZone;
46
47 import javax.inject.Inject;
48
49 import com.vaadin.data.Item;
50 import com.vaadin.server.Page;
51 import com.vaadin.shared.ui.combobox.FilteringMode;
52
53
54
55
56 public class TimeZoneFieldFactory extends SelectFieldFactory<TimeZoneFieldFactory.Definition> {
57
58 static final String BROWSER_TIMEZONE = "browser";
59
60 private final Context context;
61 private final SimpleTranslator simpleTranslator;
62
63 @Inject
64 public TimeZoneFieldFactory(Definition definition, Item relatedFieldItem, Context context, SimpleTranslator simpleTranslator) {
65 super(definition, relatedFieldItem);
66 this.context = context;
67 this.simpleTranslator = simpleTranslator;
68 }
69
70 @Override
71 public List<SelectFieldOptionDefinition> getOptions() {
72 final List<SelectFieldOptionDefinition> options = new ArrayList<>();
73 SelectFieldOptionDefinition option;
74 TimeZone timeZone;
75
76 if (Page.getCurrent() != null) {
77 final int offset = Page.getCurrent().getWebBrowser().getTimezoneOffset();
78 timeZone = new SimpleTimeZone(offset, BROWSER_TIMEZONE);
79 final String timeZoneString = simpleTranslator.translate("ui-admincentral.editUserProfile.preferences.timezone.value.browser.label", timeZone.getDisplayName());
80 option = new SelectFieldOptionDefinition();
81 option.setValue(BROWSER_TIMEZONE);
82 option.setLabel(timeZoneString);
83 options.add(option);
84 }
85
86 for (String timeZoneStr : TimeZone.getAvailableIDs()) {
87 option = new SelectFieldOptionDefinition();
88 timeZone = TimeZone.getTimeZone(timeZoneStr);
89 option.setValue(timeZoneStr);
90 option.setLabel(timeZoneStr + " (" + timeZone.getDisplayName(false, TimeZone.LONG, context.getLocale()) + ")");
91 options.add(option);
92 }
93 return options;
94 }
95
96
97
98
99 public static class Definition extends SelectFieldDefinition {
100 public Definition() {
101 setSortOptions(false);
102 setFilteringMode(FilteringMode.CONTAINS);
103 setTextInputAllowed(true);
104 }
105 }
106 }