DMYImpl.java 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. /*
  2. * Copyright (c) 2025. Andrew Grant Carrick Software. All rights reserved
  3. *
  4. */
  5. package scot.carricksoftware.grantswriter.data;
  6. import org.jetbrains.annotations.NotNull;
  7. import org.springframework.stereotype.Component;
  8. import scot.carricksoftware.grantswriter.constants.ApplicationConstants;
  9. import java.time.LocalDate;
  10. @Component
  11. public class DMYImpl implements DMY {
  12. @SuppressWarnings("unused")
  13. String day;
  14. @SuppressWarnings("unused")
  15. String month;
  16. @SuppressWarnings("unused")
  17. String year;
  18. @Override
  19. public DMY parse(String string) {
  20. DMY dmy = new DMYImpl();
  21. String[] split = string.split("/");
  22. checkDay(dmy, length2(split[0]));
  23. checkMonth(dmy, length2(split[1]));
  24. checkYear(dmy,length4(split[2]));
  25. return dmy;
  26. }
  27. private void checkDay(DMY dmy, String s) {
  28. try {
  29. int num = Integer.parseInt(s);
  30. if (num < 1 || num > 31) {
  31. dmy.setDay(null);
  32. } else {
  33. dmy.setDay(s);
  34. }
  35. } catch (Exception e) {
  36. dmy.setDay(null);
  37. }
  38. }
  39. private void checkMonth(DMY dmy, String s) {
  40. try {
  41. int num = Integer.parseInt(s);
  42. if (num < 1 || num > 12) {
  43. dmy.setMonth(null);
  44. } else {
  45. dmy.setMonth(s);
  46. }
  47. } catch (Exception e) {
  48. dmy.setDay(null);
  49. }
  50. }
  51. private void checkYear(DMY dmy, String s) {
  52. try {
  53. int num = Integer.parseInt(s);
  54. if (num < 1500 || num > 2030) {
  55. dmy.setYear(null);
  56. } else {
  57. dmy.setYear(s);
  58. }
  59. } catch (Exception e) {
  60. dmy.setDay(null);
  61. }
  62. }
  63. @Override
  64. public String getDay() {
  65. return day;
  66. }
  67. @Override
  68. public String getMonth() {
  69. return month;
  70. }
  71. @Override
  72. public String getYear() {
  73. return year;
  74. }
  75. @Override
  76. public String toString() {
  77. return day + "/" + month + "/" + year;
  78. }
  79. private final String spaces = " ";
  80. private String length2(String string) {
  81. return (string.trim() + spaces).substring(0, 2);
  82. }
  83. private String length4(String string) {
  84. return (string.trim() + spaces).substring(0, 4);
  85. }
  86. @Override
  87. public void setDay(String day) {
  88. this.day = day;
  89. }
  90. @Override
  91. public void setMonth(String month) {
  92. this.month = month;
  93. }
  94. @Override
  95. public void setYear(String year) {
  96. this.year = year;
  97. }
  98. @Override
  99. public int compareTo(@NotNull DMY o) {
  100. LocalDate thisDate = LocalDate.parse(this.getDay() + "/" + this.getMonth() + "/" + this.getYear(), ApplicationConstants.FORMATTER);
  101. LocalDate oDate = LocalDate.parse(o.getDay() + "/" + o.getMonth() + "/" + o.getYear(), ApplicationConstants.FORMATTER);
  102. if (thisDate.isAfter(oDate)) {
  103. return 1;
  104. } if (thisDate.isEqual(oDate)) {
  105. return 0;
  106. }
  107. return -1;
  108. }
  109. }