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.

DateFieldRanges.java 7.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223
  1. package com.vaadin.tests.components.datefield;
  2. import java.time.LocalDate;
  3. import java.util.Calendar;
  4. import java.util.Date;
  5. import java.util.Locale;
  6. import com.vaadin.server.VaadinRequest;
  7. import com.vaadin.shared.ui.MarginInfo;
  8. import com.vaadin.shared.ui.datefield.Resolution;
  9. import com.vaadin.tests.components.AbstractReindeerTestUI;
  10. import com.vaadin.tests.components.TestDateField;
  11. import com.vaadin.ui.AbstractDateField;
  12. import com.vaadin.ui.Button;
  13. import com.vaadin.ui.Button.ClickEvent;
  14. import com.vaadin.ui.GridLayout;
  15. import com.vaadin.ui.HorizontalLayout;
  16. import com.vaadin.ui.InlineDateField;
  17. import com.vaadin.ui.Label;
  18. import com.vaadin.ui.VerticalLayout;
  19. import com.vaadin.v7.data.Property.ValueChangeEvent;
  20. import com.vaadin.v7.data.Property.ValueChangeListener;
  21. import com.vaadin.v7.ui.NativeSelect;
  22. public class DateFieldRanges extends AbstractReindeerTestUI {
  23. @Override
  24. protected Integer getTicketNumber() {
  25. return 6241;
  26. }
  27. private Label label = new Label();
  28. private NativeSelect resoSelect = new NativeSelect("Resolution");
  29. private AbstractDateField fromRange = new TestDateField("Range start");
  30. private AbstractDateField toRange = new TestDateField("Range end");
  31. private AbstractDateField valueDF = new TestDateField("Value");
  32. private Button recreate = new Button("Recreate static datefields");
  33. private Button clearRangeButton = new Button("Clear range");
  34. private GridLayout currentStaticContainer;
  35. private AbstractDateField inlineDynamicDateField;
  36. private AbstractDateField dynamicDateField;
  37. private Calendar createCalendar() {
  38. Calendar c = Calendar.getInstance();
  39. c.set(2013, 3, 26, 6, 1, 12);
  40. return c;
  41. }
  42. private Date newDate() {
  43. return createCalendar().getTime();
  44. }
  45. private void initializeControlFields() {
  46. resoSelect.addItem(Resolution.DAY);
  47. resoSelect.addItem(Resolution.MONTH);
  48. resoSelect.addItem(Resolution.YEAR);
  49. resoSelect.setImmediate(true);
  50. resoSelect.setValue(Resolution.DAY);
  51. resoSelect.addValueChangeListener(new ValueChangeListener() {
  52. @Override
  53. public void valueChange(ValueChangeEvent event) {
  54. Resolution r = (Resolution) resoSelect.getValue();
  55. inlineDynamicDateField.setResolution(r);
  56. dynamicDateField.setResolution(r);
  57. }
  58. });
  59. fromRange.setValue(null);
  60. fromRange.addValueChangeListener(event -> {
  61. inlineDynamicDateField.setRangeStart(fromRange.getValue());
  62. dynamicDateField.setRangeStart(fromRange.getValue());
  63. });
  64. toRange.setValue(null);
  65. toRange.addValueChangeListener(event -> {
  66. inlineDynamicDateField.setRangeEnd(toRange.getValue());
  67. dynamicDateField.setRangeEnd(toRange.getValue());
  68. });
  69. valueDF.setValue(null);
  70. valueDF.addValueChangeListener(event -> {
  71. inlineDynamicDateField.setValue(valueDF.getValue());
  72. dynamicDateField.setValue(valueDF.getValue());
  73. });
  74. recreate.addClickListener(new Button.ClickListener() {
  75. @Override
  76. public void buttonClick(ClickEvent event) {
  77. GridLayout newContainer = createStaticFields();
  78. replaceComponent(currentStaticContainer, newContainer);
  79. currentStaticContainer = newContainer;
  80. }
  81. });
  82. clearRangeButton.addClickListener(new Button.ClickListener() {
  83. @Override
  84. public void buttonClick(ClickEvent event) {
  85. fromRange.setValue(null);
  86. toRange.setValue(null);
  87. }
  88. });
  89. Calendar startCal = createCalendar();
  90. Calendar endCal = createCalendar();
  91. endCal.add(Calendar.DATE, 30);
  92. dynamicDateField = createDateField(startCal.getTime(), endCal.getTime(),
  93. null, Resolution.DAY, false);
  94. inlineDynamicDateField = createDateField(startCal.getTime(),
  95. endCal.getTime(), null, Resolution.DAY, true);
  96. resoSelect.setId("resoSelect");
  97. fromRange.setId("fromRange");
  98. toRange.setId("toRange");
  99. valueDF.setId("valueDF");
  100. recreate.setId("recreate");
  101. clearRangeButton.setId("clearRangeButton");
  102. dynamicDateField.setId("dynamicDateField");
  103. inlineDynamicDateField.setId("inlineDynamicDateField");
  104. }
  105. @Override
  106. protected void setup(VaadinRequest request) {
  107. setLocale(new Locale("en", "US"));
  108. getLayout().setWidth(100, Unit.PERCENTAGE);
  109. getLayout().setHeight(null);
  110. getLayout().setMargin(new MarginInfo(true, false, false, false));
  111. getLayout().setSpacing(true);
  112. initializeControlFields();
  113. GridLayout gl = new GridLayout(2, 2);
  114. gl.setSpacing(true);
  115. gl.addComponent(dynamicDateField);
  116. gl.addComponent(inlineDynamicDateField);
  117. HorizontalLayout hl = new HorizontalLayout();
  118. hl.setSpacing(true);
  119. hl.addComponent(resoSelect);
  120. hl.addComponent(fromRange);
  121. hl.addComponent(toRange);
  122. hl.addComponent(valueDF);
  123. hl.addComponent(recreate);
  124. hl.addComponent(clearRangeButton);
  125. addComponent(hl);
  126. addComponent(new Label("Dynamic DateFields"));
  127. addComponent(gl);
  128. currentStaticContainer = createStaticFields();
  129. addComponent(new Label("Static DateFields"));
  130. addComponent(currentStaticContainer);
  131. addComponent(label);
  132. }
  133. private GridLayout createStaticFields() {
  134. Calendar startCal = createCalendar();
  135. Calendar endCal = createCalendar();
  136. endCal.add(Calendar.DATE, 30);
  137. GridLayout gl = new GridLayout(2, 2);
  138. gl.setSpacing(true);
  139. AbstractDateField df = createDateField(startCal.getTime(),
  140. endCal.getTime(), null, Resolution.DAY, false);
  141. gl.addComponent(df);
  142. AbstractDateField inline = createDateField(startCal.getTime(),
  143. endCal.getTime(), null, Resolution.DAY, true);
  144. gl.addComponent(inline);
  145. inline.setId("staticInline");
  146. VerticalLayout vl = new VerticalLayout();
  147. return gl;
  148. }
  149. private AbstractDateField createDateField(Date rangeStart, Date rangeEnd,
  150. Date value, Resolution resolution, boolean inline) {
  151. AbstractDateField df = null;
  152. if (inline) {
  153. df = new InlineDateField();
  154. } else {
  155. df = new TestDateField();
  156. }
  157. final AbstractDateField gg = df;
  158. updateValuesForDateField(df);
  159. df.addValueChangeListener(event -> {
  160. label.setValue((gg.getValue() == null ? "Nothing"
  161. : gg.getValue().toString()) + " selected. isValid: "
  162. + (gg.getErrorMessage() != null));
  163. });
  164. return df;
  165. }
  166. @Override
  167. protected String getTestDescription() {
  168. return "Not defined yet";
  169. }
  170. private void updateValuesForDateField(AbstractDateField df) {
  171. LocalDate fromVal = fromRange.getValue();
  172. LocalDate toVal = toRange.getValue();
  173. LocalDate value = valueDF.getValue();
  174. Resolution r = (Resolution) resoSelect.getValue();
  175. df.setValue(value);
  176. df.setResolution(r);
  177. df.setRangeStart(fromVal);
  178. df.setRangeEnd(toVal);
  179. }
  180. }