You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

DateFieldTimezone.java 3.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. package com.vaadin.tests.components.datefield;
  2. import java.text.DateFormat;
  3. import java.util.ArrayList;
  4. import java.util.Arrays;
  5. import java.util.Calendar;
  6. import java.util.Date;
  7. import java.util.Locale;
  8. import java.util.TimeZone;
  9. import com.vaadin.shared.ui.datefield.Resolution;
  10. import com.vaadin.tests.components.TestBase;
  11. import com.vaadin.tests.components.TestDateField;
  12. import com.vaadin.tests.util.Log;
  13. import com.vaadin.ui.AbstractDateField;
  14. import com.vaadin.v7.data.Property;
  15. import com.vaadin.v7.data.Property.ValueChangeEvent;
  16. import com.vaadin.v7.shared.ui.combobox.FilteringMode;
  17. import com.vaadin.v7.ui.ComboBox;
  18. public class DateFieldTimezone extends TestBase {
  19. private static final TimeZone UTC = TimeZone.getTimeZone("UTC");
  20. private static final Locale EN = Locale.ENGLISH;
  21. private final Log log = new Log(5);
  22. private final AbstractDateField dateField = new TestDateField();
  23. private static final String nullValue = "";
  24. @Override
  25. protected void setup() {
  26. dateField.setResolution(Resolution.SECOND);
  27. ArrayList<String> timeZoneCodes = new ArrayList<>();
  28. timeZoneCodes.add(nullValue);
  29. timeZoneCodes.addAll(Arrays.asList(TimeZone.getAvailableIDs()));
  30. ComboBox timezoneSelector = new ComboBox("Select time zone",
  31. timeZoneCodes) {
  32. @Override
  33. public String getItemCaption(Object itemId) {
  34. if (itemId == nullValue || itemId == null) {
  35. TimeZone timeZone = TimeZone.getDefault();
  36. return "Default time zone (" + timeZone.getDisplayName()
  37. + ")";
  38. } else {
  39. TimeZone timeZone = TimeZone.getTimeZone((String) itemId);
  40. return itemId + " (" + timeZone.getDisplayName() + ")";
  41. }
  42. }
  43. };
  44. timezoneSelector.setValue("UTC");
  45. timezoneSelector.setImmediate(true);
  46. timezoneSelector.setNullSelectionAllowed(true);
  47. timezoneSelector.setNullSelectionItemId(nullValue);
  48. timezoneSelector.setFilteringMode(FilteringMode.CONTAINS);
  49. timezoneSelector.addListener(new Property.ValueChangeListener() {
  50. @Override
  51. public void valueChange(ValueChangeEvent event) {
  52. Object value = event.getProperty().getValue();
  53. TimeZone timeZone;
  54. if (value == nullValue || value == null) {
  55. timeZone = null;
  56. log.log("Change to default time zone "
  57. + TimeZone.getDefault().getID());
  58. } else {
  59. timeZone = TimeZone.getTimeZone((String) value);
  60. log.log("Changed to time zone " + timeZone.getID());
  61. }
  62. dateField.setTimeZone(timeZone);
  63. }
  64. });
  65. Calendar cal = Calendar.getInstance(UTC);
  66. cal.set(2010, 0, 1, 0, 0, 0);
  67. cal.set(Calendar.MILLISECOND, 0);
  68. dateField.setValue(cal.getTime());
  69. dateField.setImmediate(true);
  70. dateField.setTimeZone(cal.getTimeZone());
  71. dateField.setLocale(EN);
  72. dateField.addValueChangeListener(event -> {
  73. Date date = dateField.getValue();
  74. DateFormat format = DateFormat.getDateTimeInstance(DateFormat.SHORT,
  75. DateFormat.LONG, EN);
  76. format.setTimeZone(UTC);
  77. log.log("Date changed to " + format.format(date));
  78. });
  79. addComponent(timezoneSelector);
  80. addComponent(log);
  81. addComponent(dateField);
  82. }
  83. @Override
  84. protected String getDescription() {
  85. return "Tests the operation of the date field with different time zones";
  86. }
  87. @Override
  88. protected Integer getTicketNumber() {
  89. return Integer.valueOf(6066);
  90. }
  91. }