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.

DateFieldUnparsableDateString.java 3.2KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. package com.vaadin.tests.components.datefield;
  2. import com.vaadin.data.Result;
  3. import com.vaadin.server.VaadinRequest;
  4. import com.vaadin.tests.components.AbstractTestUI;
  5. import com.vaadin.ui.DateField;
  6. import java.time.LocalDate;
  7. import java.time.Year;
  8. import java.time.format.DateTimeFormatterBuilder;
  9. import java.time.temporal.ChronoField;
  10. public class DateFieldUnparsableDateString extends AbstractTestUI {
  11. @Override
  12. protected Integer getTicketNumber() {
  13. return 10681;
  14. }
  15. @Override
  16. protected void setup(VaadinRequest request) {
  17. DateField dateField1 = new ParsableDateField();
  18. dateField1.setDateFormat("dd.MM.yyyy");
  19. addComponent(dateField1);
  20. }
  21. public class ParsableDateField extends DateField {
  22. @Override
  23. protected Result<LocalDate> handleUnparsableDateString(
  24. String dateString) {
  25. try {
  26. String parseableString = dateString == null ? ""
  27. : dateString.replaceAll(" ", "");
  28. if (parseableString.length() % 2 == 1) {
  29. parseableString = "0" + parseableString;
  30. }
  31. int cutYear = Year.now().getValue() - 80;
  32. LocalDate today = LocalDate.now();
  33. switch (parseableString.length()) {
  34. case 2:
  35. // Only day !!! dd
  36. return Result.ok(LocalDate.parse(parseableString,
  37. new DateTimeFormatterBuilder().appendPattern("dd")
  38. .parseDefaulting(ChronoField.MONTH_OF_YEAR,
  39. today.getMonthValue())
  40. .parseDefaulting(ChronoField.YEAR,
  41. today.getYear())
  42. .toFormatter()));
  43. case 4:
  44. // Only day + month ddMM
  45. return Result
  46. .ok(LocalDate.parse(parseableString,
  47. new DateTimeFormatterBuilder()
  48. .appendPattern("ddMM")
  49. .parseDefaulting(ChronoField.YEAR,
  50. today.getYear())
  51. .toFormatter()));
  52. case 6:
  53. // Short year ddMMyy
  54. return Result.ok(LocalDate.parse(parseableString,
  55. new DateTimeFormatterBuilder().appendPattern("ddMM")
  56. .appendValueReduced(ChronoField.YEAR, 2, 2,
  57. cutYear)
  58. .toFormatter()));
  59. case 8:
  60. // Long year ddMMyyyy
  61. return Result.ok(LocalDate.parse(parseableString,
  62. new DateTimeFormatterBuilder()
  63. .appendPattern("ddMMyyyy").toFormatter()));
  64. default:
  65. break;
  66. }
  67. } catch (Exception e) {
  68. }
  69. return super.handleUnparsableDateString(dateString);
  70. }
  71. }
  72. }