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.

DateTimeFieldZoneIdFutureSummerDates.java 7.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. package com.vaadin.tests.components.datefield;
  2. import java.time.LocalDate;
  3. import java.time.LocalDateTime;
  4. import java.time.Month;
  5. import java.time.ZoneId;
  6. import java.util.Locale;
  7. import java.util.Set;
  8. import java.util.TreeSet;
  9. import java.util.stream.Stream;
  10. import com.vaadin.server.UserError;
  11. import com.vaadin.server.VaadinRequest;
  12. import com.vaadin.tests.components.AbstractTestUI;
  13. import com.vaadin.ui.ComboBox;
  14. import com.vaadin.ui.DateField;
  15. import com.vaadin.ui.DateTimeField;
  16. public class DateTimeFieldZoneIdFutureSummerDates extends AbstractTestUI {
  17. static final String ZONE_ID = "zoneId";
  18. static final String LOCALE_ID = "localeId";
  19. static final String START_YEAR_DATEFIELD_ID = "startYearDateFieldID";
  20. static final String END_YEAR_DATEFIELD_ID = "endYearDateFieldID";
  21. static final String FIXED_RANGE_DATEFIELD_ID = "fixedRangeDateFieldID";
  22. static final String VARIABLE_RANGE_DATEFIELD_ID = "variableRangeDateFieldID";
  23. static final String INITIAL_ZONE_ID = "CET";
  24. static final Locale INITIAL_LOCALE = Locale.US;
  25. static final LocalDateTime INITIAL_DATE_TIME = LocalDateTime
  26. .of(LocalDate.now().getYear() + 21, Month.JULY, 1, 0, 0);
  27. static final LocalDate INITIAL_START_DATE = LocalDate
  28. .of(INITIAL_DATE_TIME.getYear() - 5, Month.JULY, 1);
  29. static final LocalDate INITIAL_END_DATE = LocalDate
  30. .of(INITIAL_DATE_TIME.getYear() + 5, Month.JULY, 1);
  31. private static final String TARGET_FORMAT_PATTERN = "dd MMM yyyy - z";
  32. private static final String RANGE_FORMAT_PATTERN = "yyyy";
  33. @Override
  34. protected String getTestDescription() {
  35. return "DateTimeField should correctly show the daylight saving (summer time) zone name "
  36. + "of a date that occurs within a user-defined range";
  37. }
  38. @Override
  39. protected Integer getTicketNumber() {
  40. return 11919;
  41. }
  42. @Override
  43. protected void setup(VaadinRequest request) {
  44. final ComboBox<String> zoneIdComboBox = getZoneIdComboBox();
  45. addComponent(zoneIdComboBox);
  46. final ComboBox<Locale> localeIdComboBox = getLocaleIdComboBox();
  47. addComponent(localeIdComboBox);
  48. final DateField transitionsStartYear = getDateField(
  49. START_YEAR_DATEFIELD_ID, INITIAL_START_DATE,
  50. RANGE_FORMAT_PATTERN,
  51. "DST Transitions' start year (inclusive):");
  52. addComponent(transitionsStartYear);
  53. final DateField transitionsEndYear = getDateField(END_YEAR_DATEFIELD_ID,
  54. INITIAL_END_DATE, RANGE_FORMAT_PATTERN,
  55. "DST Transitions' end year (inclusive):");
  56. addComponent(transitionsEndYear);
  57. String captionVarField = "A DateTimeField with custom start"
  58. + " and end years between which DST zone names are displayed:";
  59. final DateTimeField dateTimeFieldWithCustomRange = getDateTimeField(
  60. VARIABLE_RANGE_DATEFIELD_ID, INITIAL_DATE_TIME,
  61. TARGET_FORMAT_PATTERN, INITIAL_LOCALE, INITIAL_ZONE_ID,
  62. captionVarField);
  63. dateTimeFieldWithCustomRange.setDaylightSavingTimeRange(
  64. INITIAL_START_DATE.getYear(), INITIAL_END_DATE.getYear());
  65. addComponent(dateTimeFieldWithCustomRange);
  66. transitionsStartYear.addValueChangeListener(event -> {
  67. int startYear = event.getValue().getYear();
  68. int endYear = transitionsEndYear.getValue().getYear();
  69. if (startYear > endYear) {
  70. showDateRangeError(transitionsStartYear);
  71. } else {
  72. clearErrors(transitionsStartYear, transitionsEndYear);
  73. dateTimeFieldWithCustomRange
  74. .setDaylightSavingTimeRange(startYear, endYear);
  75. }
  76. });
  77. transitionsEndYear.addValueChangeListener(event -> {
  78. int startYear = transitionsStartYear.getValue().getYear();
  79. int endYear = event.getValue().getYear();
  80. if (startYear > endYear) {
  81. showDateRangeError(transitionsEndYear);
  82. } else {
  83. clearErrors(transitionsStartYear, transitionsEndYear);
  84. dateTimeFieldWithCustomRange
  85. .setDaylightSavingTimeRange(startYear, endYear);
  86. }
  87. });
  88. String captionFixedField = "A default DateTimeField (By default, "
  89. + "DST zones are displayed between 1980 and 20 years into the future):";
  90. final DateTimeField dateTimeFieldWithDefaultRange = getDateTimeField(
  91. FIXED_RANGE_DATEFIELD_ID, INITIAL_DATE_TIME,
  92. TARGET_FORMAT_PATTERN, INITIAL_LOCALE, INITIAL_ZONE_ID,
  93. captionFixedField);
  94. addComponent(dateTimeFieldWithDefaultRange);
  95. zoneIdComboBox.addValueChangeListener(event -> {
  96. final String value = event.getValue();
  97. if (value == null) {
  98. dateTimeFieldWithCustomRange.setZoneId(null);
  99. dateTimeFieldWithDefaultRange.setZoneId(null);
  100. } else {
  101. dateTimeFieldWithCustomRange.setZoneId(ZoneId.of(value));
  102. dateTimeFieldWithDefaultRange.setZoneId(ZoneId.of(value));
  103. }
  104. });
  105. localeIdComboBox.addValueChangeListener(event -> {
  106. dateTimeFieldWithCustomRange.setLocale(event.getValue());
  107. dateTimeFieldWithDefaultRange.setLocale(event.getValue());
  108. });
  109. }
  110. private DateTimeField getDateTimeField(String id,
  111. LocalDateTime initialDateTime, String dateFormat, Locale locale,
  112. String zoneId, String caption) {
  113. final DateTimeField dateTimeField = new DateTimeField();
  114. dateTimeField.setId(id);
  115. dateTimeField.setValue(initialDateTime);
  116. dateTimeField.setDateFormat(dateFormat);
  117. dateTimeField.setLocale(locale);
  118. dateTimeField.setZoneId(ZoneId.of(zoneId));
  119. dateTimeField.setCaption(caption);
  120. return dateTimeField;
  121. }
  122. private DateField getDateField(String id, LocalDate initialDate,
  123. String dateFormat, String caption) {
  124. final DateField dateField = new DateField();
  125. dateField.setId(id);
  126. dateField.setDateFormat(dateFormat);
  127. dateField.setCaption(caption);
  128. dateField.setValue(initialDate);
  129. return dateField;
  130. }
  131. private void clearErrors(DateField transitionStartyear,
  132. DateField transitionEndyear) {
  133. transitionStartyear.setComponentError(null);
  134. transitionEndyear.setComponentError(null);
  135. }
  136. private void showDateRangeError(DateField dateField) {
  137. dateField.setComponentError(new UserError(
  138. "Start year must be less than or equal to end year!"));
  139. }
  140. private ComboBox<Locale> getLocaleIdComboBox() {
  141. final ComboBox<Locale> localeIdComboBox = new ComboBox<>();
  142. localeIdComboBox.setId(LOCALE_ID);
  143. final Stream<Locale> localeStream = Stream
  144. .of(Locale.getAvailableLocales())
  145. .sorted((l1, l2) -> l1.toString().compareTo(l2.toString()));
  146. localeIdComboBox.setItems(localeStream);
  147. localeIdComboBox.setValue(INITIAL_LOCALE);
  148. localeIdComboBox.setCaption("Locale:");
  149. return localeIdComboBox;
  150. }
  151. private ComboBox<String> getZoneIdComboBox() {
  152. final ComboBox<String> zoneIdComboBox = new ComboBox<>();
  153. zoneIdComboBox.setId(ZONE_ID);
  154. final Set<String> zoneIdSet = new TreeSet<>(
  155. ZoneId.getAvailableZoneIds());
  156. zoneIdComboBox.setItems(zoneIdSet);
  157. zoneIdComboBox.setValue(INITIAL_ZONE_ID);
  158. zoneIdComboBox.setCaption("Zone:");
  159. return zoneIdComboBox;
  160. }
  161. }